summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--CMakeLists.txt217
-rw-r--r--cmake/Modules/CMakeParseArgumentsCopy.cmake138
-rw-r--r--cmake/Modules/FindALSA.cmake36
-rw-r--r--cmake/Modules/FindCppUnit.cmake36
-rw-r--r--cmake/Modules/FindFFTW3f.cmake29
-rw-r--r--cmake/Modules/FindGSL.cmake146
-rw-r--r--cmake/Modules/FindGit.cmake46
-rw-r--r--cmake/Modules/FindJack.cmake87
-rw-r--r--cmake/Modules/FindOSS.cmake46
-rw-r--r--cmake/Modules/FindPortaudio.cmake107
-rw-r--r--cmake/Modules/FindQwt.cmake13
-rw-r--r--cmake/Modules/FindUHD.cmake28
-rw-r--r--cmake/Modules/GrBoost.cmake62
-rw-r--r--cmake/Modules/GrComponent.cmake114
-rw-r--r--cmake/Modules/GrMiscUtils.cmake86
-rw-r--r--cmake/Modules/GrPackage.cmake134
-rw-r--r--cmake/Modules/GrPlatform.cmake46
-rw-r--r--cmake/Modules/GrPython.cmake189
-rw-r--r--cmake/Modules/GrSwig.cmake136
-rw-r--r--cmake/Modules/GrTest.cmake137
-rw-r--r--cmake/Modules/GrVersion.cmake73
-rw-r--r--cmake/Modules/LibFindMacros.cmake99
-rw-r--r--cmake/cmake_uninstall.cmake.in23
-rw-r--r--cmake/msvc/config.h55
-rw-r--r--cmake/msvc/inttypes.h301
-rw-r--r--cmake/msvc/stdint.h251
-rw-r--r--cmake/msvc/sys/time.h69
-rw-r--r--cmake/msvc/unistd.h10
-rwxr-xr-xdebian/postinst2
-rwxr-xr-xdebian/prerm2
-rw-r--r--docs/CMakeLists.txt50
-rw-r--r--docs/doxygen/CMakeLists.txt51
-rw-r--r--gnuradio-core/CMakeLists.txt144
-rw-r--r--gnuradio-core/src/lib/CMakeLists.txt106
-rw-r--r--gnuradio-core/src/lib/ConfigChecks.cmake212
-rw-r--r--gnuradio-core/src/lib/filter/CMakeLists.txt351
-rw-r--r--gnuradio-core/src/lib/filter/ccomplex_dotprod_generic.h4
-rw-r--r--gnuradio-core/src/lib/filter/complex_dotprod_generic.h4
-rw-r--r--gnuradio-core/src/lib/filter/dotprod_fff_altivec.h1
-rw-r--r--gnuradio-core/src/lib/filter/dotprod_fff_armv7_a.h1
-rwxr-xr-xgnuradio-core/src/lib/filter/generate_gr_fir_util.py5
-rw-r--r--gnuradio-core/src/lib/filter/gr_adaptive_fir_ccc.h3
-rw-r--r--gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.h3
-rw-r--r--gnuradio-core/src/lib/filter/gr_altivec.h5
-rw-r--r--gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.h63
-rw-r--r--gnuradio-core/src/lib/filter/gr_cpu.h6
-rw-r--r--gnuradio-core/src/lib/filter/gr_dc_blocker_cc.h9
-rw-r--r--gnuradio-core/src/lib/filter/gr_dc_blocker_ff.h9
-rw-r--r--gnuradio-core/src/lib/filter/gr_fft_filter_ccc.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_fft_filter_fff.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_filter_delay_fc.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_XXX.h.t3
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_XXX_generic.h.t3
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_ccc_simd.h3
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_ccc_x86.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_ccf_simd.h3
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_ccf_x86.h5
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_fcc_simd.h3
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_fcc_x86.h5
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_fff_altivec.h3
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_fff_armv7_a.h3
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_fff_simd.h3
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_fff_x86.h5
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_filter_XXX.h.t7
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_fsf_simd.h3
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_fsf_x86.h5
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_scc_simd.h3
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_scc_x86.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_sysconfig_armv7_a.h3
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.h3
-rw-r--r--gnuradio-core/src/lib/filter/gr_fir_sysconfig_x86.h3
-rw-r--r--gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_XXX.h.t7
-rw-r--r--gnuradio-core/src/lib/filter/gr_goertzel_fc.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_hilbert_fc.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_iir_filter_ffd.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_interp_fir_filter_XXX.h.t7
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_fff.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_clock_sync_fff.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_rational_resampler_base_XXX.h.t7
-rw-r--r--gnuradio-core/src/lib/filter/gr_rotator.h3
-rw-r--r--gnuradio-core/src/lib/filter/gr_sincos.h6
-rw-r--r--gnuradio-core/src/lib/filter/gr_single_pole_iir.h1
-rw-r--r--gnuradio-core/src/lib/filter/gr_single_pole_iir_filter_cc.h7
-rw-r--r--gnuradio-core/src/lib/filter/gr_single_pole_iir_filter_ff.h7
-rw-r--r--gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.h3
-rw-r--r--gnuradio-core/src/lib/filter/gri_fft_filter_ccc_sse.h3
-rw-r--r--gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.h3
-rw-r--r--gnuradio-core/src/lib/filter/gri_fft_filter_fff_sse.h3
-rw-r--r--gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_XXX.h.t3
-rw-r--r--gnuradio-core/src/lib/filter/gri_goertzel.h3
-rw-r--r--gnuradio-core/src/lib/filter/gri_iir.h1
-rw-r--r--gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator.h3
-rw-r--r--gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator_cc.h3
-rw-r--r--gnuradio-core/src/lib/filter/qa_filter.h3
-rw-r--r--gnuradio-core/src/lib/general/CMakeLists.txt294
-rw-r--r--gnuradio-core/src/lib/general/complex_vec_test.h17
-rw-r--r--gnuradio-core/src/lib/general/gr_additive_scrambler_bb.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_agc2_cc.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_agc2_ff.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_agc_cc.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_agc_ff.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.h9
-rw-r--r--gnuradio-core/src/lib/general/gr_annotator_1to1.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_annotator_alltoall.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_bin_statistics_f.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_burst_tagger.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_bytes_to_syms.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_char_to_float.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_check_counting_s.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_check_lfsr_32k_s.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_circular_file.h6
-rw-r--r--gnuradio-core/src/lib/general/gr_complex_to_interleaved_short.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_complex_to_xxx.h37
-rw-r--r--gnuradio-core/src/lib/general/gr_conjugate_cc.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_constants.h11
-rw-r--r--gnuradio-core/src/lib/general/gr_constellation_decoder_cb.h66
-rw-r--r--gnuradio-core/src/lib/general/gr_copy.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_core_api.h33
-rw-r--r--gnuradio-core/src/lib/general/gr_correlate_access_code_tag_bb.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_costas_loop_cc.h146
-rw-r--r--gnuradio-core/src/lib/general/gr_count_bits.h10
-rw-r--r--gnuradio-core/src/lib/general/gr_cpfsk_bc.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_cpm.cc8
-rw-r--r--gnuradio-core/src/lib/general/gr_cpm.h3
-rw-r--r--gnuradio-core/src/lib/general/gr_ctcss_squelch_ff.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.h9
-rw-r--r--gnuradio-core/src/lib/general/gr_deinterleave.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_delay.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_descrambler_bb.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_diff_decoder_bb.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_diff_encoder_bb.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_diff_phasor_cc.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_dpll_bb.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_expj.h1
-rw-r--r--gnuradio-core/src/lib/general/gr_fake_channel_coder_pp.h13
-rw-r--r--gnuradio-core/src/lib/general/gr_feedforward_agc_cc.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_feval.h17
-rw-r--r--gnuradio-core/src/lib/general/gr_fft_vcc.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_fft_vfc.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_firdes.h3
-rw-r--r--gnuradio-core/src/lib/general/gr_float_to_char.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_float_to_complex.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_float_to_short.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_float_to_uchar.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_fmdet_cf.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_framer_sink_1.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_frequency_modulator_fc.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_fxpt.h5
-rw-r--r--gnuradio-core/src/lib/general/gr_fxpt_nco.h3
-rw-r--r--gnuradio-core/src/lib/general/gr_fxpt_vco.h3
-rw-r--r--gnuradio-core/src/lib/general/gr_glfsr_source_b.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_glfsr_source_f.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_head.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_int_to_float.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_interleave.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_interleaved_short_to_complex.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_iqcomp_cc.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_keep_one_in_n.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_kludge_copy.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_lfsr_32k_source_s.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_lms_dfe_cc.h65
-rw-r--r--gnuradio-core/src/lib/general/gr_lms_dfe_ff.h63
-rw-r--r--gnuradio-core/src/lib/general/gr_log2_const.h1
-rw-r--r--gnuradio-core/src/lib/general/gr_map_bb.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_math.h3
-rw-r--r--gnuradio-core/src/lib/general/gr_misc.h9
-rw-r--r--gnuradio-core/src/lib/general/gr_nlog10_ff.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_nop.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_null_sink.h8
-rw-r--r--gnuradio-core/src/lib/general/gr_null_source.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_ofdm_frame_sink2.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_pa_2x2_phase_combiner.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_packet_sink.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_peak_detector2_fb.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_phase_modulator_fc.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_pll_carriertracking_cc.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_pll_freqdet_cf.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_pll_refout_cc.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_pn_correlator_cc.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_prefs.h3
-rw-r--r--gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_c.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_cf.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_f.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_probe_density_b.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_probe_signal_f.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_pwr_squelch_cc.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_pwr_squelch_ff.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_quadrature_demod_cf.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_rail_ff.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_random.h3
-rw-r--r--gnuradio-core/src/lib/general/gr_regenerate_bb.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_remez.h3
-rw-r--r--gnuradio-core/src/lib/general/gr_repeat.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_reverse.h1
-rw-r--r--gnuradio-core/src/lib/general/gr_rms_cf.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_rms_ff.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_scrambler_bb.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_short_to_float.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_simple_correlator.cc9
-rw-r--r--gnuradio-core/src/lib/general/gr_simple_correlator.h8
-rw-r--r--gnuradio-core/src/lib/general/gr_simple_framer.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_simple_squelch_cc.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_skiphead.h12
-rw-r--r--gnuradio-core/src/lib/general/gr_squash_ff.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_squelch_base_cc.h3
-rw-r--r--gnuradio-core/src/lib/general/gr_squelch_base_ff.h3
-rw-r--r--gnuradio-core/src/lib/general/gr_stream_mux.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_stream_to_streams.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_stream_to_vector.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_streams_to_stream.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_streams_to_vector.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_stretch_ff.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_test.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_threshold_ff.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_throttle.h5
-rw-r--r--gnuradio-core/src/lib/general/gr_transcendental.h5
-rw-r--r--gnuradio-core/src/lib/general/gr_uchar_to_float.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_vco_f.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_vector_to_stream.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_vector_to_streams.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_wavelet_ff.h7
-rw-r--r--gnuradio-core/src/lib/general/gr_wvps_ff.h7
-rw-r--r--gnuradio-core/src/lib/general/gri_agc2_cc.h3
-rw-r--r--gnuradio-core/src/lib/general/gri_agc2_ff.h3
-rw-r--r--gnuradio-core/src/lib/general/gri_agc_cc.h3
-rw-r--r--gnuradio-core/src/lib/general/gri_agc_ff.h3
-rw-r--r--gnuradio-core/src/lib/general/gri_char_to_float.h6
-rw-r--r--gnuradio-core/src/lib/general/gri_control_loop.cc4
-rw-r--r--gnuradio-core/src/lib/general/gri_control_loop.h4
-rw-r--r--gnuradio-core/src/lib/general/gri_debugger_hook.h6
-rw-r--r--gnuradio-core/src/lib/general/gri_fft.cc13
-rw-r--r--gnuradio-core/src/lib/general/gri_fft.h9
-rw-r--r--gnuradio-core/src/lib/general/gri_float_to_char.h5
-rw-r--r--gnuradio-core/src/lib/general/gri_float_to_short.h5
-rw-r--r--gnuradio-core/src/lib/general/gri_float_to_uchar.h5
-rw-r--r--gnuradio-core/src/lib/general/gri_glfsr.h6
-rw-r--r--gnuradio-core/src/lib/general/gri_interleaved_short_to_complex.h3
-rw-r--r--gnuradio-core/src/lib/general/gri_lfsr.h3
-rw-r--r--gnuradio-core/src/lib/general/gri_lfsr_15_1_0.h6
-rw-r--r--gnuradio-core/src/lib/general/gri_lfsr_32k.h3
-rw-r--r--gnuradio-core/src/lib/general/gri_short_to_float.h6
-rw-r--r--gnuradio-core/src/lib/general/gri_uchar_to_float.h6
-rw-r--r--gnuradio-core/src/lib/general/malloc16.c1
-rw-r--r--gnuradio-core/src/lib/general/malloc16.h8
-rw-r--r--gnuradio-core/src/lib/general/qa_general.h3
-rw-r--r--gnuradio-core/src/lib/general/qa_gri_lfsr.cc9
-rw-r--r--gnuradio-core/src/lib/gengen/CMakeLists.txt179
-rw-r--r--gnuradio-core/src/lib/gengen/gr_add_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_add_const_XX.h.t7
-rw-r--r--[-rwxr-xr-x]gnuradio-core/src/lib/gengen/gr_add_const_vXX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_and_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_and_const_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_argmax_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_divide_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_integrate_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_max_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_moving_average_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_multiply_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_multiply_const_XX.h.t7
-rw-r--r--[-rwxr-xr-x]gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_mute_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_not_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_or_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_peak_detector_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_sample_and_hold_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_sig_source_X.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_sub_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_vector_sink_X.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_vector_source_X.h.t7
-rw-r--r--gnuradio-core/src/lib/gengen/gr_xor_XX.h.t7
-rw-r--r--gnuradio-core/src/lib/hier/CMakeLists.txt42
-rw-r--r--gnuradio-core/src/lib/hier/gr_channel_model.h7
-rw-r--r--gnuradio-core/src/lib/io/CMakeLists.txt108
-rw-r--r--gnuradio-core/src/lib/io/gr_file_descriptor_sink.h7
-rw-r--r--gnuradio-core/src/lib/io/gr_file_descriptor_source.h7
-rw-r--r--gnuradio-core/src/lib/io/gr_file_sink.h7
-rw-r--r--gnuradio-core/src/lib/io/gr_file_sink_base.h3
-rw-r--r--gnuradio-core/src/lib/io/gr_file_source.h7
-rw-r--r--gnuradio-core/src/lib/io/gr_histo_sink_f.h7
-rw-r--r--gnuradio-core/src/lib/io/gr_message_sink.h7
-rw-r--r--gnuradio-core/src/lib/io/gr_message_source.h11
-rw-r--r--gnuradio-core/src/lib/io/gr_oscope_guts.h3
-rw-r--r--gnuradio-core/src/lib/io/gr_oscope_sink_f.h7
-rw-r--r--gnuradio-core/src/lib/io/gr_oscope_sink_x.h3
-rw-r--r--gnuradio-core/src/lib/io/gr_tagged_file_sink.h7
-rw-r--r--gnuradio-core/src/lib/io/gr_udp_sink.h7
-rw-r--r--gnuradio-core/src/lib/io/gr_udp_source.h7
-rw-r--r--gnuradio-core/src/lib/io/gr_wavfile_sink.h7
-rw-r--r--gnuradio-core/src/lib/io/gr_wavfile_source.h7
-rw-r--r--gnuradio-core/src/lib/io/gri_wavfile.h1
-rw-r--r--gnuradio-core/src/lib/io/i2c.h3
-rw-r--r--gnuradio-core/src/lib/io/i2c_bbio.h3
-rw-r--r--gnuradio-core/src/lib/io/i2c_bbio_pp.h7
-rw-r--r--gnuradio-core/src/lib/io/i2c_bitbang.h7
-rw-r--r--gnuradio-core/src/lib/io/microtune_4702.h3
-rw-r--r--gnuradio-core/src/lib/io/microtune_4702_eval_board.h3
-rw-r--r--gnuradio-core/src/lib/io/microtune_4937.h3
-rw-r--r--gnuradio-core/src/lib/io/microtune_4937_eval_board.h3
-rw-r--r--gnuradio-core/src/lib/io/microtune_xxxx.h3
-rw-r--r--gnuradio-core/src/lib/io/microtune_xxxx_eval_board.h3
-rw-r--r--gnuradio-core/src/lib/io/ppio.h5
-rw-r--r--gnuradio-core/src/lib/io/ppio_ppdev.h5
-rw-r--r--gnuradio-core/src/lib/io/sdr_1000.h3
-rw-r--r--gnuradio-core/src/lib/missing/CMakeLists.txt32
-rw-r--r--gnuradio-core/src/lib/reed-solomon/CMakeLists.txt62
-rw-r--r--gnuradio-core/src/lib/reed-solomon/char.h11
-rw-r--r--gnuradio-core/src/lib/reed-solomon/decode_rs.c9
-rw-r--r--gnuradio-core/src/lib/reed-solomon/encode_rs.c1
-rw-r--r--gnuradio-core/src/lib/reed-solomon/exercise.c9
-rw-r--r--gnuradio-core/src/lib/reed-solomon/fixed.h6
-rw-r--r--gnuradio-core/src/lib/reed-solomon/int.h11
-rw-r--r--gnuradio-core/src/lib/reed-solomon/rs.h21
-rw-r--r--gnuradio-core/src/lib/runtime/CMakeLists.txt162
-rw-r--r--gnuradio-core/src/lib/runtime/gr_basic_block.h5
-rw-r--r--gnuradio-core/src/lib/runtime/gr_block.h5
-rw-r--r--gnuradio-core/src/lib/runtime/gr_block_detail.h11
-rw-r--r--gnuradio-core/src/lib/runtime/gr_block_executor.cc6
-rw-r--r--gnuradio-core/src/lib/runtime/gr_block_executor.h3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_buffer.h19
-rw-r--r--gnuradio-core/src/lib/runtime/gr_dispatcher.h9
-rw-r--r--gnuradio-core/src/lib/runtime/gr_error_handler.h7
-rw-r--r--gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h7
-rw-r--r--gnuradio-core/src/lib/runtime/gr_flowgraph.h11
-rw-r--r--gnuradio-core/src/lib/runtime/gr_hier_block2.h7
-rw-r--r--gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_io_signature.h13
-rw-r--r--gnuradio-core/src/lib/runtime/gr_local_sighandler.h5
-rw-r--r--gnuradio-core/src/lib/runtime/gr_message.h13
-rw-r--r--gnuradio-core/src/lib/runtime/gr_msg_accepter.h3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_msg_handler.h3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_msg_queue.h5
-rw-r--r--gnuradio-core/src/lib/runtime/gr_pagesize.h6
-rw-r--r--gnuradio-core/src/lib/runtime/gr_preferences.h6
-rw-r--r--gnuradio-core/src/lib/runtime/gr_realtime.h3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_runtime_types.h1
-rw-r--r--gnuradio-core/src/lib/runtime/gr_scheduler.h3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_scheduler_sts.h3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_scheduler_tpb.h3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_select_handler.h3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.cc6
-rw-r--r--gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.h7
-rw-r--r--gnuradio-core/src/lib/runtime/gr_sptr_magic.h3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_sync_block.h3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_sync_decimator.h3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_sync_interpolator.h3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_sys_paths.h6
-rw-r--r--gnuradio-core/src/lib/runtime/gr_timer.h9
-rw-r--r--gnuradio-core/src/lib/runtime/gr_top_block.h7
-rw-r--r--gnuradio-core/src/lib/runtime/gr_top_block_impl.h3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_tpb_detail.h3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_tpb_thread_body.h3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_types.h1
-rw-r--r--gnuradio-core/src/lib/runtime/gr_unittests.h2
-rw-r--r--gnuradio-core/src/lib/runtime/gr_vmcircbuf.cc25
-rw-r--r--gnuradio-core/src/lib/runtime/gr_vmcircbuf.h7
-rw-r--r--gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.cc13
-rw-r--r--gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.h5
-rw-r--r--gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_shm_open.h5
-rw-r--r--gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.h5
-rw-r--r--gnuradio-core/src/lib/runtime/gr_vmcircbuf_sysv_shm.h5
-rw-r--r--gnuradio-core/src/lib/runtime/qa_runtime.h3
-rw-r--r--gnuradio-core/src/lib/swig/CMakeLists.txt93
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio_core_general.i2
-rw-r--r--gnuradio-core/src/lib/viterbi/CMakeLists.txt63
-rw-r--r--gnuradio-core/src/lib/viterbi/Makefile.am2
-rw-r--r--gnuradio-core/src/lib/viterbi/metrics.c3
-rw-r--r--gnuradio-core/src/lib/viterbi/viterbi.h14
-rw-r--r--gnuradio-core/src/python/build_utils.py2
-rw-r--r--gnuradio-core/src/python/gnuradio/CMakeLists.txt39
-rw-r--r--gnuradio-core/src/python/gnuradio/blks2/CMakeLists.txt26
-rw-r--r--gnuradio-core/src/python/gnuradio/blks2impl/CMakeLists.txt46
-rw-r--r--gnuradio-core/src/python/gnuradio/gr/CMakeLists.txt52
-rw-r--r--gnuradio-core/src/python/gnuradio/gru/CMakeLists.txt26
-rw-r--r--gnuradio-core/src/python/gnuradio/gruimpl/CMakeLists.txt38
-rw-r--r--gnuradio-core/src/tests/CMakeLists.txt69
-rw-r--r--gr-atsc/CMakeLists.txt106
-rw-r--r--gr-atsc/src/lib/CMakeLists.txt235
-rw-r--r--gr-atsc/src/lib/Makefile.am1
-rw-r--r--gr-atsc/src/lib/atsc_api.h33
-rw-r--r--gr-atsc/src/lib/atsc_bit_timing_loop.h7
-rw-r--r--gr-atsc/src/lib/atsc_deinterleaver.h7
-rw-r--r--gr-atsc/src/lib/atsc_depad.h7
-rw-r--r--gr-atsc/src/lib/atsc_derandomizer.h7
-rw-r--r--gr-atsc/src/lib/atsc_ds_to_softds.h7
-rw-r--r--gr-atsc/src/lib/atsc_equalizer.h7
-rw-r--r--gr-atsc/src/lib/atsc_field_sync_demux.h7
-rw-r--r--gr-atsc/src/lib/atsc_field_sync_mux.h7
-rw-r--r--gr-atsc/src/lib/atsc_fpll.h7
-rw-r--r--gr-atsc/src/lib/atsc_fs_checker.h5
-rw-r--r--gr-atsc/src/lib/atsc_interleaver.h7
-rw-r--r--gr-atsc/src/lib/atsc_pad.h7
-rw-r--r--gr-atsc/src/lib/atsc_randomizer.h7
-rw-r--r--gr-atsc/src/lib/atsc_rs_decoder.h7
-rw-r--r--gr-atsc/src/lib/atsc_rs_encoder.h7
-rw-r--r--gr-atsc/src/lib/atsc_trellis_encoder.h7
-rw-r--r--gr-atsc/src/lib/atsc_viterbi_decoder.h7
-rw-r--r--gr-atsc/src/lib/atsci_basic_trellis_encoder.h3
-rw-r--r--gr-atsc/src/lib/atsci_data_interleaver.h5
-rw-r--r--gr-atsc/src/lib/atsci_equalizer.h3
-rw-r--r--gr-atsc/src/lib/atsci_equalizer_lms.h3
-rw-r--r--gr-atsc/src/lib/atsci_equalizer_lms2.h3
-rw-r--r--gr-atsc/src/lib/atsci_equalizer_nop.h3
-rw-r--r--gr-atsc/src/lib/atsci_exp2_lp.h3
-rw-r--r--gr-atsc/src/lib/atsci_fake_single_viterbi.h4
-rw-r--r--gr-atsc/src/lib/atsci_fs_checker.h3
-rw-r--r--gr-atsc/src/lib/atsci_fs_checker_naive.h3
-rw-r--r--gr-atsc/src/lib/atsci_fs_correlator.h4
-rw-r--r--gr-atsc/src/lib/atsci_fs_correlator_naive.h3
-rw-r--r--gr-atsc/src/lib/atsci_pnXXX.h6
-rw-r--r--gr-atsc/src/lib/atsci_randomizer.h3
-rw-r--r--gr-atsc/src/lib/atsci_reed_solomon.h3
-rw-r--r--gr-atsc/src/lib/atsci_root_raised_cosine.h3
-rw-r--r--gr-atsc/src/lib/atsci_root_raised_cosine_bandpass.h3
-rw-r--r--gr-atsc/src/lib/atsci_single_viterbi.h4
-rw-r--r--gr-atsc/src/lib/atsci_slicer_agc.h3
-rw-r--r--gr-atsc/src/lib/atsci_sliding_correlator.h8
-rw-r--r--gr-atsc/src/lib/atsci_sssr.h11
-rw-r--r--gr-atsc/src/lib/atsci_trellis_encoder.h3
-rw-r--r--gr-atsc/src/lib/atsci_viterbi_decoder.h3
-rw-r--r--gr-atsc/src/lib/atsci_vsbtx_lp.h3
-rw-r--r--gr-atsc/src/lib/create_atsci_equalizer.h8
-rw-r--r--gr-atsc/src/lib/create_atsci_fs_checker.h4
-rw-r--r--gr-atsc/src/lib/create_atsci_fs_correlator.h4
-rw-r--r--gr-atsc/src/lib/interleaver_fifo.h1
-rw-r--r--gr-atsc/src/lib/qa_atsci_fake_single_viterbi.cc2
-rw-r--r--gr-atsc/src/lib/qa_atsci_single_viterbi.cc4
-rw-r--r--gr-atsc/src/python/CMakeLists.txt58
-rw-r--r--gr-audio/CMakeLists.txt101
-rw-r--r--gr-audio/examples/c++/CMakeLists.txt23
-rw-r--r--gr-audio/examples/python/CMakeLists.txt37
-rw-r--r--gr-audio/grc/CMakeLists.txt22
-rw-r--r--gr-audio/include/CMakeLists.txt29
-rw-r--r--gr-audio/lib/CMakeLists.txt160
-rw-r--r--gr-audio/swig/CMakeLists.txt51
-rw-r--r--gr-comedi/CMakeLists.txt104
-rw-r--r--gr-comedi/src/CMakeLists.txt116
-rw-r--r--gr-digital/CMakeLists.txt107
-rw-r--r--gr-digital/examples/CMakeLists.txt45
-rw-r--r--gr-digital/grc/CMakeLists.txt47
-rw-r--r--gr-digital/include/CMakeLists.txt50
-rw-r--r--gr-digital/include/Makefile.am1
-rw-r--r--gr-digital/include/digital_api.h33
-rw-r--r--gr-digital/include/digital_binary_slicer_fb.h7
-rw-r--r--gr-digital/include/digital_clock_recovery_mm_cc.h7
-rw-r--r--gr-digital/include/digital_clock_recovery_mm_ff.h7
-rw-r--r--gr-digital/include/digital_cma_equalizer_cc.h7
-rw-r--r--gr-digital/include/digital_constellation.h47
-rw-r--r--gr-digital/include/digital_constellation_decoder_cb.h7
-rw-r--r--gr-digital/include/digital_constellation_receiver_cb.h10
-rw-r--r--gr-digital/include/digital_correlate_access_code_bb.h7
-rw-r--r--gr-digital/include/digital_costas_loop_cc.h9
-rw-r--r--gr-digital/include/digital_cpmmod_bc.h7
-rw-r--r--gr-digital/include/digital_crc32.h9
-rw-r--r--gr-digital/include/digital_fll_band_edge_cc.h7
-rw-r--r--gr-digital/include/digital_gmskmod_bc.h7
-rw-r--r--gr-digital/include/digital_kurtotic_equalizer_cc.h7
-rw-r--r--gr-digital/include/digital_lms_dd_equalizer_cc.h7
-rw-r--r--gr-digital/include/digital_mpsk_receiver_cc.h7
-rw-r--r--gr-digital/include/digital_ofdm_cyclic_prefixer.h7
-rw-r--r--gr-digital/include/digital_ofdm_frame_acquisition.h8
-rw-r--r--gr-digital/include/digital_ofdm_frame_sink.h7
-rw-r--r--gr-digital/include/digital_ofdm_insert_preamble.h7
-rw-r--r--gr-digital/include/digital_ofdm_mapper_bcv.h7
-rw-r--r--gr-digital/include/digital_ofdm_sampler.h7
-rw-r--r--gr-digital/lib/CMakeLists.txt73
-rw-r--r--gr-digital/python/CMakeLists.txt77
-rw-r--r--gr-digital/swig/CMakeLists.txt67
-rw-r--r--gr-howto-write-a-block-cmake/CMakeLists.txt104
-rw-r--r--gr-howto-write-a-block-cmake/apps/CMakeLists.txt26
-rw-r--r--gr-howto-write-a-block-cmake/apps/howto_square.grc325
-rwxr-xr-xgr-howto-write-a-block-cmake/apps/howto_square.py77
-rw-r--r--gr-howto-write-a-block-cmake/cmake/Modules/CMakeParseArgumentsCopy.cmake138
-rw-r--r--gr-howto-write-a-block-cmake/cmake/Modules/FindGnuradioCore.cmake26
-rw-r--r--gr-howto-write-a-block-cmake/cmake/Modules/FindGruel.cmake26
-rw-r--r--gr-howto-write-a-block-cmake/cmake/Modules/GrPlatform.cmake46
-rw-r--r--gr-howto-write-a-block-cmake/cmake/Modules/GrPython.cmake177
-rw-r--r--gr-howto-write-a-block-cmake/cmake/Modules/GrSwig.cmake136
-rw-r--r--gr-howto-write-a-block-cmake/cmake/Modules/GrTest.cmake133
-rw-r--r--gr-howto-write-a-block-cmake/grc/CMakeLists.txt24
-rw-r--r--gr-howto-write-a-block-cmake/grc/howto_square2_ff.xml18
-rw-r--r--gr-howto-write-a-block-cmake/grc/howto_square_ff.xml18
-rw-r--r--gr-howto-write-a-block-cmake/include/CMakeLists.txt28
-rw-r--r--gr-howto-write-a-block-cmake/include/howto_api.h33
-rw-r--r--gr-howto-write-a-block-cmake/include/howto_square2_ff.h78
-rw-r--r--gr-howto-write-a-block-cmake/include/howto_square_ff.h79
-rw-r--r--gr-howto-write-a-block-cmake/lib/CMakeLists.txt54
-rw-r--r--gr-howto-write-a-block-cmake/lib/howto_square2_ff.cc92
-rw-r--r--gr-howto-write-a-block-cmake/lib/howto_square_ff.cc98
-rw-r--r--gr-howto-write-a-block-cmake/lib/qa_howto_square2_ff.cc32
-rw-r--r--gr-howto-write-a-block-cmake/lib/qa_howto_square_ff.cc32
-rw-r--r--gr-howto-write-a-block-cmake/python/CMakeLists.txt44
-rw-r--r--gr-howto-write-a-block-cmake/python/__init__.py49
-rwxr-xr-xgr-howto-write-a-block-cmake/python/qa_howto.py59
-rw-r--r--gr-howto-write-a-block-cmake/swig/CMakeLists.txt54
-rw-r--r--gr-howto-write-a-block-cmake/swig/howto_swig.i26
-rw-r--r--gr-noaa/CMakeLists.txt87
-rw-r--r--gr-noaa/apps/.gitignore2
-rw-r--r--gr-noaa/apps/CMakeLists.txt33
-rw-r--r--gr-noaa/grc/CMakeLists.txt26
-rw-r--r--gr-noaa/lib/CMakeLists.txt66
-rw-r--r--gr-noaa/lib/Makefile.am1
-rw-r--r--gr-noaa/lib/noaa_api.h33
-rw-r--r--gr-noaa/lib/noaa_hrpt_decoder.h7
-rw-r--r--gr-noaa/lib/noaa_hrpt_deframer.h7
-rw-r--r--gr-noaa/lib/noaa_hrpt_pll_cf.h7
-rw-r--r--gr-noaa/swig/CMakeLists.txt56
-rw-r--r--gr-pager/CMakeLists.txt102
-rw-r--r--gr-pager/apps/CMakeLists.txt22
-rw-r--r--gr-pager/grc/CMakeLists.txt26
-rw-r--r--gr-pager/lib/CMakeLists.txt76
-rw-r--r--gr-pager/lib/Makefile.am1
-rw-r--r--gr-pager/lib/pager_api.h33
-rw-r--r--gr-pager/lib/pager_flex_deinterleave.h7
-rw-r--r--gr-pager/lib/pager_flex_frame.h7
-rw-r--r--gr-pager/lib/pager_flex_parse.h7
-rw-r--r--gr-pager/lib/pager_flex_sync.h7
-rw-r--r--gr-pager/lib/pager_slicer_fb.h7
-rw-r--r--gr-pager/python/CMakeLists.txt49
-rw-r--r--gr-pager/swig/CMakeLists.txt51
-rw-r--r--gr-qtgui/CMakeLists.txt118
-rw-r--r--gr-qtgui/grc/CMakeLists.txt22
-rw-r--r--gr-qtgui/include/CMakeLists.txt32
-rw-r--r--gr-qtgui/lib/CMakeLists.txt115
-rw-r--r--gr-qtgui/python/CMakeLists.txt46
-rw-r--r--gr-qtgui/swig/CMakeLists.txt49
-rw-r--r--gr-trellis/CMakeLists.txt117
-rw-r--r--gr-trellis/doc/CMakeLists.txt73
-rw-r--r--gr-trellis/grc/CMakeLists.txt36
-rw-r--r--gr-trellis/src/examples/CMakeLists.txt64
-rw-r--r--gr-trellis/src/lib/CMakeLists.txt236
-rw-r--r--gr-trellis/src/lib/Makefile.am1
-rw-r--r--gr-trellis/src/lib/fsm.h3
-rw-r--r--gr-trellis/src/lib/interleaver.h3
-rw-r--r--gr-trellis/src/lib/trellis_api.h33
-rw-r--r--gr-trellis/src/lib/trellis_constellation_metrics_cf.h7
-rw-r--r--gr-trellis/src/lib/trellis_encoder_XX.h.t7
-rw-r--r--gr-trellis/src/lib/trellis_metrics_X.h.t7
-rw-r--r--gr-trellis/src/lib/trellis_pccc_decoder_X.h.t7
-rw-r--r--gr-trellis/src/lib/trellis_pccc_decoder_combined_XX.h.t7
-rw-r--r--gr-trellis/src/lib/trellis_pccc_encoder_XX.h.t7
-rw-r--r--gr-trellis/src/lib/trellis_permutation.h7
-rw-r--r--gr-trellis/src/lib/trellis_sccc_decoder_X.h.t7
-rw-r--r--gr-trellis/src/lib/trellis_sccc_decoder_combined_XX.h.t7
-rw-r--r--gr-trellis/src/lib/trellis_sccc_encoder_XX.h.t7
-rw-r--r--gr-trellis/src/lib/trellis_siso_combined_f.h7
-rw-r--r--gr-trellis/src/lib/trellis_siso_f.h7
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_X.h.t7
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_combined_XX.h.t7
-rw-r--r--gr-trellis/src/python/CMakeLists.txt37
-rw-r--r--gr-uhd/CMakeLists.txt107
-rw-r--r--gr-uhd/apps/CMakeLists.txt84
-rw-r--r--gr-uhd/examples/CMakeLists.txt75
-rw-r--r--gr-uhd/grc/CMakeLists.txt46
-rw-r--r--gr-uhd/include/CMakeLists.txt30
-rw-r--r--gr-uhd/lib/CMakeLists.txt58
-rw-r--r--gr-uhd/swig/CMakeLists.txt53
-rw-r--r--gr-video-sdl/CMakeLists.txt99
-rw-r--r--gr-video-sdl/src/CMakeLists.txt115
-rw-r--r--gr-video-sdl/src/Makefile.am1
-rw-r--r--gr-video-sdl/src/video_sdl_api.h33
-rw-r--r--gr-video-sdl/src/video_sdl_sink_s.h7
-rw-r--r--gr-video-sdl/src/video_sdl_sink_uc.h7
-rw-r--r--gr-vocoder/CMakeLists.txt109
-rw-r--r--gr-vocoder/examples/CMakeLists.txt37
-rw-r--r--gr-vocoder/include/CMakeLists.txt43
-rw-r--r--gr-vocoder/include/Makefile.am1
-rw-r--r--gr-vocoder/include/vocoder_alaw_decode_bs.h7
-rw-r--r--gr-vocoder/include/vocoder_alaw_encode_sb.h7
-rw-r--r--gr-vocoder/include/vocoder_api.h33
-rw-r--r--gr-vocoder/include/vocoder_codec2_decode_ps.h7
-rw-r--r--gr-vocoder/include/vocoder_codec2_encode_sp.h7
-rw-r--r--gr-vocoder/include/vocoder_cvsd_decode_bs.h7
-rw-r--r--gr-vocoder/include/vocoder_cvsd_encode_sb.h7
-rw-r--r--gr-vocoder/include/vocoder_g721_decode_bs.h5
-rw-r--r--gr-vocoder/include/vocoder_g721_encode_sb.h5
-rw-r--r--gr-vocoder/include/vocoder_g723_24_decode_bs.h5
-rw-r--r--gr-vocoder/include/vocoder_g723_24_encode_sb.h5
-rw-r--r--gr-vocoder/include/vocoder_g723_40_decode_bs.h5
-rw-r--r--gr-vocoder/include/vocoder_g723_40_encode_sb.h5
-rw-r--r--gr-vocoder/include/vocoder_gsm_fr_decode_ps.h7
-rw-r--r--gr-vocoder/include/vocoder_gsm_fr_encode_sp.h7
-rw-r--r--gr-vocoder/include/vocoder_ulaw_decode_bs.h7
-rw-r--r--gr-vocoder/include/vocoder_ulaw_encode_sb.h7
-rw-r--r--gr-vocoder/lib/CMakeLists.txt74
-rw-r--r--gr-vocoder/lib/codec2/CMakeLists.txt113
-rw-r--r--gr-vocoder/lib/g7xx/CMakeLists.txt30
-rw-r--r--gr-vocoder/lib/gsm/CMakeLists.txt49
-rw-r--r--gr-vocoder/lib/gsm/gsm_create.c1
-rw-r--r--gr-vocoder/python/CMakeLists.txt50
-rw-r--r--gr-vocoder/swig/CMakeLists.txt61
-rw-r--r--gr-wxgui/CMakeLists.txt83
-rw-r--r--gr-wxgui/grc/CMakeLists.txt36
-rw-r--r--gr-wxgui/src/python/CMakeLists.txt88
-rw-r--r--grc/CMakeLists.txt128
-rw-r--r--grc/base/CMakeLists.txt42
-rw-r--r--grc/blocks/CMakeLists.txt22
-rw-r--r--grc/freedesktop/CMakeLists.txt47
-rw-r--r--grc/grc_gnuradio/CMakeLists.txt35
-rw-r--r--grc/gui/CMakeLists.txt48
-rw-r--r--grc/python/CMakeLists.txt45
-rw-r--r--grc/scripts/CMakeLists.txt25
-rw-r--r--gruel/CMakeLists.txt105
-rw-r--r--gruel/src/include/gruel/CMakeLists.txt56
-rw-r--r--gruel/src/include/gruel/Makefile.am1
-rw-r--r--gruel/src/include/gruel/api.h33
-rw-r--r--gruel/src/include/gruel/attributes.h18
-rw-r--r--gruel/src/include/gruel/inet.h.in1
-rw-r--r--gruel/src/include/gruel/msg_accepter.h3
-rw-r--r--gruel/src/include/gruel/msg_accepter_msgq.h3
-rw-r--r--gruel/src/include/gruel/msg_passing.h1
-rw-r--r--gruel/src/include/gruel/msg_queue.h3
-rw-r--r--gruel/src/include/gruel/pmt.h425
-rw-r--r--gruel/src/include/gruel/pmt_pool.h5
-rw-r--r--gruel/src/include/gruel/realtime.h5
-rw-r--r--gruel/src/include/gruel/sys_pri.h3
-rw-r--r--gruel/src/include/gruel/thread.h1
-rw-r--r--gruel/src/include/gruel/thread_body_wrapper.h3
-rw-r--r--gruel/src/include/gruel/thread_group.h3
-rw-r--r--gruel/src/lib/CMakeLists.txt110
-rw-r--r--gruel/src/lib/msg/CMakeLists.txt28
-rw-r--r--gruel/src/lib/pmt/CMakeLists.txt90
-rw-r--r--gruel/src/lib/pmt/pmt_int.h2
-rw-r--r--gruel/src/lib/pmt/qa_pmt.h3
-rw-r--r--gruel/src/lib/pmt/qa_pmt_prims.cc11
-rw-r--r--gruel/src/lib/pmt/qa_pmt_prims.h4
-rw-r--r--gruel/src/lib/realtime.cc32
-rw-r--r--gruel/src/python/CMakeLists.txt52
-rw-r--r--gruel/src/scheme/gnuradio/CMakeLists.txt26
-rw-r--r--gruel/src/swig/CMakeLists.txt41
-rw-r--r--volk/CMakeLists.txt63
-rw-r--r--volk/apps/CMakeLists.txt19
-rw-r--r--volk/gen/archs.xml1
-rw-r--r--volk/gen/volk_register.py16
-rw-r--r--volk/lib/CMakeLists.txt260
-rw-r--r--volk/lib/volk_prefs.c2
653 files changed, 15229 insertions, 1535 deletions
diff --git a/.gitignore b/.gitignore
index 5fa883862..233e153a5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+/build
#
# NOTE! Don't add files that are generated in specific
# subdirectories here. Add them in the ".gitignore" file
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 000000000..a74ff4c90
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,217 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
+ message(FATAL_ERROR "Prevented in-tree built. This is bad practice.")
+endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
+
+########################################################################
+# Project setup
+########################################################################
+cmake_minimum_required(VERSION 2.6)
+project(gnuradio CXX C)
+enable_testing()
+
+#select the release build type by default to get optimization flags
+if(NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE "Release")
+ message(STATUS "Build type not specified: defaulting to release.")
+endif(NOT CMAKE_BUILD_TYPE)
+set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
+
+list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
+
+include(GrVersion) #setup version info
+
+########################################################################
+# Import executables from a native build (for cross compiling)
+# http://www.vtk.org/Wiki/CMake_Cross_Compiling#Using_executables_in_the_build_created_during_the_build
+########################################################################
+if(IMPORT_EXECUTABLES)
+ include(${IMPORT_EXECUTABLES})
+endif(IMPORT_EXECUTABLES)
+
+#set file that the native build will fill with exports
+set(EXPORT_FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake)
+file(WRITE ${EXPORT_FILE}) #blank the file (subdirs will append)
+
+########################################################################
+# Compiler specific setup
+########################################################################
+if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
+ #http://gcc.gnu.org/wiki/Visibility
+ add_definitions(-fvisibility=hidden)
+endif()
+
+if(CMAKE_COMPILER_IS_GNUCXX)
+ add_definitions(-Wsign-compare)
+endif(CMAKE_COMPILER_IS_GNUCXX)
+
+if(MSVC)
+ include_directories(${CMAKE_SOURCE_DIR}/cmake/msvc) #missing headers
+ add_definitions(-D_WIN32_WINNT=0x0501) #minimum version required is windows xp
+ add_definitions(-DNOMINMAX) #disables stupidity and enables std::min and std::max
+ add_definitions( #stop all kinds of compatibility warnings
+ -D_SCL_SECURE_NO_WARNINGS
+ -D_CRT_SECURE_NO_WARNINGS
+ -D_CRT_SECURE_NO_DEPRECATE
+ -D_CRT_NONSTDC_NO_DEPRECATE
+ )
+ add_definitions(-DHAVE_CONFIG_H)
+ add_definitions(/MP) #build with multiple processors
+endif(MSVC)
+
+########################################################################
+# Install directories
+########################################################################
+include(GrPlatform) #define LIB_SUFFIX
+set(GR_RUNTIME_DIR bin)
+set(GR_LIBRARY_DIR lib${LIB_SUFFIX})
+set(GR_INCLUDE_DIR include)
+set(GR_DATA_DIR share)
+set(GR_PKG_DATA_DIR ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
+set(GR_DOC_DIR ${GR_DATA_DIR}/doc)
+set(GR_PKG_DOC_DIR ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME}-${LIBVER})
+set(GR_CONF_DIR etc)
+set(GR_PKG_CONF_DIR ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME})
+set(GR_LIBEXEC_DIR libexec)
+set(GR_PKG_LIBEXEC_DIR ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
+set(GRC_BLOCKS_DIR ${GR_PKG_DATA_DIR}/grc/blocks)
+
+########################################################################
+# Variables replaced when configuring the package config files
+########################################################################
+file(TO_NATIVE_PATH "${CMAKE_INSTALL_PREFIX}" prefix)
+file(TO_NATIVE_PATH "\${prefix}" exec_prefix)
+file(TO_NATIVE_PATH "\${exec_prefix}/${GR_LIBRARY_DIR}" libdir)
+file(TO_NATIVE_PATH "\${prefix}/${GR_INCLUDE_DIR}" includedir)
+
+########################################################################
+# Create uninstall target
+########################################################################
+configure_file(
+ ${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
+@ONLY)
+
+add_custom_target(uninstall
+ ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
+)
+
+########################################################################
+# Enable python component
+########################################################################
+find_package(PythonLibs)
+find_package(SWIG)
+include(GrComponent)
+GR_REGISTER_COMPONENT("python-support" ENABLE_PYTHON
+ PYTHONLIBS_FOUND
+ SWIG_FOUND
+)
+
+find_package(CppUnit)
+GR_REGISTER_COMPONENT("testing-support" ENABLE_TESTING
+ CPPUNIT_FOUND
+)
+
+########################################################################
+# Add optional dlls specified in DLL_PATHS
+########################################################################
+foreach(path ${DLL_PATHS})
+ file(GLOB _dlls "${path}/*.dll")
+ list(APPEND ALL_DLL_FILES ${_dlls})
+endforeach(path)
+if(DEFINED ALL_DLL_FILES)
+ include(GrPackage)
+ CPACK_COMPONENT("extra_dlls"
+ DISPLAY_NAME "Extra DLLs"
+ DESCRIPTION "Extra DLLs for runtime dependency requirements"
+ )
+ message(STATUS "")
+ message(STATUS "Including the following dlls into the install:")
+ foreach(_dll ${ALL_DLL_FILES})
+ message(STATUS " ${_dll}")
+ endforeach(_dll)
+ install(FILES ${ALL_DLL_FILES} DESTINATION ${GR_RUNTIME_DIR} COMPONENT "extra_dlls")
+endif()
+
+########################################################################
+# Setup volk as a subproject
+########################################################################
+include(GrComponent)
+GR_REGISTER_COMPONENT("volk" ENABLE_VOLK)
+
+set(VOLK_INCLUDE_DIRS
+ ${CMAKE_CURRENT_SOURCE_DIR}/volk/include
+ ${CMAKE_CURRENT_BINARY_DIR}/volk/include
+)
+
+if(ENABLE_VOLK)
+
+include(GrPackage)
+CPACK_SET(CPACK_COMPONENT_GROUP_VOLK_DESCRIPTION "Vector optimized library of kernels")
+
+CPACK_COMPONENT("volk_runtime"
+ GROUP "Volk"
+ DISPLAY_NAME "Runtime"
+ DESCRIPTION "Dynamic link libraries"
+)
+
+CPACK_COMPONENT("volk_devel"
+ GROUP "Volk"
+ DISPLAY_NAME "Development"
+ DESCRIPTION "C++ headers, package config, import libraries"
+)
+
+
+add_subdirectory(volk)
+endif(ENABLE_VOLK)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(gruel)
+add_subdirectory(gnuradio-core)
+add_subdirectory(grc)
+add_subdirectory(docs)
+
+add_subdirectory(gr-atsc)
+add_subdirectory(gr-audio)
+add_subdirectory(gr-comedi)
+add_subdirectory(gr-digital)
+add_subdirectory(gr-noaa)
+add_subdirectory(gr-pager)
+add_subdirectory(gr-qtgui)
+add_subdirectory(gr-trellis)
+add_subdirectory(gr-uhd)
+add_subdirectory(gr-video-sdl)
+add_subdirectory(gr-vocoder)
+add_subdirectory(gr-wxgui)
+
+#finalize cpack after subdirs processed
+include(GrPackage)
+CPACK_FINALIZE()
+
+########################################################################
+# Print summary
+########################################################################
+GR_PRINT_COMPONENT_SUMMARY()
+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
+message(STATUS "Building for version: ${VERSION}")
diff --git a/cmake/Modules/CMakeParseArgumentsCopy.cmake b/cmake/Modules/CMakeParseArgumentsCopy.cmake
new file mode 100644
index 000000000..7ce4c49ae
--- /dev/null
+++ b/cmake/Modules/CMakeParseArgumentsCopy.cmake
@@ -0,0 +1,138 @@
+# CMAKE_PARSE_ARGUMENTS(<prefix> <options> <one_value_keywords> <multi_value_keywords> args...)
+#
+# CMAKE_PARSE_ARGUMENTS() is intended to be used in macros or functions for
+# parsing the arguments given to that macro or function.
+# It processes the arguments and defines a set of variables which hold the
+# values of the respective options.
+#
+# The <options> argument contains all options for the respective macro,
+# i.e. keywords which can be used when calling the macro without any value
+# following, like e.g. the OPTIONAL keyword of the install() command.
+#
+# The <one_value_keywords> argument contains all keywords for this macro
+# which are followed by one value, like e.g. DESTINATION keyword of the
+# install() command.
+#
+# The <multi_value_keywords> argument contains all keywords for this macro
+# which can be followed by more than one value, like e.g. the TARGETS or
+# FILES keywords of the install() command.
+#
+# When done, CMAKE_PARSE_ARGUMENTS() will have defined for each of the
+# keywords listed in <options>, <one_value_keywords> and
+# <multi_value_keywords> a variable composed of the given <prefix>
+# followed by "_" and the name of the respective keyword.
+# These variables will then hold the respective value from the argument list.
+# For the <options> keywords this will be TRUE or FALSE.
+#
+# All remaining arguments are collected in a variable
+# <prefix>_UNPARSED_ARGUMENTS, this can be checked afterwards to see whether
+# your macro was called with unrecognized parameters.
+#
+# As an example here a my_install() macro, which takes similar arguments as the
+# real install() command:
+#
+# function(MY_INSTALL)
+# set(options OPTIONAL FAST)
+# set(oneValueArgs DESTINATION RENAME)
+# set(multiValueArgs TARGETS CONFIGURATIONS)
+# cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
+# ...
+#
+# Assume my_install() has been called like this:
+# my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub)
+#
+# After the cmake_parse_arguments() call the macro will have set the following
+# variables:
+# MY_INSTALL_OPTIONAL = TRUE
+# MY_INSTALL_FAST = FALSE (this option was not used when calling my_install()
+# MY_INSTALL_DESTINATION = "bin"
+# MY_INSTALL_RENAME = "" (was not used)
+# MY_INSTALL_TARGETS = "foo;bar"
+# MY_INSTALL_CONFIGURATIONS = "" (was not used)
+# MY_INSTALL_UNPARSED_ARGUMENTS = "blub" (no value expected after "OPTIONAL"
+#
+# You can the continue and process these variables.
+#
+# Keywords terminate lists of values, e.g. if directly after a one_value_keyword
+# another recognized keyword follows, this is interpreted as the beginning of
+# the new option.
+# E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
+# MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
+
+#=============================================================================
+# Copyright 2010 Alexander Neundorf <neundorf@kde.org>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+
+if(__CMAKE_PARSE_ARGUMENTS_INCLUDED)
+ return()
+endif()
+set(__CMAKE_PARSE_ARGUMENTS_INCLUDED TRUE)
+
+
+function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgNames)
+ # first set all result variables to empty/FALSE
+ foreach(arg_name ${_singleArgNames} ${_multiArgNames})
+ set(${prefix}_${arg_name})
+ endforeach(arg_name)
+
+ foreach(option ${_optionNames})
+ set(${prefix}_${option} FALSE)
+ endforeach(option)
+
+ set(${prefix}_UNPARSED_ARGUMENTS)
+
+ set(insideValues FALSE)
+ set(currentArgName)
+
+ # now iterate over all arguments and fill the result variables
+ foreach(currentArg ${ARGN})
+ list(FIND _optionNames "${currentArg}" optionIndex) # ... then this marks the end of the arguments belonging to this keyword
+ list(FIND _singleArgNames "${currentArg}" singleArgIndex) # ... then this marks the end of the arguments belonging to this keyword
+ list(FIND _multiArgNames "${currentArg}" multiArgIndex) # ... then this marks the end of the arguments belonging to this keyword
+
+ if(${optionIndex} EQUAL -1 AND ${singleArgIndex} EQUAL -1 AND ${multiArgIndex} EQUAL -1)
+ if(insideValues)
+ if("${insideValues}" STREQUAL "SINGLE")
+ set(${prefix}_${currentArgName} ${currentArg})
+ set(insideValues FALSE)
+ elseif("${insideValues}" STREQUAL "MULTI")
+ list(APPEND ${prefix}_${currentArgName} ${currentArg})
+ endif()
+ else(insideValues)
+ list(APPEND ${prefix}_UNPARSED_ARGUMENTS ${currentArg})
+ endif(insideValues)
+ else()
+ if(NOT ${optionIndex} EQUAL -1)
+ set(${prefix}_${currentArg} TRUE)
+ set(insideValues FALSE)
+ elseif(NOT ${singleArgIndex} EQUAL -1)
+ set(currentArgName ${currentArg})
+ set(${prefix}_${currentArgName})
+ set(insideValues "SINGLE")
+ elseif(NOT ${multiArgIndex} EQUAL -1)
+ set(currentArgName ${currentArg})
+ set(${prefix}_${currentArgName})
+ set(insideValues "MULTI")
+ endif()
+ endif()
+
+ endforeach(currentArg)
+
+ # propagate the result variables to the caller:
+ foreach(arg_name ${_singleArgNames} ${_multiArgNames} ${_optionNames})
+ set(${prefix}_${arg_name} ${${prefix}_${arg_name}} PARENT_SCOPE)
+ endforeach(arg_name)
+ set(${prefix}_UNPARSED_ARGUMENTS ${${prefix}_UNPARSED_ARGUMENTS} PARENT_SCOPE)
+
+endfunction(CMAKE_PARSE_ARGUMENTS _options _singleArgs _multiArgs)
diff --git a/cmake/Modules/FindALSA.cmake b/cmake/Modules/FindALSA.cmake
new file mode 100644
index 000000000..e3e6624ff
--- /dev/null
+++ b/cmake/Modules/FindALSA.cmake
@@ -0,0 +1,36 @@
+# - Try to find ALSA
+# Once done, this will define
+#
+# ALSA_FOUND - system has ALSA (GL and GLU)
+# ALSA_INCLUDE_DIRS - the ALSA include directories
+# ALSA_LIBRARIES - link these to use ALSA
+# ALSA_GL_LIBRARY - only GL
+# ALSA_GLU_LIBRARY - only GLU
+#
+# See documentation on how to write CMake scripts at
+# http://www.cmake.org/Wiki/CMake:How_To_Find_Libraries
+
+include(LibFindMacros)
+
+libfind_pkg_check_modules(ALSA_PKGCONF alsa)
+
+find_path(ALSA_INCLUDE_DIR
+ NAMES alsa/version.h
+ PATHS ${ALSA_PKGCONF_INCLUDE_DIRS}
+)
+
+find_library(ALSA_LIBRARY
+ NAMES asound
+ PATHS ${ALSA_PKGCONF_LIBRARY_DIRS}
+)
+
+# Extract the version number
+IF(ALSA_INCLUDE_DIR)
+file(READ "${ALSA_INCLUDE_DIR}/alsa/version.h" _ALSA_VERSION_H_CONTENTS)
+string(REGEX REPLACE ".*#define SND_LIB_VERSION_STR[ \t]*\"([^\n]*)\".*" "\\1" ALSA_VERSION "${_ALSA_VERSION_H_CONTENTS}")
+ENDIF(ALSA_INCLUDE_DIR)
+
+set(ALSA_PROCESS_INCLUDES ALSA_INCLUDE_DIR)
+set(ALSA_PROCESS_LIBS ALSA_LIBRARY)
+libfind_process(ALSA)
+
diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake
new file mode 100644
index 000000000..a936bc546
--- /dev/null
+++ b/cmake/Modules/FindCppUnit.cmake
@@ -0,0 +1,36 @@
+# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
+# Modified to use pkg config and use standard var names
+
+#
+# Find the CppUnit includes and library
+#
+# This module defines
+# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
+# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
+# CPPUNIT_FOUND, If false, do not try to use CppUnit.
+
+INCLUDE(FindPkgConfig)
+PKG_CHECK_MODULES(PC_CPPUNIT "cppunit" QUIET)
+
+FIND_PATH(CPPUNIT_INCLUDE_DIRS
+ NAMES cppunit/TestCase.h
+ HINTS ${PC_CPPUNIT_INCLUDE_DIRS}
+ PATHS
+ /usr/local/include
+ /usr/include
+)
+
+FIND_LIBRARY(CPPUNIT_LIBRARIES
+ NAMES cppunit
+ HINTS ${PC_CPPUNIT_LIBRARIES}
+ PATHS
+ ${CPPUNIT_INCLUDE_DIRS}/../lib
+ /usr/local/lib
+ /usr/lib
+)
+
+LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
+MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
diff --git a/cmake/Modules/FindFFTW3f.cmake b/cmake/Modules/FindFFTW3f.cmake
new file mode 100644
index 000000000..e8b581aed
--- /dev/null
+++ b/cmake/Modules/FindFFTW3f.cmake
@@ -0,0 +1,29 @@
+# http://tim.klingt.org/code/projects/supernova/repository/revisions/d336dd6f400e381bcfd720e96139656de0c53b6a/entry/cmake_modules/FindFFTW3f.cmake
+# Modified to use pkg config and use standard var names
+
+# Find single-precision (float) version of FFTW3
+
+INCLUDE(FindPkgConfig)
+PKG_CHECK_MODULES(PC_FFTW3F "fftw3f >= 3.0" QUIET)
+
+FIND_PATH(
+ FFTW3F_INCLUDE_DIRS
+ NAMES fftw3.h
+ HINTS $ENV{FFTW3_DIR}/include
+ ${PC_FFTW3F_INCLUDE_DIRS}
+ PATHS /usr/local/include
+ /usr/include
+)
+
+FIND_LIBRARY(
+ FFTW3F_LIBRARIES
+ NAMES fftw3f libfftw3f
+ HINTS $ENV{FFTW3_DIR}/lib
+ ${PC_FFTW3F_LIBRARIES}
+ PATHS /usr/local/lib
+ /usr/lib
+)
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(FFTW3F DEFAULT_MSG FFTW3F_LIBRARIES FFTW3F_INCLUDE_DIRS)
+MARK_AS_ADVANCED(FFTW3F_LIBRARIES FFTW3F_INCLUDE_DIRS)
diff --git a/cmake/Modules/FindGSL.cmake b/cmake/Modules/FindGSL.cmake
new file mode 100644
index 000000000..6d7155284
--- /dev/null
+++ b/cmake/Modules/FindGSL.cmake
@@ -0,0 +1,146 @@
+# Try to find gnu scientific library GSL
+# See
+# http://www.gnu.org/software/gsl/ and
+# http://gnuwin32.sourceforge.net/packages/gsl.htm
+#
+# Based on a script of Felix Woelk and Jan Woetzel
+# (www.mip.informatik.uni-kiel.de)
+#
+# It defines the following variables:
+# GSL_FOUND - system has GSL lib
+# GSL_INCLUDE_DIRS - where to find headers
+# GSL_LIBRARIES - full path to the libraries
+# GSL_LIBRARY_DIRS, the directory where the PLplot library is found.
+
+# CMAKE_GSL_CXX_FLAGS = Unix compiler flags for GSL, essentially "`gsl-config --cxxflags`"
+# GSL_LINK_DIRECTORIES = link directories, useful for rpath on Unix
+# GSL_EXE_LINKER_FLAGS = rpath on Unix
+
+INCLUDE(FindPkgConfig)
+PKG_CHECK_MODULES(GSL "gsl >= 1.10")
+IF(NOT GSL_FOUND)
+
+set( GSL_FOUND OFF )
+set( GSL_CBLAS_FOUND OFF )
+
+# Windows, but not for Cygwin and MSys where gsl-config is available
+if( WIN32 AND NOT CYGWIN AND NOT MSYS )
+ # look for headers
+ find_path( GSL_INCLUDE_DIRS
+ NAMES gsl/gsl_cdf.h gsl/gsl_randist.h
+ )
+ if( GSL_INCLUDE_DIRS )
+ # look for gsl library
+ find_library( GSL_LIBRARY
+ NAMES gsl
+ )
+ if( GSL_LIBRARY )
+ set( GSL_INCLUDE_DIRS ${GSL_INCLUDE_DIR} )
+ get_filename_component( GSL_LIBRARY_DIRS ${GSL_LIBRARY} PATH )
+ set( GSL_FOUND ON )
+ endif( GSL_LIBRARY )
+
+ # look for gsl cblas library
+ find_library( GSL_CBLAS_LIBRARY
+ NAMES gslcblas
+ )
+ if( GSL_CBLAS_LIBRARY )
+ set( GSL_CBLAS_FOUND ON )
+ endif( GSL_CBLAS_LIBRARY )
+
+ set( GSL_LIBRARIES ${GSL_LIBRARY} ${GSL_CBLAS_LIBRARY} )
+ endif( GSL_INCLUDE_DIRS )
+
+ mark_as_advanced(
+ GSL_INCLUDE_DIRS
+ GSL_LIBRARIES
+ GSL_CBLAS_LIBRARIES
+ )
+else( WIN32 AND NOT CYGWIN AND NOT MSYS )
+ if( UNIX OR MSYS )
+ find_program( GSL_CONFIG_EXECUTABLE gsl-config
+ /usr/bin/
+ /usr/local/bin
+ )
+
+ if( GSL_CONFIG_EXECUTABLE )
+ set( GSL_FOUND ON )
+
+ # run the gsl-config program to get cxxflags
+ execute_process(
+ COMMAND sh "${GSL_CONFIG_EXECUTABLE}" --cflags
+ OUTPUT_VARIABLE GSL_CFLAGS
+ RESULT_VARIABLE RET
+ ERROR_QUIET
+ )
+ if( RET EQUAL 0 )
+ string( STRIP "${GSL_CFLAGS}" GSL_CFLAGS )
+ separate_arguments( GSL_CFLAGS )
+
+ # parse definitions from cflags; drop -D* from CFLAGS
+ string( REGEX MATCHALL "-D[^;]+"
+ GSL_DEFINITIONS "${GSL_CFLAGS}" )
+ string( REGEX REPLACE "-D[^;]+;" ""
+ GSL_CFLAGS "${GSL_CFLAGS}" )
+
+ # parse include dirs from cflags; drop -I prefix
+ string( REGEX MATCHALL "-I[^;]+"
+ GSL_INCLUDE_DIRS "${GSL_CFLAGS}" )
+ string( REPLACE "-I" ""
+ GSL_INCLUDE_DIRS "${GSL_INCLUDE_DIRS}")
+ string( REGEX REPLACE "-I[^;]+;" ""
+ GSL_CFLAGS "${GSL_CFLAGS}")
+
+ message("GSL_DEFINITIONS=${GSL_DEFINITIONS}")
+ message("GSL_INCLUDE_DIRS=${GSL_INCLUDE_DIRS}")
+ message("GSL_CFLAGS=${GSL_CFLAGS}")
+ else( RET EQUAL 0 )
+ set( GSL_FOUND FALSE )
+ endif( RET EQUAL 0 )
+
+ # run the gsl-config program to get the libs
+ execute_process(
+ COMMAND sh "${GSL_CONFIG_EXECUTABLE}" --libs
+ OUTPUT_VARIABLE GSL_LIBRARIES
+ RESULT_VARIABLE RET
+ ERROR_QUIET
+ )
+ if( RET EQUAL 0 )
+ string(STRIP "${GSL_LIBRARIES}" GSL_LIBRARIES )
+ separate_arguments( GSL_LIBRARIES )
+
+ # extract linkdirs (-L) for rpath (i.e., LINK_DIRECTORIES)
+ string( REGEX MATCHALL "-L[^;]+"
+ GSL_LIBRARY_DIRS "${GSL_LIBRARIES}" )
+ string( REPLACE "-L" ""
+ GSL_LIBRARY_DIRS "${GSL_LIBRARY_DIRS}" )
+ else( RET EQUAL 0 )
+ set( GSL_FOUND FALSE )
+ endif( RET EQUAL 0 )
+
+ MARK_AS_ADVANCED(
+ GSL_CFLAGS
+ )
+ message( STATUS "Using GSL from ${GSL_PREFIX}" )
+ else( GSL_CONFIG_EXECUTABLE )
+ message( STATUS "FindGSL: gsl-config not found.")
+ endif( GSL_CONFIG_EXECUTABLE )
+ endif( UNIX OR MSYS )
+endif( WIN32 AND NOT CYGWIN AND NOT MSYS )
+
+if( GSL_FOUND )
+ if( NOT GSL_FIND_QUIETLY )
+ message( STATUS "FindGSL: Found both GSL headers and library" )
+ endif( NOT GSL_FIND_QUIETLY )
+else( GSL_FOUND )
+ if( GSL_FIND_REQUIRED )
+ message( FATAL_ERROR "FindGSL: Could not find GSL headers or library" )
+ endif( GSL_FIND_REQUIRED )
+endif( GSL_FOUND )
+
+#needed for gsl windows port but safe to always define
+LIST(APPEND GSL_DEFINITIONS "-DGSL_DLL")
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GSL DEFAULT_MSG GSL_LIBRARIES GSL_INCLUDE_DIRS)
+ENDIF(NOT GSL_FOUND)
diff --git a/cmake/Modules/FindGit.cmake b/cmake/Modules/FindGit.cmake
new file mode 100644
index 000000000..2d8214287
--- /dev/null
+++ b/cmake/Modules/FindGit.cmake
@@ -0,0 +1,46 @@
+# The module defines the following variables:
+# GIT_EXECUTABLE - path to git command line client
+# GIT_FOUND - true if the command line client was found
+# Example usage:
+# find_package(Git)
+# if(GIT_FOUND)
+# message("git found: ${GIT_EXECUTABLE}")
+# endif()
+
+#=============================================================================
+# Copyright 2010 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distributed this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+# Look for 'git' or 'eg' (easy git)
+#
+set(git_names git eg)
+
+# Prefer .cmd variants on Windows unless running in a Makefile
+# in the MSYS shell.
+#
+if(WIN32)
+ if(NOT CMAKE_GENERATOR MATCHES "MSYS")
+ set(git_names git.cmd git eg.cmd eg)
+ endif()
+endif()
+
+find_program(GIT_EXECUTABLE
+ NAMES ${git_names}
+ DOC "git command line client"
+ )
+mark_as_advanced(GIT_EXECUTABLE)
+
+# Handle the QUIETLY and REQUIRED arguments and set GIT_FOUND to TRUE if
+# all listed variables are TRUE
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Git DEFAULT_MSG GIT_EXECUTABLE)
diff --git a/cmake/Modules/FindJack.cmake b/cmake/Modules/FindJack.cmake
new file mode 100644
index 000000000..44417deb3
--- /dev/null
+++ b/cmake/Modules/FindJack.cmake
@@ -0,0 +1,87 @@
+# - Try to find jack-2.6
+# Once done this will define
+#
+# JACK_FOUND - system has jack
+# JACK_INCLUDE_DIRS - the jack include directory
+# JACK_LIBRARIES - Link these to use jack
+# JACK_DEFINITIONS - Compiler switches required for using jack
+#
+# Copyright (c) 2008 Andreas Schneider <mail@cynapses.org>
+# Modified for other libraries by Lasse Kärkkäinen <tronic>
+#
+# Redistribution and use is allowed according to the terms of the New
+# BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+#
+
+if (JACK_LIBRARIES AND JACK_INCLUDE_DIRS)
+ # in cache already
+ set(JACK_FOUND TRUE)
+else (JACK_LIBRARIES AND JACK_INCLUDE_DIRS)
+ # use pkg-config to get the directories and then use these values
+ # in the FIND_PATH() and FIND_LIBRARY() calls
+ if (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
+ include(UsePkgConfig)
+ pkgconfig(jack _JACK_INCLUDEDIR _JACK_LIBDIR _JACK_LDFLAGS _JACK_CFLAGS)
+ else (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
+ find_package(PkgConfig)
+ if (PKG_CONFIG_FOUND)
+ pkg_check_modules(_JACK jack)
+ endif (PKG_CONFIG_FOUND)
+ endif (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
+ find_path(JACK_INCLUDE_DIR
+ NAMES
+ jack/jack.h
+ PATHS
+ ${_JACK_INCLUDEDIR}
+ /usr/include
+ /usr/local/include
+ /opt/local/include
+ /sw/include
+ )
+
+ find_library(JACK_LIBRARY
+ NAMES
+ jack
+ PATHS
+ ${_JACK_LIBDIR}
+ /usr/lib
+ /usr/local/lib
+ /opt/local/lib
+ /sw/lib
+ )
+
+ if (JACK_LIBRARY)
+ set(JACK_FOUND TRUE)
+ endif (JACK_LIBRARY)
+
+ set(JACK_INCLUDE_DIRS
+ ${JACK_INCLUDE_DIR}
+ )
+
+ if (JACK_FOUND)
+ set(JACK_LIBRARIES
+ ${JACK_LIBRARIES}
+ ${JACK_LIBRARY}
+ )
+ endif (JACK_FOUND)
+
+ if (JACK_INCLUDE_DIRS AND JACK_LIBRARIES)
+ set(JACK_FOUND TRUE)
+ endif (JACK_INCLUDE_DIRS AND JACK_LIBRARIES)
+
+ if (JACK_FOUND)
+ if (NOT JACK_FIND_QUIETLY)
+ message(STATUS "Found jack: ${JACK_LIBRARY}")
+ endif (NOT JACK_FIND_QUIETLY)
+ else (JACK_FOUND)
+ if (JACK_FIND_REQUIRED)
+ message(FATAL_ERROR "Could not find JACK")
+ endif (JACK_FIND_REQUIRED)
+ endif (JACK_FOUND)
+
+ # show the JACK_INCLUDE_DIRS and JACK_LIBRARIES variables only in the advanced view
+ mark_as_advanced(JACK_INCLUDE_DIRS JACK_LIBRARIES)
+
+endif (JACK_LIBRARIES AND JACK_INCLUDE_DIRS)
+
diff --git a/cmake/Modules/FindOSS.cmake b/cmake/Modules/FindOSS.cmake
new file mode 100644
index 000000000..105b3ec9c
--- /dev/null
+++ b/cmake/Modules/FindOSS.cmake
@@ -0,0 +1,46 @@
+# - Find Oss
+# Find Oss headers and libraries.
+#
+# OSS_INCLUDE_DIR - where to find soundcard.h, etc.
+# OSS_FOUND - True if Oss found.
+
+
+FIND_PATH(LINUX_OSS_INCLUDE_DIR "linux/soundcard.h"
+ "/usr/include" "/usr/local/include"
+)
+
+FIND_PATH(SYS_OSS_INCLUDE_DIR "sys/soundcard.h"
+ "/usr/include" "/usr/local/include"
+)
+
+FIND_PATH(MACHINE_OSS_INCLUDE_DIR "machine/soundcard.h"
+ "/usr/include" "/usr/local/include"
+)
+
+SET(OSS_FOUND FALSE)
+
+IF(LINUX_OSS_INCLUDE_DIR)
+ SET(OSS_FOUND TRUE)
+ SET(OSS_INCLUDE_DIR ${LINUX_OSS_INCLUDE_DIR})
+ SET(HAVE_LINUX_SOUNDCARD_H 1)
+ENDIF()
+
+IF(SYS_OSS_INCLUDE_DIR)
+ SET(OSS_FOUND TRUE)
+ SET(OSS_INCLUDE_DIR ${SYS_OSS_INCLUDE_DIR})
+ SET(HAVE_SYS_SOUNDCARD_H 1)
+ENDIF()
+
+IF(MACHINE_OSS_INCLUDE_DIR)
+ SET(OSS_FOUND TRUE)
+ SET(OSS_INCLUDE_DIR ${MACHINE_OSS_INCLUDE_DIR})
+ SET(HAVE_MACHINE_SOUNDCARD_H 1)
+ENDIF()
+
+MARK_AS_ADVANCED (
+ OSS_FOUND
+ OSS_INCLUDE_DIR
+ LINUX_OSS_INCLUDE_DIR
+ SYS_OSS_INCLUDE_DIR
+ MACHINE_OSS_INCLUDE_DIR
+)
diff --git a/cmake/Modules/FindPortaudio.cmake b/cmake/Modules/FindPortaudio.cmake
new file mode 100644
index 000000000..158e20ee5
--- /dev/null
+++ b/cmake/Modules/FindPortaudio.cmake
@@ -0,0 +1,107 @@
+# - Try to find Portaudio
+# Once done this will define
+#
+# PORTAUDIO_FOUND - system has Portaudio
+# PORTAUDIO_INCLUDE_DIRS - the Portaudio include directory
+# PORTAUDIO_LIBRARIES - Link these to use Portaudio
+# PORTAUDIO_DEFINITIONS - Compiler switches required for using Portaudio
+# PORTAUDIO_VERSION - Portaudio version
+#
+# Copyright (c) 2006 Andreas Schneider <mail@cynapses.org>
+#
+# Redistribution and use is allowed according to the terms of the New BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+#
+
+
+if (PORTAUDIO_LIBRARIES AND PORTAUDIO_INCLUDE_DIRS)
+ # in cache already
+ set(PORTAUDIO_FOUND TRUE)
+else (PORTAUDIO_LIBRARIES AND PORTAUDIO_INCLUDE_DIRS)
+ if (NOT WIN32)
+ include(FindPkgConfig)
+ pkg_check_modules(PORTAUDIO2 portaudio-2.0)
+ endif (NOT WIN32)
+
+ if (PORTAUDIO2_FOUND)
+ set(PORTAUDIO_INCLUDE_DIRS
+ ${PORTAUDIO2_INCLUDE_DIRS}
+ )
+ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+ set(PORTAUDIO_LIBRARIES "${PORTAUDIO2_LIBRARY_DIRS}/lib${PORTAUDIO2_LIBRARIES}.dylib")
+ else (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+ set(PORTAUDIO_LIBRARIES
+ ${PORTAUDIO2_LIBRARIES}
+ )
+ endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+ set(PORTAUDIO_VERSION
+ 19
+ )
+ set(PORTAUDIO_FOUND TRUE)
+ else (PORTAUDIO2_FOUND)
+ find_path(PORTAUDIO_INCLUDE_DIR
+ NAMES
+ portaudio.h
+ PATHS
+ /usr/include
+ /usr/local/include
+ /opt/local/include
+ /sw/include
+ )
+
+ find_library(PORTAUDIO_LIBRARY
+ NAMES
+ portaudio
+ PATHS
+ /usr/lib
+ /usr/local/lib
+ /opt/local/lib
+ /sw/lib
+ )
+
+ find_path(PORTAUDIO_LIBRARY_DIR
+ NAMES
+ portaudio
+ PATHS
+ /usr/lib
+ /usr/local/lib
+ /opt/local/lib
+ /sw/lib
+ )
+
+ set(PORTAUDIO_INCLUDE_DIRS
+ ${PORTAUDIO_INCLUDE_DIR}
+ )
+ set(PORTAUDIO_LIBRARIES
+ ${PORTAUDIO_LIBRARY}
+ )
+
+ set(PORTAUDIO_LIBRARY_DIRS
+ ${PORTAUDIO_LIBRARY_DIR}
+ )
+
+ set(PORTAUDIO_VERSION
+ 18
+ )
+
+ if (PORTAUDIO_INCLUDE_DIRS AND PORTAUDIO_LIBRARIES)
+ set(PORTAUDIO_FOUND TRUE)
+ endif (PORTAUDIO_INCLUDE_DIRS AND PORTAUDIO_LIBRARIES)
+
+ if (PORTAUDIO_FOUND)
+ if (NOT Portaudio_FIND_QUIETLY)
+ message(STATUS "Found Portaudio: ${PORTAUDIO_LIBRARIES}")
+ endif (NOT Portaudio_FIND_QUIETLY)
+ else (PORTAUDIO_FOUND)
+ if (Portaudio_FIND_REQUIRED)
+ message(FATAL_ERROR "Could not find Portaudio")
+ endif (Portaudio_FIND_REQUIRED)
+ endif (PORTAUDIO_FOUND)
+ endif (PORTAUDIO2_FOUND)
+
+
+ # show the PORTAUDIO_INCLUDE_DIRS and PORTAUDIO_LIBRARIES variables only in the advanced view
+ mark_as_advanced(PORTAUDIO_INCLUDE_DIRS PORTAUDIO_LIBRARIES)
+
+endif (PORTAUDIO_LIBRARIES AND PORTAUDIO_INCLUDE_DIRS)
+
diff --git a/cmake/Modules/FindQwt.cmake b/cmake/Modules/FindQwt.cmake
new file mode 100644
index 000000000..698edc8b9
--- /dev/null
+++ b/cmake/Modules/FindQwt.cmake
@@ -0,0 +1,13 @@
+# - try to find Qwt libraries and include files
+# QWT_INCLUDE_DIR where to find qwt_plot.h, etc.
+# QWT_LIBRARIES libraries to link against
+# QWT_FOUND If false, do not try to use Qwt
+
+find_path ( QWT_INCLUDE_DIRS qwt_plot.h /usr/include/qwt-qt4 /usr/include/qwt )
+
+find_library ( QWT_LIBRARIES NAMES qwt-qt4 qwt)
+
+# handle the QUIETLY and REQUIRED arguments and set QWT_FOUND to TRUE if
+# all listed variables are TRUE
+include ( FindPackageHandleStandardArgs )
+find_package_handle_standard_args( Qwt DEFAULT_MSG QWT_LIBRARIES QWT_INCLUDE_DIRS )
diff --git a/cmake/Modules/FindUHD.cmake b/cmake/Modules/FindUHD.cmake
new file mode 100644
index 000000000..0f0cc601b
--- /dev/null
+++ b/cmake/Modules/FindUHD.cmake
@@ -0,0 +1,28 @@
+########################################################################
+# Find the library for the USRP Hardware Driver
+########################################################################
+
+INCLUDE(FindPkgConfig)
+PKG_CHECK_MODULES(PC_UHD uhd QUIET)
+
+FIND_PATH(
+ UHD_INCLUDE_DIRS
+ NAMES uhd/config.hpp
+ HINTS $ENV{UHD_DIR}/include
+ ${PC_UHD_INCLUDE_DIRS}
+ PATHS /usr/local/include
+ /usr/include
+)
+
+FIND_LIBRARY(
+ UHD_LIBRARIES
+ NAMES uhd
+ HINTS $ENV{UHD_DIR}/lib
+ ${PC_UHD_LIBRARIES}
+ PATHS /usr/local/lib
+ /usr/lib
+)
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(UHD DEFAULT_MSG UHD_LIBRARIES UHD_INCLUDE_DIRS)
+MARK_AS_ADVANCED(UHD_LIBRARIES UHD_INCLUDE_DIRS)
diff --git a/cmake/Modules/GrBoost.cmake b/cmake/Modules/GrBoost.cmake
new file mode 100644
index 000000000..36890014d
--- /dev/null
+++ b/cmake/Modules/GrBoost.cmake
@@ -0,0 +1,62 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+if(DEFINED __INCLUDED_GR_BOOST_CMAKE)
+ return()
+endif()
+set(__INCLUDED_GR_BOOST_CMAKE TRUE)
+
+########################################################################
+# Setup Boost and handle some system specific things
+########################################################################
+
+set(BOOST_REQUIRED_COMPONENTS
+ date_time
+ program_options
+ filesystem
+ system
+ thread
+)
+
+if(UNIX AND EXISTS "/usr/lib64")
+ list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
+endif(UNIX AND EXISTS "/usr/lib64")
+
+if(MSVC)
+ if (NOT DEFINED BOOST_ALL_DYN_LINK)
+ set(BOOST_ALL_DYN_LINK TRUE)
+ endif()
+ set(BOOST_ALL_DYN_LINK "${BOOST_ALL_DYN_LINK}" CACHE BOOL "boost enable dynamic linking")
+ if(BOOST_ALL_DYN_LINK)
+ add_definitions(-DBOOST_ALL_DYN_LINK) #setup boost auto-linking in msvc
+ else(BOOST_ALL_DYN_LINK)
+ unset(BOOST_REQUIRED_COMPONENTS) #empty components list for static link
+ endif(BOOST_ALL_DYN_LINK)
+endif(MSVC)
+
+set(Boost_ADDITIONAL_VERSIONS
+ "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
+ "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
+ "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
+ "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
+ "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
+ "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
+ "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
+)
+find_package(Boost "1.35" COMPONENTS ${BOOST_REQUIRED_COMPONENTS})
diff --git a/cmake/Modules/GrComponent.cmake b/cmake/Modules/GrComponent.cmake
new file mode 100644
index 000000000..d45b8003c
--- /dev/null
+++ b/cmake/Modules/GrComponent.cmake
@@ -0,0 +1,114 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+if(DEFINED __INCLUDED_GR_COMPONENT_CMAKE)
+ return()
+endif()
+set(__INCLUDED_GR_COMPONENT_CMAKE TRUE)
+
+set(_gr_enabled_components "" CACHE INTERNAL "" FORCE)
+set(_gr_disabled_components "" CACHE INTERNAL "" FORCE)
+
+if(NOT DEFINED ENABLE_DEFAULT)
+ set(ENABLE_DEFAULT ON)
+ message(STATUS "")
+ message(STATUS "The build system will automatically enable all components.")
+ message(STATUS "Use -DENABLE_DEFAULT=OFF to disable components by default.")
+endif()
+
+########################################################################
+# Register a component into the system
+# - name: canonical component name
+# - var: variable for enabled status
+# - argn: list of dependencies
+########################################################################
+function(GR_REGISTER_COMPONENT name var)
+ include(CMakeDependentOption)
+ message(STATUS "")
+ message(STATUS "Configuring ${name} support...")
+ foreach(dep ${ARGN})
+ message(STATUS " Dependency ${dep} = ${${dep}}")
+ endforeach(dep)
+
+ #if the user set the var to force, we note this
+ if("${${var}}" STREQUAL "FORCE")
+ set(${var} ON)
+ set(var_force TRUE)
+ else()
+ set(var_force FALSE)
+ endif()
+
+ #rewrite the dependency list so that deps that are also components use the cached version
+ unset(comp_deps)
+ foreach(dep ${ARGN})
+ list(FIND _gr_enabled_components ${dep} dep_enb_index)
+ list(FIND _gr_disabled_components ${dep} dep_dis_index)
+ if (${dep_enb_index} EQUAL -1 AND ${dep_dis_index} EQUAL -1)
+ list(APPEND comp_deps ${dep})
+ else()
+ list(APPEND comp_deps ${dep}_cached) #is a component, use cached version
+ endif()
+ endforeach(dep)
+
+ #setup the dependent option for this component
+ CMAKE_DEPENDENT_OPTION(${var} "enable ${name} support" ${ENABLE_DEFAULT} "${comp_deps}" OFF)
+ set(${var}_cached "${${var}}" CACHE INTERNAL "" FORCE)
+
+ #force was specified, but the dependencies were not met
+ if(NOT ${var} AND var_force)
+ message(FATAL_ERROR "user force-enabled ${name} but configuration checked failed")
+ endif()
+
+ #append the component into one of the lists
+ if(${var})
+ message(STATUS " Enabling ${name} support.")
+ list(APPEND _gr_enabled_components ${name})
+ else(${var})
+ message(STATUS " Disabling ${name} support.")
+ list(APPEND _gr_disabled_components ${name})
+ endif(${var})
+ message(STATUS " Override with -D${var}=ON/OFF")
+
+ #make components lists into global variables
+ set(_gr_enabled_components ${_gr_enabled_components} CACHE INTERNAL "" FORCE)
+ set(_gr_disabled_components ${_gr_disabled_components} CACHE INTERNAL "" FORCE)
+endfunction(GR_REGISTER_COMPONENT)
+
+########################################################################
+# Print the registered component summary
+########################################################################
+function(GR_PRINT_COMPONENT_SUMMARY)
+ message(STATUS "")
+ message(STATUS "######################################################")
+ message(STATUS "# Gnuradio enabled components ")
+ message(STATUS "######################################################")
+ foreach(comp ${_gr_enabled_components})
+ message(STATUS " * ${comp}")
+ endforeach(comp)
+
+ message(STATUS "")
+ message(STATUS "######################################################")
+ message(STATUS "# Gnuradio disabled components ")
+ message(STATUS "######################################################")
+ foreach(comp ${_gr_disabled_components})
+ message(STATUS " * ${comp}")
+ endforeach(comp)
+
+ message(STATUS "")
+endfunction(GR_PRINT_COMPONENT_SUMMARY)
diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
new file mode 100644
index 000000000..871861e35
--- /dev/null
+++ b/cmake/Modules/GrMiscUtils.cmake
@@ -0,0 +1,86 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
+ return()
+endif()
+set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
+
+########################################################################
+# Set global variable macro.
+# Used for subdirectories to export settings.
+# Example: include and library paths.
+########################################################################
+function(GR_SET_GLOBAL var)
+ set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
+endfunction(GR_SET_GLOBAL)
+
+########################################################################
+# Set the pre-processor definition if the condition is true.
+# - def the pre-processor definition to set and condition name
+########################################################################
+function(GR_ADD_COND_DEF def)
+ if(${def})
+ add_definitions(-D${def})
+ endif(${def})
+endfunction(GR_ADD_COND_DEF)
+
+########################################################################
+# Check for a header and conditionally set a compile define.
+# - hdr the relative path to the header file
+# - def the pre-processor definition to set
+########################################################################
+function(GR_CHECK_HDR_N_DEF hdr def)
+ include(CheckIncludeFileCXX)
+ CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
+ GR_ADD_COND_DEF(${def})
+endfunction(GR_CHECK_HDR_N_DEF)
+
+########################################################################
+# Include subdirectory macro.
+# Sets the CMake directory variables,
+# includes the subdirectory CMakeLists.txt,
+# resets the CMake directory variables.
+#
+# This macro includes subdirectories rather than adding them
+# so that the subdirectory can affect variables in the level above.
+# This provides a work-around for the lack of convenience libraries.
+# This way a subdirectory can append to the list of library sources.
+########################################################################
+macro(GR_INCLUDE_SUBDIRECTORY subdir)
+ #insert the current directories on the front of the list
+ list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
+ list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
+
+ #set the current directories to the names of the subdirs
+ set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
+ set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
+
+ #include the subdirectory CMakeLists to run it
+ file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+ include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
+
+ #reset the value of the current directories
+ list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
+ list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
+
+ #pop the subdir names of the front of the list
+ list(REMOVE_AT _cmake_source_dirs 0)
+ list(REMOVE_AT _cmake_binary_dirs 0)
+endmacro(GR_INCLUDE_SUBDIRECTORY)
diff --git a/cmake/Modules/GrPackage.cmake b/cmake/Modules/GrPackage.cmake
new file mode 100644
index 000000000..857d07c4d
--- /dev/null
+++ b/cmake/Modules/GrPackage.cmake
@@ -0,0 +1,134 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+if(DEFINED __INCLUDED_GR_PACKAGE_CMAKE)
+ return()
+endif()
+set(__INCLUDED_GR_PACKAGE_CMAKE TRUE)
+
+include(GrVersion) #sets version information
+include(GrPlatform) #sets platform information
+
+#set the cpack generator based on the platform type
+if(CPACK_GENERATOR)
+ #already set by user
+elseif(APPLE)
+ set(CPACK_GENERATOR PackageMaker)
+elseif(WIN32)
+ set(CPACK_GENERATOR NSIS)
+elseif(DEBIAN)
+ set(CPACK_GENERATOR DEB)
+elseif(REDHAT)
+ set(CPACK_GENERATOR RPM)
+else()
+ set(CPACK_GENERATOR TGZ)
+endif()
+
+########################################################################
+# CPACK_SET - set a global variable and record the variable name
+########################################################################
+function(CPACK_SET var)
+ set(${var} ${ARGN} CACHE INTERNAL "")
+ list(APPEND _cpack_vars ${var})
+ list(REMOVE_DUPLICATES _cpack_vars)
+ set(_cpack_vars ${_cpack_vars} CACHE INTERNAL "")
+endfunction(CPACK_SET)
+
+########################################################################
+# CPACK_FINALIZE - include cpack and the unset all the cpack variables
+########################################################################
+function(CPACK_FINALIZE)
+ include(CPack) #finalize the cpack settings configured throughout the build system
+ foreach(var ${_cpack_vars})
+ unset(${var} CACHE)
+ endforeach(var)
+ unset(_cpack_vars CACHE)
+endfunction(CPACK_FINALIZE)
+
+########################################################################
+# CPACK_COMPONENT - convenience function to create a cpack component
+#
+# Usage: CPACK_COMPONENT(
+# name
+# [GROUP group]
+# [DISPLAY_NAME display_name]
+# [DESCRIPTION description]
+# [DEPENDS depends]
+# )
+########################################################################
+function(CPACK_COMPONENT name)
+ include(CMakeParseArgumentsCopy)
+ set(_options GROUP DISPLAY_NAME DESCRIPTION DEPENDS)
+ CMAKE_PARSE_ARGUMENTS(CPACK_COMPONENT "" "${_options}" "" ${ARGN})
+
+ string(TOUPPER "${name}" name_upper)
+ foreach(_option ${_options})
+ if(CPACK_COMPONENT_${_option})
+ CPACK_SET(CPACK_COMPONENT_${name_upper}_${_option} "${CPACK_COMPONENT_${_option}}")
+ endif()
+ endforeach(_option)
+
+ CPACK_SET(CPACK_COMPONENTS_ALL "${CPACK_COMPONENTS_ALL};${name}")
+
+endfunction(CPACK_COMPONENT)
+
+########################################################################
+# Setup CPack
+########################################################################
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "GNU Radio")
+set(CPACK_PACKAGE_VENDOR "Free Software Foundation, Inc.")
+set(CPACK_PACKAGE_CONTACT "Discuss-gnuradio@gnu.org")
+set(CPACK_PACKAGE_VERSION ${VERSION})
+set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/README)
+set(CPACK_RESOURCE_FILE_README ${CMAKE_SOURCE_DIR}/README)
+set(CPACK_RESOURCE_FILE_WELCOME ${CMAKE_SOURCE_DIR}/README)
+if(${CPACK_GENERATOR} STREQUAL NSIS)
+ set(CPACK_PACKAGE_INSTALL_DIRECTORY "${CMAKE_PROJECT_NAME}")
+endif()
+
+########################################################################
+# DEB package specific
+########################################################################
+set(CPACK_DEBIAN_PACKAGE_DEPENDS
+ "libboost-all-dev"
+ "libfftw3-3"
+ "python"
+ "python-numpy"
+ "libqt4-core"
+ "libqwt5-qt4"
+ "libqwtplot3d-qt4-0"
+ "python-qt4"
+ "python-gtk2"
+ "python-lxml"
+ "python-Cheetah"
+)
+string(REPLACE ";" ", " CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}")
+set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA ${CMAKE_SOURCE_DIR}/debian/postinst ${CMAKE_SOURCE_DIR}/debian/prerm)
+
+########################################################################
+# RPM package specific
+########################################################################
+set(CPACK_RPM_PACKAGE_REQUIRES "boost-devel") #TODO other packages
+
+########################################################################
+# NSIS package specific
+########################################################################
+set(CPACK_NSIS_MODIFY_PATH ON)
+
+set(HLKM_ENV "\\\"SYSTEM\\\\CurrentControlSet\\\\Control\\\\Session Manager\\\\Environment\\\"")
diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake
new file mode 100644
index 000000000..ce2e15fef
--- /dev/null
+++ b/cmake/Modules/GrPlatform.cmake
@@ -0,0 +1,46 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
+ return()
+endif()
+set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
+
+########################################################################
+# Setup additional defines for OS types
+########################################################################
+if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ set(LINUX TRUE)
+endif()
+
+if(LINUX AND EXISTS "/etc/debian_version")
+ set(DEBIAN TRUE)
+endif()
+
+if(LINUX AND EXISTS "/etc/redhat-release")
+ set(REDHAT TRUE)
+endif()
+
+########################################################################
+# when the library suffix should be 64 (applies to redhat linux family)
+########################################################################
+if(NOT DEFINED LIB_SUFFIX AND REDHAT AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
+ set(LIB_SUFFIX 64)
+endif()
+set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
new file mode 100644
index 000000000..51cd4bfb0
--- /dev/null
+++ b/cmake/Modules/GrPython.cmake
@@ -0,0 +1,189 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
+ return()
+endif()
+set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
+
+########################################################################
+# Setup the python interpreter:
+# This allows the user to specify a specific interpreter,
+# or finds the interpreter via the built-in cmake module.
+########################################################################
+#this allows the user to override PYTHON_EXECUTABLE
+if(PYTHON_EXECUTABLE)
+
+ set(PYTHONINTERP_FOUND TRUE)
+
+#otherwise if not set, try to automatically find it
+else(PYTHON_EXECUTABLE)
+
+ #use the built-in find script
+ find_package(PythonInterp)
+
+ #and if that fails use the find program routine
+ if(NOT PYTHONINTERP_FOUND)
+ find_program(PYTHON_EXECUTABLE NAMES python python2.7 python2.6 python2.5)
+ if(PYTHON_EXECUTABLE)
+ set(PYTHONINTERP_FOUND TRUE)
+ endif(PYTHON_EXECUTABLE)
+ endif(NOT PYTHONINTERP_FOUND)
+
+endif(PYTHON_EXECUTABLE)
+
+#make the path to the executable appear in the cmake gui
+set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
+
+#make sure we can use -B with python (introduced in 2.6)
+if(PYTHON_EXECUTABLE)
+ execute_process(
+ COMMAND ${PYTHON_EXECUTABLE} -B -c ""
+ OUTPUT_QUIET ERROR_QUIET
+ RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
+ )
+ if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
+ set(PYTHON_DASH_B "-B")
+ endif()
+endif(PYTHON_EXECUTABLE)
+
+########################################################################
+# Check for the existence of a python module:
+# - desc a string description of the check
+# - mod the name of the module to import
+# - cmd an additional command to run
+# - have the result variable to set
+########################################################################
+macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
+ message(STATUS "")
+ message(STATUS "Python checking for ${desc}")
+ execute_process(
+ COMMAND ${PYTHON_EXECUTABLE} -c "
+#########################################
+try: import ${mod}
+except: exit(-1)
+try: assert ${cmd}
+except: exit(-1)
+#########################################"
+ RESULT_VARIABLE ${have}
+ )
+ if(${have} EQUAL 0)
+ message(STATUS "Python checking for ${desc} - found")
+ set(${have} TRUE)
+ else(${have} EQUAL 0)
+ message(STATUS "Python checking for ${desc} - not found")
+ set(${have} FALSE)
+ endif(${have} EQUAL 0)
+endmacro(GR_PYTHON_CHECK_MODULE)
+
+########################################################################
+# Sets the python installation directory GR_PYTHON_DIR
+########################################################################
+execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
+from distutils import sysconfig
+print sysconfig.get_python_lib(plat_specific=True, prefix='')
+" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
+
+########################################################################
+# Create an always-built target with a unique name
+# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
+########################################################################
+function(GR_UNIQUE_TARGET desc)
+ file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
+ execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
+unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
+print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
+ OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
+ add_custom_target(${_target} ALL DEPENDS ${ARGN})
+endfunction(GR_UNIQUE_TARGET)
+
+########################################################################
+# Install python sources (also builds and installs byte-compiled python)
+########################################################################
+function(GR_PYTHON_INSTALL)
+ include(CMakeParseArgumentsCopy)
+ CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
+
+ ####################################################################
+ if(GR_PYTHON_INSTALL_FILES)
+ ####################################################################
+ install(${ARGN}) #installs regular python files
+
+ foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
+ get_filename_component(pyfile_name ${pyfile} NAME)
+ get_filename_component(pyfile ${pyfile} ABSOLUTE)
+ string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pycfile "${pyfile}c")
+ list(APPEND python_install_gen_targets ${pycfile})
+
+ get_filename_component(pycfile_path ${pycfile} PATH)
+ file(MAKE_DIRECTORY ${pycfile_path})
+
+ #create a command to generate the byte-compiled pyc file
+ add_custom_command(
+ OUTPUT ${pycfile} DEPENDS ${pyfile}
+ COMMAND ${PYTHON_EXECUTABLE} -c
+ \"import py_compile\; py_compile.compile(file='${pyfile}', cfile='${pycfile}', doraise=True)\"
+ COMMENT "Byte-compiling ${pyfile_name}"
+ )
+ install(FILES ${pycfile}
+ DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
+ COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
+ )
+ endforeach(pyfile)
+
+ ####################################################################
+ elseif(GR_PYTHON_INSTALL_PROGRAMS)
+ ####################################################################
+ file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
+
+ foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
+ get_filename_component(pyfile_name ${pyfile} NAME)
+ get_filename_component(pyfile ${pyfile} ABSOLUTE)
+ string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
+ list(APPEND python_install_gen_targets ${pyexefile})
+
+ get_filename_component(pyexefile_path ${pyexefile} PATH)
+ file(MAKE_DIRECTORY ${pyexefile_path})
+
+ add_custom_command(
+ OUTPUT ${pyexefile} DEPENDS ${pyfile}
+ COMMAND ${PYTHON_EXECUTABLE} -c
+ \"open('${pyexefile}', 'w').write('\#!${pyexe_native}\\n'+open('${pyfile}').read())\"
+ COMMENT "Shebangin ${pyfile_name}"
+ )
+
+ #on windows, python files need an extension to execute
+ get_filename_component(pyfile_ext ${pyfile} EXT)
+ if(WIN32 AND NOT pyfile_ext)
+ set(pyfile_name "${pyfile_name}.py")
+ endif()
+
+ install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
+ DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
+ COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
+ )
+ endforeach(pyfile)
+
+ endif()
+
+ GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
+
+endfunction(GR_PYTHON_INSTALL)
diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake
new file mode 100644
index 000000000..0fa1c7b77
--- /dev/null
+++ b/cmake/Modules/GrSwig.cmake
@@ -0,0 +1,136 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
+ return()
+endif()
+set(__INCLUDED_GR_SWIG_CMAKE TRUE)
+
+include(GrPython)
+
+########################################################################
+# Build a swig target for the common gnuradio use case. Usage:
+# GR_SWIG_MAKE(target ifile ifile ifile...)
+#
+# Set the following variables before calling:
+# - GR_SWIG_FLAGS
+# - GR_SWIG_INCLUDE_DIRS
+# - GR_SWIG_LIBRARIES
+# - GR_SWIG_SOURCE_DEPS
+# - GR_SWIG_TARGET_DEPS
+########################################################################
+macro(GR_SWIG_MAKE name)
+ set(ifiles ${ARGN})
+
+ #determine include dependencies for swig file
+ execute_process(
+ COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/get_swig_deps.py
+ "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ )
+
+ #append the specified include directories
+ include_directories(${GR_SWIG_INCLUDE_DIRS})
+ list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${GR_SWIG_SOURCE_DEPS})
+
+ find_package(PythonLibs)
+ include_directories(${PYTHON_INCLUDE_DIRS})
+
+ #setup the swig flags with flags and include directories
+ set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
+ foreach(dir ${GR_SWIG_INCLUDE_DIRS})
+ list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
+ endforeach(dir)
+
+ #set the C++ property on the swig .i file so it builds
+ set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
+
+ #setup the actual swig library target to be built
+ include(UseSWIG)
+ SWIG_ADD_MODULE(${name} python ${ifiles})
+ SWIG_LINK_LIBRARIES(${name} ${PYTHON_LIBRARIES} ${GR_SWIG_LIBRARIES})
+ if(GR_SWIG_TARGET_DEPS)
+ add_dependencies(${SWIG_MODULE_${name}_REAL_NAME} ${GR_SWIG_TARGET_DEPS})
+ endif(GR_SWIG_TARGET_DEPS)
+
+endmacro(GR_SWIG_MAKE)
+
+########################################################################
+# Install swig targets generated by GR_SWIG_MAKE. Usage:
+# GR_SWIG_INSTALL(
+# TARGETS target target target...
+# [DESTINATION destination]
+# [COMPONENT component]
+# )
+########################################################################
+macro(GR_SWIG_INSTALL)
+
+ include(CMakeParseArgumentsCopy)
+ CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
+
+ foreach(name ${GR_SWIG_INSTALL_TARGETS})
+ install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
+ DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
+ COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
+ )
+
+ include(GrPython)
+ GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
+ DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
+ COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
+ )
+ endforeach(name)
+
+endmacro(GR_SWIG_INSTALL)
+
+########################################################################
+# Generate a python file that can determine swig dependencies.
+# Used by the make macro above to determine extra dependencies.
+# When you build C++, CMake figures out the header dependencies.
+# This code essentially performs that logic for swig includes.
+########################################################################
+file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
+
+import os, sys, re
+
+include_matcher = re.compile('[#|%]include\\s*[<|\"](.*)[>|\"]')
+include_dirs = sys.argv[2].split(';')
+
+def get_swig_incs(file_path):
+ file_contents = open(file_path, 'r').read()
+ return include_matcher.findall(file_contents, re.MULTILINE)
+
+def get_swig_deps(file_path, level):
+ deps = [file_path]
+ if level == 0: return deps
+ for inc_file in get_swig_incs(file_path):
+ for inc_dir in include_dirs:
+ inc_path = os.path.join(inc_dir, inc_file)
+ if not os.path.exists(inc_path): continue
+ deps.extend(get_swig_deps(inc_path, level-1))
+ return deps
+
+if __name__ == '__main__':
+ ifiles = sys.argv[1].split(';')
+ deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
+ #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
+ print(';'.join(set(deps)))
+")
diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake
new file mode 100644
index 000000000..bbb525dcc
--- /dev/null
+++ b/cmake/Modules/GrTest.cmake
@@ -0,0 +1,137 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+if(DEFINED __INCLUDED_GR_TEST_CMAKE)
+ return()
+endif()
+set(__INCLUDED_GR_TEST_CMAKE TRUE)
+
+########################################################################
+# Add a unit test and setup the environment for a unit test.
+# Takes the same arguments as the ADD_TEST function.
+#
+# Before calling set the following variables:
+# GR_TEST_TARGET_DEPS - built targets for the library path
+# GR_TEST_LIBRARY_DIRS - directories for the library path
+# GR_TEST_PYTHON_DIRS - directories for the python path
+########################################################################
+function(GR_ADD_TEST test_name)
+
+ #Ensure that the build exe also appears in the PATH.
+ list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
+
+ #In the land of windows, all libraries must be in the PATH.
+ #Since the dependent libraries are not yet installed,
+ #we must manually set them in the PATH to run tests.
+ #The following appends the path of a target dependency.
+ foreach(target ${GR_TEST_TARGET_DEPS})
+ get_target_property(location ${target} LOCATION)
+ if(location)
+ get_filename_component(path ${location} PATH)
+ string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
+ list(APPEND GR_TEST_LIBRARY_DIRS ${path})
+ endif(location)
+ endforeach(target)
+
+ if(WIN32)
+ #SWIG generates the python library files into a subdirectory.
+ #Therefore, we must append this subdirectory into PYTHONPATH.
+ #Only do this for the python directories matching the following:
+ foreach(pydir ${GR_TEST_PYTHON_DIRS})
+ get_filename_component(name ${pydir} NAME)
+ if(name MATCHES "^(swig|lib|src)$")
+ list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
+ endif()
+ endforeach(pydir)
+ endif(WIN32)
+
+ file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
+ file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
+ file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
+
+ set(environs "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
+
+ #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
+ #Replaced this add test + set environs code with the shell script generation.
+ #Its nicer to be able to manually run the shell script to diagnose problems.
+ #ADD_TEST(${ARGV})
+ #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
+
+ if(UNIX)
+ set(LD_PATH_VAR "LD_LIBRARY_PATH")
+ if(APPLE)
+ set(LD_PATH_VAR "DYLD_LIBRARY_PATH")
+ endif()
+
+ set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
+ list(APPEND libpath "$${LD_PATH_VAR}")
+ list(APPEND pypath "$PYTHONPATH")
+
+ #replace list separator with the path separator
+ string(REPLACE ";" ":" libpath "${libpath}")
+ string(REPLACE ";" ":" pypath "${pypath}")
+ list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}")
+
+ #generate a bat file that sets the environment and runs the test
+ find_program(SHELL sh)
+ set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
+ file(WRITE ${sh_file} "#!${SHELL}\n")
+ #each line sets an environment variable
+ foreach(environ ${environs})
+ file(APPEND ${sh_file} "export ${environ}\n")
+ endforeach(environ)
+ #load the command to run with its arguments
+ foreach(arg ${ARGN})
+ file(APPEND ${sh_file} "${arg} ")
+ endforeach(arg)
+ file(APPEND ${sh_file} "\n")
+
+ #make the shell file executable
+ execute_process(COMMAND chmod +x ${sh_file})
+
+ add_test(${test_name} ${SHELL} ${sh_file})
+
+ endif(UNIX)
+
+ if(WIN32)
+ list(APPEND libpath ${DLL_PATHS} "%PATH%")
+ list(APPEND pypath "%PYTHONPATH%")
+
+ #replace list separator with the path separator (escaped)
+ string(REPLACE ";" "\\;" libpath "${libpath}")
+ string(REPLACE ";" "\\;" pypath "${pypath}")
+ list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
+
+ #generate a bat file that sets the environment and runs the test
+ set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
+ file(WRITE ${bat_file} "@echo off\n")
+ #each line sets an environment variable
+ foreach(environ ${environs})
+ file(APPEND ${bat_file} "SET ${environ}\n")
+ endforeach(environ)
+ #load the command to run with its arguments
+ foreach(arg ${ARGN})
+ file(APPEND ${bat_file} "${arg} ")
+ endforeach(arg)
+ file(APPEND ${bat_file} "\n")
+
+ add_test(${test_name} ${bat_file})
+ endif(WIN32)
+
+endfunction(GR_ADD_TEST)
diff --git a/cmake/Modules/GrVersion.cmake b/cmake/Modules/GrVersion.cmake
new file mode 100644
index 000000000..842537f18
--- /dev/null
+++ b/cmake/Modules/GrVersion.cmake
@@ -0,0 +1,73 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+if(DEFINED __INCLUDED_GR_VERSION_CMAKE)
+ return()
+endif()
+set(__INCLUDED_GR_VERSION_CMAKE TRUE)
+
+########################################################################
+# Setup version variables.
+# Parse the output of git describe
+# sets VERSION and LIBVER
+########################################################################
+
+unset(VERSION)
+unset(LIBVER)
+
+########################################################################
+# Extract the version string from git describe.
+########################################################################
+find_package(Git)
+if(GIT_FOUND)
+ message(STATUS "Extracting version information from git...")
+ execute_process(COMMAND ${GIT_EXECUTABLE} describe
+ OUTPUT_VARIABLE VERSION OUTPUT_STRIP_TRAILING_WHITESPACE
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ )
+ if(NOT VERSION)
+ message(WARNING "Tried to extract $VERSION from git describe but failed... using default")
+ endif()
+endif(GIT_FOUND)
+
+########################################################################
+# Extract the library version from the version string.
+########################################################################
+if(VERSION)
+ include(GrPython)
+ execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re; print re.match('^v(\\d+\\.\\d+\\.\\d+)', '${VERSION}').groups()[0]"
+ OUTPUT_VARIABLE LIBVER OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ if(NOT LIBVER)
+ message(WARNING "Tried to extract $LIBVER from $VERSION but failed... using default")
+ endif()
+endif()
+
+########################################################################
+# Ensure that the version strings are set no matter what.
+########################################################################
+if(NOT VERSION)
+ set(VERSION "v3.x.x-unknown")
+endif()
+
+if(NOT LIBVER)
+ set(LIBVER "3.x.x")
+endif()
+
+message(STATUS "VERSION: ${VERSION}, LIBVER: ${LIBVER}")
diff --git a/cmake/Modules/LibFindMacros.cmake b/cmake/Modules/LibFindMacros.cmake
new file mode 100644
index 000000000..69975c51b
--- /dev/null
+++ b/cmake/Modules/LibFindMacros.cmake
@@ -0,0 +1,99 @@
+# Works the same as find_package, but forwards the "REQUIRED" and "QUIET" arguments
+# used for the current package. For this to work, the first parameter must be the
+# prefix of the current package, then the prefix of the new package etc, which are
+# passed to find_package.
+macro (libfind_package PREFIX)
+ set (LIBFIND_PACKAGE_ARGS ${ARGN})
+ if (${PREFIX}_FIND_QUIETLY)
+ set (LIBFIND_PACKAGE_ARGS ${LIBFIND_PACKAGE_ARGS} QUIET)
+ endif (${PREFIX}_FIND_QUIETLY)
+ if (${PREFIX}_FIND_REQUIRED)
+ set (LIBFIND_PACKAGE_ARGS ${LIBFIND_PACKAGE_ARGS} REQUIRED)
+ endif (${PREFIX}_FIND_REQUIRED)
+ find_package(${LIBFIND_PACKAGE_ARGS})
+endmacro (libfind_package)
+
+# CMake developers made the UsePkgConfig system deprecated in the same release (2.6)
+# where they added pkg_check_modules. Consequently I need to support both in my scripts
+# to avoid those deprecated warnings. Here's a helper that does just that.
+# Works identically to pkg_check_modules, except that no checks are needed prior to use.
+macro (libfind_pkg_check_modules PREFIX PKGNAME)
+ if (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
+ include(UsePkgConfig)
+ pkgconfig(${PKGNAME} ${PREFIX}_INCLUDE_DIRS ${PREFIX}_LIBRARY_DIRS ${PREFIX}_LDFLAGS ${PREFIX}_CFLAGS)
+ else (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
+ find_package(PkgConfig)
+ if (PKG_CONFIG_FOUND)
+ pkg_check_modules(${PREFIX} ${PKGNAME})
+ endif (PKG_CONFIG_FOUND)
+ endif (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
+endmacro (libfind_pkg_check_modules)
+
+# Do the final processing once the paths have been detected.
+# If include dirs are needed, ${PREFIX}_PROCESS_INCLUDES should be set to contain
+# all the variables, each of which contain one include directory.
+# Ditto for ${PREFIX}_PROCESS_LIBS and library files.
+# Will set ${PREFIX}_FOUND, ${PREFIX}_INCLUDE_DIRS and ${PREFIX}_LIBRARIES.
+# Also handles errors in case library detection was required, etc.
+macro (libfind_process PREFIX)
+ # Skip processing if already processed during this run
+ if (NOT ${PREFIX}_FOUND)
+ # Start with the assumption that the library was found
+ set (${PREFIX}_FOUND TRUE)
+
+ # Process all includes and set _FOUND to false if any are missing
+ foreach (i ${${PREFIX}_PROCESS_INCLUDES})
+ if (${i})
+ set (${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIRS} ${${i}})
+ mark_as_advanced(${i})
+ else (${i})
+ set (${PREFIX}_FOUND FALSE)
+ endif (${i})
+ endforeach (i)
+
+ # Process all libraries and set _FOUND to false if any are missing
+ foreach (i ${${PREFIX}_PROCESS_LIBS})
+ if (${i})
+ set (${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARIES} ${${i}})
+ mark_as_advanced(${i})
+ else (${i})
+ set (${PREFIX}_FOUND FALSE)
+ endif (${i})
+ endforeach (i)
+
+ # Print message and/or exit on fatal error
+ if (${PREFIX}_FOUND)
+ if (NOT ${PREFIX}_FIND_QUIETLY)
+ message (STATUS "Found ${PREFIX} ${${PREFIX}_VERSION}")
+ endif (NOT ${PREFIX}_FIND_QUIETLY)
+ else (${PREFIX}_FOUND)
+ if (${PREFIX}_FIND_REQUIRED)
+ foreach (i ${${PREFIX}_PROCESS_INCLUDES} ${${PREFIX}_PROCESS_LIBS})
+ message("${i}=${${i}}")
+ endforeach (i)
+ message (FATAL_ERROR "Required library ${PREFIX} NOT FOUND.\nInstall the library (dev version) and try again. If the library is already installed, use ccmake to set the missing variables manually.")
+ endif (${PREFIX}_FIND_REQUIRED)
+ endif (${PREFIX}_FOUND)
+ endif (NOT ${PREFIX}_FOUND)
+endmacro (libfind_process)
+
+macro(libfind_library PREFIX basename)
+ set(TMP "")
+ if(MSVC80)
+ set(TMP -vc80)
+ endif(MSVC80)
+ if(MSVC90)
+ set(TMP -vc90)
+ endif(MSVC90)
+ set(${PREFIX}_LIBNAMES ${basename}${TMP})
+ if(${ARGC} GREATER 2)
+ set(${PREFIX}_LIBNAMES ${basename}${TMP}-${ARGV2})
+ string(REGEX REPLACE "\\." "_" TMP ${${PREFIX}_LIBNAMES})
+ set(${PREFIX}_LIBNAMES ${${PREFIX}_LIBNAMES} ${TMP})
+ endif(${ARGC} GREATER 2)
+ find_library(${PREFIX}_LIBRARY
+ NAMES ${${PREFIX}_LIBNAMES}
+ PATHS ${${PREFIX}_PKGCONF_LIBRARY_DIRS}
+ )
+endmacro(libfind_library)
+
diff --git a/cmake/cmake_uninstall.cmake.in b/cmake/cmake_uninstall.cmake.in
new file mode 100644
index 000000000..6031a6ca9
--- /dev/null
+++ b/cmake/cmake_uninstall.cmake.in
@@ -0,0 +1,23 @@
+# http://www.vtk.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F
+
+IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+ MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
+ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+
+FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
+STRING(REGEX REPLACE "\n" ";" files "${files}")
+FOREACH(file ${files})
+ MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
+ IF(EXISTS "$ENV{DESTDIR}${file}")
+ EXEC_PROGRAM(
+ "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
+ OUTPUT_VARIABLE rm_out
+ RETURN_VALUE rm_retval
+ )
+ IF(NOT "${rm_retval}" STREQUAL 0)
+ MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
+ ENDIF(NOT "${rm_retval}" STREQUAL 0)
+ ELSE(EXISTS "$ENV{DESTDIR}${file}")
+ MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
+ ENDIF(EXISTS "$ENV{DESTDIR}${file}")
+ENDFOREACH(file)
diff --git a/cmake/msvc/config.h b/cmake/msvc/config.h
new file mode 100644
index 000000000..71e94c832
--- /dev/null
+++ b/cmake/msvc/config.h
@@ -0,0 +1,55 @@
+#ifndef _MSC_VER // [
+#error "Use this header only with Microsoft Visual C++ compilers!"
+#endif // _MSC_VER ]
+
+#ifndef _MSC_CONFIG_H_ // [
+#define _MSC_CONFIG_H_
+
+////////////////////////////////////////////////////////////////////////
+// enable inline functions for C code
+////////////////////////////////////////////////////////////////////////
+#ifndef __cplusplus
+# define inline __inline
+#endif
+
+////////////////////////////////////////////////////////////////////////
+// signed size_t
+////////////////////////////////////////////////////////////////////////
+#include <stddef.h>
+typedef ptrdiff_t ssize_t;
+
+////////////////////////////////////////////////////////////////////////
+// rint functions
+////////////////////////////////////////////////////////////////////////
+static inline long lrint(double x){return (long)(x > 0.0 ? x + 0.5 : x - 0.5);}
+static inline long lrintf(float x){return (long)(x > 0.0f ? x + 0.5f : x - 0.5f);}
+static inline double rint(double x){return (double)lrint(x);}
+static inline float rintf(float x){return (float)lrintf(x);}
+
+////////////////////////////////////////////////////////////////////////
+// math constants
+////////////////////////////////////////////////////////////////////////
+#define INFINITY HUGE_VAL
+
+# define M_E 2.7182818284590452354 /* e */
+# define M_LOG2E 1.4426950408889634074 /* log_2 e */
+# define M_LOG10E 0.43429448190325182765 /* log_10 e */
+# define M_LN2 0.69314718055994530942 /* log_e 2 */
+# define M_LN10 2.30258509299404568402 /* log_e 10 */
+# define M_PI 3.14159265358979323846 /* pi */
+# define M_PI_2 1.57079632679489661923 /* pi/2 */
+# define M_PI_4 0.78539816339744830962 /* pi/4 */
+# define M_1_PI 0.31830988618379067154 /* 1/pi */
+# define M_2_PI 0.63661977236758134308 /* 2/pi */
+# define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */
+# define M_SQRT2 1.41421356237309504880 /* sqrt(2) */
+# define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */
+
+////////////////////////////////////////////////////////////////////////
+// random and srandom
+////////////////////////////////////////////////////////////////////////
+#include <stdlib.h>
+static inline long int random (void) { return rand(); }
+static inline void srandom (unsigned int seed) { srand(seed); }
+
+#endif // _MSC_CONFIG_H_ ]
diff --git a/cmake/msvc/inttypes.h b/cmake/msvc/inttypes.h
new file mode 100644
index 000000000..1c2baa82e
--- /dev/null
+++ b/cmake/msvc/inttypes.h
@@ -0,0 +1,301 @@
+// ISO C9x compliant inttypes.h for Microsoft Visual Studio
+// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
+//
+// Copyright (c) 2006 Alexander Chemeris
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+//
+// 2. 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.
+//
+// 3. The name of the author may be used to endorse or promote products
+// derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _MSC_VER // [
+#error "Use this header only with Microsoft Visual C++ compilers!"
+#endif // _MSC_VER ]
+
+#ifndef _MSC_INTTYPES_H_ // [
+#define _MSC_INTTYPES_H_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif
+
+#include <stdint.h>
+
+// 7.8 Format conversion of integer types
+
+typedef struct {
+ intmax_t quot;
+ intmax_t rem;
+} imaxdiv_t;
+
+// 7.8.1 Macros for format specifiers
+
+// The fprintf macros for signed integers are:
+#define PRId8 "d"
+#define PRIi8 "i"
+#define PRIdLEAST8 "d"
+#define PRIiLEAST8 "i"
+#define PRIdFAST8 "d"
+#define PRIiFAST8 "i"
+
+#define PRId16 "hd"
+#define PRIi16 "hi"
+#define PRIdLEAST16 "hd"
+#define PRIiLEAST16 "hi"
+#define PRIdFAST16 "hd"
+#define PRIiFAST16 "hi"
+
+#define PRId32 "I32d"
+#define PRIi32 "I32i"
+#define PRIdLEAST32 "I32d"
+#define PRIiLEAST32 "I32i"
+#define PRIdFAST32 "I32d"
+#define PRIiFAST32 "I32i"
+
+#define PRId64 "I64d"
+#define PRIi64 "I64i"
+#define PRIdLEAST64 "I64d"
+#define PRIiLEAST64 "I64i"
+#define PRIdFAST64 "I64d"
+#define PRIiFAST64 "I64i"
+
+#define PRIdMAX "I64d"
+#define PRIiMAX "I64i"
+
+#define PRIdPTR "Id"
+#define PRIiPTR "Ii"
+
+// The fprintf macros for unsigned integers are:
+#define PRIo8 "o"
+#define PRIu8 "u"
+#define PRIx8 "x"
+#define PRIX8 "X"
+#define PRIoLEAST8 "o"
+#define PRIuLEAST8 "u"
+#define PRIxLEAST8 "x"
+#define PRIXLEAST8 "X"
+#define PRIoFAST8 "o"
+#define PRIuFAST8 "u"
+#define PRIxFAST8 "x"
+#define PRIXFAST8 "X"
+
+#define PRIo16 "ho"
+#define PRIu16 "hu"
+#define PRIx16 "hx"
+#define PRIX16 "hX"
+#define PRIoLEAST16 "ho"
+#define PRIuLEAST16 "hu"
+#define PRIxLEAST16 "hx"
+#define PRIXLEAST16 "hX"
+#define PRIoFAST16 "ho"
+#define PRIuFAST16 "hu"
+#define PRIxFAST16 "hx"
+#define PRIXFAST16 "hX"
+
+#define PRIo32 "I32o"
+#define PRIu32 "I32u"
+#define PRIx32 "I32x"
+#define PRIX32 "I32X"
+#define PRIoLEAST32 "I32o"
+#define PRIuLEAST32 "I32u"
+#define PRIxLEAST32 "I32x"
+#define PRIXLEAST32 "I32X"
+#define PRIoFAST32 "I32o"
+#define PRIuFAST32 "I32u"
+#define PRIxFAST32 "I32x"
+#define PRIXFAST32 "I32X"
+
+#define PRIo64 "I64o"
+#define PRIu64 "I64u"
+#define PRIx64 "I64x"
+#define PRIX64 "I64X"
+#define PRIoLEAST64 "I64o"
+#define PRIuLEAST64 "I64u"
+#define PRIxLEAST64 "I64x"
+#define PRIXLEAST64 "I64X"
+#define PRIoFAST64 "I64o"
+#define PRIuFAST64 "I64u"
+#define PRIxFAST64 "I64x"
+#define PRIXFAST64 "I64X"
+
+#define PRIoMAX "I64o"
+#define PRIuMAX "I64u"
+#define PRIxMAX "I64x"
+#define PRIXMAX "I64X"
+
+#define PRIoPTR "Io"
+#define PRIuPTR "Iu"
+#define PRIxPTR "Ix"
+#define PRIXPTR "IX"
+
+// The fscanf macros for signed integers are:
+#define SCNd8 "d"
+#define SCNi8 "i"
+#define SCNdLEAST8 "d"
+#define SCNiLEAST8 "i"
+#define SCNdFAST8 "d"
+#define SCNiFAST8 "i"
+
+#define SCNd16 "hd"
+#define SCNi16 "hi"
+#define SCNdLEAST16 "hd"
+#define SCNiLEAST16 "hi"
+#define SCNdFAST16 "hd"
+#define SCNiFAST16 "hi"
+
+#define SCNd32 "ld"
+#define SCNi32 "li"
+#define SCNdLEAST32 "ld"
+#define SCNiLEAST32 "li"
+#define SCNdFAST32 "ld"
+#define SCNiFAST32 "li"
+
+#define SCNd64 "I64d"
+#define SCNi64 "I64i"
+#define SCNdLEAST64 "I64d"
+#define SCNiLEAST64 "I64i"
+#define SCNdFAST64 "I64d"
+#define SCNiFAST64 "I64i"
+
+#define SCNdMAX "I64d"
+#define SCNiMAX "I64i"
+
+#ifdef _WIN64 // [
+# define SCNdPTR "I64d"
+# define SCNiPTR "I64i"
+#else // _WIN64 ][
+# define SCNdPTR "ld"
+# define SCNiPTR "li"
+#endif // _WIN64 ]
+
+// The fscanf macros for unsigned integers are:
+#define SCNo8 "o"
+#define SCNu8 "u"
+#define SCNx8 "x"
+#define SCNX8 "X"
+#define SCNoLEAST8 "o"
+#define SCNuLEAST8 "u"
+#define SCNxLEAST8 "x"
+#define SCNXLEAST8 "X"
+#define SCNoFAST8 "o"
+#define SCNuFAST8 "u"
+#define SCNxFAST8 "x"
+#define SCNXFAST8 "X"
+
+#define SCNo16 "ho"
+#define SCNu16 "hu"
+#define SCNx16 "hx"
+#define SCNX16 "hX"
+#define SCNoLEAST16 "ho"
+#define SCNuLEAST16 "hu"
+#define SCNxLEAST16 "hx"
+#define SCNXLEAST16 "hX"
+#define SCNoFAST16 "ho"
+#define SCNuFAST16 "hu"
+#define SCNxFAST16 "hx"
+#define SCNXFAST16 "hX"
+
+#define SCNo32 "lo"
+#define SCNu32 "lu"
+#define SCNx32 "lx"
+#define SCNX32 "lX"
+#define SCNoLEAST32 "lo"
+#define SCNuLEAST32 "lu"
+#define SCNxLEAST32 "lx"
+#define SCNXLEAST32 "lX"
+#define SCNoFAST32 "lo"
+#define SCNuFAST32 "lu"
+#define SCNxFAST32 "lx"
+#define SCNXFAST32 "lX"
+
+#define SCNo64 "I64o"
+#define SCNu64 "I64u"
+#define SCNx64 "I64x"
+#define SCNX64 "I64X"
+#define SCNoLEAST64 "I64o"
+#define SCNuLEAST64 "I64u"
+#define SCNxLEAST64 "I64x"
+#define SCNXLEAST64 "I64X"
+#define SCNoFAST64 "I64o"
+#define SCNuFAST64 "I64u"
+#define SCNxFAST64 "I64x"
+#define SCNXFAST64 "I64X"
+
+#define SCNoMAX "I64o"
+#define SCNuMAX "I64u"
+#define SCNxMAX "I64x"
+#define SCNXMAX "I64X"
+
+#ifdef _WIN64 // [
+# define SCNoPTR "I64o"
+# define SCNuPTR "I64u"
+# define SCNxPTR "I64x"
+# define SCNXPTR "I64X"
+#else // _WIN64 ][
+# define SCNoPTR "lo"
+# define SCNuPTR "lu"
+# define SCNxPTR "lx"
+# define SCNXPTR "lX"
+#endif // _WIN64 ]
+
+// 7.8.2 Functions for greatest-width integer types
+
+// 7.8.2.1 The imaxabs function
+#define imaxabs _abs64
+
+// 7.8.2.2 The imaxdiv function
+
+// This is modified version of div() function from Microsoft's div.c found
+// in %MSVC.NET%\crt\src\div.c
+#ifdef STATIC_IMAXDIV // [
+static
+#else // STATIC_IMAXDIV ][
+_inline
+#endif // STATIC_IMAXDIV ]
+imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom)
+{
+ imaxdiv_t result;
+
+ result.quot = numer / denom;
+ result.rem = numer % denom;
+
+ if (numer < 0 && result.rem > 0) {
+ // did division wrong; must fix up
+ ++result.quot;
+ result.rem -= denom;
+ }
+
+ return result;
+}
+
+// 7.8.2.3 The strtoimax and strtoumax functions
+#define strtoimax _strtoi64
+#define strtoumax _strtoui64
+
+// 7.8.2.4 The wcstoimax and wcstoumax functions
+#define wcstoimax _wcstoi64
+#define wcstoumax _wcstoui64
+
+
+#endif // _MSC_INTTYPES_H_ ]
diff --git a/cmake/msvc/stdint.h b/cmake/msvc/stdint.h
new file mode 100644
index 000000000..ab6d37e11
--- /dev/null
+++ b/cmake/msvc/stdint.h
@@ -0,0 +1,251 @@
+// ISO C9x compliant stdint.h for Microsoft Visual Studio
+// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
+//
+// Copyright (c) 2006-2008 Alexander Chemeris
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+//
+// 2. 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.
+//
+// 3. The name of the author may be used to endorse or promote products
+// derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _MSC_VER // [
+#error "Use this header only with Microsoft Visual C++ compilers!"
+#endif // _MSC_VER ]
+
+#ifndef _MSC_STDINT_H_ // [
+#define _MSC_STDINT_H_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif
+
+#include <limits.h>
+
+// For Visual Studio 6 in C++ mode and for many Visual Studio versions when
+// compiling for ARM we should wrap <wchar.h> include with 'extern "C++" {}'
+// or compiler give many errors like this:
+// error C2733: second C linkage of overloaded function 'wmemchr' not allowed
+#ifdef __cplusplus
+extern "C" {
+#endif
+# include <wchar.h>
+#ifdef __cplusplus
+}
+#endif
+
+// Define _W64 macros to mark types changing their size, like intptr_t.
+#ifndef _W64
+# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
+# define _W64 __w64
+# else
+# define _W64
+# endif
+#endif
+
+
+// 7.18.1 Integer types
+
+// 7.18.1.1 Exact-width integer types
+
+// Visual Studio 6 and Embedded Visual C++ 4 doesn't
+// realize that, e.g. char has the same size as __int8
+// so we give up on __intX for them.
+#if (_MSC_VER < 1300)
+ typedef signed char int8_t;
+ typedef signed short int16_t;
+ typedef signed int int32_t;
+ typedef unsigned char uint8_t;
+ typedef unsigned short uint16_t;
+ typedef unsigned int uint32_t;
+#else
+ typedef signed __int8 int8_t;
+ typedef signed __int16 int16_t;
+ typedef signed __int32 int32_t;
+ typedef unsigned __int8 uint8_t;
+ typedef unsigned __int16 uint16_t;
+ typedef unsigned __int32 uint32_t;
+#endif
+typedef signed __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+
+
+// 7.18.1.2 Minimum-width integer types
+typedef int8_t int_least8_t;
+typedef int16_t int_least16_t;
+typedef int32_t int_least32_t;
+typedef int64_t int_least64_t;
+typedef uint8_t uint_least8_t;
+typedef uint16_t uint_least16_t;
+typedef uint32_t uint_least32_t;
+typedef uint64_t uint_least64_t;
+
+// 7.18.1.3 Fastest minimum-width integer types
+typedef int8_t int_fast8_t;
+typedef int16_t int_fast16_t;
+typedef int32_t int_fast32_t;
+typedef int64_t int_fast64_t;
+typedef uint8_t uint_fast8_t;
+typedef uint16_t uint_fast16_t;
+typedef uint32_t uint_fast32_t;
+typedef uint64_t uint_fast64_t;
+
+// 7.18.1.4 Integer types capable of holding object pointers
+#ifdef _WIN64 // [
+ typedef signed __int64 intptr_t;
+ typedef unsigned __int64 uintptr_t;
+#else // _WIN64 ][
+ typedef _W64 signed int intptr_t;
+ typedef _W64 unsigned int uintptr_t;
+#endif // _WIN64 ]
+
+// 7.18.1.5 Greatest-width integer types
+typedef int64_t intmax_t;
+typedef uint64_t uintmax_t;
+
+
+// 7.18.2 Limits of specified-width integer types
+
+#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259
+
+// 7.18.2.1 Limits of exact-width integer types
+#define INT8_MIN ((int8_t)_I8_MIN)
+#define INT8_MAX _I8_MAX
+#define INT16_MIN ((int16_t)_I16_MIN)
+#define INT16_MAX _I16_MAX
+#define INT32_MIN ((int32_t)_I32_MIN)
+#define INT32_MAX _I32_MAX
+#define INT64_MIN ((int64_t)_I64_MIN)
+#define INT64_MAX _I64_MAX
+#define UINT8_MAX _UI8_MAX
+#define UINT16_MAX _UI16_MAX
+#define UINT32_MAX _UI32_MAX
+#define UINT64_MAX _UI64_MAX
+
+// 7.18.2.2 Limits of minimum-width integer types
+#define INT_LEAST8_MIN INT8_MIN
+#define INT_LEAST8_MAX INT8_MAX
+#define INT_LEAST16_MIN INT16_MIN
+#define INT_LEAST16_MAX INT16_MAX
+#define INT_LEAST32_MIN INT32_MIN
+#define INT_LEAST32_MAX INT32_MAX
+#define INT_LEAST64_MIN INT64_MIN
+#define INT_LEAST64_MAX INT64_MAX
+#define UINT_LEAST8_MAX UINT8_MAX
+#define UINT_LEAST16_MAX UINT16_MAX
+#define UINT_LEAST32_MAX UINT32_MAX
+#define UINT_LEAST64_MAX UINT64_MAX
+
+// 7.18.2.3 Limits of fastest minimum-width integer types
+#define INT_FAST8_MIN INT8_MIN
+#define INT_FAST8_MAX INT8_MAX
+#define INT_FAST16_MIN INT16_MIN
+#define INT_FAST16_MAX INT16_MAX
+#define INT_FAST32_MIN INT32_MIN
+#define INT_FAST32_MAX INT32_MAX
+#define INT_FAST64_MIN INT64_MIN
+#define INT_FAST64_MAX INT64_MAX
+#define UINT_FAST8_MAX UINT8_MAX
+#define UINT_FAST16_MAX UINT16_MAX
+#define UINT_FAST32_MAX UINT32_MAX
+#define UINT_FAST64_MAX UINT64_MAX
+
+// 7.18.2.4 Limits of integer types capable of holding object pointers
+#ifdef _WIN64 // [
+# define INTPTR_MIN INT64_MIN
+# define INTPTR_MAX INT64_MAX
+# define UINTPTR_MAX UINT64_MAX
+#else // _WIN64 ][
+# define INTPTR_MIN INT32_MIN
+# define INTPTR_MAX INT32_MAX
+# define UINTPTR_MAX UINT32_MAX
+#endif // _WIN64 ]
+
+// 7.18.2.5 Limits of greatest-width integer types
+#define INTMAX_MIN INT64_MIN
+#define INTMAX_MAX INT64_MAX
+#define UINTMAX_MAX UINT64_MAX
+
+// 7.18.3 Limits of other integer types
+
+#ifdef _WIN64 // [
+# define PTRDIFF_MIN _I64_MIN
+# define PTRDIFF_MAX _I64_MAX
+#else // _WIN64 ][
+# define PTRDIFF_MIN _I32_MIN
+# define PTRDIFF_MAX _I32_MAX
+#endif // _WIN64 ]
+
+#define SIG_ATOMIC_MIN INT_MIN
+#define SIG_ATOMIC_MAX INT_MAX
+
+#ifndef SIZE_MAX // [
+# ifdef _WIN64 // [
+# define SIZE_MAX _UI64_MAX
+# else // _WIN64 ][
+# define SIZE_MAX _UI32_MAX
+# endif // _WIN64 ]
+#endif // SIZE_MAX ]
+
+// WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h>
+#ifndef WCHAR_MIN // [
+# define WCHAR_MIN 0
+#endif // WCHAR_MIN ]
+#ifndef WCHAR_MAX // [
+# define WCHAR_MAX _UI16_MAX
+#endif // WCHAR_MAX ]
+
+#define WINT_MIN 0
+#define WINT_MAX _UI16_MAX
+
+#endif // __STDC_LIMIT_MACROS ]
+
+
+// 7.18.4 Limits of other integer types
+
+#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260
+
+// 7.18.4.1 Macros for minimum-width integer constants
+
+#define INT8_C(val) val##i8
+#define INT16_C(val) val##i16
+#define INT32_C(val) val##i32
+#define INT64_C(val) val##i64
+
+#define UINT8_C(val) val##ui8
+#define UINT16_C(val) val##ui16
+#define UINT32_C(val) val##ui32
+#define UINT64_C(val) val##ui64
+
+// 7.18.4.2 Macros for greatest-width integer constants
+#ifndef INTMAX_C
+#define INTMAX_C INT64_C
+#endif
+#ifndef UINTMAX_C
+#define UINTMAX_C UINT64_C
+#endif
+
+#endif // __STDC_CONSTANT_MACROS ]
+
+
+#endif // _MSC_STDINT_H_ ]
diff --git a/cmake/msvc/sys/time.h b/cmake/msvc/sys/time.h
new file mode 100644
index 000000000..998b5d7bb
--- /dev/null
+++ b/cmake/msvc/sys/time.h
@@ -0,0 +1,69 @@
+#ifndef _MSC_VER // [
+#error "Use this header only with Microsoft Visual C++ compilers!"
+#endif // _MSC_VER ]
+
+#ifndef _MSC_SYS_TIME_H_
+#define _MSC_SYS_TIME_H_
+
+//http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/430449b3-f6dd-4e18-84de-eebd26a8d668
+#include < time.h >
+#include <windows.h> //I've ommited this line.
+#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS)
+ #define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64
+#else
+ #define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL
+#endif
+
+struct timespec {
+
+time_t tv_sec; /* Seconds since 00:00:00 GMT, */
+
+/* 1 January 1970 */
+
+long tv_nsec; /* Additional nanoseconds since */
+
+/* tv_sec */
+
+};
+
+struct timezone
+{
+ int tz_minuteswest; /* minutes W of Greenwich */
+ int tz_dsttime; /* type of dst correction */
+};
+
+static inline int gettimeofday(struct timeval *tv, struct timezone *tz)
+{
+ FILETIME ft;
+ unsigned __int64 tmpres = 0;
+ static int tzflag;
+
+ if (NULL != tv)
+ {
+ GetSystemTimeAsFileTime(&ft);
+
+ tmpres |= ft.dwHighDateTime;
+ tmpres <<= 32;
+ tmpres |= ft.dwLowDateTime;
+
+ /*converting file time to unix epoch*/
+ tmpres -= DELTA_EPOCH_IN_MICROSECS;
+ tv->tv_sec = (long)(tmpres / 1000000UL);
+ tv->tv_usec = (long)(tmpres % 1000000UL);
+ }
+
+ if (NULL != tz)
+ {
+ if (!tzflag)
+ {
+ _tzset();
+ tzflag++;
+ }
+ tz->tz_minuteswest = _timezone / 60;
+ tz->tz_dsttime = _daylight;
+ }
+
+ return 0;
+}
+
+#endif //_MSC_SYS_TIME_H_
diff --git a/cmake/msvc/unistd.h b/cmake/msvc/unistd.h
new file mode 100644
index 000000000..de412e42a
--- /dev/null
+++ b/cmake/msvc/unistd.h
@@ -0,0 +1,10 @@
+#ifndef _MSC_VER // [
+#error "Use this header only with Microsoft Visual C++ compilers!"
+#endif // _MSC_VER ]
+
+#ifndef _MSC_UNISTD_H_ // [
+#define _MSC_UNISTD_H_
+
+#include <process.h>
+
+#endif // _MSC_UNISTD_H_ ]
diff --git a/debian/postinst b/debian/postinst
new file mode 100755
index 000000000..66a0f75c1
--- /dev/null
+++ b/debian/postinst
@@ -0,0 +1,2 @@
+#!/bin/bash
+/usr/libexec/gnuradio/grc_setup_freedesktop install
diff --git a/debian/prerm b/debian/prerm
new file mode 100755
index 000000000..edc1e1e48
--- /dev/null
+++ b/debian/prerm
@@ -0,0 +1,2 @@
+#!/bin/bash
+/usr/libexec/gnuradio/grc_setup_freedesktop uninstall
diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
new file mode 100644
index 000000000..45f9b0102
--- /dev/null
+++ b/docs/CMakeLists.txt
@@ -0,0 +1,50 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup dependencies
+########################################################################
+find_package(Doxygen)
+
+########################################################################
+# Register component
+########################################################################
+include(GrComponent)
+GR_REGISTER_COMPONENT("doxygen" ENABLE_DOXYGEN DOXYGEN_FOUND)
+
+########################################################################
+# Begin conditional configuration
+########################################################################
+if(ENABLE_DOXYGEN)
+
+########################################################################
+# Setup CPack components
+########################################################################
+include(GrPackage)
+CPACK_COMPONENT("docs"
+ DISPLAY_NAME "Documentation"
+ DESCRIPTION "Doxygen generated documentation"
+)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(doxygen)
+
+endif(ENABLE_DOXYGEN)
diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
new file mode 100644
index 000000000..e81429dc5
--- /dev/null
+++ b/docs/doxygen/CMakeLists.txt
@@ -0,0 +1,51 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Create the doxygen configuration file
+########################################################################
+file(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR} top_srcdir)
+file(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR} abs_top_srcdir)
+file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} abs_top_builddir)
+
+set(HAVE_DOT ${DOXYGEN_DOT_FOUND})
+set(enable_html_docs YES)
+set(enable_latex_docs NO)
+set(enable_xml_docs YES)
+
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
+ ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
+@ONLY)
+
+set(BUILT_DIRS ${CMAKE_CURRENT_BINARY_DIR}/xml ${CMAKE_CURRENT_BINARY_DIR}/html)
+
+########################################################################
+# Make and install doxygen docs
+########################################################################
+add_custom_command(
+ OUTPUT ${BUILT_DIRS}
+ COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ COMMENT "Generating documentation with doxygen"
+)
+
+add_custom_target(doxygen_target ALL DEPENDS ${BUILT_DIRS})
+
+install(DIRECTORY ${BUILT_DIRS} DESTINATION ${GR_PKG_DOC_DIR} COMPONENT "docs")
diff --git a/gnuradio-core/CMakeLists.txt b/gnuradio-core/CMakeLists.txt
new file mode 100644
index 000000000..029ff28a4
--- /dev/null
+++ b/gnuradio-core/CMakeLists.txt
@@ -0,0 +1,144 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup dependencies
+########################################################################
+include(GrBoost)
+
+find_package(GSL)
+
+find_package(FFTW3f)
+
+include(GrPython) #used for code generation
+
+get_filename_component(GR_CORE_PYTHONPATH
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/python ABSOLUTE
+)
+GR_SET_GLOBAL(GR_CORE_PYTHONPATH ${GR_CORE_PYTHONPATH})
+
+########################################################################
+# Register component
+########################################################################
+include(GrComponent)
+GR_REGISTER_COMPONENT("gnuradio-core" ENABLE_GR_CORE
+ ENABLE_GRUEL
+ Boost_FOUND
+ GSL_FOUND
+ FFTW3F_FOUND
+ PYTHONINTERP_FOUND
+)
+
+include(GrMiscUtils)
+GR_SET_GLOBAL(GNURADIO_CORE_INCLUDE_DIRS
+ ${GRUEL_INCLUDE_DIRS} #headers depend on gruel
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/runtime
+ ${CMAKE_CURRENT_BINARY_DIR}/src/lib/general
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/general
+ ${CMAKE_CURRENT_BINARY_DIR}/src/lib/gengen
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/gengen
+ ${CMAKE_CURRENT_BINARY_DIR}/src/lib/filter
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/filter
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/missing
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/reed-solomon
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/viterbi
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/io
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/g72x
+ ${CMAKE_CURRENT_BINARY_DIR}/src/lib/swig
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/swig
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/hier
+)
+
+GR_SET_GLOBAL(GNURADIO_CORE_SWIG_INCLUDE_DIRS
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/swig
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+)
+
+########################################################################
+# Begin conditional configuration
+########################################################################
+if(ENABLE_GR_CORE)
+
+########################################################################
+# Setup CPack components
+########################################################################
+include(GrPackage)
+CPACK_SET(CPACK_COMPONENT_GROUP_CORE_DESCRIPTION "GNU Radio Core Library")
+
+CPACK_COMPONENT("core_runtime"
+ GROUP "Core"
+ DISPLAY_NAME "Runtime"
+ DESCRIPTION "Runtime"
+ DEPENDS "gruel_runtime"
+)
+
+CPACK_COMPONENT("core_devel"
+ GROUP "Core"
+ DISPLAY_NAME "Development"
+ DESCRIPTION "C++ headers, package config, import libraries"
+ DEPENDS "gruel_devel"
+)
+
+CPACK_COMPONENT("core_python"
+ GROUP "Core"
+ DISPLAY_NAME "Python"
+ DESCRIPTION "Python modules for runtime; GRC xml files"
+ DEPENDS "gruel_python;core_runtime"
+)
+
+CPACK_COMPONENT("core_swig"
+ GROUP "Core"
+ DISPLAY_NAME "SWIG"
+ DESCRIPTION "SWIG development .i files"
+ DEPENDS "gruel_swig;core_python;core_devel"
+)
+
+install(
+ FILES gnuradio-core.conf
+ DESTINATION ${GR_PKG_CONF_DIR}
+ COMPONENT "core_runtime"
+)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(src/lib)
+if(ENABLE_TESTING)
+ add_subdirectory(src/tests)
+endif(ENABLE_TESTING)
+if(ENABLE_PYTHON)
+ add_subdirectory(src/lib/swig)
+ add_subdirectory(src/python/gnuradio)
+endif(ENABLE_PYTHON)
+
+########################################################################
+# Create Pkg Config File
+########################################################################
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-core.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-core.pc
+@ONLY)
+
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-core.pc
+ DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
+ COMPONENT "core_devel"
+)
+
+endif(ENABLE_GR_CORE)
diff --git a/gnuradio-core/src/lib/CMakeLists.txt b/gnuradio-core/src/lib/CMakeLists.txt
new file mode 100644
index 000000000..2e0d95798
--- /dev/null
+++ b/gnuradio-core/src/lib/CMakeLists.txt
@@ -0,0 +1,106 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup compatibility checks and defines
+########################################################################
+include(${CMAKE_CURRENT_SOURCE_DIR}/ConfigChecks.cmake)
+
+########################################################################
+# Include subdirs rather to populate to the sources lists.
+########################################################################
+GR_INCLUDE_SUBDIRECTORY(missing)
+GR_INCLUDE_SUBDIRECTORY(runtime)
+GR_INCLUDE_SUBDIRECTORY(filter)
+GR_INCLUDE_SUBDIRECTORY(viterbi)
+GR_INCLUDE_SUBDIRECTORY(general)
+GR_INCLUDE_SUBDIRECTORY(gengen)
+GR_INCLUDE_SUBDIRECTORY(reed-solomon)
+GR_INCLUDE_SUBDIRECTORY(io)
+GR_INCLUDE_SUBDIRECTORY(hier)
+
+list(APPEND gnuradio_core_sources bug_work_around_6.cc)
+list(APPEND test_gnuradio_core_sources bug_work_around_6.cc)
+
+########################################################################
+# Setup the include and linker paths
+########################################################################
+include_directories(${GNURADIO_CORE_INCLUDE_DIRS})
+
+include_directories(${Boost_INCLUDE_DIRS})
+link_directories(${Boost_LIBRARY_DIRS})
+
+add_definitions(${GSL_DEFINITIONS})
+include_directories(${GSL_INCLUDE_DIRS})
+link_directories(${GSL_LIBRARY_DIRS})
+
+include_directories(${FFTW3F_INCLUDE_DIRS})
+link_directories(${FFTW3F_LIBRARY_DIRS})
+
+########################################################################
+# Setup library
+########################################################################
+list(APPEND gnuradio_core_libs
+ gruel
+ ${Boost_LIBRARIES}
+ ${GSL_LIBRARIES}
+ ${FFTW3F_LIBRARIES}
+)
+
+#need to link with librt on ubuntu 11.10 for shm_*
+if(LINUX)
+ list(APPEND gnuradio_core_libs rt)
+endif()
+
+add_library(gnuradio-core SHARED ${gnuradio_core_sources})
+target_link_libraries(gnuradio-core ${gnuradio_core_libs})
+set_target_properties(gnuradio-core PROPERTIES DEFINE_SYMBOL "gnuradio_core_EXPORTS")
+set_target_properties(gnuradio-core PROPERTIES SOVERSION ${LIBVER})
+#avoid fftw and gsl link in dependent libraries:
+set_target_properties(gnuradio-core PROPERTIES LINK_INTERFACE_LIBRARIES "gruel")
+
+install(TARGETS gnuradio-core
+ LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT "core_runtime" # .so/.dylib file
+ ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT "core_devel" # .lib file
+ RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT "core_runtime" # .dll file
+)
+
+########################################################################
+# Setup executables
+########################################################################
+add_executable(gnuradio-config-info gnuradio-config-info.cc)
+target_link_libraries(gnuradio-config-info gnuradio-core ${Boost_LIBRARIES})
+install(
+ TARGETS gnuradio-config-info
+ DESTINATION ${GR_RUNTIME_DIR}
+ COMPONENT "core_runtime"
+)
+
+########################################################################
+# Setup tests
+########################################################################
+if(ENABLE_TESTING)
+
+include_directories(${CPPUNIT_INCLUDE_DIRS})
+link_directories(${CPPUNIT_LIBRARY_DIRS})
+
+add_library(test-gnuradio-core SHARED ${test_gnuradio_core_sources})
+target_link_libraries(test-gnuradio-core gnuradio-core ${CPPUNIT_LIBRARIES} ${Boost_LIBRARIES})
+
+endif(ENABLE_TESTING)
diff --git a/gnuradio-core/src/lib/ConfigChecks.cmake b/gnuradio-core/src/lib/ConfigChecks.cmake
new file mode 100644
index 000000000..30a1011e4
--- /dev/null
+++ b/gnuradio-core/src/lib/ConfigChecks.cmake
@@ -0,0 +1,212 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrMiscUtils)
+INCLUDE(CheckCXXSourceCompiles)
+
+IF(MSVC) #add this directory for our provided headers
+LIST(APPEND CMAKE_REQUIRED_INCLUDES ${CMAKE_SOURCE_DIR}/msvc)
+ENDIF(MSVC)
+
+GR_CHECK_HDR_N_DEF(netdb.h HAVE_NETDB_H)
+GR_CHECK_HDR_N_DEF(sys/time.h HAVE_SYS_TIME_H)
+GR_CHECK_HDR_N_DEF(sys/types.h HAVE_SYS_TYPES_H)
+GR_CHECK_HDR_N_DEF(sys/select.h HAVE_SYS_SELECT_H)
+GR_CHECK_HDR_N_DEF(sys/socket.h HAVE_SYS_SOCKET_H)
+GR_CHECK_HDR_N_DEF(io.h HAVE_IO_H)
+GR_CHECK_HDR_N_DEF(sys/mman.h HAVE_SYS_MMAN_H)
+GR_CHECK_HDR_N_DEF(sys/ipc.h HAVE_SYS_IPC_H)
+GR_CHECK_HDR_N_DEF(sys/shm.h HAVE_SYS_SHM_H)
+GR_CHECK_HDR_N_DEF(signal.h HAVE_SIGNAL_H)
+GR_CHECK_HDR_N_DEF(netinet/in.h HAVE_NETINET_IN_H)
+GR_CHECK_HDR_N_DEF(arpa/inet.h HAVE_ARPA_INET_H)
+GR_CHECK_HDR_N_DEF(byteswap.h HAVE_BYTESWAP_H)
+GR_CHECK_HDR_N_DEF(linux/ppdev.h HAVE_LINUX_PPDEV_H)
+GR_CHECK_HDR_N_DEF(dev/ppbus/ppi.h HAVE_DEV_PPBUS_PPI_H)
+GR_CHECK_HDR_N_DEF(unistd.h HAVE_UNISTD_H)
+GR_CHECK_HDR_N_DEF(malloc.h HAVE_MALLOC_H)
+
+
+########################################################################
+CHECK_CXX_SOURCE_COMPILES("
+ #include <stdio.h>
+ int main(){snprintf(0, 0, 0); return 0;}
+ " HAVE_SNPRINTF
+)
+GR_ADD_COND_DEF(HAVE_SNPRINTF)
+
+########################################################################
+CHECK_CXX_SOURCE_COMPILES("
+ #include <signal.h>
+ int main(){sigaction(0, 0, 0); return 0;}
+ " HAVE_SIGACTION
+)
+GR_ADD_COND_DEF(HAVE_SIGACTION)
+
+########################################################################
+CHECK_CXX_SOURCE_COMPILES("
+ #include <sys/select.h>
+ int main(){select(0, 0, 0, 0, 0); return 0;}
+ " HAVE_SELECT
+)
+GR_ADD_COND_DEF(HAVE_SELECT)
+
+
+########################################################################
+CHECK_CXX_SOURCE_COMPILES("
+ #include <unistd.h>
+ int main(){sysconf(0); return 0;}
+ " HAVE_SYSCONF
+)
+GR_ADD_COND_DEF(HAVE_SYSCONF)
+
+CHECK_CXX_SOURCE_COMPILES("
+ #include <unistd.h>
+ int main(){getpagesize(); return 0;}
+ " HAVE_GETPAGESIZE
+)
+GR_ADD_COND_DEF(HAVE_GETPAGESIZE)
+
+
+########################################################################
+CHECK_CXX_SOURCE_COMPILES("
+ #include <Winbase.h>
+ int main(){Sleep(0); return 0;}
+ " HAVE_SSLEEP
+)
+GR_ADD_COND_DEF(HAVE_SSLEEP)
+
+CHECK_CXX_SOURCE_COMPILES("
+ #include <time.h>
+ int main(){nanosleep(0, 0); return 0;}
+ " HAVE_NANOSLEEP
+)
+GR_ADD_COND_DEF(HAVE_NANOSLEEP)
+
+CHECK_CXX_SOURCE_COMPILES("
+ #include <sys/time.h>
+ int main(){gettimeofday(0, 0); return 0;}
+ " HAVE_GETTIMEOFDAY
+)
+GR_ADD_COND_DEF(HAVE_GETTIMEOFDAY)
+
+########################################################################
+CHECK_CXX_SOURCE_COMPILES("
+ #include <stdlib.h>
+ int main(){posix_memalign(0, 0, 0); return 0;}
+ " HAVE_POSIX_MEMALIGN
+)
+GR_ADD_COND_DEF(HAVE_POSIX_MEMALIGN)
+
+CHECK_CXX_SOURCE_COMPILES("
+ #include <malloc.h>
+ int main(){valloc(0); return 0;}
+ " HAVE_VALLOC
+)
+GR_ADD_COND_DEF(HAVE_VALLOC)
+
+ADD_DEFINITIONS(-DALIGNED_MALLOC=0)
+
+########################################################################
+SET(CMAKE_REQUIRED_LIBRARIES -lpthread)
+CHECK_CXX_SOURCE_COMPILES("
+ #include <signal.h>
+ int main(){pthread_sigmask(0, 0, 0); return 0;}
+ " HAVE_PTHREAD_SIGMASK
+)
+GR_ADD_COND_DEF(HAVE_PTHREAD_SIGMASK)
+SET(CMAKE_REQUIRED_LIBRARIES)
+
+########################################################################
+CHECK_CXX_SOURCE_COMPILES("
+ #include <windows.h>
+ int main(){
+ HANDLE handle;
+ int size;
+ LPCTSTR lpName;
+ handle = CreateFileMapping(
+ INVALID_HANDLE_VALUE, // use paging file
+ NULL, // default security
+ PAGE_READWRITE, // read/write access
+ 0, // max. object size
+ size, // buffer size
+ lpName); // name of mapping object
+ return 0;
+ } " HAVE_CREATEFILEMAPPING
+)
+GR_ADD_COND_DEF(HAVE_CREATEFILEMAPPING)
+
+########################################################################
+CHECK_INCLUDE_FILE_CXX(windows.h HAVE_WINDOWS_H)
+IF(HAVE_WINDOWS_H)
+ ADD_DEFINITIONS(-DHAVE_WINDOWS_H -DUSING_WINSOCK)
+ MESSAGE(STATUS "Adding windows libs to gnuradio core libs...")
+ LIST(APPEND gnuradio_core_libs WS2_32.lib WSock32.lib)
+ENDIF(HAVE_WINDOWS_H)
+
+########################################################################
+SET(CMAKE_REQUIRED_LIBRARIES -lrt)
+CHECK_CXX_SOURCE_COMPILES("
+ #include <sys/types.h>
+ #include <sys/mman.h>
+ int main(){shm_open(0, 0, 0); return 0;}
+ " HAVE_SHM_OPEN
+)
+GR_ADD_COND_DEF(HAVE_SHM_OPEN)
+SET(CMAKE_REQUIRED_LIBRARIES)
+
+########################################################################
+CHECK_CXX_SOURCE_COMPILES("
+ #define _GNU_SOURCE
+ #include <math.h>
+ int main(){double x, sin, cos; sincos(x, &sin, &cos); return 0;}
+ " HAVE_SINCOS
+)
+GR_ADD_COND_DEF(HAVE_SINCOS)
+
+CHECK_CXX_SOURCE_COMPILES("
+ #define _GNU_SOURCE
+ #include <math.h>
+ int main(){float x, sin, cos; sincosf(x, &sin, &cos); return 0;}
+ " HAVE_SINCOSF
+)
+GR_ADD_COND_DEF(HAVE_SINCOSF)
+
+CHECK_CXX_SOURCE_COMPILES("
+ #include <math.h>
+ int main(){sinf(0); return 0;}
+ " HAVE_SINF
+)
+GR_ADD_COND_DEF(HAVE_SINF)
+
+CHECK_CXX_SOURCE_COMPILES("
+ #include <math.h>
+ int main(){cosf(0); return 0;}
+ " HAVE_COSF
+)
+GR_ADD_COND_DEF(HAVE_COSF)
+
+########################################################################
+CHECK_CXX_SOURCE_COMPILES("
+ #include <sys/mman.h>
+ int main(){mmap(0, 0, 0, 0, 0, 0); return 0;}
+ " HAVE_MMAP
+)
+GR_ADD_COND_DEF(HAVE_MMAP)
diff --git a/gnuradio-core/src/lib/filter/CMakeLists.txt b/gnuradio-core/src/lib/filter/CMakeLists.txt
new file mode 100644
index 000000000..da16cd60b
--- /dev/null
+++ b/gnuradio-core/src/lib/filter/CMakeLists.txt
@@ -0,0 +1,351 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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 included, use CMake directory variables
+########################################################################
+
+#set the C language property on the assembly files so the compiler will pick them up
+file(GLOB gr_core_filter_asms ${CMAKE_CURRENT_SOURCE_DIR}/*.S)
+foreach(gr_core_filter_asm ${gr_core_filter_asms})
+ set_property(SOURCE ${gr_core_filter_asm} PROPERTY LANGUAGE C)
+endforeach(gr_core_filter_asm)
+
+#detect 32 or 64 bit compiler
+if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i.86|x86|x86_64)$")
+ include(CheckTypeSize)
+ check_type_size("void*" SIZEOF_VOID_P BUILTIN_TYPES_ONLY)
+ if (${SIZEOF_VOID_P} EQUAL 8)
+ set(CMAKE_SYSTEM_PROCESSOR_x86 64)
+ else()
+ set(CMAKE_SYSTEM_PROCESSOR_x86 32)
+ endif()
+endif()
+
+########################################################################
+# Generate the makefile.gen, then extract its sources:
+# This is a round-about way to extract the sources,
+# but it requires minimum changed to the python utils.
+#
+# The recommended way to do this:
+# - Make a generation macro that registers the sources command.
+# - List the generation macro with each templated source file.
+# - Create a python script (very generic) to perform generation.
+# - This way the targets would depend only on their sources.
+########################################################################
+execute_process(
+ COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B} -c "
+import os, sys
+sys.path.append('${GR_CORE_PYTHONPATH}')
+sys.path.append('${CMAKE_CURRENT_SOURCE_DIR}')
+os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
+os.environ['gendir'] = '${CMAKE_CURRENT_BINARY_DIR}'
+os.environ['do_makefile'] = '1'
+os.environ['do_sources'] = '0'
+from generate_all import generate_all
+generate_all()
+ " WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+)
+
+macro(FILTER_GEN_EXTRACT outvar ext)
+ execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import os; print ';'.join(
+ map(lambda x: os.path.join('${CMAKE_CURRENT_BINARY_DIR}', x.replace('\\\\', '').strip()),
+ filter(lambda f: '${ext}' in f, open('${CMAKE_CURRENT_BINARY_DIR}/Makefile.gen').readlines()
+ )))" OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE ${outvar})
+ file(TO_CMAKE_PATH "${${outvar}}" ${outvar})
+endmacro(FILTER_GEN_EXTRACT)
+
+FILTER_GEN_EXTRACT(generated_filter_sources ".cc")
+FILTER_GEN_EXTRACT(generated_filter_includes ".h")
+FILTER_GEN_EXTRACT(generated_filter_swigs ".i")
+
+#TODO simplify this list with a triple-threat for loop
+set(generated_filter_deps
+ ${CMAKE_CURRENT_SOURCE_DIR}/generate_all.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/generate_gr_fir_XXX.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/generate_gr_fir_filter_XXX.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/generate_gr_interp_fir_filter_XXX.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/generate_gr_rational_resampler_base_XXX.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/generate_gr_fir_sysconfig.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/generate_gr_fir_sysconfig_generic.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/generate_gr_fir_util.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/generate_gr_freq_xlating_fir_filter_XXX.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/generate_gri_fir_filter_with_buffer_XXX.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/generate_utils.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_XXX.cc.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_XXX.h.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_XXX_generic.cc.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_XXX_generic.h.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_filter_XXX.cc.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_filter_XXX.h.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_filter_XXX.i.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_interp_fir_filter_XXX.cc.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_interp_fir_filter_XXX.h.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_interp_fir_filter_XXX.i.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_rational_resampler_base_XXX.cc.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_rational_resampler_base_XXX.h.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_rational_resampler_base_XXX.i.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_freq_xlating_fir_filter_XXX.cc.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_freq_xlating_fir_filter_XXX.h.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_freq_xlating_fir_filter_XXX.i.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_fir_filter_with_buffer_XXX.cc.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_fir_filter_with_buffer_XXX.h.t
+)
+
+add_custom_command(
+ OUTPUT
+ ${generated_filter_sources}
+ ${generated_filter_includes}
+ ${generated_filter_swigs}
+ DEPENDS ${generated_filter_deps}
+ COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B} -c
+ "import os, sys;sys.path.append('${GR_CORE_PYTHONPATH}');sys.path.append('${CMAKE_CURRENT_SOURCE_DIR}');os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}';from generate_all import generate_all;generate_all()"
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ COMMENT "generating filter files"
+ VERBATIM
+)
+
+add_custom_target(filter_generated DEPENDS
+ ${generated_filter_sources}
+ ${generated_filter_includes}
+ ${generated_filter_swigs}
+)
+
+########################################################################
+# Add target specific files
+# May VOLK put a rest to all the insanity below.
+########################################################################
+if(MSVC)
+ list(APPEND gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/sysconfig_generic.cc
+ )
+ list(APPEND test_gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_dotprod_generic.cc
+ )
+else(MSVC)
+if(CMAKE_SYSTEM_PROCESSOR_x86)
+ list(APPEND gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/sysconfig_x86.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_sysconfig_x86.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_cpu_x86.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_ccc_simd.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_ccc_x86.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_fff_simd.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_fff_x86.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_fsf_simd.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_fsf_x86.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_scc_simd.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_scc_x86.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_fcc_simd.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_fcc_x86.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_ccf_simd.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_ccf_x86.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/sse_debug.c
+ )
+ list(APPEND test_gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_dotprod_x86.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_float_dotprod_x86.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_complex_dotprod_x86.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_ccomplex_dotprod_x86.cc
+ )
+endif()
+
+if(CMAKE_SYSTEM_PROCESSOR_x86 AND ${CMAKE_SYSTEM_PROCESSOR_x86} EQUAL 64)
+ list(APPEND gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/float_dotprod_sse64.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/float_dotprod_3dnow64.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/complex_dotprod_3dnowext64.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/complex_dotprod_3dnow64.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/complex_dotprod_sse64.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/ccomplex_dotprod_3dnowext64.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/ccomplex_dotprod_3dnow64.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/ccomplex_dotprod_sse64.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/fcomplex_dotprod_3dnow64.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/fcomplex_dotprod_sse64.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/short_dotprod_mmx64.S
+ )
+elseif(CMAKE_SYSTEM_PROCESSOR_x86 AND ${CMAKE_SYSTEM_PROCESSOR_x86} EQUAL 32)
+ list(APPEND gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/float_dotprod_sse.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/float_dotprod_3dnow.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/complex_dotprod_3dnowext.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/complex_dotprod_3dnow.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/complex_dotprod_sse.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/ccomplex_dotprod_3dnowext.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/ccomplex_dotprod_3dnow.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/ccomplex_dotprod_sse.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/fcomplex_dotprod_3dnow.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/fcomplex_dotprod_sse.S
+ ${CMAKE_CURRENT_SOURCE_DIR}/short_dotprod_mmx.S
+ )
+elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)")
+ list(APPEND gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/sysconfig_powerpc.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_sysconfig_powerpc.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_cpu_powerpc.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_fff_altivec.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_altivec.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/dotprod_fff_altivec.c
+ )
+ list(APPEND test_gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_dotprod_powerpc.cc
+ )
+elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
+ list(APPEND gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/sysconfig_armv7_a.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_sysconfig_armv7_a.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_cpu_armv7_a.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_fff_armv7_a.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/dotprod_fff_armv7_a.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/dotprod_ccf_armv7_a.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_ccf_armv7_a.cc
+ )
+ list(APPEND test_gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_dotprod_armv7_a.cc
+ )
+else()
+ list(APPEND gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/sysconfig_generic.cc
+ )
+ list(APPEND test_gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_dotprod_generic.cc
+ )
+endif()
+endif(MSVC)
+
+########################################################################
+# Append gnuradio-core library sources
+########################################################################
+list(APPEND gnuradio_core_sources
+ ${generated_filter_sources}
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_fft_filter_fff_generic.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_fft_filter_ccc_generic.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_sincos.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_goertzel.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_mmse_fir_interpolator.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_mmse_fir_interpolator_cc.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/complex_dotprod_generic.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/ccomplex_dotprod_generic.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/float_dotprod_generic.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/short_dotprod_generic.c
+)
+
+########################################################################
+# Append gnuradio-core test sources
+########################################################################
+list(APPEND test_gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_filter.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_fir_ccf.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_fir_fcc.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_fir_fff.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_fir_ccc.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_fir_scc.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_rotator.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gri_mmse_fir_interpolator.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gri_mmse_fir_interpolator_cc.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gri_fir_filter_with_buffer_ccf.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gri_fir_filter_with_buffer_ccc.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gri_fir_filter_with_buffer_fcc.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gri_fir_filter_with_buffer_fff.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gri_fir_filter_with_buffer_fsf.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gri_fir_filter_with_buffer_scc.cc
+)
+
+########################################################################
+# Install runtime headers
+########################################################################
+install(FILES
+ ${generated_filter_includes}
+ ${CMAKE_CURRENT_SOURCE_DIR}/complex_dotprod_generic.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/complex_dotprod_x86.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/fcomplex_dotprod_x86.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/ccomplex_dotprod_generic.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/ccomplex_dotprod_x86.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/float_dotprod_generic.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/float_dotprod_x86.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_altivec.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_cpu.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_fft_filter_fff_generic.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_fft_filter_ccc_generic.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_sysconfig_x86.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_sysconfig_powerpc.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_rotator.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_sincos.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_single_pole_iir.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_vec_types.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_goertzel.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_iir.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_mmse_fir_interpolator.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_mmse_fir_interpolator_cc.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_filter.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/short_dotprod_generic.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/short_dotprod_x86.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/sse_debug.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "core_devel"
+)
+
+########################################################################
+# Install swig headers
+########################################################################
+if(ENABLE_PYTHON)
+install(FILES
+ ${generated_filter_swigs}
+ ${CMAKE_CURRENT_SOURCE_DIR}/filter.i
+ ${CMAKE_CURRENT_BINARY_DIR}/filter_generated.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "core_swig"
+)
+endif(ENABLE_PYTHON)
+
+########################################################################
+# Handle triple-threat files that have cc, h, and i
+########################################################################
+set(gr_core_filter_triple_threats
+ gr_adaptive_fir_ccc
+ gr_adaptive_fir_ccf
+ gr_dc_blocker_cc
+ gr_dc_blocker_ff
+ gr_fft_filter_ccc
+ gr_fft_filter_fff
+ gr_filter_delay_fc
+ gr_fractional_interpolator_ff
+ gr_fractional_interpolator_cc
+ gr_goertzel_fc
+ gr_hilbert_fc
+ gr_iir_filter_ffd
+ gr_single_pole_iir_filter_ff
+ gr_single_pole_iir_filter_cc
+ gr_pfb_channelizer_ccf
+ gr_pfb_synthesis_filterbank_ccf
+ gr_pfb_decimator_ccf
+ gr_pfb_interpolator_ccf
+ gr_pfb_arb_resampler_ccf
+ gr_pfb_arb_resampler_fff
+ gr_pfb_clock_sync_ccf
+ gr_pfb_clock_sync_fff
+)
+
+foreach(file_tt ${gr_core_filter_triple_threats})
+ list(APPEND gnuradio_core_sources ${CMAKE_CURRENT_SOURCE_DIR}/${file_tt}.cc)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${file_tt}.h DESTINATION ${GR_INCLUDE_DIR}/gnuradio COMPONENT "core_devel")
+ if(ENABLE_PYTHON)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${file_tt}.i DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig COMPONENT "core_swig")
+ endif(ENABLE_PYTHON)
+endforeach(file_tt ${gr_core_filter_triple_threats})
diff --git a/gnuradio-core/src/lib/filter/ccomplex_dotprod_generic.h b/gnuradio-core/src/lib/filter/ccomplex_dotprod_generic.h
index 4637dc706..c03743776 100644
--- a/gnuradio-core/src/lib/filter/ccomplex_dotprod_generic.h
+++ b/gnuradio-core/src/lib/filter/ccomplex_dotprod_generic.h
@@ -23,7 +23,9 @@
#ifndef _CCOMPLEX_DOTPROD_GENERIC_H_
#define _CCOMPLEX_DOTPROD_GENERIC_H_
-void
+#include <gr_core_api.h>
+
+GR_CORE_API void
ccomplex_dotprod_generic (const float *input,
const float *taps, unsigned n_2_ccomplex_blocks,
float *result);
diff --git a/gnuradio-core/src/lib/filter/complex_dotprod_generic.h b/gnuradio-core/src/lib/filter/complex_dotprod_generic.h
index 75d18e7f1..aed82179e 100644
--- a/gnuradio-core/src/lib/filter/complex_dotprod_generic.h
+++ b/gnuradio-core/src/lib/filter/complex_dotprod_generic.h
@@ -23,7 +23,9 @@
#ifndef _COMPLEX_DOTPROD_GENERIC_H_
#define _COMPLEX_DOTPROD_GENERIC_H_
-void
+#include <gr_core_api.h>
+
+GR_CORE_API void
complex_dotprod_generic (const short *input,
const float *taps, unsigned n_2_complex_blocks,
float *result);
diff --git a/gnuradio-core/src/lib/filter/dotprod_fff_altivec.h b/gnuradio-core/src/lib/filter/dotprod_fff_altivec.h
index d9ee52cf0..af9210382 100644
--- a/gnuradio-core/src/lib/filter/dotprod_fff_altivec.h
+++ b/gnuradio-core/src/lib/filter/dotprod_fff_altivec.h
@@ -21,6 +21,7 @@
#ifndef INCLUDED_DOTPROD_FFF_ALTIVEC_H
#define INCLUDED_DOTPROD_FFF_ALTIVEC_H
+#include <gr_core_api.h>
#include <stddef.h>
#ifdef __cplusplus
diff --git a/gnuradio-core/src/lib/filter/dotprod_fff_armv7_a.h b/gnuradio-core/src/lib/filter/dotprod_fff_armv7_a.h
index e72621a0d..667ee5fb6 100644
--- a/gnuradio-core/src/lib/filter/dotprod_fff_armv7_a.h
+++ b/gnuradio-core/src/lib/filter/dotprod_fff_armv7_a.h
@@ -21,6 +21,7 @@
#ifndef INCLUDED_DOTPROD_FFF_ARMV7_A_H
#define INCLUDED_DOTPROD_FFF_ARMV7_A_H
+#include <gr_core_api.h>
#include <stddef.h>
#ifdef __cplusplus
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 4f5f5ce06..06001695e 100755
--- a/gnuradio-core/src/lib/filter/generate_gr_fir_util.py
+++ b/gnuradio-core/src/lib/filter/generate_gr_fir_util.py
@@ -25,7 +25,7 @@ from generate_utils import *
def make_info_struct (out, sig):
out.write (
'''
-struct gr_fir_%s_info {
+struct GR_CORE_API gr_fir_%s_info {
const char *name; // implementation name, e.g., "generic", "SSE", "3DNow!"
gr_fir_%s *(*create)(const std::vector<%s> &taps);
};
@@ -74,6 +74,7 @@ def make_gr_fir_util_h ():
* 'i' (short)
*/
+#include <gr_core_api.h>
#include <gr_types.h>
''')
@@ -87,7 +88,7 @@ def make_gr_fir_util_h ():
make_info_struct (out, sig)
out.write ('''
-struct gr_fir_util {
+struct GR_CORE_API gr_fir_util {
// create a fast version of gr_fir_XXX.
diff --git a/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccc.h b/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccc.h
index 8678255b7..aa5422a07 100644
--- a/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccc.h
+++ b/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccc.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_ADAPTIVE_FIR_CCC_H
#define INCLUDED_GR_ADAPTIVE_FIR_CCC_H
+#include <gr_core_api.h>
#include <gr_sync_decimator.h>
/*!
* \brief Adaptive FIR filter with gr_complex input, gr_complex output and float taps
* \ingroup filter_blk
*/
-class gr_adaptive_fir_ccc : public gr_sync_decimator
+class GR_CORE_API gr_adaptive_fir_ccc : public gr_sync_decimator
{
private:
std::vector<gr_complex> d_new_taps;
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 f860f4faa..87854201c 100644
--- a/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.h
+++ b/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_ADAPTIVE_FIR_CCF_H
#define INCLUDED_GR_ADAPTIVE_FIR_CCF_H
+#include <gr_core_api.h>
#include <gr_sync_decimator.h>
/*!
* \brief Adaptive FIR filter with gr_complex input, gr_complex output and float taps
* \ingroup filter_blk
*/
-class gr_adaptive_fir_ccf : public gr_sync_decimator
+class GR_CORE_API gr_adaptive_fir_ccf : public gr_sync_decimator
{
private:
std::vector<float> d_new_taps;
diff --git a/gnuradio-core/src/lib/filter/gr_altivec.h b/gnuradio-core/src/lib/filter/gr_altivec.h
index c0d7cfb34..eb941ce42 100644
--- a/gnuradio-core/src/lib/filter/gr_altivec.h
+++ b/gnuradio-core/src/lib/filter/gr_altivec.h
@@ -29,6 +29,7 @@
* (included below)
*/
+#include <gr_core_api.h>
#include <altivec.h>
#undef bool // repair namespace pollution
#undef vector // repair namespace pollution
@@ -55,8 +56,8 @@ union v_float_u {
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);
+GR_CORE_API void gr_print_vector_float(FILE *fp, vec_float4 v);
+GR_CORE_API void gr_pvf(FILE *fp, const char *label, vec_float4 v);
static inline float
horizontal_add_f(vec_float4 v)
diff --git a/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.h b/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.h
new file mode 100644
index 000000000..73916a315
--- /dev/null
+++ b/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.h
@@ -0,0 +1,63 @@
+/* -*- 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_CMA_EQUALIZER_CC_H
+#define INCLUDED_GR_CMA_EQUALIZER_CC_H
+
+#include <gr_core_api.h>
+#include <gr_adaptive_fir_ccf.h>
+
+class gr_cma_equalizer_cc;
+typedef boost::shared_ptr<gr_cma_equalizer_cc> gr_cma_equalizer_cc_sptr;
+
+GR_CORE_API gr_cma_equalizer_cc_sptr
+gr_make_cma_equalizer_cc(int num_taps, float modulus, float mu);
+
+/*!
+ * \brief Implements constant modulus adaptive filter on complex stream
+ * \ingroup eq_blk
+ */
+class GR_CORE_API gr_cma_equalizer_cc : public gr_adaptive_fir_ccf
+{
+private:
+ float d_modulus;
+ float d_mu;
+
+ friend GR_CORE_API gr_cma_equalizer_cc_sptr gr_make_cma_equalizer_cc(int num_taps, float modulus, float mu);
+ gr_cma_equalizer_cc(int num_taps, float modulus, float mu);
+
+protected:
+
+ virtual float error(const gr_complex &out)
+ {
+ return (d_modulus - norm(out));
+ }
+
+ virtual void update_tap(float &tap, const gr_complex &in)
+ {
+ tap += d_mu*d_error*abs(in);
+ }
+
+public:
+};
+
+#endif
diff --git a/gnuradio-core/src/lib/filter/gr_cpu.h b/gnuradio-core/src/lib/filter/gr_cpu.h
index 01d719020..149404082 100644
--- a/gnuradio-core/src/lib/filter/gr_cpu.h
+++ b/gnuradio-core/src/lib/filter/gr_cpu.h
@@ -23,7 +23,9 @@
#ifndef _GR_CPU_H_
#define _GR_CPU_H_
-struct gr_cpu {
+#include <gr_core_api.h>
+
+struct GR_CORE_API gr_cpu {
static bool has_mmx ();
static bool has_sse ();
static bool has_sse2 ();
@@ -37,4 +39,4 @@ struct gr_cpu {
static bool has_armv7_a ();
};
-#endif /* _GR_CPU_H_ */
+#endif /* _GR_CPU_H_ */ \ No newline at end of file
diff --git a/gnuradio-core/src/lib/filter/gr_dc_blocker_cc.h b/gnuradio-core/src/lib/filter/gr_dc_blocker_cc.h
index aa23bc135..cb449f3ec 100644
--- a/gnuradio-core/src/lib/filter/gr_dc_blocker_cc.h
+++ b/gnuradio-core/src/lib/filter/gr_dc_blocker_cc.h
@@ -24,10 +24,11 @@
#ifndef INCLUDED_GR_DC_BLOCKER_CC_H
#define INCLUDED_GR_DC_BLOCKER_CC_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <deque>
-class moving_averager_c
+class GR_CORE_API moving_averager_c
{
public:
moving_averager_c(int D);
@@ -44,7 +45,7 @@ private:
class gr_dc_blocker_cc;
typedef boost::shared_ptr<gr_dc_blocker_cc> gr_dc_blocker_cc_sptr;
-gr_dc_blocker_cc_sptr gr_make_dc_blocker_cc (int D=32, bool long_form=true);
+GR_CORE_API gr_dc_blocker_cc_sptr gr_make_dc_blocker_cc (int D=32, bool long_form=true);
/*!
* \class gr_dc_blocker_cc
@@ -72,7 +73,7 @@ gr_dc_blocker_cc_sptr gr_make_dc_blocker_cc (int D=32, bool long_form=true);
* <B><EM>R. Yates, "DC Blocker Algorithms," IEEE Signal Processing Magazine,
* Mar. 2008, pp 132-134.</EM></B>
*/
-class gr_dc_blocker_cc : public gr_sync_block
+class GR_CORE_API gr_dc_blocker_cc : public gr_sync_block
{
private:
/*!
@@ -80,7 +81,7 @@ class gr_dc_blocker_cc : public gr_sync_block
* \param D (int) the length of the delay line
* \param long_form (bool) whether to use long (true, default) or short form
*/
- friend gr_dc_blocker_cc_sptr gr_make_dc_blocker_cc (int D, bool long_form);
+ friend GR_CORE_API gr_dc_blocker_cc_sptr gr_make_dc_blocker_cc (int D, bool long_form);
int d_length;
bool d_long_form;
diff --git a/gnuradio-core/src/lib/filter/gr_dc_blocker_ff.h b/gnuradio-core/src/lib/filter/gr_dc_blocker_ff.h
index 231710a53..a7e8f1c27 100644
--- a/gnuradio-core/src/lib/filter/gr_dc_blocker_ff.h
+++ b/gnuradio-core/src/lib/filter/gr_dc_blocker_ff.h
@@ -24,10 +24,11 @@
#ifndef INCLUDED_GR_DC_BLOCKER_FF_H
#define INCLUDED_GR_DC_BLOCKER_FF_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <deque>
-class moving_averager_f
+class GR_CORE_API moving_averager_f
{
public:
moving_averager_f(int D);
@@ -45,7 +46,7 @@ private:
class gr_dc_blocker_ff;
typedef boost::shared_ptr<gr_dc_blocker_ff> gr_dc_blocker_ff_sptr;
-gr_dc_blocker_ff_sptr gr_make_dc_blocker_ff (int D=32, bool long_form=true);
+GR_CORE_API gr_dc_blocker_ff_sptr gr_make_dc_blocker_ff (int D=32, bool long_form=true);
/*!
* \class gr_dc_blocker_ff
@@ -73,7 +74,7 @@ gr_dc_blocker_ff_sptr gr_make_dc_blocker_ff (int D=32, bool long_form=true);
* <B><EM>R. Yates, "DC Blocker Algorithms," IEEE Signal Processing Magazine,
* Mar. 2008, pp 132-134.</EM></B>
*/
-class gr_dc_blocker_ff : public gr_sync_block
+class GR_CORE_API gr_dc_blocker_ff : public gr_sync_block
{
private:
/*!
@@ -81,7 +82,7 @@ class gr_dc_blocker_ff : public gr_sync_block
* \param D (int) the length of the delay line
* \param long_form (bool) whether to use long (true, default) or short form
*/
- friend gr_dc_blocker_ff_sptr gr_make_dc_blocker_ff (int D, bool long_form);
+ friend GR_CORE_API gr_dc_blocker_ff_sptr gr_make_dc_blocker_ff (int D, bool long_form);
int d_length;
bool d_long_form;
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 68b19e775..721a44a83 100644
--- a/gnuradio-core/src/lib/filter/gr_fft_filter_ccc.h
+++ b/gnuradio-core/src/lib/filter/gr_fft_filter_ccc.h
@@ -22,11 +22,12 @@
#ifndef INCLUDED_GR_FFT_FILTER_CCC_H
#define INCLUDED_GR_FFT_FILTER_CCC_H
+#include <gr_core_api.h>
#include <gr_sync_decimator.h>
class gr_fft_filter_ccc;
typedef boost::shared_ptr<gr_fft_filter_ccc> gr_fft_filter_ccc_sptr;
-gr_fft_filter_ccc_sptr gr_make_fft_filter_ccc (int decimation, const std::vector<gr_complex> &taps);
+GR_CORE_API gr_fft_filter_ccc_sptr gr_make_fft_filter_ccc (int decimation, const std::vector<gr_complex> &taps);
//class gri_fft_filter_ccc_sse;
class gri_fft_filter_ccc_generic;
@@ -35,10 +36,10 @@ class gri_fft_filter_ccc_generic;
* \brief Fast FFT filter with gr_complex input, gr_complex output and gr_complex taps
* \ingroup filter_blk
*/
-class gr_fft_filter_ccc : public gr_sync_decimator
+class GR_CORE_API gr_fft_filter_ccc : public gr_sync_decimator
{
private:
- friend gr_fft_filter_ccc_sptr gr_make_fft_filter_ccc (int decimation, const std::vector<gr_complex> &taps);
+ friend GR_CORE_API gr_fft_filter_ccc_sptr gr_make_fft_filter_ccc (int decimation, const std::vector<gr_complex> &taps);
int d_nsamples;
bool d_updated;
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 6eaa21500..b0dc74883 100644
--- a/gnuradio-core/src/lib/filter/gr_fft_filter_fff.h
+++ b/gnuradio-core/src/lib/filter/gr_fft_filter_fff.h
@@ -22,11 +22,12 @@
#ifndef INCLUDED_GR_FFT_FILTER_FFF_H
#define INCLUDED_GR_FFT_FILTER_FFF_H
+#include <gr_core_api.h>
#include <gr_sync_decimator.h>
class gr_fft_filter_fff;
typedef boost::shared_ptr<gr_fft_filter_fff> gr_fft_filter_fff_sptr;
-gr_fft_filter_fff_sptr gr_make_fft_filter_fff (int decimation, const std::vector<float> &taps);
+GR_CORE_API gr_fft_filter_fff_sptr gr_make_fft_filter_fff (int decimation, const std::vector<float> &taps);
class gri_fft_filter_fff_generic;
//class gri_fft_filter_fff_sse;
@@ -35,10 +36,10 @@ class gri_fft_filter_fff_generic;
* \brief Fast FFT filter with float input, float output and float taps
* \ingroup filter_blk
*/
-class gr_fft_filter_fff : public gr_sync_decimator
+class GR_CORE_API gr_fft_filter_fff : public gr_sync_decimator
{
private:
- friend gr_fft_filter_fff_sptr gr_make_fft_filter_fff (int decimation, const std::vector<float> &taps);
+ friend GR_CORE_API gr_fft_filter_fff_sptr gr_make_fft_filter_fff (int decimation, const std::vector<float> &taps);
int d_nsamples;
bool d_updated;
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 946edf2c7..e09e4f0df 100644
--- a/gnuradio-core/src/lib/filter/gr_filter_delay_fc.h
+++ b/gnuradio-core/src/lib/filter/gr_filter_delay_fc.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_FILTER_DELAY_FC_H
#define INCLUDED_GR_FILTER_DELAY_FC_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_io_signature.h>
#include <gr_types.h>
@@ -31,7 +32,7 @@ class gr_filter_delay_fc;
typedef boost::shared_ptr<gr_filter_delay_fc> gr_filter_delay_fc_sptr;
// public constructor
-gr_filter_delay_fc_sptr gr_make_filter_delay_fc (const std::vector<float> &taps);
+GR_CORE_API gr_filter_delay_fc_sptr gr_make_filter_delay_fc (const std::vector<float> &taps);
class gr_fir_fff;
@@ -50,7 +51,7 @@ class gr_fir_fff;
* before initializing this block.
*
*/
-class gr_filter_delay_fc : public gr_sync_block
+class GR_CORE_API gr_filter_delay_fc : public gr_sync_block
{
public:
~gr_filter_delay_fc ();
@@ -66,7 +67,7 @@ class gr_filter_delay_fc : public gr_sync_block
unsigned int d_delay;
gr_fir_fff *d_fir;
- friend gr_filter_delay_fc_sptr gr_make_filter_delay_fc (const std::vector<float> &taps);
+ friend GR_CORE_API gr_filter_delay_fc_sptr gr_make_filter_delay_fc (const std::vector<float> &taps);
};
#endif /* INCLUDED_GR_FILTER_DELAY_FC_H */
diff --git a/gnuradio-core/src/lib/filter/gr_fir_XXX.h.t b/gnuradio-core/src/lib/filter/gr_fir_XXX.h.t
index eeee716ec..f6019ea40 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_XXX.h.t
+++ b/gnuradio-core/src/lib/filter/gr_fir_XXX.h.t
@@ -29,6 +29,7 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <vector>
@VRCOMPLEX_INCLUDE@
#include <gr_reverse.h>
@@ -44,7 +45,7 @@
* I,O,T are elements of the set 's' (short), 'f' (float), 'c' (gr_complex), 'i' (int)
*/
-class @FIR_TYPE@ {
+class GR_CORE_API @FIR_TYPE@ {
protected:
std::vector<@TAP_TYPE@> d_taps; // reversed taps
diff --git a/gnuradio-core/src/lib/filter/gr_fir_XXX_generic.h.t b/gnuradio-core/src/lib/filter/gr_fir_XXX_generic.h.t
index fc0f4f8b2..b3594b7ad 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_XXX_generic.h.t
+++ b/gnuradio-core/src/lib/filter/gr_fir_XXX_generic.h.t
@@ -22,6 +22,7 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <@FIR_TYPE@.h>
/*!
@@ -32,7 +33,7 @@
* I,O,T are elements of the set 's' (short), 'f' (float), 'c' (gr_complex), 'i' (int)
*/
-class @FIR_TYPE@_generic : public @FIR_TYPE@ {
+class GR_CORE_API @FIR_TYPE@_generic : public @FIR_TYPE@ {
public:
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 14ff1e6b1..af61ce274 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_ccc_simd.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_ccc_simd.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_FIR_CCC_SIMD_H
#define INCLUDED_GR_FIR_CCC_SIMD_H
+#include <gr_core_api.h>
#include <gr_fir_ccc_generic.h>
/*!
@@ -32,7 +33,7 @@
* subclasses.
*/
-class gr_fir_ccc_simd : public gr_fir_ccc_generic
+class GR_CORE_API gr_fir_ccc_simd : public gr_fir_ccc_generic
{
protected:
typedef void (*ccomplex_dotprod_t)(const float *input,
diff --git a/gnuradio-core/src/lib/filter/gr_fir_ccc_x86.h b/gnuradio-core/src/lib/filter/gr_fir_ccc_x86.h
index 06d6b616c..262cc80e3 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_ccc_x86.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_ccc_x86.h
@@ -23,19 +23,20 @@
#ifndef INCLUDED_GR_FIR_CCC_X86_H
#define INCLUDED_GR_FIR_CCC_X86_H
+#include <gr_core_api.h>
#include <gr_fir_ccc_simd.h>
/*!
* \brief 3DNow! version of gr_fir_ccc
*/
-class gr_fir_ccc_3dnow : public gr_fir_ccc_simd
+class GR_CORE_API gr_fir_ccc_3dnow : public gr_fir_ccc_simd
{
public:
gr_fir_ccc_3dnow ();
gr_fir_ccc_3dnow (const std::vector<gr_complex> &taps);
};
-class gr_fir_ccc_3dnowext : public gr_fir_ccc_simd
+class GR_CORE_API gr_fir_ccc_3dnowext : public gr_fir_ccc_simd
{
public:
gr_fir_ccc_3dnowext ();
@@ -45,7 +46,7 @@ public:
/*!
* \brief SSE version of gr_fir_ccc
*/
-class gr_fir_ccc_sse : public gr_fir_ccc_simd
+class GR_CORE_API gr_fir_ccc_sse : public gr_fir_ccc_simd
{
public:
gr_fir_ccc_sse ();
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 ebc6a1bc0..31d70288e 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_ccf_simd.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_ccf_simd.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_FIR_CCF_SIMD_H
#define INCLUDED_GR_FIR_CCF_SIMD_H
+#include <gr_core_api.h>
#include <gr_fir_ccf_generic.h>
@@ -33,7 +34,7 @@
* subclasses.
*/
-class gr_fir_ccf_simd : public gr_fir_ccf_generic
+class GR_CORE_API gr_fir_ccf_simd : public gr_fir_ccf_generic
{
protected:
typedef void (*fcomplex_dotprod_t)(const float *taps,
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 7f936546f..38d82060c 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_ccf_x86.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_ccf_x86.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_FIR_CCF_X86_H
#define INCLUDED_GR_FIR_CCF_X86_H
+#include <gr_core_api.h>
#include <gr_fir_ccf_simd.h>
/*!
* \brief 3DNow! version of gr_fir_ccf
* \ingroup filter_primitive
*/
-class gr_fir_ccf_3dnow : public gr_fir_ccf_simd
+class GR_CORE_API gr_fir_ccf_3dnow : public gr_fir_ccf_simd
{
public:
gr_fir_ccf_3dnow ();
@@ -40,7 +41,7 @@ public:
* \brief SSE version of gr_fir_ccf
* \ingroup filter_primitive
*/
-class gr_fir_ccf_sse : public gr_fir_ccf_simd
+class GR_CORE_API gr_fir_ccf_sse : public gr_fir_ccf_simd
{
public:
gr_fir_ccf_sse ();
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 e2ed8bcae..7be3776e3 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_fcc_simd.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_fcc_simd.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_FIR_FCC_SIMD_H
#define INCLUDED_GR_FIR_FCC_SIMD_H
+#include <gr_core_api.h>
#include <gr_fir_fcc_generic.h>
@@ -33,7 +34,7 @@
* subclasses.
*/
-class gr_fir_fcc_simd : public gr_fir_fcc_generic
+class GR_CORE_API gr_fir_fcc_simd : public gr_fir_fcc_generic
{
protected:
typedef void (*fcomplex_dotprod_t)(const float *input,
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 49386c35d..98ace66de 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_fcc_x86.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_fcc_x86.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_FIR_FCC_X86_H
#define INCLUDED_GR_FIR_FCC_X86_H
+#include <gr_core_api.h>
#include <gr_fir_fcc_simd.h>
/*!
* \brief 3DNow! version of gr_fir_fcc
* \ingroup filter_primitive
*/
-class gr_fir_fcc_3dnow : public gr_fir_fcc_simd
+class GR_CORE_API gr_fir_fcc_3dnow : public gr_fir_fcc_simd
{
public:
gr_fir_fcc_3dnow ();
@@ -40,7 +41,7 @@ public:
* \brief SSE version of gr_fir_fcc
* \ingroup filter_blk
*/
-class gr_fir_fcc_sse : public gr_fir_fcc_simd
+class GR_CORE_API gr_fir_fcc_sse : public gr_fir_fcc_simd
{
public:
gr_fir_fcc_sse ();
diff --git a/gnuradio-core/src/lib/filter/gr_fir_fff_altivec.h b/gnuradio-core/src/lib/filter/gr_fir_fff_altivec.h
index 1694f5524..29bb3a899 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_fff_altivec.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_fff_altivec.h
@@ -21,12 +21,13 @@
#ifndef INCLUDED_GR_FIR_FFF_ALTIVEC_H
#define INCLUDED_GR_FIR_FFF_ALTIVEC_H
+#include <gr_core_api.h>
#include <gr_fir_fff_generic.h>
/*!
* \brief altivec version of gr_fir_fff
*/
-class gr_fir_fff_altivec : public gr_fir_fff_generic
+class GR_CORE_API gr_fir_fff_altivec : public gr_fir_fff_generic
{
protected:
diff --git a/gnuradio-core/src/lib/filter/gr_fir_fff_armv7_a.h b/gnuradio-core/src/lib/filter/gr_fir_fff_armv7_a.h
index d6097cf50..5c80c930f 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_fff_armv7_a.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_fff_armv7_a.h
@@ -21,12 +21,13 @@
#ifndef INCLUDED_GR_FIR_FFF_ARMV7_A_H
#define INCLUDED_GR_FIR_FFF_ARMV7_A_H
+#include <gr_core_api.h>
#include <gr_fir_fff_generic.h>
/*!
* \brief armv7_a using NEON coprocessor version of gr_fir_fff
*/
-class gr_fir_fff_armv7_a : public gr_fir_fff_generic
+class GR_CORE_API gr_fir_fff_armv7_a : public gr_fir_fff_generic
{
protected:
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 82d3e3b99..781e4e7b9 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_fff_simd.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_fff_simd.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_FIR_FFF_SIMD_H
#define INCLUDED_GR_FIR_FFF_SIMD_H
+#include <gr_core_api.h>
#include <gr_fir_fff_generic.h>
/*!
@@ -32,7 +33,7 @@
* subclasses.
*/
-class gr_fir_fff_simd : public gr_fir_fff_generic
+class GR_CORE_API gr_fir_fff_simd : public gr_fir_fff_generic
{
protected:
typedef float (*float_dotprod_t)(const float *input,
diff --git a/gnuradio-core/src/lib/filter/gr_fir_fff_x86.h b/gnuradio-core/src/lib/filter/gr_fir_fff_x86.h
index c288035ba..4e2f33181 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_fff_x86.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_fff_x86.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_FIR_FFF_X86_H
#define INCLUDED_GR_FIR_FFF_X86_H
+#include <gr_core_api.h>
#include <gr_fir_fff_simd.h>
/*!
* \brief 3DNow! version of gr_fir_fff
*/
-class gr_fir_fff_3dnow : public gr_fir_fff_simd
+class GR_CORE_API gr_fir_fff_3dnow : public gr_fir_fff_simd
{
public:
gr_fir_fff_3dnow ();
@@ -38,7 +39,7 @@ public:
/*!
* \brief SSE version of gr_fir_fff
*/
-class gr_fir_fff_sse : public gr_fir_fff_simd
+class GR_CORE_API gr_fir_fff_sse : public gr_fir_fff_simd
{
public:
gr_fir_fff_sse ();
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 f2e56c901..db0625504 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
@@ -28,11 +28,12 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_decimator.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (int decimation, const std::vector<@TAP_TYPE@> &taps);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (int decimation, const std::vector<@TAP_TYPE@> &taps);
class @FIR_TYPE@;
@@ -40,10 +41,10 @@ class @FIR_TYPE@;
* \brief FIR filter with @I_TYPE@ input, @O_TYPE@ output and @TAP_TYPE@ taps
* \ingroup filter_blk
*/
-class @NAME@ : public gr_sync_decimator
+class GR_CORE_API @NAME@ : public gr_sync_decimator
{
private:
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ (int decimation, const std::vector<@TAP_TYPE@> &taps);
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (int decimation, const std::vector<@TAP_TYPE@> &taps);
@FIR_TYPE@ *d_fir;
std::vector<@TAP_TYPE@> d_new_taps;
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 ad689407d..6fcb6bd35 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_fsf_simd.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_fsf_simd.h
@@ -22,6 +22,7 @@
#ifndef _GR_FIR_FSF_SIMD_H_
#define _GR_FIR_FSF_SIMD_H_
+#include <gr_core_api.h>
#include <gr_fir_fsf_generic.h>
/*!
@@ -32,7 +33,7 @@
* subclasses.
*/
-class gr_fir_fsf_simd : public gr_fir_fsf_generic
+class GR_CORE_API gr_fir_fsf_simd : public gr_fir_fsf_generic
{
protected:
typedef float (*float_dotprod_t)(const float *input,
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 78fdf73c0..0e11059b3 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_fsf_x86.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_fsf_x86.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_FIR_FSF_X86_H
#define INCLUDED_GR_FIR_FSF_X86_H
+#include <gr_core_api.h>
#include <gr_fir_fsf_simd.h>
/*!
* \brief 3DNow! version of gr_fir_fsf
* \ingroup filter_primitive
*/
-class gr_fir_fsf_3dnow : public gr_fir_fsf_simd
+class GR_CORE_API gr_fir_fsf_3dnow : public gr_fir_fsf_simd
{
public:
gr_fir_fsf_3dnow ();
@@ -40,7 +41,7 @@ public:
* \brief SSE version of gr_fir_fsf
* \ingroup filter_primitive
*/
-class gr_fir_fsf_sse : public gr_fir_fsf_simd
+class GR_CORE_API gr_fir_fsf_sse : public gr_fir_fsf_simd
{
public:
gr_fir_fsf_sse ();
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 2af45c8f4..9dced1578 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_scc_simd.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_scc_simd.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_FIR_SCC_SIMD_H
#define INCLUDED_GR_FIR_SCC_SIMD_H
+#include <gr_core_api.h>
#include <gr_fir_scc_generic.h>
@@ -32,7 +33,7 @@
* This base class handles alignment issues common to SSE and 3DNOW
* subclasses.
*/
-class gr_fir_scc_simd : public gr_fir_scc_generic
+class GR_CORE_API gr_fir_scc_simd : public gr_fir_scc_generic
{
protected:
typedef void (*complex_dotprod_t)(const short *input,
diff --git a/gnuradio-core/src/lib/filter/gr_fir_scc_x86.h b/gnuradio-core/src/lib/filter/gr_fir_scc_x86.h
index 0cb5e3f7c..484bdc5a0 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_scc_x86.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_scc_x86.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_FIR_SCC_X86_H
#define INCLUDED_GR_FIR_SCC_X86_H
+#include <gr_core_api.h>
#include <gr_fir_scc_simd.h>
/*!
* \brief 3DNow! version of gr_fir_scc
*/
-class gr_fir_scc_3dnow : public gr_fir_scc_simd
+class GR_CORE_API gr_fir_scc_3dnow : public gr_fir_scc_simd
{
public:
gr_fir_scc_3dnow ();
@@ -38,7 +39,7 @@ public:
/*!
* \brief 3DNow! Ext version of gr_fir_scc
*/
-class gr_fir_scc_3dnowext : public gr_fir_scc_simd
+class GR_CORE_API gr_fir_scc_3dnowext : public gr_fir_scc_simd
{
public:
gr_fir_scc_3dnowext ();
@@ -48,7 +49,7 @@ public:
/*!
* \brief SSE version of gr_fir_scc
*/
-class gr_fir_scc_sse : public gr_fir_scc_simd
+class GR_CORE_API gr_fir_scc_sse : public gr_fir_scc_simd
{
public:
gr_fir_scc_sse ();
diff --git a/gnuradio-core/src/lib/filter/gr_fir_sysconfig_armv7_a.h b/gnuradio-core/src/lib/filter/gr_fir_sysconfig_armv7_a.h
index c77b81026..69ee46019 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_sysconfig_armv7_a.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_sysconfig_armv7_a.h
@@ -22,9 +22,10 @@
#ifndef INCLUDED_GR_FIR_SYSCONFIG_ARMV7_A_H
#define INCLUDED_GR_FIR_SYSCONFIG_ARMV7_A_H
+#include <gr_core_api.h>
#include <gr_fir_sysconfig_generic.h>
-class gr_fir_sysconfig_armv7_a : public gr_fir_sysconfig_generic {
+class GR_CORE_API gr_fir_sysconfig_armv7_a : public gr_fir_sysconfig_generic {
public:
virtual gr_fir_ccf *create_gr_fir_ccf (const std::vector<float> &taps);
virtual gr_fir_fcc *create_gr_fir_fcc (const std::vector<gr_complex> &taps);
diff --git a/gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.h b/gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.h
index 9c31cdf1b..d6be7653f 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.h
@@ -22,9 +22,10 @@
#ifndef INCLUDED_GR_FIR_SYSCONFIG_POWERPC_H
#define INCLUDED_GR_FIR_SYSCONFIG_POWERPC_H
+#include <gr_core_api.h>
#include <gr_fir_sysconfig_generic.h>
-class gr_fir_sysconfig_powerpc : public gr_fir_sysconfig_generic {
+class GR_CORE_API gr_fir_sysconfig_powerpc : public gr_fir_sysconfig_generic {
public:
virtual gr_fir_ccf *create_gr_fir_ccf (const std::vector<float> &taps);
virtual gr_fir_fcc *create_gr_fir_fcc (const std::vector<gr_complex> &taps);
diff --git a/gnuradio-core/src/lib/filter/gr_fir_sysconfig_x86.h b/gnuradio-core/src/lib/filter/gr_fir_sysconfig_x86.h
index a4d0f92b0..49899d895 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_sysconfig_x86.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_sysconfig_x86.h
@@ -22,9 +22,10 @@
#ifndef INCLUDED_GR_FIR_SYSCONFIG_X86_H
#define INCLUDED_GR_FIR_SYSCONFIG_X86_H
+#include <gr_core_api.h>
#include <gr_fir_sysconfig_generic.h>
-class gr_fir_sysconfig_x86 : public gr_fir_sysconfig_generic {
+class GR_CORE_API gr_fir_sysconfig_x86 : public gr_fir_sysconfig_generic {
public:
virtual gr_fir_ccf *create_gr_fir_ccf (const std::vector<float> &taps);
virtual gr_fir_fcc *create_gr_fir_fcc (const std::vector<gr_complex> &taps);
diff --git a/gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.h b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.h
index c8378c43e..29c67895a 100644
--- a/gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.h
+++ b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_FRACTIONAL_INTERPOLATOR_CC_H
#define INCLUDED_GR_FRACTIONAL_INTERPOLATOR_CC_H
+#include <gr_core_api.h>
#include <gr_block.h>
class gri_mmse_fir_interpolator_cc;
@@ -31,13 +32,13 @@ class gr_fractional_interpolator_cc;
typedef boost::shared_ptr<gr_fractional_interpolator_cc> gr_fractional_interpolator_cc_sptr;
// public constructor
-gr_fractional_interpolator_cc_sptr gr_make_fractional_interpolator_cc (float phase_shift, float interp_ratio);
+GR_CORE_API 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
+class GR_CORE_API gr_fractional_interpolator_cc : public gr_block
{
public:
~gr_fractional_interpolator_cc ();
@@ -60,7 +61,7 @@ private:
float d_mu_inc;
gri_mmse_fir_interpolator_cc *d_interp;
- friend gr_fractional_interpolator_cc_sptr
+ friend GR_CORE_API gr_fractional_interpolator_cc_sptr
gr_make_fractional_interpolator_cc (float phase_shift, float interp_ratio);
};
diff --git a/gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.h b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.h
index f50129289..7e000a6d1 100644
--- a/gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.h
+++ b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_FRACTIONAL_INTERPOLATOR_FF_H
#define INCLUDED_GR_FRACTIONAL_INTERPOLATOR_FF_H
+#include <gr_core_api.h>
#include <gr_block.h>
class gri_mmse_fir_interpolator;
@@ -31,13 +32,13 @@ class gr_fractional_interpolator_ff;
typedef boost::shared_ptr<gr_fractional_interpolator_ff> gr_fractional_interpolator_ff_sptr;
// public constructor
-gr_fractional_interpolator_ff_sptr gr_make_fractional_interpolator_ff (float phase_shift, float interp_ratio);
+GR_CORE_API 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
+class GR_CORE_API gr_fractional_interpolator_ff : public gr_block
{
public:
~gr_fractional_interpolator_ff ();
@@ -60,7 +61,7 @@ private:
float d_mu_inc;
gri_mmse_fir_interpolator *d_interp;
- friend gr_fractional_interpolator_ff_sptr
+ friend GR_CORE_API gr_fractional_interpolator_ff_sptr
gr_make_fractional_interpolator_ff (float phase_shift, float interp_ratio);
};
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 1205e8a08..bb05c138b 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
@@ -29,6 +29,7 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_decimator.h>
#include <gr_rotator.h>
@@ -40,7 +41,7 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
* translation that shifts center_freq down to zero Hz. The frequency
* translation logically comes before the filtering operation.
*/
-@SPTR_NAME@
+GR_CORE_API @SPTR_NAME@
gr_make_@BASE_NAME@ (int decimation, const std::vector<@TAP_TYPE@> &taps,
double center_freq, double sampling_freq);
@@ -60,7 +61,7 @@ class @FIR_TYPE@;
* Uses a single input array to produce a single output array.
* Additional inputs and/or outputs are ignored.
*/
-class @NAME@ : public gr_sync_decimator
+class GR_CORE_API @NAME@ : public gr_sync_decimator
{
public:
virtual ~@NAME@ ();
@@ -73,7 +74,7 @@ class @NAME@ : public gr_sync_decimator
gr_vector_void_star &output_items);
private:
- friend @SPTR_NAME@
+ friend GR_CORE_API @SPTR_NAME@
gr_make_@BASE_NAME@ (int decimation, const std::vector<@TAP_TYPE@> &taps,
double center_freq, double sampling_freq);
diff --git a/gnuradio-core/src/lib/filter/gr_goertzel_fc.h b/gnuradio-core/src/lib/filter/gr_goertzel_fc.h
index c60b63d88..6b5d8527c 100644
--- a/gnuradio-core/src/lib/filter/gr_goertzel_fc.h
+++ b/gnuradio-core/src/lib/filter/gr_goertzel_fc.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_GOERTZEL_FC_H
#define INCLUDED_GR_GOERTZEL_FC_H
+#include <gr_core_api.h>
#include <gri_goertzel.h>
#include <gr_sync_decimator.h>
@@ -30,16 +31,16 @@ class gr_goertzel_fc;
typedef boost::shared_ptr<gr_goertzel_fc> gr_goertzel_fc_sptr;
// public constructor
-gr_goertzel_fc_sptr gr_make_goertzel_fc(int rate, int len, float freq);
+GR_CORE_API gr_goertzel_fc_sptr gr_make_goertzel_fc(int rate, int len, float freq);
/*!
* \brief Goertzel single-bin DFT calculation.
* \ingroup dft_blk
*/
-class gr_goertzel_fc : public gr_sync_decimator
+class GR_CORE_API gr_goertzel_fc : public gr_sync_decimator
{
private:
- friend gr_goertzel_fc_sptr gr_make_goertzel_fc (int rate, int len, float freq);
+ friend GR_CORE_API gr_goertzel_fc_sptr gr_make_goertzel_fc (int rate, int len, float freq);
gr_goertzel_fc(int rate, int len, float freq);
gri_goertzel d_goertzel;
diff --git a/gnuradio-core/src/lib/filter/gr_hilbert_fc.h b/gnuradio-core/src/lib/filter/gr_hilbert_fc.h
index adcac7793..ba73324ee 100644
--- a/gnuradio-core/src/lib/filter/gr_hilbert_fc.h
+++ b/gnuradio-core/src/lib/filter/gr_hilbert_fc.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_HILBERT_FC_H
#define INCLUDED_GR_HILBERT_FC_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_io_signature.h>
#include <gr_types.h>
@@ -31,7 +32,7 @@ class gr_hilbert_fc;
typedef boost::shared_ptr<gr_hilbert_fc> gr_hilbert_fc_sptr;
// public constructor
-gr_hilbert_fc_sptr gr_make_hilbert_fc (unsigned int ntaps);
+GR_CORE_API gr_hilbert_fc_sptr gr_make_hilbert_fc (unsigned int ntaps);
class gr_fir_fff;
@@ -44,7 +45,7 @@ class gr_fir_fff;
* imaginary output is hilbert filtered (90 degree phase shift)
* version of input.
*/
-class gr_hilbert_fc : public gr_sync_block
+class GR_CORE_API gr_hilbert_fc : public gr_sync_block
{
public:
~gr_hilbert_fc ();
@@ -60,7 +61,7 @@ class gr_hilbert_fc : public gr_sync_block
unsigned int d_ntaps;
gr_fir_fff *d_hilb;
- friend gr_hilbert_fc_sptr gr_make_hilbert_fc (unsigned int ntaps);
+ friend GR_CORE_API gr_hilbert_fc_sptr gr_make_hilbert_fc (unsigned int ntaps);
};
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 0382646f1..386d056e5 100644
--- a/gnuradio-core/src/lib/filter/gr_iir_filter_ffd.h
+++ b/gnuradio-core/src/lib/filter/gr_iir_filter_ffd.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_IIR_FILTER_FFD_H
#define INCLUDED_GR_IIR_FILTER_FFD_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gri_iir.h>
#include <stdexcept>
class gr_iir_filter_ffd;
typedef boost::shared_ptr<gr_iir_filter_ffd> gr_iir_filter_ffd_sptr;
-gr_iir_filter_ffd_sptr
+GR_CORE_API gr_iir_filter_ffd_sptr
gr_make_iir_filter_ffd (const std::vector<double> &fftaps,
const std::vector<double> &fbtaps) throw (std::invalid_argument);
@@ -56,10 +57,10 @@ gr_make_iir_filter_ffd (const std::vector<double> &fftaps,
* 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 taps.
*/
-class gr_iir_filter_ffd : public gr_sync_block
+class GR_CORE_API gr_iir_filter_ffd : public gr_sync_block
{
private:
- friend gr_iir_filter_ffd_sptr
+ friend GR_CORE_API gr_iir_filter_ffd_sptr
gr_make_iir_filter_ffd (const std::vector<double> &fftaps,
const std::vector<double> &fbtaps) throw (std::invalid_argument);
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 790e0b908..4a3590fc7 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
@@ -28,11 +28,12 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_interpolator.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (unsigned interpolation, const std::vector<@TAP_TYPE@> &taps);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (unsigned interpolation, const std::vector<@TAP_TYPE@> &taps);
class @FIR_TYPE@;
@@ -40,10 +41,10 @@ class @FIR_TYPE@;
* \brief Interpolating FIR filter with @I_TYPE@ input, @O_TYPE@ output and @TAP_TYPE@ taps
* \ingroup filter_blk
*/
-class @NAME@ : public gr_sync_interpolator
+class GR_CORE_API @NAME@ : public gr_sync_interpolator
{
private:
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ (unsigned interpolation, const std::vector<@TAP_TYPE@> &taps);
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (unsigned interpolation, const std::vector<@TAP_TYPE@> &taps);
std::vector<@TAP_TYPE@> d_new_taps;
bool d_updated;
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.h
index 806c33d92..749db937e 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.h
+++ b/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.h
@@ -24,11 +24,12 @@
#ifndef INCLUDED_GR_PFB_ARB_RESAMPLER_CCF_H
#define INCLUDED_GR_PFB_ARB_RESAMPLER_CCF_H
+#include <gr_core_api.h>
#include <gr_block.h>
class gr_pfb_arb_resampler_ccf;
typedef boost::shared_ptr<gr_pfb_arb_resampler_ccf> gr_pfb_arb_resampler_ccf_sptr;
-gr_pfb_arb_resampler_ccf_sptr gr_make_pfb_arb_resampler_ccf (float rate,
+GR_CORE_API gr_pfb_arb_resampler_ccf_sptr gr_make_pfb_arb_resampler_ccf (float rate,
const std::vector<float> &taps,
unsigned int filter_size=32);
@@ -96,7 +97,7 @@ class gr_fir_ccf;
* Systems", Upper Saddle River, NJ: Prentice Hall, Inc. 2004.</EM></B>
*/
-class gr_pfb_arb_resampler_ccf : public gr_block
+class GR_CORE_API gr_pfb_arb_resampler_ccf : public gr_block
{
private:
/*!
@@ -108,7 +109,7 @@ class gr_pfb_arb_resampler_ccf : public gr_block
related to quantization noise introduced during the resampling.
Defaults to 32 filters.
*/
- friend gr_pfb_arb_resampler_ccf_sptr gr_make_pfb_arb_resampler_ccf (float rate,
+ friend GR_CORE_API gr_pfb_arb_resampler_ccf_sptr gr_make_pfb_arb_resampler_ccf (float rate,
const std::vector<float> &taps,
unsigned int filter_size);
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_fff.h b/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_fff.h
index 69331a2c6..7fef06143 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_fff.h
+++ b/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_fff.h
@@ -24,11 +24,12 @@
#ifndef INCLUDED_GR_PFB_ARB_RESAMPLER_FFF_H
#define INCLUDED_GR_PFB_ARB_RESAMPLER_FFF_H
+#include <gr_core_api.h>
#include <gr_block.h>
class gr_pfb_arb_resampler_fff;
typedef boost::shared_ptr<gr_pfb_arb_resampler_fff> gr_pfb_arb_resampler_fff_sptr;
-gr_pfb_arb_resampler_fff_sptr gr_make_pfb_arb_resampler_fff (float rate,
+GR_CORE_API gr_pfb_arb_resampler_fff_sptr gr_make_pfb_arb_resampler_fff (float rate,
const std::vector<float> &taps,
unsigned int filter_size=32);
@@ -96,7 +97,7 @@ class gr_fir_fff;
* Systems", Upper Saddle River, NJ: Prentice Hall, Inc. 2004.</EM></B>
*/
-class gr_pfb_arb_resampler_fff : public gr_block
+class GR_CORE_API gr_pfb_arb_resampler_fff : public gr_block
{
private:
/*!
@@ -108,7 +109,7 @@ class gr_pfb_arb_resampler_fff : public gr_block
related to quantization noise introduced during the resampling.
Defaults to 32 filters.
*/
- friend gr_pfb_arb_resampler_fff_sptr gr_make_pfb_arb_resampler_fff (float rate,
+ friend GR_CORE_API gr_pfb_arb_resampler_fff_sptr gr_make_pfb_arb_resampler_fff (float rate,
const std::vector<float> &taps,
unsigned int filter_size);
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h
index 68476ed3c..8fd5c4f78 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h
+++ b/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h
@@ -24,11 +24,12 @@
#ifndef INCLUDED_GR_PFB_CHANNELIZER_CCF_H
#define INCLUDED_GR_PFB_CHANNELIZER_CCF_H
+#include <gr_core_api.h>
#include <gr_block.h>
class gr_pfb_channelizer_ccf;
typedef boost::shared_ptr<gr_pfb_channelizer_ccf> gr_pfb_channelizer_ccf_sptr;
-gr_pfb_channelizer_ccf_sptr gr_make_pfb_channelizer_ccf (unsigned int numchans,
+GR_CORE_API gr_pfb_channelizer_ccf_sptr gr_make_pfb_channelizer_ccf (unsigned int numchans,
const std::vector<float> &taps,
float oversample_rate=1);
@@ -111,7 +112,7 @@ class gri_fft_complex;
*
*/
-class gr_pfb_channelizer_ccf : public gr_block
+class GR_CORE_API gr_pfb_channelizer_ccf : public gr_block
{
private:
/*!
@@ -131,7 +132,7 @@ class gr_pfb_channelizer_ccf : public gr_block
* sample rate of a 6/1 oversample ratio is 6000 Hz, or
* 6 times the normal 1000 Hz.
*/
- friend gr_pfb_channelizer_ccf_sptr gr_make_pfb_channelizer_ccf (unsigned int numchans,
+ friend GR_CORE_API gr_pfb_channelizer_ccf_sptr gr_make_pfb_channelizer_ccf (unsigned int numchans,
const std::vector<float> &taps,
float oversample_rate);
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.h
index 674dee181..514f580ba 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.h
+++ b/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.h
@@ -24,11 +24,12 @@
#ifndef INCLUDED_GR_PFB_CLOCK_SYNC_CCF_H
#define INCLUDED_GR_PFB_CLOCK_SYNC_CCF_H
+#include <gr_core_api.h>
#include <gr_block.h>
class gr_pfb_clock_sync_ccf;
typedef boost::shared_ptr<gr_pfb_clock_sync_ccf> gr_pfb_clock_sync_ccf_sptr;
-gr_pfb_clock_sync_ccf_sptr gr_make_pfb_clock_sync_ccf (double sps, float loop_bw,
+GR_CORE_API gr_pfb_clock_sync_ccf_sptr gr_make_pfb_clock_sync_ccf (double sps, float loop_bw,
const std::vector<float> &taps,
unsigned int filter_size=32,
float init_phase=0,
@@ -125,7 +126,7 @@ class gr_fir_ccf;
*
*/
-class gr_pfb_clock_sync_ccf : public gr_block
+class GR_CORE_API gr_pfb_clock_sync_ccf : public gr_block
{
private:
/*!
@@ -140,7 +141,7 @@ class gr_pfb_clock_sync_ccf : public gr_block
* \param osps (int) The number of output samples per symbol (default=1).
*
*/
- friend gr_pfb_clock_sync_ccf_sptr gr_make_pfb_clock_sync_ccf (double sps, float loop_bw,
+ friend GR_CORE_API gr_pfb_clock_sync_ccf_sptr gr_make_pfb_clock_sync_ccf (double sps, float loop_bw,
const std::vector<float> &taps,
unsigned int filter_size,
float init_phase,
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_fff.h b/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_fff.h
index d7c646801..447d3e59d 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_fff.h
+++ b/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_fff.h
@@ -24,11 +24,12 @@
#ifndef INCLUDED_GR_PFB_CLOCK_SYNC_FFF_H
#define INCLUDED_GR_PFB_CLOCK_SYNC_FFF_H
+#include <gr_core_api.h>
#include <gr_block.h>
class gr_pfb_clock_sync_fff;
typedef boost::shared_ptr<gr_pfb_clock_sync_fff> gr_pfb_clock_sync_fff_sptr;
-gr_pfb_clock_sync_fff_sptr gr_make_pfb_clock_sync_fff (double sps, float gain,
+GR_CORE_API gr_pfb_clock_sync_fff_sptr gr_make_pfb_clock_sync_fff (double sps, float gain,
const std::vector<float> &taps,
unsigned int filter_size=32,
float init_phase=0,
@@ -124,7 +125,7 @@ class gr_fir_fff;
*
*/
-class gr_pfb_clock_sync_fff : public gr_block
+class GR_CORE_API gr_pfb_clock_sync_fff : public gr_block
{
private:
/*!
@@ -138,7 +139,7 @@ class gr_pfb_clock_sync_fff : public gr_block
* \param max_rate_deviation (float) Distance from 0 d_rate can get (default = 1.5).
*
*/
- friend gr_pfb_clock_sync_fff_sptr gr_make_pfb_clock_sync_fff (double sps, float gain,
+ friend GR_CORE_API gr_pfb_clock_sync_fff_sptr gr_make_pfb_clock_sync_fff (double sps, float gain,
const std::vector<float> &taps,
unsigned int filter_size,
float init_phase,
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.h
index 6b75c5859..0ae054685 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.h
+++ b/gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.h
@@ -24,11 +24,12 @@
#ifndef INCLUDED_GR_PFB_DECIMATOR_CCF_H
#define INCLUDED_GR_PFB_DECIMATOR_CCF_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_pfb_decimator_ccf;
typedef boost::shared_ptr<gr_pfb_decimator_ccf> gr_pfb_decimator_ccf_sptr;
-gr_pfb_decimator_ccf_sptr gr_make_pfb_decimator_ccf (unsigned int decim,
+GR_CORE_API gr_pfb_decimator_ccf_sptr gr_make_pfb_decimator_ccf (unsigned int decim,
const std::vector<float> &taps,
unsigned int channel=0);
@@ -93,7 +94,7 @@ class gri_fft_complex;
* Systems," Upper Saddle River, NJ: Prentice Hall, Inc. 2004.</EM></B>
*/
-class gr_pfb_decimator_ccf : public gr_sync_block
+class GR_CORE_API gr_pfb_decimator_ccf : public gr_sync_block
{
private:
/*!
@@ -102,7 +103,7 @@ class gr_pfb_decimator_ccf : public gr_sync_block
* \param taps (vector/list of floats) The prototype filter to populate the filterbank.
* \param channel (unsigned integer) Selects the channel to return [default=0].
*/
- friend gr_pfb_decimator_ccf_sptr gr_make_pfb_decimator_ccf (unsigned int decim,
+ friend GR_CORE_API gr_pfb_decimator_ccf_sptr gr_make_pfb_decimator_ccf (unsigned int decim,
const std::vector<float> &taps,
unsigned int channel);
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.h
index 3dc52938e..6885881e9 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.h
+++ b/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.h
@@ -24,11 +24,12 @@
#ifndef INCLUDED_GR_PFB_INTERPOLATOR_CCF_H
#define INCLUDED_GR_PFB_INTERPOLATOR_CCF_H
+#include <gr_core_api.h>
#include <gr_sync_interpolator.h>
class gr_pfb_interpolator_ccf;
typedef boost::shared_ptr<gr_pfb_interpolator_ccf> gr_pfb_interpolator_ccf_sptr;
-gr_pfb_interpolator_ccf_sptr gr_make_pfb_interpolator_ccf (unsigned int interp,
+GR_CORE_API gr_pfb_interpolator_ccf_sptr gr_make_pfb_interpolator_ccf (unsigned int interp,
const std::vector<float> &taps);
class gr_fir_ccf;
@@ -80,7 +81,7 @@ class gr_fir_ccf;
* Inc. 2004.</EM></B>
*/
-class gr_pfb_interpolator_ccf : public gr_sync_interpolator
+class GR_CORE_API gr_pfb_interpolator_ccf : public gr_sync_interpolator
{
private:
/*!
@@ -89,7 +90,7 @@ class gr_pfb_interpolator_ccf : public gr_sync_interpolator
* \param taps (vector/list of floats) The prototype filter to populate the filterbank. The taps
* should be generated at the interpolated sampling rate.
*/
- friend gr_pfb_interpolator_ccf_sptr gr_make_pfb_interpolator_ccf (unsigned int interp,
+ friend GR_CORE_API gr_pfb_interpolator_ccf_sptr gr_make_pfb_interpolator_ccf (unsigned int interp,
const std::vector<float> &taps);
std::vector<gr_fir_ccf*> d_filters;
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.h
index 7e3700921..1f772b1dd 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.h
+++ b/gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.h
@@ -24,12 +24,13 @@
#ifndef INCLUDED_GR_PFB_SYNTHESIS_FILTERBANK_CCF_H
#define INCLUDED_GR_PFB_SYNTHESIS_FILTERBANK_CCF_H
+#include <gr_core_api.h>
#include <gr_sync_interpolator.h>
#include <gri_fir_filter_with_buffer_ccf.h>
class gr_pfb_synthesis_filterbank_ccf;
typedef boost::shared_ptr<gr_pfb_synthesis_filterbank_ccf> gr_pfb_synthesis_filterbank_ccf_sptr;
-gr_pfb_synthesis_filterbank_ccf_sptr gr_make_pfb_synthesis_filterbank_ccf
+GR_CORE_API gr_pfb_synthesis_filterbank_ccf_sptr gr_make_pfb_synthesis_filterbank_ccf
(unsigned int numchans, const std::vector<float> &taps);
class gri_fft_complex;
@@ -45,7 +46,7 @@ class gri_fft_complex;
* \ingroup pfb_blk
*/
-class gr_pfb_synthesis_filterbank_ccf : public gr_sync_interpolator
+class GR_CORE_API gr_pfb_synthesis_filterbank_ccf : public gr_sync_interpolator
{
private:
/*!
@@ -55,7 +56,7 @@ class gr_pfb_synthesis_filterbank_ccf : public gr_sync_interpolator
* \param taps (vector/list of floats) The prototype filter to
populate the filterbank.
*/
- friend gr_pfb_synthesis_filterbank_ccf_sptr gr_make_pfb_synthesis_filterbank_ccf
+ friend GR_CORE_API gr_pfb_synthesis_filterbank_ccf_sptr gr_make_pfb_synthesis_filterbank_ccf
(unsigned int numchans, const std::vector<float> &taps);
bool d_updated;
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 983b350fa..8f50acc72 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
@@ -29,11 +29,12 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@
+GR_CORE_API @SPTR_NAME@
gr_make_@BASE_NAME@ (unsigned interpolation,
unsigned decimation,
const std::vector<@TAP_TYPE@> &taps);
@@ -44,7 +45,7 @@ class @FIR_TYPE@;
* \brief Rational Resampling Polyphase FIR filter with @I_TYPE@ input, @O_TYPE@ output and @TAP_TYPE@ taps
* \ingroup filter_blk
*/
-class @NAME@ : public gr_block
+class GR_CORE_API @NAME@ : public gr_block
{
private:
unsigned d_history;
@@ -54,7 +55,7 @@ class @NAME@ : public gr_block
bool d_updated;
std::vector<@FIR_TYPE@ *> d_firs;
- friend @SPTR_NAME@
+ friend GR_CORE_API @SPTR_NAME@
gr_make_@BASE_NAME@ (unsigned interpolation, unsigned decimation, const std::vector<@TAP_TYPE@> &taps);
diff --git a/gnuradio-core/src/lib/filter/gr_rotator.h b/gnuradio-core/src/lib/filter/gr_rotator.h
index cb8f21a40..23c7a2830 100644
--- a/gnuradio-core/src/lib/filter/gr_rotator.h
+++ b/gnuradio-core/src/lib/filter/gr_rotator.h
@@ -23,9 +23,10 @@
#ifndef _GR_ROTATOR_H_
#define _GR_ROTATOR_H_
+#include <gr_core_api.h>
#include <gr_complex.h>
-class gr_rotator {
+class GR_CORE_API gr_rotator {
gr_complex d_phase;
gr_complex d_phase_incr;
unsigned int d_counter;
diff --git a/gnuradio-core/src/lib/filter/gr_sincos.h b/gnuradio-core/src/lib/filter/gr_sincos.h
index a8e267951..3d5c99083 100644
--- a/gnuradio-core/src/lib/filter/gr_sincos.h
+++ b/gnuradio-core/src/lib/filter/gr_sincos.h
@@ -23,14 +23,16 @@
#ifndef INCLUDED_GR_SINCOS_H
#define INCLUDED_GR_SINCOS_H
+#include <gr_core_api.h>
+
#ifdef __cplusplus
extern "C" {
#endif
// compute sine and cosine at the same time
-void gr_sincos (double x, double *sin, double *cos);
-void gr_sincosf (float x, float *sin, float *cos);
+GR_CORE_API void gr_sincos (double x, double *sin, double *cos);
+GR_CORE_API void gr_sincosf (float x, float *sin, float *cos);
#ifdef __cplusplus
};
diff --git a/gnuradio-core/src/lib/filter/gr_single_pole_iir.h b/gnuradio-core/src/lib/filter/gr_single_pole_iir.h
index 8781065d4..fb52e29e9 100644
--- a/gnuradio-core/src/lib/filter/gr_single_pole_iir.h
+++ b/gnuradio-core/src/lib/filter/gr_single_pole_iir.h
@@ -22,6 +22,7 @@
#ifndef _GR_SINGLE_POLE_IIR_H_
#define _GR_SINGLE_POLE_IIR_H_
+#include <gr_core_api.h>
#include <stdexcept>
#include <gr_complex.h>
/*!
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 1f1073424..3ce468db2 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
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_SINGLE_POLE_IIR_FILTER_CC_H
#define INCLUDED_GR_SINGLE_POLE_IIR_FILTER_CC_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_single_pole_iir.h>
#include <gr_complex.h>
@@ -31,7 +32,7 @@
class gr_single_pole_iir_filter_cc;
typedef boost::shared_ptr<gr_single_pole_iir_filter_cc> gr_single_pole_iir_filter_cc_sptr;
-gr_single_pole_iir_filter_cc_sptr
+GR_CORE_API gr_single_pole_iir_filter_cc_sptr
gr_make_single_pole_iir_filter_cc (double alpha, unsigned int vlen=1);
/*!
@@ -53,10 +54,10 @@ gr_make_single_pole_iir_filter_cc (double alpha, unsigned int vlen=1);
* 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_iir_filter_cc : public gr_sync_block
+class GR_CORE_API gr_single_pole_iir_filter_cc : public gr_sync_block
{
private:
- friend gr_single_pole_iir_filter_cc_sptr
+ friend GR_CORE_API gr_single_pole_iir_filter_cc_sptr
gr_make_single_pole_iir_filter_cc (double alpha, unsigned int vlen);
unsigned int d_vlen;
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 f676e94bc..d376587df 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
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_SINGLE_POLE_IIR_FILTER_FF_H
#define INCLUDED_GR_SINGLE_POLE_IIR_FILTER_FF_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_single_pole_iir.h>
#include <stdexcept>
@@ -30,7 +31,7 @@
class gr_single_pole_iir_filter_ff;
typedef boost::shared_ptr<gr_single_pole_iir_filter_ff> gr_single_pole_iir_filter_ff_sptr;
-gr_single_pole_iir_filter_ff_sptr
+GR_CORE_API gr_single_pole_iir_filter_ff_sptr
gr_make_single_pole_iir_filter_ff (double alpha, unsigned int vlen=1);
/*!
@@ -52,10 +53,10 @@ gr_make_single_pole_iir_filter_ff (double alpha, unsigned int vlen=1);
* 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_iir_filter_ff : public gr_sync_block
+class GR_CORE_API gr_single_pole_iir_filter_ff : public gr_sync_block
{
private:
- friend gr_single_pole_iir_filter_ff_sptr
+ friend GR_CORE_API gr_single_pole_iir_filter_ff_sptr
gr_make_single_pole_iir_filter_ff (double alpha, unsigned int vlen);
unsigned int d_vlen;
diff --git a/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.h b/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.h
index 3cd9105c7..4db7ba50f 100644
--- a/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.h
+++ b/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GRI_FFT_FILTER_CCC_GENERIC_H
#define INCLUDED_GRI_FFT_FILTER_CCC_GENERIC_H
+#include <gr_core_api.h>
#include <gr_complex.h>
#include <vector>
@@ -32,7 +33,7 @@ class gri_fft_complex;
* \brief Fast FFT filter with gr_complex input, gr_complex output and gr_complex taps
* \ingroup filter_blk
*/
-class gri_fft_filter_ccc_generic
+class GR_CORE_API gri_fft_filter_ccc_generic
{
private:
int d_ntaps;
diff --git a/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_sse.h b/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_sse.h
index d1c54f01f..6c96152c0 100644
--- a/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_sse.h
+++ b/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_sse.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GRI_FFT_FILTER_CCC_SSE_H
#define INCLUDED_GRI_FFT_FILTER_CCC_SSE_H
+#include <gr_core_api.h>
#include <gr_complex.h>
#include <vector>
@@ -32,7 +33,7 @@ class gri_fft_complex;
* \brief Fast FFT filter with gr_complex input, gr_complex output and gr_complex taps
* \ingroup filter_blk
*/
-class gri_fft_filter_ccc_sse
+class GR_CORE_API gri_fft_filter_ccc_sse
{
private:
int d_ntaps;
diff --git a/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.h b/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.h
index 6c31632d5..86658043a 100644
--- a/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.h
+++ b/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GRI_FFT_FILTER_FFF_GENERIC_H
#define INCLUDED_GRI_FFT_FILTER_FFF_GENERIC_H
+#include <gr_core_api.h>
#include <gr_complex.h>
#include <vector>
class gri_fft_real_fwd;
class gri_fft_real_rev;
-class gri_fft_filter_fff_generic
+class GR_CORE_API gri_fft_filter_fff_generic
{
private:
int d_ntaps;
diff --git a/gnuradio-core/src/lib/filter/gri_fft_filter_fff_sse.h b/gnuradio-core/src/lib/filter/gri_fft_filter_fff_sse.h
index 8258bb824..bd87358e2 100644
--- a/gnuradio-core/src/lib/filter/gri_fft_filter_fff_sse.h
+++ b/gnuradio-core/src/lib/filter/gri_fft_filter_fff_sse.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GRI_FFT_FILTER_FFF_SSE_H
#define INCLUDED_GRI_FFT_FILTER_FFF_SSE_H
+#include <gr_core_api.h>
#include <gr_complex.h>
#include <vector>
class gri_fft_real_fwd;
class gri_fft_real_rev;
-class gri_fft_filter_fff_sse
+class GR_CORE_API gri_fft_filter_fff_sse
{
private:
int d_ntaps;
diff --git a/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_XXX.h.t b/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_XXX.h.t
index 23d64b65d..f209a8849 100644
--- a/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_XXX.h.t
+++ b/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_XXX.h.t
@@ -29,6 +29,7 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <vector>
#include <gr_types.h>
#include <gr_reverse.h>
@@ -42,7 +43,7 @@
*
*/
-class @NAME@ {
+class GR_CORE_API @NAME@ {
protected:
std::vector<@TAP_TYPE@> d_taps; // reversed taps
diff --git a/gnuradio-core/src/lib/filter/gri_goertzel.h b/gnuradio-core/src/lib/filter/gri_goertzel.h
index e062f000e..6fb64b942 100644
--- a/gnuradio-core/src/lib/filter/gri_goertzel.h
+++ b/gnuradio-core/src/lib/filter/gri_goertzel.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GRI_GOERTZEL_H
#define INCLUDED_GRI_GOERTZEL_H
+#include <gr_core_api.h>
#include <gr_types.h>
/*!
* \brief Implements Goertzel single-bin DFT calculation
* \ingroup misc
*/
-class gri_goertzel
+class GR_CORE_API gri_goertzel
{
public:
gri_goertzel() {}
diff --git a/gnuradio-core/src/lib/filter/gri_iir.h b/gnuradio-core/src/lib/filter/gri_iir.h
index 5bc67df53..ddd8f9b81 100644
--- a/gnuradio-core/src/lib/filter/gri_iir.h
+++ b/gnuradio-core/src/lib/filter/gri_iir.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GRI_IIR_H
#define INCLUDED_GRI_IIR_H
+#include <gr_core_api.h>
#include <vector>
#include <stdexcept>
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 616520ad6..b2832b3f6 100644
--- a/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator.h
+++ b/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator.h
@@ -22,6 +22,7 @@
#ifndef _GRI_MMSE_FIR_INTERPOLATOR_H_
#define _GRI_MMSE_FIR_INTERPOLATOR_H_
+#include <gr_core_api.h>
#include <vector>
class gr_fir_fff;
@@ -39,7 +40,7 @@ class gr_fir_fff;
* method to 32nd's of a sample.
*/
-class gri_mmse_fir_interpolator {
+class GR_CORE_API gri_mmse_fir_interpolator {
public:
gri_mmse_fir_interpolator ();
~gri_mmse_fir_interpolator ();
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 daf8b19b8..2feef114b 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
@@ -22,6 +22,7 @@
#ifndef _GRI_MMSE_FIR_INTERPOLATOR_CC_H_
#define _GRI_MMSE_FIR_INTERPOLATOR_CC_H_
+#include <gr_core_api.h>
#include <gr_complex.h>
#include <vector>
@@ -40,7 +41,7 @@ class gr_fir_ccf;
* method to 32nd's of a sample.
*/
-class gri_mmse_fir_interpolator_cc {
+class GR_CORE_API gri_mmse_fir_interpolator_cc {
public:
gri_mmse_fir_interpolator_cc ();
~gri_mmse_fir_interpolator_cc ();
diff --git a/gnuradio-core/src/lib/filter/qa_filter.h b/gnuradio-core/src/lib/filter/qa_filter.h
index a51a88238..a10782068 100644
--- a/gnuradio-core/src/lib/filter/qa_filter.h
+++ b/gnuradio-core/src/lib/filter/qa_filter.h
@@ -23,11 +23,12 @@
#ifndef _QA_FILTER_H_
#define _QA_FILTER_H_
+#include <gruel/attributes.h>
#include <cppunit/TestSuite.h>
//! collect all the tests for the gr directory
-class qa_filter {
+class __GR_ATTR_EXPORT qa_filter {
public:
//! return suite of tests for all of gr directory
static CppUnit::TestSuite *suite ();
diff --git a/gnuradio-core/src/lib/general/CMakeLists.txt b/gnuradio-core/src/lib/general/CMakeLists.txt
new file mode 100644
index 000000000..cd850ca30
--- /dev/null
+++ b/gnuradio-core/src/lib/general/CMakeLists.txt
@@ -0,0 +1,294 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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 included, use CMake directory variables
+########################################################################
+
+########################################################################
+# Handle the generated sine table
+########################################################################
+add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/sine_table.h
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/gen_sine_table.py
+ COMMAND ${PYTHON_EXECUTABLE}
+ ${CMAKE_CURRENT_SOURCE_DIR}/gen_sine_table.py >
+ ${CMAKE_CURRENT_BINARY_DIR}/sine_table.h
+)
+
+include(AddFileDependencies)
+ADD_FILE_DEPENDENCIES(${CMAKE_CURRENT_SOURCE_DIR}/gr_fxpt.cc
+ ${CMAKE_CURRENT_BINARY_DIR}/sine_table.h
+)
+
+########################################################################
+# Handle the generated constants
+########################################################################
+execute_process(COMMAND ${PYTHON_EXECUTABLE} -c
+ "import time;print time.strftime('%a, %d %b %Y %H:%M:%S', time.gmtime())"
+ OUTPUT_VARIABLE BUILD_DATE OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+message(STATUS "Loading build date ${BUILD_DATE} into gr_constants...")
+
+message(STATUS "Loading version ${VERSION} into gr_constants...")
+
+file(TO_NATIVE_PATH "${CMAKE_INSTALL_PREFIX}/${GR_CONF_DIR}" SYSCONFDIR)
+file(TO_NATIVE_PATH "${CMAKE_INSTALL_PREFIX}/${GR_PKG_CONF_DIR}" GR_PREFSDIR)
+
+#double escape for windows backslash path separators
+string(REPLACE "\\" "\\\\" prefix ${prefix})
+string(REPLACE "\\" "\\\\" SYSCONFDIR ${SYSCONFDIR})
+string(REPLACE "\\" "\\\\" GR_PREFSDIR ${GR_PREFSDIR})
+
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_constants.cc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/gr_constants.cc
+@ONLY)
+
+list(APPEND gnuradio_core_sources ${CMAKE_CURRENT_BINARY_DIR}/gr_constants.cc)
+
+########################################################################
+# Append gnuradio-core library sources
+########################################################################
+list(APPEND gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_circular_file.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_count_bits.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fast_atan2f.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fft_vcc_fftw.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fxpt.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_misc.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_random.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_reverse.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_add_const_ss_generic.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_char_to_float.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_control_loop.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_debugger_hook.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_fft.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_float_to_char.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_float_to_short.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_float_to_uchar.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_glfsr.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_interleaved_short_to_complex.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_short_to_float.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_uchar_to_float.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/malloc16.c
+)
+
+########################################################################
+# Append gnuradio-core test sources
+########################################################################
+list(APPEND test_gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_general.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_circular_file.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_cpm.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_firdes.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_fxpt.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_fxpt_nco.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_fxpt_vco.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_math.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gri_lfsr.cc
+)
+
+########################################################################
+# Install runtime headers
+########################################################################
+install(FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_core_api.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_circular_file.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_constants.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_count_bits.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_expj.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fft_vcc_fftw.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fxpt.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fxpt_nco.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_fxpt_vco.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_log2_const.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_math.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_misc.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_nco.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_random.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_reverse.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_simple_framer_sync.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_test_types.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_vco.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_add_const_ss.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_agc_cc.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_agc_ff.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_agc2_cc.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_agc2_ff.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_char_to_float.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_control_loop.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_debugger_hook.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_fft.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_float_to_char.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_float_to_short.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_float_to_uchar.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_lfsr.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_glfsr.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_interleaved_short_to_complex.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_lfsr_15_1_0.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_lfsr_32k.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_short_to_float.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_uchar_to_float.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/malloc16.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/random.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "core_devel"
+)
+
+########################################################################
+# Install swig headers
+########################################################################
+if(ENABLE_PYTHON)
+install(FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/general.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_constants.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_agc_cc.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_agc_ff.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_agc2_cc.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_agc2_ff.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_control_loop.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "core_swig"
+)
+endif(ENABLE_PYTHON)
+
+########################################################################
+# Handle triple-threat files that have cc, h, and i
+########################################################################
+set(gr_core_general_triple_threats
+ complex_vec_test
+ gr_additive_scrambler_bb
+ gr_agc_cc
+ gr_agc_ff
+ gr_agc2_cc
+ gr_agc2_ff
+ gr_align_on_samplenumbers_ss
+ gr_bin_statistics_f
+ gr_bytes_to_syms
+ gr_char_to_float
+ gr_check_counting_s
+ gr_check_lfsr_32k_s
+ gr_complex_to_interleaved_short
+ gr_complex_to_xxx
+ gr_conjugate_cc
+ gr_copy
+ gr_cpfsk_bc
+ gr_cpm
+ gr_ctcss_squelch_ff
+ gr_decode_ccsds_27_fb
+ gr_diff_decoder_bb
+ gr_diff_encoder_bb
+ gr_diff_phasor_cc
+ gr_dpll_bb
+ gr_deinterleave
+ gr_delay
+ gr_encode_ccsds_27_bb
+ gr_fake_channel_coder_pp
+ gr_feedforward_agc_cc
+ gr_feval
+ gr_fft_vcc
+ gr_fft_vfc
+ gr_firdes
+ gr_float_to_char
+ gr_float_to_complex
+ gr_float_to_short
+ gr_float_to_uchar
+ gr_fmdet_cf
+ gr_frequency_modulator_fc
+ gr_framer_sink_1
+ gr_glfsr_source_b
+ gr_glfsr_source_f
+ gr_head
+ gr_int_to_float
+ gr_interleave
+ gr_interleaved_short_to_complex
+ gr_iqcomp_cc
+ gr_keep_one_in_n
+ gr_kludge_copy
+ gr_lfsr_32k_source_s
+ gr_map_bb
+ gr_nlog10_ff
+ gr_nop
+ gr_null_sink
+ gr_null_source
+ gr_pa_2x2_phase_combiner
+ gr_packet_sink
+ gr_peak_detector2_fb
+ gr_phase_modulator_fc
+ gr_pll_carriertracking_cc
+ gr_pll_freqdet_cf
+ gr_pll_refout_cc
+ gr_pn_correlator_cc
+ gr_prefs
+ gr_probe_avg_mag_sqrd_c
+ gr_probe_avg_mag_sqrd_cf
+ gr_probe_avg_mag_sqrd_f
+ gr_probe_signal_f
+ gr_pwr_squelch_cc
+ gr_pwr_squelch_ff
+ gr_quadrature_demod_cf
+ gr_rail_ff
+ gr_regenerate_bb
+ gr_remez
+ gr_rms_cf
+ gr_rms_ff
+ gr_repeat
+ gr_short_to_float
+ gr_simple_correlator
+ gr_simple_framer
+ gr_simple_squelch_cc
+ gr_skiphead
+ gr_squash_ff
+ gr_squelch_base_cc
+ gr_squelch_base_ff
+ gr_stream_mux
+ gr_stream_to_streams
+ gr_stream_to_vector
+ gr_streams_to_stream
+ gr_streams_to_vector
+ gr_stretch_ff
+ gr_test
+ gr_threshold_ff
+ gr_throttle
+ gr_transcendental
+ gr_uchar_to_float
+ gr_vco_f
+ gr_vector_to_stream
+ gr_vector_to_streams
+ gr_unpack_k_bits_bb
+ gr_wavelet_ff
+ gr_wvps_ff
+ gr_descrambler_bb
+ gr_scrambler_bb
+ gr_probe_mpsk_snr_c
+ gr_probe_density_b
+ gr_annotator_alltoall
+ gr_annotator_1to1
+ gr_burst_tagger
+ gr_correlate_access_code_tag_bb
+)
+
+foreach(file_tt ${gr_core_general_triple_threats})
+ list(APPEND gnuradio_core_sources ${CMAKE_CURRENT_SOURCE_DIR}/${file_tt}.cc)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${file_tt}.h DESTINATION ${GR_INCLUDE_DIR}/gnuradio COMPONENT "core_devel")
+ if(ENABLE_PYTHON)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${file_tt}.i DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig COMPONENT "core_swig")
+ endif(ENABLE_PYTHON)
+endforeach(file_tt ${gr_core_general_triple_threats})
diff --git a/gnuradio-core/src/lib/general/complex_vec_test.h b/gnuradio-core/src/lib/general/complex_vec_test.h
index d13dedf63..be4de41fb 100644
--- a/gnuradio-core/src/lib/general/complex_vec_test.h
+++ b/gnuradio-core/src/lib/general/complex_vec_test.h
@@ -1,27 +1,28 @@
+#include <gr_core_api.h>
#include <vector>
#include <complex>
-std::vector<std::complex<float> >
+GR_CORE_API std::vector<std::complex<float> >
complex_vec_test0();
-std::vector<std::complex<float> >
+GR_CORE_API std::vector<std::complex<float> >
complex_vec_test1(const std::vector<std::complex<float> > &input);
-std::complex<float>
+GR_CORE_API std::complex<float>
complex_scalar_test0();
-std::complex<float>
+GR_CORE_API std::complex<float>
complex_scalar_test1(std::complex<float> input);
-std::vector<int>
+GR_CORE_API std::vector<int>
int_vec_test0();
-std::vector<int>
+GR_CORE_API std::vector<int>
int_vec_test1(const std::vector<int> &input);
-std::vector<float>
+GR_CORE_API std::vector<float>
float_vec_test0();
-std::vector<float>
+GR_CORE_API std::vector<float>
float_vec_test1(const std::vector<float> &input);
diff --git a/gnuradio-core/src/lib/general/gr_additive_scrambler_bb.h b/gnuradio-core/src/lib/general/gr_additive_scrambler_bb.h
index 6c9493050..4c7c8f87e 100644
--- a/gnuradio-core/src/lib/general/gr_additive_scrambler_bb.h
+++ b/gnuradio-core/src/lib/general/gr_additive_scrambler_bb.h
@@ -22,13 +22,14 @@
#ifndef INCLUDED_GR_ADDITIVE_SCRAMBLER_BB_H
#define INCLUDED_GR_ADDITIVE_SCRAMBLER_BB_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include "gri_lfsr.h"
class gr_additive_scrambler_bb;
typedef boost::shared_ptr<gr_additive_scrambler_bb> gr_additive_scrambler_bb_sptr;
-gr_additive_scrambler_bb_sptr gr_make_additive_scrambler_bb(int mask, int seed, int len, int count=0);
+GR_CORE_API gr_additive_scrambler_bb_sptr gr_make_additive_scrambler_bb(int mask, int seed, int len, int count=0);
/*!
* Scramble an input stream using an LFSR. This block works on the LSB only
@@ -48,9 +49,9 @@ gr_additive_scrambler_bb_sptr gr_make_additive_scrambler_bb(int mask, int seed,
* \ingroup coding_blk
*/
-class gr_additive_scrambler_bb : public gr_sync_block
+class GR_CORE_API gr_additive_scrambler_bb : public gr_sync_block
{
- friend gr_additive_scrambler_bb_sptr gr_make_additive_scrambler_bb(int mask, int seed, int len, int count);
+ friend GR_CORE_API gr_additive_scrambler_bb_sptr gr_make_additive_scrambler_bb(int mask, int seed, int len, int count);
gri_lfsr d_lfsr;
int d_count;
diff --git a/gnuradio-core/src/lib/general/gr_agc2_cc.h b/gnuradio-core/src/lib/general/gr_agc2_cc.h
index 0eb20afb9..6127c3aa7 100644
--- a/gnuradio-core/src/lib/general/gr_agc2_cc.h
+++ b/gnuradio-core/src/lib/general/gr_agc2_cc.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_AGC2_CC_H
#define INCLUDED_GR_AGC2_CC_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gri_agc2_cc.h>
class gr_agc2_cc;
typedef boost::shared_ptr<gr_agc2_cc> gr_agc2_cc_sptr;
-gr_agc2_cc_sptr
+GR_CORE_API gr_agc2_cc_sptr
gr_make_agc2_cc (float attack_rate = 1e-1, float decay_rate = 1e-2, float reference = 1.0,
float gain = 1.0, float max_gain = 0.0);
/*!
@@ -39,9 +40,9 @@ gr_make_agc2_cc (float attack_rate = 1e-1, float decay_rate = 1e-2, float refere
* For Power the absolute value of the complex number is used.
*/
-class gr_agc2_cc : public gr_sync_block, public gri_agc2_cc
+class GR_CORE_API gr_agc2_cc : public gr_sync_block, public gri_agc2_cc
{
- friend gr_agc2_cc_sptr gr_make_agc2_cc (float attack_rate, float decay_rate, float reference,
+ friend GR_CORE_API gr_agc2_cc_sptr gr_make_agc2_cc (float attack_rate, float decay_rate, float reference,
float gain, float max_gain);
gr_agc2_cc (float attack_rate, float decay_rate, float reference,
float gain, float max_gain);
diff --git a/gnuradio-core/src/lib/general/gr_agc2_ff.h b/gnuradio-core/src/lib/general/gr_agc2_ff.h
index ef470765f..269d940d4 100644
--- a/gnuradio-core/src/lib/general/gr_agc2_ff.h
+++ b/gnuradio-core/src/lib/general/gr_agc2_ff.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_AGC2_FF_H
#define INCLUDED_GR_AGC2_FF_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gri_agc2_ff.h>
class gr_agc2_ff;
typedef boost::shared_ptr<gr_agc2_ff> gr_agc2_ff_sptr;
-gr_agc2_ff_sptr
+GR_CORE_API gr_agc2_ff_sptr
gr_make_agc2_ff (float attack_rate = 1e-1, float decay_rate = 1e-2, float reference = 1.0,
float gain = 1.0, float max_gain = 0.0);
/*!
@@ -38,9 +39,9 @@ gr_make_agc2_ff (float attack_rate = 1e-1, float decay_rate = 1e-2, float refere
* Power is approximated by absolute value
*/
-class gr_agc2_ff : public gr_sync_block, public gri_agc2_ff
+class GR_CORE_API gr_agc2_ff : public gr_sync_block, public gri_agc2_ff
{
- friend gr_agc2_ff_sptr gr_make_agc2_ff (float attack_rate, float decay_rate,
+ friend GR_CORE_API gr_agc2_ff_sptr gr_make_agc2_ff (float attack_rate, float decay_rate,
float reference, float gain, float max_gain);
gr_agc2_ff (float attack_rate, float decay_rate, float reference, float gain, float max_gain);
diff --git a/gnuradio-core/src/lib/general/gr_agc_cc.h b/gnuradio-core/src/lib/general/gr_agc_cc.h
index 43a5de6c7..f348fff91 100644
--- a/gnuradio-core/src/lib/general/gr_agc_cc.h
+++ b/gnuradio-core/src/lib/general/gr_agc_cc.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_AGC_CC_H
#define INCLUDED_GR_AGC_CC_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gri_agc_cc.h>
class gr_agc_cc;
typedef boost::shared_ptr<gr_agc_cc> gr_agc_cc_sptr;
-gr_agc_cc_sptr
+GR_CORE_API gr_agc_cc_sptr
gr_make_agc_cc (float rate = 1e-4, float reference = 1.0,
float gain = 1.0, float max_gain = 0.0);
/*!
@@ -38,9 +39,9 @@ gr_make_agc_cc (float rate = 1e-4, float reference = 1.0,
* For Power the absolute value of the complex number is used.
*/
-class gr_agc_cc : public gr_sync_block, public gri_agc_cc
+class GR_CORE_API gr_agc_cc : public gr_sync_block, public gri_agc_cc
{
- friend gr_agc_cc_sptr gr_make_agc_cc (float rate, float reference,
+ friend GR_CORE_API gr_agc_cc_sptr gr_make_agc_cc (float rate, float reference,
float gain, float max_gain);
gr_agc_cc (float rate, float reference,
float gain, float max_gain);
diff --git a/gnuradio-core/src/lib/general/gr_agc_ff.h b/gnuradio-core/src/lib/general/gr_agc_ff.h
index 7cb167fca..94db9eef5 100644
--- a/gnuradio-core/src/lib/general/gr_agc_ff.h
+++ b/gnuradio-core/src/lib/general/gr_agc_ff.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_AGC_FF_H
#define INCLUDED_GR_AGC_FF_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gri_agc_ff.h>
class gr_agc_ff;
typedef boost::shared_ptr<gr_agc_ff> gr_agc_ff_sptr;
-gr_agc_ff_sptr
+GR_CORE_API gr_agc_ff_sptr
gr_make_agc_ff (float rate = 1e-4, float reference = 1.0,
float gain = 1.0, float max_gain = 0.0);
@@ -39,9 +40,9 @@ gr_make_agc_ff (float rate = 1e-4, float reference = 1.0,
* Power is approximated by absolute value
*/
-class gr_agc_ff : public gr_sync_block, public gri_agc_ff
+class GR_CORE_API gr_agc_ff : public gr_sync_block, public gri_agc_ff
{
- friend gr_agc_ff_sptr gr_make_agc_ff (float rate, float reference,
+ friend GR_CORE_API gr_agc_ff_sptr gr_make_agc_ff (float rate, float reference,
float gain, float max_gain);
gr_agc_ff (float rate, float reference, float gain, float max_gain);
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 5038e168b..61f70ee96 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
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_ALIGN_ON_SAMPLE_NUMBERS_SS_H
#define INCLUDED_GR_ALIGN_ON_SAMPLE_NUMBERS_SS_H
+#include <gr_core_api.h>
#include <gr_block.h>
/*!
@@ -45,19 +46,19 @@
class gr_align_on_samplenumbers_ss;
typedef boost::shared_ptr<gr_align_on_samplenumbers_ss> 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);
+GR_CORE_API 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
+class GR_CORE_API gr_align_on_samplenumbers_ss : public gr_block
{
int d_align_interval;
int d_sample_counter;
int d_nchan;
bool d_in_presync;
unsigned int d_ninputs;
- class align_state {
+ class GR_CORE_API align_state {
public:
unsigned int ucounter_end;
unsigned int ucounter_begin;
@@ -72,7 +73,7 @@ class gr_align_on_samplenumbers_ss : public gr_block
};
std::vector<align_state> d_state;
- friend gr_align_on_samplenumbers_ss_sptr gr_make_align_on_samplenumbers_ss (int nchan,int align_interval);
+ friend GR_CORE_API gr_align_on_samplenumbers_ss_sptr gr_make_align_on_samplenumbers_ss (int nchan,int align_interval);
gr_align_on_samplenumbers_ss (int nchan,int align_interval);
public:
diff --git a/gnuradio-core/src/lib/general/gr_annotator_1to1.h b/gnuradio-core/src/lib/general/gr_annotator_1to1.h
index 4abc5b051..d866407fe 100644
--- a/gnuradio-core/src/lib/general/gr_annotator_1to1.h
+++ b/gnuradio-core/src/lib/general/gr_annotator_1to1.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_ANNOTATOR_1TO1_H
#define INCLUDED_GR_ANNOTATOR_1TO1_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_annotator_1to1;
typedef boost::shared_ptr<gr_annotator_1to1> gr_annotator_1to1_sptr;
// public constructor
-gr_annotator_1to1_sptr
+GR_CORE_API gr_annotator_1to1_sptr
gr_make_annotator_1to1 (int when, size_t sizeof_stream_item);
/*!
@@ -45,7 +46,7 @@ gr_make_annotator_1to1 (int when, size_t sizeof_stream_item);
*
* This block is only meant for testing and showing how to use the tags.
*/
-class gr_annotator_1to1 : public gr_sync_block
+class GR_CORE_API gr_annotator_1to1 : public gr_sync_block
{
public:
~gr_annotator_1to1 ();
@@ -67,7 +68,7 @@ protected:
uint64_t d_tag_counter;
std::vector<pmt::pmt_t> d_stored_tags;
- friend gr_annotator_1to1_sptr
+ friend GR_CORE_API gr_annotator_1to1_sptr
gr_make_annotator_1to1 (int when, size_t sizeof_stream_item);
};
diff --git a/gnuradio-core/src/lib/general/gr_annotator_alltoall.h b/gnuradio-core/src/lib/general/gr_annotator_alltoall.h
index e1e51ebf3..259b2e54c 100644
--- a/gnuradio-core/src/lib/general/gr_annotator_alltoall.h
+++ b/gnuradio-core/src/lib/general/gr_annotator_alltoall.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_ANNOTATOR_ALLTOALL_H
#define INCLUDED_GR_ANNOTATOR_ALLTOALL_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_annotator_alltoall;
typedef boost::shared_ptr<gr_annotator_alltoall> gr_annotator_alltoall_sptr;
// public constructor
-gr_annotator_alltoall_sptr
+GR_CORE_API gr_annotator_alltoall_sptr
gr_make_annotator_alltoall (int when, size_t sizeof_stream_item);
/*!
@@ -45,7 +46,7 @@ gr_make_annotator_alltoall (int when, size_t sizeof_stream_item);
*
* This block is only meant for testing and showing how to use the tags.
*/
-class gr_annotator_alltoall : public gr_sync_block
+class GR_CORE_API gr_annotator_alltoall : public gr_sync_block
{
public:
~gr_annotator_alltoall ();
@@ -68,7 +69,7 @@ protected:
uint64_t d_tag_counter;
std::vector<pmt::pmt_t> d_stored_tags;
- friend gr_annotator_alltoall_sptr
+ friend GR_CORE_API gr_annotator_alltoall_sptr
gr_make_annotator_alltoall (int when, size_t sizeof_stream_item);
};
diff --git a/gnuradio-core/src/lib/general/gr_bin_statistics_f.h b/gnuradio-core/src/lib/general/gr_bin_statistics_f.h
index d8c4c2fae..f7eea7d5f 100644
--- a/gnuradio-core/src/lib/general/gr_bin_statistics_f.h
+++ b/gnuradio-core/src/lib/general/gr_bin_statistics_f.h
@@ -24,6 +24,7 @@
#define INCLUDED_GR_BIN_STATISTICS_F_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_feval.h>
#include <gr_message.h>
@@ -33,7 +34,7 @@ class gr_bin_statistics_f;
typedef boost::shared_ptr<gr_bin_statistics_f> gr_bin_statistics_f_sptr;
-gr_bin_statistics_f_sptr
+GR_CORE_API 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
@@ -44,9 +45,9 @@ gr_make_bin_statistics_f(unsigned int vlen, // vector length
* \brief control scanning and record frequency domain statistics
* \ingroup sink_blk
*/
-class gr_bin_statistics_f : public gr_sync_block
+class GR_CORE_API gr_bin_statistics_f : public gr_sync_block
{
- friend gr_bin_statistics_f_sptr
+ friend GR_CORE_API 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
diff --git a/gnuradio-core/src/lib/general/gr_burst_tagger.h b/gnuradio-core/src/lib/general/gr_burst_tagger.h
index 8f814bea0..7547ba9cc 100644
--- a/gnuradio-core/src/lib/general/gr_burst_tagger.h
+++ b/gnuradio-core/src/lib/general/gr_burst_tagger.h
@@ -23,26 +23,27 @@
#ifndef INCLUDED_GR_BURST_TAGGER_H
#define INCLUDED_GR_BURST_TAGGER_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_burst_tagger;
typedef boost::shared_ptr<gr_burst_tagger> gr_burst_tagger_sptr;
-gr_burst_tagger_sptr gr_make_burst_tagger(size_t itemsize);
+GR_CORE_API gr_burst_tagger_sptr gr_make_burst_tagger(size_t itemsize);
/*!
* \brief output[i] = input[i]
* \ingroup misc_blk
*
*/
-class gr_burst_tagger : public gr_sync_block
+class GR_CORE_API gr_burst_tagger : public gr_sync_block
{
size_t d_itemsize;
bool d_state;
pmt::pmt_t d_key;
pmt::pmt_t d_id;
- friend gr_burst_tagger_sptr gr_make_burst_tagger(size_t itemsize);
+ friend GR_CORE_API gr_burst_tagger_sptr gr_make_burst_tagger(size_t itemsize);
gr_burst_tagger(size_t itemsize);
public:
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 1531de02a..33b98d4fd 100644
--- a/gnuradio-core/src/lib/general/gr_bytes_to_syms.h
+++ b/gnuradio-core/src/lib/general/gr_bytes_to_syms.h
@@ -22,12 +22,13 @@
#ifndef INCLUDED_GR_BYTES_TO_SYMS_H
#define INCLUDED_GR_BYTES_TO_SYMS_H
+#include <gr_core_api.h>
#include <gr_sync_interpolator.h>
class gr_bytes_to_syms;
typedef boost::shared_ptr<gr_bytes_to_syms> gr_bytes_to_syms_sptr;
-gr_bytes_to_syms_sptr gr_make_bytes_to_syms ();
+GR_CORE_API gr_bytes_to_syms_sptr gr_make_bytes_to_syms ();
/*!
* \brief Convert stream of bytes to stream of +/- 1 symbols
@@ -45,9 +46,9 @@ gr_bytes_to_syms_sptr gr_make_bytes_to_syms ();
* \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb,
* \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc.
*/
-class gr_bytes_to_syms : public gr_sync_interpolator
+class GR_CORE_API gr_bytes_to_syms : public gr_sync_interpolator
{
- friend gr_bytes_to_syms_sptr gr_make_bytes_to_syms ();
+ friend GR_CORE_API gr_bytes_to_syms_sptr gr_make_bytes_to_syms ();
gr_bytes_to_syms ();
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 482e479d6..b20d2066f 100644
--- a/gnuradio-core/src/lib/general/gr_char_to_float.h
+++ b/gnuradio-core/src/lib/general/gr_char_to_float.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_CHAR_TO_FLOAT_H
#define INCLUDED_GR_CHAR_TO_FLOAT_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_char_to_float;
typedef boost::shared_ptr<gr_char_to_float> gr_char_to_float_sptr;
-gr_char_to_float_sptr
+GR_CORE_API gr_char_to_float_sptr
gr_make_char_to_float ();
/*!
@@ -36,9 +37,9 @@ gr_make_char_to_float ();
* \ingroup converter_blk
*/
-class gr_char_to_float : public gr_sync_block
+class GR_CORE_API gr_char_to_float : public gr_sync_block
{
- friend gr_char_to_float_sptr gr_make_char_to_float ();
+ friend GR_CORE_API gr_char_to_float_sptr gr_make_char_to_float ();
gr_char_to_float ();
public:
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 da35ab8e2..cd4dcb24e 100644
--- a/gnuradio-core/src/lib/general/gr_check_counting_s.h
+++ b/gnuradio-core/src/lib/general/gr_check_counting_s.h
@@ -22,12 +22,13 @@
#ifndef INCLUDED_GR_CHECK_COUNTING_S_H
#define INCLUDED_GR_CHECK_COUNTING_S_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_check_counting_s;
typedef boost::shared_ptr<gr_check_counting_s> gr_check_counting_s_sptr;
-gr_check_counting_s_sptr gr_make_check_counting_s (bool do_32bit=false);
+GR_CORE_API 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.
@@ -36,9 +37,9 @@ gr_check_counting_s_sptr gr_make_check_counting_s (bool do_32bit=false);
*
* This sink is typically used to test the USRP "Counting Mode" or "Counting mode 32 bit".
*/
-class gr_check_counting_s : public gr_sync_block
+class GR_CORE_API gr_check_counting_s : public gr_sync_block
{
- friend gr_check_counting_s_sptr gr_make_check_counting_s (bool do_32bit);
+ friend GR_CORE_API gr_check_counting_s_sptr gr_make_check_counting_s (bool do_32bit);
enum state {
SEARCHING, // searching for synchronization
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 e2bff46d2..939675db8 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
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_CHECK_LFSR_32K_S_H
#define INCLUDED_GR_CHECK_LFSR_32K_S_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gri_lfsr_32k.h>
@@ -29,7 +30,7 @@
class gr_check_lfsr_32k_s;
typedef boost::shared_ptr<gr_check_lfsr_32k_s> gr_check_lfsr_32k_s_sptr;
-gr_check_lfsr_32k_s_sptr gr_make_check_lfsr_32k_s ();
+GR_CORE_API 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.
@@ -38,9 +39,9 @@ gr_check_lfsr_32k_s_sptr gr_make_check_lfsr_32k_s ();
* This sink is typically used along with gr_lfsr_32k_source_s to test
* the USRP using its digital loopback mode.
*/
-class gr_check_lfsr_32k_s : public gr_sync_block
+class GR_CORE_API gr_check_lfsr_32k_s : public gr_sync_block
{
- friend gr_check_lfsr_32k_s_sptr gr_make_check_lfsr_32k_s ();
+ friend GR_CORE_API gr_check_lfsr_32k_s_sptr gr_make_check_lfsr_32k_s ();
enum state {
SEARCHING, // searching for synchronization
diff --git a/gnuradio-core/src/lib/general/gr_circular_file.h b/gnuradio-core/src/lib/general/gr_circular_file.h
index 70f4b4b11..3d3f33a8d 100644
--- a/gnuradio-core/src/lib/general/gr_circular_file.h
+++ b/gnuradio-core/src/lib/general/gr_circular_file.h
@@ -23,6 +23,8 @@
#ifndef _GR_CIRCULAR_FILE_H_
#define _GR_CIRCULAR_FILE_H_
+#include <gr_core_api.h>
+
/*
* writes input data into a circular buffer on disk.
*
@@ -35,7 +37,7 @@
* current start of data
*
*/
-class gr_circular_file {
+class GR_CORE_API gr_circular_file {
int d_fd;
int *d_header;
unsigned char *d_buffer;
@@ -55,4 +57,4 @@ public:
void reset_read_pointer ();
};
-#endif /* _GR_CIRCULAR_FILE_H_ */
+#endif /* _GR_CIRCULAR_FILE_H_ */ \ No newline at end of file
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 0a91eddd6..a3e2d38ad 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
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_COMPLEX_TO_INTERLEAVED_SHORT_H
#define INCLUDED_GR_COMPLEX_TO_INTERLEAVED_SHORT_H
+#include <gr_core_api.h>
#include <gr_sync_interpolator.h>
class gr_complex_to_interleaved_short;
typedef boost::shared_ptr<gr_complex_to_interleaved_short>
gr_complex_to_interleaved_short_sptr;
-gr_complex_to_interleaved_short_sptr
+GR_CORE_API gr_complex_to_interleaved_short_sptr
gr_make_complex_to_interleaved_short ();
/*!
@@ -37,9 +38,9 @@ gr_make_complex_to_interleaved_short ();
* \ingroup converter_blk
*/
-class gr_complex_to_interleaved_short : public gr_sync_interpolator
+class GR_CORE_API gr_complex_to_interleaved_short : public gr_sync_interpolator
{
- friend gr_complex_to_interleaved_short_sptr gr_make_complex_to_interleaved_short ();
+ friend GR_CORE_API gr_complex_to_interleaved_short_sptr gr_make_complex_to_interleaved_short ();
gr_complex_to_interleaved_short ();
public:
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 1851c67d9..166403259 100644
--- a/gnuradio-core/src/lib/general/gr_complex_to_xxx.h
+++ b/gnuradio-core/src/lib/general/gr_complex_to_xxx.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_COMPLEX_TO_XXX_H
#define INCLUDED_GR_COMPLEX_TO_XXX_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_complex.h>
@@ -40,21 +41,21 @@ typedef boost::shared_ptr<gr_complex_to_mag> gr_complex_to_mag_sptr;
typedef boost::shared_ptr<gr_complex_to_mag_squared> gr_complex_to_mag_squared_sptr;
typedef boost::shared_ptr<gr_complex_to_arg> gr_complex_to_arg_sptr;
-gr_complex_to_float_sptr gr_make_complex_to_float (unsigned int vlen=1);
-gr_complex_to_real_sptr gr_make_complex_to_real (unsigned int vlen=1);
-gr_complex_to_imag_sptr gr_make_complex_to_imag (unsigned int vlen=1);
-gr_complex_to_mag_sptr gr_make_complex_to_mag (unsigned int vlen=1);
-gr_complex_to_mag_squared_sptr gr_make_complex_to_mag_squared (unsigned int vlen=1);
-gr_complex_to_arg_sptr gr_make_complex_to_arg (unsigned int vlen=1);
+GR_CORE_API gr_complex_to_float_sptr gr_make_complex_to_float (unsigned int vlen=1);
+GR_CORE_API gr_complex_to_real_sptr gr_make_complex_to_real (unsigned int vlen=1);
+GR_CORE_API gr_complex_to_imag_sptr gr_make_complex_to_imag (unsigned int vlen=1);
+GR_CORE_API gr_complex_to_mag_sptr gr_make_complex_to_mag (unsigned int vlen=1);
+GR_CORE_API gr_complex_to_mag_squared_sptr gr_make_complex_to_mag_squared (unsigned int vlen=1);
+GR_CORE_API 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_blk
* \param vlen vector len (default 1)
*/
-class gr_complex_to_float : public gr_sync_block
+class GR_CORE_API gr_complex_to_float : public gr_sync_block
{
- friend gr_complex_to_float_sptr gr_make_complex_to_float (unsigned int vlen);
+ friend GR_CORE_API gr_complex_to_float_sptr gr_make_complex_to_float (unsigned int vlen);
gr_complex_to_float (unsigned int vlen);
unsigned int d_vlen;
@@ -70,9 +71,9 @@ class gr_complex_to_float : public gr_sync_block
* \ingroup converter_blk
* \param vlen vector len (default 1)
*/
-class gr_complex_to_real : public gr_sync_block
+class GR_CORE_API gr_complex_to_real : public gr_sync_block
{
- friend gr_complex_to_real_sptr gr_make_complex_to_real (unsigned int vlen);
+ friend GR_CORE_API gr_complex_to_real_sptr gr_make_complex_to_real (unsigned int vlen);
gr_complex_to_real (unsigned int vlen);
unsigned int d_vlen;
@@ -88,9 +89,9 @@ class gr_complex_to_real : public gr_sync_block
* \ingroup converter_blk
* \param vlen vector len (default 1)
*/
-class gr_complex_to_imag : public gr_sync_block
+class GR_CORE_API gr_complex_to_imag : public gr_sync_block
{
- friend gr_complex_to_imag_sptr gr_make_complex_to_imag (unsigned int vlen);
+ friend GR_CORE_API gr_complex_to_imag_sptr gr_make_complex_to_imag (unsigned int vlen);
gr_complex_to_imag (unsigned int vlen);
unsigned int d_vlen;
@@ -106,9 +107,9 @@ class gr_complex_to_imag : public gr_sync_block
* \ingroup converter_blk
* \param vlen vector len (default 1)
*/
-class gr_complex_to_mag : public gr_sync_block
+class GR_CORE_API gr_complex_to_mag : public gr_sync_block
{
- friend gr_complex_to_mag_sptr gr_make_complex_to_mag (unsigned int vlen);
+ friend GR_CORE_API gr_complex_to_mag_sptr gr_make_complex_to_mag (unsigned int vlen);
gr_complex_to_mag (unsigned int vlen);
unsigned int d_vlen;
@@ -124,9 +125,9 @@ class gr_complex_to_mag : public gr_sync_block
* \ingroup converter_blk
* \param vlen vector len (default 1)
*/
-class gr_complex_to_mag_squared : public gr_sync_block
+class GR_CORE_API gr_complex_to_mag_squared : public gr_sync_block
{
- friend gr_complex_to_mag_squared_sptr gr_make_complex_to_mag_squared (unsigned int vlen);
+ friend GR_CORE_API gr_complex_to_mag_squared_sptr gr_make_complex_to_mag_squared (unsigned int vlen);
gr_complex_to_mag_squared (unsigned int vlen);
unsigned int d_vlen;
@@ -142,9 +143,9 @@ class gr_complex_to_mag_squared : public gr_sync_block
* \ingroup converter_blk
* \param vlen vector len (default 1)
*/
-class gr_complex_to_arg : public gr_sync_block
+class GR_CORE_API gr_complex_to_arg : public gr_sync_block
{
- friend gr_complex_to_arg_sptr gr_make_complex_to_arg (unsigned int vlen);
+ friend GR_CORE_API gr_complex_to_arg_sptr gr_make_complex_to_arg (unsigned int vlen);
gr_complex_to_arg (unsigned int vlen);
unsigned int d_vlen;
diff --git a/gnuradio-core/src/lib/general/gr_conjugate_cc.h b/gnuradio-core/src/lib/general/gr_conjugate_cc.h
index 783019adb..16e76e153 100644
--- a/gnuradio-core/src/lib/general/gr_conjugate_cc.h
+++ b/gnuradio-core/src/lib/general/gr_conjugate_cc.h
@@ -25,20 +25,21 @@
#ifndef INCLUDED_GR_CONJUGATE_CC_H
#define INCLUDED_GR_CONJUGATE_CC_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_conjugate_cc;
typedef boost::shared_ptr<gr_conjugate_cc> gr_conjugate_cc_sptr;
-gr_conjugate_cc_sptr gr_make_conjugate_cc ();
+GR_CORE_API gr_conjugate_cc_sptr gr_make_conjugate_cc ();
/*!
* \brief output = complex conjugate of input
* \ingroup math_blk
*/
-class gr_conjugate_cc : public gr_sync_block
+class GR_CORE_API gr_conjugate_cc : public gr_sync_block
{
- friend gr_conjugate_cc_sptr gr_make_conjugate_cc ();
+ friend GR_CORE_API gr_conjugate_cc_sptr gr_make_conjugate_cc ();
gr_conjugate_cc ();
diff --git a/gnuradio-core/src/lib/general/gr_constants.h b/gnuradio-core/src/lib/general/gr_constants.h
index 449d41c17..3d21fe1d6 100644
--- a/gnuradio-core/src/lib/general/gr_constants.h
+++ b/gnuradio-core/src/lib/general/gr_constants.h
@@ -22,31 +22,32 @@
#ifndef INCLUDED_GR_CONSTANTS_H
#define INCLUDED_GR_CONSTANTS_H
+#include <gr_core_api.h>
#include <string>
/*!
* \brief return ./configure --prefix argument. Typically /usr/local
*/
-const std::string gr_prefix();
+GR_CORE_API const std::string gr_prefix();
/*!
* \brief return ./configure --sysconfdir argument. Typically $prefix/etc or /etc
*/
-const std::string gr_sysconfdir();
+GR_CORE_API const std::string gr_sysconfdir();
/*!
* \brief return preferences file directory. Typically $sysconfdir/etc/conf.d
*/
-const std::string gr_prefsdir();
+GR_CORE_API const std::string gr_prefsdir();
/*!
* \brief return date/time of build, as set when 'bootstrap' is run
*/
-const std::string gr_build_date();
+GR_CORE_API const std::string gr_build_date();
/*!
* \brief return version string defined in configure.ac
*/
-const std::string gr_version();
+GR_CORE_API const std::string gr_version();
#endif /* INCLUDED_GR_CONSTANTS_H */
diff --git a/gnuradio-core/src/lib/general/gr_constellation_decoder_cb.h b/gnuradio-core/src/lib/general/gr_constellation_decoder_cb.h
new file mode 100644
index 000000000..d1d29847c
--- /dev/null
+++ b/gnuradio-core/src/lib/general/gr_constellation_decoder_cb.h
@@ -0,0 +1,66 @@
+/* -*- 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_CONSTELLATION_DECODER_CB_H
+#define INCLUDED_GR_CONSTELLATION_DECODER_CB_H
+
+#include <gr_core_api.h>
+#include <gr_sync_block.h>
+#include <vector>
+
+class gr_constellation_decoder_cb;
+typedef boost::shared_ptr<gr_constellation_decoder_cb> gr_constellation_decoder_cb_sptr;
+
+GR_CORE_API gr_constellation_decoder_cb_sptr
+ gr_make_constellation_decoder_cb (const std::vector<gr_complex> &sym_position,
+ const std::vector<unsigned char> &sym_value_out);
+
+/*!
+ * \brief Constellation Decoder
+ * \ingroup coding_blk
+ *
+ */
+class GR_CORE_API gr_constellation_decoder_cb : public gr_sync_block
+{
+
+ private:
+ std::vector<gr_complex> d_sym_position;
+ std::vector<unsigned char> d_sym_value_out;
+
+ friend GR_CORE_API gr_constellation_decoder_cb_sptr
+ gr_make_constellation_decoder_cb (const std::vector<gr_complex> &sym_position, const std::vector<unsigned char> &sym_value_out);
+
+ gr_constellation_decoder_cb (const std::vector<gr_complex> &sym_position,
+ const std::vector<unsigned char> &sym_value_out); //constructor
+
+ public:
+ bool set_constellation(const std::vector<gr_complex> &sym_position,
+ const std::vector<unsigned char> &sym_value_out);
+
+ ~gr_constellation_decoder_cb(); //destructor
+
+ 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_copy.h b/gnuradio-core/src/lib/general/gr_copy.h
index d99aef8b7..7fb13bf68 100644
--- a/gnuradio-core/src/lib/general/gr_copy.h
+++ b/gnuradio-core/src/lib/general/gr_copy.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_COPY_H
#define INCLUDED_GR_COPY_H
+#include <gr_core_api.h>
#include <gr_block.h>
class gr_copy;
typedef boost::shared_ptr<gr_copy> gr_copy_sptr;
-gr_copy_sptr gr_make_copy(size_t itemsize);
+GR_CORE_API gr_copy_sptr gr_make_copy(size_t itemsize);
/*!
* \brief output[i] = input[i]
@@ -38,12 +39,12 @@ gr_copy_sptr gr_make_copy(size_t itemsize);
* When disabled, this block drops its input on the floor.
*
*/
-class gr_copy : public gr_block
+class GR_CORE_API gr_copy : public gr_block
{
size_t d_itemsize;
bool d_enabled;
- friend gr_copy_sptr gr_make_copy(size_t itemsize);
+ friend GR_CORE_API gr_copy_sptr gr_make_copy(size_t itemsize);
gr_copy(size_t itemsize);
public:
diff --git a/gnuradio-core/src/lib/general/gr_core_api.h b/gnuradio-core/src/lib/general/gr_core_api.h
new file mode 100644
index 000000000..74c802857
--- /dev/null
+++ b/gnuradio-core/src/lib/general/gr_core_api.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2010-2011 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along 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_CORE_API_H
+#define INCLUDED_GR_CORE_API_H
+
+#include <gruel/attributes.h>
+
+#ifdef gnuradio_core_EXPORTS
+# define GR_CORE_API __GR_ATTR_EXPORT
+#else
+# define GR_CORE_API __GR_ATTR_IMPORT
+#endif
+
+#endif /* INCLUDED_GR_CORE_API_H */
diff --git a/gnuradio-core/src/lib/general/gr_correlate_access_code_tag_bb.h b/gnuradio-core/src/lib/general/gr_correlate_access_code_tag_bb.h
index 1067bbc56..e543f5cfb 100644
--- a/gnuradio-core/src/lib/general/gr_correlate_access_code_tag_bb.h
+++ b/gnuradio-core/src/lib/general/gr_correlate_access_code_tag_bb.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_gr_correlate_access_code_tag_bb_H
#define INCLUDED_gr_correlate_access_code_tag_bb_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <string>
@@ -34,7 +35,7 @@ typedef boost::shared_ptr<gr_correlate_access_code_tag_bb> gr_correlate_access_c
* \param threshold maximum number of bits that may be wrong
* \param tag_name key of the tag inserted into the tag stream
*/
-gr_correlate_access_code_tag_bb_sptr
+GR_CORE_API gr_correlate_access_code_tag_bb_sptr
gr_make_correlate_access_code_tag_bb (const std::string &access_code, int threshold,
const std::string &tag_name);
@@ -49,9 +50,9 @@ gr_make_correlate_access_code_tag_bb (const std::string &access_code, int thresh
* name [tag_name], specified in the constructor. Used for searching
* an input data stream for preambles, etc.
*/
-class gr_correlate_access_code_tag_bb : public gr_sync_block
+class GR_CORE_API gr_correlate_access_code_tag_bb : public gr_sync_block
{
- friend gr_correlate_access_code_tag_bb_sptr
+ friend GR_CORE_API gr_correlate_access_code_tag_bb_sptr
gr_make_correlate_access_code_tag_bb (const std::string &access_code, int threshold,
const std::string &tag_name);
private:
diff --git a/gnuradio-core/src/lib/general/gr_costas_loop_cc.h b/gnuradio-core/src/lib/general/gr_costas_loop_cc.h
new file mode 100644
index 000000000..13b33d96c
--- /dev/null
+++ b/gnuradio-core/src/lib/general/gr_costas_loop_cc.h
@@ -0,0 +1,146 @@
+/* -*- 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_COSTAS_LOOP_CC_H
+#define INCLUDED_GR_COSTAS_LOOP_CC_H
+
+#include <gr_core_api.h>
+#include <gr_sync_block.h>
+#include <stdexcept>
+#include <fstream>
+
+
+/*! \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> gr_costas_loop_cc_sptr;
+
+
+GR_CORE_API gr_costas_loop_cc_sptr
+gr_make_costas_loop_cc (float alpha, float beta,
+ float max_freq, float min_freq,
+ int order
+ ) throw (std::invalid_argument);
+
+
+/*!
+ * \brief Carrier tracking PLL for QPSK
+ * \ingroup sync_blk
+ * input: complex; output: complex
+ * <br>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.
+ */
+class GR_CORE_API gr_costas_loop_cc : public gr_sync_block
+{
+ friend GR_CORE_API gr_costas_loop_cc_sptr gr_make_costas_loop_cc (float alpha, float beta,
+ float max_freq, float min_freq,
+ int order
+ ) throw (std::invalid_argument);
+
+ float d_alpha, d_beta, d_max_freq, d_min_freq, d_phase, d_freq;
+ int d_order;
+
+ gr_costas_loop_cc (float alpha, float beta,
+ float max_freq, float min_freq,
+ int order
+ ) throw (std::invalid_argument);
+
+ /*! \brief the phase detector circuit for 8th-order PSK loops
+ * \param sample complex sample
+ * \return the phase error
+ */
+ float phase_detector_8(gr_complex sample) const; // for 8PSK
+
+ /*! \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_count_bits.h b/gnuradio-core/src/lib/general/gr_count_bits.h
index a8b52d3ac..f0cec2a11 100644
--- a/gnuradio-core/src/lib/general/gr_count_bits.h
+++ b/gnuradio-core/src/lib/general/gr_count_bits.h
@@ -23,9 +23,11 @@
#ifndef _GR_COUNT_BITS_H_
#define _GR_COUNT_BITS_H_
-unsigned int gr_count_bits8(unsigned int x); // return number of set bits in the low 8 bits of x
-unsigned int gr_count_bits16(unsigned int x); // return number of set bits in the low 16 bits of x
-unsigned int gr_count_bits32(unsigned int x); // return number of set bits in the low 32 bits of x
-unsigned int gr_count_bits64(unsigned long long int x);
+#include <gr_core_api.h>
+
+GR_CORE_API unsigned int gr_count_bits8(unsigned int x); // return number of set bits in the low 8 bits of x
+GR_CORE_API unsigned int gr_count_bits16(unsigned int x); // return number of set bits in the low 16 bits of x
+GR_CORE_API unsigned int gr_count_bits32(unsigned int x); // return number of set bits in the low 32 bits of x
+GR_CORE_API unsigned int gr_count_bits64(unsigned long long int x);
#endif /* _GR_COUNT_BITS_H_ */
diff --git a/gnuradio-core/src/lib/general/gr_cpfsk_bc.h b/gnuradio-core/src/lib/general/gr_cpfsk_bc.h
index 29bcfed65..4afba4fb4 100644
--- a/gnuradio-core/src/lib/general/gr_cpfsk_bc.h
+++ b/gnuradio-core/src/lib/general/gr_cpfsk_bc.h
@@ -20,13 +20,14 @@
#ifndef INCLUDED_GR_CPFSK_BC_H
#define INCLUDED_GR_CPFSK_BC_H
+#include <gr_core_api.h>
#include <gr_sync_interpolator.h>
class gr_cpfsk_bc;
typedef boost::shared_ptr<gr_cpfsk_bc> gr_cpfsk_bc_sptr;
-gr_cpfsk_bc_sptr gr_make_cpfsk_bc(float k, float ampl, int samples_per_sym);
+GR_CORE_API 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
@@ -38,10 +39,10 @@ gr_cpfsk_bc_sptr gr_make_cpfsk_bc(float k, float ampl, int samples_per_sym);
* \param samples_per_sym number of output samples per input bit
*/
-class gr_cpfsk_bc : public gr_sync_interpolator
+class GR_CORE_API 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);
+ friend GR_CORE_API 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);
diff --git a/gnuradio-core/src/lib/general/gr_cpm.cc b/gnuradio-core/src/lib/general/gr_cpm.cc
index a00526b52..94a428c58 100644
--- a/gnuradio-core/src/lib/general/gr_cpm.cc
+++ b/gnuradio-core/src/lib/general/gr_cpm.cc
@@ -28,6 +28,10 @@
#include <cfloat>
#include <gr_cpm.h>
+//gives us erf on compilers without it
+#include <boost/math/special_functions/erf.hpp>
+namespace bm = boost::math;
+
#ifndef M_TWOPI
# define M_TWOPI (2*M_PI)
#endif
@@ -178,8 +182,8 @@ generate_cpm_gaussian_taps(unsigned samples_per_sym, unsigned L, double bt)
double alpha = 5.336446256636997 * bt;
for (unsigned i = 0; i < samples_per_sym * L; i++) {
double k = i - Ls/2; // Causal to acausal
- taps_d[i] = (erf(alpha * (k / samples_per_sym + 0.5)) -
- erf(alpha * (k / samples_per_sym - 0.5)))
+ taps_d[i] = (bm::erf(alpha * (k / samples_per_sym + 0.5)) -
+ bm::erf(alpha * (k / samples_per_sym - 0.5)))
* 0.5 / samples_per_sym;
taps[i] = (float) taps_d[i];
}
diff --git a/gnuradio-core/src/lib/general/gr_cpm.h b/gnuradio-core/src/lib/general/gr_cpm.h
index cae6fe313..ef2ff8414 100644
--- a/gnuradio-core/src/lib/general/gr_cpm.h
+++ b/gnuradio-core/src/lib/general/gr_cpm.h
@@ -22,9 +22,10 @@
#ifndef INCLUDED_GR_CPM_H
#define INCLUDED_GR_CPM_H
+#include <gr_core_api.h>
#include <vector>
-class gr_cpm
+class GR_CORE_API gr_cpm
{
public:
enum cpm_type {
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 49df785ff..664c40846 100644
--- a/gnuradio-core/src/lib/general/gr_ctcss_squelch_ff.h
+++ b/gnuradio-core/src/lib/general/gr_ctcss_squelch_ff.h
@@ -23,20 +23,21 @@
#ifndef INCLUDED_GR_CTCSS_SQUELCH_FF_H
#define INCLUDED_GR_CTCSS_SQUELCH_FF_H
+#include <gr_core_api.h>
#include <gr_squelch_base_ff.h>
#include <gri_goertzel.h>
class gr_ctcss_squelch_ff;
typedef boost::shared_ptr<gr_ctcss_squelch_ff> gr_ctcss_squelch_ff_sptr;
-gr_ctcss_squelch_ff_sptr
+GR_CORE_API gr_ctcss_squelch_ff_sptr
gr_make_ctcss_squelch_ff(int rate, float freq, float level=0.01, int len=0, int ramp=0, bool gate=false);
/*!
* \brief gate or zero output if ctcss tone not present
* \ingroup level_blk
*/
-class gr_ctcss_squelch_ff : public gr_squelch_base_ff
+class GR_CORE_API gr_ctcss_squelch_ff : public gr_squelch_base_ff
{
private:
float d_freq;
@@ -48,7 +49,7 @@ private:
gri_goertzel d_goertzel_c;
gri_goertzel d_goertzel_r;
- friend gr_ctcss_squelch_ff_sptr gr_make_ctcss_squelch_ff(int rate, float freq, float level, int len, int ramp, bool gate);
+ friend GR_CORE_API gr_ctcss_squelch_ff_sptr gr_make_ctcss_squelch_ff(int rate, float freq, float level, int len, int ramp, bool gate);
gr_ctcss_squelch_ff(int rate, float freq, float level, int len, int ramp, bool gate);
int find_tone(float freq);
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
index 50a6c9d89..3db250101 100644
--- a/gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.h
+++ b/gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.h
@@ -20,17 +20,18 @@
#ifndef INCLUDED_GR_DECODE_CCSDS_27_FB_H
#define INCLUDED_GR_DECODE_CCSDS_27_FB_H
+#include <gr_core_api.h>
#include <gr_sync_decimator.h>
extern "C" {
-#include "../viterbi/viterbi.h"
+#include <viterbi.h>
}
class gr_decode_ccsds_27_fb;
typedef boost::shared_ptr<gr_decode_ccsds_27_fb> gr_decode_ccsds_27_fb_sptr;
-gr_decode_ccsds_27_fb_sptr gr_make_decode_ccsds_27_fb();
+GR_CORE_API 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
@@ -51,10 +52,10 @@ gr_decode_ccsds_27_fb_sptr gr_make_decode_ccsds_27_fb();
* from the corresponding inputs.
*/
-class gr_decode_ccsds_27_fb : public gr_sync_decimator
+class GR_CORE_API gr_decode_ccsds_27_fb : public gr_sync_decimator
{
private:
- friend gr_decode_ccsds_27_fb_sptr gr_make_decode_ccsds_27_fb();
+ friend GR_CORE_API gr_decode_ccsds_27_fb_sptr gr_make_decode_ccsds_27_fb();
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 59c310bdc..3dd913911 100644
--- a/gnuradio-core/src/lib/general/gr_deinterleave.h
+++ b/gnuradio-core/src/lib/general/gr_deinterleave.h
@@ -23,20 +23,21 @@
#ifndef INCLUDED_GR_DEINTERLEAVE_H
#define INCLUDED_GR_DEINTERLEAVE_H
+#include <gr_core_api.h>
#include <gr_sync_decimator.h>
class gr_deinterleave;
typedef boost::shared_ptr<gr_deinterleave> gr_deinterleave_sptr;
-gr_deinterleave_sptr gr_make_deinterleave (size_t itemsize);
+GR_CORE_API gr_deinterleave_sptr gr_make_deinterleave (size_t itemsize);
/*!
* \brief deinterleave a single input into N outputs
* \ingroup slicedice_blk
*/
-class gr_deinterleave : public gr_sync_decimator
+class GR_CORE_API gr_deinterleave : public gr_sync_decimator
{
- friend gr_deinterleave_sptr gr_make_deinterleave (size_t itemsize);
+ friend GR_CORE_API gr_deinterleave_sptr gr_make_deinterleave (size_t itemsize);
size_t d_itemsize;
diff --git a/gnuradio-core/src/lib/general/gr_delay.h b/gnuradio-core/src/lib/general/gr_delay.h
index d7e8252a2..14de9af1f 100644
--- a/gnuradio-core/src/lib/general/gr_delay.h
+++ b/gnuradio-core/src/lib/general/gr_delay.h
@@ -23,20 +23,21 @@
#ifndef INCLUDED_GR_DELAY_H
#define INCLUDED_GR_DELAY_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_delay;
typedef boost::shared_ptr<gr_delay> gr_delay_sptr;
-gr_delay_sptr gr_make_delay (size_t itemsize, int delay);
+GR_CORE_API 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
+class GR_CORE_API gr_delay : public gr_sync_block
{
- friend gr_delay_sptr gr_make_delay (size_t itemsize, int delay);
+ friend GR_CORE_API gr_delay_sptr gr_make_delay (size_t itemsize, int delay);
gr_delay (size_t itemsize, int delay);
diff --git a/gnuradio-core/src/lib/general/gr_descrambler_bb.h b/gnuradio-core/src/lib/general/gr_descrambler_bb.h
index 19787690c..d7a49b5f1 100644
--- a/gnuradio-core/src/lib/general/gr_descrambler_bb.h
+++ b/gnuradio-core/src/lib/general/gr_descrambler_bb.h
@@ -22,13 +22,14 @@
#ifndef INCLUDED_GR_DESCRAMBLER_BB_H
#define INCLUDED_GR_DESCRAMBLER_BB_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include "gri_lfsr.h"
class gr_descrambler_bb;
typedef boost::shared_ptr<gr_descrambler_bb> gr_descrambler_bb_sptr;
-gr_descrambler_bb_sptr gr_make_descrambler_bb(int mask, int seed, int len);
+GR_CORE_API 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
@@ -42,9 +43,9 @@ gr_descrambler_bb_sptr gr_make_descrambler_bb(int mask, int seed, int len);
* \ingroup coding_blk
*/
-class gr_descrambler_bb : public gr_sync_block
+class GR_CORE_API gr_descrambler_bb : public gr_sync_block
{
- friend gr_descrambler_bb_sptr gr_make_descrambler_bb(int mask, int seed, int len);
+ friend GR_CORE_API gr_descrambler_bb_sptr gr_make_descrambler_bb(int mask, int seed, int len);
gri_lfsr d_lfsr;
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 6fd08ec4b..0337c3dbd 100644
--- a/gnuradio-core/src/lib/general/gr_diff_decoder_bb.h
+++ b/gnuradio-core/src/lib/general/gr_diff_decoder_bb.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_DIFF_DECODER_BB_H
#define INCLUDED_GR_DIFF_DECODER_BB_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_diff_decoder_bb;
typedef boost::shared_ptr<gr_diff_decoder_bb> gr_diff_decoder_bb_sptr;
-gr_diff_decoder_bb_sptr gr_make_diff_decoder_bb (unsigned int modulus);
+GR_CORE_API gr_diff_decoder_bb_sptr gr_make_diff_decoder_bb (unsigned int modulus);
/*!
* \brief y[0] = (x[0] - x[-1]) % M
@@ -36,9 +37,9 @@ gr_diff_decoder_bb_sptr gr_make_diff_decoder_bb (unsigned int modulus);
*
* Differential decoder
*/
-class gr_diff_decoder_bb : public gr_sync_block
+class GR_CORE_API gr_diff_decoder_bb : public gr_sync_block
{
- friend gr_diff_decoder_bb_sptr gr_make_diff_decoder_bb (unsigned int modulus);
+ friend GR_CORE_API gr_diff_decoder_bb_sptr gr_make_diff_decoder_bb (unsigned int modulus);
gr_diff_decoder_bb(unsigned int modulus);
unsigned int d_modulus;
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 50aff73cf..c99e226da 100644
--- a/gnuradio-core/src/lib/general/gr_diff_encoder_bb.h
+++ b/gnuradio-core/src/lib/general/gr_diff_encoder_bb.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_DIFF_ENCODER_BB_H
#define INCLUDED_GR_DIFF_ENCODER_BB_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_diff_encoder_bb;
typedef boost::shared_ptr<gr_diff_encoder_bb> gr_diff_encoder_bb_sptr;
-gr_diff_encoder_bb_sptr gr_make_diff_encoder_bb (unsigned int modulus);
+GR_CORE_API gr_diff_encoder_bb_sptr gr_make_diff_encoder_bb (unsigned int modulus);
/*!
* \brief y[0] = (x[0] + y[-1]) % M
@@ -36,9 +37,9 @@ gr_diff_encoder_bb_sptr gr_make_diff_encoder_bb (unsigned int modulus);
*
* Differential encoder
*/
-class gr_diff_encoder_bb : public gr_sync_block
+class GR_CORE_API gr_diff_encoder_bb : public gr_sync_block
{
- friend gr_diff_encoder_bb_sptr gr_make_diff_encoder_bb (unsigned int modulus);
+ friend GR_CORE_API gr_diff_encoder_bb_sptr gr_make_diff_encoder_bb (unsigned int modulus);
gr_diff_encoder_bb(unsigned int modulus);
unsigned int d_last_out;
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 1070ba183..8af2699a7 100644
--- a/gnuradio-core/src/lib/general/gr_diff_phasor_cc.h
+++ b/gnuradio-core/src/lib/general/gr_diff_phasor_cc.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_DIFF_PHASOR_CC_H
#define INCLUDED_GR_DIFF_PHASOR_CC_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
/*!
@@ -32,12 +33,12 @@
class gr_diff_phasor_cc;
typedef boost::shared_ptr<gr_diff_phasor_cc> gr_diff_phasor_cc_sptr;
-gr_diff_phasor_cc_sptr gr_make_diff_phasor_cc ();
+GR_CORE_API gr_diff_phasor_cc_sptr gr_make_diff_phasor_cc ();
-class gr_diff_phasor_cc : public gr_sync_block
+class GR_CORE_API gr_diff_phasor_cc : public gr_sync_block
{
- friend gr_diff_phasor_cc_sptr gr_make_diff_phasor_cc ();
+ friend GR_CORE_API gr_diff_phasor_cc_sptr gr_make_diff_phasor_cc ();
gr_diff_phasor_cc (); //constructor
diff --git a/gnuradio-core/src/lib/general/gr_dpll_bb.h b/gnuradio-core/src/lib/general/gr_dpll_bb.h
index e6b5fc0fa..8e748dddb 100644
--- a/gnuradio-core/src/lib/general/gr_dpll_bb.h
+++ b/gnuradio-core/src/lib/general/gr_dpll_bb.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_DPLL_BB_H
#define INCLUDED_GR_DPLL_BB_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_dpll_bb;
typedef boost::shared_ptr<gr_dpll_bb> gr_dpll_bb_sptr;
-gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain);
+GR_CORE_API gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain);
/*!
* \brief Detect the peak of a signal
@@ -37,9 +38,9 @@ gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain);
* If a peak is detected, this block outputs a 1,
* or it outputs 0's.
*/
-class gr_dpll_bb : public gr_sync_block
+class GR_CORE_API gr_dpll_bb : public gr_sync_block
{
- friend gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain);
+ friend GR_CORE_API gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain);
gr_dpll_bb (float period, float gain);
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
index 86832ee05..e24ae9151 100644
--- a/gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.h
+++ b/gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.h
@@ -20,13 +20,14 @@
#ifndef INCLUDED_GR_ENCODE_CCSDS_27_BB_H
#define INCLUDED_GR_ENCODE_CCSDS_27_BB_H
+#include <gr_core_api.h>
#include <gr_sync_interpolator.h>
class gr_encode_ccsds_27_bb;
typedef boost::shared_ptr<gr_encode_ccsds_27_bb> gr_encode_ccsds_27_bb_sptr;
-gr_encode_ccsds_27_bb_sptr gr_make_encode_ccsds_27_bb();
+GR_CORE_API 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
@@ -44,10 +45,10 @@ gr_encode_ccsds_27_bb_sptr gr_make_encode_ccsds_27_bb();
* There is no provision to "flush" the encoder.
*/
-class gr_encode_ccsds_27_bb : public gr_sync_interpolator
+class GR_CORE_API gr_encode_ccsds_27_bb : public gr_sync_interpolator
{
private:
- friend gr_encode_ccsds_27_bb_sptr gr_make_encode_ccsds_27_bb();
+ friend GR_CORE_API gr_encode_ccsds_27_bb_sptr gr_make_encode_ccsds_27_bb();
gr_encode_ccsds_27_bb();
unsigned char d_encstate;
diff --git a/gnuradio-core/src/lib/general/gr_expj.h b/gnuradio-core/src/lib/general/gr_expj.h
index 7adf3a0c6..6f1d56eb3 100644
--- a/gnuradio-core/src/lib/general/gr_expj.h
+++ b/gnuradio-core/src/lib/general/gr_expj.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_EXPJ_H
#define INCLUDED_GR_EXPJ_H
+#include <gr_core_api.h>
#include <gr_sincos.h>
#include <gr_types.h>
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 480fb8e78..2560c6105 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
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_FAKE_CHANNEL_CODER_PP_H
#define INCLUDED_GR_FAKE_CHANNEL_CODER_PP_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_fake_channel_encoder_pp;
typedef boost::shared_ptr<gr_fake_channel_encoder_pp> gr_fake_channel_encoder_pp_sptr;
-gr_fake_channel_encoder_pp_sptr
+GR_CORE_API gr_fake_channel_encoder_pp_sptr
gr_make_fake_channel_encoder_pp(int input_vlen, int output_vlen);
/*!
@@ -37,14 +38,14 @@ gr_make_fake_channel_encoder_pp(int input_vlen, int output_vlen);
*
* input: stream of byte vectors; output: stream of byte vectors
*/
-class gr_fake_channel_encoder_pp : public gr_sync_block
+class GR_CORE_API gr_fake_channel_encoder_pp : public gr_sync_block
{
int d_input_vlen;
int d_output_vlen;
gr_fake_channel_encoder_pp(int input_vlen, int output_vlen);
- friend gr_fake_channel_encoder_pp_sptr
+ friend GR_CORE_API gr_fake_channel_encoder_pp_sptr
gr_make_fake_channel_encoder_pp(int input_vlen, int output_vlen);
public:
@@ -60,7 +61,7 @@ public:
class gr_fake_channel_decoder_pp;
typedef boost::shared_ptr<gr_fake_channel_decoder_pp> gr_fake_channel_decoder_pp_sptr;
-gr_fake_channel_decoder_pp_sptr
+GR_CORE_API gr_fake_channel_decoder_pp_sptr
gr_make_fake_channel_decoder_pp(int input_vlen, int output_vlen);
/*!
@@ -69,14 +70,14 @@ gr_make_fake_channel_decoder_pp(int input_vlen, int output_vlen);
*
* input: stream of byte vectors; output: stream of byte vectors
*/
-class gr_fake_channel_decoder_pp : public gr_sync_block
+class GR_CORE_API gr_fake_channel_decoder_pp : public gr_sync_block
{
int d_input_vlen;
int d_output_vlen;
gr_fake_channel_decoder_pp(int input_vlen, int output_vlen);
- friend gr_fake_channel_decoder_pp_sptr
+ friend GR_CORE_API gr_fake_channel_decoder_pp_sptr
gr_make_fake_channel_decoder_pp(int input_vlen, int output_vlen);
public:
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 8c600d3d1..a97dbd958 100644
--- a/gnuradio-core/src/lib/general/gr_feedforward_agc_cc.h
+++ b/gnuradio-core/src/lib/general/gr_feedforward_agc_cc.h
@@ -23,21 +23,22 @@
#ifndef INCLUDED_GR_FEEDFORWARD_AGC_CC_H
#define INCLUDED_GR_FEEDFORWARD_AGC_CC_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_feedforward_agc_cc;
typedef boost::shared_ptr<gr_feedforward_agc_cc> gr_feedforward_agc_cc_sptr;
-gr_feedforward_agc_cc_sptr
+GR_CORE_API gr_feedforward_agc_cc_sptr
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
+class GR_CORE_API gr_feedforward_agc_cc : public gr_sync_block
{
- friend gr_feedforward_agc_cc_sptr
+ friend GR_CORE_API gr_feedforward_agc_cc_sptr
gr_make_feedforward_agc_cc(int nsamples, float reference);
int d_nsamples;
diff --git a/gnuradio-core/src/lib/general/gr_feval.h b/gnuradio-core/src/lib/general/gr_feval.h
index cc4209af0..a0e448ebf 100644
--- a/gnuradio-core/src/lib/general/gr_feval.h
+++ b/gnuradio-core/src/lib/general/gr_feval.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_FEVAL_H
#define INCLUDED_GR_FEVAL_H
+#include <gr_core_api.h>
#include <gr_complex.h>
/*!
@@ -37,7 +38,7 @@
* Use calleval to invoke eval (this kludge is required to allow a
* python specific "shim" to be inserted.
*/
-class gr_feval_dd
+class GR_CORE_API gr_feval_dd
{
protected:
/*!
@@ -65,7 +66,7 @@ public:
* Use calleval to invoke eval (this kludge is required to allow a
* python specific "shim" to be inserted.
*/
-class gr_feval_cc
+class GR_CORE_API gr_feval_cc
{
protected:
/*!
@@ -93,7 +94,7 @@ public:
* Use calleval to invoke eval (this kludge is required to allow a
* python specific "shim" to be inserted.
*/
-class gr_feval_ll
+class GR_CORE_API gr_feval_ll
{
protected:
/*!
@@ -121,7 +122,7 @@ public:
* Use calleval to invoke eval (this kludge is required to allow a
* python specific "shim" to be inserted.
*/
-class gr_feval
+class GR_CORE_API gr_feval
{
protected:
/*!
@@ -139,9 +140,9 @@ public:
/*!
* \brief trivial examples / test cases showing C++ calling Python code
*/
-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);
+GR_CORE_API double gr_feval_dd_example(gr_feval_dd *f, double x);
+GR_CORE_API gr_complex gr_feval_cc_example(gr_feval_cc *f, gr_complex x);
+GR_CORE_API long gr_feval_ll_example(gr_feval_ll *f, long x);
+GR_CORE_API void gr_feval_example(gr_feval *f);
#endif /* INCLUDED_GR_FEVAL_H */
diff --git a/gnuradio-core/src/lib/general/gr_fft_vcc.h b/gnuradio-core/src/lib/general/gr_fft_vcc.h
index 2ab9241ec..a7c8e1162 100644
--- a/gnuradio-core/src/lib/general/gr_fft_vcc.h
+++ b/gnuradio-core/src/lib/general/gr_fft_vcc.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_FFT_VCC_H
#define INCLUDED_GR_FFT_VCC_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_fft_vcc;
typedef boost::shared_ptr<gr_fft_vcc> gr_fft_vcc_sptr;
-gr_fft_vcc_sptr
+GR_CORE_API gr_fft_vcc_sptr
gr_make_fft_vcc (int fft_size, bool forward, const std::vector<float> &window, bool shift=false);
/*!
@@ -37,10 +38,10 @@ gr_make_fft_vcc (int fft_size, bool forward, const std::vector<float> &window, b
*
* Abstract base class
*/
-class gr_fft_vcc : public gr_sync_block
+class GR_CORE_API gr_fft_vcc : public gr_sync_block
{
protected:
- friend gr_fft_vcc_sptr
+ friend GR_CORE_API gr_fft_vcc_sptr
gr_make_fft_vcc (int fft_size, bool forward, const std::vector<float> &window, bool shift);
unsigned int d_fft_size;
diff --git a/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h b/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h
index c026162ee..8535d133c 100644
--- a/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h
+++ b/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h
@@ -23,11 +23,12 @@
#ifndef INCLUDED_GR_FFT_VCC_FFTW_H
#define INCLUDED_GR_FFT_VCC_FFTW_H
+#include <gr_core_api.h>
#include <gr_fft_vcc.h>
class gri_fft_complex;
-gr_fft_vcc_sptr
+GR_CORE_API gr_fft_vcc_sptr
gr_make_fft_vcc_fftw (int fft_size, bool forward, const std::vector<float> &window, bool shift=false);
/*!
@@ -36,9 +37,9 @@ gr_make_fft_vcc_fftw (int fft_size, bool forward, const std::vector<float> &wind
*
* Concrete class that uses FFTW.
*/
-class gr_fft_vcc_fftw : public gr_fft_vcc
+class GR_CORE_API gr_fft_vcc_fftw : public gr_fft_vcc
{
- friend gr_fft_vcc_sptr
+ friend GR_CORE_API gr_fft_vcc_sptr
gr_make_fft_vcc_fftw (int fft_size, bool forward, const std::vector<float> &window, bool shift);
gri_fft_complex *d_fft;
diff --git a/gnuradio-core/src/lib/general/gr_fft_vfc.h b/gnuradio-core/src/lib/general/gr_fft_vfc.h
index 074574477..6cf6b9037 100644
--- a/gnuradio-core/src/lib/general/gr_fft_vfc.h
+++ b/gnuradio-core/src/lib/general/gr_fft_vfc.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_FFT_VFC_H
#define INCLUDED_GR_FFT_VFC_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gri_fft_complex;
@@ -30,7 +31,7 @@ class gri_fft_complex;
class gr_fft_vfc;
typedef boost::shared_ptr<gr_fft_vfc> gr_fft_vfc_sptr;
-gr_fft_vfc_sptr
+GR_CORE_API gr_fft_vfc_sptr
gr_make_fft_vfc (int fft_size, bool forward, const std::vector<float> &window);
/*!
@@ -38,9 +39,9 @@ gr_make_fft_vfc (int fft_size, bool forward, const std::vector<float> &window);
* \ingroup dft_blk
*/
-class gr_fft_vfc : public gr_sync_block
+class GR_CORE_API gr_fft_vfc : public gr_sync_block
{
- friend gr_fft_vfc_sptr
+ friend GR_CORE_API gr_fft_vfc_sptr
gr_make_fft_vfc (int fft_size, bool forward, const std::vector<float> &window);
unsigned int d_fft_size;
diff --git a/gnuradio-core/src/lib/general/gr_firdes.h b/gnuradio-core/src/lib/general/gr_firdes.h
index de775bd07..83fa7e119 100644
--- a/gnuradio-core/src/lib/general/gr_firdes.h
+++ b/gnuradio-core/src/lib/general/gr_firdes.h
@@ -23,6 +23,7 @@
#ifndef _GR_FIRDES_H_
#define _GR_FIRDES_H_
+#include <gr_core_api.h>
#include <vector>
#include <cmath>
#include <gr_complex.h>
@@ -32,7 +33,7 @@
* \ingroup filter_design
*/
-class gr_firdes {
+class GR_CORE_API gr_firdes {
public:
enum win_type {
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 e65072bf0..434e2e9d0 100644
--- a/gnuradio-core/src/lib/general/gr_float_to_char.h
+++ b/gnuradio-core/src/lib/general/gr_float_to_char.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_FLOAT_TO_CHAR_H
#define INCLUDED_GR_FLOAT_TO_CHAR_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_float_to_char;
typedef boost::shared_ptr<gr_float_to_char> gr_float_to_char_sptr;
-gr_float_to_char_sptr
+GR_CORE_API gr_float_to_char_sptr
gr_make_float_to_char ();
/*!
@@ -36,9 +37,9 @@ gr_make_float_to_char ();
* \ingroup converter_blk
*/
-class gr_float_to_char : public gr_sync_block
+class GR_CORE_API gr_float_to_char : public gr_sync_block
{
- friend gr_float_to_char_sptr gr_make_float_to_char ();
+ friend GR_CORE_API gr_float_to_char_sptr gr_make_float_to_char ();
gr_float_to_char ();
public:
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 f6cc24852..596b595f3 100644
--- a/gnuradio-core/src/lib/general/gr_float_to_complex.h
+++ b/gnuradio-core/src/lib/general/gr_float_to_complex.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_FLOAT_TO_COMPLEX_H
#define INCLUDED_GR_FLOAT_TO_COMPLEX_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_complex.h>
class gr_float_to_complex;
typedef boost::shared_ptr<gr_float_to_complex> gr_float_to_complex_sptr;
-gr_float_to_complex_sptr
+GR_CORE_API gr_float_to_complex_sptr
gr_make_float_to_complex (size_t vlen = 1);
/*!
@@ -37,9 +38,9 @@ gr_make_float_to_complex (size_t vlen = 1);
* \ingroup converter_blk
*/
-class gr_float_to_complex : public gr_sync_block
+class GR_CORE_API gr_float_to_complex : public gr_sync_block
{
- friend gr_float_to_complex_sptr gr_make_float_to_complex (size_t vlen);
+ friend GR_CORE_API gr_float_to_complex_sptr gr_make_float_to_complex (size_t vlen);
gr_float_to_complex (size_t vlen);
size_t d_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 e85343929..010d61141 100644
--- a/gnuradio-core/src/lib/general/gr_float_to_short.h
+++ b/gnuradio-core/src/lib/general/gr_float_to_short.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_FLOAT_TO_SHORT_H
#define INCLUDED_GR_FLOAT_TO_SHORT_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_float_to_short;
typedef boost::shared_ptr<gr_float_to_short> gr_float_to_short_sptr;
-gr_float_to_short_sptr
+GR_CORE_API gr_float_to_short_sptr
gr_make_float_to_short ();
/*!
@@ -36,9 +37,9 @@ gr_make_float_to_short ();
* \ingroup converter_blk
*/
-class gr_float_to_short : public gr_sync_block
+class GR_CORE_API gr_float_to_short : public gr_sync_block
{
- friend gr_float_to_short_sptr gr_make_float_to_short ();
+ friend GR_CORE_API gr_float_to_short_sptr gr_make_float_to_short ();
gr_float_to_short ();
public:
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 3bca9c555..fca8eb07b 100644
--- a/gnuradio-core/src/lib/general/gr_float_to_uchar.h
+++ b/gnuradio-core/src/lib/general/gr_float_to_uchar.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_FLOAT_TO_UCHAR_H
#define INCLUDED_GR_FLOAT_TO_UCHAR_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_float_to_uchar;
typedef boost::shared_ptr<gr_float_to_uchar> gr_float_to_uchar_sptr;
-gr_float_to_uchar_sptr
+GR_CORE_API gr_float_to_uchar_sptr
gr_make_float_to_uchar ();
/*!
@@ -36,9 +37,9 @@ gr_make_float_to_uchar ();
* \ingroup converter_blk
*/
-class gr_float_to_uchar : public gr_sync_block
+class GR_CORE_API gr_float_to_uchar : public gr_sync_block
{
- friend gr_float_to_uchar_sptr gr_make_float_to_uchar ();
+ friend GR_CORE_API gr_float_to_uchar_sptr gr_make_float_to_uchar ();
gr_float_to_uchar ();
public:
diff --git a/gnuradio-core/src/lib/general/gr_fmdet_cf.h b/gnuradio-core/src/lib/general/gr_fmdet_cf.h
index 792646bef..7bf3baa3f 100644
--- a/gnuradio-core/src/lib/general/gr_fmdet_cf.h
+++ b/gnuradio-core/src/lib/general/gr_fmdet_cf.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_FMDET_CF_H
#define INCLUDED_GR_FMDET_CF_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_fmdet_cf;
typedef boost::shared_ptr<gr_fmdet_cf> gr_fmdet_cf_sptr;
-gr_fmdet_cf_sptr gr_make_fmdet_cf (float samplerate, float freq_low, float freq_high, float scl);
+GR_CORE_API gr_fmdet_cf_sptr gr_make_fmdet_cf (float samplerate, float freq_low, float freq_high, float scl);
class gr_fir_ccf;
@@ -43,9 +44,9 @@ class gr_fir_ccf;
* normalization by the magnitude of the sample
*/
-class gr_fmdet_cf : public gr_sync_block
+class GR_CORE_API gr_fmdet_cf : public gr_sync_block
{
- friend gr_fmdet_cf_sptr gr_make_fmdet_cf (float samplerate, float freq_low,
+ friend GR_CORE_API 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;
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 3f2e8aa88..95ad6ced7 100644
--- a/gnuradio-core/src/lib/general/gr_framer_sink_1.h
+++ b/gnuradio-core/src/lib/general/gr_framer_sink_1.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_FRAMER_SINK_1_H
#define INCLUDED_GR_FRAMER_SINK_1_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_msg_queue.h>
class gr_framer_sink_1;
typedef boost::shared_ptr<gr_framer_sink_1> gr_framer_sink_1_sptr;
-gr_framer_sink_1_sptr
+GR_CORE_API gr_framer_sink_1_sptr
gr_make_framer_sink_1 (gr_msg_queue_sptr target_queue);
/*!
@@ -50,9 +51,9 @@ gr_make_framer_sink_1 (gr_msg_queue_sptr target_queue);
* the first bit of the packet. That is, this bit is the first
* one after the access code.
*/
-class gr_framer_sink_1 : public gr_sync_block
+class GR_CORE_API gr_framer_sink_1 : public gr_sync_block
{
- friend gr_framer_sink_1_sptr
+ friend GR_CORE_API gr_framer_sink_1_sptr
gr_make_framer_sink_1 (gr_msg_queue_sptr target_queue);
private:
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 385f447b7..932e7da36 100644
--- a/gnuradio-core/src/lib/general/gr_frequency_modulator_fc.h
+++ b/gnuradio-core/src/lib/general/gr_frequency_modulator_fc.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_FREQUENCY_MODULATOR_FC_H
#define INCLUDED_GR_FREQUENCY_MODULATOR_FC_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_frequency_modulator_fc;
typedef boost::shared_ptr<gr_frequency_modulator_fc> gr_frequency_modulator_fc_sptr;
-gr_frequency_modulator_fc_sptr gr_make_frequency_modulator_fc (double sensitivity);
+GR_CORE_API gr_frequency_modulator_fc_sptr gr_make_frequency_modulator_fc (double sensitivity);
/*!
* \brief Frequency modulator block
@@ -36,12 +37,12 @@ gr_frequency_modulator_fc_sptr gr_make_frequency_modulator_fc (double sensitivit
*
* float input; complex baseband output
*/
-class gr_frequency_modulator_fc : public gr_sync_block
+class GR_CORE_API gr_frequency_modulator_fc : public gr_sync_block
{
double d_sensitivity;
double d_phase;
- friend gr_frequency_modulator_fc_sptr
+ friend GR_CORE_API gr_frequency_modulator_fc_sptr
gr_make_frequency_modulator_fc (double sensitivity);
gr_frequency_modulator_fc (double sensitivity);
diff --git a/gnuradio-core/src/lib/general/gr_fxpt.h b/gnuradio-core/src/lib/general/gr_fxpt.h
index c98d31b27..5cf736dfb 100644
--- a/gnuradio-core/src/lib/general/gr_fxpt.h
+++ b/gnuradio-core/src/lib/general/gr_fxpt.h
@@ -22,10 +22,11 @@
#ifndef INCLUDED_GR_FXPT_H
#define INCLUDED_GR_FXPT_H
+#include <gr_core_api.h>
#include <gr_types.h>
/*!
- * \brief fixed point sine and cosine and friends.
+ * \brief fixed point sine and cosine and friend GR_CORE_APIs.
* \ingroup misc
*
* fixed pt radians
@@ -35,7 +36,7 @@
* 2**31-1 pi - epsilon
*
*/
-class gr_fxpt
+class GR_CORE_API gr_fxpt
{
static const int WORDBITS = 32;
static const int NBITS = 10;
diff --git a/gnuradio-core/src/lib/general/gr_fxpt_nco.h b/gnuradio-core/src/lib/general/gr_fxpt_nco.h
index ca0d54f02..5597efb4f 100644
--- a/gnuradio-core/src/lib/general/gr_fxpt_nco.h
+++ b/gnuradio-core/src/lib/general/gr_fxpt_nco.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_FXPT_NCO_H
#define INCLUDED_GR_FXPT_NCO_H
+#include <gr_core_api.h>
#include <gr_fxpt.h>
#include <gr_complex.h>
@@ -29,7 +30,7 @@
* \brief Numerically Controlled Oscillator (NCO)
* \ingroup misc
*/
-class gr_fxpt_nco {
+class GR_CORE_API gr_fxpt_nco {
gr_uint32 d_phase;
gr_int32 d_phase_inc;
diff --git a/gnuradio-core/src/lib/general/gr_fxpt_vco.h b/gnuradio-core/src/lib/general/gr_fxpt_vco.h
index 1ff968b79..a77a31311 100644
--- a/gnuradio-core/src/lib/general/gr_fxpt_vco.h
+++ b/gnuradio-core/src/lib/general/gr_fxpt_vco.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_FXPT_VCO_H
#define INCLUDED_GR_FXPT_VCO_H
+#include <gr_core_api.h>
#include <gr_fxpt.h>
#include <gr_complex.h>
@@ -29,7 +30,7 @@
* \brief Voltage Controlled Oscillator (VCO)
* \ingroup misc
*/
-class gr_fxpt_vco {
+class GR_CORE_API gr_fxpt_vco {
gr_int32 d_phase;
public:
diff --git a/gnuradio-core/src/lib/general/gr_glfsr_source_b.h b/gnuradio-core/src/lib/general/gr_glfsr_source_b.h
index cff8df11b..bd66912ed 100644
--- a/gnuradio-core/src/lib/general/gr_glfsr_source_b.h
+++ b/gnuradio-core/src/lib/general/gr_glfsr_source_b.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_GLFSR_SOURCE_B_H
#define INCLUDED_GR_GLFSR_SOURCE_B_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gri_glfsr;
@@ -30,16 +31,16 @@ class gri_glfsr;
class gr_glfsr_source_b;
typedef boost::shared_ptr<gr_glfsr_source_b> 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);
+GR_CORE_API 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
+class GR_CORE_API gr_glfsr_source_b : public gr_sync_block
{
private:
- friend gr_glfsr_source_b_sptr
+ friend GR_CORE_API gr_glfsr_source_b_sptr
gr_make_glfsr_source_b(int degree, bool repeat, int mask, int seed);
gri_glfsr *d_glfsr;
diff --git a/gnuradio-core/src/lib/general/gr_glfsr_source_f.h b/gnuradio-core/src/lib/general/gr_glfsr_source_f.h
index 007970806..2dd09c5ac 100644
--- a/gnuradio-core/src/lib/general/gr_glfsr_source_f.h
+++ b/gnuradio-core/src/lib/general/gr_glfsr_source_f.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_GLFSR_SOURCE_F_H
#define INCLUDED_GR_GLFSR_SOURCE_F_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gri_glfsr;
@@ -30,16 +31,16 @@ class gri_glfsr;
class gr_glfsr_source_f;
typedef boost::shared_ptr<gr_glfsr_source_f> 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);
+GR_CORE_API 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
+class GR_CORE_API gr_glfsr_source_f : public gr_sync_block
{
private:
- friend gr_glfsr_source_f_sptr
+ friend GR_CORE_API gr_glfsr_source_f_sptr
gr_make_glfsr_source_f(int degree, bool repeat, int mask, int seed);
gri_glfsr *d_glfsr;
diff --git a/gnuradio-core/src/lib/general/gr_head.h b/gnuradio-core/src/lib/general/gr_head.h
index f7eee1064..f66d43308 100644
--- a/gnuradio-core/src/lib/general/gr_head.h
+++ b/gnuradio-core/src/lib/general/gr_head.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_HEAD_H
#define INCLUDED_GR_HEAD_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <stddef.h> // size_t
@@ -36,9 +37,9 @@ typedef boost::shared_ptr<gr_head> gr_head_sptr;
* Useful for building test cases
*/
-class gr_head : public gr_sync_block
+class GR_CORE_API gr_head : public gr_sync_block
{
- friend gr_head_sptr gr_make_head (size_t sizeof_stream_item, unsigned long long nitems);
+ friend GR_CORE_API gr_head_sptr gr_make_head (size_t sizeof_stream_item, unsigned long long nitems);
gr_head (size_t sizeof_stream_item, unsigned long long nitems);
unsigned long long d_nitems;
@@ -52,7 +53,7 @@ class gr_head : public gr_sync_block
void reset() { d_ncopied_items = 0; }
};
-gr_head_sptr
+GR_CORE_API gr_head_sptr
gr_make_head (size_t sizeof_stream_item, unsigned long long nitems);
diff --git a/gnuradio-core/src/lib/general/gr_int_to_float.h b/gnuradio-core/src/lib/general/gr_int_to_float.h
index e63ed3ba3..9af381ba9 100644
--- a/gnuradio-core/src/lib/general/gr_int_to_float.h
+++ b/gnuradio-core/src/lib/general/gr_int_to_float.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_INT_TO_FLOAT_H
#define INCLUDED_GR_INT_TO_FLOAT_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_int_to_float;
typedef boost::shared_ptr<gr_int_to_float> gr_int_to_float_sptr;
-gr_int_to_float_sptr
+GR_CORE_API gr_int_to_float_sptr
gr_make_int_to_float ();
/*!
@@ -36,9 +37,9 @@ gr_make_int_to_float ();
* \ingroup converter_blk
*/
-class gr_int_to_float : public gr_sync_block
+class GR_CORE_API gr_int_to_float : public gr_sync_block
{
- friend gr_int_to_float_sptr gr_make_int_to_float ();
+ friend GR_CORE_API gr_int_to_float_sptr gr_make_int_to_float ();
gr_int_to_float ();
public:
diff --git a/gnuradio-core/src/lib/general/gr_interleave.h b/gnuradio-core/src/lib/general/gr_interleave.h
index faffdd757..ef7bce07a 100644
--- a/gnuradio-core/src/lib/general/gr_interleave.h
+++ b/gnuradio-core/src/lib/general/gr_interleave.h
@@ -23,20 +23,21 @@
#ifndef INCLUDED_GR_INTERLEAVE_H
#define INCLUDED_GR_INTERLEAVE_H
+#include <gr_core_api.h>
#include <gr_sync_interpolator.h>
class gr_interleave;
typedef boost::shared_ptr<gr_interleave> gr_interleave_sptr;
-gr_interleave_sptr gr_make_interleave (size_t itemsize);
+GR_CORE_API gr_interleave_sptr gr_make_interleave (size_t itemsize);
/*!
* \brief interleave N inputs to a single output
* \ingroup slicedice_blk
*/
-class gr_interleave : public gr_sync_interpolator
+class GR_CORE_API gr_interleave : public gr_sync_interpolator
{
- friend gr_interleave_sptr gr_make_interleave (size_t itemsize);
+ friend GR_CORE_API gr_interleave_sptr gr_make_interleave (size_t itemsize);
size_t d_itemsize;
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 c79a9370f..40f1636bd 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
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_INTERLEAVED_SHORT_TO_COMPLEX_H
#define INCLUDED_GR_INTERLEAVED_SHORT_TO_COMPLEX_H
+#include <gr_core_api.h>
#include <gr_sync_decimator.h>
class gr_interleaved_short_to_complex;
typedef boost::shared_ptr<gr_interleaved_short_to_complex>
gr_interleaved_short_to_complex_sptr;
-gr_interleaved_short_to_complex_sptr
+GR_CORE_API gr_interleaved_short_to_complex_sptr
gr_make_interleaved_short_to_complex ();
/*!
@@ -37,9 +38,9 @@ gr_make_interleaved_short_to_complex ();
* \ingroup converter_blk
*/
-class gr_interleaved_short_to_complex : public gr_sync_decimator
+class GR_CORE_API gr_interleaved_short_to_complex : public gr_sync_decimator
{
- friend gr_interleaved_short_to_complex_sptr gr_make_interleaved_short_to_complex ();
+ friend GR_CORE_API gr_interleaved_short_to_complex_sptr gr_make_interleaved_short_to_complex ();
gr_interleaved_short_to_complex ();
public:
diff --git a/gnuradio-core/src/lib/general/gr_iqcomp_cc.h b/gnuradio-core/src/lib/general/gr_iqcomp_cc.h
index f4c6cf8ea..c01e2a6ba 100644
--- a/gnuradio-core/src/lib/general/gr_iqcomp_cc.h
+++ b/gnuradio-core/src/lib/general/gr_iqcomp_cc.h
@@ -24,20 +24,21 @@
#ifndef INCLUDED_GR_IQCOMP_CC_H
#define INCLUDED_GR_IQCOMP_CC_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_iqcomp_cc;
typedef boost::shared_ptr<gr_iqcomp_cc> gr_iqcomp_cc_sptr;
-gr_iqcomp_cc_sptr gr_make_iqcomp_cc (float mu);
+GR_CORE_API gr_iqcomp_cc_sptr gr_make_iqcomp_cc (float mu);
/*!
* \brief
* \ingroup misc_blk
*/
-class gr_iqcomp_cc : public gr_sync_block
+class GR_CORE_API gr_iqcomp_cc : public gr_sync_block
{
- friend gr_iqcomp_cc_sptr gr_make_iqcomp_cc (float mu);
+ friend GR_CORE_API gr_iqcomp_cc_sptr gr_make_iqcomp_cc (float mu);
float d_mu, d_wi, d_wq;
gr_iqcomp_cc (float mu);
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 ba573618e..c32ed2a26 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
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_KEEP_ONE_IN_N_H
#define INCLUDED_GR_KEEP_ONE_IN_N_H
+#include <gr_core_api.h>
#include <gr_sync_decimator.h>
class gr_keep_one_in_n;
typedef boost::shared_ptr<gr_keep_one_in_n> gr_keep_one_in_n_sptr;
-gr_keep_one_in_n_sptr
+GR_CORE_API gr_keep_one_in_n_sptr
gr_make_keep_one_in_n (size_t item_size, int n);
@@ -36,9 +37,9 @@ gr_make_keep_one_in_n (size_t item_size, int n);
* \brief decimate a stream, keeping one item out of every n.
* \ingroup slicedice_blk
*/
-class gr_keep_one_in_n : public gr_block
+class GR_CORE_API gr_keep_one_in_n : public gr_block
{
- friend gr_keep_one_in_n_sptr
+ friend GR_CORE_API gr_keep_one_in_n_sptr
gr_make_keep_one_in_n (size_t item_size, int n);
int d_n;
diff --git a/gnuradio-core/src/lib/general/gr_kludge_copy.h b/gnuradio-core/src/lib/general/gr_kludge_copy.h
index 90fd047df..5c1e461a8 100644
--- a/gnuradio-core/src/lib/general/gr_kludge_copy.h
+++ b/gnuradio-core/src/lib/general/gr_kludge_copy.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_KLUDGE_COPY_H
#define INCLUDED_GR_KLUDGE_COPY_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_kludge_copy;
typedef boost::shared_ptr<gr_kludge_copy> gr_kludge_copy_sptr;
-gr_kludge_copy_sptr gr_make_kludge_copy(size_t itemsize);
+GR_CORE_API gr_kludge_copy_sptr gr_make_kludge_copy(size_t itemsize);
/*!
* \brief output[i] = input[i]
@@ -36,11 +37,11 @@ gr_kludge_copy_sptr gr_make_kludge_copy(size_t itemsize);
*
* This is a short term kludge to work around a problem with the hierarchical block impl.
*/
-class gr_kludge_copy : public gr_sync_block
+class GR_CORE_API gr_kludge_copy : public gr_sync_block
{
size_t d_itemsize;
- friend gr_kludge_copy_sptr gr_make_kludge_copy(size_t itemsize);
+ friend GR_CORE_API gr_kludge_copy_sptr gr_make_kludge_copy(size_t itemsize);
gr_kludge_copy(size_t itemsize);
public:
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 f8497e4cb..aa7ad7b1f 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
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_LFSR_32K_SOURCE_S_H
#define INCLUDED_GR_LFSR_32K_SOURCE_S_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gri_lfsr_32k.h>
class gr_lfsr_32k_source_s;
typedef boost::shared_ptr<gr_lfsr_32k_source_s> gr_lfsr_32k_source_s_sptr;
-gr_lfsr_32k_source_s_sptr gr_make_lfsr_32k_source_s ();
+GR_CORE_API 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)
@@ -38,9 +39,9 @@ gr_lfsr_32k_source_s_sptr gr_make_lfsr_32k_source_s ();
* This source is typically used along with gr_check_lfsr_32k_s to test
* the USRP using its digital loopback mode.
*/
-class gr_lfsr_32k_source_s : public gr_sync_block
+class GR_CORE_API gr_lfsr_32k_source_s : public gr_sync_block
{
- friend gr_lfsr_32k_source_s_sptr gr_make_lfsr_32k_source_s ();
+ friend GR_CORE_API gr_lfsr_32k_source_s_sptr gr_make_lfsr_32k_source_s ();
static const int BUFSIZE = 2048 - 1; // ensure pattern isn't packet aligned
diff --git a/gnuradio-core/src/lib/general/gr_lms_dfe_cc.h b/gnuradio-core/src/lib/general/gr_lms_dfe_cc.h
new file mode 100644
index 000000000..335b1883c
--- /dev/null
+++ b/gnuradio-core/src/lib/general/gr_lms_dfe_cc.h
@@ -0,0 +1,65 @@
+/* -*- 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_LMS_DFE_CC_H
+#define INCLUDED_GR_LMS_DFE_CC_H
+
+#include <gr_core_api.h>
+#include <gr_sync_block.h>
+
+class gr_lms_dfe_cc;
+typedef boost::shared_ptr<gr_lms_dfe_cc> gr_lms_dfe_cc_sptr;
+
+GR_CORE_API gr_lms_dfe_cc_sptr gr_make_lms_dfe_cc (float lambda_ff, float lambda_fb,
+ unsigned int num_fftaps, unsigned int num_fbtaps);
+
+/*!
+ * \brief Least-Mean-Square Decision Feedback Equalizer (complex in/out)
+ * \ingroup eq_blk
+ */
+class GR_CORE_API gr_lms_dfe_cc : public gr_sync_block
+{
+ friend GR_CORE_API gr_lms_dfe_cc_sptr gr_make_lms_dfe_cc (float lambda_ff, float lambda_fb,
+ unsigned int num_fftaps, unsigned int num_fbtaps);
+
+ float d_lambda_ff;
+ float d_lambda_fb;
+ std::vector<gr_complex> d_ff_delayline;
+ std::vector<gr_complex> d_fb_delayline;
+ std::vector<gr_complex> d_ff_taps;
+ std::vector<gr_complex> d_fb_taps;
+ unsigned int d_ff_index;
+ unsigned int d_fb_index;
+
+ gr_lms_dfe_cc (float lambda_ff, float lambda_fb,
+ unsigned int num_fftaps, unsigned int num_fbtaps);
+ gr_complex slicer_0deg(gr_complex baud);
+ gr_complex slicer_45deg(gr_complex baud);
+
+ 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_lms_dfe_ff.h b/gnuradio-core/src/lib/general/gr_lms_dfe_ff.h
new file mode 100644
index 000000000..ed2aa9844
--- /dev/null
+++ b/gnuradio-core/src/lib/general/gr_lms_dfe_ff.h
@@ -0,0 +1,63 @@
+/* -*- 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_LMS_DFE_FF_H
+#define INCLUDED_GR_LMS_DFE_FF_H
+
+#include <gr_core_api.h>
+#include <gr_sync_block.h>
+
+class gr_lms_dfe_ff;
+typedef boost::shared_ptr<gr_lms_dfe_ff> gr_lms_dfe_ff_sptr;
+
+GR_CORE_API gr_lms_dfe_ff_sptr gr_make_lms_dfe_ff (float lambda_ff, float lambda_fb,
+ unsigned int num_fftaps, unsigned int num_fbtaps);
+
+/*!
+ * \brief Least-Mean-Square Decision Feedback Equalizer (float in/out)
+ * \ingroup eq_blk
+ */
+class GR_CORE_API gr_lms_dfe_ff : public gr_sync_block
+{
+ friend GR_CORE_API gr_lms_dfe_ff_sptr gr_make_lms_dfe_ff (float lambda_ff, float lambda_fb,
+ unsigned int num_fftaps, unsigned int num_fbtaps);
+
+ float d_lambda_ff;
+ float d_lambda_fb;
+ std::vector<float> d_ff_delayline;
+ std::vector<float> d_fb_delayline;
+ std::vector<float> d_ff_taps;
+ std::vector<float> d_fb_taps;
+ unsigned int d_ff_index;
+ unsigned int d_fb_index;
+
+ gr_lms_dfe_ff (float lambda_ff, float lambda_fb,
+ unsigned int num_fftaps, unsigned int num_fbtaps);
+
+ 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_log2_const.h b/gnuradio-core/src/lib/general/gr_log2_const.h
index 4ea420920..8e4a0860b 100644
--- a/gnuradio-core/src/lib/general/gr_log2_const.h
+++ b/gnuradio-core/src/lib/general/gr_log2_const.h
@@ -27,6 +27,7 @@
#ifndef INCLUDED_GR_LOG2_CONST_H
#define INCLUDED_GR_LOG2_CONST_H
+#include <gr_core_api.h>
#include <assert.h>
template<unsigned int k> static inline int gr_log2_const() { assert(0); return 0; }
diff --git a/gnuradio-core/src/lib/general/gr_map_bb.h b/gnuradio-core/src/lib/general/gr_map_bb.h
index 4986ab181..0820c6a16 100644
--- a/gnuradio-core/src/lib/general/gr_map_bb.h
+++ b/gnuradio-core/src/lib/general/gr_map_bb.h
@@ -22,21 +22,22 @@
#ifndef INCLUDED_GR_MAP_BB_H
#define INCLUDED_GR_MAP_BB_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_map_bb;
typedef boost::shared_ptr<gr_map_bb> gr_map_bb_sptr;
-gr_map_bb_sptr gr_make_map_bb(const std::vector<int> &map);
+GR_CORE_API gr_map_bb_sptr gr_make_map_bb(const std::vector<int> &map);
/*!
* \brief output[i] = map[input[i]]
* \ingroup coding_blk
*/
-class gr_map_bb : public gr_sync_block
+class GR_CORE_API gr_map_bb : public gr_sync_block
{
- friend gr_map_bb_sptr gr_make_map_bb(const std::vector<int> &map);
+ friend GR_CORE_API gr_map_bb_sptr gr_make_map_bb(const std::vector<int> &map);
unsigned char d_map[0x100];
diff --git a/gnuradio-core/src/lib/general/gr_math.h b/gnuradio-core/src/lib/general/gr_math.h
index f5935c1da..9c61942cd 100644
--- a/gnuradio-core/src/lib/general/gr_math.h
+++ b/gnuradio-core/src/lib/general/gr_math.h
@@ -27,6 +27,7 @@
#ifndef _GR_MATH_H_
#define _GR_MATH_H_
+#include <gr_core_api.h>
#include <gr_complex.h>
static inline bool
@@ -51,7 +52,7 @@ gr_is_power_of_2(long x)
* to zero. This routine calculates the arc tangent with an average
* error of +/- 0.045 degrees.
*/
-float gr_fast_atan2f(float y, float x);
+GR_CORE_API float gr_fast_atan2f(float y, float x);
static inline float gr_fast_atan2f(gr_complex z)
{
diff --git a/gnuradio-core/src/lib/general/gr_misc.h b/gnuradio-core/src/lib/general/gr_misc.h
index 55cc7eda6..78f7e18ac 100644
--- a/gnuradio-core/src/lib/general/gr_misc.h
+++ b/gnuradio-core/src/lib/general/gr_misc.h
@@ -23,16 +23,17 @@
#ifndef INCLUDED_GR_MISC_H
#define INCLUDED_GR_MISC_H
+#include <gr_core_api.h>
#include <gr_types.h>
unsigned int
gr_rounduppow2(unsigned int n);
// FIXME should be template
-void gr_zero_vector(std::vector<float> &v);
-void gr_zero_vector(std::vector<double> &v);
-void gr_zero_vector(std::vector<int> &v);
-void gr_zero_vector(std::vector<gr_complex> &v);
+GR_CORE_API void gr_zero_vector(std::vector<float> &v);
+GR_CORE_API void gr_zero_vector(std::vector<double> &v);
+GR_CORE_API void gr_zero_vector(std::vector<int> &v);
+GR_CORE_API void gr_zero_vector(std::vector<gr_complex> &v);
#endif /* INCLUDED_GR_MISC_H */
diff --git a/gnuradio-core/src/lib/general/gr_nlog10_ff.h b/gnuradio-core/src/lib/general/gr_nlog10_ff.h
index 1cb50f3ca..cea56f87e 100644
--- a/gnuradio-core/src/lib/general/gr_nlog10_ff.h
+++ b/gnuradio-core/src/lib/general/gr_nlog10_ff.h
@@ -22,20 +22,21 @@
#ifndef INCLUDED_GR_NLOG10_FF_H
#define INCLUDED_GR_NLOG10_FF_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_nlog10_ff;
typedef boost::shared_ptr<gr_nlog10_ff> gr_nlog10_ff_sptr;
-gr_nlog10_ff_sptr gr_make_nlog10_ff (float n=1.0, unsigned vlen=1, float k=0);
+GR_CORE_API 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 math_blk
*/
-class gr_nlog10_ff : public gr_sync_block
+class GR_CORE_API gr_nlog10_ff : public gr_sync_block
{
- friend gr_nlog10_ff_sptr gr_make_nlog10_ff (float n, unsigned vlen, float k);
+ friend GR_CORE_API gr_nlog10_ff_sptr gr_make_nlog10_ff (float n, unsigned vlen, float k);
unsigned int d_vlen;
float d_n;
diff --git a/gnuradio-core/src/lib/general/gr_nop.h b/gnuradio-core/src/lib/general/gr_nop.h
index 354c2f9fc..b8398befc 100644
--- a/gnuradio-core/src/lib/general/gr_nop.h
+++ b/gnuradio-core/src/lib/general/gr_nop.h
@@ -23,22 +23,23 @@
#ifndef INCLUDED_GR_NOP_H
#define INCLUDED_GR_NOP_H
+#include <gr_core_api.h>
#include <gr_block.h>
#include <stddef.h> // size_t
class gr_nop;
typedef boost::shared_ptr<gr_nop> gr_nop_sptr;
-gr_nop_sptr
+GR_CORE_API gr_nop_sptr
gr_make_nop (size_t sizeof_stream_item);
/*!
* \brief Does nothing. Used for testing only.
* \ingroup misc_blk
*/
-class gr_nop : public gr_block
+class GR_CORE_API gr_nop : public gr_block
{
- friend gr_nop_sptr gr_make_nop (size_t sizeof_stream_item);
+ friend GR_CORE_API gr_nop_sptr gr_make_nop (size_t sizeof_stream_item);
gr_nop (size_t sizeof_stream_item);
protected:
diff --git a/gnuradio-core/src/lib/general/gr_null_sink.h b/gnuradio-core/src/lib/general/gr_null_sink.h
index 6d00382a5..c6c4f36fb 100644
--- a/gnuradio-core/src/lib/general/gr_null_sink.h
+++ b/gnuradio-core/src/lib/general/gr_null_sink.h
@@ -23,23 +23,23 @@
#ifndef INCLUDED_GR_NULL_SINK_H
#define INCLUDED_GR_NULL_SINK_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <stddef.h> // size_t
class gr_null_sink;
typedef boost::shared_ptr<gr_null_sink> gr_null_sink_sptr;
-gr_null_sink_sptr
+GR_CORE_API gr_null_sink_sptr
gr_make_null_sink (size_t sizeof_stream_item);
-
/*!
* \brief Bit bucket
* \ingroup sink_blk
*/
-class gr_null_sink : public gr_sync_block
+class GR_CORE_API gr_null_sink : public gr_sync_block
{
- friend gr_null_sink_sptr gr_make_null_sink (size_t sizeof_stream_item);
+ friend GR_CORE_API gr_null_sink_sptr gr_make_null_sink (size_t sizeof_stream_item);
gr_null_sink (size_t sizeof_stream_item);
public:
diff --git a/gnuradio-core/src/lib/general/gr_null_source.h b/gnuradio-core/src/lib/general/gr_null_source.h
index b1a46a195..33687fbaa 100644
--- a/gnuradio-core/src/lib/general/gr_null_source.h
+++ b/gnuradio-core/src/lib/general/gr_null_source.h
@@ -23,21 +23,22 @@
#ifndef INCLUDED_GR_NULL_SOURCE_H
#define INCLUDED_GR_NULL_SOURCE_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_null_source;
typedef boost::shared_ptr<gr_null_source> gr_null_source_sptr;
-gr_null_source_sptr
+GR_CORE_API gr_null_source_sptr
gr_make_null_source (size_t sizeof_stream_item);
/*!
* \brief A source of zeros.
* \ingroup source_blk
*/
-class gr_null_source : public gr_sync_block
+class GR_CORE_API gr_null_source : public gr_sync_block
{
- friend gr_null_source_sptr gr_make_null_source (size_t sizeof_stream_item);
+ friend GR_CORE_API gr_null_source_sptr gr_make_null_source (size_t sizeof_stream_item);
gr_null_source (size_t sizeof_stream_item);
diff --git a/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.h b/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.h
index 12ae6a8f6..6d532d50f 100644
--- a/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.h
+++ b/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.h
@@ -24,13 +24,14 @@
#define INCLUDED_GR_OFDM_BPSK_DEMAPPER_H
+#include <gr_core_api.h>
#include <gr_block.h>
#include <vector>
class gr_ofdm_bpsk_demapper;
typedef boost::shared_ptr<gr_ofdm_bpsk_demapper> gr_ofdm_bpsk_demapper_sptr;
-gr_ofdm_bpsk_demapper_sptr
+GR_CORE_API gr_ofdm_bpsk_demapper_sptr
gr_make_ofdm_bpsk_demapper (unsigned int occupied_carriers);
@@ -39,9 +40,9 @@ gr_make_ofdm_bpsk_demapper (unsigned int occupied_carriers);
* and demodulate to a stream of bits. Simple BPSK version.
* \ingroup ofdm_blk
*/
-class gr_ofdm_bpsk_demapper : public gr_block
+class GR_CORE_API gr_ofdm_bpsk_demapper : public gr_block
{
- friend gr_ofdm_bpsk_demapper_sptr
+ friend GR_CORE_API gr_ofdm_bpsk_demapper_sptr
gr_make_ofdm_bpsk_demapper (unsigned int occupied_carriers);
protected:
diff --git a/gnuradio-core/src/lib/general/gr_ofdm_frame_sink2.h b/gnuradio-core/src/lib/general/gr_ofdm_frame_sink2.h
index de8c6a37e..9595303b1 100644
--- a/gnuradio-core/src/lib/general/gr_ofdm_frame_sink2.h
+++ b/gnuradio-core/src/lib/general/gr_ofdm_frame_sink2.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_OFDM_FRAME_SINK2_H
#define INCLUDED_GR_OFDM_FRAME_SINK2_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_msg_queue.h>
#include <gr_constellation.h>
@@ -30,7 +31,7 @@
class gr_ofdm_frame_sink2;
typedef boost::shared_ptr<gr_ofdm_frame_sink2> gr_ofdm_frame_sink2_sptr;
-gr_ofdm_frame_sink2_sptr
+GR_CORE_API gr_ofdm_frame_sink2_sptr
gr_make_ofdm_frame_sink2 (gr_constellation_sptr constell,
gr_msg_queue_sptr target_queue, unsigned int occupied_tones,
float phase_gain=0.25, float freq_gain=0.25*0.25/4.0);
@@ -45,9 +46,9 @@ gr_make_ofdm_frame_sink2 (gr_constellation_sptr constell,
* 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_sink2 : public gr_sync_block
+class GR_CORE_API gr_ofdm_frame_sink2 : public gr_sync_block
{
- friend gr_ofdm_frame_sink2_sptr
+ friend GR_CORE_API gr_ofdm_frame_sink2_sptr
gr_make_ofdm_frame_sink2 (gr_constellation_sptr constell,
gr_msg_queue_sptr target_queue, unsigned int occupied_tones,
float phase_gain, float freq_gain);
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 ec163911a..abb23e002 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
@@ -22,12 +22,13 @@
#ifndef INCLUDED_GR_PA_2X2_PHASE_COMBINER_H
#define INCLUDED_GR_PA_2X2_PHASE_COMBINER_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_pa_2x2_phase_combiner;
typedef boost::shared_ptr<gr_pa_2x2_phase_combiner> gr_pa_2x2_phase_combiner_sptr;
-gr_pa_2x2_phase_combiner_sptr gr_make_pa_2x2_phase_combiner ();
+GR_CORE_API gr_pa_2x2_phase_combiner_sptr gr_make_pa_2x2_phase_combiner ();
/*!
* \brief pa_2x2 phase combiner
@@ -40,7 +41,7 @@ gr_pa_2x2_phase_combiner_sptr gr_make_pa_2x2_phase_combiner ();
*
* dx and dy are lambda/2.
*/
-class gr_pa_2x2_phase_combiner : public gr_sync_block
+class GR_CORE_API gr_pa_2x2_phase_combiner : public gr_sync_block
{
static const int NM = 4;
@@ -48,7 +49,7 @@ class gr_pa_2x2_phase_combiner : public gr_sync_block
gr_complex d_phase[NM];
gr_pa_2x2_phase_combiner ();
- friend gr_pa_2x2_phase_combiner_sptr gr_make_pa_2x2_phase_combiner();
+ friend GR_CORE_API gr_pa_2x2_phase_combiner_sptr gr_make_pa_2x2_phase_combiner();
public:
float theta() const { return d_theta; }
diff --git a/gnuradio-core/src/lib/general/gr_packet_sink.h b/gnuradio-core/src/lib/general/gr_packet_sink.h
index 73c5d6c52..89a95f3e3 100644
--- a/gnuradio-core/src/lib/general/gr_packet_sink.h
+++ b/gnuradio-core/src/lib/general/gr_packet_sink.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_PACKET_SINK_H
#define INCLUDED_GR_PACKET_SINK_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_msg_queue.h>
class gr_packet_sink;
typedef boost::shared_ptr<gr_packet_sink> gr_packet_sink_sptr;
-gr_packet_sink_sptr
+GR_CORE_API gr_packet_sink_sptr
gr_make_packet_sink (const std::vector<unsigned char>& sync_vector,
gr_msg_queue_sptr target_queue,
int threshold = -1 // -1 -> use default
@@ -38,9 +39,9 @@ gr_make_packet_sink (const std::vector<unsigned char>& sync_vector,
* \brief process received bits looking for packet sync, header, and process bits into packet
* \ingroup sink_blk
*/
-class gr_packet_sink : public gr_sync_block
+class GR_CORE_API gr_packet_sink : public gr_sync_block
{
- friend gr_packet_sink_sptr
+ friend GR_CORE_API gr_packet_sink_sptr
gr_make_packet_sink (const std::vector<unsigned char>& sync_vector,
gr_msg_queue_sptr target_queue,
int threshold);
diff --git a/gnuradio-core/src/lib/general/gr_peak_detector2_fb.h b/gnuradio-core/src/lib/general/gr_peak_detector2_fb.h
index 58a006246..5bb97fc5d 100644
--- a/gnuradio-core/src/lib/general/gr_peak_detector2_fb.h
+++ b/gnuradio-core/src/lib/general/gr_peak_detector2_fb.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_gr_peak_detector2_FB_H
#define INCLUDED_gr_peak_detector2_FB_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_peak_detector2_fb;
typedef boost::shared_ptr<gr_peak_detector2_fb> gr_peak_detector2_fb_sptr;
-gr_peak_detector2_fb_sptr gr_make_peak_detector2_fb (float threshold_factor_rise = 7,
+GR_CORE_API gr_peak_detector2_fb_sptr gr_make_peak_detector2_fb (float threshold_factor_rise = 7,
int look_ahead = 1000,
float alpha = 0.001);
@@ -49,9 +50,9 @@ gr_peak_detector2_fb_sptr gr_make_peak_detector2_fb (float threshold_factor_rise
* \param alpha The gain value of a single-pole moving average filter
*/
-class gr_peak_detector2_fb : public gr_sync_block
+class GR_CORE_API gr_peak_detector2_fb : public gr_sync_block
{
- friend gr_peak_detector2_fb_sptr
+ friend GR_CORE_API 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);
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 50157534b..dd6e300a8 100644
--- a/gnuradio-core/src/lib/general/gr_phase_modulator_fc.h
+++ b/gnuradio-core/src/lib/general/gr_phase_modulator_fc.h
@@ -23,24 +23,25 @@
#ifndef INCLUDED_GR_PHASE_MODULATOR_FC_H
#define INCLUDED_GR_PHASE_MODULATOR_FC_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_phase_modulator_fc;
typedef boost::shared_ptr<gr_phase_modulator_fc> gr_phase_modulator_fc_sptr;
-gr_phase_modulator_fc_sptr gr_make_phase_modulator_fc (double sensitivity);
+GR_CORE_API gr_phase_modulator_fc_sptr gr_make_phase_modulator_fc (double sensitivity);
/*!
* \brief Phase modulator block
* \ingroup modulation_blk
* output=complex(cos(in*sensitivity),sin(in*sensitivity))
*/
-class gr_phase_modulator_fc : public gr_sync_block
+class GR_CORE_API gr_phase_modulator_fc : public gr_sync_block
{
double d_sensitivity;
double d_phase;
- friend gr_phase_modulator_fc_sptr
+ friend GR_CORE_API gr_phase_modulator_fc_sptr
gr_make_phase_modulator_fc (double sensitivity);
gr_phase_modulator_fc (double sensitivity);
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 bcdf543a4..db74bb101 100644
--- a/gnuradio-core/src/lib/general/gr_pll_carriertracking_cc.h
+++ b/gnuradio-core/src/lib/general/gr_pll_carriertracking_cc.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_PLL_CARRIERTRACKING_CC_H
#define INCLUDED_GR_PLL_CARRIERTRACKING_CC_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gri_control_loop.h>
class gr_pll_carriertracking_cc;
typedef boost::shared_ptr<gr_pll_carriertracking_cc> gr_pll_carriertracking_cc_sptr;
-gr_pll_carriertracking_cc_sptr gr_make_pll_carriertracking_cc (float loop_bw,
+GR_CORE_API gr_pll_carriertracking_cc_sptr gr_make_pll_carriertracking_cc (float loop_bw,
float max_freq,
float min_freq);
/*!
@@ -48,9 +49,9 @@ gr_pll_carriertracking_cc_sptr gr_make_pll_carriertracking_cc (float loop_bw,
* \sa gr_pll_freqdet_cf, gr_pll_carriertracking_cc
*/
-class gr_pll_carriertracking_cc : public gr_sync_block, public gri_control_loop
+class GR_CORE_API gr_pll_carriertracking_cc : public gr_sync_block, public gri_control_loop
{
- friend gr_pll_carriertracking_cc_sptr gr_make_pll_carriertracking_cc (float loop_bw,
+ friend GR_CORE_API gr_pll_carriertracking_cc_sptr gr_make_pll_carriertracking_cc (float loop_bw,
float max_freq,
float min_freq);
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 0da9fc5c7..336f3fd31 100644
--- a/gnuradio-core/src/lib/general/gr_pll_freqdet_cf.h
+++ b/gnuradio-core/src/lib/general/gr_pll_freqdet_cf.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_PLL_FREQDET_CF_H
#define INCLUDED_GR_PLL_FREQDET_CF_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gri_control_loop.h>
class gr_pll_freqdet_cf;
typedef boost::shared_ptr<gr_pll_freqdet_cf> gr_pll_freqdet_cf_sptr;
-gr_pll_freqdet_cf_sptr gr_make_pll_freqdet_cf (float loop_bw,
+GR_CORE_API gr_pll_freqdet_cf_sptr gr_make_pll_freqdet_cf (float loop_bw,
float max_freq,
float min_freq);
/*!
@@ -47,9 +48,9 @@ gr_pll_freqdet_cf_sptr gr_make_pll_freqdet_cf (float loop_bw,
* \sa gr_pll_refout_cc, gr_pll_carriertracking_cc
*/
-class gr_pll_freqdet_cf : public gr_sync_block, public gri_control_loop
+class GR_CORE_API gr_pll_freqdet_cf : public gr_sync_block, public gri_control_loop
{
- friend gr_pll_freqdet_cf_sptr gr_make_pll_freqdet_cf (float loop_bw,
+ friend GR_CORE_API gr_pll_freqdet_cf_sptr gr_make_pll_freqdet_cf (float loop_bw,
float max_freq,
float min_freq);
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 d3e45882b..dcbeb1efa 100644
--- a/gnuradio-core/src/lib/general/gr_pll_refout_cc.h
+++ b/gnuradio-core/src/lib/general/gr_pll_refout_cc.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_PLL_REFOUT_CC_H
#define INCLUDED_GR_PLL_REFOUT_CC_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gri_control_loop.h>
class gr_pll_refout_cc;
typedef boost::shared_ptr<gr_pll_refout_cc> gr_pll_refout_cc_sptr;
-gr_pll_refout_cc_sptr gr_make_pll_refout_cc (float loop_bw,
+GR_CORE_API gr_pll_refout_cc_sptr gr_make_pll_refout_cc (float loop_bw,
float max_freq, float min_freq);
/*!
* \brief Implements a PLL which locks to the input frequency and outputs a carrier
@@ -46,9 +47,9 @@ gr_pll_refout_cc_sptr gr_make_pll_refout_cc (float loop_bw,
* around pi/200 -- 2pi/100.
* \sa gr_pll_freqdet_cf, gr_pll_carriertracking_cc
*/
-class gr_pll_refout_cc : public gr_sync_block, public gri_control_loop
+class GR_CORE_API gr_pll_refout_cc : public gr_sync_block, public gri_control_loop
{
- friend gr_pll_refout_cc_sptr gr_make_pll_refout_cc (float loop_bw,
+ friend GR_CORE_API gr_pll_refout_cc_sptr gr_make_pll_refout_cc (float loop_bw,
float max_freq, float min_freq);
gr_pll_refout_cc (float loop_bw, float max_freq, float min_freq);
diff --git a/gnuradio-core/src/lib/general/gr_pn_correlator_cc.h b/gnuradio-core/src/lib/general/gr_pn_correlator_cc.h
index 73bb7aa8c..75e2d1c7b 100644
--- a/gnuradio-core/src/lib/general/gr_pn_correlator_cc.h
+++ b/gnuradio-core/src/lib/general/gr_pn_correlator_cc.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_PN_CORRELATOR_CC_H
#define INCLUDED_GR_PN_CORRELATOR_CC_H
+#include <gr_core_api.h>
#include <gr_sync_decimator.h>
#include <gri_glfsr.h>
class gr_pn_correlator_cc;
typedef boost::shared_ptr<gr_pn_correlator_cc> gr_pn_correlator_cc_sptr;
-gr_pn_correlator_cc_sptr
+GR_CORE_API gr_pn_correlator_cc_sptr
gr_make_pn_correlator_cc(int degree, int mask=0, int seed=1);
/*!
* \brief PN code sequential search correlator
@@ -39,9 +40,9 @@ gr_make_pn_correlator_cc(int degree, int mask=0, int seed=1);
* reference PN code, one sample per PN code period
*/
-class gr_pn_correlator_cc : public gr_sync_decimator
+class GR_CORE_API 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);
+ friend GR_CORE_API gr_pn_correlator_cc_sptr gr_make_pn_correlator_cc(int degree, int mask, int seed);
int d_len;
float d_pn;
diff --git a/gnuradio-core/src/lib/general/gr_prefs.h b/gnuradio-core/src/lib/general/gr_prefs.h
index 4396d727c..8ceb5b465 100644
--- a/gnuradio-core/src/lib/general/gr_prefs.h
+++ b/gnuradio-core/src/lib/general/gr_prefs.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_PREFS_H
#define INCLUDED_GR_PREFS_H
+#include <gr_core_api.h>
#include <string>
/*!
@@ -32,7 +33,7 @@
* via the magic of SWIG directors.
*/
-class gr_prefs
+class GR_CORE_API gr_prefs
{
public:
static gr_prefs *singleton();
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 ee8872010..e857686a8 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
@@ -22,13 +22,14 @@
#ifndef INCLUDED_GR_PROBE_AVG_MAG_SQRD_C_H
#define INCLUDED_GR_PROBE_AVG_MAG_SQRD_C_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_single_pole_iir.h>
class gr_probe_avg_mag_sqrd_c;
typedef boost::shared_ptr<gr_probe_avg_mag_sqrd_c> gr_probe_avg_mag_sqrd_c_sptr;
-gr_probe_avg_mag_sqrd_c_sptr
+GR_CORE_API gr_probe_avg_mag_sqrd_c_sptr
gr_make_probe_avg_mag_sqrd_c (double threshold_db, double alpha = 0.0001);
/*!
@@ -41,14 +42,14 @@ gr_make_probe_avg_mag_sqrd_c (double threshold_db, double alpha = 0.0001);
* 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_c : public gr_sync_block
+class GR_CORE_API gr_probe_avg_mag_sqrd_c : public gr_sync_block
{
double d_threshold;
gr_single_pole_iir<double,double,double> d_iir;
bool d_unmuted;
double d_level;
- friend gr_probe_avg_mag_sqrd_c_sptr
+ friend GR_CORE_API gr_probe_avg_mag_sqrd_c_sptr
gr_make_probe_avg_mag_sqrd_c (double threshold_db, double alpha);
gr_probe_avg_mag_sqrd_c (double threshold_db, double 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
index 6c536ca5b..a85afcf3b 100644
--- 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
@@ -22,13 +22,14 @@
#ifndef INCLUDED_GR_PROBE_AVG_MAG_SQRD_CF_H
#define INCLUDED_GR_PROBE_AVG_MAG_SQRD_CF_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_single_pole_iir.h>
class gr_probe_avg_mag_sqrd_cf;
typedef boost::shared_ptr<gr_probe_avg_mag_sqrd_cf> gr_probe_avg_mag_sqrd_cf_sptr;
-gr_probe_avg_mag_sqrd_cf_sptr
+GR_CORE_API gr_probe_avg_mag_sqrd_cf_sptr
gr_make_probe_avg_mag_sqrd_cf (double threshold_db, double alpha = 0.0001);
/*!
@@ -43,14 +44,14 @@ gr_make_probe_avg_mag_sqrd_cf (double threshold_db, double alpha = 0.0001);
* can be retrieved with the level and unmuted accessors.
*
*/
-class gr_probe_avg_mag_sqrd_cf : public gr_sync_block
+class GR_CORE_API gr_probe_avg_mag_sqrd_cf : public gr_sync_block
{
double d_threshold;
gr_single_pole_iir<double,double,double> d_iir;
bool d_unmuted;
double d_level;
- friend gr_probe_avg_mag_sqrd_cf_sptr
+ friend GR_CORE_API 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);
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 b31e54f6b..4181ccf46 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
@@ -22,13 +22,14 @@
#ifndef INCLUDED_GR_PROBE_AVG_MAG_SQRD_F_H
#define INCLUDED_GR_PROBE_AVG_MAG_SQRD_F_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_single_pole_iir.h>
class gr_probe_avg_mag_sqrd_f;
typedef boost::shared_ptr<gr_probe_avg_mag_sqrd_f> gr_probe_avg_mag_sqrd_f_sptr;
-gr_probe_avg_mag_sqrd_f_sptr
+GR_CORE_API gr_probe_avg_mag_sqrd_f_sptr
gr_make_probe_avg_mag_sqrd_f (double threshold_db, double alpha = 0.0001);
/*!
@@ -41,14 +42,14 @@ gr_make_probe_avg_mag_sqrd_f (double threshold_db, double alpha = 0.0001);
* 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_f : public gr_sync_block
+class GR_CORE_API gr_probe_avg_mag_sqrd_f : public gr_sync_block
{
double d_threshold;
gr_single_pole_iir<double,double,double> d_iir;
bool d_unmuted;
double d_level;
- friend gr_probe_avg_mag_sqrd_f_sptr
+ friend GR_CORE_API gr_probe_avg_mag_sqrd_f_sptr
gr_make_probe_avg_mag_sqrd_f (double threshold_db, double alpha);
gr_probe_avg_mag_sqrd_f (double threshold_db, double 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
index 92b98d193..0af30c665 100644
--- a/gnuradio-core/src/lib/general/gr_probe_density_b.h
+++ b/gnuradio-core/src/lib/general/gr_probe_density_b.h
@@ -20,13 +20,14 @@
#ifndef INCLUDED_GR_PROBE_DENSITY_B_H
#define INCLUDED_GR_PROBE_DENSITY_B_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_probe_density_b;
typedef boost::shared_ptr<gr_probe_density_b> gr_probe_density_b_sptr;
-gr_probe_density_b_sptr gr_make_probe_density_b(double alpha);
+GR_CORE_API gr_probe_density_b_sptr gr_make_probe_density_b(double alpha);
/*!
* This block maintains a running average of the input stream and
@@ -40,10 +41,10 @@ gr_probe_density_b_sptr gr_make_probe_density_b(double alpha);
*
*/
-class gr_probe_density_b : public gr_sync_block
+class GR_CORE_API gr_probe_density_b : public gr_sync_block
{
private:
- friend gr_probe_density_b_sptr gr_make_probe_density_b(double alpha);
+ friend GR_CORE_API gr_probe_density_b_sptr gr_make_probe_density_b(double alpha);
double d_alpha;
double d_beta;
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
index 279a4a5b8..870e46701 100644
--- a/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.h
+++ b/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.h
@@ -22,12 +22,13 @@
#ifndef INCLUDED_GR_PROBE_MPSK_SNR_C_H
#define INCLUDED_GR_PROBE_MPSK_SNR_C_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_probe_mpsk_snr_c;
typedef boost::shared_ptr<gr_probe_mpsk_snr_c> gr_probe_mpsk_snr_c_sptr;
-gr_probe_mpsk_snr_c_sptr
+GR_CORE_API gr_probe_mpsk_snr_c_sptr
gr_make_probe_mpsk_snr_c(double alpha = 0.0001);
/*!
@@ -46,7 +47,7 @@ gr_make_probe_mpsk_snr_c(double alpha = 0.0001);
* This SNR estimator is inaccurate below about 7dB SNR.
*
*/
-class gr_probe_mpsk_snr_c : public gr_sync_block
+class GR_CORE_API gr_probe_mpsk_snr_c : public gr_sync_block
{
double d_alpha;
double d_beta;
@@ -54,7 +55,7 @@ class gr_probe_mpsk_snr_c : public gr_sync_block
double d_noise_variance;
// Factory function returning shared pointer of this class
- friend gr_probe_mpsk_snr_c_sptr
+ friend GR_CORE_API gr_probe_mpsk_snr_c_sptr
gr_make_probe_mpsk_snr_c(double alpha);
// Private constructor
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 9605bb685..b99c76976 100644
--- a/gnuradio-core/src/lib/general/gr_probe_signal_f.h
+++ b/gnuradio-core/src/lib/general/gr_probe_signal_f.h
@@ -22,23 +22,24 @@
#ifndef INCLUDED_GR_PROBE_SIGNAL_F_H
#define INCLUDED_GR_PROBE_SIGNAL_F_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_probe_signal_f;
typedef boost::shared_ptr<gr_probe_signal_f> gr_probe_signal_f_sptr;
-gr_probe_signal_f_sptr
+GR_CORE_API gr_probe_signal_f_sptr
gr_make_probe_signal_f ();
/*!
* \brief Sink that allows a sample to be grabbed from Python.
* \ingroup sink_blk
*/
-class gr_probe_signal_f : public gr_sync_block
+class GR_CORE_API gr_probe_signal_f : public gr_sync_block
{
float d_level;
- friend gr_probe_signal_f_sptr
+ friend GR_CORE_API gr_probe_signal_f_sptr
gr_make_probe_signal_f();
gr_probe_signal_f();
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 9c519f383..2a008d92d 100644
--- a/gnuradio-core/src/lib/general/gr_pwr_squelch_cc.h
+++ b/gnuradio-core/src/lib/general/gr_pwr_squelch_cc.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_PWR_SQUELCH_CC_H
#define INCLUDED_GR_PWR_SQUELCH_CC_H
+#include <gr_core_api.h>
#include <cmath>
#include <gr_squelch_base_cc.h>
#include <gr_single_pole_iir.h>
@@ -30,21 +31,21 @@
class gr_pwr_squelch_cc;
typedef boost::shared_ptr<gr_pwr_squelch_cc> gr_pwr_squelch_cc_sptr;
-gr_pwr_squelch_cc_sptr
+GR_CORE_API gr_pwr_squelch_cc_sptr
gr_make_pwr_squelch_cc(double db, double alpha = 0.0001, int ramp=0, bool gate=false);
/*!
* \brief gate or zero output when input power below threshold
* \ingroup level_blk
*/
-class gr_pwr_squelch_cc : public gr_squelch_base_cc
+class GR_CORE_API gr_pwr_squelch_cc : public gr_squelch_base_cc
{
private:
double d_threshold;
double d_pwr;
gr_single_pole_iir<double,double,double> d_iir;
- friend gr_pwr_squelch_cc_sptr gr_make_pwr_squelch_cc(double db, double alpha, int ramp, bool gate);
+ friend GR_CORE_API gr_pwr_squelch_cc_sptr gr_make_pwr_squelch_cc(double db, double alpha, int ramp, bool gate);
gr_pwr_squelch_cc(double db, double alpha, int ramp, bool gate);
protected:
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 6952dbce2..27a7306b3 100644
--- a/gnuradio-core/src/lib/general/gr_pwr_squelch_ff.h
+++ b/gnuradio-core/src/lib/general/gr_pwr_squelch_ff.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_PWR_SQUELCH_FF_H
#define INCLUDED_GR_PWR_SQUELCH_FF_H
+#include <gr_core_api.h>
#include <cmath>
#include <gr_squelch_base_ff.h>
#include <gr_single_pole_iir.h>
@@ -30,21 +31,21 @@
class gr_pwr_squelch_ff;
typedef boost::shared_ptr<gr_pwr_squelch_ff> gr_pwr_squelch_ff_sptr;
-gr_pwr_squelch_ff_sptr
+GR_CORE_API gr_pwr_squelch_ff_sptr
gr_make_pwr_squelch_ff(double db, double alpha = 0.0001, int ramp=0, bool gate=false);
/*!
* \brief gate or zero output when input power below threshold
* \ingroup level_blk
*/
-class gr_pwr_squelch_ff : public gr_squelch_base_ff
+class GR_CORE_API gr_pwr_squelch_ff : public gr_squelch_base_ff
{
private:
double d_threshold;
double d_pwr;
gr_single_pole_iir<double,double,double> d_iir;
- friend gr_pwr_squelch_ff_sptr gr_make_pwr_squelch_ff(double db, double alpha, int ramp, bool gate);
+ friend GR_CORE_API gr_pwr_squelch_ff_sptr gr_make_pwr_squelch_ff(double db, double alpha, int ramp, bool gate);
gr_pwr_squelch_ff(double db, double alpha, int ramp, bool gate);
protected:
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 df6de93d5..755f2839a 100644
--- a/gnuradio-core/src/lib/general/gr_quadrature_demod_cf.h
+++ b/gnuradio-core/src/lib/general/gr_quadrature_demod_cf.h
@@ -23,11 +23,12 @@
#ifndef INCLUDED_GR_QUADRATURE_DEMOD_CF_H
#define INCLUDED_GR_QUADRATURE_DEMOD_CF_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_quadrature_demod_cf;
typedef boost::shared_ptr<gr_quadrature_demod_cf> gr_quadrature_demod_cf_sptr;
-gr_quadrature_demod_cf_sptr gr_make_quadrature_demod_cf (float gain);
+GR_CORE_API gr_quadrature_demod_cf_sptr gr_make_quadrature_demod_cf (float gain);
/*!
* \brief quadrature demodulator: complex in, float out
@@ -36,9 +37,9 @@ gr_quadrature_demod_cf_sptr gr_make_quadrature_demod_cf (float gain);
* This can be used to demod FM, FSK, GMSK, etc.
* The input is complex baseband.
*/
-class gr_quadrature_demod_cf : public gr_sync_block
+class GR_CORE_API gr_quadrature_demod_cf : public gr_sync_block
{
- friend gr_quadrature_demod_cf_sptr gr_make_quadrature_demod_cf (float gain);
+ friend GR_CORE_API gr_quadrature_demod_cf_sptr gr_make_quadrature_demod_cf (float gain);
gr_quadrature_demod_cf (float gain);
float d_gain;
diff --git a/gnuradio-core/src/lib/general/gr_rail_ff.h b/gnuradio-core/src/lib/general/gr_rail_ff.h
index d9e19a964..225bdf36e 100644
--- a/gnuradio-core/src/lib/general/gr_rail_ff.h
+++ b/gnuradio-core/src/lib/general/gr_rail_ff.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_RAIL_FF_H_
# define INCLUDED_GR_RAIL_FF_H_
+#include <gr_core_api.h>
#include <gr_sync_block.h>
/*!
@@ -33,11 +34,11 @@
class gr_rail_ff;
typedef boost::shared_ptr<gr_rail_ff> gr_rail_ff_sptr;
-gr_rail_ff_sptr gr_make_rail_ff(float lo, float hi);
+GR_CORE_API gr_rail_ff_sptr gr_make_rail_ff(float lo, float hi);
-class gr_rail_ff : public gr_sync_block
+class GR_CORE_API gr_rail_ff : public gr_sync_block
{
- friend gr_rail_ff_sptr gr_make_rail_ff (float lo, float hi);
+ friend GR_CORE_API 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);
diff --git a/gnuradio-core/src/lib/general/gr_random.h b/gnuradio-core/src/lib/general/gr_random.h
index e5002fd33..13dbbfb04 100644
--- a/gnuradio-core/src/lib/general/gr_random.h
+++ b/gnuradio-core/src/lib/general/gr_random.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_RANDOM_H
#define INCLUDED_GR_RANDOM_H
+#include <gr_core_api.h>
#include <gr_complex.h>
/*!
* \brief pseudo random number generator
* \ingroup math_blk
*/
-class gr_random {
+class GR_CORE_API gr_random {
protected:
static const int NTAB = 32;
long d_seed;
diff --git a/gnuradio-core/src/lib/general/gr_regenerate_bb.h b/gnuradio-core/src/lib/general/gr_regenerate_bb.h
index db511b228..67cfedac7 100644
--- a/gnuradio-core/src/lib/general/gr_regenerate_bb.h
+++ b/gnuradio-core/src/lib/general/gr_regenerate_bb.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_REGENERATE_BB_H
#define INCLUDED_GR_REGENERATE_BB_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_regenerate_bb;
typedef boost::shared_ptr<gr_regenerate_bb> gr_regenerate_bb_sptr;
-gr_regenerate_bb_sptr gr_make_regenerate_bb (int period, unsigned int max_regen=500);
+GR_CORE_API 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
@@ -40,7 +41,7 @@ gr_regenerate_bb_sptr gr_make_regenerate_bb (int period, unsigned int max_regen=
*
* Note that if max_regen=(-1)/ULONG_MAX then the regeneration will run forever.
*/
-class gr_regenerate_bb : public gr_sync_block
+class GR_CORE_API gr_regenerate_bb : public gr_sync_block
{
/*!
* \brief Make a regenerate block
@@ -48,7 +49,7 @@ class gr_regenerate_bb : public gr_sync_block
* \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);
+ friend GR_CORE_API gr_regenerate_bb_sptr gr_make_regenerate_bb (int period, unsigned int max_regen);
gr_regenerate_bb (int period, unsigned int max_regen);
diff --git a/gnuradio-core/src/lib/general/gr_remez.h b/gnuradio-core/src/lib/general/gr_remez.h
index 85e1516a5..f7b8a72a3 100644
--- a/gnuradio-core/src/lib/general/gr_remez.h
+++ b/gnuradio-core/src/lib/general/gr_remez.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_REMEZ_H
#define INCLUDED_GR_REMEZ_H
+#include <gr_core_api.h>
#include <gr_types.h>
#include <string>
#include <stdexcept>
@@ -51,7 +52,7 @@
* \throws std::runtime_error if args are invalid or calculation fails to converge.
*/
-std::vector<double>
+GR_CORE_API std::vector<double>
gr_remez (int order,
const std::vector<double> &bands,
const std::vector<double> &ampl,
diff --git a/gnuradio-core/src/lib/general/gr_repeat.h b/gnuradio-core/src/lib/general/gr_repeat.h
index f323fc375..b90f2f51d 100644
--- a/gnuradio-core/src/lib/general/gr_repeat.h
+++ b/gnuradio-core/src/lib/general/gr_repeat.h
@@ -22,23 +22,24 @@
#ifndef INCLUDED_GR_REPEAT_H
#define INCLUDED_GR_REPEAT_H
+#include <gr_core_api.h>
#include <gr_sync_interpolator.h>
class gr_repeat;
typedef boost::shared_ptr<gr_repeat> gr_repeat_sptr;
-gr_repeat_sptr gr_make_repeat(size_t itemsize, int interp);
+GR_CORE_API 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
+class GR_CORE_API gr_repeat : public gr_sync_interpolator
{
private:
- friend gr_repeat_sptr gr_make_repeat(size_t itemsize, int interp);
+ friend GR_CORE_API gr_repeat_sptr gr_make_repeat(size_t itemsize, int interp);
gr_repeat(size_t itemsize, int interp);
diff --git a/gnuradio-core/src/lib/general/gr_reverse.h b/gnuradio-core/src/lib/general/gr_reverse.h
index d79d34e91..43d84fda7 100644
--- a/gnuradio-core/src/lib/general/gr_reverse.h
+++ b/gnuradio-core/src/lib/general/gr_reverse.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_REVERSE_H
#define INCLUDED_GR_REVERSE_H
+#include <gr_core_api.h>
#include <vector>
#include <gr_complex.h>
diff --git a/gnuradio-core/src/lib/general/gr_rms_cf.h b/gnuradio-core/src/lib/general/gr_rms_cf.h
index 86c4bdbac..f1bd9802c 100644
--- a/gnuradio-core/src/lib/general/gr_rms_cf.h
+++ b/gnuradio-core/src/lib/general/gr_rms_cf.h
@@ -22,25 +22,26 @@
#ifndef INCLUDED_GR_RMS_CF_H
#define INCLUDED_GR_RMS_CF_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_single_pole_iir.h>
class gr_rms_cf;
typedef boost::shared_ptr<gr_rms_cf> gr_rms_cf_sptr;
-gr_rms_cf_sptr
+GR_CORE_API gr_rms_cf_sptr
gr_make_rms_cf (double alpha = 0.0001);
/*!
* \brief RMS average power
* \ingroup math_blk
*/
-class gr_rms_cf : public gr_sync_block
+class GR_CORE_API gr_rms_cf : public gr_sync_block
{
gr_single_pole_iir<double,double,double> d_iir;
bool d_unmuted;
- friend gr_rms_cf_sptr
+ friend GR_CORE_API gr_rms_cf_sptr
gr_make_rms_cf (double alpha);
gr_rms_cf (double alpha);
diff --git a/gnuradio-core/src/lib/general/gr_rms_ff.h b/gnuradio-core/src/lib/general/gr_rms_ff.h
index ed1635eb1..0bbd53b70 100644
--- a/gnuradio-core/src/lib/general/gr_rms_ff.h
+++ b/gnuradio-core/src/lib/general/gr_rms_ff.h
@@ -22,25 +22,26 @@
#ifndef INCLUDED_GR_RMS_FF_H
#define INCLUDED_GR_RMS_FF_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_single_pole_iir.h>
class gr_rms_ff;
typedef boost::shared_ptr<gr_rms_ff> gr_rms_ff_sptr;
-gr_rms_ff_sptr
+GR_CORE_API gr_rms_ff_sptr
gr_make_rms_ff (double alpha = 0.0001);
/*!
* \brief RMS average power
* \ingroup math_blk
*/
-class gr_rms_ff : public gr_sync_block
+class GR_CORE_API gr_rms_ff : public gr_sync_block
{
gr_single_pole_iir<double,double,double> d_iir;
bool d_unmuted;
- friend gr_rms_ff_sptr
+ friend GR_CORE_API gr_rms_ff_sptr
gr_make_rms_ff (double alpha);
gr_rms_ff (double alpha);
diff --git a/gnuradio-core/src/lib/general/gr_scrambler_bb.h b/gnuradio-core/src/lib/general/gr_scrambler_bb.h
index 7efe8b598..79905933d 100644
--- a/gnuradio-core/src/lib/general/gr_scrambler_bb.h
+++ b/gnuradio-core/src/lib/general/gr_scrambler_bb.h
@@ -22,13 +22,14 @@
#ifndef INCLUDED_GR_SCRAMBLER_BB_H
#define INCLUDED_GR_SCRAMBLER_BB_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include "gri_lfsr.h"
class gr_scrambler_bb;
typedef boost::shared_ptr<gr_scrambler_bb> gr_scrambler_bb_sptr;
-gr_scrambler_bb_sptr gr_make_scrambler_bb(int mask, int seed, int len);
+GR_CORE_API 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
@@ -42,9 +43,9 @@ gr_scrambler_bb_sptr gr_make_scrambler_bb(int mask, int seed, int len);
* \ingroup coding_blk
*/
-class gr_scrambler_bb : public gr_sync_block
+class GR_CORE_API gr_scrambler_bb : public gr_sync_block
{
- friend gr_scrambler_bb_sptr gr_make_scrambler_bb(int mask, int seed, int len);
+ friend GR_CORE_API gr_scrambler_bb_sptr gr_make_scrambler_bb(int mask, int seed, int len);
gri_lfsr d_lfsr;
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 ccb19d9f2..b40c966ea 100644
--- a/gnuradio-core/src/lib/general/gr_short_to_float.h
+++ b/gnuradio-core/src/lib/general/gr_short_to_float.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_SHORT_TO_FLOAT_H
#define INCLUDED_GR_SHORT_TO_FLOAT_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_short_to_float;
typedef boost::shared_ptr<gr_short_to_float> gr_short_to_float_sptr;
-gr_short_to_float_sptr
+GR_CORE_API gr_short_to_float_sptr
gr_make_short_to_float ();
/*!
@@ -36,9 +37,9 @@ gr_make_short_to_float ();
* \ingroup converter_blk
*/
-class gr_short_to_float : public gr_sync_block
+class GR_CORE_API gr_short_to_float : public gr_sync_block
{
- friend gr_short_to_float_sptr gr_make_short_to_float ();
+ friend GR_CORE_API gr_short_to_float_sptr gr_make_short_to_float ();
gr_short_to_float ();
public:
diff --git a/gnuradio-core/src/lib/general/gr_simple_correlator.cc b/gnuradio-core/src/lib/general/gr_simple_correlator.cc
index 01c007122..bdfa73ef3 100644
--- a/gnuradio-core/src/lib/general/gr_simple_correlator.cc
+++ b/gnuradio-core/src/lib/general/gr_simple_correlator.cc
@@ -50,6 +50,7 @@ gr_simple_correlator::gr_simple_correlator (int payload_bytesize)
d_state (ST_LOOKING), d_osi (0),
d_bblen ((payload_bytesize + GRSF_PAYLOAD_OVERHEAD) * GRSF_BITS_PER_BYTE),
d_bitbuf (new unsigned char [d_bblen]),
+ d_pktbuf (new unsigned char [d_bblen/GRSF_BITS_PER_BYTE]),
d_bbi (0)
{
d_avbi = 0;
@@ -71,6 +72,7 @@ gr_simple_correlator::~gr_simple_correlator ()
fclose(d_debug_fp);
#endif
delete [] d_bitbuf;
+ delete [] d_pktbuf;
}
@@ -184,10 +186,9 @@ gr_simple_correlator::general_work (int noutput_items,
d_bbi++;
if (d_bbi >= d_bblen){
// printf ("got whole packet\n");
- unsigned char pktbuf[d_bblen/GRSF_BITS_PER_BYTE];
- packit (pktbuf, d_bitbuf, d_bbi);
- printf ("seqno %3d\n", pktbuf[0]);
- memcpy (out, &pktbuf[GRSF_PAYLOAD_OVERHEAD], d_payload_bytesize);
+ packit (d_pktbuf, d_bitbuf, d_bbi);
+ printf ("seqno %3d\n", d_pktbuf[0]);
+ memcpy (out, &d_pktbuf[GRSF_PAYLOAD_OVERHEAD], d_payload_bytesize);
enter_looking ();
consume_each (n + 1);
return d_payload_bytesize;
diff --git a/gnuradio-core/src/lib/general/gr_simple_correlator.h b/gnuradio-core/src/lib/general/gr_simple_correlator.h
index b21d38a04..4c5f060cd 100644
--- a/gnuradio-core/src/lib/general/gr_simple_correlator.h
+++ b/gnuradio-core/src/lib/general/gr_simple_correlator.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_SIMPLE_CORRELATOR_H
#define INCLUDED_GR_SIMPLE_CORRELATOR_H
+#include <gr_core_api.h>
#include <gr_block.h>
#include <assert.h>
@@ -31,13 +32,13 @@
class gr_simple_correlator;
typedef boost::shared_ptr<gr_simple_correlator> gr_simple_correlator_sptr;
-gr_simple_correlator_sptr gr_make_simple_correlator (int payload_bytesize);
+GR_CORE_API gr_simple_correlator_sptr gr_make_simple_correlator (int payload_bytesize);
/*!
* \brief inverse of gr_simple_framer (more or less)
* \ingroup sync_blk
*/
-class gr_simple_correlator : public gr_block
+class GR_CORE_API gr_simple_correlator : public gr_block
{
static const int OVERSAMPLE = 8;
enum state_t { ST_LOOKING, ST_UNDER_THRESHOLD, ST_LOCKED };
@@ -50,6 +51,7 @@ class gr_simple_correlator : public gr_block
unsigned long long int d_shift_reg[OVERSAMPLE];
int d_bblen; // length of bitbuf
unsigned char *d_bitbuf; // demodulated bits
+ unsigned char *d_pktbuf; // temp packet buf
int d_bbi; // bitbuf index
static const int AVG_PERIOD = 512; // must be power of 2 (for freq offset correction)
@@ -62,7 +64,7 @@ class gr_simple_correlator : public gr_block
FILE *d_debug_fp; // binary log file
#endif
- friend gr_simple_correlator_sptr gr_make_simple_correlator (int payload_bytesize);
+ friend GR_CORE_API gr_simple_correlator_sptr gr_make_simple_correlator (int payload_bytesize);
gr_simple_correlator (int payload_bytesize);
diff --git a/gnuradio-core/src/lib/general/gr_simple_framer.h b/gnuradio-core/src/lib/general/gr_simple_framer.h
index d930da33b..15f392e4a 100644
--- a/gnuradio-core/src/lib/general/gr_simple_framer.h
+++ b/gnuradio-core/src/lib/general/gr_simple_framer.h
@@ -23,25 +23,26 @@
#ifndef INCLUDED_GR_SIMPLE_FRAMER_H
#define INCLUDED_GR_SIMPLE_FRAMER_H
+#include <gr_core_api.h>
#include <gr_block.h>
class gr_simple_framer;
typedef boost::shared_ptr<gr_simple_framer> gr_simple_framer_sptr;
-gr_simple_framer_sptr gr_make_simple_framer (int payload_bytesize);
+GR_CORE_API gr_simple_framer_sptr gr_make_simple_framer (int payload_bytesize);
/*!
* \brief add sync field, seq number and command field to payload
* \ingroup sync_blk
*/
-class gr_simple_framer : public gr_block
+class GR_CORE_API gr_simple_framer : public gr_block
{
int d_seqno;
int d_payload_bytesize;
int d_input_block_size; // bytes
int d_output_block_size; // bytes
- friend gr_simple_framer_sptr gr_make_simple_framer (int payload_bytesize);
+ friend GR_CORE_API gr_simple_framer_sptr gr_make_simple_framer (int payload_bytesize);
gr_simple_framer (int payload_bytesize);
public:
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 30744f6fb..590b86de8 100644
--- a/gnuradio-core/src/lib/general/gr_simple_squelch_cc.h
+++ b/gnuradio-core/src/lib/general/gr_simple_squelch_cc.h
@@ -22,26 +22,27 @@
#ifndef INCLUDED_GR_SIMPLE_SQUELCH_CC_H
#define INCLUDED_GR_SIMPLE_SQUELCH_CC_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_single_pole_iir.h>
class gr_simple_squelch_cc;
typedef boost::shared_ptr<gr_simple_squelch_cc> gr_simple_squelch_cc_sptr;
-gr_simple_squelch_cc_sptr
+GR_CORE_API gr_simple_squelch_cc_sptr
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
+class GR_CORE_API gr_simple_squelch_cc : public gr_sync_block
{
double d_threshold;
gr_single_pole_iir<double,double,double> d_iir;
bool d_unmuted;
- friend gr_simple_squelch_cc_sptr
+ friend GR_CORE_API gr_simple_squelch_cc_sptr
gr_make_simple_squelch_cc (double threshold_db, double alpha);
gr_simple_squelch_cc (double threshold_db, double alpha);
diff --git a/gnuradio-core/src/lib/general/gr_skiphead.h b/gnuradio-core/src/lib/general/gr_skiphead.h
index 933c126e3..2beaaeab0 100644
--- a/gnuradio-core/src/lib/general/gr_skiphead.h
+++ b/gnuradio-core/src/lib/general/gr_skiphead.h
@@ -23,12 +23,16 @@
#ifndef INCLUDED_GR_SKIPHEAD_H
#define INCLUDED_GR_SKIPHEAD_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <stddef.h> // size_t
class gr_skiphead;
typedef boost::shared_ptr<gr_skiphead> gr_skiphead_sptr;
+GR_CORE_API gr_skiphead_sptr
+gr_make_skiphead (size_t itemsize, uint64_t nitems_to_skip);
+
/*!
* \brief skips the first N items, from then on copies items to the output
@@ -37,9 +41,9 @@ typedef boost::shared_ptr<gr_skiphead> gr_skiphead_sptr;
* Useful for building test cases and sources which have metadata or junk at the start
*/
-class gr_skiphead : public gr_block
+class GR_CORE_API gr_skiphead : public gr_block
{
- friend gr_skiphead_sptr gr_make_skiphead (size_t itemsize, uint64_t nitems_to_skip);
+ friend GR_CORE_API gr_skiphead_sptr gr_make_skiphead (size_t itemsize, uint64_t nitems_to_skip);
gr_skiphead (size_t itemsize, uint64_t nitems_to_skip);
uint64_t d_nitems_to_skip;
@@ -53,8 +57,4 @@ class gr_skiphead : public gr_block
gr_vector_void_star &output_items);
};
-gr_skiphead_sptr
-gr_make_skiphead (size_t itemsize, uint64_t nitems_to_skip);
-
-
#endif /* INCLUDED_GR_SKIPHEAD_H */
diff --git a/gnuradio-core/src/lib/general/gr_squash_ff.h b/gnuradio-core/src/lib/general/gr_squash_ff.h
index ee3426cae..f7fea1648 100644
--- a/gnuradio-core/src/lib/general/gr_squash_ff.h
+++ b/gnuradio-core/src/lib/general/gr_squash_ff.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_SQUASH_FF_H_
# define INCLUDED_GR_SQUASH_FF_H_
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gsl/gsl_errno.h>
#include <gsl/gsl_interp.h>
@@ -36,12 +37,12 @@
class gr_squash_ff;
typedef boost::shared_ptr<gr_squash_ff> gr_squash_ff_sptr;
-gr_squash_ff_sptr gr_make_squash_ff(const std::vector<float> &igrid,
+GR_CORE_API gr_squash_ff_sptr gr_make_squash_ff(const std::vector<float> &igrid,
const std::vector<float> &ogrid);
-class gr_squash_ff : public gr_sync_block
+class GR_CORE_API gr_squash_ff : public gr_sync_block
{
- friend gr_squash_ff_sptr gr_make_squash_ff(const std::vector<float> &igrid,
+ friend GR_CORE_API gr_squash_ff_sptr gr_make_squash_ff(const std::vector<float> &igrid,
const std::vector<float> &ogrid);
size_t d_inum;
diff --git a/gnuradio-core/src/lib/general/gr_squelch_base_cc.h b/gnuradio-core/src/lib/general/gr_squelch_base_cc.h
index 51e2e14e5..7c15e0121 100644
--- a/gnuradio-core/src/lib/general/gr_squelch_base_cc.h
+++ b/gnuradio-core/src/lib/general/gr_squelch_base_cc.h
@@ -23,9 +23,10 @@
#ifndef INCLUDED_GR_SQUELCH_BASE_CC_H
#define INCLUDED_GR_SQUELCH_BASE_CC_H
+#include <gr_core_api.h>
#include <gr_block.h>
-class gr_squelch_base_cc : public gr_block
+class GR_CORE_API gr_squelch_base_cc : public gr_block
{
private:
int d_ramp;
diff --git a/gnuradio-core/src/lib/general/gr_squelch_base_ff.h b/gnuradio-core/src/lib/general/gr_squelch_base_ff.h
index 2ca108c75..92a064e63 100644
--- a/gnuradio-core/src/lib/general/gr_squelch_base_ff.h
+++ b/gnuradio-core/src/lib/general/gr_squelch_base_ff.h
@@ -23,9 +23,10 @@
#ifndef INCLUDED_GR_SQUELCH_BASE_FF_H
#define INCLUDED_GR_SQUELCH_BASE_FF_H
+#include <gr_core_api.h>
#include <gr_block.h>
-class gr_squelch_base_ff : public gr_block
+class GR_CORE_API gr_squelch_base_ff : public gr_block
{
private:
int d_ramp;
diff --git a/gnuradio-core/src/lib/general/gr_stream_mux.h b/gnuradio-core/src/lib/general/gr_stream_mux.h
index 29829339e..68415ab1d 100644
--- a/gnuradio-core/src/lib/general/gr_stream_mux.h
+++ b/gnuradio-core/src/lib/general/gr_stream_mux.h
@@ -24,6 +24,7 @@
#define INCLUDED_GR_STREAM_MUX_H
+#include <gr_core_api.h>
#include <gr_block.h>
#include <vector>
@@ -45,7 +46,7 @@ typedef boost::shared_ptr<gr_stream_mux> gr_stream_mux_sptr;
-gr_stream_mux_sptr
+GR_CORE_API gr_stream_mux_sptr
gr_make_stream_mux (size_t itemsize, const std::vector<int> &lengths);
@@ -60,9 +61,9 @@ gr_make_stream_mux (size_t itemsize, const std::vector<int> &lengths);
* [N0, N1, N2, ..., Nm, N0, N1, ...]
*/
-class gr_stream_mux : public gr_block
+class GR_CORE_API gr_stream_mux : public gr_block
{
- friend gr_stream_mux_sptr
+ friend GR_CORE_API gr_stream_mux_sptr
gr_make_stream_mux (size_t itemsize, const std::vector<int> &lengths);
protected:
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 2fdd39e4a..905d3c556 100644
--- a/gnuradio-core/src/lib/general/gr_stream_to_streams.h
+++ b/gnuradio-core/src/lib/general/gr_stream_to_streams.h
@@ -22,12 +22,13 @@
#ifndef INCLUDED_GR_STREAM_TO_STREAMS_H
#define INCLUDED_GR_STREAM_TO_STREAMS_H
+#include <gr_core_api.h>
#include <gr_sync_decimator.h>
class gr_stream_to_streams;
typedef boost::shared_ptr<gr_stream_to_streams> gr_stream_to_streams_sptr;
-gr_stream_to_streams_sptr
+GR_CORE_API gr_stream_to_streams_sptr
gr_make_stream_to_streams (size_t item_size, size_t nstreams);
@@ -38,9 +39,9 @@ gr_make_stream_to_streams (size_t item_size, size_t nstreams);
* Converts a stream of N items into N streams of 1 item.
* Repeat ad infinitum.
*/
-class gr_stream_to_streams : public gr_sync_decimator
+class GR_CORE_API gr_stream_to_streams : public gr_sync_decimator
{
- friend gr_stream_to_streams_sptr
+ friend GR_CORE_API gr_stream_to_streams_sptr
gr_make_stream_to_streams (size_t item_size, size_t nstreams);
protected:
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 2cb03f6a8..77272b96b 100644
--- a/gnuradio-core/src/lib/general/gr_stream_to_vector.h
+++ b/gnuradio-core/src/lib/general/gr_stream_to_vector.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_STREAM_TO_VECTOR_H
#define INCLUDED_GR_STREAM_TO_VECTOR_H
+#include <gr_core_api.h>
#include <gr_sync_decimator.h>
class gr_stream_to_vector;
typedef boost::shared_ptr<gr_stream_to_vector> gr_stream_to_vector_sptr;
-gr_stream_to_vector_sptr
+GR_CORE_API gr_stream_to_vector_sptr
gr_make_stream_to_vector (size_t item_size, size_t nitems_per_block);
@@ -36,9 +37,9 @@ 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 slicedice_blk
*/
-class gr_stream_to_vector : public gr_sync_decimator
+class GR_CORE_API gr_stream_to_vector : public gr_sync_decimator
{
- friend gr_stream_to_vector_sptr
+ friend GR_CORE_API gr_stream_to_vector_sptr
gr_make_stream_to_vector (size_t item_size, size_t nitems_per_block);
protected:
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 044af6cd2..8207fed42 100644
--- a/gnuradio-core/src/lib/general/gr_streams_to_stream.h
+++ b/gnuradio-core/src/lib/general/gr_streams_to_stream.h
@@ -22,12 +22,13 @@
#ifndef INCLUDED_GR_STREAMS_TO_STREAM_H
#define INCLUDED_GR_STREAMS_TO_STREAM_H
+#include <gr_core_api.h>
#include <gr_sync_interpolator.h>
class gr_streams_to_stream;
typedef boost::shared_ptr<gr_streams_to_stream> gr_streams_to_stream_sptr;
-gr_streams_to_stream_sptr
+GR_CORE_API gr_streams_to_stream_sptr
gr_make_streams_to_stream (size_t item_size, size_t nstreams);
@@ -38,9 +39,9 @@ gr_make_streams_to_stream (size_t item_size, size_t nstreams);
* Convert N streams of 1 item into 1 stream of N items.
* Repeat ad infinitum.
*/
-class gr_streams_to_stream : public gr_sync_interpolator
+class GR_CORE_API gr_streams_to_stream : public gr_sync_interpolator
{
- friend gr_streams_to_stream_sptr
+ friend GR_CORE_API gr_streams_to_stream_sptr
gr_make_streams_to_stream (size_t item_size, size_t nstreams);
protected:
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 1b2e3ebf7..6a05ac90a 100644
--- a/gnuradio-core/src/lib/general/gr_streams_to_vector.h
+++ b/gnuradio-core/src/lib/general/gr_streams_to_vector.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_STREAMS_TO_VECTOR_H
#define INCLUDED_GR_STREAMS_TO_VECTOR_H
+#include <gr_core_api.h>
#include <gr_sync_interpolator.h>
class gr_streams_to_vector;
typedef boost::shared_ptr<gr_streams_to_vector> gr_streams_to_vector_sptr;
-gr_streams_to_vector_sptr
+GR_CORE_API gr_streams_to_vector_sptr
gr_make_streams_to_vector (size_t item_size, size_t nstreams);
@@ -36,9 +37,9 @@ 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 slicedice_blk
*/
-class gr_streams_to_vector : public gr_sync_block
+class GR_CORE_API gr_streams_to_vector : public gr_sync_block
{
- friend gr_streams_to_vector_sptr
+ friend GR_CORE_API gr_streams_to_vector_sptr
gr_make_streams_to_vector (size_t item_size, size_t nstreams);
protected:
diff --git a/gnuradio-core/src/lib/general/gr_stretch_ff.h b/gnuradio-core/src/lib/general/gr_stretch_ff.h
index e75e1969f..578634dd8 100644
--- a/gnuradio-core/src/lib/general/gr_stretch_ff.h
+++ b/gnuradio-core/src/lib/general/gr_stretch_ff.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_STRETCH_FF_H_
# define INCLUDED_GR_STRETCH_FF_H_
+#include <gr_core_api.h>
#include <gr_sync_block.h>
/*!
@@ -36,11 +37,11 @@
class gr_stretch_ff;
typedef boost::shared_ptr<gr_stretch_ff> gr_stretch_ff_sptr;
-gr_stretch_ff_sptr gr_make_stretch_ff(float lo, size_t vlen);
+GR_CORE_API gr_stretch_ff_sptr gr_make_stretch_ff(float lo, size_t vlen);
-class gr_stretch_ff : public gr_sync_block
+class GR_CORE_API gr_stretch_ff : public gr_sync_block
{
- friend gr_stretch_ff_sptr gr_make_stretch_ff(float lo, size_t vlen);
+ friend GR_CORE_API gr_stretch_ff_sptr gr_make_stretch_ff(float lo, size_t vlen);
float d_lo; // the constant
size_t d_vlen;
diff --git a/gnuradio-core/src/lib/general/gr_test.h b/gnuradio-core/src/lib/general/gr_test.h
index 5438ac701..78e39d518 100644
--- a/gnuradio-core/src/lib/general/gr_test.h
+++ b/gnuradio-core/src/lib/general/gr_test.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_TEST_H
#define INCLUDED_GR_TEST_H
+#include <gr_core_api.h>
#include <gr_block.h>
#include <string>
#include "gr_test_types.h"
@@ -31,7 +32,7 @@ class gr_test;
typedef boost::shared_ptr<gr_test> gr_test_sptr;
// public constructor
-gr_test_sptr gr_make_test (const std::string &name=std::string("gr_test"),
+GR_CORE_API gr_test_sptr gr_make_test (const std::string &name=std::string("gr_test"),
int min_inputs=1, int max_inputs=1, unsigned int sizeof_input_item=1,
int min_outputs=1, int max_outputs=1, unsigned int sizeof_output_item=1,
unsigned int history=1,unsigned int output_multiple=1,double relative_rate=1.0,
@@ -50,7 +51,7 @@ gr_test_sptr gr_make_test (const std::string &name=std::string("gr_test"),
* The runtime system should detect this and create large enough buffers
* all through the signal chain.
*/
-class gr_test : public gr_block {
+class GR_CORE_API gr_test : public gr_block {
public:
@@ -183,7 +184,7 @@ int general_work (int noutput_items,
- friend gr_test_sptr gr_make_test (const std::string &name,int min_inputs, int max_inputs, unsigned int sizeof_input_item,
+ friend GR_CORE_API gr_test_sptr gr_make_test (const std::string &name,int min_inputs, int max_inputs, unsigned int sizeof_input_item,
int min_outputs, int max_outputs, unsigned int sizeof_output_item,
unsigned int history,unsigned int output_multiple,double relative_rate,
bool fixed_rate,gr_consume_type_t cons_type, gr_produce_type_t prod_type);
diff --git a/gnuradio-core/src/lib/general/gr_threshold_ff.h b/gnuradio-core/src/lib/general/gr_threshold_ff.h
index 65b677a77..3bf3058cd 100644
--- a/gnuradio-core/src/lib/general/gr_threshold_ff.h
+++ b/gnuradio-core/src/lib/general/gr_threshold_ff.h
@@ -23,20 +23,21 @@
#ifndef INCLUDED_GR_THRESHOLD_FF_H
#define INCLUDED_GR_THRESHOLD_FF_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_threshold_ff;
typedef boost::shared_ptr<gr_threshold_ff> gr_threshold_ff_sptr;
-gr_threshold_ff_sptr gr_make_threshold_ff (float lo, float hi, float initial_state=0);
+GR_CORE_API gr_threshold_ff_sptr gr_make_threshold_ff (float lo, float hi, float initial_state=0);
/*!
* \brief Please fix my documentation
* \ingroup misc_blk
*/
-class gr_threshold_ff : public gr_sync_block
+class GR_CORE_API gr_threshold_ff : public gr_sync_block
{
- friend gr_threshold_ff_sptr gr_make_threshold_ff (float lo, float hi, float initial_state);
+ friend GR_CORE_API gr_threshold_ff_sptr gr_make_threshold_ff (float lo, float hi, float initial_state);
float d_lo,d_hi; // the constant
float d_last_state;
diff --git a/gnuradio-core/src/lib/general/gr_throttle.h b/gnuradio-core/src/lib/general/gr_throttle.h
index a82821f77..0b6ada995 100644
--- a/gnuradio-core/src/lib/general/gr_throttle.h
+++ b/gnuradio-core/src/lib/general/gr_throttle.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_THROTTLE_H
#define INCLUDED_GR_THROTTLE_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
/*!
@@ -35,7 +36,7 @@
* 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 : virtual public gr_sync_block
+class GR_CORE_API gr_throttle : virtual public gr_sync_block
{
public:
typedef boost::shared_ptr<gr_throttle> sptr;
@@ -44,6 +45,6 @@ public:
virtual void set_sample_rate(double rate) = 0;
};
-gr_throttle::sptr gr_make_throttle(size_t itemsize, double samples_per_sec);
+GR_CORE_API gr_throttle::sptr gr_make_throttle(size_t itemsize, double samples_per_sec);
#endif /* INCLUDED_GR_THROTTLE_H */
diff --git a/gnuradio-core/src/lib/general/gr_transcendental.h b/gnuradio-core/src/lib/general/gr_transcendental.h
index 1b237c44a..25c6eb75d 100644
--- a/gnuradio-core/src/lib/general/gr_transcendental.h
+++ b/gnuradio-core/src/lib/general/gr_transcendental.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_TRANSCENDENTAL_H
#define INCLUDED_GR_TRANSCENDENTAL_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <string>
@@ -35,12 +36,12 @@
*
* output[i] = trans_fcn(input[i])
*/
-class gr_transcendental : virtual public gr_sync_block{
+class GR_CORE_API gr_transcendental : virtual public gr_sync_block{
public:
typedef boost::shared_ptr<gr_transcendental> sptr;
};
-gr_transcendental::sptr gr_make_transcendental(
+GR_CORE_API gr_transcendental::sptr gr_make_transcendental(
const std::string &name,
const std::string &type = "float"
);
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 3b83c893f..8e8836c2c 100644
--- a/gnuradio-core/src/lib/general/gr_uchar_to_float.h
+++ b/gnuradio-core/src/lib/general/gr_uchar_to_float.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_UCHAR_TO_FLOAT_H
#define INCLUDED_GR_UCHAR_TO_FLOAT_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_uchar_to_float;
typedef boost::shared_ptr<gr_uchar_to_float> gr_uchar_to_float_sptr;
-gr_uchar_to_float_sptr
+GR_CORE_API gr_uchar_to_float_sptr
gr_make_uchar_to_float ();
/*!
@@ -36,9 +37,9 @@ gr_make_uchar_to_float ();
* \ingroup converter_blk
*/
-class gr_uchar_to_float : public gr_sync_block
+class GR_CORE_API gr_uchar_to_float : public gr_sync_block
{
- friend gr_uchar_to_float_sptr gr_make_uchar_to_float ();
+ friend GR_CORE_API gr_uchar_to_float_sptr gr_make_uchar_to_float ();
gr_uchar_to_float ();
public:
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 e2be2c59c..056c69dc1 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
@@ -23,11 +23,12 @@
#ifndef INCLUDED_GR_UNPACK_K_BITS_BB_H
#define INCLUDED_GR_UNPACK_K_BITS_BB_H
+#include <gr_core_api.h>
#include <gr_sync_interpolator.h>
class gr_unpack_k_bits_bb;
typedef boost::shared_ptr<gr_unpack_k_bits_bb> gr_unpack_k_bits_bb_sptr;
-gr_unpack_k_bits_bb_sptr gr_make_unpack_k_bits_bb (unsigned k);
+GR_CORE_API gr_unpack_k_bits_bb_sptr gr_make_unpack_k_bits_bb (unsigned k);
class gr_unpack_k_bits_bb;
@@ -35,10 +36,10 @@ class gr_unpack_k_bits_bb;
* \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
+class GR_CORE_API gr_unpack_k_bits_bb : public gr_sync_interpolator
{
private:
- friend gr_unpack_k_bits_bb_sptr gr_make_unpack_k_bits_bb (unsigned k);
+ friend GR_CORE_API gr_unpack_k_bits_bb_sptr gr_make_unpack_k_bits_bb (unsigned k);
gr_unpack_k_bits_bb (unsigned k);
diff --git a/gnuradio-core/src/lib/general/gr_vco_f.h b/gnuradio-core/src/lib/general/gr_vco_f.h
index 2bdf60899..b7524d581 100644
--- a/gnuradio-core/src/lib/general/gr_vco_f.h
+++ b/gnuradio-core/src/lib/general/gr_vco_f.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_VCO_F_H
#define INCLUDED_GR_VCO_F_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_fxpt_vco.h>
@@ -37,7 +38,7 @@ class gr_vco_f;
typedef boost::shared_ptr<gr_vco_f> gr_vco_f_sptr;
-gr_vco_f_sptr gr_make_vco_f(double sampling_rate, double sensitivity, double amplitude);
+GR_CORE_API gr_vco_f_sptr gr_make_vco_f(double sampling_rate, double sensitivity, double amplitude);
/*!
* \brief VCO - Voltage controlled oscillator
@@ -45,9 +46,9 @@ gr_vco_f_sptr gr_make_vco_f(double sampling_rate, double sensitivity, double amp
*
* input: float stream of control voltages; output: float oscillator output
*/
-class gr_vco_f : public gr_sync_block
+class GR_CORE_API gr_vco_f : public gr_sync_block
{
- friend gr_vco_f_sptr gr_make_vco_f(double sampling_rate, double sensitivity, double amplitude);
+ friend GR_CORE_API gr_vco_f_sptr gr_make_vco_f(double sampling_rate, double sensitivity, double amplitude);
/*!
* \brief VCO - Voltage controlled oscillator
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 de6cc2a8b..d2fa8c7ab 100644
--- a/gnuradio-core/src/lib/general/gr_vector_to_stream.h
+++ b/gnuradio-core/src/lib/general/gr_vector_to_stream.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_VECTOR_TO_STREAM_H
#define INCLUDED_GR_VECTOR_TO_STREAM_H
+#include <gr_core_api.h>
#include <gr_sync_interpolator.h>
class gr_vector_to_stream;
typedef boost::shared_ptr<gr_vector_to_stream> gr_vector_to_stream_sptr;
-gr_vector_to_stream_sptr
+GR_CORE_API gr_vector_to_stream_sptr
gr_make_vector_to_stream (size_t item_size, size_t nitems_per_block);
@@ -36,9 +37,9 @@ 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 slicedice_blk
*/
-class gr_vector_to_stream : public gr_sync_interpolator
+class GR_CORE_API gr_vector_to_stream : public gr_sync_interpolator
{
- friend gr_vector_to_stream_sptr
+ friend GR_CORE_API gr_vector_to_stream_sptr
gr_make_vector_to_stream (size_t item_size, size_t nitems_per_block);
protected:
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 d5ba7acf9..04ac941a1 100644
--- a/gnuradio-core/src/lib/general/gr_vector_to_streams.h
+++ b/gnuradio-core/src/lib/general/gr_vector_to_streams.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_VECTOR_TO_STREAMS_H
#define INCLUDED_GR_VECTOR_TO_STREAMS_H
+#include <gr_core_api.h>
#include <gr_sync_interpolator.h>
class gr_vector_to_streams;
typedef boost::shared_ptr<gr_vector_to_streams> gr_vector_to_streams_sptr;
-gr_vector_to_streams_sptr
+GR_CORE_API gr_vector_to_streams_sptr
gr_make_vector_to_streams (size_t item_size, size_t nstreams);
@@ -36,9 +37,9 @@ 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 slicedice_blk
*/
-class gr_vector_to_streams : public gr_sync_block
+class GR_CORE_API gr_vector_to_streams : public gr_sync_block
{
- friend gr_vector_to_streams_sptr
+ friend GR_CORE_API gr_vector_to_streams_sptr
gr_make_vector_to_streams (size_t item_size, size_t nstreams);
protected:
diff --git a/gnuradio-core/src/lib/general/gr_wavelet_ff.h b/gnuradio-core/src/lib/general/gr_wavelet_ff.h
index dcfb595e5..107a50fe2 100644
--- a/gnuradio-core/src/lib/general/gr_wavelet_ff.h
+++ b/gnuradio-core/src/lib/general/gr_wavelet_ff.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_WAVELET_FF_H
#define INCLUDED_GR_WAVELET_FF_H
+#include <gr_core_api.h>
#include <iostream>
#include <gr_sync_block.h>
@@ -31,7 +32,7 @@
class gr_wavelet_ff;
typedef boost::shared_ptr<gr_wavelet_ff> gr_wavelet_ff_sptr;
-gr_wavelet_ff_sptr
+GR_CORE_API gr_wavelet_ff_sptr
gr_make_wavelet_ff(int size = 1024,
int order = 20,
bool forward = true);
@@ -41,7 +42,7 @@ gr_make_wavelet_ff(int size = 1024,
* \ingroup wavelet_blk
*/
-class gr_wavelet_ff : public gr_sync_block
+class GR_CORE_API gr_wavelet_ff : public gr_sync_block
{
int d_size;
int d_order;
@@ -50,7 +51,7 @@ class gr_wavelet_ff : public gr_sync_block
gsl_wavelet_workspace *d_workspace;
double *d_temp;
- friend gr_wavelet_ff_sptr
+ friend GR_CORE_API gr_wavelet_ff_sptr
gr_make_wavelet_ff(int size,
int order,
bool forward);
diff --git a/gnuradio-core/src/lib/general/gr_wvps_ff.h b/gnuradio-core/src/lib/general/gr_wvps_ff.h
index af122d0fc..7c8f26066 100644
--- a/gnuradio-core/src/lib/general/gr_wvps_ff.h
+++ b/gnuradio-core/src/lib/general/gr_wvps_ff.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_WVPS_FF_H
#define INCLUDED_GR_WVPS_FF_H
+#include <gr_core_api.h>
#include <gr_sync_decimator.h>
class gr_wvps_ff;
typedef boost::shared_ptr<gr_wvps_ff> gr_wvps_ff_sptr;
-gr_wvps_ff_sptr
+GR_CORE_API gr_wvps_ff_sptr
gr_make_wvps_ff(int ilen);
@@ -36,9 +37,9 @@ 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
+class GR_CORE_API gr_wvps_ff : public gr_sync_block
{
- friend gr_wvps_ff_sptr
+ friend GR_CORE_API gr_wvps_ff_sptr
gr_make_wvps_ff(int ilen);
int d_ilen;
diff --git a/gnuradio-core/src/lib/general/gri_agc2_cc.h b/gnuradio-core/src/lib/general/gri_agc2_cc.h
index 441d1e459..b0a027aad 100644
--- a/gnuradio-core/src/lib/general/gri_agc2_cc.h
+++ b/gnuradio-core/src/lib/general/gri_agc2_cc.h
@@ -23,6 +23,7 @@
#ifndef _GRI_AGC2_CC_H_
#define _GRI_AGC2_CC_H_
+#include <gr_core_api.h>
#include <math.h>
/*!
@@ -30,7 +31,7 @@
*
* For Power the absolute value of the complex number is used.
*/
-class gri_agc2_cc {
+class GR_CORE_API gri_agc2_cc {
public:
gri_agc2_cc (float attack_rate = 1e-1, float decay_rate = 1e-2, float reference = 1.0,
diff --git a/gnuradio-core/src/lib/general/gri_agc2_ff.h b/gnuradio-core/src/lib/general/gri_agc2_ff.h
index a06dab78c..ee70c2537 100644
--- a/gnuradio-core/src/lib/general/gri_agc2_ff.h
+++ b/gnuradio-core/src/lib/general/gri_agc2_ff.h
@@ -23,6 +23,7 @@
#ifndef _GRI_AGC2_FF_H_
#define _GRI_AGC2_FF_H_
+#include <gr_core_api.h>
#include <math.h>
/*!
@@ -31,7 +32,7 @@
* Power is approximated by absolute value
*/
-class gri_agc2_ff {
+class GR_CORE_API gri_agc2_ff {
public:
gri_agc2_ff (float attack_rate = 1e-1, float decay_rate = 1e-2, float reference = 1.0,
diff --git a/gnuradio-core/src/lib/general/gri_agc_cc.h b/gnuradio-core/src/lib/general/gri_agc_cc.h
index bc31d9a3d..74dfdf1dc 100644
--- a/gnuradio-core/src/lib/general/gri_agc_cc.h
+++ b/gnuradio-core/src/lib/general/gri_agc_cc.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GRI_AGC_CC_H
#define INCLUDED_GRI_AGC_CC_H
+#include <gr_core_api.h>
#include <math.h>
/*!
@@ -31,7 +32,7 @@
* For Power the absolute value of the complex number is used.
*/
-class gri_agc_cc {
+class GR_CORE_API gri_agc_cc {
public:
gri_agc_cc (float rate = 1e-4, float reference = 1.0,
diff --git a/gnuradio-core/src/lib/general/gri_agc_ff.h b/gnuradio-core/src/lib/general/gri_agc_ff.h
index de609a8d4..753bbe275 100644
--- a/gnuradio-core/src/lib/general/gri_agc_ff.h
+++ b/gnuradio-core/src/lib/general/gri_agc_ff.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GRI_AGC_FF_H
#define INCLUDED_GRI_AGC_FF_H
+#include <gr_core_api.h>
#include <math.h>
/*!
@@ -30,7 +31,7 @@
*
* Power is approximated by absolute value
*/
-class gri_agc_ff {
+class GR_CORE_API gri_agc_ff {
public:
gri_agc_ff (float rate = 1e-4, float reference = 1.0,
diff --git a/gnuradio-core/src/lib/general/gri_char_to_float.h b/gnuradio-core/src/lib/general/gri_char_to_float.h
index f4703bef7..890d482b5 100644
--- a/gnuradio-core/src/lib/general/gri_char_to_float.h
+++ b/gnuradio-core/src/lib/general/gri_char_to_float.h
@@ -23,10 +23,12 @@
#ifndef INCLUDED_GRI_CHAR_TO_FLOAT_H
#define INCLUDED_GRI_CHAR_TO_FLOAT_H
+#include <gr_core_api.h>
+
/*
* convert array of chars to floats
*/
-void gri_char_to_float (const char *in, float *out, int nsamples);
+GR_CORE_API void gri_char_to_float (const char *in, float *out, int nsamples);
-#endif /* INCLUDED_GRI_CHAR_TO_FLOAT_H */
+#endif /* INCLUDED_GRI_CHAR_TO_FLOAT_H */ \ No newline at end of file
diff --git a/gnuradio-core/src/lib/general/gri_control_loop.cc b/gnuradio-core/src/lib/general/gri_control_loop.cc
index affdeefc9..4c64bb922 100644
--- a/gnuradio-core/src/lib/general/gri_control_loop.cc
+++ b/gnuradio-core/src/lib/general/gri_control_loop.cc
@@ -20,6 +20,10 @@
* Boston, MA 02110-1301, USA.
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <gri_control_loop.h>
#include <gr_math.h>
#include <stdexcept>
diff --git a/gnuradio-core/src/lib/general/gri_control_loop.h b/gnuradio-core/src/lib/general/gri_control_loop.h
index a85625bbd..3aeac58f7 100644
--- a/gnuradio-core/src/lib/general/gri_control_loop.h
+++ b/gnuradio-core/src/lib/general/gri_control_loop.h
@@ -23,7 +23,9 @@
#ifndef GRI_CONTROL_LOOP
#define GRI_CONTROL_LOOP
-class gri_control_loop
+#include <gr_core_api.h>
+
+class GR_CORE_API gri_control_loop
{
protected:
float d_phase, d_freq;
diff --git a/gnuradio-core/src/lib/general/gri_debugger_hook.h b/gnuradio-core/src/lib/general/gri_debugger_hook.h
index 60c90685e..cf227af8f 100644
--- a/gnuradio-core/src/lib/general/gri_debugger_hook.h
+++ b/gnuradio-core/src/lib/general/gri_debugger_hook.h
@@ -23,6 +23,8 @@
#ifndef INCLUDED_GRI_DEBUGGER_HOOK_H
#define INCLUDED_GRI_DEBUGGER_HOOK_H
-void gri_debugger_hook ();
+#include <gr_core_api.h>
-#endif /* INCLUDED_GRI_DEBUGGER_HOOK_H */
+GR_CORE_API void gri_debugger_hook ();
+
+#endif /* INCLUDED_GRI_DEBUGGER_HOOK_H */ \ No newline at end of file
diff --git a/gnuradio-core/src/lib/general/gri_fft.cc b/gnuradio-core/src/lib/general/gri_fft.cc
index f20b15ca0..0df1af25d 100644
--- a/gnuradio-core/src/lib/general/gri_fft.cc
+++ b/gnuradio-core/src/lib/general/gri_fft.cc
@@ -23,6 +23,19 @@
#include <gri_fft.h>
#include <gr_sys_paths.h>
#include <fftw3.h>
+
+#ifdef _MSC_VER //http://www.fftw.org/install/windows.html#DLLwisdom
+static void my_fftw_write_char(char c, void *f) { fputc(c, (FILE *) f); }
+#define fftw_export_wisdom_to_file(f) fftw_export_wisdom(my_fftw_write_char, (void*) (f))
+#define fftwf_export_wisdom_to_file(f) fftwf_export_wisdom(my_fftw_write_char, (void*) (f))
+#define fftwl_export_wisdom_to_file(f) fftwl_export_wisdom(my_fftw_write_char, (void*) (f))
+
+static int my_fftw_read_char(void *f) { return fgetc((FILE *) f); }
+#define fftw_import_wisdom_from_file(f) fftw_import_wisdom(my_fftw_read_char, (void*) (f))
+#define fftwf_import_wisdom_from_file(f) fftwf_import_wisdom(my_fftw_read_char, (void*) (f))
+#define fftwl_import_wisdom_from_file(f) fftwl_import_wisdom(my_fftw_read_char, (void*) (f))
+#endif //_MSC_VER
+
#include <gr_complex.h>
#include <stdlib.h>
#include <string.h>
diff --git a/gnuradio-core/src/lib/general/gri_fft.h b/gnuradio-core/src/lib/general/gri_fft.h
index 9ffcc5a50..91a82fb55 100644
--- a/gnuradio-core/src/lib/general/gri_fft.h
+++ b/gnuradio-core/src/lib/general/gri_fft.h
@@ -26,6 +26,7 @@
* Wrappers for FFTW single precision 1d dft
*/
+#include <gr_core_api.h>
#include <gr_complex.h>
#include <boost/thread.hpp>
@@ -33,7 +34,7 @@
* \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 {
+class GR_CORE_API gri_fft_planner {
public:
typedef boost::mutex::scoped_lock scoped_lock;
/*!
@@ -46,7 +47,7 @@ public:
* \brief FFT: complex in, complex out
* \ingroup misc
*/
-class gri_fft_complex {
+class GR_CORE_API gri_fft_complex {
int d_fft_size;
gr_complex *d_inbuf;
gr_complex *d_outbuf;
@@ -77,7 +78,7 @@ public:
* \brief FFT: real in, complex out
* \ingroup misc
*/
-class gri_fft_real_fwd {
+class GR_CORE_API gri_fft_real_fwd {
int d_fft_size;
float *d_inbuf;
gr_complex *d_outbuf;
@@ -108,7 +109,7 @@ public:
* \brief FFT: complex in, float out
* \ingroup misc
*/
-class gri_fft_real_rev {
+class GR_CORE_API gri_fft_real_rev {
int d_fft_size;
gr_complex *d_inbuf;
float *d_outbuf;
diff --git a/gnuradio-core/src/lib/general/gri_float_to_char.h b/gnuradio-core/src/lib/general/gri_float_to_char.h
index 95cc8ea8d..184592a69 100644
--- a/gnuradio-core/src/lib/general/gri_float_to_char.h
+++ b/gnuradio-core/src/lib/general/gri_float_to_char.h
@@ -23,10 +23,11 @@
#ifndef INCLUDED_GRI_FLOAT_TO_CHAR_H
#define INCLUDED_GRI_FLOAT_TO_CHAR_H
+#include <gr_core_api.h>
+
/*!
* convert array of floats to chars with rounding and saturation.
*/
-void gri_float_to_char (const float *in, char *out, int nsamples);
+GR_CORE_API void gri_float_to_char (const float *in, char *out, int nsamples);
#endif /* INCLUDED_GRI_FLOAT_TO_CHAR_H */
-
diff --git a/gnuradio-core/src/lib/general/gri_float_to_short.h b/gnuradio-core/src/lib/general/gri_float_to_short.h
index e36e25de6..6d814b2b3 100644
--- a/gnuradio-core/src/lib/general/gri_float_to_short.h
+++ b/gnuradio-core/src/lib/general/gri_float_to_short.h
@@ -23,10 +23,11 @@
#ifndef INCLUDED_GRI_FLOAT_TO_SHORT_H
#define INCLUDED_GRI_FLOAT_TO_SHORT_H
+#include <gr_core_api.h>
+
/*!
* convert array of floats to shorts with rounding and saturation.
*/
-void gri_float_to_short (const float *in, short *out, int nsamples);
+GR_CORE_API void gri_float_to_short (const float *in, short *out, int nsamples);
#endif /* INCLUDED_GRI_FLOAT_TO_SHORT_H */
-
diff --git a/gnuradio-core/src/lib/general/gri_float_to_uchar.h b/gnuradio-core/src/lib/general/gri_float_to_uchar.h
index e413e725f..ff549333e 100644
--- a/gnuradio-core/src/lib/general/gri_float_to_uchar.h
+++ b/gnuradio-core/src/lib/general/gri_float_to_uchar.h
@@ -23,10 +23,11 @@
#ifndef INCLUDED_GRI_FLOAT_TO_UCHAR_H
#define INCLUDED_GRI_FLOAT_TO_UCHAR_H
+#include <gr_core_api.h>
+
/*!
* convert array of floats to unsigned chars with rounding and saturation.
*/
-void gri_float_to_uchar (const float *in, unsigned char *out, int nsamples);
+GR_CORE_API void gri_float_to_uchar (const float *in, unsigned char *out, int nsamples);
#endif /* INCLUDED_GRI_FLOAT_TO_UCHAR_H */
-
diff --git a/gnuradio-core/src/lib/general/gri_glfsr.h b/gnuradio-core/src/lib/general/gri_glfsr.h
index 7dd5f8660..e6d28cf45 100644
--- a/gnuradio-core/src/lib/general/gri_glfsr.h
+++ b/gnuradio-core/src/lib/general/gri_glfsr.h
@@ -23,6 +23,8 @@
#ifndef INCLUDED_GRI_GLFSR_H
#define INCLUDED_GRI_GLFSR_H
+#include <gr_core_api.h>
+
/*!
* \brief Galois Linear Feedback Shift Register using specified polynomial mask
* \ingroup misc
@@ -30,7 +32,7 @@
* Generates a maximal length pseudo-random sequence of length 2^degree-1
*/
-class gri_glfsr
+class GR_CORE_API gri_glfsr
{
private:
int d_shift_register;
@@ -52,4 +54,4 @@ class gri_glfsr
int mask() const { return d_mask; }
};
-#endif /* INCLUDED_GRI_GLFSR_H */
+#endif /* INCLUDED_GRI_GLFSR_H */ \ No newline at end of file
diff --git a/gnuradio-core/src/lib/general/gri_interleaved_short_to_complex.h b/gnuradio-core/src/lib/general/gri_interleaved_short_to_complex.h
index 09d915f7a..107e2f778 100644
--- a/gnuradio-core/src/lib/general/gri_interleaved_short_to_complex.h
+++ b/gnuradio-core/src/lib/general/gri_interleaved_short_to_complex.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GRI_INTERLEAVED_SHORT_TO_COMPLEX_H
#define INCLUDED_GRI_INTERLEAVED_SHORT_TO_COMPLEX_H
+#include <gr_core_api.h>
#include <gr_complex.h>
/*
@@ -30,7 +31,7 @@
* the shorts contains real, imaginary, real, imaginary...
* nsamples is the number of shorts; it must be even.
*/
-void gri_interleaved_short_to_complex (const short *in, gr_complex *out, int nsamples);
+GR_CORE_API void gri_interleaved_short_to_complex (const short *in, gr_complex *out, int nsamples);
#endif /* INCLUDED_GRI_INTERLEAVED_SHORT_TO_COMPLEX_H */
diff --git a/gnuradio-core/src/lib/general/gri_lfsr.h b/gnuradio-core/src/lib/general/gri_lfsr.h
index f691e36ec..dc9358572 100644
--- a/gnuradio-core/src/lib/general/gri_lfsr.h
+++ b/gnuradio-core/src/lib/general/gri_lfsr.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GRI_LFSR_H
#define INCLUDED_GRI_LFSR_H
+#include <gr_core_api.h>
#include <stdexcept>
#include <stdint.h>
@@ -81,7 +82,7 @@
*
*/
-class gri_lfsr
+class GR_CORE_API gri_lfsr
{
private:
uint32_t d_shift_register;
diff --git a/gnuradio-core/src/lib/general/gri_lfsr_15_1_0.h b/gnuradio-core/src/lib/general/gri_lfsr_15_1_0.h
index 798f2faad..7405ffbaa 100644
--- a/gnuradio-core/src/lib/general/gri_lfsr_15_1_0.h
+++ b/gnuradio-core/src/lib/general/gri_lfsr_15_1_0.h
@@ -23,6 +23,8 @@
#ifndef INCLUDED_GRI_LFSR_15_1_0_H
#define INCLUDED_GRI_LFSR_15_1_0_H
+#include <gr_core_api.h>
+
/*!
* \brief Linear Feedback Shift Register using primitive polynomial x^15 + x + 1
* \ingroup misc
@@ -30,7 +32,7 @@
* Generates a maximal length pseudo-random sequence of length 2^15 - 1 bits.
*/
-class gri_lfsr_15_1_0 {
+class GR_CORE_API gri_lfsr_15_1_0 {
unsigned long d_sr; // shift register
public:
@@ -55,4 +57,4 @@ class gri_lfsr_15_1_0 {
}
};
-#endif /* INCLUDED_GRI_LFSR_15_1_0_H */
+#endif /* INCLUDED_GRI_LFSR_15_1_0_H */ \ No newline at end of file
diff --git a/gnuradio-core/src/lib/general/gri_lfsr_32k.h b/gnuradio-core/src/lib/general/gri_lfsr_32k.h
index 33e7ae3a1..5c0396b50 100644
--- a/gnuradio-core/src/lib/general/gri_lfsr_32k.h
+++ b/gnuradio-core/src/lib/general/gri_lfsr_32k.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GRI_LFSR_32k_H
#define INCLUDED_GRI_LFSR_32k_H
+#include <gr_core_api.h>
#include <gri_lfsr_15_1_0.h>
/*!
@@ -33,7 +34,7 @@
* of the sequence.
*/
-class gri_lfsr_32k {
+class GR_CORE_API gri_lfsr_32k {
gri_lfsr_15_1_0 d_lfsr;
unsigned int d_count;
diff --git a/gnuradio-core/src/lib/general/gri_short_to_float.h b/gnuradio-core/src/lib/general/gri_short_to_float.h
index ce4193062..51767efab 100644
--- a/gnuradio-core/src/lib/general/gri_short_to_float.h
+++ b/gnuradio-core/src/lib/general/gri_short_to_float.h
@@ -23,10 +23,12 @@
#ifndef INCLUDED_GRI_SHORT_TO_FLOAT_H
#define INCLUDED_GRI_SHORT_TO_FLOAT_H
+#include <gr_core_api.h>
+
/*
* convert array of shorts to floats
*/
-void gri_short_to_float (const short *in, float *out, int nsamples);
+GR_CORE_API void gri_short_to_float (const short *in, float *out, int nsamples);
-#endif /* INCLUDED_GRI_SHORT_TO_FLOAT_H */
+#endif /* INCLUDED_GRI_SHORT_TO_FLOAT_H */ \ No newline at end of file
diff --git a/gnuradio-core/src/lib/general/gri_uchar_to_float.h b/gnuradio-core/src/lib/general/gri_uchar_to_float.h
index 7a9f11ba6..9f342989d 100644
--- a/gnuradio-core/src/lib/general/gri_uchar_to_float.h
+++ b/gnuradio-core/src/lib/general/gri_uchar_to_float.h
@@ -23,10 +23,12 @@
#ifndef INCLUDED_GRI_UCHAR_TO_FLOAT_H
#define INCLUDED_GRI_UCHAR_TO_FLOAT_H
+#include <gr_core_api.h>
+
/*
* convert array of unsigned chars to floats
*/
-void gri_uchar_to_float (const unsigned char *in, float *out, int nsamples);
+GR_CORE_API void gri_uchar_to_float (const unsigned char *in, float *out, int nsamples);
-#endif /* INCLUDED_GRI_UCHAR_TO_FLOAT_H */
+#endif /* INCLUDED_GRI_UCHAR_TO_FLOAT_H */ \ No newline at end of file
diff --git a/gnuradio-core/src/lib/general/malloc16.c b/gnuradio-core/src/lib/general/malloc16.c
index 331751499..2cc6135e7 100644
--- a/gnuradio-core/src/lib/general/malloc16.c
+++ b/gnuradio-core/src/lib/general/malloc16.c
@@ -7,7 +7,6 @@
#include "malloc16.h"
#include <string.h>
-#include <strings.h>
void *malloc16Align(int size){
void *p;
diff --git a/gnuradio-core/src/lib/general/malloc16.h b/gnuradio-core/src/lib/general/malloc16.h
index fc97f267d..6b1a3fb08 100644
--- a/gnuradio-core/src/lib/general/malloc16.h
+++ b/gnuradio-core/src/lib/general/malloc16.h
@@ -20,15 +20,17 @@
* Boston, MA 02110-1301, USA.
*/
+#include <gr_core_api.h>
+
#ifdef __cplusplus
extern "C" {
#endif
#include <stdlib.h>
-void *malloc16Align(int size);
-void *calloc16Align(size_t nmemb,size_t size);
-void free16Align(void *p);
+GR_CORE_API void *malloc16Align(int size);
+GR_CORE_API void *calloc16Align(size_t nmemb,size_t size);
+GR_CORE_API void free16Align(void *p);
#ifdef __cplusplus
}
diff --git a/gnuradio-core/src/lib/general/qa_general.h b/gnuradio-core/src/lib/general/qa_general.h
index 577c9d7fb..7da188266 100644
--- a/gnuradio-core/src/lib/general/qa_general.h
+++ b/gnuradio-core/src/lib/general/qa_general.h
@@ -23,11 +23,12 @@
#ifndef _QA_GENERAL_H_
#define _QA_GENERAL_H_
+#include <gruel/attributes.h>
#include <cppunit/TestSuite.h>
//! collect all the tests for the gr directory
-class qa_general {
+class __GR_ATTR_EXPORT qa_general {
public:
//! return suite of tests for all of gr directory
static CppUnit::TestSuite *suite ();
diff --git a/gnuradio-core/src/lib/general/qa_gri_lfsr.cc b/gnuradio-core/src/lib/general/qa_gri_lfsr.cc
index 9f8b62dcf..9625071d8 100644
--- a/gnuradio-core/src/lib/general/qa_gri_lfsr.cc
+++ b/gnuradio-core/src/lib/general/qa_gri_lfsr.cc
@@ -24,6 +24,7 @@
#include <cppunit/TestAssert.h>
#include <stdio.h>
#include <string.h>
+#include <vector>
void
qa_gri_lfsr::test_lfsr ()
@@ -90,12 +91,12 @@ qa_gri_lfsr::test_scrambler()
1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, };
int len = sizeof(src);
- unsigned char actual[len];
+ std::vector<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);
+ CPPUNIT_ASSERT(memcmp(expected, &actual[0], len) == 0);
}
void
@@ -132,10 +133,10 @@ qa_gri_lfsr::test_descrambler()
0, 0, 0, 0, 0, 0, 0, 0, 0 };
int len = sizeof(src);
- unsigned char actual[len];
+ std::vector<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);
+ CPPUNIT_ASSERT(memcmp(expected, &actual[0], len) == 0);
}
diff --git a/gnuradio-core/src/lib/gengen/CMakeLists.txt b/gnuradio-core/src/lib/gengen/CMakeLists.txt
new file mode 100644
index 000000000..e3da278f2
--- /dev/null
+++ b/gnuradio-core/src/lib/gengen/CMakeLists.txt
@@ -0,0 +1,179 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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 included, use CMake directory variables
+########################################################################
+
+########################################################################
+# generate the python helper script which calls into the build utils
+########################################################################
+file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py "
+#!${PYTHON_EXECUTABLE}
+
+import sys, os, re
+sys.path.append('${GR_CORE_PYTHONPATH}')
+os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
+os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
+
+if __name__ == '__main__':
+ import build_utils
+ root, inp = sys.argv[1:3]
+ for sig in sys.argv[3:]:
+ name = re.sub ('X+', sig, root)
+ d = build_utils.standard_dict(name, sig)
+ build_utils.expand_template(d, inp)
+
+")
+
+########################################################################
+# generation helper macro to generate various files from template
+########################################################################
+macro(expand_h_cc_i root)
+
+ foreach(ext h cc i)
+ #make a list of all the generated files
+ unset(expanded_files_${ext})
+ foreach(sig ${ARGN})
+ string(REGEX REPLACE "X+" ${sig} name ${root})
+ list(APPEND expanded_files_${ext} ${CMAKE_CURRENT_BINARY_DIR}/${name}.${ext})
+ endforeach(sig)
+
+ #create a command to generate the files
+ add_custom_command(
+ OUTPUT ${expanded_files_${ext}}
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.${ext}.t
+ COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
+ ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
+ ${root} ${root}.${ext}.t ${ARGN}
+ )
+ endforeach(ext)
+
+ #make source files depends on headers to force generation
+ set_source_files_properties(${expanded_files_cc}
+ PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
+ )
+
+ #install rules for the generated cc, h, and i files
+ list(APPEND generated_gengen_sources ${expanded_files_cc})
+ list(APPEND generated_gengen_includes ${expanded_files_h})
+ list(APPEND generated_gengen_swigs ${expanded_files_i})
+
+endmacro(expand_h_cc_i)
+
+########################################################################
+# Invoke macro to generate various sources
+########################################################################
+expand_h_cc_i(gr_vector_source_X b s i f c)
+expand_h_cc_i(gr_vector_sink_X b s i f c)
+expand_h_cc_i(gr_noise_source_X s i f c)
+expand_h_cc_i(gr_sig_source_X s i f c)
+
+expand_h_cc_i(gr_add_const_XX ss ii ff cc sf)
+expand_h_cc_i(gr_multiply_const_XX ss ii ff cc)
+expand_h_cc_i(gr_add_XX ss ii ff cc)
+expand_h_cc_i(gr_sub_XX ss ii ff cc)
+expand_h_cc_i(gr_multiply_XX ss ii ff cc)
+expand_h_cc_i(gr_divide_XX ss ii ff cc)
+expand_h_cc_i(gr_mute_XX ss ii ff cc)
+expand_h_cc_i(gr_add_const_vXX ss ii ff cc)
+expand_h_cc_i(gr_multiply_const_vXX ss ii ff cc)
+expand_h_cc_i(gr_integrate_XX ss ii ff cc)
+expand_h_cc_i(gr_moving_average_XX ss ii ff cc)
+
+expand_h_cc_i(gr_chunks_to_symbols_XX bf bc sf sc if ic)
+expand_h_cc_i(gr_unpacked_to_packed_XX bb ss ii)
+expand_h_cc_i(gr_packed_to_unpacked_XX bb ss ii)
+expand_h_cc_i(gr_xor_XX bb ss ii)
+expand_h_cc_i(gr_and_XX bb ss ii)
+expand_h_cc_i(gr_and_const_XX bb ss ii)
+expand_h_cc_i(gr_or_XX bb ss ii)
+expand_h_cc_i(gr_not_XX bb ss ii)
+expand_h_cc_i(gr_sample_and_hold_XX bb ss ii ff)
+expand_h_cc_i(gr_argmax_XX fs is ss)
+expand_h_cc_i(gr_max_XX ff ii ss)
+expand_h_cc_i(gr_peak_detector_XX fb ib sb)
+
+add_custom_target(gengen_generated DEPENDS
+ ${generated_gengen_includes}
+ ${generated_gengen_swigs}
+)
+
+########################################################################
+# Create the master gengen swig include files
+########################################################################
+file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/gengen_generated.py "
+import os, sys
+if __name__ == '__main__':
+ incs = sys.argv[2:]
+ h_incs = '\\n'.join(['#include<%s.h>'%(os.path.splitext(os.path.basename(inc))[0]) for inc in incs])
+ i_incs = '\\n'.join(['%%include<%s>'%(os.path.basename(inc)) for inc in incs])
+ open(sys.argv[1], 'w').write('''
+//
+// This file is machine generated. All edits will be overwritten
+//
+
+%%{
+%s
+%%}
+
+%s
+
+'''%(h_incs, i_incs))
+")
+
+add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/gengen_generated.i
+ DEPENDS ${generated_gengen_swigs}
+ COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
+ ${CMAKE_CURRENT_BINARY_DIR}/gengen_generated.py
+ ${CMAKE_CURRENT_BINARY_DIR}/gengen_generated.i
+ ${generated_gengen_swigs}
+)
+
+add_custom_target(gengen_generated_index DEPENDS
+ ${CMAKE_CURRENT_BINARY_DIR}/gengen_generated.i
+)
+
+########################################################################
+# Handle the generated sources + a few non-generated ones
+########################################################################
+list(APPEND gnuradio_core_sources
+ ${generated_gengen_sources}
+)
+
+install(FILES
+ ${generated_gengen_includes}
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_endianness.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_noise_type.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_sig_source_waveform.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "core_devel"
+)
+
+if(ENABLE_PYTHON)
+ install(FILES
+ ${generated_gengen_swigs}
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_endianness.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gengen.i
+ ${CMAKE_CURRENT_BINARY_DIR}/gengen_generated.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "core_swig"
+ )
+endif(ENABLE_PYTHON)
diff --git a/gnuradio-core/src/lib/gengen/gr_add_XX.h.t b/gnuradio-core/src/lib/gengen/gr_add_XX.h.t
index 91dd9196a..f0e857abf 100644
--- a/gnuradio-core/src/lib/gengen/gr_add_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_add_XX.h.t
@@ -25,12 +25,13 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1);
/*!
* \brief output = sum (input_0, input_1, ...)
@@ -38,9 +39,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
*
* Add across all input streams.
*/
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
@NAME@ (size_t vlen);
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
index 8e9884104..5b46d0f89 100644
--- a/gnuradio-core/src/lib/gengen/gr_add_const_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_add_const_XX.h.t
@@ -25,20 +25,21 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
/*!
* \brief output = input + constant
* \ingroup math_blk
*/
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
@O_TYPE@ d_k; // the constant
@NAME@ (@O_TYPE@ k);
diff --git a/gnuradio-core/src/lib/gengen/gr_add_const_vXX.h.t b/gnuradio-core/src/lib/gengen/gr_add_const_vXX.h.t
index 574fc686c..9d986e960 100755..100644
--- a/gnuradio-core/src/lib/gengen/gr_add_const_vXX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_add_const_vXX.h.t
@@ -25,20 +25,21 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k);
+GR_CORE_API @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
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k);
+ friend GR_CORE_API @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);
diff --git a/gnuradio-core/src/lib/gengen/gr_and_XX.h.t b/gnuradio-core/src/lib/gengen/gr_and_XX.h.t
index 6152942dd..dbb225907 100644
--- a/gnuradio-core/src/lib/gengen/gr_and_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_and_XX.h.t
@@ -25,12 +25,13 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ ();
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
/*!
* \brief output = input_0 & input_1 & , ... & input_N)
@@ -38,9 +39,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
*
* bitwise boolean and across all input streams.
*/
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ ();
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
@NAME@ ();
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
index 3119611f1..ceffc3066 100644
--- a/gnuradio-core/src/lib/gengen/gr_and_const_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_and_const_XX.h.t
@@ -25,12 +25,13 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
/*!
* \brief output_N = input_N & value
@@ -38,9 +39,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
*
* bitwise boolean and of const to the data stream.
*/
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
@O_TYPE@ d_k; // the constant
@NAME@ (@O_TYPE@ k);
diff --git a/gnuradio-core/src/lib/gengen/gr_argmax_XX.h.t b/gnuradio-core/src/lib/gengen/gr_argmax_XX.h.t
index 2aba94d71..437fa5735 100644
--- a/gnuradio-core/src/lib/gengen/gr_argmax_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_argmax_XX.h.t
@@ -25,17 +25,18 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
@NAME@ (size_t vlen);
size_t d_vlen;
diff --git a/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.h.t b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.h.t
index a5313d07d..c1393df3f 100644
--- a/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.h.t
@@ -25,12 +25,13 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_interpolator.h>
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);
+GR_CORE_API @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)
@@ -51,9 +52,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
* \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc.
*/
-class @NAME@ : public gr_sync_interpolator
+class GR_CORE_API @NAME@ : public gr_sync_interpolator
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@O_TYPE@> &symbol_table, const int D);
+ friend GR_CORE_API @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;
diff --git a/gnuradio-core/src/lib/gengen/gr_divide_XX.h.t b/gnuradio-core/src/lib/gengen/gr_divide_XX.h.t
index a59497c8c..ebe5ff5e5 100644
--- a/gnuradio-core/src/lib/gengen/gr_divide_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_divide_XX.h.t
@@ -25,12 +25,13 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1);
/*!
* \brief output = input_0 / input_1 / input_x ...)
@@ -38,9 +39,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
*
* Divide across all input streams.
*/
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
@NAME@ (size_t vlen);
diff --git a/gnuradio-core/src/lib/gengen/gr_integrate_XX.h.t b/gnuradio-core/src/lib/gengen/gr_integrate_XX.h.t
index 01061ff21..c1d81000f 100644
--- a/gnuradio-core/src/lib/gengen/gr_integrate_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_integrate_XX.h.t
@@ -25,13 +25,14 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_decimator.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (int decim);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (int decim);
/*!
* \brief output = sum(input[0]...input[n])
@@ -39,10 +40,10 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
*
* Integrate successive samples in input stream and decimate
*/
-class @NAME@ : public gr_sync_decimator
+class GR_CORE_API @NAME@ : public gr_sync_decimator
{
private:
- friend @SPTR_NAME@ gr_make_@BASE_NAME@(int decim);
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@(int decim);
@NAME@ (int decim);
diff --git a/gnuradio-core/src/lib/gengen/gr_max_XX.h.t b/gnuradio-core/src/lib/gengen/gr_max_XX.h.t
index 2aba94d71..437fa5735 100644
--- a/gnuradio-core/src/lib/gengen/gr_max_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_max_XX.h.t
@@ -25,17 +25,18 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
@NAME@ (size_t vlen);
size_t d_vlen;
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
index 2441ca65b..7e228abb6 100644
--- a/gnuradio-core/src/lib/gengen/gr_moving_average_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_moving_average_XX.h.t
@@ -25,13 +25,14 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (int length, @O_TYPE@ scale, int max_iter = 4096);
+GR_CORE_API @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
@@ -40,10 +41,10 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
* 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
+class GR_CORE_API @NAME@ : public gr_sync_block
{
private:
- friend @SPTR_NAME@ gr_make_@BASE_NAME@(int length, @O_TYPE@ scale, int max_iter);
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@(int length, @O_TYPE@ scale, int max_iter);
@NAME@ (int length, @O_TYPE@ scale, int max_iter = 4096);
diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_XX.h.t b/gnuradio-core/src/lib/gengen/gr_multiply_XX.h.t
index cb4a0273d..1feb16202 100644
--- a/gnuradio-core/src/lib/gengen/gr_multiply_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_multiply_XX.h.t
@@ -25,12 +25,13 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1);
/*!
* \brief output = prod (input_0, input_1, ...)
@@ -38,9 +39,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
*
* Multiply across all input streams.
*/
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
@NAME@ (size_t vlen);
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
index 0c10185cc..6ff6f74a9 100644
--- a/gnuradio-core/src/lib/gengen/gr_multiply_const_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_multiply_const_XX.h.t
@@ -25,20 +25,21 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
/*!
* \brief output = input * constant
* \ingroup math_blk
*/
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
@O_TYPE@ d_k; // the constant
@NAME@ (@O_TYPE@ k);
diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.h.t b/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.h.t
index 81e781895..f696ab7b1 100755..100644
--- a/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.h.t
@@ -25,20 +25,21 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k);
+GR_CORE_API @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
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k);
+ friend GR_CORE_API @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);
diff --git a/gnuradio-core/src/lib/gengen/gr_mute_XX.h.t b/gnuradio-core/src/lib/gengen/gr_mute_XX.h.t
index 5007787c4..ccf966e53 100644
--- a/gnuradio-core/src/lib/gengen/gr_mute_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_mute_XX.h.t
@@ -25,20 +25,21 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (bool mute=false);
+GR_CORE_API @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
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ (bool mute);
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (bool mute);
bool d_mute;
@NAME@ (bool mute);
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
index a920ce04a..9dd92c8f5 100644
--- a/gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t
@@ -25,6 +25,7 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_noise_type.h>
#include <gr_random.h>
@@ -33,15 +34,15 @@
class @NAME@;
typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
-@NAME@_sptr
+GR_CORE_API @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
+class GR_CORE_API @NAME@ : public gr_sync_block {
+ friend GR_CORE_API @NAME@_sptr
gr_make_@BASE_NAME@ (gr_noise_type_t type, float ampl, long seed);
gr_noise_type_t d_type;
diff --git a/gnuradio-core/src/lib/gengen/gr_not_XX.h.t b/gnuradio-core/src/lib/gengen/gr_not_XX.h.t
index cf8d96ede..b946ffc42 100644
--- a/gnuradio-core/src/lib/gengen/gr_not_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_not_XX.h.t
@@ -25,12 +25,13 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ ();
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
/*!
* \brief output = ~input_0
@@ -38,9 +39,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
*
* bitwise boolean not across input stream.
*/
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ ();
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
@NAME@ ();
diff --git a/gnuradio-core/src/lib/gengen/gr_or_XX.h.t b/gnuradio-core/src/lib/gengen/gr_or_XX.h.t
index 3e02d9b1a..8d1fea951 100644
--- a/gnuradio-core/src/lib/gengen/gr_or_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_or_XX.h.t
@@ -25,12 +25,13 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ ();
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
/*!
* \brief output = input_0 | input_1 | , ... | input_N)
@@ -38,9 +39,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
*
* bitwise boolean or across all input streams.
*/
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ ();
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
@NAME@ ();
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
index 803098c0d..77cd2b470 100644
--- 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
@@ -25,13 +25,14 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_block.h>
#include <gr_endianness.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@
+GR_CORE_API @SPTR_NAME@
gr_make_@BASE_NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness);
/*!
@@ -59,9 +60,9 @@ gr_make_@BASE_NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness);
* \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc.
*/
-class @NAME@ : public gr_block
+class GR_CORE_API @NAME@ : public gr_block
{
- friend @SPTR_NAME@
+ friend GR_CORE_API @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);
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
index d6a8caf76..d6d1e5e51 100644
--- a/gnuradio-core/src/lib/gengen/gr_peak_detector_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_peak_detector_XX.h.t
@@ -25,12 +25,13 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (float threshold_factor_rise = 0.25,
+GR_CORE_API @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);
@@ -57,9 +58,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
* This look-ahead range.
* \param alpha The gain value of a moving average filter
*/
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ (float threshold_factor_rise,
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (float threshold_factor_rise,
float threshold_factor_fall,
int look_ahead, float alpha);
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
index b96487326..328c47106 100644
--- 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
@@ -25,12 +25,13 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ ();
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
/*!
* \brief sample and hold circuit
@@ -39,9 +40,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
* 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
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ ();
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
@NAME@ ();
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
index 9906d16ab..3df723868 100644
--- a/gnuradio-core/src/lib/gengen/gr_sig_source_X.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_sig_source_X.h.t
@@ -25,6 +25,7 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_sig_source_waveform.h>
#include <gr_fxpt_nco.h>
@@ -37,8 +38,8 @@ typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
* \ingroup source_blk
*/
-class @NAME@ : public gr_sync_block {
- friend @NAME@_sptr
+class GR_CORE_API @NAME@ : public gr_sync_block {
+ friend GR_CORE_API @NAME@_sptr
gr_make_@BASE_NAME@ (double sampling_freq, gr_waveform_t waveform,
double frequency, double ampl, @TYPE@ offset);
@@ -73,7 +74,7 @@ class @NAME@ : public gr_sync_block {
void set_offset (@TYPE@ offset);
};
-@NAME@_sptr
+GR_CORE_API @NAME@_sptr
gr_make_@BASE_NAME@ (double sampling_freq, gr_waveform_t waveform,
double wave_freq, double ampl, @TYPE@ offset = 0);
diff --git a/gnuradio-core/src/lib/gengen/gr_sub_XX.h.t b/gnuradio-core/src/lib/gengen/gr_sub_XX.h.t
index a58d1f3b8..4c988945e 100644
--- a/gnuradio-core/src/lib/gengen/gr_sub_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_sub_XX.h.t
@@ -25,12 +25,13 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1);
/*!
* \brief output = input_0 - input_1 - ...)
@@ -38,9 +39,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
*
* Subtract across all input streams.
*/
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
@NAME@ (size_t vlen);
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
index 42d201093..a7db84c5c 100644
--- 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
@@ -25,13 +25,14 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_block.h>
#include <gr_endianness.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
-@SPTR_NAME@
+GR_CORE_API @SPTR_NAME@
gr_make_@BASE_NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness);
/*!
@@ -57,9 +58,9 @@ gr_make_@BASE_NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness);
* \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
+class GR_CORE_API @NAME@ : public gr_block
{
- friend @SPTR_NAME@
+ friend GR_CORE_API @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);
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
index 7ba5ee9e9..475cc0112 100644
--- a/gnuradio-core/src/lib/gengen/gr_vector_sink_X.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_X.h.t
@@ -25,12 +25,13 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
-@NAME@_sptr
+GR_CORE_API @NAME@_sptr
gr_make_@BASE_NAME@ (int vlen = 1);
@@ -39,8 +40,8 @@ gr_make_@BASE_NAME@ (int vlen = 1);
* \ingroup sink_blk
*/
-class @NAME@ : public gr_sync_block {
- friend @NAME@_sptr gr_make_@BASE_NAME@ (int vlen);
+class GR_CORE_API @NAME@ : public gr_sync_block {
+ friend GR_CORE_API @NAME@_sptr gr_make_@BASE_NAME@ (int vlen);
std::vector<@TYPE@> d_data;
int d_vlen;
@NAME@ (int 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
index 63edcb61c..fbab3effb 100644
--- a/gnuradio-core/src/lib/gengen/gr_vector_source_X.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_vector_source_X.h.t
@@ -25,9 +25,10 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
-class @NAME@;
+class GR_CORE_API @NAME@;
typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
/*!
@@ -36,7 +37,7 @@ typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
*/
class @NAME@ : public gr_sync_block {
- friend @NAME@_sptr
+ friend GR_CORE_API @NAME@_sptr
gr_make_@BASE_NAME@ (const std::vector<@TYPE@> &data, bool repeat, int vlen);
std::vector<@TYPE@> d_data;
@@ -53,7 +54,7 @@ class @NAME@ : public gr_sync_block {
gr_vector_void_star &output_items);
};
-@NAME@_sptr
+GR_CORE_API @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_xor_XX.h.t b/gnuradio-core/src/lib/gengen/gr_xor_XX.h.t
index 33d729450..b2e1a68c8 100644
--- a/gnuradio-core/src/lib/gengen/gr_xor_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_xor_XX.h.t
@@ -25,12 +25,13 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ ();
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
/*!
* \brief output = input_0 ^ input_1 ^ , ... ^ input_N)
@@ -38,9 +39,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
*
* bitwise boolean xor across all input streams.
*/
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend @SPTR_NAME@ gr_make_@BASE_NAME@ ();
+ friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
@NAME@ ();
diff --git a/gnuradio-core/src/lib/hier/CMakeLists.txt b/gnuradio-core/src/lib/hier/CMakeLists.txt
new file mode 100644
index 000000000..192dd5939
--- /dev/null
+++ b/gnuradio-core/src/lib/hier/CMakeLists.txt
@@ -0,0 +1,42 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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 included, use CMake directory variables
+########################################################################
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+list(APPEND gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_channel_model.cc
+)
+
+install(FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_channel_model.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "core_devel"
+)
+
+if(ENABLE_PYTHON)
+ install(FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/hier.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_channel_model.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "core_swig"
+ )
+endif(ENABLE_PYTHON)
diff --git a/gnuradio-core/src/lib/hier/gr_channel_model.h b/gnuradio-core/src/lib/hier/gr_channel_model.h
index 116b5dc14..07c0c76b6 100644
--- a/gnuradio-core/src/lib/hier/gr_channel_model.h
+++ b/gnuradio-core/src/lib/hier/gr_channel_model.h
@@ -19,6 +19,7 @@
* Boston, MA 02110-1301, USA.
*/
+#include <gr_core_api.h>
#include <gr_top_block.h>
#include <gr_fractional_interpolator_cc.h>
#include <gr_sig_source_c.h>
@@ -31,7 +32,7 @@ class gr_channel_model;
typedef boost::shared_ptr<gr_channel_model> gr_channel_model_sptr;
-gr_channel_model_sptr gr_make_channel_model(double noise_voltage=0.0,
+GR_CORE_API 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<gr_complex> &taps=std::vector<gr_complex>(1, 1),
@@ -41,7 +42,7 @@ gr_channel_model_sptr gr_make_channel_model(double noise_voltage=0.0,
* \brief channel simulator
* \ingroup misc_blk
*/
-class gr_channel_model : public gr_hier_block2
+class GR_CORE_API gr_channel_model : public gr_hier_block2
{
private:
gr_channel_model(double noise_voltage,
@@ -50,7 +51,7 @@ class gr_channel_model : public gr_hier_block2
const std::vector<gr_complex> &taps,
double noise_seed);
- friend gr_channel_model_sptr gr_make_channel_model(double noise_voltage,
+ friend GR_CORE_API gr_channel_model_sptr gr_make_channel_model(double noise_voltage,
double frequency_offset,
double epsilon,
const std::vector<gr_complex> &taps,
diff --git a/gnuradio-core/src/lib/io/CMakeLists.txt b/gnuradio-core/src/lib/io/CMakeLists.txt
new file mode 100644
index 000000000..af9d7583c
--- /dev/null
+++ b/gnuradio-core/src/lib/io/CMakeLists.txt
@@ -0,0 +1,108 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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 included, use CMake directory variables
+########################################################################
+
+########################################################################
+# Append gnuradio-core library sources
+########################################################################
+list(APPEND gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_histo_sink_f.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_oscope_guts.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_oscope_sink_f.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_oscope_sink_x.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/i2c.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/i2c_bitbang.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/i2c_bbio.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/i2c_bbio_pp.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/microtune_4702.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/microtune_4937.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/microtune_xxxx.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/ppio_ppdev.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_wavfile.cc
+)
+
+########################################################################
+# Install runtime headers
+########################################################################
+install(FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_histo_sink_f.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_oscope_guts.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_oscope_sink_f.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_oscope_sink_x.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_trigger_mode.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/i2c.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/i2c_bitbang.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/i2c_bbio.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/i2c_bbio_pp.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/microtune_4702.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/microtune_4937.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/microtune_eval_board_defs.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/microtune_xxxx.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/ppio_ppdev.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gri_wavfile.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "core_devel"
+)
+
+########################################################################
+# Install swig headers
+########################################################################
+if(ENABLE_PYTHON)
+install(FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/io.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_histo_sink.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_oscope_sink.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "core_swig"
+)
+endif(ENABLE_PYTHON)
+
+########################################################################
+# Handle triple-threat files that have cc, h, and i
+########################################################################
+set(gr_core_io_triple_threats
+ gr_file_sink
+ gr_file_sink_base
+ gr_file_source
+ gr_file_descriptor_sink
+ gr_file_descriptor_source
+ gr_message_sink
+ gr_message_source
+ microtune_xxxx_eval_board
+ microtune_4702_eval_board
+ microtune_4937_eval_board
+ ppio
+ sdr_1000
+ gr_udp_sink
+ gr_udp_source
+ gr_wavfile_source
+ gr_wavfile_sink
+ gr_tagged_file_sink
+)
+
+foreach(file_tt ${gr_core_io_triple_threats})
+ list(APPEND gnuradio_core_sources ${CMAKE_CURRENT_SOURCE_DIR}/${file_tt}.cc)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${file_tt}.h DESTINATION ${GR_INCLUDE_DIR}/gnuradio COMPONENT "core_devel")
+ if(ENABLE_PYTHON)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${file_tt}.i DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig COMPONENT "core_swig")
+ endif(ENABLE_PYTHON)
+endforeach(file_tt ${gr_core_io_triple_threats})
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 fa8fa3f05..5e4cc6505 100644
--- a/gnuradio-core/src/lib/io/gr_file_descriptor_sink.h
+++ b/gnuradio-core/src/lib/io/gr_file_descriptor_sink.h
@@ -23,21 +23,22 @@
#ifndef INCLUDED_GR_FILE_DESCRIPTOR_SINK_H
#define INCLUDED_GR_FILE_DESCRIPTOR_SINK_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_file_descriptor_sink;
typedef boost::shared_ptr<gr_file_descriptor_sink> gr_file_descriptor_sink_sptr;
-gr_file_descriptor_sink_sptr gr_make_file_descriptor_sink (size_t itemsize, int fd);
+GR_CORE_API gr_file_descriptor_sink_sptr gr_make_file_descriptor_sink (size_t itemsize, int fd);
/*!
* \brief Write stream to file descriptor.
* \ingroup sink_blk
*/
-class gr_file_descriptor_sink : public gr_sync_block
+class GR_CORE_API gr_file_descriptor_sink : public gr_sync_block
{
- friend gr_file_descriptor_sink_sptr gr_make_file_descriptor_sink (size_t itemsize, int fd);
+ friend GR_CORE_API gr_file_descriptor_sink_sptr gr_make_file_descriptor_sink (size_t itemsize, int fd);
private:
size_t d_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 a9f117286..fa513fd25 100644
--- a/gnuradio-core/src/lib/io/gr_file_descriptor_source.h
+++ b/gnuradio-core/src/lib/io/gr_file_descriptor_source.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_FILE_DESCRIPTOR_SOURCE_H
#define INCLUDED_GR_FILE_DESCRIPTOR_SOURCE_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_file_descriptor_source;
typedef boost::shared_ptr<gr_file_descriptor_source> gr_file_descriptor_source_sptr;
-gr_file_descriptor_source_sptr
+GR_CORE_API gr_file_descriptor_source_sptr
gr_make_file_descriptor_source (size_t itemsize, int fd, bool repeat = false);
/*!
@@ -36,9 +37,9 @@ gr_make_file_descriptor_source (size_t itemsize, int fd, bool repeat = false);
* \ingroup source_blk
*/
-class gr_file_descriptor_source : public gr_sync_block
+class GR_CORE_API gr_file_descriptor_source : public gr_sync_block
{
- friend gr_file_descriptor_source_sptr
+ friend GR_CORE_API gr_file_descriptor_source_sptr
gr_make_file_descriptor_source (size_t itemsize, int fd, bool repeat);
private:
size_t d_itemsize;
diff --git a/gnuradio-core/src/lib/io/gr_file_sink.h b/gnuradio-core/src/lib/io/gr_file_sink.h
index b9ad06cd6..180cbef2a 100644
--- a/gnuradio-core/src/lib/io/gr_file_sink.h
+++ b/gnuradio-core/src/lib/io/gr_file_sink.h
@@ -23,22 +23,23 @@
#ifndef INCLUDED_GR_FILE_SINK_H
#define INCLUDED_GR_FILE_SINK_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_file_sink_base.h>
class gr_file_sink;
typedef boost::shared_ptr<gr_file_sink> gr_file_sink_sptr;
-gr_file_sink_sptr gr_make_file_sink(size_t itemsize, const char *filename);
+GR_CORE_API gr_file_sink_sptr gr_make_file_sink(size_t itemsize, const char *filename);
/*!
* \brief Write stream to file.
* \ingroup sink_blk
*/
-class gr_file_sink : public gr_sync_block, public gr_file_sink_base
+class GR_CORE_API 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);
+ friend GR_CORE_API gr_file_sink_sptr gr_make_file_sink(size_t itemsize, const char *filename);
private:
size_t d_itemsize;
diff --git a/gnuradio-core/src/lib/io/gr_file_sink_base.h b/gnuradio-core/src/lib/io/gr_file_sink_base.h
index 7b96cdb7f..6765dbad8 100644
--- a/gnuradio-core/src/lib/io/gr_file_sink_base.h
+++ b/gnuradio-core/src/lib/io/gr_file_sink_base.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_FILE_SINK_BASE_H
#define INCLUDED_GR_FILE_SINK_BASE_H
+#include <gr_core_api.h>
#include <boost/thread.hpp>
#include <cstdio>
/*!
* \brief Common base class for file sinks
*/
-class gr_file_sink_base
+class GR_CORE_API gr_file_sink_base
{
protected:
FILE *d_fp; // current FILE pointer
diff --git a/gnuradio-core/src/lib/io/gr_file_source.h b/gnuradio-core/src/lib/io/gr_file_source.h
index 5f5c2564e..6e8fc4074 100644
--- a/gnuradio-core/src/lib/io/gr_file_source.h
+++ b/gnuradio-core/src/lib/io/gr_file_source.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_GR_FILE_SOURCE_H
#define INCLUDED_GR_FILE_SOURCE_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
class gr_file_source;
typedef boost::shared_ptr<gr_file_source> gr_file_source_sptr;
-gr_file_source_sptr
+GR_CORE_API gr_file_source_sptr
gr_make_file_source (size_t itemsize, const char *filename, bool repeat = false);
/*!
@@ -36,9 +37,9 @@ gr_make_file_source (size_t itemsize, const char *filename, bool repeat = false)
* \ingroup source_blk
*/
-class gr_file_source : public gr_sync_block
+class GR_CORE_API gr_file_source : public gr_sync_block
{
- friend gr_file_source_sptr gr_make_file_source (size_t itemsize,
+ friend GR_CORE_API gr_file_source_sptr gr_make_file_source (size_t itemsize,
const char *filename,
bool repeat);
private:
diff --git a/gnuradio-core/src/lib/io/gr_histo_sink_f.h b/gnuradio-core/src/lib/io/gr_histo_sink_f.h
index 8ba45ec55..934066ba2 100644
--- a/gnuradio-core/src/lib/io/gr_histo_sink_f.h
+++ b/gnuradio-core/src/lib/io/gr_histo_sink_f.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_HISTO_SINK_F_H
#define INCLUDED_GR_HISTO_SINK_F_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_msg_queue.h>
#include <gruel/thread.h>
@@ -30,13 +31,13 @@
class gr_histo_sink_f;
typedef boost::shared_ptr<gr_histo_sink_f> gr_histo_sink_f_sptr;
-gr_histo_sink_f_sptr gr_make_histo_sink_f (gr_msg_queue_sptr msgq);
+GR_CORE_API 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
+class GR_CORE_API gr_histo_sink_f : public gr_sync_block
{
private:
gr_msg_queue_sptr d_msgq;
@@ -47,7 +48,7 @@ private:
float *d_samps;
gruel::mutex d_mutex;
- friend gr_histo_sink_f_sptr gr_make_histo_sink_f (gr_msg_queue_sptr msgq);
+ friend GR_CORE_API 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);
diff --git a/gnuradio-core/src/lib/io/gr_message_sink.h b/gnuradio-core/src/lib/io/gr_message_sink.h
index 5f1e5f91f..180055261 100644
--- a/gnuradio-core/src/lib/io/gr_message_sink.h
+++ b/gnuradio-core/src/lib/io/gr_message_sink.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_MESSAGE_SINK_H
#define INCLUDED_GR_MESSAGE_SINK_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_message.h>
#include <gr_msg_queue.h>
@@ -30,7 +31,7 @@
class gr_message_sink;
typedef boost::shared_ptr<gr_message_sink> gr_message_sink_sptr;
-gr_message_sink_sptr gr_make_message_sink (size_t itemsize,
+GR_CORE_API gr_message_sink_sptr gr_make_message_sink (size_t itemsize,
gr_msg_queue_sptr msgq,
bool dont_block);
@@ -38,14 +39,14 @@ gr_message_sink_sptr gr_make_message_sink (size_t itemsize,
* \brief Gather received items into messages and insert into msgq
* \ingroup sink_blk
*/
-class gr_message_sink : public gr_sync_block
+class GR_CORE_API gr_message_sink : public gr_sync_block
{
private:
size_t d_itemsize;
gr_msg_queue_sptr d_msgq;
bool d_dont_block;
- friend gr_message_sink_sptr
+ friend GR_CORE_API gr_message_sink_sptr
gr_make_message_sink(size_t itemsize, gr_msg_queue_sptr msgq, bool dont_block);
protected:
diff --git a/gnuradio-core/src/lib/io/gr_message_source.h b/gnuradio-core/src/lib/io/gr_message_source.h
index 46a808754..16a0f4474 100644
--- a/gnuradio-core/src/lib/io/gr_message_source.h
+++ b/gnuradio-core/src/lib/io/gr_message_source.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_MESSAGE_SOURCE_H
#define INCLUDED_GR_MESSAGE_SOURCE_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_message.h>
#include <gr_msg_queue.h>
@@ -30,14 +31,14 @@
class gr_message_source;
typedef boost::shared_ptr<gr_message_source> gr_message_source_sptr;
-gr_message_source_sptr gr_make_message_source (size_t itemsize, int msgq_limit=0);
-gr_message_source_sptr gr_make_message_source (size_t itemsize, gr_msg_queue_sptr msgq);
+GR_CORE_API gr_message_source_sptr gr_make_message_source (size_t itemsize, int msgq_limit=0);
+GR_CORE_API gr_message_source_sptr gr_make_message_source (size_t itemsize, gr_msg_queue_sptr msgq);
/*!
* \brief Turn received messages into a stream
* \ingroup source_blk
*/
-class gr_message_source : public gr_sync_block
+class GR_CORE_API gr_message_source : public gr_sync_block
{
private:
size_t d_itemsize;
@@ -46,9 +47,9 @@ class gr_message_source : public gr_sync_block
unsigned d_msg_offset;
bool d_eof;
- friend gr_message_source_sptr
+ friend GR_CORE_API gr_message_source_sptr
gr_make_message_source(size_t itemsize, int msgq_limit);
- friend gr_message_source_sptr
+ friend GR_CORE_API gr_message_source_sptr
gr_make_message_source(size_t itemsize, gr_msg_queue_sptr msgq);
protected:
diff --git a/gnuradio-core/src/lib/io/gr_oscope_guts.h b/gnuradio-core/src/lib/io/gr_oscope_guts.h
index f39db62f6..3223d4e38 100644
--- a/gnuradio-core/src/lib/io/gr_oscope_guts.h
+++ b/gnuradio-core/src/lib/io/gr_oscope_guts.h
@@ -24,6 +24,7 @@
#ifndef INCLUDED_GR_OSCOPE_GUTS_H
#define INCLUDED_GR_OSCOPE_GUTS_H
+#include <gr_core_api.h>
#include <gr_trigger_mode.h>
#include <gr_msg_queue.h>
@@ -40,7 +41,7 @@
* consist of 50% pre-trigger data and 50% post-trigger data.
*/
-class gr_oscope_guts {
+class GR_CORE_API gr_oscope_guts {
public:
static const int MAX_CHANNELS = 8;
private:
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 1a8022b89..e3d1f65e5 100644
--- a/gnuradio-core/src/lib/io/gr_oscope_sink_f.h
+++ b/gnuradio-core/src/lib/io/gr_oscope_sink_f.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_OSCOPE_SINK_F_H
#define INCLUDED_GR_OSCOPE_SINK_F_H
+#include <gr_core_api.h>
#include <gr_oscope_sink_x.h>
#include <gr_msg_queue.h>
class gr_oscope_sink_f;
typedef boost::shared_ptr<gr_oscope_sink_x> gr_oscope_sink_f_sptr;
-gr_oscope_sink_f_sptr gr_make_oscope_sink_f (double sampling_rate, gr_msg_queue_sptr msgq);
+GR_CORE_API gr_oscope_sink_f_sptr gr_make_oscope_sink_f (double sampling_rate, gr_msg_queue_sptr msgq);
/*!
@@ -38,10 +39,10 @@ gr_oscope_sink_f_sptr gr_make_oscope_sink_f (double sampling_rate, gr_msg_queue_
*
* Accepts multiple float streams.
*/
-class gr_oscope_sink_f : public gr_oscope_sink_x
+class GR_CORE_API gr_oscope_sink_f : public gr_oscope_sink_x
{
private:
- friend gr_oscope_sink_f_sptr
+ friend GR_CORE_API gr_oscope_sink_f_sptr
gr_make_oscope_sink_f (double sampling_rate, gr_msg_queue_sptr msgq);
gr_oscope_sink_f (double sampling_rate, gr_msg_queue_sptr msgq);
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 62cf65100..aaff5870b 100644
--- a/gnuradio-core/src/lib/io/gr_oscope_sink_x.h
+++ b/gnuradio-core/src/lib/io/gr_oscope_sink_x.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_OSCOPE_SINK_X_H
#define INCLUDED_GR_OSCOPE_SINK_X_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_trigger_mode.h>
@@ -34,7 +35,7 @@ class gr_oscope_guts;
*
* Don't instantiate this. Use gr_oscope_sink_f or gr_oscope_sink_c instead.
*/
-class gr_oscope_sink_x : public gr_sync_block
+class GR_CORE_API gr_oscope_sink_x : public gr_sync_block
{
protected:
double d_sampling_rate;
diff --git a/gnuradio-core/src/lib/io/gr_tagged_file_sink.h b/gnuradio-core/src/lib/io/gr_tagged_file_sink.h
index 2e0a5c63a..da12dca78 100644
--- a/gnuradio-core/src/lib/io/gr_tagged_file_sink.h
+++ b/gnuradio-core/src/lib/io/gr_tagged_file_sink.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_TAGGED_FILE_SINK_H
#define INCLUDED_GR_TAGGED_FILE_SINK_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <cstdio> // for FILE
class gr_tagged_file_sink;
typedef boost::shared_ptr<gr_tagged_file_sink> gr_tagged_file_sink_sptr;
-gr_tagged_file_sink_sptr gr_make_tagged_file_sink (size_t itemsize,
+GR_CORE_API gr_tagged_file_sink_sptr gr_make_tagged_file_sink (size_t itemsize,
double samp_rate);
/*!
@@ -37,9 +38,9 @@ gr_tagged_file_sink_sptr gr_make_tagged_file_sink (size_t itemsize,
* \ingroup sink_blk
*/
-class gr_tagged_file_sink : public gr_sync_block
+class GR_CORE_API gr_tagged_file_sink : public gr_sync_block
{
- friend gr_tagged_file_sink_sptr gr_make_tagged_file_sink (size_t itemsize,
+ friend GR_CORE_API gr_tagged_file_sink_sptr gr_make_tagged_file_sink (size_t itemsize,
double samp_rate);
private:
diff --git a/gnuradio-core/src/lib/io/gr_udp_sink.h b/gnuradio-core/src/lib/io/gr_udp_sink.h
index 421d514a4..e9d4f8c73 100644
--- a/gnuradio-core/src/lib/io/gr_udp_sink.h
+++ b/gnuradio-core/src/lib/io/gr_udp_sink.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_UDP_SINK_H
#define INCLUDED_GR_UDP_SINK_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gruel/thread.h>
class gr_udp_sink;
typedef boost::shared_ptr<gr_udp_sink> gr_udp_sink_sptr;
-gr_udp_sink_sptr
+GR_CORE_API gr_udp_sink_sptr
gr_make_udp_sink (size_t itemsize,
const char *host, unsigned short port,
int payload_size=1472, bool eof=true);
@@ -47,9 +48,9 @@ gr_make_udp_sink (size_t itemsize,
* \param eof Send zero-length packet on disconnect
*/
-class gr_udp_sink : public gr_sync_block
+class GR_CORE_API gr_udp_sink : public gr_sync_block
{
- friend gr_udp_sink_sptr gr_make_udp_sink (size_t itemsize,
+ friend GR_CORE_API gr_udp_sink_sptr gr_make_udp_sink (size_t itemsize,
const char *host,
unsigned short port,
int payload_size, bool eof);
diff --git a/gnuradio-core/src/lib/io/gr_udp_source.h b/gnuradio-core/src/lib/io/gr_udp_source.h
index 5d30fad30..e2898981d 100644
--- a/gnuradio-core/src/lib/io/gr_udp_source.h
+++ b/gnuradio-core/src/lib/io/gr_udp_source.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_UDP_SOURCE_H
#define INCLUDED_GR_UDP_SOURCE_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gruel/thread.h>
class gr_udp_source;
typedef boost::shared_ptr<gr_udp_source> gr_udp_source_sptr;
-gr_udp_source_sptr gr_make_udp_source(size_t itemsize, const char *host,
+GR_CORE_API gr_udp_source_sptr gr_make_udp_source(size_t itemsize, const char *host,
unsigned short port,
int payload_size=1472,
bool eof=true, bool wait=true);
@@ -52,9 +53,9 @@ gr_udp_source_sptr gr_make_udp_source(size_t itemsize, const char *host,
*
*/
-class gr_udp_source : public gr_sync_block
+class GR_CORE_API gr_udp_source : public gr_sync_block
{
- friend gr_udp_source_sptr gr_make_udp_source(size_t itemsize,
+ friend GR_CORE_API gr_udp_source_sptr gr_make_udp_source(size_t itemsize,
const char *host,
unsigned short port,
int payload_size,
diff --git a/gnuradio-core/src/lib/io/gr_wavfile_sink.h b/gnuradio-core/src/lib/io/gr_wavfile_sink.h
index a1d6ed527..5fd3eaadc 100644
--- a/gnuradio-core/src/lib/io/gr_wavfile_sink.h
+++ b/gnuradio-core/src/lib/io/gr_wavfile_sink.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_WAVFILE_SINK_H
#define INCLUDED_GR_WAVFILE_SINK_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gr_file_sink_base.h>
#include <boost/thread.hpp>
@@ -36,7 +37,7 @@ typedef boost::shared_ptr<gr_wavfile_sink> gr_wavfile_sink_sptr;
* \p sample_rate Sample rate [S/s]
* \p bits_per_sample 16 or 8 bit, default is 16
*/
-gr_wavfile_sink_sptr
+GR_CORE_API gr_wavfile_sink_sptr
gr_make_wavfile_sink (const char *filename,
int n_channels,
unsigned int sample_rate,
@@ -50,10 +51,10 @@ gr_make_wavfile_sink (const char *filename,
*
* \ingroup sink_blk
*/
-class gr_wavfile_sink : public gr_sync_block
+class GR_CORE_API gr_wavfile_sink : public gr_sync_block
{
private:
- friend gr_wavfile_sink_sptr gr_make_wavfile_sink (const char *filename,
+ friend GR_CORE_API gr_wavfile_sink_sptr gr_make_wavfile_sink (const char *filename,
int n_channels,
unsigned int sample_rate,
int bits_per_sample);
diff --git a/gnuradio-core/src/lib/io/gr_wavfile_source.h b/gnuradio-core/src/lib/io/gr_wavfile_source.h
index e434a6b4c..b300f2808 100644
--- a/gnuradio-core/src/lib/io/gr_wavfile_source.h
+++ b/gnuradio-core/src/lib/io/gr_wavfile_source.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_GR_WAVFILE_SOURCE_H
#define INCLUDED_GR_WAVFILE_SOURCE_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <cstdio> // for FILE
class gr_wavfile_source;
typedef boost::shared_ptr<gr_wavfile_source> gr_wavfile_source_sptr;
-gr_wavfile_source_sptr
+GR_CORE_API gr_wavfile_source_sptr
gr_make_wavfile_source (const char *filename, bool repeat = false);
/*!
@@ -41,10 +42,10 @@ gr_make_wavfile_source (const char *filename, bool repeat = false);
* \ingroup source_blk
*/
-class gr_wavfile_source : public gr_sync_block
+class GR_CORE_API gr_wavfile_source : public gr_sync_block
{
private:
- friend gr_wavfile_source_sptr gr_make_wavfile_source (const char *filename,
+ friend GR_CORE_API gr_wavfile_source_sptr gr_make_wavfile_source (const char *filename,
bool repeat);
gr_wavfile_source(const char *filename, bool repeat);
diff --git a/gnuradio-core/src/lib/io/gri_wavfile.h b/gnuradio-core/src/lib/io/gri_wavfile.h
index 2c7c1207c..2268474fb 100644
--- a/gnuradio-core/src/lib/io/gri_wavfile.h
+++ b/gnuradio-core/src/lib/io/gri_wavfile.h
@@ -23,6 +23,7 @@
// This file stores all the RIFF file type knowledge for the gr_wavfile_*
// blocks.
+#include <gr_core_api.h>
#include <cstdio>
/*!
diff --git a/gnuradio-core/src/lib/io/i2c.h b/gnuradio-core/src/lib/io/i2c.h
index e959f59a8..7d446dfa3 100644
--- a/gnuradio-core/src/lib/io/i2c.h
+++ b/gnuradio-core/src/lib/io/i2c.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_I2C_H
#define INCLUDED_I2C_H
+#include <gr_core_api.h>
#include <boost/shared_ptr.hpp>
class i2c;
@@ -31,7 +32,7 @@ typedef boost::shared_ptr<i2c> i2c_sptr;
/*!
* \brief abstract class for controlling i2c bus
*/
-class i2c {
+class GR_CORE_API i2c {
public:
i2c () {}
diff --git a/gnuradio-core/src/lib/io/i2c_bbio.h b/gnuradio-core/src/lib/io/i2c_bbio.h
index c6b226e39..110a56555 100644
--- a/gnuradio-core/src/lib/io/i2c_bbio.h
+++ b/gnuradio-core/src/lib/io/i2c_bbio.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_I2C_BBIO_H
#define INCLUDED_I2C_BBIO_H
+#include <gr_core_api.h>
#include <boost/shared_ptr.hpp>
class i2c_bbio;
@@ -33,7 +34,7 @@ typedef boost::shared_ptr<i2c_bbio> i2c_bbio_sptr;
* \brief abstract class that implements bit banging i/o for i2c bus.
* \ingroup base
*/
-class i2c_bbio {
+class GR_CORE_API i2c_bbio {
public:
i2c_bbio () {}
diff --git a/gnuradio-core/src/lib/io/i2c_bbio_pp.h b/gnuradio-core/src/lib/io/i2c_bbio_pp.h
index 5a99cdcd1..4a311a2c9 100644
--- a/gnuradio-core/src/lib/io/i2c_bbio_pp.h
+++ b/gnuradio-core/src/lib/io/i2c_bbio_pp.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_I2C_BBIO_PP_H
#define INCLUDED_I2C_BBIO_PP_H
+#include <gr_core_api.h>
#include "i2c_bbio.h"
#include "ppio.h"
@@ -33,8 +34,8 @@
* 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.
*/
-class i2c_bbio_pp : public i2c_bbio {
- friend i2c_bbio_sptr make_i2c_bbio_pp (ppio_sptr pp);
+class GR_CORE_API i2c_bbio_pp : public i2c_bbio {
+ friend GR_CORE_API i2c_bbio_sptr make_i2c_bbio_pp (ppio_sptr pp);
i2c_bbio_pp (ppio_sptr pp);
public:
@@ -50,7 +51,7 @@ class i2c_bbio_pp : public i2c_bbio {
ppio_sptr d_pp;
};
-i2c_bbio_sptr make_i2c_bbio_pp (ppio_sptr pp);
+GR_CORE_API i2c_bbio_sptr make_i2c_bbio_pp (ppio_sptr pp);
#endif /* INCLUDED_I2C_BBIO_PP_H */
diff --git a/gnuradio-core/src/lib/io/i2c_bitbang.h b/gnuradio-core/src/lib/io/i2c_bitbang.h
index c9deb38ba..feb23b787 100644
--- a/gnuradio-core/src/lib/io/i2c_bitbang.h
+++ b/gnuradio-core/src/lib/io/i2c_bitbang.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_I2C_BITBANG_H
#define INCLUDED_I2C_BITBANG_H
+#include <gr_core_api.h>
#include <i2c.h>
#include <i2c_bbio.h>
@@ -30,8 +31,8 @@
* \brief class for controlling i2c bus
* \ingroup base
*/
-class i2c_bitbang : public i2c {
- friend i2c_sptr make_i2c_bitbang (i2c_bbio_sptr io);
+class GR_CORE_API i2c_bitbang : public i2c {
+ friend GR_CORE_API i2c_sptr make_i2c_bitbang (i2c_bbio_sptr io);
i2c_bitbang (i2c_bbio_sptr io);
public:
@@ -57,7 +58,7 @@ private:
i2c_bbio_sptr d_io;
};
-i2c_sptr make_i2c_bitbang (i2c_bbio_sptr io);
+GR_CORE_API i2c_sptr make_i2c_bitbang (i2c_bbio_sptr io);
#endif /* INCLUDED_I2C_BITBANG_H */
diff --git a/gnuradio-core/src/lib/io/microtune_4702.h b/gnuradio-core/src/lib/io/microtune_4702.h
index 95c64abe7..fd8d89305 100644
--- a/gnuradio-core/src/lib/io/microtune_4702.h
+++ b/gnuradio-core/src/lib/io/microtune_4702.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_MICROTUNE_4702_H
#define INCLUDED_MICROTUNE_4702_H
+#include <gr_core_api.h>
#include <microtune_xxxx.h>
/*!
@@ -30,7 +31,7 @@
* \ingroup hardware
*/
-class microtune_4702 : public microtune_xxxx {
+class GR_CORE_API microtune_4702 : public microtune_xxxx {
public:
microtune_4702 (i2c_sptr i2c, int i2c_addr);
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 6e9726917..e3c07fdf9 100644
--- a/gnuradio-core/src/lib/io/microtune_4702_eval_board.h
+++ b/gnuradio-core/src/lib/io/microtune_4702_eval_board.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_MICROTUNE_4702_EVAL_BOARD_H
#define INCLUDED_MICROTUNE_4702_EVAL_BOARD_H
+#include <gr_core_api.h>
#include "microtune_xxxx_eval_board.h"
/*!
@@ -30,7 +31,7 @@
* \ingroup hardware
*/
-class microtune_4702_eval_board : public microtune_xxxx_eval_board {
+class GR_CORE_API microtune_4702_eval_board : public microtune_xxxx_eval_board {
public:
microtune_4702_eval_board (int which_pp = 0);
~microtune_4702_eval_board ();
diff --git a/gnuradio-core/src/lib/io/microtune_4937.h b/gnuradio-core/src/lib/io/microtune_4937.h
index b263ceb0f..bc8a26c64 100644
--- a/gnuradio-core/src/lib/io/microtune_4937.h
+++ b/gnuradio-core/src/lib/io/microtune_4937.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_MICROTUNE_4937_H
#define INCLUDED_MICROTUNE_4937_H
+#include <gr_core_api.h>
#include <microtune_xxxx.h>
/*!
* \brief class for controlling microtune 4937 tuner module
* \ingroup hardware
*/
-class microtune_4937 : public microtune_xxxx {
+class GR_CORE_API microtune_4937 : public microtune_xxxx {
public:
microtune_4937 (i2c_sptr i2c, int i2c_addr = 0x61);
virtual ~microtune_4937 ();
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 154a7281a..09c00d116 100644
--- a/gnuradio-core/src/lib/io/microtune_4937_eval_board.h
+++ b/gnuradio-core/src/lib/io/microtune_4937_eval_board.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_MICROTUNE_4937_EVAL_BOARD_H
#define INCLUDED_MICROTUNE_4937_EVAL_BOARD_H
+#include <gr_core_api.h>
#include "microtune_xxxx_eval_board.h"
/*!
@@ -30,7 +31,7 @@
* \ingroup hardware
*/
-class microtune_4937_eval_board : public microtune_xxxx_eval_board {
+class GR_CORE_API microtune_4937_eval_board : public microtune_xxxx_eval_board {
public:
microtune_4937_eval_board (int which_pp = 0);
~microtune_4937_eval_board ();
diff --git a/gnuradio-core/src/lib/io/microtune_xxxx.h b/gnuradio-core/src/lib/io/microtune_xxxx.h
index 4d5074a85..8b6ec25aa 100644
--- a/gnuradio-core/src/lib/io/microtune_xxxx.h
+++ b/gnuradio-core/src/lib/io/microtune_xxxx.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_MICROTUNE_XXXX_H
#define INCLUDED_MICROTUNE_XXXX_H
+#include <gr_core_api.h>
#include <boost/shared_ptr.hpp>
class i2c;
@@ -32,7 +33,7 @@ typedef boost::shared_ptr<i2c> i2c_sptr;
* \brief abstract class for controlling microtune {4937,4702} tuner modules
* \ingroup base
*/
-class microtune_xxxx {
+class GR_CORE_API microtune_xxxx {
public:
microtune_xxxx () {}
virtual ~microtune_xxxx ();
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 808075e55..08aa438c0 100644
--- a/gnuradio-core/src/lib/io/microtune_xxxx_eval_board.h
+++ b/gnuradio-core/src/lib/io/microtune_xxxx_eval_board.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_MICROTUNE_XXXX_EVAL_BOARD_H
#define INCLUDED_MICROTUNE_XXXX_EVAL_BOARD_H
+#include <gr_core_api.h>
#include <boost/shared_ptr.hpp>
class microtune_xxxx;
@@ -37,7 +38,7 @@ typedef boost::shared_ptr<i2c> i2c_sptr;
* \brief abstract class for controlling microtune xxxx eval board
* \ingroup hardware
*/
-class microtune_xxxx_eval_board {
+class GR_CORE_API microtune_xxxx_eval_board {
public:
microtune_xxxx_eval_board (int which_pp = 0);
virtual ~microtune_xxxx_eval_board ();
diff --git a/gnuradio-core/src/lib/io/ppio.h b/gnuradio-core/src/lib/io/ppio.h
index e1a62e2a3..f7d14d52e 100644
--- a/gnuradio-core/src/lib/io/ppio.h
+++ b/gnuradio-core/src/lib/io/ppio.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_PPIO_H
#define INCLUDED_PPIO_H
+#include <gr_core_api.h>
#include <boost/shared_ptr.hpp>
class ppio;
@@ -34,7 +35,7 @@ typedef boost::shared_ptr<ppio> ppio_sptr;
* \ingroup hardware
*/
-class ppio {
+class GR_CORE_API ppio {
public:
ppio () {}
virtual ~ppio ();
@@ -55,7 +56,7 @@ class ppio {
* Split out from class to make life easier for SWIG
*/
-ppio_sptr make_ppio (int which_pp);
+GR_CORE_API ppio_sptr make_ppio (int which_pp);
#endif /* INCLUDED_PPIO_H */
diff --git a/gnuradio-core/src/lib/io/ppio_ppdev.h b/gnuradio-core/src/lib/io/ppio_ppdev.h
index b5abe3f0a..5d082d784 100644
--- a/gnuradio-core/src/lib/io/ppio_ppdev.h
+++ b/gnuradio-core/src/lib/io/ppio_ppdev.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_PPIO_PPDEV_H
#define INCLUDED_PPIO_PPDEV_H
+#include <gr_core_api.h>
#include <ppio.h>
class ppio_ppdev;
@@ -33,8 +34,8 @@ typedef boost::shared_ptr<ppio_ppdev> ppio_ppdev_sptr;
* \ingroup hardware
*/
-class ppio_ppdev : public ppio {
- friend ppio_ppdev_sptr make_ppio_ppdev (int which = 0);
+class GR_CORE_API ppio_ppdev : public ppio {
+ friend GR_CORE_API ppio_ppdev_sptr make_ppio_ppdev (int which = 0);
ppio_ppdev (int which = 0);
public:
diff --git a/gnuradio-core/src/lib/io/sdr_1000.h b/gnuradio-core/src/lib/io/sdr_1000.h
index 113e85deb..6647fbba5 100644
--- a/gnuradio-core/src/lib/io/sdr_1000.h
+++ b/gnuradio-core/src/lib/io/sdr_1000.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_SDR_1000_H
#define INCLUDED_SDR_1000_H
+#include <gr_core_api.h>
#include <boost/shared_ptr.hpp>
class ppio;
@@ -36,7 +37,7 @@ enum { L_EXT = 0, L_BAND = 1, L_DDS0 = 2, L_DDS1 = 3 };
* \sa sdr_1000.py for a higher level interface.
* \ingroup hardware
*/
-class sdr_1000_base {
+class GR_CORE_API sdr_1000_base {
ppio_sptr d_ppio;
int d_shadow[4]; // shadow latches
diff --git a/gnuradio-core/src/lib/missing/CMakeLists.txt b/gnuradio-core/src/lib/missing/CMakeLists.txt
new file mode 100644
index 000000000..0a376645f
--- /dev/null
+++ b/gnuradio-core/src/lib/missing/CMakeLists.txt
@@ -0,0 +1,32 @@
+# Copyright 2010 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# This file included, use CMake directory variables
+########################################################################
+
+list(APPEND gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/bug_work_around_8.cc
+)
+
+if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)")
+ list(APPEND gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/posix_memalign.cc
+ )
+endif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)")
diff --git a/gnuradio-core/src/lib/reed-solomon/CMakeLists.txt b/gnuradio-core/src/lib/reed-solomon/CMakeLists.txt
new file mode 100644
index 000000000..f073249f6
--- /dev/null
+++ b/gnuradio-core/src/lib/reed-solomon/CMakeLists.txt
@@ -0,0 +1,62 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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 included, use CMake directory variables
+########################################################################
+#MSVC workaround: we cant have dynamically sized arrays.
+#So ifdef a max array bounds that is larger than NN and NROOTS
+#Its a bit of a hack, but if you look at the code, its so full of ifdefs,
+#and lacks optimization where it should be pre-allocating these arrays.
+if(MSVC)
+ set_source_files_properties(
+ ${CMAKE_CURRENT_SOURCE_DIR}/exercise.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/decode_rs.c
+ PROPERTIES COMPILE_DEFINITIONS "MAX_ARRAY=256;"
+ )
+endif(MSVC)
+
+set(gr_core_rs_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/encode_rs.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/decode_rs.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/init_rs.c
+)
+
+########################################################################
+# Setup sources and includes
+########################################################################
+list(APPEND gnuradio_core_sources ${gr_core_rs_sources})
+
+install(
+ FILES ${CMAKE_CURRENT_SOURCE_DIR}/rs.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "core_devel"
+)
+
+########################################################################
+# Register unit tests
+########################################################################
+if(ENABLE_TESTING)
+add_executable(gr_core_rstest
+ ${gr_core_rs_sources}
+ ${CMAKE_CURRENT_SOURCE_DIR}/rstest.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/exercise.c
+)
+add_test(gr-core-reed-solomon-test gr_core_rstest)
+endif(ENABLE_TESTING)
diff --git a/gnuradio-core/src/lib/reed-solomon/char.h b/gnuradio-core/src/lib/reed-solomon/char.h
index 2fbcb504a..8010fb0b9 100644
--- a/gnuradio-core/src/lib/reed-solomon/char.h
+++ b/gnuradio-core/src/lib/reed-solomon/char.h
@@ -6,6 +6,8 @@
#define DTYPE unsigned char
+#include <gr_core_api.h>
+
/* Reed-Solomon codec control block */
struct rs {
unsigned int mm; /* Bits per symbol */
@@ -44,12 +46,11 @@ static inline int modnn(struct rs *rs,int x){
#define INIT_RS init_rs_char
#define FREE_RS free_rs_char
-void ENCODE_RS(void *p,DTYPE *data,DTYPE *parity);
-int DECODE_RS(void *p,DTYPE *data,int *eras_pos,int no_eras);
-void *INIT_RS(unsigned int symsize,unsigned int gfpoly,unsigned int fcr,
+GR_CORE_API void ENCODE_RS(void *p,DTYPE *data,DTYPE *parity);
+GR_CORE_API int DECODE_RS(void *p,DTYPE *data,int *eras_pos,int no_eras);
+GR_CORE_API void *INIT_RS(unsigned int symsize,unsigned int gfpoly,unsigned int fcr,
unsigned int prim,unsigned int nroots);
-void FREE_RS(void *p);
-
+GR_CORE_API void FREE_RS(void *p);
diff --git a/gnuradio-core/src/lib/reed-solomon/decode_rs.c b/gnuradio-core/src/lib/reed-solomon/decode_rs.c
index 27ddd8532..ba60b89ee 100644
--- a/gnuradio-core/src/lib/reed-solomon/decode_rs.c
+++ b/gnuradio-core/src/lib/reed-solomon/decode_rs.c
@@ -8,7 +8,6 @@
#endif
#include <string.h>
-#include <strings.h>
#define NULL ((void *)0)
#define min(a,b) ((a) < (b) ? (a) : (b))
@@ -32,11 +31,19 @@ DTYPE *data, int *eras_pos, int no_eras){
#endif
int deg_lambda, el, deg_omega;
int i, j, r,k;
+#ifdef MAX_ARRAY
+ DTYPE u,q,tmp,num1,num2,den,discr_r;
+ DTYPE lambda[MAX_ARRAY], s[MAX_ARRAY]; /* Err+Eras Locator poly
+ * and syndrome poly */
+ DTYPE b[MAX_ARRAY], t[MAX_ARRAY], omega[MAX_ARRAY];
+ DTYPE root[MAX_ARRAY], reg[MAX_ARRAY], loc[MAX_ARRAY];
+#else
DTYPE u,q,tmp,num1,num2,den,discr_r;
DTYPE lambda[NROOTS+1], s[NROOTS]; /* Err+Eras Locator poly
* and syndrome poly */
DTYPE b[NROOTS+1], t[NROOTS+1], omega[NROOTS+1];
DTYPE root[NROOTS], reg[NROOTS+1], loc[NROOTS];
+#endif
int syn_error, count;
/* form the syndromes; i.e., evaluate data(x) at roots of g(x) */
diff --git a/gnuradio-core/src/lib/reed-solomon/encode_rs.c b/gnuradio-core/src/lib/reed-solomon/encode_rs.c
index 147f0a9e3..9d56d0bf1 100644
--- a/gnuradio-core/src/lib/reed-solomon/encode_rs.c
+++ b/gnuradio-core/src/lib/reed-solomon/encode_rs.c
@@ -3,7 +3,6 @@
* May be used under the terms of the GNU General Public License (GPL)
*/
#include <string.h>
-#include <strings.h>
#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 1e04f618d..987fe1aeb 100644
--- a/gnuradio-core/src/lib/reed-solomon/exercise.c
+++ b/gnuradio-core/src/lib/reed-solomon/exercise.c
@@ -13,7 +13,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <strings.h>
#ifdef FIXED
#include "fixed.h"
@@ -47,11 +46,19 @@ int trials){
#if !defined(CCSDS) && !defined(FIXED)
struct rs *rs = (struct rs *)p;
#endif
+#if MAX_ARRAY
+ DTYPE block[MAX_ARRAY],tblock[MAX_ARRAY];
+ int i;
+ int errors;
+ int errlocs[MAX_ARRAY];
+ int derrlocs[MAX_ARRAY];
+#else
DTYPE block[NN],tblock[NN];
int i;
int errors;
int errlocs[NN];
int derrlocs[NROOTS];
+#endif
int derrors;
int errval,errloc;
int erasures;
diff --git a/gnuradio-core/src/lib/reed-solomon/fixed.h b/gnuradio-core/src/lib/reed-solomon/fixed.h
index 9f0ddd9a4..30091e7bf 100644
--- a/gnuradio-core/src/lib/reed-solomon/fixed.h
+++ b/gnuradio-core/src/lib/reed-solomon/fixed.h
@@ -7,6 +7,8 @@
*/
#define DTYPE unsigned char
+#include <gr_core_api.h>
+
static inline int mod255(int x){
while (x >= 255) {
x -= 255;
@@ -34,5 +36,5 @@ extern unsigned char CCSDS_poly[];
#define ENCODE_RS encode_rs_8
#define DECODE_RS decode_rs_8
-void ENCODE_RS(DTYPE *data,DTYPE *parity);
-int DECODE_RS(DTYPE *data, int *eras_pos, int no_eras);
+GR_CORE_API void ENCODE_RS(DTYPE *data,DTYPE *parity);
+GR_CORE_API int DECODE_RS(DTYPE *data, int *eras_pos, int no_eras); \ No newline at end of file
diff --git a/gnuradio-core/src/lib/reed-solomon/int.h b/gnuradio-core/src/lib/reed-solomon/int.h
index 2b0405ae0..79979f827 100644
--- a/gnuradio-core/src/lib/reed-solomon/int.h
+++ b/gnuradio-core/src/lib/reed-solomon/int.h
@@ -5,8 +5,10 @@
*/
#define DTYPE int
+#include <gr_core_api.h>
+
/* Reed-Solomon codec control block */
-struct rs {
+struct GR_CORE_API rs {
unsigned int mm; /* Bits per symbol */
unsigned int nn; /* Symbols per block (= (1<<mm)-1) */
int *alpha_to; /* log lookup table */
@@ -43,12 +45,11 @@ static inline int modnn(struct rs *rs,int x){
#define INIT_RS init_rs_int
#define FREE_RS free_rs_int
-void ENCODE_RS(void *p,DTYPE *data,DTYPE *parity);
-int DECODE_RS(void *p,DTYPE *data,int *eras_pos,int no_eras);
+GR_CORE_API void ENCODE_RS(void *p,DTYPE *data,DTYPE *parity);
+GR_CORE_API int DECODE_RS(void *p,DTYPE *data,int *eras_pos,int no_eras);
void *INIT_RS(unsigned int symsize,unsigned int gfpoly,unsigned int fcr,
unsigned int prim,unsigned int nroots);
-void FREE_RS(void *p);
-
+GR_CORE_API void FREE_RS(void *p);
diff --git a/gnuradio-core/src/lib/reed-solomon/rs.h b/gnuradio-core/src/lib/reed-solomon/rs.h
index 9e731d9d9..97e78769e 100644
--- a/gnuradio-core/src/lib/reed-solomon/rs.h
+++ b/gnuradio-core/src/lib/reed-solomon/rs.h
@@ -1,28 +1,29 @@
+#include <gr_core_api.h>
/* User include file for the Reed-Solomon codec
* Copyright 2002, Phil Karn KA9Q
* May be used under the terms of the GNU General Public License (GPL)
*/
/* General purpose RS codec, 8-bit symbols */
-void encode_rs_char(void *rs,unsigned char *data,unsigned char *parity);
-int decode_rs_char(void *rs,unsigned char *data,int *eras_pos,
+GR_CORE_API void encode_rs_char(void *rs,unsigned char *data,unsigned char *parity);
+GR_CORE_API int decode_rs_char(void *rs,unsigned char *data,int *eras_pos,
int no_eras);
-void *init_rs_char(unsigned int symsize,unsigned int gfpoly,
+GR_CORE_API void *init_rs_char(unsigned int symsize,unsigned int gfpoly,
unsigned int fcr,unsigned int prim,unsigned int nroots);
-void free_rs_char(void *rs);
+GR_CORE_API void free_rs_char(void *rs);
/* General purpose RS codec, integer symbols */
-void encode_rs_int(void *rs,int *data,int *parity);
-int decode_rs_int(void *rs,int *data,int *eras_pos,int no_eras);
-void *init_rs_int(unsigned int symsize,unsigned int gfpoly,unsigned int fcr,
+GR_CORE_API void encode_rs_int(void *rs,int *data,int *parity);
+GR_CORE_API int decode_rs_int(void *rs,int *data,int *eras_pos,int no_eras);
+GR_CORE_API void *init_rs_int(unsigned int symsize,unsigned int gfpoly,unsigned int fcr,
unsigned int prim,unsigned int nroots);
-void free_rs_int(void *rs);
+GR_CORE_API void free_rs_int(void *rs);
/* CCSDS standard (255,223) RS codec with conventional (*not* dual-basis)
* symbol representation
*/
-void encode_rs_8(unsigned char *data,unsigned char *parity);
-int decode_rs_8(unsigned char *data,int *eras_pos,int no_eras);
+GR_CORE_API void encode_rs_8(unsigned char *data,unsigned char *parity);
+GR_CORE_API int decode_rs_8(unsigned char *data,int *eras_pos,int no_eras);
/* Tables to map from conventional->dual (Taltab) and
* dual->conventional (Tal1tab) bases
diff --git a/gnuradio-core/src/lib/runtime/CMakeLists.txt b/gnuradio-core/src/lib/runtime/CMakeLists.txt
new file mode 100644
index 000000000..52cb39c40
--- /dev/null
+++ b/gnuradio-core/src/lib/runtime/CMakeLists.txt
@@ -0,0 +1,162 @@
+# Copyright 2010-2010 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# This file included, use CMake directory variables
+########################################################################
+
+########################################################################
+# Append gnuradio-core library sources
+########################################################################
+list(APPEND gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_basic_block.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_flowgraph.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_flat_flowgraph.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_block.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_block_detail.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_block_executor.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_hier_block2.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_hier_block2_detail.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_buffer.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_dispatcher.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_error_handler.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_io_signature.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_local_sighandler.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_message.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_accepter.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_handler.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_queue.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_pagesize.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_preferences.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_realtime.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_scheduler.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_scheduler_sts.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_scheduler_tpb.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_single_threaded_scheduler.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_sptr_magic.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_sync_block.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_sync_decimator.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_sync_interpolator.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_sys_paths.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_top_block.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_top_block_impl.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_tpb_detail.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_tpb_thread_body.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_vmcircbuf.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_vmcircbuf_mmap_shm_open.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_vmcircbuf_mmap_tmpfile.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_vmcircbuf_createfilemapping.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_vmcircbuf_sysv_shm.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_select_handler.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_tag_info.cc
+)
+
+########################################################################
+# Append gnuradio-core test sources
+########################################################################
+list(APPEND test_gnuradio_core_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_block.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_hier_block2.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_hier_block2_derived.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_buffer.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_flowgraph.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_top_block.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_io_signature.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_vmcircbuf.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_block_tags.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_runtime.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_set_msg_handler.cc
+)
+
+########################################################################
+# Install runtime headers
+########################################################################
+install(FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_basic_block.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_flowgraph.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_flat_flowgraph.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_block.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_block_detail.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_block_executor.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_hier_block2.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_hier_block2_detail.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_buffer.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_complex.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_dispatcher.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_error_handler.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_io_signature.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_local_sighandler.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_message.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_accepter.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_handler.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_queue.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_pagesize.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_preferences.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_realtime.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_runtime_types.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_scheduler.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_scheduler_sts.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_scheduler_tpb.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_select_handler.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_single_threaded_scheduler.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_sptr_magic.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_sync_block.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_sync_decimator.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_sync_interpolator.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_top_block.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_top_block_impl.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_tpb_detail.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_tpb_thread_body.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_timer.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_sys_paths.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_types.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_unittests.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_vmcircbuf.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_tag_info.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "core_devel"
+)
+
+########################################################################
+# Install swig headers
+########################################################################
+if(ENABLE_PYTHON)
+install(FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_basic_block.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_block.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_block_detail.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_hier_block2.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_buffer.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_dispatcher.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_error_handler.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_io_signature.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_message.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_handler.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_queue.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_realtime.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_single_threaded_scheduler.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_sync_block.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_sync_decimator.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_sync_interpolator.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_top_block.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/runtime.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "core_swig"
+)
+endif(ENABLE_PYTHON)
diff --git a/gnuradio-core/src/lib/runtime/gr_basic_block.h b/gnuradio-core/src/lib/runtime/gr_basic_block.h
index 3b0cd51dd..2adca8ccb 100644
--- a/gnuradio-core/src/lib/runtime/gr_basic_block.h
+++ b/gnuradio-core/src/lib/runtime/gr_basic_block.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_BASIC_BLOCK_H
#define INCLUDED_GR_BASIC_BLOCK_H
+#include <gr_core_api.h>
#include <gr_runtime_types.h>
#include <gr_sptr_magic.h>
#include <boost/enable_shared_from_this.hpp>
@@ -41,7 +42,7 @@
* signal processing functions.
*/
-class gr_basic_block : public gr_msg_accepter, public boost::enable_shared_from_this<gr_basic_block>
+class GR_CORE_API gr_basic_block : public gr_msg_accepter, public boost::enable_shared_from_this<gr_basic_block>
{
typedef boost::function<void(pmt::pmt_t)> msg_handler_t;
@@ -158,7 +159,7 @@ inline bool operator<(gr_basic_block_sptr lhs, gr_basic_block_sptr rhs)
typedef std::vector<gr_basic_block_sptr> gr_basic_block_vector_t;
typedef std::vector<gr_basic_block_sptr>::iterator gr_basic_block_viter_t;
-long gr_basic_block_ncurrently_allocated();
+GR_CORE_API long gr_basic_block_ncurrently_allocated();
inline std::ostream &operator << (std::ostream &os, gr_basic_block_sptr basic_block)
{
diff --git a/gnuradio-core/src/lib/runtime/gr_block.h b/gnuradio-core/src/lib/runtime/gr_block.h
index fc22f9ea8..2453e97b8 100644
--- a/gnuradio-core/src/lib/runtime/gr_block.h
+++ b/gnuradio-core/src/lib/runtime/gr_block.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_BLOCK_H
#define INCLUDED_GR_BLOCK_H
+#include <gr_core_api.h>
#include <gr_basic_block.h>
/*!
@@ -53,7 +54,7 @@
* It reads the input items and writes the output items.
*/
-class gr_block : public gr_basic_block {
+class GR_CORE_API gr_block : public gr_basic_block {
public:
@@ -300,7 +301,7 @@ class gr_block : public gr_basic_block {
const pmt::pmt_t &key);
// These are really only for internal use, but leaving them public avoids
- // having to work up an ever-varying list of friends
+ // having to work up an ever-varying list of friend GR_CORE_APIs
public:
gr_block_detail_sptr detail () const { return d_detail; }
diff --git a/gnuradio-core/src/lib/runtime/gr_block_detail.h b/gnuradio-core/src/lib/runtime/gr_block_detail.h
index d7ec3b136..633da1b0c 100644
--- a/gnuradio-core/src/lib/runtime/gr_block_detail.h
+++ b/gnuradio-core/src/lib/runtime/gr_block_detail.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_BLOCK_DETAIL_H
#define INCLUDED_GR_BLOCK_DETAIL_H
+#include <gr_core_api.h>
#include <gr_runtime_types.h>
#include <gr_tpb_detail.h>
#include <gr_tag_info.h>
@@ -36,7 +37,7 @@
* 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 {
+class GR_CORE_API gr_block_detail {
public:
~gr_block_detail ();
@@ -172,16 +173,16 @@ class gr_block_detail {
gr_block_detail (unsigned int ninputs, unsigned int noutputs);
- friend class gr_tpb_detail;
+ friend struct gr_tpb_detail;
- friend gr_block_detail_sptr
+ friend GR_CORE_API gr_block_detail_sptr
gr_make_block_detail (unsigned int ninputs, unsigned int noutputs);
};
-gr_block_detail_sptr
+GR_CORE_API gr_block_detail_sptr
gr_make_block_detail (unsigned int ninputs, unsigned int noutputs);
-long
+GR_CORE_API long
gr_block_detail_ncurrently_allocated ();
#endif /* INCLUDED_GR_BLOCK_DETAIL_H */
diff --git a/gnuradio-core/src/lib/runtime/gr_block_executor.cc b/gnuradio-core/src/lib/runtime/gr_block_executor.cc
index a8d0bc1c8..b3f987f72 100644
--- a/gnuradio-core/src/lib/runtime/gr_block_executor.cc
+++ b/gnuradio-core/src/lib/runtime/gr_block_executor.cc
@@ -29,6 +29,7 @@
#include <gr_block_detail.h>
#include <gr_buffer.h>
#include <boost/thread.hpp>
+#include <boost/format.hpp>
#include <iostream>
#include <limits>
#include <assert.h>
@@ -165,9 +166,8 @@ 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::string name = str(boost::format("sst-%03d.log") % which_scheduler++);
+ d_log = new std::ofstream(name.c_str());
std::unitbuf(*d_log); // make it unbuffered...
*d_log << "gr_block_executor: "
<< d_block << std::endl;
diff --git a/gnuradio-core/src/lib/runtime/gr_block_executor.h b/gnuradio-core/src/lib/runtime/gr_block_executor.h
index 77ace5522..cd93212e1 100644
--- a/gnuradio-core/src/lib/runtime/gr_block_executor.h
+++ b/gnuradio-core/src/lib/runtime/gr_block_executor.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_BLOCK_EXECUTOR_H
#define INCLUDED_GR_BLOCK_EXECUTOR_H
+#include <gr_core_api.h>
#include <gr_runtime_types.h>
#include <fstream>
#include <gruel/pmt.h>
@@ -36,7 +37,7 @@
* \ingroup internal
*/
-class gr_block_executor {
+class GR_CORE_API gr_block_executor {
protected:
gr_block_sptr d_block; // The block we're trying to run
std::ofstream *d_log;
diff --git a/gnuradio-core/src/lib/runtime/gr_buffer.h b/gnuradio-core/src/lib/runtime/gr_buffer.h
index e5725d386..e7c0a06a5 100644
--- a/gnuradio-core/src/lib/runtime/gr_buffer.h
+++ b/gnuradio-core/src/lib/runtime/gr_buffer.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_BUFFER_H
#define INCLUDED_GR_BUFFER_H
+#include <gr_core_api.h>
#include <gr_runtime_types.h>
#include <boost/weak_ptr.hpp>
#include <gruel/thread.h>
@@ -42,14 +43,14 @@ class gr_vmcircbuf;
* \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_block_sptr link=gr_block_sptr());
+GR_CORE_API gr_buffer_sptr gr_make_buffer (int nitems, size_t sizeof_item, gr_block_sptr link=gr_block_sptr());
/*!
* \brief Single writer, multiple reader fifo.
* \ingroup internal
*/
-class gr_buffer {
+class GR_CORE_API gr_buffer {
public:
virtual ~gr_buffer ();
@@ -115,8 +116,8 @@ class gr_buffer {
private:
friend class gr_buffer_reader;
- 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);
+ friend GR_CORE_API gr_buffer_sptr gr_make_buffer (int nitems, size_t sizeof_item, gr_block_sptr link);
+ friend GR_CORE_API 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
@@ -192,11 +193,11 @@ class gr_buffer {
* \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_CORE_API 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 ();
+GR_CORE_API long gr_buffer_ncurrently_allocated ();
// ---------------------------------------------------------------------------
@@ -206,7 +207,7 @@ long gr_buffer_ncurrently_allocated ();
* \ingroup internal
*/
-class gr_buffer_reader {
+class GR_CORE_API gr_buffer_reader {
public:
~gr_buffer_reader ();
@@ -276,7 +277,7 @@ class gr_buffer_reader {
private:
friend class gr_buffer;
- friend gr_buffer_reader_sptr
+ friend GR_CORE_API gr_buffer_reader_sptr
gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload, gr_block_sptr link);
@@ -290,7 +291,7 @@ class gr_buffer_reader {
};
//! returns # of gr_buffer_readers currently allocated
-long gr_buffer_reader_ncurrently_allocated ();
+GR_CORE_API long gr_buffer_reader_ncurrently_allocated ();
#endif /* INCLUDED_GR_BUFFER_H */
diff --git a/gnuradio-core/src/lib/runtime/gr_dispatcher.h b/gnuradio-core/src/lib/runtime/gr_dispatcher.h
index 34f825102..735974766 100644
--- a/gnuradio-core/src/lib/runtime/gr_dispatcher.h
+++ b/gnuradio-core/src/lib/runtime/gr_dispatcher.h
@@ -23,14 +23,15 @@
#ifndef INCLUDED_GR_DISPATCHER_H
#define INCLUDED_GR_DISPATCHER_H
+#include <gr_core_api.h>
#include <gr_select_handler.h>
#include <vector>
class gr_dispatcher;
typedef boost::shared_ptr<gr_dispatcher> gr_dispatcher_sptr;
-gr_dispatcher_sptr gr_dispatcher_singleton();
-gr_dispatcher_sptr gr_make_dispatcher();
+GR_CORE_API gr_dispatcher_sptr gr_dispatcher_singleton();
+GR_CORE_API gr_dispatcher_sptr gr_make_dispatcher();
/*!
* \brief invoke callbacks based on select.
@@ -38,10 +39,10 @@ gr_dispatcher_sptr gr_make_dispatcher();
*
* \sa gr_select_handler
*/
-class gr_dispatcher
+class GR_CORE_API gr_dispatcher
{
gr_dispatcher();
- friend gr_dispatcher_sptr gr_make_dispatcher();
+ friend GR_CORE_API gr_dispatcher_sptr gr_make_dispatcher();
std::vector<gr_select_handler_sptr> d_handler;
int d_max_index;
diff --git a/gnuradio-core/src/lib/runtime/gr_error_handler.h b/gnuradio-core/src/lib/runtime/gr_error_handler.h
index aedb6f41f..4c30791f2 100644
--- a/gnuradio-core/src/lib/runtime/gr_error_handler.h
+++ b/gnuradio-core/src/lib/runtime/gr_error_handler.h
@@ -43,6 +43,7 @@
#ifndef INCLUDED_GR_ERROR_HANDLER_H
#define INCLUDED_GR_ERROR_HANDLER_H
+#include <gr_core_api.h>
#include <stdarg.h>
#include <string>
#include <cstdio> // for FILE
@@ -51,7 +52,7 @@
* \brief abstract error handler
* \ingroup base
*/
-class gr_error_handler {
+class GR_CORE_API gr_error_handler {
public:
enum seriousness {
ERR_DEBUG = 0x00000000,
@@ -90,7 +91,7 @@ protected:
};
-class gr_base_error_handler : public gr_error_handler {
+class GR_CORE_API gr_base_error_handler : public gr_error_handler {
int d_nwarnings;
int d_nerrors;
@@ -102,7 +103,7 @@ public:
void count_error(seriousness s);
};
-class gr_file_error_handler : public gr_base_error_handler {
+class GR_CORE_API gr_file_error_handler : public gr_base_error_handler {
FILE *d_file;
int d_fd;
public:
diff --git a/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h b/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h
index 8e9834337..2cc883686 100644
--- a/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h
+++ b/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h
@@ -23,22 +23,23 @@
#ifndef INCLUDED_GR_FLAT_FLOWGRAPH_H
#define INCLUDED_GR_FLAT_FLOWGRAPH_H
+#include <gr_core_api.h>
#include <gr_flowgraph.h>
#include <gr_block.h>
// 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();
+GR_CORE_API 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
+class GR_CORE_API gr_flat_flowgraph : public gr_flowgraph
{
public:
- friend gr_flat_flowgraph_sptr gr_make_flat_flowgraph();
+ friend GR_CORE_API gr_flat_flowgraph_sptr gr_make_flat_flowgraph();
// Destruct an arbitrary gr_flat_flowgraph
~gr_flat_flowgraph();
diff --git a/gnuradio-core/src/lib/runtime/gr_flowgraph.h b/gnuradio-core/src/lib/runtime/gr_flowgraph.h
index 8e988506b..8f9a8ba71 100644
--- a/gnuradio-core/src/lib/runtime/gr_flowgraph.h
+++ b/gnuradio-core/src/lib/runtime/gr_flowgraph.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_FLOWGRAPH_H
#define INCLUDED_GR_FLOWGRAPH_H
+#include <gr_core_api.h>
#include <gr_basic_block.h>
#include <iostream>
@@ -30,7 +31,7 @@
* \brief Class representing a specific input or output graph endpoint
* \ingroup internal
*/
-class gr_endpoint
+class GR_CORE_API gr_endpoint
{
private:
gr_basic_block_sptr d_basic_block;
@@ -59,7 +60,7 @@ typedef std::vector<gr_endpoint>::iterator gr_endpoint_viter_t;
*\brief Class representing a connection between to graph endpoints
*
*/
-class gr_edge
+class GR_CORE_API gr_edge
{
public:
gr_edge() : d_src(), d_dst() { };
@@ -81,16 +82,16 @@ typedef std::vector<gr_edge>::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();
+GR_CORE_API gr_flowgraph_sptr gr_make_flowgraph();
/*!
* \brief Class representing a directed, acyclic graph of basic blocks
* \ingroup internal
*/
-class gr_flowgraph
+class GR_CORE_API gr_flowgraph
{
public:
- friend gr_flowgraph_sptr gr_make_flowgraph();
+ friend GR_CORE_API gr_flowgraph_sptr gr_make_flowgraph();
// Destruct an arbitrary flowgraph
~gr_flowgraph();
diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2.h b/gnuradio-core/src/lib/runtime/gr_hier_block2.h
index 0a40c36b7..8687b7d99 100644
--- a/gnuradio-core/src/lib/runtime/gr_hier_block2.h
+++ b/gnuradio-core/src/lib/runtime/gr_hier_block2.h
@@ -22,13 +22,14 @@
#ifndef INCLUDED_GR_HIER_BLOCK2_H
#define INCLUDED_GR_HIER_BLOCK2_H
+#include <gr_core_api.h>
#include <gr_basic_block.h>
/*!
* \brief public constructor for gr_hier_block2
*/
-gr_hier_block2_sptr gr_make_hier_block2(const std::string &name,
+GR_CORE_API gr_hier_block2_sptr gr_make_hier_block2(const std::string &name,
gr_io_signature_sptr input_signature,
gr_io_signature_sptr output_signature);
@@ -40,11 +41,11 @@ class gr_hier_block2_detail;
* \ingroup base_blk
*
*/
-class gr_hier_block2 : public gr_basic_block
+class GR_CORE_API 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,
+ friend GR_CORE_API gr_hier_block2_sptr gr_make_hier_block2(const std::string &name,
gr_io_signature_sptr input_signature,
gr_io_signature_sptr output_signature);
diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h b/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
index 6f5384e5a..5a77d6a03 100644
--- a/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
+++ b/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_HIER_BLOCK2_DETAIL_H
#define INCLUDED_GR_HIER_BLOCK2_DETAIL_H
+#include <gr_core_api.h>
#include <gr_hier_block2.h>
#include <gr_flat_flowgraph.h>
#include <boost/utility.hpp>
@@ -29,7 +30,7 @@
/*!
* \ingroup internal
*/
-class gr_hier_block2_detail : boost::noncopyable
+class GR_CORE_API gr_hier_block2_detail : boost::noncopyable
{
public:
gr_hier_block2_detail(gr_hier_block2 *owner);
diff --git a/gnuradio-core/src/lib/runtime/gr_io_signature.h b/gnuradio-core/src/lib/runtime/gr_io_signature.h
index 5d194cf55..11c6b7f13 100644
--- a/gnuradio-core/src/lib/runtime/gr_io_signature.h
+++ b/gnuradio-core/src/lib/runtime/gr_io_signature.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_IO_SIGNATURE_H
#define INCLUDED_IO_SIGNATURE_H
+#include <gr_core_api.h>
#include <gr_runtime_types.h>
/*!
@@ -33,7 +34,7 @@
* \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_CORE_API gr_io_signature_sptr
gr_make_io_signature(int min_streams, int max_streams,
int sizeof_stream_item);
@@ -45,7 +46,7 @@ gr_make_io_signature(int min_streams, int max_streams,
* \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_CORE_API gr_io_signature_sptr
gr_make_io_signature2(int min_streams, int max_streams,
int sizeof_stream_item1,
int sizeof_stream_item2
@@ -60,7 +61,7 @@ gr_make_io_signature2(int min_streams, int max_streams,
* \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_CORE_API gr_io_signature_sptr
gr_make_io_signature3(int min_streams, int max_streams,
int sizeof_stream_item1,
int sizeof_stream_item2,
@@ -78,7 +79,7 @@ gr_make_io_signature3(int min_streams, int max_streams,
* 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_CORE_API gr_io_signature_sptr
gr_make_io_signaturev(int min_streams, int max_streams,
const std::vector<int> &sizeof_stream_items);
@@ -87,7 +88,7 @@ gr_make_io_signaturev(int min_streams, int max_streams,
* \brief i/o signature for input and output ports.
* \brief misc
*/
-class gr_io_signature {
+class GR_CORE_API gr_io_signature {
int d_min_streams;
int d_max_streams;
std::vector<int> d_sizeof_stream_item;
@@ -95,7 +96,7 @@ class gr_io_signature {
gr_io_signature(int min_streams, int max_streams,
const std::vector<int> &sizeof_stream_items);
- friend gr_io_signature_sptr
+ friend GR_CORE_API gr_io_signature_sptr
gr_make_io_signaturev(int min_streams,
int max_streams,
const std::vector<int> &sizeof_stream_items);
diff --git a/gnuradio-core/src/lib/runtime/gr_local_sighandler.h b/gnuradio-core/src/lib/runtime/gr_local_sighandler.h
index 6b60cf09a..9e4eacc47 100644
--- a/gnuradio-core/src/lib/runtime/gr_local_sighandler.h
+++ b/gnuradio-core/src/lib/runtime/gr_local_sighandler.h
@@ -27,6 +27,7 @@
#include <signal.h>
#endif
+#include <gr_core_api.h>
#include <string>
/*!
@@ -36,7 +37,7 @@
* Constructor installs new handler, destructor reinstalls
* original value.
*/
-class gr_local_sighandler {
+class GR_CORE_API gr_local_sighandler {
int d_signum;
#ifdef HAVE_SIGACTION
struct sigaction d_old_action;
@@ -52,7 +53,7 @@ public:
/*!
* \brief Representation of signal.
*/
-class gr_signal
+class GR_CORE_API gr_signal
{
int d_signum;
public:
diff --git a/gnuradio-core/src/lib/runtime/gr_message.h b/gnuradio-core/src/lib/runtime/gr_message.h
index 179f7d9bc..ead002616 100644
--- a/gnuradio-core/src/lib/runtime/gr_message.h
+++ b/gnuradio-core/src/lib/runtime/gr_message.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_MESSAGE_H
#define INCLUDED_GR_MESSAGE_H
+#include <gr_core_api.h>
#include <gr_types.h>
#include <string>
@@ -31,10 +32,10 @@ typedef boost::shared_ptr<gr_message> gr_message_sptr;
/*!
* \brief public constructor for gr_message
*/
-gr_message_sptr
+GR_CORE_API gr_message_sptr
gr_make_message(long type = 0, double arg1 = 0, double arg2 = 0, size_t length = 0);
-gr_message_sptr
+GR_CORE_API gr_message_sptr
gr_make_message_from_string(const std::string s, long type = 0, double arg1 = 0, double arg2 = 0);
/*!
@@ -44,7 +45,7 @@ gr_make_message_from_string(const std::string s, long type = 0, double arg1 = 0,
* The ideas and method names for adjustable message length were
* lifted from the click modular router "Packet" class.
*/
-class gr_message {
+class GR_CORE_API gr_message {
gr_message_sptr d_next; // link field for msg queue
long d_type; // type of the message
double d_arg1; // optional arg1
@@ -57,10 +58,10 @@ class gr_message {
gr_message (long type, double arg1, double arg2, size_t length);
- friend gr_message_sptr
+ friend GR_CORE_API gr_message_sptr
gr_make_message (long type, double arg1, double arg2, size_t length);
- friend gr_message_sptr
+ friend GR_CORE_API gr_message_sptr
gr_make_message_from_string (const std::string s, long type, double arg1, double arg2);
friend class gr_msg_queue;
@@ -85,6 +86,6 @@ public:
};
-long gr_message_ncurrently_allocated ();
+GR_CORE_API long gr_message_ncurrently_allocated ();
#endif /* INCLUDED_GR_MESSAGE_H */
diff --git a/gnuradio-core/src/lib/runtime/gr_msg_accepter.h b/gnuradio-core/src/lib/runtime/gr_msg_accepter.h
index 79a631f3a..4aec127a9 100644
--- a/gnuradio-core/src/lib/runtime/gr_msg_accepter.h
+++ b/gnuradio-core/src/lib/runtime/gr_msg_accepter.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_MSG_ACCEPTER_H
#define INCLUDED_GR_MSG_ACCEPTER_H
+#include <gr_core_api.h>
#include <gruel/msg_accepter.h>
#include <gruel/pmt.h>
@@ -29,7 +30,7 @@
* \brief Accepts messages and inserts them into a message queue, then notifies
* subclass gr_basic_block there is a message pending.
*/
-class gr_msg_accepter : public gruel::msg_accepter
+class GR_CORE_API gr_msg_accepter : public gruel::msg_accepter
{
public:
gr_msg_accepter();
diff --git a/gnuradio-core/src/lib/runtime/gr_msg_handler.h b/gnuradio-core/src/lib/runtime/gr_msg_handler.h
index 774dce73e..ebe3ffe37 100644
--- a/gnuradio-core/src/lib/runtime/gr_msg_handler.h
+++ b/gnuradio-core/src/lib/runtime/gr_msg_handler.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_MSG_HANDLER_H
#define INCLUDED_GR_MSG_HANDLER_H
+#include <gr_core_api.h>
#include <gr_message.h>
class gr_msg_handler;
@@ -31,7 +32,7 @@ typedef boost::shared_ptr<gr_msg_handler> gr_msg_handler_sptr;
* \brief abstract class of message handlers
* \ingroup base
*/
-class gr_msg_handler {
+class GR_CORE_API gr_msg_handler {
public:
virtual ~gr_msg_handler ();
diff --git a/gnuradio-core/src/lib/runtime/gr_msg_queue.h b/gnuradio-core/src/lib/runtime/gr_msg_queue.h
index 477b1ddf1..bf7b89882 100644
--- a/gnuradio-core/src/lib/runtime/gr_msg_queue.h
+++ b/gnuradio-core/src/lib/runtime/gr_msg_queue.h
@@ -22,19 +22,20 @@
#ifndef INCLUDED_GR_MSG_QUEUE_H
#define INCLUDED_GR_MSG_QUEUE_H
+#include <gr_core_api.h>
#include <gr_msg_handler.h>
#include <gruel/thread.h>
class gr_msg_queue;
typedef boost::shared_ptr<gr_msg_queue> gr_msg_queue_sptr;
-gr_msg_queue_sptr gr_make_msg_queue(unsigned int limit=0);
+GR_CORE_API 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 {
+class GR_CORE_API gr_msg_queue : public gr_msg_handler {
gruel::mutex d_mutex;
gruel::condition_variable d_not_empty;
diff --git a/gnuradio-core/src/lib/runtime/gr_pagesize.h b/gnuradio-core/src/lib/runtime/gr_pagesize.h
index 3c1b8eb6b..60dad42c9 100644
--- a/gnuradio-core/src/lib/runtime/gr_pagesize.h
+++ b/gnuradio-core/src/lib/runtime/gr_pagesize.h
@@ -22,11 +22,13 @@
#ifndef _GR_PAGESIZE_H_
#define _GR_PAGESIZE_H_
+#include <gr_core_api.h>
+
/*!
* \brief return the page size in bytes
*/
-int gr_pagesize ();
+GR_CORE_API int gr_pagesize ();
-#endif /* _GR_PAGESIZE_H_ */
+#endif /* _GR_PAGESIZE_H_ */ \ No newline at end of file
diff --git a/gnuradio-core/src/lib/runtime/gr_preferences.h b/gnuradio-core/src/lib/runtime/gr_preferences.h
index 7f2a25e6b..ab4dc0cb0 100644
--- a/gnuradio-core/src/lib/runtime/gr_preferences.h
+++ b/gnuradio-core/src/lib/runtime/gr_preferences.h
@@ -23,10 +23,12 @@
#ifndef _GR_PREFERENCES_H_
#define _GR_PREFERENCES_H_
-class gr_preferences {
+#include <gr_core_api.h>
+
+class GR_CORE_API gr_preferences {
public:
static const char *get (const char *key);
static void set (const char *key, const char *value);
};
-#endif /* _GR_PREFERENCES_H_ */
+#endif /* _GR_PREFERENCES_H_ */ \ No newline at end of file
diff --git a/gnuradio-core/src/lib/runtime/gr_realtime.h b/gnuradio-core/src/lib/runtime/gr_realtime.h
index 830c201d7..58db83086 100644
--- a/gnuradio-core/src/lib/runtime/gr_realtime.h
+++ b/gnuradio-core/src/lib/runtime/gr_realtime.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_REALTIME_H
#define INCLUDED_GR_REALTIME_H
+#include <gr_core_api.h>
#include <gruel/realtime.h>
typedef gruel::rt_status_t gr_rt_status_t;
@@ -31,6 +32,6 @@ 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_CORE_API gr_rt_status_t gr_enable_realtime_scheduling();
#endif /* INCLUDED_GR_REALTIME_H */
diff --git a/gnuradio-core/src/lib/runtime/gr_runtime_types.h b/gnuradio-core/src/lib/runtime/gr_runtime_types.h
index 74d2614a8..98f08b417 100644
--- a/gnuradio-core/src/lib/runtime/gr_runtime_types.h
+++ b/gnuradio-core/src/lib/runtime/gr_runtime_types.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_RUNTIME_TYPES_H
#define INCLUDED_GR_RUNTIME_TYPES_H
+#include <gr_core_api.h>
#include <gr_types.h>
/*
diff --git a/gnuradio-core/src/lib/runtime/gr_scheduler.h b/gnuradio-core/src/lib/runtime/gr_scheduler.h
index 13bc1ff14..4e97b5881 100644
--- a/gnuradio-core/src/lib/runtime/gr_scheduler.h
+++ b/gnuradio-core/src/lib/runtime/gr_scheduler.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GR_SCHEDULER_H
#define INCLUDED_GR_SCHEDULER_H
+#include <gr_core_api.h>
#include <boost/utility.hpp>
#include <gr_block.h>
#include <gr_flat_flowgraph.h>
@@ -36,7 +37,7 @@ typedef boost::shared_ptr<gr_scheduler> gr_scheduler_sptr;
*
* Preconditions: details, buffers and buffer readers have been assigned.
*/
-class gr_scheduler : boost::noncopyable
+class GR_CORE_API gr_scheduler : boost::noncopyable
{
public:
diff --git a/gnuradio-core/src/lib/runtime/gr_scheduler_sts.h b/gnuradio-core/src/lib/runtime/gr_scheduler_sts.h
index 4cf835156..9b73b68c1 100644
--- a/gnuradio-core/src/lib/runtime/gr_scheduler_sts.h
+++ b/gnuradio-core/src/lib/runtime/gr_scheduler_sts.h
@@ -21,13 +21,14 @@
#ifndef INCLUDED_GR_SCHEDULER_STS_H
#define INCLUDED_GR_SCHEDULER_STS_H
+#include <gr_core_api.h>
#include <gr_scheduler.h>
#include <gruel/thread_group.h>
/*!
* \brief Concrete scheduler that uses the single_threaded_scheduler
*/
-class gr_scheduler_sts : public gr_scheduler
+class GR_CORE_API gr_scheduler_sts : public gr_scheduler
{
gruel::thread_group d_threads;
diff --git a/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.h b/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.h
index 16a0c0204..f97ab2e7f 100644
--- a/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.h
+++ b/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.h
@@ -21,13 +21,14 @@
#ifndef INCLUDED_GR_SCHEDULER_TPB_H
#define INCLUDED_GR_SCHEDULER_TPB_H
+#include <gr_core_api.h>
#include <gr_scheduler.h>
#include <gruel/thread_group.h>
/*!
* \brief Concrete scheduler that uses a kernel thread-per-block
*/
-class gr_scheduler_tpb : public gr_scheduler
+class GR_CORE_API gr_scheduler_tpb : public gr_scheduler
{
gruel::thread_group d_threads;
diff --git a/gnuradio-core/src/lib/runtime/gr_select_handler.h b/gnuradio-core/src/lib/runtime/gr_select_handler.h
index c3808995b..532707a02 100644
--- a/gnuradio-core/src/lib/runtime/gr_select_handler.h
+++ b/gnuradio-core/src/lib/runtime/gr_select_handler.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_SELECT_HANDLER_H
#define INCLUDED_GR_SELECT_HANDLER_H
+#include <gr_core_api.h>
#include <boost/shared_ptr.hpp>
class gr_select_handler;
@@ -35,7 +36,7 @@ typedef boost::shared_ptr<gr_select_handler> gr_select_handler_sptr;
*
* \sa gr_dispatcher
*/
-class gr_select_handler
+class GR_CORE_API gr_select_handler
{
int d_fd;
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 7f1b40641..ae04e4a65 100644
--- a/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.cc
+++ b/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.cc
@@ -29,6 +29,7 @@
#include <gr_block_detail.h>
#include <gr_buffer.h>
#include <boost/thread.hpp>
+#include <boost/format.hpp>
#include <iostream>
#include <limits>
#include <assert.h>
@@ -57,9 +58,8 @@ gr_single_threaded_scheduler::gr_single_threaded_scheduler (
: d_blocks (blocks), d_enabled (true), d_log(0)
{
if (ENABLE_LOGGING){
- char name[100];
- snprintf(name, sizeof(name), "sst-%d.log", which_scheduler++);
- d_log = new std::ofstream(name);
+ std::string name = str(boost::format("sst-%d.log") % which_scheduler++);
+ d_log = new std::ofstream(name.c_str());
*d_log << "gr_single_threaded_scheduler: "
<< d_blocks.size ()
<< " blocks\n";
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 060d3017d..17f4a1c54 100644
--- a/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.h
+++ b/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_SINGLE_THREADED_SCHEDULER_H
#define INCLUDED_GR_SINGLE_THREADED_SCHEDULER_H
+#include <gr_core_api.h>
#include <gr_runtime_types.h>
#include <fstream>
@@ -35,7 +36,7 @@ typedef boost::shared_ptr<gr_single_threaded_scheduler> gr_single_threaded_sched
* \ingroup internal
*/
-class gr_single_threaded_scheduler {
+class GR_CORE_API gr_single_threaded_scheduler {
public:
~gr_single_threaded_scheduler ();
@@ -51,11 +52,11 @@ class gr_single_threaded_scheduler {
void main_loop ();
- friend gr_single_threaded_scheduler_sptr
+ friend GR_CORE_API gr_single_threaded_scheduler_sptr
gr_make_single_threaded_scheduler (const std::vector<gr_block_sptr> &blocks);
};
-gr_single_threaded_scheduler_sptr
+GR_CORE_API gr_single_threaded_scheduler_sptr
gr_make_single_threaded_scheduler (const std::vector<gr_block_sptr> &blocks);
#endif /* INCLUDED_GR_SINGLE_THREADED_SCHEDULER_H */
diff --git a/gnuradio-core/src/lib/runtime/gr_sptr_magic.h b/gnuradio-core/src/lib/runtime/gr_sptr_magic.h
index 872374ab6..4b7f9899d 100644
--- a/gnuradio-core/src/lib/runtime/gr_sptr_magic.h
+++ b/gnuradio-core/src/lib/runtime/gr_sptr_magic.h
@@ -21,6 +21,7 @@
#ifndef INCLUDED_GR_SPTR_MAGIC_H
#define INCLUDED_GR_SPTR_MAGIC_H
+#include <gr_core_api.h>
#include <boost/shared_ptr.hpp>
class gr_basic_block;
@@ -30,7 +31,7 @@ namespace gnuradio {
namespace detail {
- class sptr_magic {
+ class GR_CORE_API sptr_magic {
public:
static boost::shared_ptr<gr_basic_block> fetch_initial_sptr(gr_basic_block *p);
static void create_and_stash_initial_sptr(gr_hier_block2 *p);
diff --git a/gnuradio-core/src/lib/runtime/gr_sync_block.h b/gnuradio-core/src/lib/runtime/gr_sync_block.h
index c5a6a50f1..808c1c18a 100644
--- a/gnuradio-core/src/lib/runtime/gr_sync_block.h
+++ b/gnuradio-core/src/lib/runtime/gr_sync_block.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_SYNC_BLOCK_H
#define INCLUDED_GR_SYNC_BLOCK_H
+#include <gr_core_api.h>
#include <gr_block.h>
/*!
@@ -31,7 +32,7 @@
*
* Override work to provide the signal processing implementation.
*/
-class gr_sync_block : public gr_block
+class GR_CORE_API gr_sync_block : public gr_block
{
protected:
gr_sync_block (void){} //allows pure virtual interface sub-classes
diff --git a/gnuradio-core/src/lib/runtime/gr_sync_decimator.h b/gnuradio-core/src/lib/runtime/gr_sync_decimator.h
index 12cd54195..b2ed3c4fe 100644
--- a/gnuradio-core/src/lib/runtime/gr_sync_decimator.h
+++ b/gnuradio-core/src/lib/runtime/gr_sync_decimator.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_SYNC_DECIMATOR_H
#define INCLUDED_GR_SYNC_DECIMATOR_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
/*!
@@ -31,7 +32,7 @@
*
* Override work to provide the signal processing implementation.
*/
-class gr_sync_decimator : public gr_sync_block
+class GR_CORE_API gr_sync_decimator : public gr_sync_block
{
private:
unsigned d_decimation;
diff --git a/gnuradio-core/src/lib/runtime/gr_sync_interpolator.h b/gnuradio-core/src/lib/runtime/gr_sync_interpolator.h
index 0363bc55c..d65b3da1e 100644
--- a/gnuradio-core/src/lib/runtime/gr_sync_interpolator.h
+++ b/gnuradio-core/src/lib/runtime/gr_sync_interpolator.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_SYNC_INTERPOLATOR_H
#define INCLUDED_GR_SYNC_INTERPOLATOR_H
+#include <gr_core_api.h>
#include <gr_sync_block.h>
/*!
@@ -31,7 +32,7 @@
*
* Override work to provide the signal processing implementation.
*/
-class gr_sync_interpolator : public gr_sync_block
+class GR_CORE_API gr_sync_interpolator : public gr_sync_block
{
private:
unsigned d_interpolation;
diff --git a/gnuradio-core/src/lib/runtime/gr_sys_paths.h b/gnuradio-core/src/lib/runtime/gr_sys_paths.h
index aa8249775..1f1759c36 100644
--- a/gnuradio-core/src/lib/runtime/gr_sys_paths.h
+++ b/gnuradio-core/src/lib/runtime/gr_sys_paths.h
@@ -22,10 +22,12 @@
#ifndef _GR_SYS_PATHS_H_
#define _GR_SYS_PATHS_H_
+#include <gr_core_api.h>
+
//! directory to create temporary files
-const char *gr_tmp_path();
+GR_CORE_API const char *gr_tmp_path();
//! directory to store application data
-const char *gr_appdata_path();
+GR_CORE_API const char *gr_appdata_path();
#endif /* _GR_SYS_PATHS_H_ */
diff --git a/gnuradio-core/src/lib/runtime/gr_timer.h b/gnuradio-core/src/lib/runtime/gr_timer.h
index ff14e315d..fa3c06ece 100644
--- a/gnuradio-core/src/lib/runtime/gr_timer.h
+++ b/gnuradio-core/src/lib/runtime/gr_timer.h
@@ -22,13 +22,14 @@
#ifndef INCLUDED_GR_TIMER_H
#define INCLUDED_GR_TIMER_H
+#include <gr_core_api.h>
#include <gr_types.h>
class gr_timer;
typedef boost::shared_ptr<gr_timer> gr_timer_sptr;
-typedef void (*gr_timer_hook)(gr_timer *, void *);
+GR_CORE_API typedef void (*gr_timer_hook)(gr_timer *, void *);
/*!
* \brief create a timeout.
@@ -36,18 +37,18 @@ typedef void (*gr_timer_hook)(gr_timer *, void *);
* \ingroup misc
* gr_timer_hook is called when timer fires.
*/
-gr_timer_sptr gr_make_timer (gr_timer_hook, void *);
+GR_CORE_API gr_timer_sptr gr_make_timer (gr_timer_hook, void *);
/*!
* \brief implement timeouts
*/
-class gr_timer {
+class GR_CORE_API gr_timer {
double d_expiry;
double d_period;
gr_timer_hook d_hook;
void *d_hook_arg;
- friend gr_timer_sptr gr_make_timer (gr_timer_hook, void *);
+ friend GR_CORE_API gr_timer_sptr gr_make_timer (gr_timer_hook, void *);
gr_timer (...);
diff --git a/gnuradio-core/src/lib/runtime/gr_top_block.h b/gnuradio-core/src/lib/runtime/gr_top_block.h
index ed244cb7c..fca68ae71 100644
--- a/gnuradio-core/src/lib/runtime/gr_top_block.h
+++ b/gnuradio-core/src/lib/runtime/gr_top_block.h
@@ -23,21 +23,22 @@
#ifndef INCLUDED_GR_TOP_BLOCK_H
#define INCLUDED_GR_TOP_BLOCK_H
+#include <gr_core_api.h>
#include <gr_hier_block2.h>
class gr_top_block_impl;
-gr_top_block_sptr gr_make_top_block(const std::string &name);
+GR_CORE_API 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
+class GR_CORE_API gr_top_block : public gr_hier_block2
{
private:
- friend gr_top_block_sptr gr_make_top_block(const std::string &name);
+ friend GR_CORE_API gr_top_block_sptr gr_make_top_block(const std::string &name);
gr_top_block_impl *d_impl;
diff --git a/gnuradio-core/src/lib/runtime/gr_top_block_impl.h b/gnuradio-core/src/lib/runtime/gr_top_block_impl.h
index ef28dd829..904443be5 100644
--- a/gnuradio-core/src/lib/runtime/gr_top_block_impl.h
+++ b/gnuradio-core/src/lib/runtime/gr_top_block_impl.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_TOP_BLOCK_IMPL_H
#define INCLUDED_GR_TOP_BLOCK_IMPL_H
+#include <gr_core_api.h>
#include <gr_scheduler.h>
#include <gruel/thread.h>
@@ -34,7 +35,7 @@
* decoupling of changes from dependent classes.
*
*/
-class gr_top_block_impl
+class GR_CORE_API gr_top_block_impl
{
public:
gr_top_block_impl(gr_top_block *owner);
diff --git a/gnuradio-core/src/lib/runtime/gr_tpb_detail.h b/gnuradio-core/src/lib/runtime/gr_tpb_detail.h
index acfa264c7..90908c2f5 100644
--- a/gnuradio-core/src/lib/runtime/gr_tpb_detail.h
+++ b/gnuradio-core/src/lib/runtime/gr_tpb_detail.h
@@ -21,6 +21,7 @@
#ifndef INCLUDED_GR_TPB_DETAIL_H
#define INCLUDED_GR_TPB_DETAIL_H
+#include <gr_core_api.h>
#include <gruel/thread.h>
#include <deque>
#include <gruel/pmt.h>
@@ -30,7 +31,7 @@ class gr_block_detail;
/*!
* \brief used by thread-per-block scheduler
*/
-struct gr_tpb_detail {
+struct GR_CORE_API gr_tpb_detail {
gruel::mutex mutex; //< protects all vars
bool input_changed;
diff --git a/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.h b/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.h
index a630b1be9..548cfedfb 100644
--- a/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.h
+++ b/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.h
@@ -21,6 +21,7 @@
#ifndef INCLUDED_GR_TPB_THREAD_BODY_H
#define INCLUDED_GR_TPB_THREAD_BODY_H
+#include <gr_core_api.h>
#include <gr_block_executor.h>
#include <gr_block.h>
#include <gr_block_detail.h>
@@ -33,7 +34,7 @@
* done or is interrupted.
*/
-class gr_tpb_thread_body {
+class GR_CORE_API gr_tpb_thread_body {
gr_block_executor d_exec;
public:
diff --git a/gnuradio-core/src/lib/runtime/gr_types.h b/gnuradio-core/src/lib/runtime/gr_types.h
index ad8f145b8..fd5ca7758 100644
--- a/gnuradio-core/src/lib/runtime/gr_types.h
+++ b/gnuradio-core/src/lib/runtime/gr_types.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GR_TYPES_H
#define INCLUDED_GR_TYPES_H
+#include <gr_core_api.h>
#include <boost/shared_ptr.hpp>
#include <vector>
#include <stddef.h> // size_t
diff --git a/gnuradio-core/src/lib/runtime/gr_unittests.h b/gnuradio-core/src/lib/runtime/gr_unittests.h
index 59149bb2e..7161b31e7 100644
--- a/gnuradio-core/src/lib/runtime/gr_unittests.h
+++ b/gnuradio-core/src/lib/runtime/gr_unittests.h
@@ -24,12 +24,14 @@
#include "config.h"
#endif
+#include <gr_core_api.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
+#include <string>
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/path.hpp>
diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf.cc b/gnuradio-core/src/lib/runtime/gr_vmcircbuf.cc
index 3b8a6e617..7138605c9 100644
--- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf.cc
+++ b/gnuradio-core/src/lib/runtime/gr_vmcircbuf.cc
@@ -30,6 +30,8 @@
#include <stdio.h>
#include <string.h>
#include <gr_local_sighandler.h>
+#include <vector>
+#include <boost/format.hpp>
// all the factories we know about
#include <gr_vmcircbuf_createfilemapping.h>
@@ -130,7 +132,7 @@ init_buffer (gr_vmcircbuf *c, int counter, int size)
}
static bool
-check_mapping (gr_vmcircbuf *c, int counter, int size, char *msg, bool verbose)
+check_mapping (gr_vmcircbuf *c, int counter, int size, const char *msg, bool verbose)
{
bool ok = true;
@@ -163,28 +165,28 @@ check_mapping (gr_vmcircbuf *c, int counter, int size, char *msg, bool verbose)
return ok;
}
-static char *
+static const char *
memsize (int size)
{
- static char buf[100];
+ static std::string buf;
if (size >= (1 << 20)){
- snprintf (buf, sizeof (buf), "%dMB", size / (1 << 20));
+ buf = str(boost::format("%dMB") % (size / (1 << 20)));
}
else if (size >= (1 << 10)){
- snprintf (buf, sizeof (buf), "%dKB", size / (1 << 10));
+ buf = str(boost::format("%dKB") % (size / (1 << 10)));
}
else {
- snprintf (buf, sizeof (buf), "%d", size);
+ buf = str(boost::format("%d") % size);
}
- return buf;
+ return buf.c_str();
}
static bool
test_a_bunch (gr_vmcircbuf_factory *factory, int n, int size, int *start_ptr, bool verbose)
{
bool ok = true;
- int counter[n];
- gr_vmcircbuf *c[n];
+ std::vector<int> counter(n);
+ std::vector<gr_vmcircbuf *> c(n);
int cum_size = 0;
for (int i = 0; i < n; i++){
@@ -202,9 +204,8 @@ test_a_bunch (gr_vmcircbuf_factory *factory, int n, int size, int *start_ptr, bo
}
for (int i = 0; i < n; i++){
- char msg[100];
- snprintf (msg, sizeof (msg), "test_a_bunch_%dx%s[%d]", n, memsize (size), i);
- ok &= check_mapping (c[i], counter[i], size, msg, verbose);
+ std::string msg = str(boost::format("test_a_bunch_%dx%s[%d]") % n % memsize (size) % i);
+ ok &= check_mapping (c[i], counter[i], size, msg.c_str(), verbose);
}
for (int i = 0; i < n; i++){
diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf.h b/gnuradio-core/src/lib/runtime/gr_vmcircbuf.h
index a73a1559c..0e67d405b 100644
--- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf.h
+++ b/gnuradio-core/src/lib/runtime/gr_vmcircbuf.h
@@ -23,13 +23,14 @@
#ifndef _GR_VMCIRCBUF_H_
#define _GR_VMCIRCBUF_H_
+#include <gr_core_api.h>
#include <vector>
/*!
* \brief abstract class to implement doubly mapped virtual memory circular buffers
* \ingroup internal
*/
-class gr_vmcircbuf {
+class GR_CORE_API gr_vmcircbuf {
protected:
int d_size;
char *d_base;
@@ -48,7 +49,7 @@ class gr_vmcircbuf {
/*!
* \brief abstract factory for creating circular buffers
*/
-class gr_vmcircbuf_factory {
+class GR_CORE_API gr_vmcircbuf_factory {
protected:
gr_vmcircbuf_factory () {};
virtual ~gr_vmcircbuf_factory ();
@@ -76,7 +77,7 @@ class gr_vmcircbuf_factory {
/*
* \brief pulls together all implementations of gr_vmcircbuf
*/
-class gr_vmcircbuf_sysconfig {
+class GR_CORE_API gr_vmcircbuf_sysconfig {
public:
/*
diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.cc b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.cc
index 42c459484..1b4d9700a 100644
--- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.cc
+++ b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.cc
@@ -37,6 +37,7 @@
#include <stdio.h>
#include <gr_pagesize.h>
#include <gr_vmcircbuf_createfilemapping.h>
+#include <boost/format.hpp>
#ifdef HAVE_CREATEFILEMAPPING
// Print Windows error (could/should be global?)
@@ -72,23 +73,21 @@ gr_vmcircbuf_createfilemapping::gr_vmcircbuf_createfilemapping (int size)
throw std::runtime_error ("gr_vmcircbuf_createfilemapping");
}
- char seg_name[1024];
- snprintf (seg_name, sizeof (seg_name), "/gnuradio-%d-%d", getpid (), s_seg_counter);
+ std::string seg_name = str(boost::format("/gnuradio-%d-%d") % getpid () % s_seg_counter);
d_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
+ seg_name.c_str()); // name of mapping object
s_seg_counter++;
if (d_handle == NULL || d_handle == INVALID_HANDLE_VALUE){
- char msg[1024];
- snprintf( msg, sizeof(msg),
- "gr_vmcircbuf_mmap_createfilemapping: CreateFileMapping [%s]",
+ std::string msg = str(boost::format(
+ "gr_vmcircbuf_mmap_createfilemapping: CreateFileMapping [%s]") %
seg_name );
- werror( msg, GetLastError() );
+ werror((char *) msg.c_str(), GetLastError() );
throw std::runtime_error ("gr_vmcircbuf_mmap_createfilemapping");
}
diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.h b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.h
index 9276ae98b..5ef31f5c6 100644
--- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.h
+++ b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.h
@@ -23,6 +23,7 @@
#ifndef _GR_VMCIRCBUF_CREATEFILEMAPPING_H_
#define _GR_VMCIRCBUF_CREATEFILEMAPPING_H_
+#include <gr_core_api.h>
#include <gr_vmcircbuf.h>
#ifdef HAVE_CREATEFILEMAPPING
@@ -32,7 +33,7 @@
* \brief concrete class to implement circular buffers with mmap and shm_open
* \ingroup internal
*/
-class gr_vmcircbuf_createfilemapping : public gr_vmcircbuf
+class GR_CORE_API gr_vmcircbuf_createfilemapping : public gr_vmcircbuf
{
public:
// CREATORS
@@ -49,7 +50,7 @@ class gr_vmcircbuf_createfilemapping : public gr_vmcircbuf
/*!
* \brief concrete factory for circular buffers built using mmap and shm_open
*/
-class gr_vmcircbuf_createfilemapping_factory : public gr_vmcircbuf_factory
+class GR_CORE_API gr_vmcircbuf_createfilemapping_factory : public gr_vmcircbuf_factory
{
private:
static gr_vmcircbuf_factory *s_the_factory;
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 238f44414..002f5b434 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
@@ -23,13 +23,14 @@
#ifndef _GR_VMCIRCBUF_MMAP_SHM_OPEN_H_
#define _GR_VMCIRCBUF_MMAP_SHM_OPEN_H_
+#include <gr_core_api.h>
#include <gr_vmcircbuf.h>
/*!
* \brief concrete class to implement circular buffers with mmap and shm_open
* \ingroup internal
*/
-class gr_vmcircbuf_mmap_shm_open : public gr_vmcircbuf {
+class GR_CORE_API gr_vmcircbuf_mmap_shm_open : public gr_vmcircbuf {
public:
// CREATORS
@@ -41,7 +42,7 @@ class gr_vmcircbuf_mmap_shm_open : public gr_vmcircbuf {
/*!
* \brief concrete factory for circular buffers built using mmap and shm_open
*/
-class gr_vmcircbuf_mmap_shm_open_factory : public gr_vmcircbuf_factory {
+class GR_CORE_API gr_vmcircbuf_mmap_shm_open_factory : public gr_vmcircbuf_factory {
private:
static gr_vmcircbuf_factory *s_the_factory;
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 e5be52768..a2ed6b87b 100644
--- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.h
+++ b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.h
@@ -23,13 +23,14 @@
#ifndef _GR_VMCIRCBUF_MMAP_TMPFILE_H_
#define _GR_VMCIRCBUF_MMAP_TMPFILE_H_
+#include <gr_core_api.h>
#include <gr_vmcircbuf.h>
/*!
* \brief concrete class to implement circular buffers with mmap and shm_open
* \ingroup internal
*/
-class gr_vmcircbuf_mmap_tmpfile : public gr_vmcircbuf {
+class GR_CORE_API gr_vmcircbuf_mmap_tmpfile : public gr_vmcircbuf {
public:
// CREATORS
@@ -41,7 +42,7 @@ class gr_vmcircbuf_mmap_tmpfile : public gr_vmcircbuf {
/*!
* \brief concrete factory for circular buffers built using mmap and shm_open
*/
-class gr_vmcircbuf_mmap_tmpfile_factory : public gr_vmcircbuf_factory {
+class GR_CORE_API gr_vmcircbuf_mmap_tmpfile_factory : public gr_vmcircbuf_factory {
private:
static gr_vmcircbuf_factory *s_the_factory;
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 cc87f8fe6..c7a008581 100644
--- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_sysv_shm.h
+++ b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_sysv_shm.h
@@ -23,13 +23,14 @@
#ifndef _GR_VMCIRCBUF_SYSV_SHM_H_
#define _GR_VMCIRCBUF_SYSV_SHM_H_
+#include <gr_core_api.h>
#include <gr_vmcircbuf.h>
/*!
* \brief concrete class to implement circular buffers with mmap and shm_open
* \ingroup internal
*/
-class gr_vmcircbuf_sysv_shm : public gr_vmcircbuf {
+class GR_CORE_API gr_vmcircbuf_sysv_shm : public gr_vmcircbuf {
public:
// CREATORS
@@ -41,7 +42,7 @@ class gr_vmcircbuf_sysv_shm : public gr_vmcircbuf {
/*!
* \brief concrete factory for circular buffers built using mmap and shm_open
*/
-class gr_vmcircbuf_sysv_shm_factory : public gr_vmcircbuf_factory {
+class GR_CORE_API gr_vmcircbuf_sysv_shm_factory : public gr_vmcircbuf_factory {
private:
static gr_vmcircbuf_factory *s_the_factory;
diff --git a/gnuradio-core/src/lib/runtime/qa_runtime.h b/gnuradio-core/src/lib/runtime/qa_runtime.h
index c55208c39..e1038aaf6 100644
--- a/gnuradio-core/src/lib/runtime/qa_runtime.h
+++ b/gnuradio-core/src/lib/runtime/qa_runtime.h
@@ -23,11 +23,12 @@
#ifndef _QA_RUNTIME_H_
#define _QA_RUNTIME_H_
+#include <gruel/attributes.h>
#include <cppunit/TestSuite.h>
//! collect all the tests for the runtime directory
-class qa_runtime {
+class __GR_ATTR_EXPORT qa_runtime {
public:
//! return suite of tests for all of runtime directory
static CppUnit::TestSuite *suite ();
diff --git a/gnuradio-core/src/lib/swig/CMakeLists.txt b/gnuradio-core/src/lib/swig/CMakeLists.txt
new file mode 100644
index 000000000..73a6f92ff
--- /dev/null
+++ b/gnuradio-core/src/lib/swig/CMakeLists.txt
@@ -0,0 +1,93 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrPython)
+include(GrSwig)
+
+include_directories(${Boost_INCLUDE_DIRS})
+link_directories(${Boost_LIBRARY_DIRS})
+
+set(GR_SWIG_INCLUDE_DIRS
+ ${Boost_INCLUDE_DIRS}
+ ${GSL_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${CMAKE_CURRENT_BINARY_DIR}
+)
+set(GR_SWIG_LIBRARIES gnuradio-core)
+
+########################################################################
+# Build and install the swig targets
+########################################################################
+# ----------------------------------------------------------------
+# We've split the previously monstrous gnuradio_corethon 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!
+# ----------------------------------------------------------------
+
+set(GR_SWIG_TARGET_DEPS gengen_generated gengen_generated_index filter_generated)
+
+GR_SWIG_MAKE(gnuradio_core_runtime gnuradio_core_runtime.i)
+GR_SWIG_MAKE(gnuradio_core_general gnuradio_core_general.i)
+GR_SWIG_MAKE(gnuradio_core_gengen gnuradio_core_gengen.i)
+GR_SWIG_MAKE(gnuradio_core_filter gnuradio_core_filter.i)
+GR_SWIG_MAKE(gnuradio_core_io gnuradio_core_io.i)
+GR_SWIG_MAKE(gnuradio_core_hier gnuradio_core_hier.i)
+
+GR_SWIG_INSTALL(TARGETS
+ gnuradio_core_runtime
+ gnuradio_core_general
+ gnuradio_core_gengen
+ gnuradio_core_filter
+ gnuradio_core_io
+ gnuradio_core_hier
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/gr
+ COMPONENT "core_python"
+)
+
+########################################################################
+# Install various files
+########################################################################
+install(FILES
+ gnuradio.i
+ gr_swig_block_magic.i
+ gr_shared_ptr.i
+ gnuradio_core_runtime.i
+ gnuradio_core_general.i
+ gnuradio_core_gengen.i
+ gnuradio_core_filter.i
+ gnuradio_core_io.i
+ gnuradio_core_hier.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "core_swig"
+)
+
+GR_PYTHON_INSTALL(
+ FILES gnuradio_core.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/gr
+ COMPONENT "core_python"
+)
+
+install(
+ FILES ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio_swig_bug_workaround.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "core_swig"
+)
diff --git a/gnuradio-core/src/lib/swig/gnuradio_core_general.i b/gnuradio-core/src/lib/swig/gnuradio_core_general.i
index adf6b469a..b34d4f936 100644
--- a/gnuradio-core/src/lib/swig/gnuradio_core_general.i
+++ b/gnuradio-core/src/lib/swig/gnuradio_core_general.i
@@ -19,6 +19,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#define GR_CORE_API
+
#ifndef SWIGIMPORTED
%module(directors="1") gnuradio_core_general
#endif
diff --git a/gnuradio-core/src/lib/viterbi/CMakeLists.txt b/gnuradio-core/src/lib/viterbi/CMakeLists.txt
new file mode 100644
index 000000000..add5c77e8
--- /dev/null
+++ b/gnuradio-core/src/lib/viterbi/CMakeLists.txt
@@ -0,0 +1,63 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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 included, use CMake directory variables
+########################################################################
+
+set(viterbi_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/metrics.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/tab.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/viterbi.c
+)
+
+########################################################################
+# define missing erf function with C linkage (hack for metrics.c)
+########################################################################
+if(MSVC)
+file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/boost_math_erf.cc "
+#include <boost/math/special_functions/erf.hpp>
+extern \"C\" double erf(double x){
+ return boost::math::erf(x);
+}
+")
+list(APPEND viterbi_sources ${CMAKE_CURRENT_BINARY_DIR}/boost_math_erf.cc)
+endif(MSVC)
+
+########################################################################
+# Append gnuradio-core library sources
+########################################################################
+list(APPEND gnuradio_core_sources ${viterbi_sources})
+
+########################################################################
+# Install runtime headers
+########################################################################
+install(
+ FILES ${CMAKE_CURRENT_SOURCE_DIR}/viterbi.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "core_devel"
+)
+
+########################################################################
+# Create some text executables (not registered tests)
+# Its not much to build so the sources are just re-listed,
+# rather than create a new library just for these two apps.
+########################################################################
+#ADD_EXECUTABLE(viterbi_encode ${CMAKE_CURRENT_SOURCE_DIR}/encode.cc ${viterbi_sources})
+#ADD_EXECUTABLE(viterbi_decode ${CMAKE_CURRENT_SOURCE_DIR}/decode.cc ${viterbi_sources})
diff --git a/gnuradio-core/src/lib/viterbi/Makefile.am b/gnuradio-core/src/lib/viterbi/Makefile.am
index 8384c52f0..1b86a86f8 100644
--- a/gnuradio-core/src/lib/viterbi/Makefile.am
+++ b/gnuradio-core/src/lib/viterbi/Makefile.am
@@ -21,6 +21,8 @@ include $(top_srcdir)/Makefile.common
LIBS = -lm
+AM_CPPFLAGS = -I$(top_srcdir)/gnuradio-core/src/lib/general
+
noinst_LTLIBRARIES = libviterbi.la
libviterbi_la_SOURCES = \
diff --git a/gnuradio-core/src/lib/viterbi/metrics.c b/gnuradio-core/src/lib/viterbi/metrics.c
index 9f958cab7..77c6a63c8 100644
--- a/gnuradio-core/src/lib/viterbi/metrics.c
+++ b/gnuradio-core/src/lib/viterbi/metrics.c
@@ -42,6 +42,9 @@
#include <stdlib.h>
#include <math.h>
+//declare erf in case it was missing in math.h and provided for by the build system
+extern double erf(double x);
+
/* Normal function integrated from -Inf to x. Range: 0-1 */
#define normal(x) (0.5 + 0.5*erf((x)/M_SQRT2))
diff --git a/gnuradio-core/src/lib/viterbi/viterbi.h b/gnuradio-core/src/lib/viterbi/viterbi.h
index 155b0d93a..5bb8b357a 100644
--- a/gnuradio-core/src/lib/viterbi/viterbi.h
+++ b/gnuradio-core/src/lib/viterbi/viterbi.h
@@ -23,27 +23,31 @@
* 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 {
+
+#include <gr_core_api.h>
+
+struct GR_CORE_API viterbi_state {
unsigned long path; /* Decoded path to this state */
long metric; /* Cumulative metric to this state */
};
+GR_CORE_API
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
+GR_CORE_API unsigned char
encode(unsigned char *symbols, unsigned char *data,
unsigned int nbytes,unsigned char encstate);
-void
+GR_CORE_API void
viterbi_chunks_init(struct viterbi_state* state);
-void
+ GR_CORE_API void
viterbi_butterfly2(unsigned char *symbols, int mettab[2][256],
struct viterbi_state *state0, struct viterbi_state *state1);
-unsigned char
+GR_CORE_API unsigned char
viterbi_get_output(struct viterbi_state *state, unsigned char *outbuf);
diff --git a/gnuradio-core/src/python/build_utils.py b/gnuradio-core/src/python/build_utils.py
index c7acf6bd0..90c7978f2 100644
--- a/gnuradio-core/src/python/build_utils.py
+++ b/gnuradio-core/src/python/build_utils.py
@@ -93,7 +93,7 @@ def output_makefile_fragment ():
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 = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), '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')
diff --git a/gnuradio-core/src/python/gnuradio/CMakeLists.txt b/gnuradio-core/src/python/gnuradio/CMakeLists.txt
new file mode 100644
index 000000000..8d04b183d
--- /dev/null
+++ b/gnuradio-core/src/python/gnuradio/CMakeLists.txt
@@ -0,0 +1,39 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrPython)
+
+add_subdirectory(gr)
+add_subdirectory(gru)
+add_subdirectory(gruimpl)
+add_subdirectory(blks2)
+add_subdirectory(blks2impl)
+
+GR_PYTHON_INSTALL(FILES
+ __init__.py
+ eng_notation.py
+ eng_option.py
+ gr_unittest.py
+ gr_xmlrunner.py
+ optfir.py
+ usrp_options.py
+ window.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio
+ COMPONENT "core_python"
+)
diff --git a/gnuradio-core/src/python/gnuradio/blks2/CMakeLists.txt b/gnuradio-core/src/python/gnuradio/blks2/CMakeLists.txt
new file mode 100644
index 000000000..83d11dd83
--- /dev/null
+++ b/gnuradio-core/src/python/gnuradio/blks2/CMakeLists.txt
@@ -0,0 +1,26 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrPython)
+
+GR_PYTHON_INSTALL(
+ FILES __init__.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/blks2
+ COMPONENT "core_python"
+)
diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/CMakeLists.txt b/gnuradio-core/src/python/gnuradio/blks2impl/CMakeLists.txt
new file mode 100644
index 000000000..dd0c201a3
--- /dev/null
+++ b/gnuradio-core/src/python/gnuradio/blks2impl/CMakeLists.txt
@@ -0,0 +1,46 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrPython)
+
+GR_PYTHON_INSTALL(FILES
+ __init__.py
+ am_demod.py
+ channel_model.py
+ filterbank.py
+ fm_demod.py
+ fm_emph.py
+ generic_usrp.py
+ logpwrfft.py
+ nbfm_rx.py
+ nbfm_tx.py
+ pfb_arb_resampler.py
+ pfb_channelizer.py
+ pfb_decimator.py
+ pfb_interpolator.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
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/blks2impl
+ COMPONENT "core_python"
+)
diff --git a/gnuradio-core/src/python/gnuradio/gr/CMakeLists.txt b/gnuradio-core/src/python/gnuradio/gr/CMakeLists.txt
new file mode 100644
index 000000000..7b62a2f1e
--- /dev/null
+++ b/gnuradio-core/src/python/gnuradio/gr/CMakeLists.txt
@@ -0,0 +1,52 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrPython)
+
+GR_PYTHON_INSTALL(FILES
+ __init__.py
+ exceptions.py
+ gr_threading.py
+ gr_threading_23.py
+ gr_threading_24.py
+ hier_block2.py
+ prefs.py
+ top_block.py
+ pubsub.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/gr
+ COMPONENT "core_python"
+)
+
+########################################################################
+# Handle the unit tests
+########################################################################
+if(ENABLE_TESTING)
+include(GrTest)
+file(GLOB py_qa_test_files "qa_*.py")
+foreach(py_qa_test_file ${py_qa_test_files})
+ get_filename_component(py_qa_test_name ${py_qa_test_file} NAME_WE)
+ set(GR_TEST_PYTHON_DIRS
+ ${CMAKE_BINARY_DIR}/gnuradio-core/src/python
+ ${CMAKE_BINARY_DIR}/gnuradio-core/src/lib/swig
+ )
+ set(GR_TEST_TARGET_DEPS gruel gnuradio-core)
+ GR_ADD_TEST(${py_qa_test_name} ${PYTHON_EXECUTABLE} ${py_qa_test_file})
+endforeach(py_qa_test_file)
+endif(ENABLE_TESTING)
diff --git a/gnuradio-core/src/python/gnuradio/gru/CMakeLists.txt b/gnuradio-core/src/python/gnuradio/gru/CMakeLists.txt
new file mode 100644
index 000000000..1c50989d9
--- /dev/null
+++ b/gnuradio-core/src/python/gnuradio/gru/CMakeLists.txt
@@ -0,0 +1,26 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrPython)
+
+GR_PYTHON_INSTALL(
+ FILES __init__.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/gru
+ COMPONENT "core_python"
+)
diff --git a/gnuradio-core/src/python/gnuradio/gruimpl/CMakeLists.txt b/gnuradio-core/src/python/gnuradio/gruimpl/CMakeLists.txt
new file mode 100644
index 000000000..7d48f3512
--- /dev/null
+++ b/gnuradio-core/src/python/gnuradio/gruimpl/CMakeLists.txt
@@ -0,0 +1,38 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrPython)
+
+GR_PYTHON_INSTALL(FILES
+ __init__.py
+ freqz.py
+ gnuplot_freqz.py
+ hexint.py
+ listmisc.py
+ mathmisc.py
+ lmx2306.py
+ msgq_runner.py
+ os_read_exactly.py
+ sdr_1000.py
+ seq_with_cursor.py
+ socket_stuff.py
+ daemon.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/gruimpl
+ COMPONENT "core_python"
+)
diff --git a/gnuradio-core/src/tests/CMakeLists.txt b/gnuradio-core/src/tests/CMakeLists.txt
new file mode 100644
index 000000000..6de259116
--- /dev/null
+++ b/gnuradio-core/src/tests/CMakeLists.txt
@@ -0,0 +1,69 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrMiscUtils) #check n def
+GR_CHECK_HDR_N_DEF(sys/resource.h HAVE_SYS_RESOURCE_H)
+
+########################################################################
+# Setup the include and linker paths
+########################################################################
+include_directories(${GRUEL_INCLUDE_DIRS})
+include_directories(${GNURADIO_CORE_INCLUDE_DIRS})
+
+include_directories(${Boost_INCLUDE_DIRS})
+link_directories(${Boost_LIBRARY_DIRS})
+
+include_directories(${CPPUNIT_INCLUDE_DIRS})
+link_directories(${CPPUNIT_LIBRARY_DIRS})
+
+########################################################################
+# Build benchmarks and non-registered tests
+########################################################################
+set(tests_not_run #single source per test
+ benchmark_dotprod_fff.cc
+ benchmark_dotprod_fsf.cc
+ benchmark_dotprod_ccf.cc
+ benchmark_dotprod_fcc.cc
+ benchmark_dotprod_scc.cc
+ benchmark_dotprod_ccc.cc
+ benchmark_nco.cc
+ benchmark_vco.cc
+ test_runtime.cc
+ test_general.cc
+ test_filter.cc
+ #test_atsc.cc
+ test_vmcircbuf.cc
+)
+
+foreach(test_not_run_src ${tests_not_run})
+ get_filename_component(name ${test_not_run_src} NAME_WE)
+ add_executable(${name} ${test_not_run_src})
+ target_link_libraries(${name} test-gnuradio-core)
+endforeach(test_not_run_src)
+
+########################################################################
+# Build the test-all test to end all tests
+# Set the test environment so the build libs will be found under MSVC.
+########################################################################
+include(GrTest)
+set(GR_TEST_TARGET_DEPS gruel gnuradio-core test-gnuradio-core)
+add_executable(gr_core_test_all test_all.cc)
+target_link_libraries(gr_core_test_all test-gnuradio-core)
+GR_ADD_TEST(gr-core-test-all gr_core_test_all)
diff --git a/gr-atsc/CMakeLists.txt b/gr-atsc/CMakeLists.txt
new file mode 100644
index 000000000..670ff7e40
--- /dev/null
+++ b/gr-atsc/CMakeLists.txt
@@ -0,0 +1,106 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup dependencies
+########################################################################
+include(GrBoost)
+
+########################################################################
+# Register component
+########################################################################
+include(GrComponent)
+GR_REGISTER_COMPONENT("gr-atsc" ENABLE_GR_ATSC
+ Boost_FOUND
+ ENABLE_GR_CORE
+)
+
+GR_SET_GLOBAL(GR_ATSC_INCLUDE_DIRS
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/lib
+)
+
+########################################################################
+# Begin conditional configuration
+########################################################################
+if(ENABLE_GR_ATSC)
+
+########################################################################
+# Setup CPack components
+########################################################################
+include(GrPackage)
+CPACK_SET(CPACK_COMPONENT_GROUP_ATSC_DESCRIPTION "GNU Radio ATSC Blocks")
+
+CPACK_COMPONENT("atsc_runtime"
+ GROUP "ATSC"
+ DISPLAY_NAME "Runtime"
+ DESCRIPTION "Runtime"
+ DEPENDS "core_runtime"
+)
+
+CPACK_COMPONENT("atsc_devel"
+ GROUP "ATSC"
+ DISPLAY_NAME "Development"
+ DESCRIPTION "C++ headers, package config, import libraries"
+ DEPENDS "core_devel"
+)
+
+CPACK_COMPONENT("atsc_python"
+ GROUP "ATSC"
+ DISPLAY_NAME "Python"
+ DESCRIPTION "Python modules for runtime; GRC xml files"
+ DEPENDS "core_python;atsc_runtime"
+)
+
+CPACK_COMPONENT("atsc_examples"
+ GROUP "ATSC"
+ DISPLAY_NAME "Examples"
+ DESCRIPTION "Python examples for ATSC"
+ DEPENDS "atsc_python"
+)
+
+CPACK_COMPONENT("atsc_swig"
+ GROUP "ATSC"
+ DISPLAY_NAME "SWIG"
+ DESCRIPTION "SWIG development .i files"
+ DEPENDS "core_swig;atsc_python;atsc_devel"
+)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(src/lib)
+if(ENABLE_PYTHON)
+ add_subdirectory(src/python)
+endif(ENABLE_PYTHON)
+
+########################################################################
+# Create Pkg Config File
+########################################################################
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-atsc.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-atsc.pc
+@ONLY)
+
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-atsc.pc
+ DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
+ COMPONENT "atsc_devel"
+)
+
+endif(ENABLE_GR_ATSC)
diff --git a/gr-atsc/src/lib/CMakeLists.txt b/gr-atsc/src/lib/CMakeLists.txt
new file mode 100644
index 000000000..906a86b3f
--- /dev/null
+++ b/gr-atsc/src/lib/CMakeLists.txt
@@ -0,0 +1,235 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup the include and linker paths
+########################################################################
+include_directories(
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GR_ATSC_INCLUDE_DIRS}
+ ${CMAKE_CURRENT_BINARY_DIR}
+)
+
+include_directories(${Boost_INCLUDE_DIRS})
+link_directories(${Boost_LIBRARY_DIRS})
+
+########################################################################
+# Generate viterbi mux source
+# http://www.vtk.org/Wiki/CMake_Cross_Compiling#Using_executables_in_the_build_created_during_the_build
+########################################################################
+if(NOT CMAKE_CROSSCOMPILING)
+ add_executable(atsci_viterbi_gen atsci_viterbi_gen.cc)
+ export(TARGETS atsci_viterbi_gen APPEND FILE ${EXPORT_FILE})
+endif()
+
+
+set(atsci_viterbi_mux_cc ${CMAKE_CURRENT_BINARY_DIR}/atsci_viterbi_mux.cc)
+
+add_custom_command(
+ OUTPUT ${atsci_viterbi_mux_cc}
+ DEPENDS atsci_viterbi_gen
+ COMMAND atsci_viterbi_gen -o ${atsci_viterbi_mux_cc}
+)
+
+########################################################################
+# Setup library
+########################################################################
+list(APPEND gr_atsc_sources
+ ${atsci_viterbi_mux_cc}
+ atsc_derandomizer.cc
+ atsc_randomizer.cc
+ atsc_rs_decoder.cc
+ atsc_rs_encoder.cc
+ atsc_interleaver.cc
+ atsc_deinterleaver.cc
+ atsc_trellis_encoder.cc
+ atsc_viterbi_decoder.cc
+ atsc_ds_to_softds.cc
+ atsc_field_sync_mux.cc
+ atsc_field_sync_demux.cc
+ atsc_equalizer.cc
+ atsc_fs_checker.cc
+ atsc_bit_timing_loop.cc
+ atsc_fpll.cc
+ atsc_depad.cc
+ atsc_pad.cc
+ atsci_basic_trellis_encoder.cc
+ atsci_data_interleaver.cc
+ atsci_equalizer.cc
+ atsci_equalizer_lms.cc
+ atsci_equalizer_lms2.cc
+ atsci_equalizer_nop.cc
+ atsci_fake_single_viterbi.cc
+ atsci_fs_checker.cc
+ atsci_fs_checker_naive.cc
+ atsci_fs_correlator.cc
+ atsci_fs_correlator_naive.cc
+ atsci_single_viterbi.cc
+ atsci_sssr.cc
+ atsci_pnXXX.cc
+ atsci_randomizer.cc
+ atsci_reed_solomon.cc
+ atsci_sliding_correlator.cc
+ atsci_trellis_encoder.cc
+ atsci_viterbi_decoder.cc
+ create_atsci_equalizer.cc
+ create_atsci_fs_checker.cc
+ create_atsci_fs_correlator.cc
+ plinfo.cc
+)
+
+list(APPEND atsc_libs
+ gnuradio-core
+ ${Boost_LIBRARIES}
+)
+
+add_library(gnuradio-atsc SHARED ${gr_atsc_sources})
+target_link_libraries(gnuradio-atsc ${atsc_libs})
+set_target_properties(gnuradio-atsc PROPERTIES DEFINE_SYMBOL "gnuradio_atsc_EXPORTS")
+set_target_properties(gnuradio-atsc PROPERTIES SOVERSION ${LIBVER})
+
+install(TARGETS gnuradio-atsc
+ LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT "atsc_runtime" # .so/.dylib file
+ ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT "atsc_devel" # .lib file
+ RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT "atsc_runtime" # .dll file
+)
+
+########################################################################
+# Build and register unit test
+########################################################################
+if(ENABLE_TESTING)
+
+include_directories(${CPPUNIT_INCLUDE_DIRS})
+link_directories(${CPPUNIT_LIBRARY_DIRS})
+
+list(APPEND test_atsci_sources
+ qa_atsci_basic_trellis_encoder.cc
+ qa_atsci_data_interleaver.cc
+ qa_atsci_equalizer_nop.cc
+ qa_atsci_fake_single_viterbi.cc
+ qa_atsci_fs_correlator.cc
+ qa_atsci_single_viterbi.cc
+ qa_atsci_randomizer.cc
+ qa_atsci_reed_solomon.cc
+ qa_atsci_sliding_correlator.cc
+ qa_atsci_trellis_encoder.cc
+ qa_atsci_viterbi_decoder.cc
+ qa_convolutional_interleaver.cc
+ qa_atsci.cc
+ qa_interleaver_fifo.cc
+)
+
+include(GrTest)
+set(GR_TEST_TARGET_DEPS gnuradio-atsc gnuradio-core gruel)
+add_executable(test_atsci ${test_atsci_sources} test_atsci.cc)
+target_link_libraries(test_atsci gnuradio-atsc gnuradio-core ${CPPUNIT_LIBRARIES})
+GR_ADD_TEST(atsci-test test_atsci)
+
+endif(ENABLE_TESTING)
+
+########################################################################
+# Install public header files
+########################################################################
+install(FILES
+ atsc_api.h
+ atsc_consts.h
+ atsc_derandomizer.h
+ atsc_randomizer.h
+ atsc_rs_decoder.h
+ atsc_rs_encoder.h
+ atsc_interleaver.h
+ atsc_deinterleaver.h
+ atsc_trellis_encoder.h
+ atsc_viterbi_decoder.h
+ atsc_ds_to_softds.h
+ atsc_field_sync_mux.h
+ atsc_field_sync_demux.h
+ atsc_equalizer.h
+ atsc_fs_checker.h
+ atsc_bit_timing_loop.h
+ atsc_fpll.h
+ atsc_depad.h
+ atsc_pad.h
+ atsc_types.h
+ atsci_basic_trellis_encoder.h
+ atsci_data_interleaver.h
+ atsci_diag_output.h
+ atsci_equalizer.h
+ atsci_equalizer_lms.h
+ atsci_equalizer_lms2.h
+ atsci_equalizer_nop.h
+ atsci_exp2_lp.h
+ atsci_fake_single_viterbi.h
+ atsci_fs_checker.h
+ atsci_fs_checker_naive.h
+ atsci_fs_correlator.h
+ atsci_fs_correlator_naive.h
+ atsci_pnXXX.h
+ atsci_randomizer.h
+ atsci_reed_solomon.h
+ atsci_root_raised_cosine.h
+ atsci_root_raised_cosine_bandpass.h
+ atsci_single_viterbi.h
+ atsci_slicer_agc.h
+ atsci_sliding_correlator.h
+ atsci_sssr.h
+ atsci_syminfo.h
+ atsci_sync_tag.h
+ atsci_trellis_encoder.h
+ atsci_viterbi_decoder.h
+ atsci_vsbtx_lp.h
+ convolutional_interleaver.h
+ create_atsci_equalizer.h
+ create_atsci_fs_checker.h
+ create_atsci_fs_correlator.h
+ fpll_btloop_coupling.h
+ interleaver_fifo.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "atsc_devel"
+)
+
+########################################################################
+# Setup swig generation
+########################################################################
+if(ENABLE_PYTHON)
+include(GrPython)
+include(GrSwig)
+
+set(GR_SWIG_INCLUDE_DIRS
+ ${GR_ATSC_INCLUDE_DIRS}
+ ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+)
+
+set(GR_SWIG_LIBRARIES gnuradio-atsc)
+
+GR_SWIG_MAKE(atsc atsc.i)
+
+GR_SWIG_INSTALL(
+ TARGETS atsc
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio
+ COMPONENT "atsc_python"
+)
+
+install(
+ FILES atsc.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "atsc_swig"
+)
+
+endif(ENABLE_PYTHON)
diff --git a/gr-atsc/src/lib/Makefile.am b/gr-atsc/src/lib/Makefile.am
index b1bda90ff..3cbdc8a1b 100644
--- a/gr-atsc/src/lib/Makefile.am
+++ b/gr-atsc/src/lib/Makefile.am
@@ -123,6 +123,7 @@ libgnuradio_atsc_qa_la_LDFLAGS = \
# These headers get installed in ${prefix}/include/gnuradio
grinclude_HEADERS = \
+ atsc_api.h \
atsc_consts.h \
atsc_derandomizer.h \
atsc_randomizer.h \
diff --git a/gr-atsc/src/lib/atsc_api.h b/gr-atsc/src/lib/atsc_api.h
new file mode 100644
index 000000000..5add37762
--- /dev/null
+++ b/gr-atsc/src/lib/atsc_api.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2011 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along 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_ATSC_API_H
+#define INCLUDED_ATSC_API_H
+
+#include <gruel/attributes.h>
+
+#ifdef gnuradio_atsc_EXPORTS
+# define ATSC_API __GR_ATTR_EXPORT
+#else
+# define ATSC_API __GR_ATTR_IMPORT
+#endif
+
+#endif /* INCLUDED_ATSC_API_H */
diff --git a/gr-atsc/src/lib/atsc_bit_timing_loop.h b/gr-atsc/src/lib/atsc_bit_timing_loop.h
index c9b63fee9..2adff26b8 100644
--- a/gr-atsc/src/lib/atsc_bit_timing_loop.h
+++ b/gr-atsc/src/lib/atsc_bit_timing_loop.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_ATSC_BIT_TIMING_LOOP_H
#define INCLUDED_ATSC_BIT_TIMING_LOOP_H
+#include <atsc_api.h>
#include <cstdio>
#include <gr_block.h>
#include <atsci_diag_output.h>
@@ -31,7 +32,7 @@
class atsc_bit_timing_loop;
typedef boost::shared_ptr<atsc_bit_timing_loop> atsc_bit_timing_loop_sptr;
-atsc_bit_timing_loop_sptr atsc_make_bit_timing_loop();
+ATSC_API atsc_bit_timing_loop_sptr atsc_make_bit_timing_loop();
/*!
* \brief ATSC BitTimingLoop3
@@ -40,9 +41,9 @@ atsc_bit_timing_loop_sptr atsc_make_bit_timing_loop();
* This class accepts a single real input and produces two outputs,
* the raw symbol (float) and the tag (atsc_syminfo)
*/
-class atsc_bit_timing_loop : public gr_block
+class ATSC_API atsc_bit_timing_loop : public gr_block
{
- friend atsc_bit_timing_loop_sptr atsc_make_bit_timing_loop();
+ friend ATSC_API atsc_bit_timing_loop_sptr atsc_make_bit_timing_loop();
atsc_bit_timing_loop();
diff --git a/gr-atsc/src/lib/atsc_deinterleaver.h b/gr-atsc/src/lib/atsc_deinterleaver.h
index 0920818a4..8cab62b62 100644
--- a/gr-atsc/src/lib/atsc_deinterleaver.h
+++ b/gr-atsc/src/lib/atsc_deinterleaver.h
@@ -22,13 +22,14 @@
#ifndef INCLUDED_ATSC_DEINTERLEAVER_H
#define INCLUDED_ATSC_DEINTERLEAVER_H
+#include <atsc_api.h>
#include <gr_sync_block.h>
#include <atsci_data_interleaver.h>
class atsc_deinterleaver;
typedef boost::shared_ptr<atsc_deinterleaver> atsc_deinterleaver_sptr;
-atsc_deinterleaver_sptr atsc_make_deinterleaver();
+ATSC_API atsc_deinterleaver_sptr atsc_make_deinterleaver();
/*!
* \brief Deinterleave RS encoded ATSC data ( atsc_mpeg_packet_rs_encoded --> atsc_mpeg_packet_rs_encoded)
@@ -36,9 +37,9 @@ atsc_deinterleaver_sptr atsc_make_deinterleaver();
*
* input: atsc_mpeg_packet_rs_encoded; output: atsc_mpeg_packet_rs_encoded
*/
-class atsc_deinterleaver : public gr_sync_block
+class ATSC_API atsc_deinterleaver : public gr_sync_block
{
- friend atsc_deinterleaver_sptr atsc_make_deinterleaver();
+ friend ATSC_API atsc_deinterleaver_sptr atsc_make_deinterleaver();
atsci_data_deinterleaver d_deinterleaver;
diff --git a/gr-atsc/src/lib/atsc_depad.h b/gr-atsc/src/lib/atsc_depad.h
index 58dfdaf62..b514efe28 100644
--- a/gr-atsc/src/lib/atsc_depad.h
+++ b/gr-atsc/src/lib/atsc_depad.h
@@ -22,12 +22,13 @@
#ifndef INCLUDED_ATSC_DEPAD_H
#define INCLUDED_ATSC_DEPAD_H
+#include <atsc_api.h>
#include <gr_sync_interpolator.h>
class atsc_depad;
typedef boost::shared_ptr<atsc_depad> atsc_depad_sptr;
-atsc_depad_sptr atsc_make_depad();
+ATSC_API atsc_depad_sptr atsc_make_depad();
/*!
* \brief depad mpeg ts packets from 256 byte atsc_mpeg_packet to 188 byte char
@@ -35,9 +36,9 @@ atsc_depad_sptr atsc_make_depad();
*
* input: atsc_mpeg_packet; output: unsigned char
*/
-class atsc_depad : public gr_sync_interpolator
+class ATSC_API atsc_depad : public gr_sync_interpolator
{
- friend atsc_depad_sptr atsc_make_depad();
+ friend ATSC_API atsc_depad_sptr atsc_make_depad();
atsc_depad();
diff --git a/gr-atsc/src/lib/atsc_derandomizer.h b/gr-atsc/src/lib/atsc_derandomizer.h
index a72efbd4e..54254d0c5 100644
--- a/gr-atsc/src/lib/atsc_derandomizer.h
+++ b/gr-atsc/src/lib/atsc_derandomizer.h
@@ -22,13 +22,14 @@
#ifndef INCLUDED_ATSC_DERANDOMIZER_H
#define INCLUDED_ATSC_DERANDOMIZER_H
+#include <atsc_api.h>
#include <gr_sync_block.h>
#include <atsci_randomizer.h>
class atsc_derandomizer;
typedef boost::shared_ptr<atsc_derandomizer> atsc_derandomizer_sptr;
-atsc_derandomizer_sptr atsc_make_derandomizer();
+ATSC_API atsc_derandomizer_sptr atsc_make_derandomizer();
/*!
* \brief "dewhiten" incoming mpeg transport stream packets
@@ -36,9 +37,9 @@ atsc_derandomizer_sptr atsc_make_derandomizer();
*
* input: atsc_mpeg_packet_no_sync; output: atsc_mpeg_packet;
*/
-class atsc_derandomizer : public gr_sync_block
+class ATSC_API atsc_derandomizer : public gr_sync_block
{
- friend atsc_derandomizer_sptr atsc_make_derandomizer();
+ friend ATSC_API atsc_derandomizer_sptr atsc_make_derandomizer();
atsci_randomizer d_rand;
diff --git a/gr-atsc/src/lib/atsc_ds_to_softds.h b/gr-atsc/src/lib/atsc_ds_to_softds.h
index f8623e3b0..1021eed6f 100644
--- a/gr-atsc/src/lib/atsc_ds_to_softds.h
+++ b/gr-atsc/src/lib/atsc_ds_to_softds.h
@@ -22,13 +22,14 @@
#ifndef INCLUDED_ATSC_DS_TO_SOFTDS_H
#define INCLUDED_ATSC_DS_TO_SOFTDS_H
+#include <atsc_api.h>
#include <gr_sync_block.h>
#include <atsc_types.h>
class atsc_ds_to_softds;
typedef boost::shared_ptr<atsc_ds_to_softds> atsc_ds_to_softds_sptr;
-atsc_ds_to_softds_sptr atsc_make_ds_to_softds();
+ATSC_API atsc_ds_to_softds_sptr atsc_make_ds_to_softds();
/*!
* \brief Debug glue routine (atsc_data_segment --> atsc_soft_data_segment)
@@ -36,9 +37,9 @@ atsc_ds_to_softds_sptr atsc_make_ds_to_softds();
*
* input: atsc_data_segment; output: atsc_soft_data_segment
*/
-class atsc_ds_to_softds : public gr_sync_block
+class ATSC_API atsc_ds_to_softds : public gr_sync_block
{
- friend atsc_ds_to_softds_sptr atsc_make_ds_to_softds();
+ friend ATSC_API atsc_ds_to_softds_sptr atsc_make_ds_to_softds();
atsc_ds_to_softds();
diff --git a/gr-atsc/src/lib/atsc_equalizer.h b/gr-atsc/src/lib/atsc_equalizer.h
index 52b5cd38d..773cd1a04 100644
--- a/gr-atsc/src/lib/atsc_equalizer.h
+++ b/gr-atsc/src/lib/atsc_equalizer.h
@@ -22,13 +22,14 @@
#ifndef INCLUDED_ATSC_EQUALIZER_H
#define INCLUDED_ATSC_EQUALIZER_H
+#include <atsc_api.h>
#include <gr_sync_block.h>
#include <atsci_equalizer.h>
class atsc_equalizer;
typedef boost::shared_ptr<atsc_equalizer> atsc_equalizer_sptr;
-atsc_equalizer_sptr atsc_make_equalizer();
+atsc_equalizer_sptr ATSC_API atsc_make_equalizer();
/*!
* \brief ATSC equalizer (float,syminfo --> float,syminfo)
@@ -37,9 +38,9 @@ atsc_equalizer_sptr atsc_make_equalizer();
* first inputs are data samples, second inputs are tags.
* first outputs are equalized data samples, second outputs are tags.
*/
-class atsc_equalizer : public gr_sync_block
+class ATSC_API atsc_equalizer : public gr_sync_block
{
- friend atsc_equalizer_sptr atsc_make_equalizer();
+ friend ATSC_API atsc_equalizer_sptr atsc_make_equalizer();
atsc_equalizer();
diff --git a/gr-atsc/src/lib/atsc_field_sync_demux.h b/gr-atsc/src/lib/atsc_field_sync_demux.h
index 01cc33f87..0e3a5003d 100644
--- a/gr-atsc/src/lib/atsc_field_sync_demux.h
+++ b/gr-atsc/src/lib/atsc_field_sync_demux.h
@@ -22,13 +22,14 @@
#ifndef INCLUDED_ATSC_FIELD_SYNC_DEMUX_H
#define INCLUDED_ATSC_FIELD_SYNC_DEMUX_H
+#include <atsc_api.h>
#include <gr_block.h>
#include <atsc_types.h>
class atsc_field_sync_demux;
typedef boost::shared_ptr<atsc_field_sync_demux> atsc_field_sync_demux_sptr;
-atsc_field_sync_demux_sptr atsc_make_field_sync_demux();
+ATSC_API atsc_field_sync_demux_sptr atsc_make_field_sync_demux();
/*!
* \brief ATSC Field Sync Demux
@@ -37,9 +38,9 @@ atsc_field_sync_demux_sptr atsc_make_field_sync_demux();
* \ingroup atsc
*
*/
-class atsc_field_sync_demux : public gr_block
+class ATSC_API atsc_field_sync_demux : public gr_block
{
- friend atsc_field_sync_demux_sptr atsc_make_field_sync_demux();
+ friend ATSC_API atsc_field_sync_demux_sptr atsc_make_field_sync_demux();
atsc_field_sync_demux();
diff --git a/gr-atsc/src/lib/atsc_field_sync_mux.h b/gr-atsc/src/lib/atsc_field_sync_mux.h
index 189341cb9..d08a99b5b 100644
--- a/gr-atsc/src/lib/atsc_field_sync_mux.h
+++ b/gr-atsc/src/lib/atsc_field_sync_mux.h
@@ -22,13 +22,14 @@
#ifndef INCLUDED_ATSC_FIELD_SYNC_MUX_H
#define INCLUDED_ATSC_FIELD_SYNC_MUX_H
+#include <atsc_api.h>
#include <gr_sync_block.h>
#include <atsc_types.h>
class atsc_field_sync_mux;
typedef boost::shared_ptr<atsc_field_sync_mux> atsc_field_sync_mux_sptr;
-atsc_field_sync_mux_sptr atsc_make_field_sync_mux();
+ATSC_API atsc_field_sync_mux_sptr atsc_make_field_sync_mux();
/*!
* \brief Insert ATSC Field Syncs as required (atsc_data_segment --> atsc_data_segment)
@@ -36,9 +37,9 @@ atsc_field_sync_mux_sptr atsc_make_field_sync_mux();
*
* input: atsc_data_segment; output: atsc_data_segment
*/
-class atsc_field_sync_mux : public gr_sync_block
+class ATSC_API atsc_field_sync_mux : public gr_sync_block
{
- friend atsc_field_sync_mux_sptr atsc_make_field_sync_mux();
+ friend ATSC_API atsc_field_sync_mux_sptr atsc_make_field_sync_mux();
atsc_field_sync_mux();
diff --git a/gr-atsc/src/lib/atsc_fpll.h b/gr-atsc/src/lib/atsc_fpll.h
index 1ed41d865..dac3cda86 100644
--- a/gr-atsc/src/lib/atsc_fpll.h
+++ b/gr-atsc/src/lib/atsc_fpll.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_ATSC_FPLL_H
#define INCLUDED_ATSC_FPLL_H
+#include <atsc_api.h>
#include <gr_sync_block.h>
#include <gr_nco.h>
#include <gr_single_pole_iir.h>
@@ -32,7 +33,7 @@
class atsc_fpll;
typedef boost::shared_ptr<atsc_fpll> atsc_fpll_sptr;
-atsc_fpll_sptr atsc_make_fpll();
+ATSC_API atsc_fpll_sptr atsc_make_fpll();
/*!
* \brief ATSC FPLL (2nd Version)
@@ -45,9 +46,9 @@ atsc_fpll_sptr atsc_make_fpll();
* This class accepts a single real input and produces a single real output
*/
-class atsc_fpll : public gr_sync_block
+class ATSC_API atsc_fpll : public gr_sync_block
{
- friend atsc_fpll_sptr atsc_make_fpll();
+ friend ATSC_API atsc_fpll_sptr atsc_make_fpll();
atsc_fpll();
diff --git a/gr-atsc/src/lib/atsc_fs_checker.h b/gr-atsc/src/lib/atsc_fs_checker.h
index e7271af22..03e50ee9d 100644
--- a/gr-atsc/src/lib/atsc_fs_checker.h
+++ b/gr-atsc/src/lib/atsc_fs_checker.h
@@ -22,13 +22,14 @@
#ifndef INCLUDED_ATSC_FS_CHECKER_H
#define INCLUDED_ATSC_FS_CHECKER_H
+#include <atsc_api.h>
#include <atsci_fs_checker.h>
#include <gr_sync_block.h>
class atsc_fs_checker;
typedef boost::shared_ptr<atsc_fs_checker> atsc_fs_checker_sptr;
-atsc_fs_checker_sptr atsc_make_fs_checker();
+ATSC_API atsc_fs_checker_sptr atsc_make_fs_checker();
/*!
* \brief ATSC field sync checker (float,syminfo --> float,syminfo)
@@ -38,7 +39,7 @@ atsc_fs_checker_sptr atsc_make_fs_checker();
* second output is set of tags, one-for-one with first output.
*/
-class atsc_fs_checker : public gr_sync_block
+class ATSC_API atsc_fs_checker : public gr_sync_block
{
friend atsc_fs_checker_sptr atsc_make_fs_checker();
diff --git a/gr-atsc/src/lib/atsc_interleaver.h b/gr-atsc/src/lib/atsc_interleaver.h
index 5f82b7596..00cd54c11 100644
--- a/gr-atsc/src/lib/atsc_interleaver.h
+++ b/gr-atsc/src/lib/atsc_interleaver.h
@@ -22,22 +22,23 @@
#ifndef INCLUDED_ATSC_INTERLEAVER_H
#define INCLUDED_ATSC_INTERLEAVER_H
+#include <atsc_api.h>
#include <gr_sync_block.h>
#include <atsci_data_interleaver.h>
class atsc_interleaver;
typedef boost::shared_ptr<atsc_interleaver> atsc_interleaver_sptr;
-atsc_interleaver_sptr atsc_make_interleaver();
+ATSC_API atsc_interleaver_sptr atsc_make_interleaver();
/*! \brief Interleave RS encoded ATSC data ( atsc_mpeg_packet_rs_encoded --> atsc_mpeg_packet_rs_encoded)*
* \ingroup atsc
*
* input: atsc_mpeg_packet_rs_encoded; output: atsc_mpeg_packet_rs_encoded
*/
-class atsc_interleaver : public gr_sync_block
+class ATSC_API atsc_interleaver : public gr_sync_block
{
- friend atsc_interleaver_sptr atsc_make_interleaver();
+ friend ATSC_API atsc_interleaver_sptr atsc_make_interleaver();
atsci_data_interleaver d_interleaver;
diff --git a/gr-atsc/src/lib/atsc_pad.h b/gr-atsc/src/lib/atsc_pad.h
index e7e6874fb..866c72552 100644
--- a/gr-atsc/src/lib/atsc_pad.h
+++ b/gr-atsc/src/lib/atsc_pad.h
@@ -22,12 +22,13 @@
#ifndef INCLUDED_ATSC_PAD_H
#define INCLUDED_ATSC_PAD_H
+#include <atsc_api.h>
#include <gr_sync_decimator.h>
class atsc_pad;
typedef boost::shared_ptr<atsc_pad> atsc_pad_sptr;
-atsc_pad_sptr atsc_make_pad();
+ATSC_API atsc_pad_sptr atsc_make_pad();
/*!
* \brief pad mpeg ts packets from 188 byte char to
@@ -36,9 +37,9 @@ atsc_pad_sptr atsc_make_pad();
*
* input: unsigned char; output: atsc_mpeg_packet
*/
-class atsc_pad : public gr_sync_decimator
+class ATSC_API atsc_pad : public gr_sync_decimator
{
- friend atsc_pad_sptr atsc_make_pad();
+ friend ATSC_API atsc_pad_sptr atsc_make_pad();
atsc_pad();
diff --git a/gr-atsc/src/lib/atsc_randomizer.h b/gr-atsc/src/lib/atsc_randomizer.h
index 6617bcc28..1178f06c0 100644
--- a/gr-atsc/src/lib/atsc_randomizer.h
+++ b/gr-atsc/src/lib/atsc_randomizer.h
@@ -22,13 +22,14 @@
#ifndef INCLUDED_ATSC_RANDOMIZER_H
#define INCLUDED_ATSC_RANDOMIZER_H
+#include <atsc_api.h>
#include <gr_sync_block.h>
#include <atsci_randomizer.h>
class atsc_randomizer;
typedef boost::shared_ptr<atsc_randomizer> atsc_randomizer_sptr;
-atsc_randomizer_sptr atsc_make_randomizer();
+ATSC_API atsc_randomizer_sptr atsc_make_randomizer();
/*!
* \brief "Whiten" incoming mpeg transport stream packets
@@ -36,9 +37,9 @@ atsc_randomizer_sptr atsc_make_randomizer();
*
* input: atsc_mpeg_packet; output: atsc_mpeg_packet_no_sync
*/
-class atsc_randomizer : public gr_sync_block
+class ATSC_API atsc_randomizer : public gr_sync_block
{
- friend atsc_randomizer_sptr atsc_make_randomizer();
+ friend ATSC_API atsc_randomizer_sptr atsc_make_randomizer();
atsci_randomizer d_rand;
bool d_field2; // user to init plinfo in output
diff --git a/gr-atsc/src/lib/atsc_rs_decoder.h b/gr-atsc/src/lib/atsc_rs_decoder.h
index 00dea1603..4b8d6c1b4 100644
--- a/gr-atsc/src/lib/atsc_rs_decoder.h
+++ b/gr-atsc/src/lib/atsc_rs_decoder.h
@@ -22,13 +22,14 @@
#ifndef INCLUDED_ATSC_RS_DECODER_H
#define INCLUDED_ATSC_RS_DECODER_H
+#include <atsc_api.h>
#include <gr_sync_block.h>
#include <atsci_reed_solomon.h>
class atsc_rs_decoder;
typedef boost::shared_ptr<atsc_rs_decoder> atsc_rs_decoder_sptr;
-atsc_rs_decoder_sptr atsc_make_rs_decoder();
+ATSC_API atsc_rs_decoder_sptr atsc_make_rs_decoder();
/*!
* \brief Reed-Solomon decoder for ATSC
@@ -36,9 +37,9 @@ atsc_rs_decoder_sptr atsc_make_rs_decoder();
*
* input: atsc_mpeg_packet_rs_encoded; output: atsc_mpeg_packet_no_sync
*/
-class atsc_rs_decoder : public gr_sync_block
+class ATSC_API atsc_rs_decoder : public gr_sync_block
{
- friend atsc_rs_decoder_sptr atsc_make_rs_decoder();
+ friend ATSC_API atsc_rs_decoder_sptr atsc_make_rs_decoder();
atsci_reed_solomon d_rs_decoder;
diff --git a/gr-atsc/src/lib/atsc_rs_encoder.h b/gr-atsc/src/lib/atsc_rs_encoder.h
index 312b2e1cb..d9812678a 100644
--- a/gr-atsc/src/lib/atsc_rs_encoder.h
+++ b/gr-atsc/src/lib/atsc_rs_encoder.h
@@ -22,13 +22,14 @@
#ifndef INCLUDED_ATSC_RS_ENCODER_H
#define INCLUDED_ATSC_RS_ENCODER_H
+#include <atsc_api.h>
#include <gr_sync_block.h>
#include <atsci_reed_solomon.h>
class atsc_rs_encoder;
typedef boost::shared_ptr<atsc_rs_encoder> atsc_rs_encoder_sptr;
-atsc_rs_encoder_sptr atsc_make_rs_encoder();
+ATSC_API atsc_rs_encoder_sptr atsc_make_rs_encoder();
/*!
* \brief Reed-Solomon encoder for ATSC
@@ -36,9 +37,9 @@ atsc_rs_encoder_sptr atsc_make_rs_encoder();
*
* input: atsc_mpeg_packet_no_sync; output: atsc_mpeg_packet_rs_encoded
*/
-class atsc_rs_encoder : public gr_sync_block
+class ATSC_API atsc_rs_encoder : public gr_sync_block
{
- friend atsc_rs_encoder_sptr atsc_make_rs_encoder();
+ friend ATSC_API atsc_rs_encoder_sptr atsc_make_rs_encoder();
atsci_reed_solomon d_rs_encoder;
diff --git a/gr-atsc/src/lib/atsc_trellis_encoder.h b/gr-atsc/src/lib/atsc_trellis_encoder.h
index 5c93daf99..c84816118 100644
--- a/gr-atsc/src/lib/atsc_trellis_encoder.h
+++ b/gr-atsc/src/lib/atsc_trellis_encoder.h
@@ -22,13 +22,14 @@
#ifndef INCLUDED_ATSC_TRELLIS_ENCODER_H
#define INCLUDED_ATSC_TRELLIS_ENCODER_H
+#include <atsc_api.h>
#include <gr_sync_block.h>
#include <atsci_trellis_encoder.h>
class atsc_trellis_encoder;
typedef boost::shared_ptr<atsc_trellis_encoder> atsc_trellis_encoder_sptr;
-atsc_trellis_encoder_sptr atsc_make_trellis_encoder();
+ATSC_API atsc_trellis_encoder_sptr atsc_make_trellis_encoder();
/*!
* \brief ATSC 12-way interleaved trellis encoder (atsc_mpeg_packet_rs_encoded --> atsc_data_segment)
@@ -36,9 +37,9 @@ atsc_trellis_encoder_sptr atsc_make_trellis_encoder();
*
* input: atsc_mpeg_packet_rs_encoded; output: atsc_data_segment
*/
-class atsc_trellis_encoder : public gr_sync_block
+class ATSC_API atsc_trellis_encoder : public gr_sync_block
{
- friend atsc_trellis_encoder_sptr atsc_make_trellis_encoder();
+ friend ATSC_API atsc_trellis_encoder_sptr atsc_make_trellis_encoder();
atsci_trellis_encoder d_trellis_encoder;
diff --git a/gr-atsc/src/lib/atsc_viterbi_decoder.h b/gr-atsc/src/lib/atsc_viterbi_decoder.h
index 511df0dff..1a43b4952 100644
--- a/gr-atsc/src/lib/atsc_viterbi_decoder.h
+++ b/gr-atsc/src/lib/atsc_viterbi_decoder.h
@@ -22,13 +22,14 @@
#ifndef INCLUDED_ATSC_VITERBI_DECODER_H
#define INCLUDED_ATSC_VITERBI_DECODER_H
+#include <atsc_api.h>
#include <gr_sync_block.h>
#include <atsci_viterbi_decoder.h>
class atsc_viterbi_decoder;
typedef boost::shared_ptr<atsc_viterbi_decoder> atsc_viterbi_decoder_sptr;
-atsc_viterbi_decoder_sptr atsc_make_viterbi_decoder();
+ATSC_API atsc_viterbi_decoder_sptr atsc_make_viterbi_decoder();
/*!
* \brief ATSC 12-way interleaved viterbi decoder (atsc_soft_data_segment --> atsc_mpeg_packet_rs_encoded)
@@ -36,9 +37,9 @@ atsc_viterbi_decoder_sptr atsc_make_viterbi_decoder();
*
* input: atsc_soft_data_segment; output: atsc_mpeg_packet_rs_encoded
*/
-class atsc_viterbi_decoder : public gr_sync_block
+class ATSC_API atsc_viterbi_decoder : public gr_sync_block
{
- friend atsc_viterbi_decoder_sptr atsc_make_viterbi_decoder();
+ friend ATSC_API atsc_viterbi_decoder_sptr atsc_make_viterbi_decoder();
atsci_viterbi_decoder d_viterbi_decoder;
diff --git a/gr-atsc/src/lib/atsci_basic_trellis_encoder.h b/gr-atsc/src/lib/atsci_basic_trellis_encoder.h
index 1e4073144..c17e5653e 100644
--- a/gr-atsc/src/lib/atsci_basic_trellis_encoder.h
+++ b/gr-atsc/src/lib/atsci_basic_trellis_encoder.h
@@ -22,6 +22,7 @@
#ifndef _ATSC_BASIC_TRELLIS_ENCODER_H_
#define _ATSC_BASIC_TRELLIS_ENCODER_H_
+#include <atsc_api.h>
#include <assert.h>
/*!
@@ -36,7 +37,7 @@
* filter is not supported.
*/
-class atsci_basic_trellis_encoder {
+class ATSC_API atsci_basic_trellis_encoder {
private:
int state; // two bit state;
diff --git a/gr-atsc/src/lib/atsci_data_interleaver.h b/gr-atsc/src/lib/atsci_data_interleaver.h
index ab4b64d4f..e7f982db4 100644
--- a/gr-atsc/src/lib/atsci_data_interleaver.h
+++ b/gr-atsc/src/lib/atsci_data_interleaver.h
@@ -23,13 +23,14 @@
#ifndef _ATSC_DATA_INTERLEAVER_H_
#define _ATSC_DATA_INTERLEAVER_H_
+#include <atsc_api.h>
#include <atsc_types.h>
#include <convolutional_interleaver.h>
/*!
* \brief atsc convolutional data interleaver
*/
-class atsci_data_interleaver : public convolutional_interleaver<unsigned char> {
+class ATSC_API atsci_data_interleaver : public convolutional_interleaver<unsigned char> {
public:
atsci_data_interleaver () : convolutional_interleaver<unsigned char>(true, 52, 4) {}
@@ -40,7 +41,7 @@ class atsci_data_interleaver : public convolutional_interleaver<unsigned char> {
/*!
* \brief atsc convolutional data deinterleaver
*/
-class atsci_data_deinterleaver : public convolutional_interleaver<unsigned char> {
+class ATSC_API atsci_data_deinterleaver : public convolutional_interleaver<unsigned char> {
public:
atsci_data_deinterleaver () :
convolutional_interleaver<unsigned char>(false, 52, 4), alignment_fifo (156) {}
diff --git a/gr-atsc/src/lib/atsci_equalizer.h b/gr-atsc/src/lib/atsci_equalizer.h
index 2120ea90a..853c52689 100644
--- a/gr-atsc/src/lib/atsci_equalizer.h
+++ b/gr-atsc/src/lib/atsci_equalizer.h
@@ -23,12 +23,13 @@
#ifndef _ATSC_EQUALIZER_H_
#define _ATSC_EQUALIZER_H_
+#include <atsc_api.h>
#include <atsci_syminfo.h>
/*!
* \brief abstract base class for ATSC equalizer
*/
-class atsci_equalizer {
+class ATSC_API atsci_equalizer {
private:
diff --git a/gr-atsc/src/lib/atsci_equalizer_lms.h b/gr-atsc/src/lib/atsci_equalizer_lms.h
index 1626da234..8a39255c6 100644
--- a/gr-atsc/src/lib/atsci_equalizer_lms.h
+++ b/gr-atsc/src/lib/atsci_equalizer_lms.h
@@ -23,11 +23,12 @@
#ifndef _ATSC_EQUALIZER_LMS_H_
#define _ATSC_EQUALIZER_LMS_H_
+#include <atsc_api.h>
#include <atsci_equalizer.h>
#include <vector>
#include <stdio.h>
-class atsci_equalizer_lms : public atsci_equalizer
+class ATSC_API atsci_equalizer_lms : public atsci_equalizer
{
public:
atsci_equalizer_lms ();
diff --git a/gr-atsc/src/lib/atsci_equalizer_lms2.h b/gr-atsc/src/lib/atsci_equalizer_lms2.h
index 45b25b73f..7c60fc174 100644
--- a/gr-atsc/src/lib/atsci_equalizer_lms2.h
+++ b/gr-atsc/src/lib/atsci_equalizer_lms2.h
@@ -23,11 +23,12 @@
#ifndef _ATSC_EQUALIZER_LMS2_H_
#define _ATSC_EQUALIZER_LMS2_H_
+#include <atsc_api.h>
#include <atsci_equalizer.h>
#include <vector>
#include <stdio.h>
-class atsci_equalizer_lms2 : public atsci_equalizer
+class ATSC_API atsci_equalizer_lms2 : public atsci_equalizer
{
public:
atsci_equalizer_lms2 ();
diff --git a/gr-atsc/src/lib/atsci_equalizer_nop.h b/gr-atsc/src/lib/atsci_equalizer_nop.h
index 399f2da46..6d842601f 100644
--- a/gr-atsc/src/lib/atsci_equalizer_nop.h
+++ b/gr-atsc/src/lib/atsci_equalizer_nop.h
@@ -23,9 +23,10 @@
#ifndef _ATSC_EQUALIZER_NOP_H_
#define _ATSC_EQUALIZER_NOP_H_
+#include <atsc_api.h>
#include <atsci_equalizer.h>
-class atsci_equalizer_nop : public atsci_equalizer
+class ATSC_API atsci_equalizer_nop : public atsci_equalizer
{
private:
float scale (float input) { return input; }
diff --git a/gr-atsc/src/lib/atsci_exp2_lp.h b/gr-atsc/src/lib/atsci_exp2_lp.h
index cf66843c2..12d08fa6d 100644
--- a/gr-atsc/src/lib/atsci_exp2_lp.h
+++ b/gr-atsc/src/lib/atsci_exp2_lp.h
@@ -23,9 +23,10 @@
#ifndef _ATSC_EXP2_LP_H_
#define _ATSC_EXP2_LP_H_
+#include <atsc_api.h>
#include <gr_fir_builder.h>
-class atsci_exp2_lp : public gr_fir_builder
+class ATSC_API atsci_exp2_lp : public gr_fir_builder
{
public:
virtual std::vector<float> taps (double sampling_freq);
diff --git a/gr-atsc/src/lib/atsci_fake_single_viterbi.h b/gr-atsc/src/lib/atsci_fake_single_viterbi.h
index 1318256ec..b4cb6e3b3 100644
--- a/gr-atsc/src/lib/atsci_fake_single_viterbi.h
+++ b/gr-atsc/src/lib/atsci_fake_single_viterbi.h
@@ -23,10 +23,12 @@
#ifndef _ATSCFAKESINGLEVITERBI_H_
#define _ATSCFAKESINGLEVITERBI_H_
+#include <atsc_api.h>
+
/*!
* \brief single channel viterbi decoder
*/
-class atsci_fake_single_viterbi
+class ATSC_API atsci_fake_single_viterbi
{
public:
diff --git a/gr-atsc/src/lib/atsci_fs_checker.h b/gr-atsc/src/lib/atsci_fs_checker.h
index 76b754904..cdcd541e8 100644
--- a/gr-atsc/src/lib/atsci_fs_checker.h
+++ b/gr-atsc/src/lib/atsci_fs_checker.h
@@ -22,6 +22,7 @@
#ifndef _ATSC_FS_CHECKER_H_
#define _ATSC_FS_CHECKER_H_
+#include <atsc_api.h>
#include <atsci_syminfo.h>
/*!
@@ -47,7 +48,7 @@
* occur every 832 samples assuming everything is working.
*/
-class atsci_fs_checker {
+class ATSC_API atsci_fs_checker {
public:
diff --git a/gr-atsc/src/lib/atsci_fs_checker_naive.h b/gr-atsc/src/lib/atsci_fs_checker_naive.h
index 951820492..3ef507111 100644
--- a/gr-atsc/src/lib/atsci_fs_checker_naive.h
+++ b/gr-atsc/src/lib/atsci_fs_checker_naive.h
@@ -23,12 +23,13 @@
#ifndef _ATSC_FS_CHECKER_NAIVE_H_
#define _ATSC_FS_CHECKER_NAIVE_H_
+#include <atsc_api.h>
#include <atsci_fs_checker.h>
/*!
* \brief Naive concrete implementation of field sync checker
*/
-class atsci_fs_checker_naive : public atsci_fs_checker {
+class ATSC_API atsci_fs_checker_naive : public atsci_fs_checker {
private:
static const int SRSIZE = 1024; // must be power of two
diff --git a/gr-atsc/src/lib/atsci_fs_correlator.h b/gr-atsc/src/lib/atsci_fs_correlator.h
index f7915364a..a6db7f518 100644
--- a/gr-atsc/src/lib/atsci_fs_correlator.h
+++ b/gr-atsc/src/lib/atsci_fs_correlator.h
@@ -22,6 +22,8 @@
#ifndef _ATSC_FS_CORRELATOR_H_
#define _ATSC_FS_CORRELATOR_H_
+#include <atsc_api.h>
+
/*!
* \brief abstract base class for ATSC field sync correlator
*
@@ -42,7 +44,7 @@
* occur every 832 samples assuming everything is working.
*/
-class atsci_fs_correlator {
+class ATSC_API atsci_fs_correlator {
public:
diff --git a/gr-atsc/src/lib/atsci_fs_correlator_naive.h b/gr-atsc/src/lib/atsci_fs_correlator_naive.h
index c05cff0f7..92e3f7499 100644
--- a/gr-atsc/src/lib/atsci_fs_correlator_naive.h
+++ b/gr-atsc/src/lib/atsci_fs_correlator_naive.h
@@ -23,12 +23,13 @@
#ifndef _ATSC_FS_CORRELATOR_NAIVE_H_
#define _ATSC_FS_CORRELATOR_NAIVE_H_
+#include <atsc_api.h>
#include <atsci_fs_correlator.h>
/*!
* \brief Naive concrete implementation of field sync correlator
*/
-class atsci_fs_correlator_naive : public atsci_fs_correlator {
+class ATSC_API atsci_fs_correlator_naive : public atsci_fs_correlator {
private:
static const int SRSIZE = 1024; // must be power of two
diff --git a/gr-atsc/src/lib/atsci_pnXXX.h b/gr-atsc/src/lib/atsci_pnXXX.h
index 0e09ae831..58cb2d02d 100644
--- a/gr-atsc/src/lib/atsci_pnXXX.h
+++ b/gr-atsc/src/lib/atsci_pnXXX.h
@@ -20,5 +20,7 @@
* Boston, MA 02110-1301, USA.
*/
-extern const unsigned char atsc_pn511[];
-extern const unsigned char atsc_pn63[];
+#include <atsc_api.h>
+
+ATSC_API extern const unsigned char atsc_pn511[];
+ATSC_API extern const unsigned char atsc_pn63[];
diff --git a/gr-atsc/src/lib/atsci_randomizer.h b/gr-atsc/src/lib/atsci_randomizer.h
index 36025d10b..30c3235bb 100644
--- a/gr-atsc/src/lib/atsci_randomizer.h
+++ b/gr-atsc/src/lib/atsci_randomizer.h
@@ -23,6 +23,7 @@
#ifndef _ATSC_RANDOMIZER_H_
#define _ATSC_RANDOMIZER_H_
+#include <atsc_api.h>
#include <atsc_types.h>
/*!
@@ -32,7 +33,7 @@
* See figure D4 on page 54.
*/
-class atsci_randomizer {
+class ATSC_API atsci_randomizer {
friend class qa_atsci_randomizer;
public:
diff --git a/gr-atsc/src/lib/atsci_reed_solomon.h b/gr-atsc/src/lib/atsci_reed_solomon.h
index c9cdca94b..6f53c77ca 100644
--- a/gr-atsc/src/lib/atsci_reed_solomon.h
+++ b/gr-atsc/src/lib/atsci_reed_solomon.h
@@ -23,6 +23,7 @@
#ifndef _ATSC_REED_SOLOMON_H_
#define _ATSC_REED_SOLOMON_H_
+#include <atsc_api.h>
#include <atsc_types.h>
/*!
@@ -32,7 +33,7 @@
* See figure D5 on page 55.
*/
-class atsci_reed_solomon {
+class ATSC_API atsci_reed_solomon {
public:
atsci_reed_solomon();
diff --git a/gr-atsc/src/lib/atsci_root_raised_cosine.h b/gr-atsc/src/lib/atsci_root_raised_cosine.h
index cb2798ae5..12870faba 100644
--- a/gr-atsc/src/lib/atsci_root_raised_cosine.h
+++ b/gr-atsc/src/lib/atsci_root_raised_cosine.h
@@ -22,9 +22,10 @@
#ifndef _ATSC_RRC_H_
#define _ATSC_RRC_H_
+#include <atsc_api.h>
#include <gr_fir_builder.h>
-class atsc_root_raised_cosine : public gr_fir_builder
+class ATSC_API atsc_root_raised_cosine : public gr_fir_builder
{
public:
virtual std::vector<float> taps (double sampling_freq);
diff --git a/gr-atsc/src/lib/atsci_root_raised_cosine_bandpass.h b/gr-atsc/src/lib/atsci_root_raised_cosine_bandpass.h
index 00f609929..98329ab53 100644
--- a/gr-atsc/src/lib/atsci_root_raised_cosine_bandpass.h
+++ b/gr-atsc/src/lib/atsci_root_raised_cosine_bandpass.h
@@ -22,9 +22,10 @@
#ifndef _ATSC_RRC_BANDPASS_H_
#define _ATSC_RRC_BANDPASS_H_
+#include <atsc_api.h>
#include <atsci_root_raised_cosine.h>
-class atsc_root_raised_cosine_bandpass : public atsc_root_raised_cosine
+class ATSC_API atsc_root_raised_cosine_bandpass : public atsc_root_raised_cosine
{
public:
atsc_root_raised_cosine_bandpass (double center_freq) : _center_freq (center_freq) {}
diff --git a/gr-atsc/src/lib/atsci_single_viterbi.h b/gr-atsc/src/lib/atsci_single_viterbi.h
index a722a4aaf..cc752cb3a 100644
--- a/gr-atsc/src/lib/atsci_single_viterbi.h
+++ b/gr-atsc/src/lib/atsci_single_viterbi.h
@@ -23,10 +23,12 @@
#ifndef _ATSCSINGLEVITERBI_H_
#define _ATSCSINGLEVITERBI_H_
+#include <atsc_api.h>
+
/*!
* \brief single channel viterbi decoder
*/
-class atsci_single_viterbi
+class ATSC_API atsci_single_viterbi
{
public:
diff --git a/gr-atsc/src/lib/atsci_slicer_agc.h b/gr-atsc/src/lib/atsci_slicer_agc.h
index 2e7d3be7a..520fec44b 100644
--- a/gr-atsc/src/lib/atsci_slicer_agc.h
+++ b/gr-atsc/src/lib/atsci_slicer_agc.h
@@ -23,6 +23,7 @@
#ifndef _ATSC_SLICER_AGC_H_
#define _ATSC_SLICER_AGC_H_
+#include <atsc_api.h>
#include <math.h>
#include <gr_single_pole_iir.h>
@@ -32,7 +33,7 @@
* Given perfect data, output values will be +/- {7, 5, 3, 1}
*/
-class atsci_slicer_agc {
+class ATSC_API atsci_slicer_agc {
public:
atsci_slicer_agc () : _gain(1), dc(0.0025) {};
diff --git a/gr-atsc/src/lib/atsci_sliding_correlator.h b/gr-atsc/src/lib/atsci_sliding_correlator.h
index c01bc9a20..64834a4e2 100644
--- a/gr-atsc/src/lib/atsci_sliding_correlator.h
+++ b/gr-atsc/src/lib/atsci_sliding_correlator.h
@@ -22,15 +22,17 @@
#ifndef _ATSC_SLIDING_CORRELATOR_H_
#define _ATSC_SLIDING_CORRELATOR_H_
+#include <atsc_api.h>
#include <string.h>
-extern const unsigned char atsc_pn511[511];
-extern const unsigned char atsc_pn63[63];
+#include <atsci_pnXXX.h>
+//extern const unsigned char atsc_pn511[511];
+//extern const unsigned char atsc_pn63[63];
/*!
* \brief look for the PN 511 field sync pattern
*/
-class atsci_sliding_correlator {
+class ATSC_API atsci_sliding_correlator {
public:
atsci_sliding_correlator ();
diff --git a/gr-atsc/src/lib/atsci_sssr.h b/gr-atsc/src/lib/atsci_sssr.h
index 4555dc23c..1dee54c1d 100644
--- a/gr-atsc/src/lib/atsci_sssr.h
+++ b/gr-atsc/src/lib/atsci_sssr.h
@@ -27,6 +27,7 @@
#ifndef _ATSC_SSSR_H_
#define _ATSC_SSSR_H_
+#include <atsc_api.h>
#include <atsc_consts.h>
#include <gri_mmse_fir_interpolator.h>
#include <gr_single_pole_iir.h>
@@ -43,7 +44,7 @@ namespace sssr {
// ----------------------------------------------------------------
//! digital correlator for 1001 and 0110 patterns
- class digital_correlator {
+ class ATSC_API digital_correlator {
int d_sr; // 4 bit shift register
public:
@@ -70,7 +71,7 @@ namespace sssr {
// ----------------------------------------------------------------
//! segment sync integrator
- class seg_sync_integrator {
+ class ATSC_API seg_sync_integrator {
signed char d_integrator[ATSC_DATA_SEGMENT_LENGTH];
public:
@@ -94,7 +95,7 @@ namespace sssr {
// ----------------------------------------------------------------
//! quad filter (used to compute timing error)
- class quad_filter {
+ class ATSC_API quad_filter {
sample_t d_delay[4];
public:
@@ -128,7 +129,7 @@ namespace sssr {
* by Wayne E. Bretl of Zenith, pgs 41-45.
*/
-class atsci_sssr {
+class ATSC_API atsci_sssr {
sssr::digital_correlator d_correlator;
sssr::seg_sync_integrator d_integrator;
sssr::quad_filter d_quad_filter;
@@ -193,7 +194,7 @@ public:
* \brief interpolator control for segment and symbol sync recovery
*/
-class atsci_interpolator {
+class ATSC_API atsci_interpolator {
gri_mmse_fir_interpolator d_interp;
gr_single_pole_iir<float,float,float> d_loop; // ``VCO'' loop filter
double d_nominal_ratio_of_rx_clock_to_symbol_freq; // FREQ
diff --git a/gr-atsc/src/lib/atsci_trellis_encoder.h b/gr-atsc/src/lib/atsci_trellis_encoder.h
index dc5c16d76..53be3fc22 100644
--- a/gr-atsc/src/lib/atsci_trellis_encoder.h
+++ b/gr-atsc/src/lib/atsci_trellis_encoder.h
@@ -23,6 +23,7 @@
#ifndef _ATSC_TRELLIS_ENCODER_H_
#define _ATSC_TRELLIS_ENCODER_H_
+#include <atsc_api.h>
#include <atsci_basic_trellis_encoder.h>
#include <atsc_types.h>
@@ -30,7 +31,7 @@
* \brief fancy, schmancy 12-way interleaved trellis encoder for ATSC
*/
-class atsci_trellis_encoder {
+class ATSC_API atsci_trellis_encoder {
public:
static const int NCODERS = 12;
diff --git a/gr-atsc/src/lib/atsci_viterbi_decoder.h b/gr-atsc/src/lib/atsci_viterbi_decoder.h
index 22e3c1892..1243feeb5 100644
--- a/gr-atsc/src/lib/atsci_viterbi_decoder.h
+++ b/gr-atsc/src/lib/atsci_viterbi_decoder.h
@@ -25,6 +25,7 @@
#define USE_SIMPLE_SLICER 0
+#include <atsc_api.h>
#include <atsc_types.h>
#include <interleaver_fifo.h>
@@ -40,7 +41,7 @@ typedef atsci_single_viterbi single_viterbi_t;
* \brief fancy, schmancy 12-way interleaved viterbi decoder for ATSC
*/
-class atsci_viterbi_decoder {
+class ATSC_API atsci_viterbi_decoder {
public:
static const int NCODERS = 12;
diff --git a/gr-atsc/src/lib/atsci_vsbtx_lp.h b/gr-atsc/src/lib/atsci_vsbtx_lp.h
index 7193c87d0..d3bb0c9d1 100644
--- a/gr-atsc/src/lib/atsci_vsbtx_lp.h
+++ b/gr-atsc/src/lib/atsci_vsbtx_lp.h
@@ -23,9 +23,10 @@
#ifndef _ATSC_VSBTX_LP_H_
#define _ATSC_VSBTX_LP_H_
+#include <atsc_api.h>
#include <gr_fir_builder.h>
-class atsc_vsbtx_lp : public gr_fir_builder
+class ATSC_API atsc_vsbtx_lp : public gr_fir_builder
{
public:
virtual std::vector<float> taps (double sampling_freq);
diff --git a/gr-atsc/src/lib/create_atsci_equalizer.h b/gr-atsc/src/lib/create_atsci_equalizer.h
index 57c167f59..fd26237d8 100644
--- a/gr-atsc/src/lib/create_atsci_equalizer.h
+++ b/gr-atsc/src/lib/create_atsci_equalizer.h
@@ -22,10 +22,12 @@
#ifndef _CREATE_ATSC_EQUALIZER_H_
#define _CREATE_ATSC_EQUALIZER_H_
+#include <atsc_api.h>
+
class atsci_equalizer;
-atsci_equalizer *create_atsci_equalizer_nop ();
-atsci_equalizer *create_atsci_equalizer_lms ();
-atsci_equalizer *create_atsci_equalizer_lms2 ();
+ATSC_API atsci_equalizer *create_atsci_equalizer_nop ();
+ATSC_API atsci_equalizer *create_atsci_equalizer_lms ();
+ATSC_API atsci_equalizer *create_atsci_equalizer_lms2 ();
#endif /* _CREATE_ATSC_EQUALIZER_H_ */
diff --git a/gr-atsc/src/lib/create_atsci_fs_checker.h b/gr-atsc/src/lib/create_atsci_fs_checker.h
index d08745052..23451757a 100644
--- a/gr-atsc/src/lib/create_atsci_fs_checker.h
+++ b/gr-atsc/src/lib/create_atsci_fs_checker.h
@@ -23,12 +23,14 @@
#ifndef _CREATE_ATSC_FS_CHECKER_H_
#define _CREATE_ATSC_FS_CHECKER_H_
+#include <atsc_api.h>
+
class atsci_fs_checker;
/*!
* Factory that creates appropriate atsci_fs_checker
*/
-atsci_fs_checker *create_atsci_fs_checker ();
+ATSC_API atsci_fs_checker *create_atsci_fs_checker ();
#endif /* _CREATE_ATSC_FS_CHECKER_H_ */
diff --git a/gr-atsc/src/lib/create_atsci_fs_correlator.h b/gr-atsc/src/lib/create_atsci_fs_correlator.h
index 9162be888..7b663fd56 100644
--- a/gr-atsc/src/lib/create_atsci_fs_correlator.h
+++ b/gr-atsc/src/lib/create_atsci_fs_correlator.h
@@ -23,12 +23,14 @@
#ifndef _CREATE_ATSC_FS_CORRELATOR_H_
#define _CREATE_ATSC_FS_CORRELATOR_H_
+#include <atsc_api.h>
+
class atsci_fs_correlator;
/*!
* Factory that creates appropriate atsci_fs_correlator
*/
-atsci_fs_correlator *create_atsci_fs_correlator ();
+ATSC_API atsci_fs_correlator *create_atsci_fs_correlator ();
#endif /* _CREATE_ATSC_FS_CORRELATOR_H_ */
diff --git a/gr-atsc/src/lib/interleaver_fifo.h b/gr-atsc/src/lib/interleaver_fifo.h
index 98764af49..6d1a44580 100644
--- a/gr-atsc/src/lib/interleaver_fifo.h
+++ b/gr-atsc/src/lib/interleaver_fifo.h
@@ -26,7 +26,6 @@
#include <interleaver_fifo.h>
#include <string.h>
-#include <strings.h>
/*!
* \brief template class for interleaver fifo
diff --git a/gr-atsc/src/lib/qa_atsci_fake_single_viterbi.cc b/gr-atsc/src/lib/qa_atsci_fake_single_viterbi.cc
index f50f3b6b8..1f5ba6b59 100644
--- a/gr-atsc/src/lib/qa_atsci_fake_single_viterbi.cc
+++ b/gr-atsc/src/lib/qa_atsci_fake_single_viterbi.cc
@@ -70,7 +70,7 @@ qa_atsci_fake_single_viterbi::noise ()
void
qa_atsci_fake_single_viterbi::t0 ()
{
- int blocklen = NN;
+ static const int blocklen = NN;
unsigned char in[blocklen];
unsigned char enc[blocklen];
unsigned char out[blocklen];
diff --git a/gr-atsc/src/lib/qa_atsci_single_viterbi.cc b/gr-atsc/src/lib/qa_atsci_single_viterbi.cc
index d7c29097e..dac1e94c3 100644
--- a/gr-atsc/src/lib/qa_atsci_single_viterbi.cc
+++ b/gr-atsc/src/lib/qa_atsci_single_viterbi.cc
@@ -67,7 +67,7 @@ qa_atsci_single_viterbi::noise ()
void
qa_atsci_single_viterbi::t0 ()
{
- int blocklen = NN;
+ static const int blocklen = NN;
unsigned char in[blocklen];
unsigned char enc[blocklen];
unsigned char out[blocklen];
@@ -142,7 +142,7 @@ qa_atsci_single_viterbi::t0 ()
void
qa_atsci_single_viterbi::t1 ()
{
- int blocklen = NN;
+ static const int blocklen = NN;
unsigned char in[blocklen];
unsigned char enc[blocklen];
unsigned char out[blocklen];
diff --git a/gr-atsc/src/python/CMakeLists.txt b/gr-atsc/src/python/CMakeLists.txt
new file mode 100644
index 000000000..aca15c572
--- /dev/null
+++ b/gr-atsc/src/python/CMakeLists.txt
@@ -0,0 +1,58 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Install python examples
+########################################################################
+include(GrPython)
+
+GR_PYTHON_INSTALL(
+ PROGRAMS
+ btl-fsd.py
+ fpll.py
+ interp.py
+ xlate.py
+ viterbi-out.py
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/atsc
+ COMPONENT "atsc_examples"
+)
+
+install(
+ FILES README
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/atsc
+ COMPONENT "atsc_examples"
+)
+
+########################################################################
+# Handle the unit tests
+########################################################################
+if(ENABLE_TESTING)
+include(GrTest)
+file(GLOB py_qa_test_files "qa_*.py")
+foreach(py_qa_test_file ${py_qa_test_files})
+ get_filename_component(py_qa_test_name ${py_qa_test_file} NAME_WE)
+ set(GR_TEST_PYTHON_DIRS
+ ${CMAKE_BINARY_DIR}/gnuradio-core/src/python
+ ${CMAKE_BINARY_DIR}/gnuradio-core/src/lib/swig
+ ${CMAKE_BINARY_DIR}/gr-atsc/src/lib
+ )
+ set(GR_TEST_TARGET_DEPS gruel gnuradio-core gnuradio-atsc)
+ GR_ADD_TEST(${py_qa_test_name} ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B} ${py_qa_test_file})
+endforeach(py_qa_test_file)
+endif(ENABLE_TESTING)
diff --git a/gr-audio/CMakeLists.txt b/gr-audio/CMakeLists.txt
new file mode 100644
index 000000000..ce09c4456
--- /dev/null
+++ b/gr-audio/CMakeLists.txt
@@ -0,0 +1,101 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup dependencies
+########################################################################
+include(GrBoost)
+
+########################################################################
+# Register component
+########################################################################
+include(GrComponent)
+GR_REGISTER_COMPONENT("gr-audio" ENABLE_GR_AUDIO
+ Boost_FOUND
+ ENABLE_GR_CORE
+)
+
+GR_SET_GLOBAL(GR_AUDIO_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+########################################################################
+# Begin conditional configuration
+########################################################################
+if(ENABLE_GR_AUDIO)
+
+########################################################################
+# Setup CPack components
+########################################################################
+include(GrPackage)
+CPACK_SET(CPACK_COMPONENT_GROUP_AUDIO_DESCRIPTION "GNU Radio Audio Blocks")
+
+CPACK_COMPONENT("audio_runtime"
+ GROUP "Audio"
+ DISPLAY_NAME "Runtime"
+ DESCRIPTION "Runtime"
+ DEPENDS "core_runtime"
+)
+
+CPACK_COMPONENT("audio_devel"
+ GROUP "Audio"
+ DISPLAY_NAME "Development"
+ DESCRIPTION "C++ headers, package config, import libraries"
+ DEPENDS "core_devel"
+)
+
+CPACK_COMPONENT("audio_python"
+ GROUP "Audio"
+ DISPLAY_NAME "Python"
+ DESCRIPTION "Python modules for runtime; GRC xml files"
+ DEPENDS "core_python;audio_runtime"
+)
+
+CPACK_COMPONENT("audio_swig"
+ GROUP "Audio"
+ DISPLAY_NAME "SWIG"
+ DESCRIPTION "SWIG development .i files"
+ DEPENDS "core_swig;audio_python;audio_devel"
+)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(include)
+add_subdirectory(lib)
+add_subdirectory(examples/c++)
+if(ENABLE_PYTHON)
+ add_subdirectory(swig)
+ add_subdirectory(grc)
+ add_subdirectory(examples/python)
+endif(ENABLE_PYTHON)
+
+########################################################################
+# Create Pkg Config File
+########################################################################
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-audio.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-audio.pc
+@ONLY)
+
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-audio.pc
+ DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
+ COMPONENT "audio_devel"
+)
+
+endif(ENABLE_GR_AUDIO)
diff --git a/gr-audio/examples/c++/CMakeLists.txt b/gr-audio/examples/c++/CMakeLists.txt
new file mode 100644
index 000000000..38490cce8
--- /dev/null
+++ b/gr-audio/examples/c++/CMakeLists.txt
@@ -0,0 +1,23 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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_directories(${GR_AUDIO_INCLUDE_DIRS})
+include_directories(${GNURADIO_CORE_INCLUDE_DIRS})
+add_executable(dial_tone dial_tone.cc)
+target_link_libraries(dial_tone gnuradio-audio)
diff --git a/gr-audio/examples/python/CMakeLists.txt b/gr-audio/examples/python/CMakeLists.txt
new file mode 100644
index 000000000..86ba86ac0
--- /dev/null
+++ b/gr-audio/examples/python/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrPython)
+
+GR_PYTHON_INSTALL(PROGRAMS
+ audio_copy.py
+ audio_fft.py
+ audio_play.py
+ audio_to_file.py
+ dial_tone.py
+ dial_tone_daemon.py
+ dial_tone_wav.py
+ mono_tone.py
+ multi_tone.py
+ noise.py
+ spectrum_inversion.py
+ test_resampler.py
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/audio
+ COMPONENT "audio_python"
+)
diff --git a/gr-audio/grc/CMakeLists.txt b/gr-audio/grc/CMakeLists.txt
new file mode 100644
index 000000000..a077f7fb4
--- /dev/null
+++ b/gr-audio/grc/CMakeLists.txt
@@ -0,0 +1,22 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+file(GLOB xml_files "*.xml")
+install(FILES ${xml_files} DESTINATION ${GRC_BLOCKS_DIR} COMPONENT "audio_python")
diff --git a/gr-audio/include/CMakeLists.txt b/gr-audio/include/CMakeLists.txt
new file mode 100644
index 000000000..6db55e92c
--- /dev/null
+++ b/gr-audio/include/CMakeLists.txt
@@ -0,0 +1,29 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Install header files
+########################################################################
+install(FILES
+ gr_audio_api.h
+ gr_audio_source.h
+ gr_audio_sink.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "audio_devel"
+)
diff --git a/gr-audio/lib/CMakeLists.txt b/gr-audio/lib/CMakeLists.txt
new file mode 100644
index 000000000..214f045be
--- /dev/null
+++ b/gr-audio/lib/CMakeLists.txt
@@ -0,0 +1,160 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup the include and linker paths
+########################################################################
+include_directories(
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GR_AUDIO_INCLUDE_DIRS}
+ ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+include_directories(${Boost_INCLUDE_DIRS})
+link_directories(${Boost_LIBRARY_DIRS})
+
+list(APPEND gr_audio_libs gnuradio-core ${Boost_LIBRARIES})
+list(APPEND gr_audio_sources gr_audio_registry.cc)
+list(APPEND gr_audio_confs ${CMAKE_CURRENT_SOURCE_DIR}/gr-audio.conf)
+
+########################################################################
+## ALSA Support
+########################################################################
+find_package(ALSA)
+
+if(ALSA_FOUND)
+
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/alsa ${ALSA_INCLUDE_DIRS})
+ list(APPEND gr_audio_libs ${ALSA_LIBRARIES})
+ list(APPEND gr_audio_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/alsa/gri_alsa.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/alsa/audio_alsa_source.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/alsa/audio_alsa_sink.cc
+ )
+ list(APPEND gr_audio_confs ${CMAKE_CURRENT_SOURCE_DIR}/alsa/gr-audio-alsa.conf)
+
+endif(ALSA_FOUND)
+
+########################################################################
+## OSS Support
+########################################################################
+find_package(OSS)
+
+if(OSS_FOUND)
+
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/oss ${OSS_INCLUDE_DIRS})
+ list(APPEND gr_audio_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/oss/audio_oss_source.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/oss/audio_oss_sink.cc
+ )
+ list(APPEND gr_audio_confs ${CMAKE_CURRENT_SOURCE_DIR}/oss/gr-audio-oss.conf)
+
+endif(OSS_FOUND)
+
+
+########################################################################
+## Jack Support
+########################################################################
+find_package(Jack)
+
+if(JACK_FOUND)
+
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/jack ${JACK_INCLUDE_DIRS})
+ list(APPEND gr_audio_libs ${JACK_LIBRARIES})
+ add_definitions(${JACK_DEFINITIONS})
+ list(APPEND gr_audio_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/jack/gri_jack.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/jack/audio_jack_source.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/jack/audio_jack_sink.cc
+ )
+ list(APPEND gr_audio_confs ${CMAKE_CURRENT_SOURCE_DIR}/jack/gr-audio-jack.conf)
+
+endif(JACK_FOUND)
+
+########################################################################
+## OSX Support
+########################################################################
+include(CheckIncludeFileCXX)
+CHECK_INCLUDE_FILE_CXX(AudioUnit/AudioUnit.h AUDIO_UNIT_H)
+CHECK_INCLUDE_FILE_CXX(AudioToolbox/AudioToolbox.h AUDIO_TOOLBOX_H)
+
+if(AUDIO_UNIT_H AND AUDIO_TOOLBOX_H)
+
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/osx)
+ list(APPEND gr_audio_libs
+ "-framework AudioUnit"
+ "-framework CoreAudio"
+ "-framework AudioToolbox"
+ "-framework Carbon"
+ )
+ list(APPEND gr_audio_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/osx/audio_osx_source.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/osx/audio_osx_sink.cc
+ )
+
+endif(AUDIO_UNIT_H AND AUDIO_TOOLBOX_H)
+
+########################################################################
+## PortAudio Support
+########################################################################
+find_package(Portaudio)
+
+if(PORTAUDIO_FOUND)
+
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/portaudio ${PORTAUDIO_INCLUDE_DIRS})
+ list(APPEND gr_audio_libs ${PORTAUDIO_LIBRARIES})
+ add_definitions(${PORTAUDIO_DEFINITIONS})
+ list(APPEND gr_audio_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/portaudio/gri_portaudio.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/portaudio/audio_portaudio_source.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/portaudio/audio_portaudio_sink.cc
+ )
+ list(APPEND gr_audio_confs ${CMAKE_CURRENT_SOURCE_DIR}/portaudio/gr-audio-portaudio.conf)
+
+endif(PORTAUDIO_FOUND)
+
+########################################################################
+## Windows Support
+########################################################################
+if(WIN32)
+
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/windows)
+ list(APPEND gr_audio_libs winmm.lib)
+ list(APPEND gr_audio_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/windows/audio_windows_source.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/windows/audio_windows_sink.cc
+ )
+
+endif(WIN32)
+
+########################################################################
+# Setup library
+########################################################################
+add_library(gnuradio-audio SHARED ${gr_audio_sources})
+target_link_libraries(gnuradio-audio ${gr_audio_libs})
+set_target_properties(gnuradio-audio PROPERTIES DEFINE_SYMBOL "gnuradio_audio_EXPORTS")
+set_target_properties(gnuradio-audio PROPERTIES SOVERSION ${LIBVER})
+
+install(TARGETS gnuradio-audio
+ LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT "audio_runtime" # .so/.dylib file
+ ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT "audio_devel" # .lib file
+ RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT "audio_runtime" # .dll file
+)
+
+install(FILES ${gr_audio_confs} DESTINATION ${GR_PKG_CONF_DIR} COMPONENT "audio_runtime")
diff --git a/gr-audio/swig/CMakeLists.txt b/gr-audio/swig/CMakeLists.txt
new file mode 100644
index 000000000..3e7b7f861
--- /dev/null
+++ b/gr-audio/swig/CMakeLists.txt
@@ -0,0 +1,51 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup swig generation
+########################################################################
+include(GrPython)
+include(GrSwig)
+
+set(GR_SWIG_INCLUDE_DIRS
+ ${GR_AUDIO_INCLUDE_DIRS}
+ ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+)
+
+set(GR_SWIG_LIBRARIES gnuradio-audio)
+
+GR_SWIG_MAKE(audio_swig audio_swig.i)
+
+GR_SWIG_INSTALL(
+ TARGETS audio_swig
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/audio
+ COMPONENT "audio_python"
+)
+
+install(
+ FILES audio_swig.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "audio_swig"
+)
+
+GR_PYTHON_INSTALL(
+ FILES __init__.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/audio
+ COMPONENT "audio_python"
+)
diff --git a/gr-comedi/CMakeLists.txt b/gr-comedi/CMakeLists.txt
new file mode 100644
index 000000000..b12177fda
--- /dev/null
+++ b/gr-comedi/CMakeLists.txt
@@ -0,0 +1,104 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup dependencies
+########################################################################
+include(GrBoost)
+
+include(FindPkgConfig)
+
+PKG_CHECK_MODULES(COMEDI comedilib)
+
+########################################################################
+# Register component
+########################################################################
+include(GrComponent)
+GR_REGISTER_COMPONENT("gr-comedi" ENABLE_GR_COMEDI
+ COMEDI_FOUND
+ LINUX #comedi uses linux specific device noces
+ Boost_FOUND
+ ENABLE_GR_CORE
+)
+
+remove_definitions(-fvisibility=hidden) #FIXME until we do symbol visibility
+
+GR_SET_GLOBAL(GR_COMEDI_INCLUDE_DIRS
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+)
+
+########################################################################
+# Begin conditional configuration
+########################################################################
+if(ENABLE_GR_COMEDI)
+
+########################################################################
+# Setup CPack components
+########################################################################
+include(GrPackage)
+CPACK_SET(CPACK_COMPONENT_GROUP_COMEDI_DESCRIPTION "GNU Radio Comedi Blocks")
+
+CPACK_COMPONENT("comedi_runtime"
+ GROUP "Comedi"
+ DISPLAY_NAME "Runtime"
+ DESCRIPTION "Runtime"
+ DEPENDS "core_runtime"
+)
+
+CPACK_COMPONENT("comedi_devel"
+ GROUP "Comedi"
+ DISPLAY_NAME "Development"
+ DESCRIPTION "C++ headers, package config, import libraries"
+ DEPENDS "core_devel"
+)
+
+CPACK_COMPONENT("comedi_python"
+ GROUP "Comedi"
+ DISPLAY_NAME "Python"
+ DESCRIPTION "Python modules for runtime; GRC xml files"
+ DEPENDS "core_python;comedi_runtime"
+)
+
+CPACK_COMPONENT("comedi_swig"
+ GROUP "Comedi"
+ DISPLAY_NAME "SWIG"
+ DESCRIPTION "SWIG development .i files"
+ DEPENDS "core_swig;comedi_python;comedi_devel"
+)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(src)
+
+########################################################################
+# Create Pkg Config File
+########################################################################
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-comedi.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-comedi.pc
+@ONLY)
+
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-comedi.pc
+ DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
+ COMPONENT "comedi_devel"
+)
+
+endif(ENABLE_GR_COMEDI)
diff --git a/gr-comedi/src/CMakeLists.txt b/gr-comedi/src/CMakeLists.txt
new file mode 100644
index 000000000..e963f9586
--- /dev/null
+++ b/gr-comedi/src/CMakeLists.txt
@@ -0,0 +1,116 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup the include and linker paths
+########################################################################
+include_directories(
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GR_COMEDI_INCLUDE_DIRS}
+)
+
+include_directories(${Boost_INCLUDE_DIRS})
+link_directories(${Boost_LIBRARY_DIRS})
+
+include_directories(${COMEDI_INCLUDE_DIRS})
+link_directories(${COMEDI_LIBRARY_DIRS})
+
+########################################################################
+# Setup library
+########################################################################
+list(APPEND gr_comedi_sources
+ comedi_sink_s.cc
+ comedi_source_s.cc
+ gri_comedi.cc
+)
+
+list(APPEND comedi_libs
+ gnuradio-core
+ ${Boost_LIBRARIES}
+ ${COMEDI_LIBRARIES}
+)
+
+add_library(gnuradio-comedi SHARED ${gr_comedi_sources})
+target_link_libraries(gnuradio-comedi ${comedi_libs})
+set_target_properties(gnuradio-comedi PROPERTIES DEFINE_SYMBOL "gnuradio_comedi_EXPORTS")
+set_target_properties(gnuradio-comedi PROPERTIES SOVERSION ${LIBVER})
+
+install(TARGETS gnuradio-comedi
+ LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT "comedi_runtime" # .so/.dylib file
+ ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT "comedi_devel" # .lib file
+ RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT "comedi_runtime" # .dll file
+)
+
+########################################################################
+# Install public header files
+########################################################################
+install(FILES
+ comedi_sink_s.h
+ comedi_source_s.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "comedi_devel"
+)
+
+########################################################################
+# Setup swig generation
+########################################################################
+if(ENABLE_PYTHON)
+include(GrPython)
+include(GrSwig)
+
+set(GR_SWIG_INCLUDE_DIRS
+ ${GR_COMEDI_INCLUDE_DIRS}
+ ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+)
+
+set(GR_SWIG_LIBRARIES gnuradio-comedi)
+
+GR_SWIG_MAKE(comedi comedi.i)
+
+GR_SWIG_INSTALL(
+ TARGETS comedi
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio
+ COMPONENT "comedi_python"
+)
+
+install(
+ FILES comedi.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "comedi_swig"
+)
+
+endif(ENABLE_PYTHON)
+
+########################################################################
+# Handle the unit tests
+########################################################################
+if(ENABLE_TESTING AND ENABLE_PYTHON)
+include(GrTest)
+file(GLOB py_qa_test_files "qa_*.py")
+foreach(py_qa_test_file ${py_qa_test_files})
+ get_filename_component(py_qa_test_name ${py_qa_test_file} NAME_WE)
+ set(GR_TEST_PYTHON_DIRS
+ ${CMAKE_BINARY_DIR}/gnuradio-core/src/python
+ ${CMAKE_BINARY_DIR}/gnuradio-core/src/lib/swig
+ ${CMAKE_BINARY_DIR}/gr-comedi/src
+ )
+ set(GR_TEST_TARGET_DEPS gruel gnuradio-core gnuradio-comedi)
+ GR_ADD_TEST(${py_qa_test_name} ${PYTHON_EXECUTABLE} ${py_qa_test_file})
+endforeach(py_qa_test_file)
+endif(ENABLE_TESTING AND ENABLE_PYTHON)
diff --git a/gr-digital/CMakeLists.txt b/gr-digital/CMakeLists.txt
new file mode 100644
index 000000000..76128b7ce
--- /dev/null
+++ b/gr-digital/CMakeLists.txt
@@ -0,0 +1,107 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup dependencies
+########################################################################
+include(GrBoost)
+
+########################################################################
+# Register component
+########################################################################
+include(GrComponent)
+GR_REGISTER_COMPONENT("gr-digital" ENABLE_GR_DIGITAL
+ Boost_FOUND
+ ENABLE_GR_CORE
+)
+
+GR_SET_GLOBAL(GR_DIGITAL_INCLUDE_DIRS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+)
+
+GR_SET_GLOBAL(GR_DIGITAL_SWIG_INCLUDE_DIRS
+ ${CMAKE_CURRENT_SOURCE_DIR}/swig
+)
+
+########################################################################
+# Begin conditional configuration
+########################################################################
+if(ENABLE_GR_DIGITAL)
+
+########################################################################
+# Setup CPack components
+########################################################################
+include(GrPackage)
+CPACK_SET(CPACK_COMPONENT_GROUP_DIGITAL_DESCRIPTION "GNU Radio Digital Blocks")
+
+CPACK_COMPONENT("digital_runtime"
+ GROUP "Digital"
+ DISPLAY_NAME "Runtime"
+ DESCRIPTION "Dynamic link libraries"
+ DEPENDS "core_runtime"
+)
+
+CPACK_COMPONENT("digital_devel"
+ GROUP "Digital"
+ DISPLAY_NAME "Development"
+ DESCRIPTION "C++ headers, package config, import libraries"
+ DEPENDS "core_devel"
+)
+
+CPACK_COMPONENT("digital_python"
+ GROUP "Digital"
+ DISPLAY_NAME "Python"
+ DESCRIPTION "Python modules for runtime"
+ DEPENDS "core_python;digital_runtime"
+)
+
+CPACK_COMPONENT("digital_swig"
+ GROUP "Digital"
+ DISPLAY_NAME "SWIG"
+ DESCRIPTION "SWIG development .i files"
+ DEPENDS "core_swig;digital_python;digital_devel"
+)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(include)
+add_subdirectory(lib)
+if(ENABLE_PYTHON)
+ add_subdirectory(swig)
+ add_subdirectory(python)
+ add_subdirectory(grc)
+ add_subdirectory(examples)
+endif(ENABLE_PYTHON)
+
+########################################################################
+# Create Pkg Config File
+########################################################################
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-digital.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-digital.pc
+@ONLY)
+
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-digital.pc
+ DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
+ COMPONENT "digital_devel"
+)
+
+endif(ENABLE_GR_DIGITAL)
diff --git a/gr-digital/examples/CMakeLists.txt b/gr-digital/examples/CMakeLists.txt
new file mode 100644
index 000000000..2645557cc
--- /dev/null
+++ b/gr-digital/examples/CMakeLists.txt
@@ -0,0 +1,45 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrPython)
+
+GR_PYTHON_INSTALL(PROGRAMS
+ example_costas.py
+ example_fll.py
+ example_timing.py
+ run_length.py
+ gen_whitener.py
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/digital
+ COMPONENT "digital_python"
+)
+
+GR_PYTHON_INSTALL(PROGRAMS
+ narrowband/transmit_path.py
+ narrowband/receive_path.py
+ narrowband/uhd_interface.py
+ narrowband/benchmark_tx.py
+ narrowband/benchmark_rx.py
+ narrowband/tx_voice.py
+ narrowband/rx_voice.py
+ narrowband/digital_bert_rx.py
+ narrowband/digital_bert_tx.py
+ narrowband/tunnel.py
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/digital/narrowband
+ COMPONENT "digital_python"
+)
diff --git a/gr-digital/grc/CMakeLists.txt b/gr-digital/grc/CMakeLists.txt
new file mode 100644
index 000000000..330098539
--- /dev/null
+++ b/gr-digital/grc/CMakeLists.txt
@@ -0,0 +1,47 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+install(FILES
+ digital_block_tree.xml
+ digital_binary_slicer_fb.xml
+ digital_clock_recovery_mm_xx.xml
+ digital_constellation_decoder_cb.xml
+ digital_correlate_access_code_bb.xml
+ digital_costas_loop_cc.xml
+ digital_cma_equalizer_cc.xml
+ digital_fll_band_edge_cc.xml
+ digital_kurtotic_equalizer_cc.xml
+ digital_lms_dd_equalizer_cc.xml
+ digital_mpsk_receiver_cc.xml
+ digital_dxpsk_mod.xml
+ digital_dxpsk_demod.xml
+ digital_psk_mod.xml
+ digital_psk_demod.xml
+ digital_qam_mod.xml
+ digital_qam_demod.xml
+ digital_ofdm_mod.xml
+ digital_ofdm_demod.xml
+ digital_ofdm_cyclic_prefixer.xml
+ digital_ofdm_frame_acquisition.xml
+ digital_ofdm_insert_preamble.xml
+ digital_ofdm_sampler.xml
+ digital_ofdm_sync_pn.xml
+ DESTINATION ${GRC_BLOCKS_DIR}
+ COMPONENT "digital_python"
+)
diff --git a/gr-digital/include/CMakeLists.txt b/gr-digital/include/CMakeLists.txt
new file mode 100644
index 000000000..cf20bd1e7
--- /dev/null
+++ b/gr-digital/include/CMakeLists.txt
@@ -0,0 +1,50 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Install header files
+########################################################################
+install(FILES
+ digital_api.h
+ digital_binary_slicer_fb.h
+ digital_clock_recovery_mm_cc.h
+ digital_clock_recovery_mm_ff.h
+ digital_constellation.h
+ digital_constellation_receiver_cb.h
+ digital_constellation_decoder_cb.h
+ digital_correlate_access_code_bb.h
+ digital_costas_loop_cc.h
+ digital_cma_equalizer_cc.h
+ digital_crc32.h
+ digital_fll_band_edge_cc.h
+ digital_lms_dd_equalizer_cc.h
+ digital_kurtotic_equalizer_cc.h
+ digital_metric_type.h
+ digital_mpsk_receiver_cc.h
+ digital_ofdm_cyclic_prefixer.h
+ digital_ofdm_frame_acquisition.h
+ digital_ofdm_frame_sink.h
+ digital_ofdm_insert_preamble.h
+ digital_ofdm_mapper_bcv.h
+ digital_ofdm_sampler.h
+ digital_gmskmod_bc.h
+ digital_cpmmod_bc.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "digital_devel"
+)
diff --git a/gr-digital/include/Makefile.am b/gr-digital/include/Makefile.am
index ce9e67efb..8ce3a94e8 100644
--- a/gr-digital/include/Makefile.am
+++ b/gr-digital/include/Makefile.am
@@ -23,6 +23,7 @@ include $(top_srcdir)/Makefile.common
# These headers get installed in ${prefix}/include/gnuradio
grinclude_HEADERS = \
+ digital_api.h \
digital_binary_slicer_fb.h \
digital_clock_recovery_mm_cc.h \
digital_clock_recovery_mm_ff.h \
diff --git a/gr-digital/include/digital_api.h b/gr-digital/include/digital_api.h
new file mode 100644
index 000000000..d45ace13f
--- /dev/null
+++ b/gr-digital/include/digital_api.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2011 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along 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_DIGITAL_API_H
+#define INCLUDED_DIGITAL_API_H
+
+#include <gruel/attributes.h>
+
+#ifdef gnuradio_digital_EXPORTS
+# define DIGITAL_API __GR_ATTR_EXPORT
+#else
+# define DIGITAL_API __GR_ATTR_IMPORT
+#endif
+
+#endif /* INCLUDED_DIGITAL_API_H */
diff --git a/gr-digital/include/digital_binary_slicer_fb.h b/gr-digital/include/digital_binary_slicer_fb.h
index 4e6717de6..35a7380fb 100644
--- a/gr-digital/include/digital_binary_slicer_fb.h
+++ b/gr-digital/include/digital_binary_slicer_fb.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_DIGITAL_BINARY_SLICER_FB_H
#define INCLUDED_DIGITAL_BINARY_SLICER_FB_H
+#include <digital_api.h>
#include <gr_sync_block.h>
class digital_binary_slicer_fb;
typedef boost::shared_ptr<digital_binary_slicer_fb> digital_binary_slicer_fb_sptr;
-digital_binary_slicer_fb_sptr digital_make_binary_slicer_fb ();
+DIGITAL_API digital_binary_slicer_fb_sptr digital_make_binary_slicer_fb ();
/*!
* \brief slice float binary symbol outputting 1 bit output
@@ -38,9 +39,9 @@ digital_binary_slicer_fb_sptr digital_make_binary_slicer_fb ();
* x < 0 --> 0
* x >= 0 --> 1
*/
-class digital_binary_slicer_fb : public gr_sync_block
+class DIGITAL_API digital_binary_slicer_fb : public gr_sync_block
{
- friend digital_binary_slicer_fb_sptr digital_make_binary_slicer_fb ();
+ friend DIGITAL_API digital_binary_slicer_fb_sptr digital_make_binary_slicer_fb ();
digital_binary_slicer_fb ();
public:
diff --git a/gr-digital/include/digital_clock_recovery_mm_cc.h b/gr-digital/include/digital_clock_recovery_mm_cc.h
index 5d9c8c5e5..a2577d537 100644
--- a/gr-digital/include/digital_clock_recovery_mm_cc.h
+++ b/gr-digital/include/digital_clock_recovery_mm_cc.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_DIGITAL_CLOCK_RECOVERY_MM_CC_H
#define INCLUDED_DIGITAL_CLOCK_RECOVERY_MM_CC_H
+#include <digital_api.h>
#include <gr_block.h>
#include <gr_complex.h>
#include <gr_math.h>
@@ -33,7 +34,7 @@ class digital_clock_recovery_mm_cc;
typedef boost::shared_ptr<digital_clock_recovery_mm_cc> digital_clock_recovery_mm_cc_sptr;
// public constructor
-digital_clock_recovery_mm_cc_sptr
+DIGITAL_API digital_clock_recovery_mm_cc_sptr
digital_make_clock_recovery_mm_cc (float omega, float gain_omega,
float mu, float gain_mu,
float omega_relative_limit=0.001);
@@ -53,7 +54,7 @@ digital_make_clock_recovery_mm_cc (float omega, float gain_omega,
* and Muller algorithm," Electronics Letters, Vol. 31, no. 13, 22
* June 1995, pp. 1032 - 1033.
*/
-class digital_clock_recovery_mm_cc : public gr_block
+class DIGITAL_API digital_clock_recovery_mm_cc : public gr_block
{
public:
~digital_clock_recovery_mm_cc ();
@@ -107,7 +108,7 @@ protected:
gr_complex slicer_0deg (gr_complex sample);
gr_complex slicer_45deg (gr_complex sample);
- friend digital_clock_recovery_mm_cc_sptr
+ friend DIGITAL_API digital_clock_recovery_mm_cc_sptr
digital_make_clock_recovery_mm_cc (float omega, float gain_omega,
float mu, float gain_mu,
float omega_relative_limit);
diff --git a/gr-digital/include/digital_clock_recovery_mm_ff.h b/gr-digital/include/digital_clock_recovery_mm_ff.h
index 5a2206fb2..36749553f 100644
--- a/gr-digital/include/digital_clock_recovery_mm_ff.h
+++ b/gr-digital/include/digital_clock_recovery_mm_ff.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_DIGITAL_CLOCK_RECOVERY_MM_FF_H
#define INCLUDED_DIGITAL_CLOCK_RECOVERY_MM_FF_H
+#include <digital_api.h>
#include <gr_block.h>
#include <gr_math.h>
#include <stdio.h>
@@ -33,7 +34,7 @@ class digital_clock_recovery_mm_ff;
typedef boost::shared_ptr<digital_clock_recovery_mm_ff> digital_clock_recovery_mm_ff_sptr;
// public constructor
-digital_clock_recovery_mm_ff_sptr
+DIGITAL_API digital_clock_recovery_mm_ff_sptr
digital_make_clock_recovery_mm_ff (float omega, float gain_omega,
float mu, float gain_mu,
float omega_relative_limit=0.001);
@@ -49,7 +50,7 @@ digital_make_clock_recovery_mm_ff (float omega, float gain_omega,
* Estimation and Signal Processing" by Heinrich Meyr, Marc Moeneclaey, & Stefan Fechtel.
* ISBN 0-471-50275-8.
*/
-class digital_clock_recovery_mm_ff : public gr_block
+class DIGITAL_API digital_clock_recovery_mm_ff : public gr_block
{
public:
~digital_clock_recovery_mm_ff ();
@@ -90,7 +91,7 @@ protected:
FILE *d_logfile;
float d_omega_relative_limit; // used to compute min and max omega
- friend digital_clock_recovery_mm_ff_sptr
+ friend DIGITAL_API digital_clock_recovery_mm_ff_sptr
digital_make_clock_recovery_mm_ff (float omega, float gain_omega,
float mu, float gain_mu,
float omega_relative_limit);
diff --git a/gr-digital/include/digital_cma_equalizer_cc.h b/gr-digital/include/digital_cma_equalizer_cc.h
index 93771dca4..0d703789a 100644
--- a/gr-digital/include/digital_cma_equalizer_cc.h
+++ b/gr-digital/include/digital_cma_equalizer_cc.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_DIGITAL_CMA_EQUALIZER_CC_H
#define INCLUDED_DIGITAL_CMA_EQUALIZER_CC_H
+#include <digital_api.h>
#include <gr_adaptive_fir_ccc.h>
#include <gr_math.h>
#include <iostream>
@@ -30,7 +31,7 @@
class digital_cma_equalizer_cc;
typedef boost::shared_ptr<digital_cma_equalizer_cc> digital_cma_equalizer_cc_sptr;
-digital_cma_equalizer_cc_sptr
+DIGITAL_API digital_cma_equalizer_cc_sptr
digital_make_cma_equalizer_cc(int num_taps, float modulus, float mu, int sps);
/*!
@@ -44,13 +45,13 @@ digital_make_cma_equalizer_cc(int num_taps, float modulus, float mu, int sps);
* Two-Dimensional Data Communication Systems," IEEE Transactions on
* Communications, Vol. 28, No. 11, pp. 1867 - 1875, 1980,
*/
-class digital_cma_equalizer_cc : public gr_adaptive_fir_ccc
+class DIGITAL_API digital_cma_equalizer_cc : public gr_adaptive_fir_ccc
{
private:
float d_modulus;
float d_mu;
- friend digital_cma_equalizer_cc_sptr digital_make_cma_equalizer_cc(int num_taps,
+ friend DIGITAL_API digital_cma_equalizer_cc_sptr digital_make_cma_equalizer_cc(int num_taps,
float modulus,
float mu,
int sps);
diff --git a/gr-digital/include/digital_constellation.h b/gr-digital/include/digital_constellation.h
index b6da7ff9b..a72bfb74c 100644
--- a/gr-digital/include/digital_constellation.h
+++ b/gr-digital/include/digital_constellation.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_DIGITAL_CONSTELLATION_H
#define INCLUDED_DIGITAL_CONSTELLATION_H
+#include <digital_api.h>
#include <vector>
#include <math.h>
#include <gr_complex.h>
@@ -53,7 +54,7 @@ typedef boost::shared_ptr<digital_constellation> digital_constellation_sptr;
* from this class and overloaded to perform optimized slicing and
* constellation mappings.
*/
-class digital_constellation : public boost::enable_shared_from_this<digital_constellation>
+class DIGITAL_API digital_constellation : public boost::enable_shared_from_this<digital_constellation>
{
public:
digital_constellation (std::vector<gr_complex> constellation,
@@ -134,7 +135,7 @@ class digital_constellation_calcdist;
typedef boost::shared_ptr<digital_constellation_calcdist> digital_constellation_calcdist_sptr;
// public constructor
-digital_constellation_calcdist_sptr
+DIGITAL_API digital_constellation_calcdist_sptr
digital_make_constellation_calcdist (std::vector<gr_complex> constellation,
std::vector<unsigned int> pre_diff_code,
unsigned int rotational_symmetry,
@@ -148,7 +149,7 @@ digital_make_constellation_calcdist (std::vector<gr_complex> constellation,
* constellation for decision making. Inefficient for large
* constellations.
*/
-class digital_constellation_calcdist : public digital_constellation
+class DIGITAL_API digital_constellation_calcdist : public digital_constellation
{
public:
digital_constellation_calcdist (std::vector<gr_complex> constellation,
@@ -161,7 +162,7 @@ class digital_constellation_calcdist : public digital_constellation
// void calc_hard_symbol_metric(gr_complex *sample, float *metric);
private:
- friend digital_constellation_calcdist_sptr
+ friend DIGITAL_API digital_constellation_calcdist_sptr
digital_make_constellation_calcdist (std::vector<gr_complex> constellation);
};
@@ -178,7 +179,7 @@ class digital_constellation_calcdist : public digital_constellation
* associated with the nearest constellation point.
*
*/
-class digital_constellation_sector : public digital_constellation
+class DIGITAL_API digital_constellation_sector : public digital_constellation
{
public:
@@ -227,7 +228,7 @@ class digital_constellation_rect;
typedef boost::shared_ptr<digital_constellation_rect> digital_constellation_rect_sptr;
// public constructor
-digital_constellation_rect_sptr
+DIGITAL_API digital_constellation_rect_sptr
digital_make_constellation_rect (std::vector<gr_complex> constellation,
std::vector<unsigned int> pre_diff_code,
unsigned int rotational_symmetry,
@@ -236,7 +237,7 @@ digital_make_constellation_rect (std::vector<gr_complex> constellation,
float width_real_sectors,
float width_imag_sectors);
-class digital_constellation_rect : public digital_constellation_sector
+class DIGITAL_API digital_constellation_rect : public digital_constellation_sector
{
public:
@@ -261,7 +262,7 @@ class digital_constellation_rect : public digital_constellation_sector
float d_width_real_sectors;
float d_width_imag_sectors;
- friend digital_constellation_rect_sptr
+ friend DIGITAL_API digital_constellation_rect_sptr
digital_make_constellation_rect (std::vector<gr_complex> constellation,
std::vector<unsigned int> pre_diff_code,
unsigned int rotational_symmetry,
@@ -281,7 +282,7 @@ class digital_constellation_psk;
typedef boost::shared_ptr<digital_constellation_psk> digital_constellation_psk_sptr;
// public constructor
-digital_constellation_psk_sptr
+DIGITAL_API digital_constellation_psk_sptr
digital_make_constellation_psk (std::vector<gr_complex> constellation,
std::vector<unsigned int> pre_diff_code,
unsigned int n_sectors);
@@ -298,7 +299,7 @@ digital_make_constellation_psk (std::vector<gr_complex> constellation,
*
* Assumes that there is a constellation point at 1.x
*/
-class digital_constellation_psk : public digital_constellation_sector
+class DIGITAL_API digital_constellation_psk : public digital_constellation_sector
{
public:
@@ -314,7 +315,7 @@ class digital_constellation_psk : public digital_constellation_sector
private:
- friend digital_constellation_psk_sptr
+ friend DIGITAL_API digital_constellation_psk_sptr
digital_make_constellation_psk (std::vector<gr_complex> constellation,
std::vector<unsigned int> pre_diff_code,
unsigned int n_sectors);
@@ -333,21 +334,21 @@ class digital_constellation_bpsk;
typedef boost::shared_ptr<digital_constellation_bpsk> digital_constellation_bpsk_sptr;
// public constructor
-digital_constellation_bpsk_sptr
+DIGITAL_API digital_constellation_bpsk_sptr
digital_make_constellation_bpsk ();
/*!
* \brief Digital constellation for BPSK
* \ingroup digital
*/
-class digital_constellation_bpsk : public digital_constellation
+class DIGITAL_API digital_constellation_bpsk : public digital_constellation
{
public:
digital_constellation_bpsk ();
unsigned int decision_maker (const gr_complex *sample);
- friend digital_constellation_bpsk_sptr
+ friend DIGITAL_API digital_constellation_bpsk_sptr
digital_make_constellation_bpsk ();
};
@@ -364,21 +365,21 @@ class digital_constellation_qpsk;
typedef boost::shared_ptr<digital_constellation_qpsk> digital_constellation_qpsk_sptr;
// public constructor
-digital_constellation_qpsk_sptr
+DIGITAL_API digital_constellation_qpsk_sptr
digital_make_constellation_qpsk ();
/*!
* \brief Digital constellation for QPSK
* \ingroup digital
*/
-class digital_constellation_qpsk : public digital_constellation
+class DIGITAL_API digital_constellation_qpsk : public digital_constellation
{
public:
digital_constellation_qpsk ();
unsigned int decision_maker (const gr_complex *sample);
- friend digital_constellation_qpsk_sptr
+ friend DIGITAL_API digital_constellation_qpsk_sptr
digital_make_constellation_qpsk ();
};
@@ -395,21 +396,21 @@ class digital_constellation_dqpsk;
typedef boost::shared_ptr<digital_constellation_dqpsk> digital_constellation_dqpsk_sptr;
// public constructor
-digital_constellation_dqpsk_sptr
+DIGITAL_API digital_constellation_dqpsk_sptr
digital_make_constellation_dqpsk ();
/*!
* \brief Digital constellation for DQPSK
* \ingroup digital
*/
-class digital_constellation_dqpsk : public digital_constellation
+class DIGITAL_API digital_constellation_dqpsk : public digital_constellation
{
public:
digital_constellation_dqpsk ();
unsigned int decision_maker (const gr_complex *sample);
- friend digital_constellation_dqpsk_sptr
+ friend DIGITAL_API digital_constellation_dqpsk_sptr
digital_make_constellation_dqpsk ();
};
@@ -426,21 +427,21 @@ class digital_constellation_8psk;
typedef boost::shared_ptr<digital_constellation_8psk> digital_constellation_8psk_sptr;
// public constructor
-digital_constellation_8psk_sptr
+DIGITAL_API digital_constellation_8psk_sptr
digital_make_constellation_8psk ();
/*!
* \brief Digital constellation for 8PSK
* \ingroup digital
*/
-class digital_constellation_8psk : public digital_constellation
+class DIGITAL_API digital_constellation_8psk : public digital_constellation
{
public:
digital_constellation_8psk ();
unsigned int decision_maker (const gr_complex *sample);
- friend digital_constellation_8psk_sptr
+ friend DIGITAL_API digital_constellation_8psk_sptr
digital_make_constellation_8psk ();
};
diff --git a/gr-digital/include/digital_constellation_decoder_cb.h b/gr-digital/include/digital_constellation_decoder_cb.h
index d587f6bc4..cce3a564f 100644
--- a/gr-digital/include/digital_constellation_decoder_cb.h
+++ b/gr-digital/include/digital_constellation_decoder_cb.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_DIGITAL_CONSTELLATION_DECODER_CB_H
#define INCLUDED_DIGITAL_CONSTELLATION_DECODER_CB_H
+#include <digital_api.h>
#include <gr_block.h>
#include <digital_constellation.h>
#include <vector>
@@ -30,7 +31,7 @@
class digital_constellation_decoder_cb;
typedef boost::shared_ptr<digital_constellation_decoder_cb>digital_constellation_decoder_cb_sptr;
-digital_constellation_decoder_cb_sptr
+DIGITAL_API digital_constellation_decoder_cb_sptr
digital_make_constellation_decoder_cb (digital_constellation_sptr constellation);
/*!
@@ -39,14 +40,14 @@ digital_make_constellation_decoder_cb (digital_constellation_sptr constellation)
* \ingroup digital
*
*/
-class digital_constellation_decoder_cb : public gr_block
+class DIGITAL_API digital_constellation_decoder_cb : public gr_block
{
private:
digital_constellation_sptr d_constellation;
unsigned int d_dim;
- friend digital_constellation_decoder_cb_sptr
+ friend DIGITAL_API digital_constellation_decoder_cb_sptr
digital_make_constellation_decoder_cb (digital_constellation_sptr constellation);
digital_constellation_decoder_cb (digital_constellation_sptr constellation);
diff --git a/gr-digital/include/digital_constellation_receiver_cb.h b/gr-digital/include/digital_constellation_receiver_cb.h
index a67f67082..8547bdd68 100644
--- a/gr-digital/include/digital_constellation_receiver_cb.h
+++ b/gr-digital/include/digital_constellation_receiver_cb.h
@@ -23,8 +23,10 @@
#ifndef INCLUDED_DIGITAL_CONSTELLATION_RECEIVER_CB_H
#define INCLUDED_DIGITAL_CONSTELLATION_RECEIVER_CB_H
+#include <digital_api.h>
#include <gr_block.h>
#include <digital_constellation.h>
+#include <gruel/attributes.h>
#include <gri_control_loop.h>
#include <gr_complex.h>
#include <math.h>
@@ -34,7 +36,7 @@ class digital_constellation_receiver_cb;
typedef boost::shared_ptr<digital_constellation_receiver_cb> digital_constellation_receiver_cb_sptr;
// public constructor
-digital_constellation_receiver_cb_sptr
+DIGITAL_API digital_constellation_receiver_cb_sptr
digital_make_constellation_receiver_cb (digital_constellation_sptr constellation,
float loop_bw, float fmin, float fmax);
@@ -72,7 +74,7 @@ digital_make_constellation_receiver_cb (digital_constellation_sptr constellation
*
*/
-class digital_constellation_receiver_cb : public gr_block, public gri_control_loop
+class DIGITAL_API digital_constellation_receiver_cb : public gr_block, public gri_control_loop
{
public:
int general_work (int noutput_items,
@@ -108,12 +110,12 @@ private:
static const unsigned int DLLEN = 8;
//! delay line plus some length for overflow protection
- gr_complex d_dl[2*DLLEN] __attribute__ ((aligned(8)));
+ __GR_ATTR_ALIGNED(8) gr_complex d_dl[2*DLLEN];
//! index to delay line
unsigned int d_dl_idx;
- friend digital_constellation_receiver_cb_sptr
+ friend DIGITAL_API digital_constellation_receiver_cb_sptr
digital_make_constellation_receiver_cb (digital_constellation_sptr constell,
float loop_bw, float fmin, float fmax);
};
diff --git a/gr-digital/include/digital_correlate_access_code_bb.h b/gr-digital/include/digital_correlate_access_code_bb.h
index c21875f0e..8095dd409 100644
--- a/gr-digital/include/digital_correlate_access_code_bb.h
+++ b/gr-digital/include/digital_correlate_access_code_bb.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_DIGITAL_CORRELATE_ACCESS_CODE_BB_H
#define INCLUDED_DIGITAL_CORRELATE_ACCESS_CODE_BB_H
+#include <digital_api.h>
#include <gr_sync_block.h>
#include <string>
@@ -33,7 +34,7 @@ typedef boost::shared_ptr<digital_correlate_access_code_bb> digital_correlate_ac
* \param access_code is represented with 1 byte per bit, e.g., "010101010111000100"
* \param threshold maximum number of bits that may be wrong
*/
-digital_correlate_access_code_bb_sptr
+DIGITAL_API digital_correlate_access_code_bb_sptr
digital_make_correlate_access_code_bb (const std::string &access_code, int threshold);
/*!
@@ -50,9 +51,9 @@ digital_make_correlate_access_code_bb (const std::string &access_code, int thres
* flag bit and is 1 if the corresponding data bit is the first data
* bit following the access code. Otherwise the flag bit is 0.
*/
-class digital_correlate_access_code_bb : public gr_sync_block
+class DIGITAL_API digital_correlate_access_code_bb : public gr_sync_block
{
- friend digital_correlate_access_code_bb_sptr
+ friend DIGITAL_API digital_correlate_access_code_bb_sptr
digital_make_correlate_access_code_bb (const std::string &access_code, int threshold);
private:
unsigned long long d_access_code; // access code to locate start of packet
diff --git a/gr-digital/include/digital_costas_loop_cc.h b/gr-digital/include/digital_costas_loop_cc.h
index 3811825dd..c8c722c93 100644
--- a/gr-digital/include/digital_costas_loop_cc.h
+++ b/gr-digital/include/digital_costas_loop_cc.h
@@ -56,11 +56,14 @@
* \param min_freq the minimum frequency deviation (radians/sample) the loop can handle
* \param order the loop order, either 2 or 4
*/
+
+#include <digital_api.h>
+
class digital_costas_loop_cc;
typedef boost::shared_ptr<digital_costas_loop_cc> digital_costas_loop_cc_sptr;
-digital_costas_loop_cc_sptr
+DIGITAL_API digital_costas_loop_cc_sptr
digital_make_costas_loop_cc (float loop_bw, int order
) throw (std::invalid_argument);
@@ -75,9 +78,9 @@ digital_make_costas_loop_cc (float loop_bw, int order
*
* \p order must be 2 or 4.
*/
-class digital_costas_loop_cc : public gr_sync_block, public gri_control_loop
+class DIGITAL_API digital_costas_loop_cc : public gr_sync_block, public gri_control_loop
{
- friend digital_costas_loop_cc_sptr
+ friend DIGITAL_API digital_costas_loop_cc_sptr
digital_make_costas_loop_cc (float loop_bw, int order
) throw (std::invalid_argument);
diff --git a/gr-digital/include/digital_cpmmod_bc.h b/gr-digital/include/digital_cpmmod_bc.h
index 85b901ba2..332856afc 100644
--- a/gr-digital/include/digital_cpmmod_bc.h
+++ b/gr-digital/include/digital_cpmmod_bc.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_DIGITAL_CPMMOD_BC_H
#define INCLUDED_DIGITAL_CPMMOD_BC_H
+#include <digital_api.h>
#include <gr_hier_block2.h>
#include <gr_char_to_float.h>
#include <gr_interp_fir_filter_fff.h>
@@ -34,7 +35,7 @@ class digital_cpmmod_bc;
typedef boost::shared_ptr<digital_cpmmod_bc> digital_cpmmod_bc_sptr;
-digital_cpmmod_bc_sptr
+DIGITAL_API digital_cpmmod_bc_sptr
digital_make_cpmmod_bc(int type, float h,
unsigned samples_per_sym,
unsigned L, double beta=0.3);
@@ -71,9 +72,9 @@ digital_make_cpmmod_bc(int type, float h,
* The modulator will silently accept any other inputs, though.
* The output is the phase-modulated signal.
*/
-class digital_cpmmod_bc : public gr_hier_block2
+class DIGITAL_API digital_cpmmod_bc : public gr_hier_block2
{
- friend digital_cpmmod_bc_sptr digital_make_cpmmod_bc(int type, float h,
+ friend DIGITAL_API digital_cpmmod_bc_sptr digital_make_cpmmod_bc(int type, float h,
unsigned samples_per_sym,
unsigned L, double beta);
diff --git a/gr-digital/include/digital_crc32.h b/gr-digital/include/digital_crc32.h
index 869cf7f45..ec4a0df5b 100644
--- a/gr-digital/include/digital_crc32.h
+++ b/gr-digital/include/digital_crc32.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_DIGITAL_CRC32_H
#define INCLUDED_DIGITAL_CRC32_H
+#include <digital_api.h>
#include <string>
#include <gr_types.h>
@@ -35,16 +36,16 @@
* complement of the final running CRC. The resulting CRC should be
* transmitted in big endian order.
*/
-unsigned int
+DIGITAL_API unsigned int
digital_update_crc32(unsigned int crc, const unsigned char *buf, size_t len);
-unsigned int
+DIGITAL_API unsigned int
digital_update_crc32(unsigned int crc, const std::string buf);
-unsigned int
+DIGITAL_API unsigned int
digital_crc32(const unsigned char *buf, size_t len);
-unsigned int
+DIGITAL_API unsigned int
digital_crc32(const std::string buf);
#endif /* INCLUDED_CRC32_H */
diff --git a/gr-digital/include/digital_fll_band_edge_cc.h b/gr-digital/include/digital_fll_band_edge_cc.h
index 576dfab87..f07d7ba42 100644
--- a/gr-digital/include/digital_fll_band_edge_cc.h
+++ b/gr-digital/include/digital_fll_band_edge_cc.h
@@ -24,12 +24,13 @@
#ifndef INCLUDED_DIGITAL_FLL_BAND_EDGE_CC_H
#define INCLUDED_DIGITAL_FLL_BAND_EDGE_CC_H
+#include <digital_api.h>
#include <gr_sync_block.h>
#include <gri_control_loop.h>
class digital_fll_band_edge_cc;
typedef boost::shared_ptr<digital_fll_band_edge_cc> digital_fll_band_edge_cc_sptr;
-digital_fll_band_edge_cc_sptr digital_make_fll_band_edge_cc (float samps_per_sym,
+DIGITAL_API digital_fll_band_edge_cc_sptr digital_make_fll_band_edge_cc (float samps_per_sym,
float rolloff,
int filter_size,
float bandwidth);
@@ -85,7 +86,7 @@ digital_fll_band_edge_cc_sptr digital_make_fll_band_edge_cc (float samps_per_sym
*
*/
-class digital_fll_band_edge_cc : public gr_sync_block, public gri_control_loop
+class DIGITAL_API digital_fll_band_edge_cc : public gr_sync_block, public gri_control_loop
{
private:
/*!
@@ -95,7 +96,7 @@ class digital_fll_band_edge_cc : public gr_sync_block, public gri_control_loop
* \param filter_size (int) Size (in taps) of the filter
* \param bandwidth (float) Loop bandwidth
*/
- friend digital_fll_band_edge_cc_sptr digital_make_fll_band_edge_cc (float samps_per_sym,
+ friend DIGITAL_API digital_fll_band_edge_cc_sptr digital_make_fll_band_edge_cc (float samps_per_sym,
float rolloff,
int filter_size,
float bandwidth);
diff --git a/gr-digital/include/digital_gmskmod_bc.h b/gr-digital/include/digital_gmskmod_bc.h
index 4b0952401..9f378c8a7 100644
--- a/gr-digital/include/digital_gmskmod_bc.h
+++ b/gr-digital/include/digital_gmskmod_bc.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_DIGITAL_GMSKMOD_BC_H
#define INCLUDED_DIGITAL_GMSKMOD_BC_H
+#include <digital_api.h>
#include <digital_cpmmod_bc.h>
class digital_gmskmod_bc;
typedef boost::shared_ptr<digital_gmskmod_bc> digital_gmskmod_bc_sptr;
-digital_gmskmod_bc_sptr
+DIGITAL_API digital_gmskmod_bc_sptr
digital_make_gmskmod_bc(unsigned samples_per_sym=2,
double bt=0.3, unsigned L=4);
@@ -50,9 +51,9 @@ digital_make_gmskmod_bc(unsigned samples_per_sym=2,
* The modulator will silently accept any other inputs, though.
* The output is the phase-modulated signal.
*/
-class digital_gmskmod_bc : public digital_cpmmod_bc
+class DIGITAL_API digital_gmskmod_bc : public digital_cpmmod_bc
{
- friend digital_gmskmod_bc_sptr digital_make_gmskmod_bc(unsigned samples_per_sym,
+ friend DIGITAL_API digital_gmskmod_bc_sptr digital_make_gmskmod_bc(unsigned samples_per_sym,
double bt, unsigned L);
digital_gmskmod_bc(unsigned samples_per_sym,
double bt, unsigned L);
diff --git a/gr-digital/include/digital_kurtotic_equalizer_cc.h b/gr-digital/include/digital_kurtotic_equalizer_cc.h
index 018a906b0..3ac8712d5 100644
--- a/gr-digital/include/digital_kurtotic_equalizer_cc.h
+++ b/gr-digital/include/digital_kurtotic_equalizer_cc.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_DIGITAL_KURTOTIC_EQUALIZER_CC_H
#define INCLUDED_DIGITAL_KURTOTIC_EQUALIZER_CC_H
+#include <digital_api.h>
#include <gr_adaptive_fir_ccc.h>
#include <gr_math.h>
#include <iostream>
@@ -30,7 +31,7 @@
class digital_kurtotic_equalizer_cc;
typedef boost::shared_ptr<digital_kurtotic_equalizer_cc> digital_kurtotic_equalizer_cc_sptr;
-digital_kurtotic_equalizer_cc_sptr
+DIGITAL_API digital_kurtotic_equalizer_cc_sptr
digital_make_kurtotic_equalizer_cc(int num_taps, float mu);
/*!
@@ -42,7 +43,7 @@ digital_make_kurtotic_equalizer_cc(int num_taps, float mu);
* equalization algorithm," IEEE Conf. on Control, Automation,
* Robotics and Vision, Vol. 3, Dec. 2004, pp. 2052 - 2057.
*/
-class digital_kurtotic_equalizer_cc : public gr_adaptive_fir_ccc
+class DIGITAL_API digital_kurtotic_equalizer_cc : public gr_adaptive_fir_ccc
{
private:
float d_mu;
@@ -50,7 +51,7 @@ private:
gr_complex d_q, d_u;
float d_alpha_p, d_alpha_q, d_alpha_m;
- friend digital_kurtotic_equalizer_cc_sptr digital_make_kurtotic_equalizer_cc(int num_taps,
+ friend DIGITAL_API digital_kurtotic_equalizer_cc_sptr digital_make_kurtotic_equalizer_cc(int num_taps,
float mu);
digital_kurtotic_equalizer_cc(int num_taps, float mu);
diff --git a/gr-digital/include/digital_lms_dd_equalizer_cc.h b/gr-digital/include/digital_lms_dd_equalizer_cc.h
index 050d8781d..56871fa67 100644
--- a/gr-digital/include/digital_lms_dd_equalizer_cc.h
+++ b/gr-digital/include/digital_lms_dd_equalizer_cc.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_DIGITAL_LMS_DD_EQUALIZER_CC_H
#define INCLUDED_DIGITAL_LMS_DD_EQUALIZER_CC_H
+#include <digital_api.h>
#include <gr_adaptive_fir_ccc.h>
#include <digital_constellation.h>
class digital_lms_dd_equalizer_cc;
typedef boost::shared_ptr<digital_lms_dd_equalizer_cc> digital_lms_dd_equalizer_cc_sptr;
-digital_lms_dd_equalizer_cc_sptr digital_make_lms_dd_equalizer_cc (int num_taps,
+DIGITAL_API digital_lms_dd_equalizer_cc_sptr digital_make_lms_dd_equalizer_cc (int num_taps,
float mu, int sps,
digital_constellation_sptr cnst);
@@ -66,10 +67,10 @@ digital_lms_dd_equalizer_cc_sptr digital_make_lms_dd_equalizer_cc (int num_taps,
* Prentice Hall, 1996.
*
*/
-class digital_lms_dd_equalizer_cc : public gr_adaptive_fir_ccc
+class DIGITAL_API digital_lms_dd_equalizer_cc : public gr_adaptive_fir_ccc
{
private:
- friend digital_lms_dd_equalizer_cc_sptr digital_make_lms_dd_equalizer_cc (int num_taps,
+ friend DIGITAL_API digital_lms_dd_equalizer_cc_sptr digital_make_lms_dd_equalizer_cc (int num_taps,
float mu, int sps,
digital_constellation_sptr cnst);
diff --git a/gr-digital/include/digital_mpsk_receiver_cc.h b/gr-digital/include/digital_mpsk_receiver_cc.h
index 74aca5649..e70495bfa 100644
--- a/gr-digital/include/digital_mpsk_receiver_cc.h
+++ b/gr-digital/include/digital_mpsk_receiver_cc.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_DIGITAL_MPSK_RECEIVER_CC_H
#define INCLUDED_DIGITAL_MPSK_RECEIVER_CC_H
+#include <digital_api.h>
#include <gruel/attributes.h>
#include <gri_control_loop.h>
#include <gr_block.h>
@@ -35,7 +36,7 @@ class digital_mpsk_receiver_cc;
typedef boost::shared_ptr<digital_mpsk_receiver_cc> digital_mpsk_receiver_cc_sptr;
// public constructor
-digital_mpsk_receiver_cc_sptr
+DIGITAL_API digital_mpsk_receiver_cc_sptr
digital_make_mpsk_receiver_cc (unsigned int M, float theta,
float loop_bw,
float fmin, float fmax,
@@ -79,7 +80,7 @@ digital_make_mpsk_receiver_cc (unsigned int M, float theta,
*
*/
-class digital_mpsk_receiver_cc : public gr_block, public gri_control_loop
+class DIGITAL_API digital_mpsk_receiver_cc : public gr_block, public gri_control_loop
{
public:
~digital_mpsk_receiver_cc ();
@@ -291,7 +292,7 @@ private:
//! index to delay line
unsigned int d_dl_idx;
- friend digital_mpsk_receiver_cc_sptr
+ friend DIGITAL_API digital_mpsk_receiver_cc_sptr
digital_make_mpsk_receiver_cc (unsigned int M, float theta,
float loop_bw,
float fmin, float fmax,
diff --git a/gr-digital/include/digital_ofdm_cyclic_prefixer.h b/gr-digital/include/digital_ofdm_cyclic_prefixer.h
index a3c32125b..1b9682bb3 100644
--- a/gr-digital/include/digital_ofdm_cyclic_prefixer.h
+++ b/gr-digital/include/digital_ofdm_cyclic_prefixer.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_DIGITAL_OFDM_CYCLIC_PREFIXER_H
#define INCLUDED_DIGITAL_OFDM_CYCLIC_PREFIXER_H
+#include <digital_api.h>
#include <gr_sync_interpolator.h>
#include <stdio.h>
class digital_ofdm_cyclic_prefixer;
typedef boost::shared_ptr<digital_ofdm_cyclic_prefixer> digital_ofdm_cyclic_prefixer_sptr;
-digital_ofdm_cyclic_prefixer_sptr
+DIGITAL_API digital_ofdm_cyclic_prefixer_sptr
digital_make_ofdm_cyclic_prefixer (size_t input_size, size_t output_size);
@@ -38,9 +39,9 @@ digital_make_ofdm_cyclic_prefixer (size_t input_size, size_t output_size);
* symbol(vector) and converts vector to a stream output_size long.
* \ingroup ofdm_blk
*/
-class digital_ofdm_cyclic_prefixer : public gr_sync_interpolator
+class DIGITAL_API digital_ofdm_cyclic_prefixer : public gr_sync_interpolator
{
- friend digital_ofdm_cyclic_prefixer_sptr
+ friend DIGITAL_API digital_ofdm_cyclic_prefixer_sptr
digital_make_ofdm_cyclic_prefixer (size_t input_size, size_t output_size);
protected:
diff --git a/gr-digital/include/digital_ofdm_frame_acquisition.h b/gr-digital/include/digital_ofdm_frame_acquisition.h
index 971202099..9c2f60233 100644
--- a/gr-digital/include/digital_ofdm_frame_acquisition.h
+++ b/gr-digital/include/digital_ofdm_frame_acquisition.h
@@ -23,7 +23,7 @@
#ifndef INCLUDED_DIGITAL_OFDM_FRAME_ACQUISITION_H
#define INCLUDED_DIGITAL_OFDM_FRAME_ACQUISITION_H
-
+#include <digital_api.h>
#include <gr_block.h>
#include <vector>
@@ -31,7 +31,7 @@ class digital_ofdm_frame_acquisition;
typedef boost::shared_ptr<digital_ofdm_frame_acquisition> digital_ofdm_frame_acquisition_sptr;
digital_ofdm_frame_acquisition_sptr
-digital_make_ofdm_frame_acquisition (unsigned int occupied_carriers, unsigned int fft_length,
+DIGITAL_API digital_make_ofdm_frame_acquisition (unsigned int occupied_carriers, unsigned int fft_length,
unsigned int cplen,
const std::vector<gr_complex> &known_symbol,
unsigned int max_fft_shift_len=10);
@@ -54,7 +54,7 @@ digital_make_ofdm_frame_acquisition (unsigned int occupied_carriers, unsigned in
* distortion caused by the channel.
*/
-class digital_ofdm_frame_acquisition : public gr_block
+class DIGITAL_API digital_ofdm_frame_acquisition : public gr_block
{
/*!
* \brief Build an OFDM correlator and equalizer.
@@ -65,7 +65,7 @@ class digital_ofdm_frame_acquisition : public gr_block
* 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 digital_ofdm_frame_acquisition_sptr
+ friend DIGITAL_API digital_ofdm_frame_acquisition_sptr
digital_make_ofdm_frame_acquisition (unsigned int occupied_carriers, unsigned int fft_length,
unsigned int cplen,
const std::vector<gr_complex> &known_symbol,
diff --git a/gr-digital/include/digital_ofdm_frame_sink.h b/gr-digital/include/digital_ofdm_frame_sink.h
index 3575ee35b..5785d4be7 100644
--- a/gr-digital/include/digital_ofdm_frame_sink.h
+++ b/gr-digital/include/digital_ofdm_frame_sink.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_DIGITAL_OFDM_FRAME_SINK_H
#define INCLUDED_DIGITAL_OFDM_FRAME_SINK_H
+#include <digital_api.h>
#include <gr_sync_block.h>
#include <gr_msg_queue.h>
class digital_ofdm_frame_sink;
typedef boost::shared_ptr<digital_ofdm_frame_sink> digital_ofdm_frame_sink_sptr;
-digital_ofdm_frame_sink_sptr
+DIGITAL_API digital_ofdm_frame_sink_sptr
digital_make_ofdm_frame_sink (const std::vector<gr_complex> &sym_position,
const std::vector<unsigned char> &sym_value_out,
gr_msg_queue_sptr target_queue, unsigned int occupied_tones,
@@ -45,9 +46,9 @@ digital_make_ofdm_frame_sink (const std::vector<gr_complex> &sym_position,
* 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 digital_ofdm_frame_sink : public gr_sync_block
+class DIGITAL_API digital_ofdm_frame_sink : public gr_sync_block
{
- friend digital_ofdm_frame_sink_sptr
+ friend DIGITAL_API digital_ofdm_frame_sink_sptr
digital_make_ofdm_frame_sink (const std::vector<gr_complex> &sym_position,
const std::vector<unsigned char> &sym_value_out,
gr_msg_queue_sptr target_queue, unsigned int occupied_tones,
diff --git a/gr-digital/include/digital_ofdm_insert_preamble.h b/gr-digital/include/digital_ofdm_insert_preamble.h
index a7d87d42f..6f9dae5d6 100644
--- a/gr-digital/include/digital_ofdm_insert_preamble.h
+++ b/gr-digital/include/digital_ofdm_insert_preamble.h
@@ -22,13 +22,14 @@
#ifndef INCLUDED_DIGITAL_OFDM_INSERT_PREAMBLE_H
#define INCLUDED_DIGITAL_OFDM_INSERT_PREAMBLE_H
+#include <digital_api.h>
#include <gr_block.h>
#include <vector>
class digital_ofdm_insert_preamble;
typedef boost::shared_ptr<digital_ofdm_insert_preamble> digital_ofdm_insert_preamble_sptr;
-digital_ofdm_insert_preamble_sptr
+DIGITAL_API digital_ofdm_insert_preamble_sptr
digital_make_ofdm_insert_preamble(int fft_length,
const std::vector<std::vector<gr_complex> > &preamble);
@@ -62,9 +63,9 @@ digital_make_ofdm_insert_preamble(int fft_length,
* \param preamble vector of symbols that represent the pre-modulated preamble.
*/
-class digital_ofdm_insert_preamble : public gr_block
+class DIGITAL_API digital_ofdm_insert_preamble : public gr_block
{
- friend digital_ofdm_insert_preamble_sptr
+ friend DIGITAL_API digital_ofdm_insert_preamble_sptr
digital_make_ofdm_insert_preamble(int fft_length,
const std::vector<std::vector<gr_complex> > &preamble);
diff --git a/gr-digital/include/digital_ofdm_mapper_bcv.h b/gr-digital/include/digital_ofdm_mapper_bcv.h
index e9b47eb9d..daed1eab2 100644
--- a/gr-digital/include/digital_ofdm_mapper_bcv.h
+++ b/gr-digital/include/digital_ofdm_mapper_bcv.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_DIGITAL_OFDM_MAPPER_BCV_H
#define INCLUDED_DIGITAL_OFDM_MAPPER_BCV_H
+#include <digital_api.h>
#include <gr_sync_block.h>
#include <gr_message.h>
#include <gr_msg_queue.h>
@@ -30,7 +31,7 @@
class digital_ofdm_mapper_bcv;
typedef boost::shared_ptr<digital_ofdm_mapper_bcv> digital_ofdm_mapper_bcv_sptr;
-digital_ofdm_mapper_bcv_sptr
+DIGITAL_API digital_ofdm_mapper_bcv_sptr
digital_make_ofdm_mapper_bcv (const std::vector<gr_complex> &constellation, unsigned msgq_limit,
unsigned occupied_carriers, unsigned int fft_length);
@@ -42,9 +43,9 @@ digital_make_ofdm_mapper_bcv (const std::vector<gr_complex> &constellation, unsi
* \ingroup ofdm_blk
*/
-class digital_ofdm_mapper_bcv : public gr_sync_block
+class DIGITAL_API digital_ofdm_mapper_bcv : public gr_sync_block
{
- friend digital_ofdm_mapper_bcv_sptr
+ friend DIGITAL_API digital_ofdm_mapper_bcv_sptr
digital_make_ofdm_mapper_bcv (const std::vector<gr_complex> &constellation, unsigned msgq_limit,
unsigned occupied_carriers, unsigned int fft_length);
protected:
diff --git a/gr-digital/include/digital_ofdm_sampler.h b/gr-digital/include/digital_ofdm_sampler.h
index 01aa40d46..9c54e4e77 100644
--- a/gr-digital/include/digital_ofdm_sampler.h
+++ b/gr-digital/include/digital_ofdm_sampler.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_DIGITAL_OFDM_SAMPLER_H
#define INCLUDED_DIGITAL_OFDM_SAMPLER_H
+#include <digital_api.h>
#include <gr_sync_block.h>
class digital_ofdm_sampler;
typedef boost::shared_ptr<digital_ofdm_sampler> digital_ofdm_sampler_sptr;
-digital_ofdm_sampler_sptr digital_make_ofdm_sampler (unsigned int fft_length,
+DIGITAL_API digital_ofdm_sampler_sptr digital_make_ofdm_sampler (unsigned int fft_length,
unsigned int symbol_length,
unsigned int timeout=1000);
@@ -36,9 +37,9 @@ digital_ofdm_sampler_sptr digital_make_ofdm_sampler (unsigned int fft_length,
* \brief does the rest of the OFDM stuff
* \ingroup ofdm_blk
*/
-class digital_ofdm_sampler : public gr_block
+class DIGITAL_API digital_ofdm_sampler : public gr_block
{
- friend digital_ofdm_sampler_sptr digital_make_ofdm_sampler (unsigned int fft_length,
+ friend DIGITAL_API digital_ofdm_sampler_sptr digital_make_ofdm_sampler (unsigned int fft_length,
unsigned int symbol_length,
unsigned int timeout);
diff --git a/gr-digital/lib/CMakeLists.txt b/gr-digital/lib/CMakeLists.txt
new file mode 100644
index 000000000..9417dc355
--- /dev/null
+++ b/gr-digital/lib/CMakeLists.txt
@@ -0,0 +1,73 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup the include and linker paths
+########################################################################
+include_directories(
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GR_DIGITAL_INCLUDE_DIRS}
+)
+
+include_directories(${Boost_INCLUDE_DIRS})
+link_directories(${Boost_LIBRARY_DIRS})
+
+########################################################################
+# Setup library
+########################################################################
+list(APPEND gr_digital_sources
+ digital_binary_slicer_fb.cc
+ digital_clock_recovery_mm_cc.cc
+ digital_clock_recovery_mm_ff.cc
+ digital_constellation.cc
+ digital_constellation_receiver_cb.cc
+ digital_constellation_decoder_cb.cc
+ digital_correlate_access_code_bb.cc
+ digital_costas_loop_cc.cc
+ digital_cma_equalizer_cc.cc
+ digital_crc32.cc
+ digital_fll_band_edge_cc.cc
+ digital_lms_dd_equalizer_cc.cc
+ digital_kurtotic_equalizer_cc.cc
+ digital_mpsk_receiver_cc.cc
+ digital_ofdm_cyclic_prefixer.cc
+ digital_ofdm_frame_acquisition.cc
+ digital_ofdm_frame_sink.cc
+ digital_ofdm_insert_preamble.cc
+ digital_ofdm_mapper_bcv.cc
+ digital_ofdm_sampler.cc
+ digital_gmskmod_bc.cc
+ digital_cpmmod_bc.cc
+)
+
+list(APPEND digital_libs
+ gnuradio-core
+ ${Boost_LIBRARIES}
+)
+
+add_library(gnuradio-digital SHARED ${gr_digital_sources})
+target_link_libraries(gnuradio-digital ${digital_libs})
+set_target_properties(gnuradio-digital PROPERTIES DEFINE_SYMBOL "gnuradio_digital_EXPORTS")
+set_target_properties(gnuradio-digital PROPERTIES SOVERSION ${LIBVER})
+
+install(TARGETS gnuradio-digital
+ LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT "digital_runtime" # .so/.dylib file
+ ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT "digital_devel" # .lib file
+ RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT "digital_runtime" # .dll file
+)
diff --git a/gr-digital/python/CMakeLists.txt b/gr-digital/python/CMakeLists.txt
new file mode 100644
index 000000000..905626b8b
--- /dev/null
+++ b/gr-digital/python/CMakeLists.txt
@@ -0,0 +1,77 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup python install
+########################################################################
+include(GrPython)
+
+GR_PYTHON_INSTALL(
+ FILES
+ __init__.py
+ bpsk.py
+ cpm.py
+ crc.py
+ generic_mod_demod.py
+ gmsk.py
+ modulation_utils.py
+ ofdm.py
+ ofdm_packet_utils.py
+ ofdm_receiver.py
+ ofdm_sync_fixed.py
+ ofdm_sync_ml.py
+ ofdm_sync_pnac.py
+ ofdm_sync_pn.py
+ packet_utils.py
+ pkt.py
+ psk.py
+ qam.py
+ qpsk.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/digital
+ COMPONENT "digital_python"
+)
+
+GR_PYTHON_INSTALL(
+ FILES
+ utils/__init__.py
+ utils/gray_code.py
+ utils/mod_codes.py
+ utils/alignment.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/digital/utils
+ COMPONENT "digital_python"
+)
+
+########################################################################
+# Handle the unit tests
+########################################################################
+if(ENABLE_TESTING)
+include(GrTest)
+file(GLOB py_qa_test_files "qa_*.py")
+foreach(py_qa_test_file ${py_qa_test_files})
+ get_filename_component(py_qa_test_name ${py_qa_test_file} NAME_WE)
+ set(GR_TEST_PYTHON_DIRS
+ ${CMAKE_BINARY_DIR}/gnuradio-core/src/python
+ ${CMAKE_BINARY_DIR}/gnuradio-core/src/lib/swig
+ ${CMAKE_BINARY_DIR}/gr-digital/python
+ ${CMAKE_BINARY_DIR}/gr-digital/swig
+ )
+ set(GR_TEST_TARGET_DEPS gruel gnuradio-core gnuradio-digital)
+ GR_ADD_TEST(${py_qa_test_name} ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B} ${py_qa_test_file})
+endforeach(py_qa_test_file)
+endif(ENABLE_TESTING)
diff --git a/gr-digital/swig/CMakeLists.txt b/gr-digital/swig/CMakeLists.txt
new file mode 100644
index 000000000..4f4e51e33
--- /dev/null
+++ b/gr-digital/swig/CMakeLists.txt
@@ -0,0 +1,67 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup swig generation
+########################################################################
+include(GrPython)
+include(GrSwig)
+
+set(GR_SWIG_INCLUDE_DIRS
+ ${GR_DIGITAL_INCLUDE_DIRS}
+ ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+)
+
+set(GR_SWIG_LIBRARIES gnuradio-digital)
+
+GR_SWIG_MAKE(digital_swig digital_swig.i)
+
+GR_SWIG_INSTALL(
+ TARGETS digital_swig
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/digital
+ COMPONENT "digital_python"
+)
+
+install(
+ FILES
+ digital_binary_slicer_fb.i
+ digital_clock_recovery_mm_cc.i
+ digital_clock_recovery_mm_ff.i
+ digital_constellation.i
+ digital_constellation_receiver_cb.i
+ digital_constellation_decoder_cb.i
+ digital_correlate_access_code_bb.i
+ digital_costas_loop_cc.i
+ digital_cma_equalizer_cc.i
+ digital_crc32.i
+ digital_fll_band_edge_cc.i
+ digital_lms_dd_equalizer_cc.i
+ digital_kurtotic_equalizer_cc.i
+ digital_mpsk_receiver_cc.i
+ digital_ofdm_cyclic_prefixer.i
+ digital_ofdm_frame_acquisition.i
+ digital_ofdm_frame_sink.i
+ digital_ofdm_insert_preamble.i
+ digital_ofdm_mapper_bcv.i
+ digital_ofdm_sampler.i
+ digital_gmskmod_bc.i
+ digital_cpmmod_bc.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "digital_swig"
+)
diff --git a/gr-howto-write-a-block-cmake/CMakeLists.txt b/gr-howto-write-a-block-cmake/CMakeLists.txt
new file mode 100644
index 000000000..06f3bb72c
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/CMakeLists.txt
@@ -0,0 +1,104 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+
+########################################################################
+# Project setup
+########################################################################
+cmake_minimum_required(VERSION 2.6)
+project(gr-howto-write-a-block CXX)
+enable_testing()
+
+#select the release build type by default to get optimization flags
+if(NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE "Release")
+ message(STATUS "Build type not specified: defaulting to release.")
+endif(NOT CMAKE_BUILD_TYPE)
+set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
+
+list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
+
+########################################################################
+# Compiler specific setup
+########################################################################
+if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
+ #http://gcc.gnu.org/wiki/Visibility
+ add_definitions(-fvisibility=hidden)
+endif()
+
+########################################################################
+# Find boost
+########################################################################
+if(UNIX AND EXISTS "/usr/lib64")
+ list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
+endif(UNIX AND EXISTS "/usr/lib64")
+set(Boost_ADDITIONAL_VERSIONS
+ "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
+ "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
+ "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
+ "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
+ "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
+ "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
+ "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
+)
+find_package(Boost "1.35")
+
+if(NOT Boost_FOUND)
+ message(FATAL_ERROR "Boost required to compile howto")
+endif()
+
+########################################################################
+# Find gnuradio build dependencies
+########################################################################
+find_package(Gruel)
+find_package(GnuradioCore)
+
+if(NOT GRUEL_FOUND)
+ message(FATAL_ERROR "Gruel required to compile howto")
+endif()
+
+if(NOT GNURADIO_CORE_FOUND)
+ message(FATAL_ERROR "GnuRadio Core required to compile howto")
+endif()
+
+########################################################################
+# Setup the include and linker paths
+########################################################################
+include_directories(
+ ${CMAKE_SOURCE_DIR}/include
+ ${Boost_INCLUDE_DIRS}
+ ${GRUEL_INCLUDE_DIRS}
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+)
+
+link_directories(
+ ${Boost_LIBRARY_DIRS}
+ ${GRUEL_LIBRARY_DIRS}
+ ${GNURADIO_CORE_LIBRARY_DIRS}
+)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(include)
+add_subdirectory(lib)
+add_subdirectory(swig)
+add_subdirectory(python)
+add_subdirectory(grc)
+add_subdirectory(apps)
diff --git a/gr-howto-write-a-block-cmake/apps/CMakeLists.txt b/gr-howto-write-a-block-cmake/apps/CMakeLists.txt
new file mode 100644
index 000000000..a736fb2d0
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/apps/CMakeLists.txt
@@ -0,0 +1,26 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrPython)
+
+GR_PYTHON_INSTALL(
+ PROGRAMS
+ howto_square.py
+ DESTINATION bin
+)
diff --git a/gr-howto-write-a-block-cmake/apps/howto_square.grc b/gr-howto-write-a-block-cmake/apps/howto_square.grc
new file mode 100644
index 000000000..a8563698b
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/apps/howto_square.grc
@@ -0,0 +1,325 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+ <timestamp>Thu Nov 12 11:26:07 2009</timestamp>
+ <block>
+ <key>options</key>
+ <param>
+ <key>id</key>
+ <value>howto_square</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value></value>
+ </param>
+ <param>
+ <key>author</key>
+ <value></value>
+ </param>
+ <param>
+ <key>description</key>
+ <value></value>
+ </param>
+ <param>
+ <key>window_size</key>
+ <value>1280, 1024</value>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>wx_gui</value>
+ </param>
+ <param>
+ <key>category</key>
+ <value>Custom</value>
+ </param>
+ <param>
+ <key>run_options</key>
+ <value>prompt</value>
+ </param>
+ <param>
+ <key>run</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>realtime_scheduling</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(10, 10)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>10e3</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(10, 170)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_scopesink2</key>
+ <param>
+ <key>id</key>
+ <value>sink</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Input</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>v_scale</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>v_offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>t_scale</key>
+ <value>0.002</value>
+ </param>
+ <param>
+ <key>ac_couple</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>xy_mode</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value></value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(691, 222)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>howto_square_ff</key>
+ <param>
+ <key>id</key>
+ <value>sqr</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(709, 344)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_throttle</key>
+ <param>
+ <key>id</key>
+ <value>thr</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(497, 340)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_vector_source_x</key>
+ <param>
+ <key>id</key>
+ <value>src</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>vector</key>
+ <value>[float(n)-50 for n in range(100)]</value>
+ </param>
+ <param>
+ <key>repeat</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(246, 332)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_scopesink2</key>
+ <param>
+ <key>id</key>
+ <value>sink2</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Output</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>v_scale</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>v_offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>t_scale</key>
+ <value>0.002</value>
+ </param>
+ <param>
+ <key>ac_couple</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>xy_mode</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value></value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(869, 324)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <connection>
+ <source_block_id>thr</source_block_id>
+ <sink_block_id>sqr</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>src</source_block_id>
+ <sink_block_id>thr</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>thr</source_block_id>
+ <sink_block_id>sink</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>sqr</source_block_id>
+ <sink_block_id>sink2</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+</flow_graph>
diff --git a/gr-howto-write-a-block-cmake/apps/howto_square.py b/gr-howto-write-a-block-cmake/apps/howto_square.py
new file mode 100755
index 000000000..f14e28325
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/apps/howto_square.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python
+##################################################
+# Gnuradio Python Flow Graph
+# Title: Howto Square
+# Generated: Thu Nov 12 11:26:07 2009
+##################################################
+
+import howto
+from gnuradio import eng_notation
+from gnuradio import gr
+from gnuradio.eng_option import eng_option
+from gnuradio.gr import firdes
+from gnuradio.wxgui import scopesink2
+from grc_gnuradio import wxgui as grc_wxgui
+from optparse import OptionParser
+import wx
+
+class howto_square(grc_wxgui.top_block_gui):
+
+ def __init__(self):
+ grc_wxgui.top_block_gui.__init__(self, title="Howto Square")
+
+ ##################################################
+ # Variables
+ ##################################################
+ self.samp_rate = samp_rate = 10e3
+
+ ##################################################
+ # Blocks
+ ##################################################
+ self.sink = scopesink2.scope_sink_f(
+ self.GetWin(),
+ title="Input",
+ sample_rate=samp_rate,
+ v_scale=20,
+ v_offset=0,
+ t_scale=0.002,
+ ac_couple=False,
+ xy_mode=False,
+ num_inputs=1,
+ )
+ self.Add(self.sink.win)
+ self.sink2 = scopesink2.scope_sink_f(
+ self.GetWin(),
+ title="Output",
+ sample_rate=samp_rate,
+ v_scale=0,
+ v_offset=0,
+ t_scale=0.002,
+ ac_couple=False,
+ xy_mode=False,
+ num_inputs=1,
+ )
+ self.Add(self.sink2.win)
+ self.sqr = howto.square_ff()
+ self.src = gr.vector_source_f(([float(n)-50 for n in range(100)]), True, 1)
+ self.thr = gr.throttle(gr.sizeof_float*1, samp_rate)
+
+ ##################################################
+ # Connections
+ ##################################################
+ self.connect((self.thr, 0), (self.sqr, 0))
+ self.connect((self.src, 0), (self.thr, 0))
+ self.connect((self.thr, 0), (self.sink, 0))
+ self.connect((self.sqr, 0), (self.sink2, 0))
+
+ def set_samp_rate(self, samp_rate):
+ self.samp_rate = samp_rate
+ self.sink.set_sample_rate(self.samp_rate)
+ self.sink2.set_sample_rate(self.samp_rate)
+
+if __name__ == '__main__':
+ parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
+ (options, args) = parser.parse_args()
+ tb = howto_square()
+ tb.Run(True)
+
diff --git a/gr-howto-write-a-block-cmake/cmake/Modules/CMakeParseArgumentsCopy.cmake b/gr-howto-write-a-block-cmake/cmake/Modules/CMakeParseArgumentsCopy.cmake
new file mode 100644
index 000000000..7ce4c49ae
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/cmake/Modules/CMakeParseArgumentsCopy.cmake
@@ -0,0 +1,138 @@
+# CMAKE_PARSE_ARGUMENTS(<prefix> <options> <one_value_keywords> <multi_value_keywords> args...)
+#
+# CMAKE_PARSE_ARGUMENTS() is intended to be used in macros or functions for
+# parsing the arguments given to that macro or function.
+# It processes the arguments and defines a set of variables which hold the
+# values of the respective options.
+#
+# The <options> argument contains all options for the respective macro,
+# i.e. keywords which can be used when calling the macro without any value
+# following, like e.g. the OPTIONAL keyword of the install() command.
+#
+# The <one_value_keywords> argument contains all keywords for this macro
+# which are followed by one value, like e.g. DESTINATION keyword of the
+# install() command.
+#
+# The <multi_value_keywords> argument contains all keywords for this macro
+# which can be followed by more than one value, like e.g. the TARGETS or
+# FILES keywords of the install() command.
+#
+# When done, CMAKE_PARSE_ARGUMENTS() will have defined for each of the
+# keywords listed in <options>, <one_value_keywords> and
+# <multi_value_keywords> a variable composed of the given <prefix>
+# followed by "_" and the name of the respective keyword.
+# These variables will then hold the respective value from the argument list.
+# For the <options> keywords this will be TRUE or FALSE.
+#
+# All remaining arguments are collected in a variable
+# <prefix>_UNPARSED_ARGUMENTS, this can be checked afterwards to see whether
+# your macro was called with unrecognized parameters.
+#
+# As an example here a my_install() macro, which takes similar arguments as the
+# real install() command:
+#
+# function(MY_INSTALL)
+# set(options OPTIONAL FAST)
+# set(oneValueArgs DESTINATION RENAME)
+# set(multiValueArgs TARGETS CONFIGURATIONS)
+# cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
+# ...
+#
+# Assume my_install() has been called like this:
+# my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub)
+#
+# After the cmake_parse_arguments() call the macro will have set the following
+# variables:
+# MY_INSTALL_OPTIONAL = TRUE
+# MY_INSTALL_FAST = FALSE (this option was not used when calling my_install()
+# MY_INSTALL_DESTINATION = "bin"
+# MY_INSTALL_RENAME = "" (was not used)
+# MY_INSTALL_TARGETS = "foo;bar"
+# MY_INSTALL_CONFIGURATIONS = "" (was not used)
+# MY_INSTALL_UNPARSED_ARGUMENTS = "blub" (no value expected after "OPTIONAL"
+#
+# You can the continue and process these variables.
+#
+# Keywords terminate lists of values, e.g. if directly after a one_value_keyword
+# another recognized keyword follows, this is interpreted as the beginning of
+# the new option.
+# E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
+# MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
+# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
+
+#=============================================================================
+# Copyright 2010 Alexander Neundorf <neundorf@kde.org>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+
+if(__CMAKE_PARSE_ARGUMENTS_INCLUDED)
+ return()
+endif()
+set(__CMAKE_PARSE_ARGUMENTS_INCLUDED TRUE)
+
+
+function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgNames)
+ # first set all result variables to empty/FALSE
+ foreach(arg_name ${_singleArgNames} ${_multiArgNames})
+ set(${prefix}_${arg_name})
+ endforeach(arg_name)
+
+ foreach(option ${_optionNames})
+ set(${prefix}_${option} FALSE)
+ endforeach(option)
+
+ set(${prefix}_UNPARSED_ARGUMENTS)
+
+ set(insideValues FALSE)
+ set(currentArgName)
+
+ # now iterate over all arguments and fill the result variables
+ foreach(currentArg ${ARGN})
+ list(FIND _optionNames "${currentArg}" optionIndex) # ... then this marks the end of the arguments belonging to this keyword
+ list(FIND _singleArgNames "${currentArg}" singleArgIndex) # ... then this marks the end of the arguments belonging to this keyword
+ list(FIND _multiArgNames "${currentArg}" multiArgIndex) # ... then this marks the end of the arguments belonging to this keyword
+
+ if(${optionIndex} EQUAL -1 AND ${singleArgIndex} EQUAL -1 AND ${multiArgIndex} EQUAL -1)
+ if(insideValues)
+ if("${insideValues}" STREQUAL "SINGLE")
+ set(${prefix}_${currentArgName} ${currentArg})
+ set(insideValues FALSE)
+ elseif("${insideValues}" STREQUAL "MULTI")
+ list(APPEND ${prefix}_${currentArgName} ${currentArg})
+ endif()
+ else(insideValues)
+ list(APPEND ${prefix}_UNPARSED_ARGUMENTS ${currentArg})
+ endif(insideValues)
+ else()
+ if(NOT ${optionIndex} EQUAL -1)
+ set(${prefix}_${currentArg} TRUE)
+ set(insideValues FALSE)
+ elseif(NOT ${singleArgIndex} EQUAL -1)
+ set(currentArgName ${currentArg})
+ set(${prefix}_${currentArgName})
+ set(insideValues "SINGLE")
+ elseif(NOT ${multiArgIndex} EQUAL -1)
+ set(currentArgName ${currentArg})
+ set(${prefix}_${currentArgName})
+ set(insideValues "MULTI")
+ endif()
+ endif()
+
+ endforeach(currentArg)
+
+ # propagate the result variables to the caller:
+ foreach(arg_name ${_singleArgNames} ${_multiArgNames} ${_optionNames})
+ set(${prefix}_${arg_name} ${${prefix}_${arg_name}} PARENT_SCOPE)
+ endforeach(arg_name)
+ set(${prefix}_UNPARSED_ARGUMENTS ${${prefix}_UNPARSED_ARGUMENTS} PARENT_SCOPE)
+
+endfunction(CMAKE_PARSE_ARGUMENTS _options _singleArgs _multiArgs)
diff --git a/gr-howto-write-a-block-cmake/cmake/Modules/FindGnuradioCore.cmake b/gr-howto-write-a-block-cmake/cmake/Modules/FindGnuradioCore.cmake
new file mode 100644
index 000000000..ffa6582a2
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/cmake/Modules/FindGnuradioCore.cmake
@@ -0,0 +1,26 @@
+INCLUDE(FindPkgConfig)
+PKG_CHECK_MODULES(PC_GNURADIO_CORE gnuradio-core QUIET)
+
+FIND_PATH(
+ GNURADIO_CORE_INCLUDE_DIRS
+ NAMES gr_random.h
+ HINTS $ENV{GNURADIO_CORE_DIR}/include/gnuradio
+ ${PC_GNURADIO_CORE_INCLUDE_DIRS}
+ PATHS /usr/local/include/gnuradio
+ /usr/include/gnuradio
+)
+
+FIND_LIBRARY(
+ GNURADIO_CORE_LIBRARIES
+ NAMES gnuradio-core
+ HINTS $ENV{GNURADIO_CORE_DIR}/lib
+ ${PC_GNURADIO_CORE_LIBRARIES}
+ PATHS /usr/local/lib
+ /usr/local/lib64
+ /usr/lib
+ /usr/lib64
+)
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_CORE DEFAULT_MSG GNURADIO_CORE_LIBRARIES GNURADIO_CORE_INCLUDE_DIRS)
+MARK_AS_ADVANCED(GNURADIO_CORE_LIBRARIES GNURADIO_CORE_INCLUDE_DIRS)
diff --git a/gr-howto-write-a-block-cmake/cmake/Modules/FindGruel.cmake b/gr-howto-write-a-block-cmake/cmake/Modules/FindGruel.cmake
new file mode 100644
index 000000000..3c21af91d
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/cmake/Modules/FindGruel.cmake
@@ -0,0 +1,26 @@
+INCLUDE(FindPkgConfig)
+PKG_CHECK_MODULES(PC_GRUEL gnuradio-core QUIET)
+
+FIND_PATH(
+ GRUEL_INCLUDE_DIRS
+ NAMES gruel/attributes.h
+ HINTS $ENV{GRUEL_DIR}/include
+ ${PC_GRUEL_INCLUDE_DIRS}
+ PATHS /usr/local/include
+ /usr/include
+)
+
+FIND_LIBRARY(
+ GRUEL_LIBRARIES
+ NAMES gruel
+ HINTS $ENV{GRUEL_DIR}/lib
+ ${PC_GRUEL_LIBRARIES}
+ PATHS /usr/local/lib
+ /usr/local/lib64
+ /usr/lib
+ /usr/lib64
+)
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GRUEL DEFAULT_MSG GRUEL_LIBRARIES GRUEL_INCLUDE_DIRS)
+MARK_AS_ADVANCED(GRUEL_LIBRARIES GRUEL_INCLUDE_DIRS)
diff --git a/gr-howto-write-a-block-cmake/cmake/Modules/GrPlatform.cmake b/gr-howto-write-a-block-cmake/cmake/Modules/GrPlatform.cmake
new file mode 100644
index 000000000..ce2e15fef
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/cmake/Modules/GrPlatform.cmake
@@ -0,0 +1,46 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
+ return()
+endif()
+set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
+
+########################################################################
+# Setup additional defines for OS types
+########################################################################
+if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ set(LINUX TRUE)
+endif()
+
+if(LINUX AND EXISTS "/etc/debian_version")
+ set(DEBIAN TRUE)
+endif()
+
+if(LINUX AND EXISTS "/etc/redhat-release")
+ set(REDHAT TRUE)
+endif()
+
+########################################################################
+# when the library suffix should be 64 (applies to redhat linux family)
+########################################################################
+if(NOT DEFINED LIB_SUFFIX AND REDHAT AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
+ set(LIB_SUFFIX 64)
+endif()
+set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
diff --git a/gr-howto-write-a-block-cmake/cmake/Modules/GrPython.cmake b/gr-howto-write-a-block-cmake/cmake/Modules/GrPython.cmake
new file mode 100644
index 000000000..da0590d42
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/cmake/Modules/GrPython.cmake
@@ -0,0 +1,177 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
+ return()
+endif()
+set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
+
+########################################################################
+# Setup the python interpreter:
+# This allows the user to specify a specific interpreter,
+# or finds the interpreter via the built-in cmake module.
+########################################################################
+#this allows the user to override PYTHON_EXECUTABLE
+if(PYTHON_EXECUTABLE)
+
+ set(PYTHONINTERP_FOUND TRUE)
+
+#otherwise if not set, try to automatically find it
+else(PYTHON_EXECUTABLE)
+
+ #use the built-in find script
+ find_package(PythonInterp)
+
+ #and if that fails use the find program routine
+ if(NOT PYTHONINTERP_FOUND)
+ find_program(PYTHON_EXECUTABLE NAMES python python2.7 python2.6 python2.5)
+ if(PYTHON_EXECUTABLE)
+ set(PYTHONINTERP_FOUND TRUE)
+ endif(PYTHON_EXECUTABLE)
+ endif(NOT PYTHONINTERP_FOUND)
+
+endif(PYTHON_EXECUTABLE)
+
+#make the path to the executable appear in the cmake gui
+set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
+
+########################################################################
+# Check for the existence of a python module:
+# - desc a string description of the check
+# - mod the name of the module to import
+# - cmd an additional command to run
+# - have the result variable to set
+########################################################################
+macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
+ message(STATUS "")
+ message(STATUS "Python checking for ${desc}")
+ execute_process(
+ COMMAND ${PYTHON_EXECUTABLE} -c "
+#########################################
+try: import ${mod}
+except: exit(-1)
+try: assert ${cmd}
+except: exit(-1)
+#########################################"
+ RESULT_VARIABLE ${have}
+ )
+ if(${have} EQUAL 0)
+ message(STATUS "Python checking for ${desc} - found")
+ set(${have} TRUE)
+ else(${have} EQUAL 0)
+ message(STATUS "Python checking for ${desc} - not found")
+ set(${have} FALSE)
+ endif(${have} EQUAL 0)
+endmacro(GR_PYTHON_CHECK_MODULE)
+
+########################################################################
+# Sets the python installation directory GR_PYTHON_DIR
+########################################################################
+execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
+from distutils import sysconfig
+print sysconfig.get_python_lib(plat_specific=True, prefix='')
+" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
+
+########################################################################
+# Create an always-built target with a unique name
+# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
+########################################################################
+function(GR_UNIQUE_TARGET desc)
+ file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
+ execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
+unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
+print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
+ OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
+ add_custom_target(${_target} ALL DEPENDS ${ARGN})
+endfunction(GR_UNIQUE_TARGET)
+
+########################################################################
+# Install python sources (also builds and installs byte-compiled python)
+########################################################################
+function(GR_PYTHON_INSTALL)
+ include(CMakeParseArgumentsCopy)
+ CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
+
+ ####################################################################
+ if(GR_PYTHON_INSTALL_FILES)
+ ####################################################################
+ install(${ARGN}) #installs regular python files
+
+ foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
+ get_filename_component(pyfile_name ${pyfile} NAME)
+ get_filename_component(pyfile ${pyfile} ABSOLUTE)
+ string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pycfile "${pyfile}c")
+ list(APPEND python_install_gen_targets ${pycfile})
+
+ get_filename_component(pycfile_path ${pycfile} PATH)
+ file(MAKE_DIRECTORY ${pycfile_path})
+
+ #create a command to generate the byte-compiled pyc file
+ add_custom_command(
+ OUTPUT ${pycfile} DEPENDS ${pyfile}
+ COMMAND ${PYTHON_EXECUTABLE} -c
+ \"import py_compile\; py_compile.compile(file='${pyfile}', cfile='${pycfile}', doraise=True)\"
+ COMMENT "Byte-compiling ${pyfile_name}"
+ )
+ install(FILES ${pycfile}
+ DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
+ COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
+ )
+ endforeach(pyfile)
+
+ ####################################################################
+ elseif(GR_PYTHON_INSTALL_PROGRAMS)
+ ####################################################################
+ file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
+
+ foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
+ get_filename_component(pyfile_name ${pyfile} NAME)
+ get_filename_component(pyfile ${pyfile} ABSOLUTE)
+ string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
+ list(APPEND python_install_gen_targets ${pyexefile})
+
+ get_filename_component(pyexefile_path ${pyexefile} PATH)
+ file(MAKE_DIRECTORY ${pyexefile_path})
+
+ add_custom_command(
+ OUTPUT ${pyexefile} DEPENDS ${pyfile}
+ COMMAND ${PYTHON_EXECUTABLE} -c
+ \"open('${pyexefile}', 'w').write('\#!${pyexe_native}\\n'+open('${pyfile}').read())\"
+ COMMENT "Shebangin ${pyfile_name}"
+ )
+
+ #on windows, python files need an extension to execute
+ get_filename_component(pyfile_ext ${pyfile} EXT)
+ if(WIN32 AND NOT pyfile_ext)
+ set(pyfile_name "${pyfile_name}.py")
+ endif()
+
+ install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
+ DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
+ COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
+ )
+ endforeach(pyfile)
+
+ endif()
+
+ GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
+
+endfunction(GR_PYTHON_INSTALL)
diff --git a/gr-howto-write-a-block-cmake/cmake/Modules/GrSwig.cmake b/gr-howto-write-a-block-cmake/cmake/Modules/GrSwig.cmake
new file mode 100644
index 000000000..0fa1c7b77
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/cmake/Modules/GrSwig.cmake
@@ -0,0 +1,136 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+if(DEFINED __INCLUDED_GR_SWIG_CMAKE)
+ return()
+endif()
+set(__INCLUDED_GR_SWIG_CMAKE TRUE)
+
+include(GrPython)
+
+########################################################################
+# Build a swig target for the common gnuradio use case. Usage:
+# GR_SWIG_MAKE(target ifile ifile ifile...)
+#
+# Set the following variables before calling:
+# - GR_SWIG_FLAGS
+# - GR_SWIG_INCLUDE_DIRS
+# - GR_SWIG_LIBRARIES
+# - GR_SWIG_SOURCE_DEPS
+# - GR_SWIG_TARGET_DEPS
+########################################################################
+macro(GR_SWIG_MAKE name)
+ set(ifiles ${ARGN})
+
+ #determine include dependencies for swig file
+ execute_process(
+ COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/get_swig_deps.py
+ "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ )
+
+ #append the specified include directories
+ include_directories(${GR_SWIG_INCLUDE_DIRS})
+ list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${GR_SWIG_SOURCE_DEPS})
+
+ find_package(PythonLibs)
+ include_directories(${PYTHON_INCLUDE_DIRS})
+
+ #setup the swig flags with flags and include directories
+ set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
+ foreach(dir ${GR_SWIG_INCLUDE_DIRS})
+ list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
+ endforeach(dir)
+
+ #set the C++ property on the swig .i file so it builds
+ set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
+
+ #setup the actual swig library target to be built
+ include(UseSWIG)
+ SWIG_ADD_MODULE(${name} python ${ifiles})
+ SWIG_LINK_LIBRARIES(${name} ${PYTHON_LIBRARIES} ${GR_SWIG_LIBRARIES})
+ if(GR_SWIG_TARGET_DEPS)
+ add_dependencies(${SWIG_MODULE_${name}_REAL_NAME} ${GR_SWIG_TARGET_DEPS})
+ endif(GR_SWIG_TARGET_DEPS)
+
+endmacro(GR_SWIG_MAKE)
+
+########################################################################
+# Install swig targets generated by GR_SWIG_MAKE. Usage:
+# GR_SWIG_INSTALL(
+# TARGETS target target target...
+# [DESTINATION destination]
+# [COMPONENT component]
+# )
+########################################################################
+macro(GR_SWIG_INSTALL)
+
+ include(CMakeParseArgumentsCopy)
+ CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
+
+ foreach(name ${GR_SWIG_INSTALL_TARGETS})
+ install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
+ DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
+ COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
+ )
+
+ include(GrPython)
+ GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
+ DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
+ COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
+ )
+ endforeach(name)
+
+endmacro(GR_SWIG_INSTALL)
+
+########################################################################
+# Generate a python file that can determine swig dependencies.
+# Used by the make macro above to determine extra dependencies.
+# When you build C++, CMake figures out the header dependencies.
+# This code essentially performs that logic for swig includes.
+########################################################################
+file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
+
+import os, sys, re
+
+include_matcher = re.compile('[#|%]include\\s*[<|\"](.*)[>|\"]')
+include_dirs = sys.argv[2].split(';')
+
+def get_swig_incs(file_path):
+ file_contents = open(file_path, 'r').read()
+ return include_matcher.findall(file_contents, re.MULTILINE)
+
+def get_swig_deps(file_path, level):
+ deps = [file_path]
+ if level == 0: return deps
+ for inc_file in get_swig_incs(file_path):
+ for inc_dir in include_dirs:
+ inc_path = os.path.join(inc_dir, inc_file)
+ if not os.path.exists(inc_path): continue
+ deps.extend(get_swig_deps(inc_path, level-1))
+ return deps
+
+if __name__ == '__main__':
+ ifiles = sys.argv[1].split(';')
+ deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
+ #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
+ print(';'.join(set(deps)))
+")
diff --git a/gr-howto-write-a-block-cmake/cmake/Modules/GrTest.cmake b/gr-howto-write-a-block-cmake/cmake/Modules/GrTest.cmake
new file mode 100644
index 000000000..9ec3141f9
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/cmake/Modules/GrTest.cmake
@@ -0,0 +1,133 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+if(DEFINED __INCLUDED_GR_TEST_CMAKE)
+ return()
+endif()
+set(__INCLUDED_GR_TEST_CMAKE TRUE)
+
+########################################################################
+# Add a unit test and setup the environment for a unit test.
+# Takes the same arguments as the ADD_TEST function.
+#
+# Before calling set the following variables:
+# GR_TEST_TARGET_DEPS - built targets for the library path
+# GR_TEST_LIBRARY_DIRS - directories for the library path
+# GR_TEST_PYTHON_DIRS - directories for the python path
+########################################################################
+function(GR_ADD_TEST test_name)
+
+ if(WIN32)
+ #Ensure that the build exe also appears in the PATH.
+ list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
+
+ #In the land of windows, all libraries must be in the PATH.
+ #Since the dependent libraries are not yet installed,
+ #we must manually set them in the PATH to run tests.
+ #The following appends the path of a target dependency.
+ foreach(target ${GR_TEST_TARGET_DEPS})
+ get_target_property(location ${target} LOCATION)
+ if(location)
+ get_filename_component(path ${location} PATH)
+ string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
+ list(APPEND GR_TEST_LIBRARY_DIRS ${path})
+ endif(location)
+ endforeach(target)
+
+ #SWIG generates the python library files into a subdirectory.
+ #Therefore, we must append this subdirectory into PYTHONPATH.
+ #Only do this for the python directories matching the following:
+ foreach(pydir ${GR_TEST_PYTHON_DIRS})
+ get_filename_component(name ${pydir} NAME)
+ if(name MATCHES "^(swig|lib|src)$")
+ list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
+ endif()
+ endforeach(pydir)
+ endif(WIN32)
+
+ file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
+ file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
+ file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
+
+ set(environs "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
+
+ #http://www.cmake.org/pipermail/cmake/2009-May/029464.html
+ #Replaced this add test + set environs code with the shell script generation.
+ #Its nicer to be able to manually run the shell script to diagnose problems.
+ #ADD_TEST(${ARGV})
+ #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
+
+ if(UNIX)
+ set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
+ #set both LD and DYLD paths to cover multiple UNIX OS library paths
+ list(APPEND libpath "$LD_LIBRARY_PATH" "$DYLD_LIBRARY_PATH")
+ list(APPEND pypath "$PYTHONPATH")
+
+ #replace list separator with the path separator
+ string(REPLACE ";" ":" libpath "${libpath}")
+ string(REPLACE ";" ":" pypath "${pypath}")
+ list(APPEND environs "PATH=${binpath}" "LD_LIBRARY_PATH=${libpath}" "DYLD_LIBRARY_PATH=${libpath}" "PYTHONPATH=${pypath}")
+
+ #generate a bat file that sets the environment and runs the test
+ find_program(SHELL sh)
+ set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
+ file(WRITE ${sh_file} "#!${SHELL}\n")
+ #each line sets an environment variable
+ foreach(environ ${environs})
+ file(APPEND ${sh_file} "export ${environ}\n")
+ endforeach(environ)
+ #load the command to run with its arguments
+ foreach(arg ${ARGN})
+ file(APPEND ${sh_file} "${arg} ")
+ endforeach(arg)
+ file(APPEND ${sh_file} "\n")
+
+ #make the shell file executable
+ execute_process(COMMAND chmod +x ${sh_file})
+
+ add_test(${test_name} ${SHELL} ${sh_file})
+
+ endif(UNIX)
+
+ if(WIN32)
+ list(APPEND libpath ${DLL_PATHS} "%PATH%")
+ list(APPEND pypath "%PYTHONPATH%")
+
+ #replace list separator with the path separator (escaped)
+ string(REPLACE ";" "\\;" libpath "${libpath}")
+ string(REPLACE ";" "\\;" pypath "${pypath}")
+ list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
+
+ #generate a bat file that sets the environment and runs the test
+ set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
+ file(WRITE ${bat_file} "@echo off\n")
+ #each line sets an environment variable
+ foreach(environ ${environs})
+ file(APPEND ${bat_file} "SET ${environ}\n")
+ endforeach(environ)
+ #load the command to run with its arguments
+ foreach(arg ${ARGN})
+ file(APPEND ${bat_file} "${arg} ")
+ endforeach(arg)
+ file(APPEND ${bat_file} "\n")
+
+ add_test(${test_name} ${bat_file})
+ endif(WIN32)
+
+endfunction(GR_ADD_TEST)
diff --git a/gr-howto-write-a-block-cmake/grc/CMakeLists.txt b/gr-howto-write-a-block-cmake/grc/CMakeLists.txt
new file mode 100644
index 000000000..cc43db7ba
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/grc/CMakeLists.txt
@@ -0,0 +1,24 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+install(FILES
+ howto_square_ff.xml
+ howto_square2_ff.xml
+ DESTINATION share/gnuradio/grc/blocks
+)
diff --git a/gr-howto-write-a-block-cmake/grc/howto_square2_ff.xml b/gr-howto-write-a-block-cmake/grc/howto_square2_ff.xml
new file mode 100644
index 000000000..c58ef0047
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/grc/howto_square2_ff.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<block>
+ <name>Square2</name>
+ <key>howto_square2_ff</key>
+ <category>HOWTO</category>
+ <import>import howto</import>
+ <make>howto.square2_ff()</make>
+
+ <sink>
+ <name>in</name>
+ <type>float</type>
+ </sink>
+
+ <source>
+ <name>out</name>
+ <type>float</type>
+ </source>
+</block>
diff --git a/gr-howto-write-a-block-cmake/grc/howto_square_ff.xml b/gr-howto-write-a-block-cmake/grc/howto_square_ff.xml
new file mode 100644
index 000000000..34a0b0a3f
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/grc/howto_square_ff.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<block>
+ <name>Square</name>
+ <key>howto_square_ff</key>
+ <category>HOWTO</category>
+ <import>import howto</import>
+ <make>howto.square_ff()</make>
+
+ <sink>
+ <name>in</name>
+ <type>float</type>
+ </sink>
+
+ <source>
+ <name>out</name>
+ <type>float</type>
+ </source>
+</block>
diff --git a/gr-howto-write-a-block-cmake/include/CMakeLists.txt b/gr-howto-write-a-block-cmake/include/CMakeLists.txt
new file mode 100644
index 000000000..475cc73c6
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/include/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Install public header files
+########################################################################
+install(FILES
+ howto_api.h
+ howto_square_ff.h
+ howto_square2_ff.h
+ DESTINATION include/howto
+)
diff --git a/gr-howto-write-a-block-cmake/include/howto_api.h b/gr-howto-write-a-block-cmake/include/howto_api.h
new file mode 100644
index 000000000..5263a1cf7
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/include/howto_api.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2011 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along 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_HOWTO_API_H
+#define INCLUDED_HOWTO_API_H
+
+#include <gruel/attributes.h>
+
+#ifdef gnuradio_howto_EXPORTS
+# define HOWTO_API __GR_ATTR_EXPORT
+#else
+# define HOWTO_API __GR_ATTR_IMPORT
+#endif
+
+#endif /* INCLUDED_HOWTO_API_H */
diff --git a/gr-howto-write-a-block-cmake/include/howto_square2_ff.h b/gr-howto-write-a-block-cmake/include/howto_square2_ff.h
new file mode 100644
index 000000000..c45a1851f
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/include/howto_square2_ff.h
@@ -0,0 +1,78 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along 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_HOWTO_SQUARE2_FF_H
+#define INCLUDED_HOWTO_SQUARE2_FF_H
+
+#include <howto_api.h>
+#include <gr_sync_block.h>
+
+class howto_square2_ff;
+
+/*
+ * We use boost::shared_ptr's instead of raw pointers for all access
+ * to gr_blocks (and many other data structures). The shared_ptr gets
+ * us transparent reference counting, which greatly simplifies storage
+ * management issues. This is especially helpful in our hybrid
+ * C++ / Python system.
+ *
+ * See http://www.boost.org/libs/smart_ptr/smart_ptr.htm
+ *
+ * As a convention, the _sptr suffix indicates a boost::shared_ptr
+ */
+typedef boost::shared_ptr<howto_square2_ff> howto_square2_ff_sptr;
+
+/*!
+ * \brief Return a shared_ptr to a new instance of howto_square2_ff.
+ *
+ * To avoid accidental use of raw pointers, howto_square2_ff's
+ * constructor is private. howto_make_square2_ff is the public
+ * interface for creating new instances.
+ */
+HOWTO_API howto_square2_ff_sptr howto_make_square2_ff ();
+
+/*!
+ * \brief square2 a stream of floats.
+ * \ingroup block
+ *
+ * This uses the preferred technique: subclassing gr_sync_block.
+ */
+class HOWTO_API howto_square2_ff : public gr_sync_block
+{
+private:
+ // The friend declaration allows howto_make_square2_ff to
+ // access the private constructor.
+
+ friend HOWTO_API howto_square2_ff_sptr howto_make_square2_ff ();
+
+ howto_square2_ff (); // private constructor
+
+ public:
+ ~howto_square2_ff (); // public destructor
+
+ // Where all the action really happens
+
+ int work (int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+};
+
+#endif /* INCLUDED_HOWTO_SQUARE2_FF_H */
diff --git a/gr-howto-write-a-block-cmake/include/howto_square_ff.h b/gr-howto-write-a-block-cmake/include/howto_square_ff.h
new file mode 100644
index 000000000..f07a1d4f6
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/include/howto_square_ff.h
@@ -0,0 +1,79 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along 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_HOWTO_SQUARE_FF_H
+#define INCLUDED_HOWTO_SQUARE_FF_H
+
+#include <howto_api.h>
+#include <gr_block.h>
+
+class howto_square_ff;
+
+/*
+ * We use boost::shared_ptr's instead of raw pointers for all access
+ * to gr_blocks (and many other data structures). The shared_ptr gets
+ * us transparent reference counting, which greatly simplifies storage
+ * management issues. This is especially helpful in our hybrid
+ * C++ / Python system.
+ *
+ * See http://www.boost.org/libs/smart_ptr/smart_ptr.htm
+ *
+ * As a convention, the _sptr suffix indicates a boost::shared_ptr
+ */
+typedef boost::shared_ptr<howto_square_ff> howto_square_ff_sptr;
+
+/*!
+ * \brief Return a shared_ptr to a new instance of howto_square_ff.
+ *
+ * To avoid accidental use of raw pointers, howto_square_ff's
+ * constructor is private. howto_make_square_ff is the public
+ * interface for creating new instances.
+ */
+HOWTO_API howto_square_ff_sptr howto_make_square_ff ();
+
+/*!
+ * \brief square a stream of floats.
+ * \ingroup block
+ *
+ * \sa howto_square2_ff for a version that subclasses gr_sync_block.
+ */
+class HOWTO_API howto_square_ff : public gr_block
+{
+private:
+ // The friend declaration allows howto_make_square_ff to
+ // access the private constructor.
+
+ friend HOWTO_API howto_square_ff_sptr howto_make_square_ff ();
+
+ howto_square_ff (); // private constructor
+
+ public:
+ ~howto_square_ff (); // public destructor
+
+ // Where all the action really happens
+
+ 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_HOWTO_SQUARE_FF_H */
diff --git a/gr-howto-write-a-block-cmake/lib/CMakeLists.txt b/gr-howto-write-a-block-cmake/lib/CMakeLists.txt
new file mode 100644
index 000000000..835ae02d6
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/lib/CMakeLists.txt
@@ -0,0 +1,54 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup library
+########################################################################
+include(GrPlatform) #define LIB_SUFFIX
+
+add_library(gnuradio-howto SHARED howto_square_ff.cc howto_square2_ff.cc)
+target_link_libraries(gnuradio-howto ${Boost_LIBRARIES} ${GRUEL_LIBRARIES} ${GNURADIO_CORE_LIBRARIES})
+set_target_properties(gnuradio-howto PROPERTIES DEFINE_SYMBOL "gnuradio_howto_EXPORTS")
+
+########################################################################
+# Install built library files
+########################################################################
+install(TARGETS gnuradio-howto
+ LIBRARY DESTINATION lib${LIB_SUFFIX} # .so/.dylib file
+ ARCHIVE DESTINATION lib${LIB_SUFFIX} # .lib file
+ RUNTIME DESTINATION bin # .dll file
+)
+
+########################################################################
+# Build and register unit test
+########################################################################
+find_package(Boost COMPONENTS unit_test_framework)
+
+include(GrTest)
+set(GR_TEST_TARGET_DEPS gnuradio-howto)
+#turn each test cpp file into an executable with an int main() function
+add_definitions(-DBOOST_TEST_DYN_LINK -DBOOST_TEST_MAIN)
+
+add_executable(qa_howto_square_ff qa_howto_square_ff.cc)
+target_link_libraries(qa_howto_square_ff gnuradio-howto ${Boost_LIBRARIES})
+GR_ADD_TEST(qa_howto_square_ff qa_howto_square_ff)
+
+add_executable(qa_howto_square2_ff qa_howto_square2_ff.cc)
+target_link_libraries(qa_howto_square2_ff gnuradio-howto ${Boost_LIBRARIES})
+GR_ADD_TEST(qa_howto_square2_ff qa_howto_square2_ff)
diff --git a/gr-howto-write-a-block-cmake/lib/howto_square2_ff.cc b/gr-howto-write-a-block-cmake/lib/howto_square2_ff.cc
new file mode 100644
index 000000000..5e0fd7a43
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/lib/howto_square2_ff.cc
@@ -0,0 +1,92 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004,2010 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/*
+ * 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 <howto_square2_ff.h>
+#include <gr_io_signature.h>
+
+/*
+ * Create a new instance of howto_square2_ff and return
+ * a boost shared_ptr. This is effectively the public constructor.
+ */
+howto_square2_ff_sptr
+howto_make_square2_ff ()
+{
+ return gnuradio::get_initial_sptr(new howto_square2_ff ());
+}
+
+/*
+ * Specify constraints on number of input and output streams.
+ * This info is used to construct the input and output signatures
+ * (2nd & 3rd args to gr_block's constructor). The input and
+ * output signatures are used by the runtime system to
+ * check that a valid number and type of inputs and outputs
+ * are connected to this block. In this case, we accept
+ * only 1 input and 1 output.
+ */
+static const int MIN_IN = 1; // mininum number of input streams
+static const int MAX_IN = 1; // maximum number of input streams
+static const int MIN_OUT = 1; // minimum number of output streams
+static const int MAX_OUT = 1; // maximum number of output streams
+
+/*
+ * The private constructor
+ */
+howto_square2_ff::howto_square2_ff ()
+ : gr_sync_block ("square2_ff",
+ gr_make_io_signature (MIN_IN, MAX_IN, sizeof (float)),
+ gr_make_io_signature (MIN_OUT, MAX_OUT, sizeof (float)))
+{
+ // nothing else required in this example
+}
+
+/*
+ * Our virtual destructor.
+ */
+howto_square2_ff::~howto_square2_ff ()
+{
+ // nothing else required in this example
+}
+
+int
+howto_square2_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] = in[i] * in[i];
+ }
+
+ // Tell runtime system how many output items we produced.
+ return noutput_items;
+}
diff --git a/gr-howto-write-a-block-cmake/lib/howto_square_ff.cc b/gr-howto-write-a-block-cmake/lib/howto_square_ff.cc
new file mode 100644
index 000000000..f1d5a7848
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/lib/howto_square_ff.cc
@@ -0,0 +1,98 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004,2010 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/*
+ * 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 <howto_square_ff.h>
+#include <gr_io_signature.h>
+
+/*
+ * Create a new instance of howto_square_ff and return
+ * a boost shared_ptr. This is effectively the public constructor.
+ */
+howto_square_ff_sptr
+howto_make_square_ff ()
+{
+ return gnuradio::get_initial_sptr(new howto_square_ff ());
+}
+
+/*
+ * Specify constraints on number of input and output streams.
+ * This info is used to construct the input and output signatures
+ * (2nd & 3rd args to gr_block's constructor). The input and
+ * output signatures are used by the runtime system to
+ * check that a valid number and type of inputs and outputs
+ * are connected to this block. In this case, we accept
+ * only 1 input and 1 output.
+ */
+static const int MIN_IN = 1; // mininum number of input streams
+static const int MAX_IN = 1; // maximum number of input streams
+static const int MIN_OUT = 1; // minimum number of output streams
+static const int MAX_OUT = 1; // maximum number of output streams
+
+/*
+ * The private constructor
+ */
+howto_square_ff::howto_square_ff ()
+ : gr_block ("square_ff",
+ gr_make_io_signature (MIN_IN, MAX_IN, sizeof (float)),
+ gr_make_io_signature (MIN_OUT, MAX_OUT, sizeof (float)))
+{
+ // nothing else required in this example
+}
+
+/*
+ * Our virtual destructor.
+ */
+howto_square_ff::~howto_square_ff ()
+{
+ // nothing else required in this example
+}
+
+int
+howto_square_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];
+
+ for (int i = 0; i < noutput_items; i++){
+ out[i] = in[i] * in[i];
+ }
+
+ // Tell runtime system how many input items we consumed on
+ // each input stream.
+
+ consume_each (noutput_items);
+
+ // Tell runtime system how many output items we produced.
+ return noutput_items;
+}
diff --git a/gr-howto-write-a-block-cmake/lib/qa_howto_square2_ff.cc b/gr-howto-write-a-block-cmake/lib/qa_howto_square2_ff.cc
new file mode 100644
index 000000000..9c37b62c1
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/lib/qa_howto_square2_ff.cc
@@ -0,0 +1,32 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2011 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 <boost/test/unit_test.hpp>
+
+BOOST_AUTO_TEST_CASE(qa_howto_square2_ff_t1){
+ BOOST_CHECK_EQUAL(2 + 2, 4);
+ // TODO BOOST_* test macros here
+}
+
+BOOST_AUTO_TEST_CASE(qa_howto_square2_ff_t2){
+ BOOST_CHECK_EQUAL(2 + 2, 4);
+ // TODO BOOST_* test macros here
+}
diff --git a/gr-howto-write-a-block-cmake/lib/qa_howto_square_ff.cc b/gr-howto-write-a-block-cmake/lib/qa_howto_square_ff.cc
new file mode 100644
index 000000000..da1d3040a
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/lib/qa_howto_square_ff.cc
@@ -0,0 +1,32 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2011 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 <boost/test/unit_test.hpp>
+
+BOOST_AUTO_TEST_CASE(qa_howto_square_ff_t1){
+ BOOST_CHECK_EQUAL(2 + 2, 4);
+ // TODO BOOST_* test macros here
+}
+
+BOOST_AUTO_TEST_CASE(qa_howto_square_ff_t2){
+ BOOST_CHECK_EQUAL(2 + 2, 4);
+ // TODO BOOST_* test macros here
+}
diff --git a/gr-howto-write-a-block-cmake/python/CMakeLists.txt b/gr-howto-write-a-block-cmake/python/CMakeLists.txt
new file mode 100644
index 000000000..5da80ef15
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/python/CMakeLists.txt
@@ -0,0 +1,44 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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 python install macros
+########################################################################
+include(GrPython)
+if(NOT PYTHONINTERP_FOUND)
+ return()
+endif()
+
+########################################################################
+# Install python sources
+########################################################################
+GR_PYTHON_INSTALL(
+ FILES
+ __init__.py
+ DESTINATION ${GR_PYTHON_DIR}/howto
+)
+
+########################################################################
+# Handle the unit tests
+########################################################################
+include(GrTest)
+
+set(GR_TEST_TARGET_DEPS gnuradio-howto)
+set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
+GR_ADD_TEST(qa_howto ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_howto.py)
diff --git a/gr-howto-write-a-block-cmake/python/__init__.py b/gr-howto-write-a-block-cmake/python/__init__.py
new file mode 100644
index 000000000..d4a41c271
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/python/__init__.py
@@ -0,0 +1,49 @@
+#
+# Copyright 2008,2009 Free Software Foundation, Inc.
+#
+# This application is free software; you can redistribute it and/or modify
+# it under the 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 application is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+
+# The presence of this file turns this directory into a Python package
+
+# ----------------------------------------------------------------
+# Temporary workaround for ticket:181 (swig+python problem)
+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)
+# ----------------------------------------------------------------
+
+
+# import swig generated symbols into the howto namespace
+from howto_swig import *
+
+# import any pure python here
+#
+
+# ----------------------------------------------------------------
+# Tail of workaround
+if _RTLD_GLOBAL != 0:
+ sys.setdlopenflags(_dlopenflags) # Restore original flags
+# ----------------------------------------------------------------
diff --git a/gr-howto-write-a-block-cmake/python/qa_howto.py b/gr-howto-write-a-block-cmake/python/qa_howto.py
new file mode 100755
index 000000000..630f57bf4
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/python/qa_howto.py
@@ -0,0 +1,59 @@
+#!/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 howto_swig
+
+class qa_howto (gr_unittest.TestCase):
+
+ def setUp (self):
+ self.tb = gr.top_block ()
+
+ def tearDown (self):
+ self.tb = None
+
+ def test_001_square_ff (self):
+ src_data = (-3, 4, -5.5, 2, 3)
+ expected_result = (9, 16, 30.25, 4, 9)
+ src = gr.vector_source_f (src_data)
+ sqr = howto_swig.square_ff ()
+ dst = gr.vector_sink_f ()
+ self.tb.connect (src, sqr)
+ self.tb.connect (sqr, dst)
+ self.tb.run ()
+ result_data = dst.data ()
+ self.assertFloatTuplesAlmostEqual (expected_result, result_data, 6)
+
+ def test_002_square2_ff (self):
+ src_data = (-3, 4, -5.5, 2, 3)
+ expected_result = (9, 16, 30.25, 4, 9)
+ src = gr.vector_source_f (src_data)
+ sqr = howto_swig.square2_ff ()
+ dst = gr.vector_sink_f ()
+ self.tb.connect (src, sqr)
+ self.tb.connect (sqr, dst)
+ self.tb.run ()
+ result_data = dst.data ()
+ self.assertFloatTuplesAlmostEqual (expected_result, result_data, 6)
+
+if __name__ == '__main__':
+ gr_unittest.main ()
diff --git a/gr-howto-write-a-block-cmake/swig/CMakeLists.txt b/gr-howto-write-a-block-cmake/swig/CMakeLists.txt
new file mode 100644
index 000000000..676cc76ca
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/swig/CMakeLists.txt
@@ -0,0 +1,54 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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 swig generation macros
+########################################################################
+find_package(SWIG)
+find_package(PythonLibs)
+if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
+ return()
+endif()
+include(GrSwig)
+include(GrPython)
+
+########################################################################
+# Setup swig generation
+########################################################################
+foreach(incdir ${GNURADIO_CORE_INCLUDE_DIRS})
+ list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/swig)
+endforeach(incdir)
+
+set(GR_SWIG_LIBRARIES gnuradio-howto)
+
+GR_SWIG_MAKE(howto_swig howto_swig.i)
+
+########################################################################
+# Install the build swig module
+########################################################################
+GR_SWIG_INSTALL(TARGETS howto_swig DESTINATION ${GR_PYTHON_DIR}/howto)
+
+########################################################################
+# Install swig .i files for development
+########################################################################
+install(
+ FILES
+ howto_swig.i
+ DESTINATION include/howto/swig
+)
diff --git a/gr-howto-write-a-block-cmake/swig/howto_swig.i b/gr-howto-write-a-block-cmake/swig/howto_swig.i
new file mode 100644
index 000000000..52100057c
--- /dev/null
+++ b/gr-howto-write-a-block-cmake/swig/howto_swig.i
@@ -0,0 +1,26 @@
+/* -*- c++ -*- */
+
+#define HOWTO_API
+
+%include "gnuradio.i" // the common stuff
+
+%{
+#include "howto_square_ff.h"
+#include "howto_square2_ff.h"
+%}
+
+GR_SWIG_BLOCK_MAGIC(howto,square_ff);
+%include "howto_square_ff.h"
+
+GR_SWIG_BLOCK_MAGIC(howto,square2_ff);
+%include "howto_square2_ff.h"
+
+#if SWIGGUILE
+%scheme %{
+(load-extension-global "libguile-gnuradio-howto_swig" "scm_init_gnuradio_howto_swig_module")
+%}
+
+%goops %{
+(use-modules (gnuradio gnuradio_core_runtime))
+%}
+#endif
diff --git a/gr-noaa/CMakeLists.txt b/gr-noaa/CMakeLists.txt
new file mode 100644
index 000000000..621dd5d6e
--- /dev/null
+++ b/gr-noaa/CMakeLists.txt
@@ -0,0 +1,87 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup dependencies
+########################################################################
+include(GrBoost)
+
+########################################################################
+# Register component
+########################################################################
+include(GrComponent)
+GR_REGISTER_COMPONENT("gr-noaa" ENABLE_GR_NOAA
+ Boost_FOUND
+ ENABLE_GR_CORE
+)
+
+GR_SET_GLOBAL(GR_NOAA_INCLUDE_DIRS
+ ${CMAKE_CURRENT_SOURCE_DIR}/lib
+)
+
+########################################################################
+# Begin conditional configuration
+########################################################################
+if(ENABLE_GR_NOAA)
+
+########################################################################
+# Setup CPack components
+########################################################################
+include(GrPackage)
+CPACK_SET(CPACK_COMPONENT_GROUP_NOAA_DESCRIPTION "GNU Radio NOAA Blocks")
+
+CPACK_COMPONENT("noaa_runtime"
+ GROUP "NOAA"
+ DISPLAY_NAME "Runtime"
+ DESCRIPTION "Runtime"
+ DEPENDS "core_runtime"
+)
+
+CPACK_COMPONENT("noaa_devel"
+ GROUP "NOAA"
+ DISPLAY_NAME "Development"
+ DESCRIPTION "C++ headers, package config, import libraries"
+ DEPENDS "core_devel"
+)
+
+CPACK_COMPONENT("noaa_python"
+ GROUP "NOAA"
+ DISPLAY_NAME "Python"
+ DESCRIPTION "Python modules for runtime; GRC xml files"
+ DEPENDS "core_python;noaa_runtime"
+)
+
+CPACK_COMPONENT("noaa_swig"
+ GROUP "NOAA"
+ DISPLAY_NAME "SWIG"
+ DESCRIPTION "SWIG development .i files"
+ DEPENDS "core_swig;noaa_python;noaa_devel"
+)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(lib)
+if(ENABLE_PYTHON)
+ add_subdirectory(swig)
+ add_subdirectory(grc)
+ add_subdirectory(apps)
+endif(ENABLE_PYTHON)
+
+endif(ENABLE_GR_NOAA)
diff --git a/gr-noaa/apps/.gitignore b/gr-noaa/apps/.gitignore
index cd8d543cc..be02dd265 100644
--- a/gr-noaa/apps/.gitignore
+++ b/gr-noaa/apps/.gitignore
@@ -1,3 +1,3 @@
*.dat
-*.txt
+#*.txt
*.hrpt
diff --git a/gr-noaa/apps/CMakeLists.txt b/gr-noaa/apps/CMakeLists.txt
new file mode 100644
index 000000000..e692648b5
--- /dev/null
+++ b/gr-noaa/apps/CMakeLists.txt
@@ -0,0 +1,33 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrPython)
+
+GR_PYTHON_INSTALL(
+ PROGRAMS
+ hrpt_decode.py
+ hrpt_demod.py
+ file_rx_hrpt.py
+ file_rx_lrit.py
+ #usrp_rx_hrpt.py #FIXME no support for usrp
+ #usrp_rx_hrpt_nogui.py
+ #usrp_rx_lrit.py
+ DESTINATION ${GR_RUNTIME_DIR}
+ COMPONENT "noaa_python"
+)
diff --git a/gr-noaa/grc/CMakeLists.txt b/gr-noaa/grc/CMakeLists.txt
new file mode 100644
index 000000000..92d707477
--- /dev/null
+++ b/gr-noaa/grc/CMakeLists.txt
@@ -0,0 +1,26 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+install(FILES
+ noaa_hrpt_decoder.xml
+ noaa_hrpt_deframer.xml
+ noaa_hrpt_pll_cf.xml
+ DESTINATION ${GRC_BLOCKS_DIR}
+ COMPONENT "noaa_python"
+)
diff --git a/gr-noaa/lib/CMakeLists.txt b/gr-noaa/lib/CMakeLists.txt
new file mode 100644
index 000000000..a3509df84
--- /dev/null
+++ b/gr-noaa/lib/CMakeLists.txt
@@ -0,0 +1,66 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup the include and linker paths
+########################################################################
+include_directories(
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GR_NOAA_INCLUDE_DIRS}
+)
+
+include_directories(${Boost_INCLUDE_DIRS})
+link_directories(${Boost_LIBRARY_DIRS})
+
+########################################################################
+# Setup library
+########################################################################
+list(APPEND gr_noaa_sources
+ noaa_hrpt_decoder.cc
+ noaa_hrpt_deframer.cc
+ noaa_hrpt_pll_cf.cc
+)
+
+list(APPEND noaa_libs
+ gnuradio-core
+ ${Boost_LIBRARIES}
+)
+
+add_library(gnuradio-noaa SHARED ${gr_noaa_sources})
+target_link_libraries(gnuradio-noaa ${noaa_libs})
+set_target_properties(gnuradio-noaa PROPERTIES DEFINE_SYMBOL "gnuradio_noaa_EXPORTS")
+set_target_properties(gnuradio-noaa PROPERTIES SOVERSION ${LIBVER})
+
+install(TARGETS gnuradio-noaa
+ LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT "noaa_runtime" # .so/.dylib file
+ ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT "noaa_devel" # .lib file
+ RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT "noaa_runtime" # .dll file
+)
+
+########################################################################
+# Install header files
+########################################################################
+install(FILES
+ noaa_api.h
+ noaa_hrpt_decoder.h
+ noaa_hrpt_deframer.h
+ noaa_hrpt_pll_cf.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "noaa_devel"
+)
diff --git a/gr-noaa/lib/Makefile.am b/gr-noaa/lib/Makefile.am
index ba660a398..8eedbbb18 100644
--- a/gr-noaa/lib/Makefile.am
+++ b/gr-noaa/lib/Makefile.am
@@ -42,6 +42,7 @@ libgnuradio_noaa_la_LIBADD = \
libgnuradio_noaa_la_LDFLAGS = $(NO_UNDEFINED) $(LTVERSIONFLAGS)
grinclude_HEADERS = \
+ noaa_api.h \
noaa_hrpt_decoder.h \
noaa_hrpt_deframer.h \
noaa_hrpt_pll_cf.h
diff --git a/gr-noaa/lib/noaa_api.h b/gr-noaa/lib/noaa_api.h
new file mode 100644
index 000000000..d3c3fbf2d
--- /dev/null
+++ b/gr-noaa/lib/noaa_api.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2011 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along 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_NOAA_API_H
+#define INCLUDED_NOAA_API_H
+
+#include <gruel/attributes.h>
+
+#ifdef gnuradio_noaa_EXPORTS
+# define NOAA_API __GR_ATTR_EXPORT
+#else
+# define NOAA_API __GR_ATTR_IMPORT
+#endif
+
+#endif /* INCLUDED_NOAA_API_H */
diff --git a/gr-noaa/lib/noaa_hrpt_decoder.h b/gr-noaa/lib/noaa_hrpt_decoder.h
index 9d67d7108..4db09106e 100644
--- a/gr-noaa/lib/noaa_hrpt_decoder.h
+++ b/gr-noaa/lib/noaa_hrpt_decoder.h
@@ -23,17 +23,18 @@
#ifndef INCLUDED_NOAA_HRPT_DECODER_H
#define INCLUDED_NOAA_HRPT_DECODER_H
+#include <noaa_api.h>
#include <gr_sync_block.h>
class noaa_hrpt_decoder;
typedef boost::shared_ptr<noaa_hrpt_decoder> noaa_hrpt_decoder_sptr;
-noaa_hrpt_decoder_sptr
+NOAA_API noaa_hrpt_decoder_sptr
noaa_make_hrpt_decoder(bool verbose, bool output_files);
-class noaa_hrpt_decoder : public gr_sync_block
+class NOAA_API noaa_hrpt_decoder : public gr_sync_block
{
- friend noaa_hrpt_decoder_sptr noaa_make_hrpt_decoder(bool verbose, bool output_files);
+ friend NOAA_API noaa_hrpt_decoder_sptr noaa_make_hrpt_decoder(bool verbose, bool output_files);
noaa_hrpt_decoder(bool verbose, bool output_files);
// Configuration
diff --git a/gr-noaa/lib/noaa_hrpt_deframer.h b/gr-noaa/lib/noaa_hrpt_deframer.h
index b11d0fa2b..d254746af 100644
--- a/gr-noaa/lib/noaa_hrpt_deframer.h
+++ b/gr-noaa/lib/noaa_hrpt_deframer.h
@@ -23,17 +23,18 @@
#ifndef INCLUDED_NOAA_HRPT_DEFRAMER_H
#define INCLUDED_NOAA_HRPT_DEFRAMER_H
+#include <noaa_api.h>
#include <gr_block.h>
class noaa_hrpt_deframer;
typedef boost::shared_ptr<noaa_hrpt_deframer> noaa_hrpt_deframer_sptr;
-noaa_hrpt_deframer_sptr
+NOAA_API noaa_hrpt_deframer_sptr
noaa_make_hrpt_deframer();
-class noaa_hrpt_deframer : public gr_block
+class NOAA_API noaa_hrpt_deframer : public gr_block
{
- friend noaa_hrpt_deframer_sptr noaa_make_hrpt_deframer();
+ friend NOAA_API noaa_hrpt_deframer_sptr noaa_make_hrpt_deframer();
noaa_hrpt_deframer();
unsigned int d_state;
diff --git a/gr-noaa/lib/noaa_hrpt_pll_cf.h b/gr-noaa/lib/noaa_hrpt_pll_cf.h
index 507d47fe7..8d3e8f8d5 100644
--- a/gr-noaa/lib/noaa_hrpt_pll_cf.h
+++ b/gr-noaa/lib/noaa_hrpt_pll_cf.h
@@ -23,17 +23,18 @@
#ifndef INCLUDED_NOAA_HRPT_PLL_CF_H
#define INCLUDED_NOAA_HRPT_PLL_CF_H
+#include <noaa_api.h>
#include <gr_sync_block.h>
class noaa_hrpt_pll_cf;
typedef boost::shared_ptr<noaa_hrpt_pll_cf> noaa_hrpt_pll_cf_sptr;
-noaa_hrpt_pll_cf_sptr
+NOAA_API noaa_hrpt_pll_cf_sptr
noaa_make_hrpt_pll_cf(float alpha, float beta, float max_offset);
-class noaa_hrpt_pll_cf : public gr_sync_block
+class NOAA_API noaa_hrpt_pll_cf : public gr_sync_block
{
- friend noaa_hrpt_pll_cf_sptr noaa_make_hrpt_pll_cf(float alpha, float beta, float max_offset);
+ friend NOAA_API noaa_hrpt_pll_cf_sptr noaa_make_hrpt_pll_cf(float alpha, float beta, float max_offset);
noaa_hrpt_pll_cf(float alpha, float beta, float max_offset);
float d_alpha; // 1st order loop constant
diff --git a/gr-noaa/swig/CMakeLists.txt b/gr-noaa/swig/CMakeLists.txt
new file mode 100644
index 000000000..1d754aabb
--- /dev/null
+++ b/gr-noaa/swig/CMakeLists.txt
@@ -0,0 +1,56 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup swig generation
+########################################################################
+include(GrPython)
+include(GrSwig)
+
+set(GR_SWIG_INCLUDE_DIRS
+ ${GR_NOAA_INCLUDE_DIRS}
+ ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+)
+
+set(GR_SWIG_LIBRARIES gnuradio-noaa)
+
+GR_SWIG_MAKE(noaa_swig noaa_swig.i)
+
+GR_SWIG_INSTALL(
+ TARGETS noaa_swig
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/noaa
+ COMPONENT "noaa_python"
+)
+
+install(
+ FILES
+ noaa_swig.i
+ noaa_hrpt_decoder.i
+ noaa_hrpt_deframer.i
+ noaa_hrpt_pll_cf.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "noaa_swig"
+)
+
+GR_PYTHON_INSTALL(
+ FILES
+ __init__.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/noaa
+ COMPONENT "noaa_python"
+)
diff --git a/gr-pager/CMakeLists.txt b/gr-pager/CMakeLists.txt
new file mode 100644
index 000000000..8dfecced7
--- /dev/null
+++ b/gr-pager/CMakeLists.txt
@@ -0,0 +1,102 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup dependencies
+########################################################################
+include(GrBoost)
+
+########################################################################
+# Register component
+########################################################################
+include(GrComponent)
+GR_REGISTER_COMPONENT("gr-pager" ENABLE_GR_PAGER
+ Boost_FOUND
+ ENABLE_GR_CORE
+)
+
+GR_SET_GLOBAL(GR_PAGER_INCLUDE_DIRS
+ ${CMAKE_CURRENT_SOURCE_DIR}/lib
+)
+
+########################################################################
+# Begin conditional configuration
+########################################################################
+if(ENABLE_GR_PAGER)
+
+########################################################################
+# Setup CPack components
+########################################################################
+include(GrPackage)
+CPACK_SET(CPACK_COMPONENT_GROUP_PAGER_DESCRIPTION "GNU Radio Pager Blocks")
+
+CPACK_COMPONENT("pager_runtime"
+ GROUP "Pager"
+ DISPLAY_NAME "Runtime"
+ DESCRIPTION "Runtime"
+ DEPENDS "core_runtime"
+)
+
+CPACK_COMPONENT("pager_devel"
+ GROUP "Pager"
+ DISPLAY_NAME "Development"
+ DESCRIPTION "C++ headers, package config, import libraries"
+ DEPENDS "core_devel"
+)
+
+CPACK_COMPONENT("pager_python"
+ GROUP "Pager"
+ DISPLAY_NAME "Python"
+ DESCRIPTION "Python modules for runtime; GRC xml files"
+ DEPENDS "core_python;pager_runtime"
+)
+
+CPACK_COMPONENT("pager_swig"
+ GROUP "Pager"
+ DISPLAY_NAME "SWIG"
+ DESCRIPTION "SWIG development .i files"
+ DEPENDS "core_swig;pager_python;pager_devel"
+)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(lib)
+if(ENABLE_PYTHON)
+ add_subdirectory(python)
+ add_subdirectory(swig)
+ add_subdirectory(grc)
+ add_subdirectory(apps)
+endif(ENABLE_PYTHON)
+
+########################################################################
+# Create Pkg Config File
+########################################################################
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-pager.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-pager.pc
+@ONLY)
+
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-pager.pc
+ DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
+ COMPONENT "pager_devel"
+)
+
+endif(ENABLE_GR_PAGER)
diff --git a/gr-pager/apps/CMakeLists.txt b/gr-pager/apps/CMakeLists.txt
new file mode 100644
index 000000000..4b7cd54fa
--- /dev/null
+++ b/gr-pager/apps/CMakeLists.txt
@@ -0,0 +1,22 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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
+#not bothering to install because the apps require gr-usrp
+#which we are choosing not to support in the cmake build system
diff --git a/gr-pager/grc/CMakeLists.txt b/gr-pager/grc/CMakeLists.txt
new file mode 100644
index 000000000..2b01a1e0b
--- /dev/null
+++ b/gr-pager/grc/CMakeLists.txt
@@ -0,0 +1,26 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+install(FILES
+ pager_slicer_fb.xml
+ pager_flex_sync.xml
+ pager_flex_deinterleave.xml
+ DESTINATION ${GRC_BLOCKS_DIR}
+ COMPONENT "pager_python"
+)
diff --git a/gr-pager/lib/CMakeLists.txt b/gr-pager/lib/CMakeLists.txt
new file mode 100644
index 000000000..c6899ab20
--- /dev/null
+++ b/gr-pager/lib/CMakeLists.txt
@@ -0,0 +1,76 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup the include and linker paths
+########################################################################
+include_directories(
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GR_PAGER_INCLUDE_DIRS}
+)
+
+include_directories(${Boost_INCLUDE_DIRS})
+link_directories(${Boost_LIBRARY_DIRS})
+
+########################################################################
+# Setup library
+########################################################################
+list(APPEND gr_pager_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
+)
+
+list(APPEND pager_libs
+ gnuradio-core
+ ${Boost_LIBRARIES}
+)
+
+add_library(gnuradio-pager SHARED ${gr_pager_sources})
+target_link_libraries(gnuradio-pager ${pager_libs})
+set_target_properties(gnuradio-pager PROPERTIES DEFINE_SYMBOL "gnuradio_pager_EXPORTS")
+set_target_properties(gnuradio-pager PROPERTIES SOVERSION ${LIBVER})
+
+install(TARGETS gnuradio-pager
+ LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT "pager_runtime" # .so/.dylib file
+ ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT "pager_devel" # .lib file
+ RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT "pager_runtime" # .dll file
+)
+
+########################################################################
+# Install header files
+########################################################################
+install(FILES
+ pager_api.h
+ 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
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "pager_devel"
+)
diff --git a/gr-pager/lib/Makefile.am b/gr-pager/lib/Makefile.am
index 29c82ebe8..b6131171d 100644
--- a/gr-pager/lib/Makefile.am
+++ b/gr-pager/lib/Makefile.am
@@ -25,6 +25,7 @@ AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES)
# These headers get installed in ${prefix}/include/gnuradio
grinclude_HEADERS = \
+ pager_api.h \
pager_slicer_fb.h \
pager_flex_sync.h \
pager_flex_deinterleave.h \
diff --git a/gr-pager/lib/pager_api.h b/gr-pager/lib/pager_api.h
new file mode 100644
index 000000000..4312c5ae3
--- /dev/null
+++ b/gr-pager/lib/pager_api.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2011 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along 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_API_H
+#define INCLUDED_PAGER_API_H
+
+#include <gruel/attributes.h>
+
+#ifdef gnuradio_pager_EXPORTS
+# define PAGER_API __GR_ATTR_EXPORT
+#else
+# define PAGER_API __GR_ATTR_IMPORT
+#endif
+
+#endif /* INCLUDED_PAGER_API_H */
diff --git a/gr-pager/lib/pager_flex_deinterleave.h b/gr-pager/lib/pager_flex_deinterleave.h
index 7211a71ad..87094490d 100644
--- a/gr-pager/lib/pager_flex_deinterleave.h
+++ b/gr-pager/lib/pager_flex_deinterleave.h
@@ -22,23 +22,24 @@
#ifndef INCLUDED_PAGER_FLEX_DEINTERLEAVE_H
#define INCLUDED_PAGER_FLEX_DEINTERLEAVE_H
+#include <pager_api.h>
#include <gr_sync_decimator.h>
class pager_flex_deinterleave;
typedef boost::shared_ptr<pager_flex_deinterleave> pager_flex_deinterleave_sptr;
-pager_flex_deinterleave_sptr pager_make_flex_deinterleave();
+PAGER_API pager_flex_deinterleave_sptr pager_make_flex_deinterleave();
/*!
* \brief flex deinterleave description
* \ingroup pager_blk
*/
-class pager_flex_deinterleave : public gr_sync_decimator
+class PAGER_API pager_flex_deinterleave : public gr_sync_decimator
{
private:
// Constructors
- friend pager_flex_deinterleave_sptr pager_make_flex_deinterleave();
+ friend PAGER_API pager_flex_deinterleave_sptr pager_make_flex_deinterleave();
pager_flex_deinterleave();
// One FLEX block of deinterleaved data
diff --git a/gr-pager/lib/pager_flex_frame.h b/gr-pager/lib/pager_flex_frame.h
index 1f4999e2b..857b49d29 100644
--- a/gr-pager/lib/pager_flex_frame.h
+++ b/gr-pager/lib/pager_flex_frame.h
@@ -21,6 +21,7 @@
#ifndef INCLUDED_PAGER_FLEX_FRAME_H
#define INCLUDED_PAGER_FLEX_FRAME_H
+#include <pager_api.h>
#include <boost/shared_ptr.hpp>
class pager_flex_frame;
@@ -29,15 +30,15 @@ typedef boost::shared_ptr<pager_flex_frame> pager_flex_frame_sptr;
/*!
* \brief public constructor for pager_flex_frame
*/
-pager_flex_frame_sptr pager_make_flex_frame();
+PAGER_API pager_flex_frame_sptr pager_make_flex_frame();
/*!
* \brief flex_frame.
*/
-class pager_flex_frame {
+class PAGER_API pager_flex_frame {
// Constructor is private to force use of shared_ptr
pager_flex_frame();
- friend pager_flex_frame_sptr pager_make_flex_frame();
+ friend PAGER_API pager_flex_frame_sptr pager_make_flex_frame();
public:
~pager_flex_frame();
diff --git a/gr-pager/lib/pager_flex_parse.h b/gr-pager/lib/pager_flex_parse.h
index 0f7cfb370..dcbd19eae 100644
--- a/gr-pager/lib/pager_flex_parse.h
+++ b/gr-pager/lib/pager_flex_parse.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_PAGER_FLEX_PARSE_H
#define INCLUDED_PAGER_FLEX_PARSE_H
+#include <pager_api.h>
#include <gr_sync_block.h>
#include <gr_msg_queue.h>
#include <pageri_flex_modes.h>
@@ -30,7 +31,7 @@
class pager_flex_parse;
typedef boost::shared_ptr<pager_flex_parse> pager_flex_parse_sptr;
-pager_flex_parse_sptr pager_make_flex_parse(gr_msg_queue_sptr queue, float freq);
+PAGER_API pager_flex_parse_sptr pager_make_flex_parse(gr_msg_queue_sptr queue, float freq);
#define FIELD_DELIM ((unsigned char)128)
@@ -38,11 +39,11 @@ pager_flex_parse_sptr pager_make_flex_parse(gr_msg_queue_sptr queue, float freq)
* \brief flex parse description
* \ingroup pager_blk
*/
-class pager_flex_parse : public gr_sync_block
+class PAGER_API 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);
+ friend PAGER_API 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;
diff --git a/gr-pager/lib/pager_flex_sync.h b/gr-pager/lib/pager_flex_sync.h
index b401bf532..53b6f950a 100644
--- a/gr-pager/lib/pager_flex_sync.h
+++ b/gr-pager/lib/pager_flex_sync.h
@@ -22,24 +22,25 @@
#ifndef INCLUDED_PAGER_FLEX_SYNC_H
#define INCLUDED_PAGER_FLEX_SYNC_H
+#include <pager_api.h>
#include <gr_block.h>
class pager_flex_sync;
typedef boost::shared_ptr<pager_flex_sync> pager_flex_sync_sptr;
typedef std::vector<gr_int64> gr_int64_vector;
-pager_flex_sync_sptr pager_make_flex_sync();
+PAGER_API pager_flex_sync_sptr pager_make_flex_sync();
/*!
* \brief flex sync description
* \ingroup pager_blk
*/
-class pager_flex_sync : public gr_block
+class PAGER_API pager_flex_sync : public gr_block
{
private:
// Constructors
- friend pager_flex_sync_sptr pager_make_flex_sync();
+ friend PAGER_API pager_flex_sync_sptr pager_make_flex_sync();
pager_flex_sync();
// State machine transitions
diff --git a/gr-pager/lib/pager_slicer_fb.h b/gr-pager/lib/pager_slicer_fb.h
index 75eea3cd3..b3d92780f 100644
--- a/gr-pager/lib/pager_slicer_fb.h
+++ b/gr-pager/lib/pager_slicer_fb.h
@@ -22,21 +22,22 @@
#ifndef INCLUDED_PAGER_SLICER_FB_H
#define INCLUDED_PAGER_SLICER_FB_H
+#include <pager_api.h>
#include <gr_sync_block.h>
class pager_slicer_fb;
typedef boost::shared_ptr<pager_slicer_fb> pager_slicer_fb_sptr;
-pager_slicer_fb_sptr pager_make_slicer_fb(float alpha);
+PAGER_API pager_slicer_fb_sptr pager_make_slicer_fb(float alpha);
/*!
* \brief slicer description
* \ingroup pager_blk
*/
-class pager_slicer_fb : public gr_sync_block
+class PAGER_API pager_slicer_fb : public gr_sync_block
{
private:
- friend pager_slicer_fb_sptr pager_make_slicer_fb(float alpha);
+ friend PAGER_API pager_slicer_fb_sptr pager_make_slicer_fb(float alpha);
pager_slicer_fb(float alpha);
unsigned char slice(float sample);
diff --git a/gr-pager/python/CMakeLists.txt b/gr-pager/python/CMakeLists.txt
new file mode 100644
index 000000000..bbbf35a71
--- /dev/null
+++ b/gr-pager/python/CMakeLists.txt
@@ -0,0 +1,49 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrPython)
+
+GR_PYTHON_INSTALL(
+ FILES
+ __init__.py
+ pager_utils.py
+ flex_demod.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/pager
+ COMPONENT "pager_python"
+)
+
+########################################################################
+# Handle the unit tests
+########################################################################
+if(ENABLE_TESTING)
+include(GrTest)
+file(GLOB py_qa_test_files "qa_*.py")
+foreach(py_qa_test_file ${py_qa_test_files})
+ get_filename_component(py_qa_test_name ${py_qa_test_file} NAME_WE)
+ set(GR_TEST_PYTHON_DIRS
+ ${CMAKE_BINARY_DIR}/gnuradio-core/src/python
+ ${CMAKE_BINARY_DIR}/gnuradio-core/src/lib/swig
+ ${CMAKE_BINARY_DIR}/gr-pager/python
+ ${CMAKE_BINARY_DIR}/gr-pager/swig
+ )
+ set(GR_TEST_TARGET_DEPS gruel gnuradio-core gnuradio-pager)
+ GR_ADD_TEST(${py_qa_test_name} ${PYTHON_EXECUTABLE} ${py_qa_test_file})
+endforeach(py_qa_test_file)
+endif(ENABLE_TESTING)
diff --git a/gr-pager/swig/CMakeLists.txt b/gr-pager/swig/CMakeLists.txt
new file mode 100644
index 000000000..bfb34c929
--- /dev/null
+++ b/gr-pager/swig/CMakeLists.txt
@@ -0,0 +1,51 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup swig generation
+########################################################################
+include(GrPython)
+include(GrSwig)
+
+set(GR_SWIG_INCLUDE_DIRS
+ ${GR_PAGER_INCLUDE_DIRS}
+ ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+)
+
+set(GR_SWIG_LIBRARIES gnuradio-pager)
+
+GR_SWIG_MAKE(pager_swig pager_swig.i)
+
+GR_SWIG_INSTALL(
+ TARGETS pager_swig
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/pager
+ COMPONENT "pager_python"
+)
+
+install(
+ FILES
+ pager_swig.i
+ pager_flex_deinterleave.i
+ pager_flex_frame.i
+ pager_flex_parse.i
+ pager_flex_sync.i
+ pager_slicer_fb.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "pager_swig"
+)
diff --git a/gr-qtgui/CMakeLists.txt b/gr-qtgui/CMakeLists.txt
new file mode 100644
index 000000000..ac2491b90
--- /dev/null
+++ b/gr-qtgui/CMakeLists.txt
@@ -0,0 +1,118 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup dependencies
+########################################################################
+include(GrBoost)
+
+find_package(Qt4 4.2.0 COMPONENTS QtCore QtGui)
+include(${QT_USE_FILE}) #sets up the environment
+
+find_package(Qwt)
+
+find_package(PythonLibs)
+
+include(GrPython)
+GR_PYTHON_CHECK_MODULE("PyQt4" PyQt4 True PYQT4_FOUND)
+
+########################################################################
+# Register component
+########################################################################
+include(GrComponent)
+GR_REGISTER_COMPONENT("gr-qtgui" ENABLE_GR_QTGUI
+ Boost_FOUND
+ QT4_FOUND
+ QWT_FOUND
+ ENABLE_GR_CORE
+ PYTHONLIBS_FOUND
+ PYQT4_FOUND
+)
+
+GR_SET_GLOBAL(GR_QTGUI_INCLUDE_DIRS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/lib
+ ${CMAKE_CURRENT_BINARY_DIR}/lib
+)
+
+########################################################################
+# Begin conditional configuration
+########################################################################
+if(ENABLE_GR_QTGUI)
+
+########################################################################
+# Setup CPack components
+########################################################################
+include(GrPackage)
+CPACK_SET(CPACK_COMPONENT_GROUP_QTGUI_DESCRIPTION "GNU Radio QtGUI Blocks")
+
+CPACK_COMPONENT("qtgui_runtime"
+ GROUP "QtGUI"
+ DISPLAY_NAME "Runtime"
+ DESCRIPTION "Runtime"
+ DEPENDS "core_runtime"
+)
+
+CPACK_COMPONENT("qtgui_devel"
+ GROUP "QtGUI"
+ DISPLAY_NAME "Development"
+ DESCRIPTION "C++ headers, package config, import libraries"
+ DEPENDS "core_devel"
+)
+
+CPACK_COMPONENT("qtgui_python"
+ GROUP "QtGUI"
+ DISPLAY_NAME "Python"
+ DESCRIPTION "Python modules for runtime; GRC xml files"
+ DEPENDS "core_python;qtgui_runtime"
+)
+
+CPACK_COMPONENT("qtgui_swig"
+ GROUP "QtGUI"
+ DISPLAY_NAME "SWIG"
+ DESCRIPTION "SWIG development .i files"
+ DEPENDS "core_swig;qtgui_python;qtgui_devel"
+)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(include)
+add_subdirectory(lib)
+if(ENABLE_PYTHON)
+ add_subdirectory(grc)
+ add_subdirectory(swig)
+ add_subdirectory(python)
+endif(ENABLE_PYTHON)
+
+########################################################################
+# Create Pkg Config File
+########################################################################
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-qtgui.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-qtgui.pc
+@ONLY)
+
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-qtgui.pc
+ DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
+ COMPONENT "qtgui_devel"
+)
+
+endif(ENABLE_GR_QTGUI)
diff --git a/gr-qtgui/grc/CMakeLists.txt b/gr-qtgui/grc/CMakeLists.txt
new file mode 100644
index 000000000..370a71725
--- /dev/null
+++ b/gr-qtgui/grc/CMakeLists.txt
@@ -0,0 +1,22 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+file(GLOB xml_files "*.xml")
+install(FILES ${xml_files} DESTINATION ${GRC_BLOCKS_DIR} COMPONENT "qtgui_python")
diff --git a/gr-qtgui/include/CMakeLists.txt b/gr-qtgui/include/CMakeLists.txt
new file mode 100644
index 000000000..ef4cb1175
--- /dev/null
+++ b/gr-qtgui/include/CMakeLists.txt
@@ -0,0 +1,32 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Install the header files
+########################################################################
+install(FILES
+ gr_qtgui_api.h
+ qtgui_time_sink_c.h
+ qtgui_time_sink_f.h
+ qtgui_sink_c.h
+ qtgui_sink_f.h
+ qtgui_util.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "qtgui_devel"
+)
diff --git a/gr-qtgui/lib/CMakeLists.txt b/gr-qtgui/lib/CMakeLists.txt
new file mode 100644
index 000000000..3290b1e77
--- /dev/null
+++ b/gr-qtgui/lib/CMakeLists.txt
@@ -0,0 +1,115 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup the QT file generations stuff
+########################################################################
+set(qtgui_moc_hdrs
+ spectrumdisplayform.h
+ timedisplayform.h
+ FrequencyDisplayPlot.h
+ TimeDomainDisplayPlot.h
+ WaterfallDisplayPlot.h
+ ConstellationDisplayPlot.h
+)
+QT4_WRAP_CPP(qtgui_moc_srcs ${qtgui_moc_hdrs})
+QT4_WRAP_UI(qtgui_ui_hdrs spectrumdisplayform.ui)
+
+#FIXME the sources expect <foo>.ui.h, but the macros generate ui_foo.h
+#avoid changing the sources by generating the header with the include
+set(spectrum_ui_hdr ${CMAKE_CURRENT_BINARY_DIR}/spectrumdisplayform.ui.h)
+if(NOT EXISTS ${spectrum_ui_hdr})
+ file(WRITE ${spectrum_ui_hdr} "#include <ui_spectrumdisplayform.h>\n")
+endif(NOT EXISTS ${spectrum_ui_hdr})
+
+set(qtgui_srcs
+ ${qtgui_moc_srcs}
+ ${qtgui_ui_hdrs}
+ FrequencyDisplayPlot.cc
+ TimeDomainDisplayPlot.cc
+ WaterfallDisplayPlot.cc
+ waterfallGlobalData.cc
+ ConstellationDisplayPlot.cc
+ spectrumdisplayform.cc
+ timedisplayform.cc
+ SpectrumGUIClass.cc
+ spectrumUpdateEvents.cc
+ plot_waterfall.cc
+ qtgui_sink_c.cc
+ qtgui_sink_f.cc
+ qtgui_time_sink_c.cc
+ qtgui_time_sink_f.cc
+ qtgui_util.cc
+)
+
+########################################################################
+# Setup the include and linker paths
+########################################################################
+include_directories(
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GR_QTGUI_INCLUDE_DIRS}
+)
+
+include_directories(${Boost_INCLUDE_DIRS})
+link_directories(${Boost_LIBRARY_DIRS})
+
+include_directories(${QWT_INCLUDE_DIRS})
+link_directories(${QWT_LIBRARY_DIRS})
+
+include_directories(${PYTHON_INCLUDE_DIRS})
+
+########################################################################
+# Setup library
+########################################################################
+list(APPEND qtgui_libs
+ gnuradio-core
+ ${QT_LIBRARIES}
+ ${QWT_LIBRARIES}
+ ${PYTHON_LIBRARIES}
+)
+
+add_definitions(-DQWT_DLL) #setup QWT library linkage
+add_library(gnuradio-qtgui SHARED ${qtgui_srcs})
+target_link_libraries(gnuradio-qtgui ${qtgui_libs})
+set_target_properties(gnuradio-qtgui PROPERTIES DEFINE_SYMBOL "libgnuradio_qtgui_EXPORTS")
+set_target_properties(gnuradio-qtgui PROPERTIES SOVERSION ${LIBVER})
+
+install(TARGETS gnuradio-qtgui
+ LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT "qtgui_runtime" # .so/.dylib file
+ ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT "qtgui_devel" # .lib file
+ RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT "qtgui_runtime" # .dll file
+)
+
+########################################################################
+# Install the header files
+########################################################################
+install(FILES
+ FrequencyDisplayPlot.h
+ TimeDomainDisplayPlot.h
+ WaterfallDisplayPlot.h
+ waterfallGlobalData.h
+ ConstellationDisplayPlot.h
+ highResTimeFunctions.h
+ plot_waterfall.h
+ spectrumdisplayform.h
+ SpectrumGUIClass.h
+ spectrumUpdateEvents.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "qtgui_devel"
+)
diff --git a/gr-qtgui/python/CMakeLists.txt b/gr-qtgui/python/CMakeLists.txt
new file mode 100644
index 000000000..e61b54f08
--- /dev/null
+++ b/gr-qtgui/python/CMakeLists.txt
@@ -0,0 +1,46 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrPython)
+
+GR_PYTHON_INSTALL(
+ FILES __init__.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/qtgui
+ COMPONENT "qtgui_python"
+)
+
+########################################################################
+# Handle the unit tests
+########################################################################
+if(ENABLE_TESTING)
+include(GrTest)
+file(GLOB py_qa_test_files "qa_*.py")
+foreach(py_qa_test_file ${py_qa_test_files})
+ get_filename_component(py_qa_test_name ${py_qa_test_file} NAME_WE)
+ set(GR_TEST_PYTHON_DIRS
+ ${CMAKE_BINARY_DIR}/gnuradio-core/src/python
+ ${CMAKE_BINARY_DIR}/gnuradio-core/src/lib/swig
+ ${CMAKE_BINARY_DIR}/gr-qtgui/python
+ ${CMAKE_BINARY_DIR}/gr-qtgui/swig
+ )
+ set(GR_TEST_TARGET_DEPS gruel gnuradio-core gnuradio-qtgui)
+ GR_ADD_TEST(${py_qa_test_name} ${PYTHON_EXECUTABLE} ${py_qa_test_file})
+endforeach(py_qa_test_file)
+endif(ENABLE_TESTING)
diff --git a/gr-qtgui/swig/CMakeLists.txt b/gr-qtgui/swig/CMakeLists.txt
new file mode 100644
index 000000000..234af5a68
--- /dev/null
+++ b/gr-qtgui/swig/CMakeLists.txt
@@ -0,0 +1,49 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup swig generation
+########################################################################
+include(GrPython)
+include(GrSwig)
+
+set(GR_SWIG_INCLUDE_DIRS
+ ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GR_QTGUI_INCLUDE_DIRS}
+ ${QWT_INCLUDE_DIRS}
+)
+
+set(GR_SWIG_LIBRARIES gnuradio-qtgui)
+
+GR_SWIG_MAKE(qtgui_swig qtgui_swig.i)
+
+GR_SWIG_INSTALL(
+ TARGETS qtgui_swig
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/qtgui
+ COMPONENT "qtgui_python"
+)
+
+install(FILES
+ qtgui_sink_c.i
+ qtgui_sink_f.i
+ qtgui_time_sink_c.i
+ qtgui_time_sink_f.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "qtgui_swig"
+)
diff --git a/gr-trellis/CMakeLists.txt b/gr-trellis/CMakeLists.txt
new file mode 100644
index 000000000..dc077571c
--- /dev/null
+++ b/gr-trellis/CMakeLists.txt
@@ -0,0 +1,117 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup dependencies
+########################################################################
+include(GrBoost)
+
+########################################################################
+# Register component
+########################################################################
+include(GrComponent)
+GR_REGISTER_COMPONENT("gr-trellis" ENABLE_GR_TRELLIS
+ Boost_FOUND
+ ENABLE_GR_CORE
+ ENABLE_GR_DIGITAL
+)
+
+GR_SET_GLOBAL(GR_TRELLIS_INCLUDE_DIRS
+ ${CMAKE_CURRENT_BINARY_DIR}/src/lib
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/lib
+)
+
+########################################################################
+# Begin conditional configuration
+########################################################################
+if(ENABLE_GR_TRELLIS)
+
+########################################################################
+# Setup CPack components
+########################################################################
+include(GrPackage)
+CPACK_SET(CPACK_COMPONENT_GROUP_TRELLIS_DESCRIPTION "GNU Radio Trellis Blocks")
+
+CPACK_COMPONENT("trellis_docs"
+ GROUP "Trellis"
+ DISPLAY_NAME "Documentation"
+ DESCRIPTION "Doxygen HTML and XML"
+)
+
+CPACK_COMPONENT("trellis_runtime"
+ GROUP "Trellis"
+ DISPLAY_NAME "Runtime"
+ DESCRIPTION "Dynamic link libraries"
+ DEPENDS "core_runtime"
+)
+
+CPACK_COMPONENT("trellis_devel"
+ GROUP "Trellis"
+ DISPLAY_NAME "Development"
+ DESCRIPTION "C++ headers, package config, import libraries"
+ DEPENDS "core_devel"
+)
+
+CPACK_COMPONENT("trellis_python"
+ GROUP "Trellis"
+ DISPLAY_NAME "Python"
+ DESCRIPTION "Python modules for runtime"
+ DEPENDS "core_python;trellis_runtime"
+)
+
+CPACK_COMPONENT("trellis_examples"
+ GROUP "Trellis"
+ DISPLAY_NAME "Examples"
+ DESCRIPTION "Python examples for trellis"
+ DEPENDS "trellis_python"
+)
+
+CPACK_COMPONENT("trellis_swig"
+ GROUP "Trellis"
+ DISPLAY_NAME "SWIG"
+ DESCRIPTION "SWIG development .i files"
+ DEPENDS "core_swig;trellis_python;trellis_devel"
+)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(src/lib)
+add_subdirectory(doc)
+if(ENABLE_PYTHON)
+ add_subdirectory(grc)
+ add_subdirectory(src/python)
+ add_subdirectory(src/examples)
+endif(ENABLE_PYTHON)
+
+########################################################################
+# Create Pkg Config File
+########################################################################
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-trellis.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-trellis.pc
+@ONLY)
+
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-trellis.pc
+ DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
+ COMPONENT "trellis_devel"
+)
+
+endif(ENABLE_GR_TRELLIS)
diff --git a/gr-trellis/doc/CMakeLists.txt b/gr-trellis/doc/CMakeLists.txt
new file mode 100644
index 000000000..a45202861
--- /dev/null
+++ b/gr-trellis/doc/CMakeLists.txt
@@ -0,0 +1,73 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrPython)
+
+########################################################################
+# Generate HTML doc with xmlto
+########################################################################
+find_program(XMLTO_EXECUTABLE xmlto)
+
+if(XMLTO_EXECUTABLE)
+add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/gr-trellis.html
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/gr-trellis.xml
+ COMMAND ${XMLTO_EXECUTABLE} html-nochunks
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr-trellis.xml
+)
+add_custom_target(gr_trellis_html ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/gr-trellis.html)
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/gr-trellis.html
+ DESTINATION ${GR_PKG_DOC_DIR}/html
+ COMPONENT "trellis_docs"
+
+)
+endif(XMLTO_EXECUTABLE)
+
+########################################################################
+# Generate xml doc
+########################################################################
+add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/test_tcm.py.xml
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/test_tcm.py
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/make_numbered_listing.py
+ COMMAND ${PYTHON_EXECUTABLE}
+ ${CMAKE_CURRENT_SOURCE_DIR}/make_numbered_listing.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/test_tcm.py
+)
+
+add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/test_viterbi_equalization1.py.xml
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/test_viterbi_equalization1.py
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/make_numbered_listing.py
+ COMMAND ${PYTHON_EXECUTABLE}
+ ${CMAKE_CURRENT_SOURCE_DIR}/make_numbered_listing.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/test_viterbi_equalization1.py
+)
+
+add_custom_target(gr_trellis_xml ALL DEPENDS
+ ${CMAKE_CURRENT_BINARY_DIR}/test_tcm.py.xml
+ ${CMAKE_CURRENT_BINARY_DIR}/test_viterbi_equalization1.py.xml
+)
+install(FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/test_tcm.py.xml
+ ${CMAKE_CURRENT_BINARY_DIR}/test_viterbi_equalization1.py.xml
+ DESTINATION ${GR_PKG_DOC_DIR}/xml
+ COMPONENT "trellis_docs"
+)
diff --git a/gr-trellis/grc/CMakeLists.txt b/gr-trellis/grc/CMakeLists.txt
new file mode 100644
index 000000000..d60d64872
--- /dev/null
+++ b/gr-trellis/grc/CMakeLists.txt
@@ -0,0 +1,36 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+install(FILES
+ trellis_encoder_xx.xml
+ trellis_siso_combined_f.xml
+ trellis_viterbi_x.xml
+ trellis_metrics_x.xml
+ trellis_siso_f.xml
+ trellis_permutation.xml
+ trellis_viterbi_combined_xx.xml
+ trellis_sccc_encoder_xx.xml
+ trellis_sccc_decoder_x.xml
+ trellis_sccc_decoder_combined_xx.xml
+ trellis_pccc_encoder_xx.xml
+ trellis_pccc_decoder_x.xml
+ trellis_pccc_decoder_combined_xx.xml
+ DESTINATION ${GRC_BLOCKS_DIR}
+ COMPONENT "trellis_python"
+)
diff --git a/gr-trellis/src/examples/CMakeLists.txt b/gr-trellis/src/examples/CMakeLists.txt
new file mode 100644
index 000000000..0d9589908
--- /dev/null
+++ b/gr-trellis/src/examples/CMakeLists.txt
@@ -0,0 +1,64 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrPython)
+
+GR_PYTHON_INSTALL(
+ PROGRAMS
+ fsm_utils.py
+ test_tcm.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
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/trellis
+ COMPONENT "trellis_examples"
+)
+
+install(
+ FILES README
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/trellis
+ COMPONENT "trellis_examples"
+)
+
+install(
+ FILES
+ fsm_files/awgn1o2_128.fsm
+ fsm_files/awgn1o2_16.fsm
+ fsm_files/awgn1o2_4.fsm
+ fsm_files/awgn1o2_8.fsm
+ fsm_files/awgn2o3_16.fsm
+ fsm_files/awgn2o3_4.fsm
+ fsm_files/awgn2o3_4_msb.fsm
+ fsm_files/awgn2o3_4_msbG.fsm
+ fsm_files/awgn2o3_8.fsm
+ fsm_files/awgn2o4_4.fsm
+ fsm_files/disconnected.fsm
+ fsm_files/rep3.fsm
+ fsm_files/rep5.fsm
+ fsm_files/simple.fsm
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/trellis/fsm_files
+ COMPONENT "trellis_examples"
+)
diff --git a/gr-trellis/src/lib/CMakeLists.txt b/gr-trellis/src/lib/CMakeLists.txt
new file mode 100644
index 000000000..673032638
--- /dev/null
+++ b/gr-trellis/src/lib/CMakeLists.txt
@@ -0,0 +1,236 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup the include and linker paths
+########################################################################
+include_directories(
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GR_TRELLIS_INCLUDE_DIRS}
+ ${GR_DIGITAL_INCLUDE_DIRS}
+)
+
+include_directories(${Boost_INCLUDE_DIRS})
+link_directories(${Boost_LIBRARY_DIRS})
+
+########################################################################
+# generate the python helper script which calls into the build utils
+########################################################################
+file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py "
+#!${PYTHON_EXECUTABLE}
+
+import sys, os, re
+sys.path.append('${GR_CORE_PYTHONPATH}')
+sys.path.append('${CMAKE_CURRENT_SOURCE_DIR}')
+os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
+os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
+
+if __name__ == '__main__':
+ import build_utils, generate_trellis
+ root, inp = sys.argv[1:3]
+ for sig in sys.argv[3:]:
+ name = re.sub ('X+', sig, root)
+ d = generate_trellis.standard_dict(name, sig)
+ build_utils.expand_template(d, inp)
+
+")
+
+########################################################################
+# generation helper macro to generate various files from template
+########################################################################
+macro(expand_h_cc_i root)
+
+ foreach(ext h cc i)
+ #make a list of all the generated files
+ unset(expanded_files_${ext})
+ foreach(sig ${ARGN})
+ string(REGEX REPLACE "X+" ${sig} name ${root})
+ list(APPEND expanded_files_${ext} ${CMAKE_CURRENT_BINARY_DIR}/${name}.${ext})
+ endforeach(sig)
+
+ #create a command to generate the files
+ add_custom_command(
+ OUTPUT ${expanded_files_${ext}}
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.${ext}.t
+ COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
+ ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
+ ${root} ${root}.${ext}.t ${ARGN}
+ )
+ endforeach(ext)
+
+ #make source files depends on headers to force generation
+ set_source_files_properties(${expanded_files_cc}
+ PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
+ )
+
+ #install rules for the generated cc, h, and i files
+ list(APPEND generated_trellis_sources ${expanded_files_cc})
+ list(APPEND generated_trellis_includes ${expanded_files_h})
+ list(APPEND generated_trellis_swigs ${expanded_files_i})
+
+endmacro(expand_h_cc_i)
+
+########################################################################
+# Invoke macro to generate various sources
+########################################################################
+expand_h_cc_i(trellis_encoder_XX bb bs bi ss si ii)
+expand_h_cc_i(trellis_sccc_encoder_XX bb bs bi ss si ii)
+expand_h_cc_i(trellis_pccc_encoder_XX bb bs bi ss si ii)
+expand_h_cc_i(trellis_metrics_X s i f c)
+expand_h_cc_i(trellis_viterbi_X b s i)
+expand_h_cc_i(trellis_viterbi_combined_XX sb ss si ib is ii fb fs fi cb cs ci)
+expand_h_cc_i(trellis_sccc_decoder_X b s i)
+expand_h_cc_i(trellis_sccc_decoder_combined_XX fb fs fi cb cs ci)
+expand_h_cc_i(trellis_pccc_decoder_X b s i)
+expand_h_cc_i(trellis_pccc_decoder_combined_XX fb fs fi cb cs ci)
+
+add_custom_target(trellis_generated DEPENDS
+ ${generated_trellis_includes}
+ ${generated_trellis_swigs}
+)
+
+########################################################################
+# Create the master trellis swig include files
+########################################################################
+file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/trellis_generated.py "
+import os, sys
+if __name__ == '__main__':
+ incs = sys.argv[2:]
+ h_incs = '\\n'.join(['#include<%s.h>'%(os.path.splitext(os.path.basename(inc))[0]) for inc in incs])
+ i_incs = '\\n'.join(['%%include<%s>'%(os.path.basename(inc)) for inc in incs])
+ open(sys.argv[1], 'w').write('''
+//
+// This file is machine generated. All edits will be overwritten
+//
+
+%%{
+%s
+%%}
+
+%s
+
+'''%(h_incs, i_incs))
+")
+
+add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/trellis_generated.i
+ DEPENDS ${generated_trellis_swigs}
+ COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
+ ${CMAKE_CURRENT_BINARY_DIR}/trellis_generated.py
+ ${CMAKE_CURRENT_BINARY_DIR}/trellis_generated.i
+ ${generated_trellis_swigs}
+)
+
+########################################################################
+# Setup library
+########################################################################
+list(APPEND gr_trellis_sources
+ fsm.cc
+ quicksort_index.cc
+ base.cc
+ interleaver.cc
+ calc_metric.cc
+ core_algorithms.cc
+ trellis_permutation.cc
+ trellis_siso_f.cc
+ trellis_siso_combined_f.cc
+ trellis_constellation_metrics_cf.cc
+ ${generated_trellis_sources}
+)
+
+list(APPEND trellis_libs
+ gnuradio-core
+ ${Boost_LIBRARIES}
+)
+
+add_library(gnuradio-trellis SHARED ${gr_trellis_sources})
+target_link_libraries(gnuradio-trellis ${trellis_libs})
+set_target_properties(gnuradio-trellis PROPERTIES DEFINE_SYMBOL "gnuradio_trellis_EXPORTS")
+set_target_properties(gnuradio-trellis PROPERTIES SOVERSION ${LIBVER})
+
+install(TARGETS gnuradio-trellis
+ LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT "trellis_runtime" # .so/.dylib file
+ ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT "trellis_devel" # .lib file
+ RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT "trellis_runtime" # .dll file
+)
+
+########################################################################
+# Handle the generated sources + a few non-generated ones
+########################################################################
+install(FILES
+ ${generated_trellis_includes}
+ trellis_api.h
+ fsm.h
+ quicksort_index.h
+ base.h
+ interleaver.h
+ calc_metric.h
+ core_algorithms.h
+ trellis_permutation.h
+ siso_type.h
+ trellis_siso_f.h
+ trellis_siso_combined_f.h
+ trellis_constellation_metrics_cf.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "trellis_devel"
+)
+
+if(ENABLE_PYTHON)
+ install(FILES
+ ${generated_trellis_swigs}
+ fsm.i
+ interleaver.i
+ trellis_permutation.i
+ trellis_siso_f.i
+ trellis_siso_combined_f.i
+ trellis_constellation_metrics_cf.i
+ ${CMAKE_CURRENT_BINARY_DIR}/trellis_generated.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "trellis_swig"
+ )
+
+########################################################################
+# Setup swig generation
+########################################################################
+include(GrPython)
+include(GrSwig)
+
+set(GR_SWIG_SOURCE_DEPS ${CMAKE_CURRENT_BINARY_DIR}/trellis_generated.i)
+set(GR_SWIG_TARGET_DEPS trellis_generated trellis_generated_index)
+set(GR_SWIG_INCLUDE_DIRS
+ ${GR_TRELLIS_INCLUDE_DIRS}
+ ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+ ${GR_DIGITAL_SWIG_INCLUDE_DIRS}
+)
+set(GR_SWIG_LIBRARIES gnuradio-trellis)
+GR_SWIG_MAKE(trellis trellis.i)
+
+GR_SWIG_INSTALL(
+ TARGETS trellis
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio
+ COMPONENT "trellis_python"
+)
+
+install(
+ FILES trellis.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "trellis_swig"
+)
+
+endif(ENABLE_PYTHON)
diff --git a/gr-trellis/src/lib/Makefile.am b/gr-trellis/src/lib/Makefile.am
index e0b254756..435a093d6 100644
--- a/gr-trellis/src/lib/Makefile.am
+++ b/gr-trellis/src/lib/Makefile.am
@@ -82,6 +82,7 @@ EXTRA_DIST += \
# These headers get installed in ${prefix}/include/gnuradio
grinclude_HEADERS = \
+ trellis_api.h \
fsm.h \
quicksort_index.h \
base.h \
diff --git a/gr-trellis/src/lib/fsm.h b/gr-trellis/src/lib/fsm.h
index 134bbf26e..7dc7e0d9d 100644
--- a/gr-trellis/src/lib/fsm.h
+++ b/gr-trellis/src/lib/fsm.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_TRELLIS_FSM_H
#define INCLUDED_TRELLIS_FSM_H
+#include <trellis_api.h>
#include <vector>
#include <iosfwd>
@@ -33,7 +34,7 @@
* rather than the FSM itself. It particular the state of the FSM
* is not stored within an instance of this class.
*/
-class fsm {
+class TRELLIS_API fsm {
private:
// Input alphabet cardinality.
int d_I;
diff --git a/gr-trellis/src/lib/interleaver.h b/gr-trellis/src/lib/interleaver.h
index f6a289c52..fbd378d62 100644
--- a/gr-trellis/src/lib/interleaver.h
+++ b/gr-trellis/src/lib/interleaver.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_TRELLIS_INTERLEAVER_H
#define INCLUDED_TRELLIS_INTERLEAVER_H
+#include <trellis_api.h>
#include <vector>
/*!
* \brief INTERLEAVER class
*/
-class interleaver {
+class TRELLIS_API interleaver {
private:
int d_K;
std::vector<int> d_INTER;
diff --git a/gr-trellis/src/lib/trellis_api.h b/gr-trellis/src/lib/trellis_api.h
new file mode 100644
index 000000000..c09b340d6
--- /dev/null
+++ b/gr-trellis/src/lib/trellis_api.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2011 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along 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_TRELLIS_API_H
+#define INCLUDED_TRELLIS_API_H
+
+#include <gruel/attributes.h>
+
+#ifdef gnuradio_trellis_EXPORTS
+# define TRELLIS_API __GR_ATTR_EXPORT
+#else
+# define TRELLIS_API __GR_ATTR_IMPORT
+#endif
+
+#endif /* INCLUDED_TRELLIS_API_H */
diff --git a/gr-trellis/src/lib/trellis_constellation_metrics_cf.h b/gr-trellis/src/lib/trellis_constellation_metrics_cf.h
index a34c335ec..1851bb89c 100644
--- a/gr-trellis/src/lib/trellis_constellation_metrics_cf.h
+++ b/gr-trellis/src/lib/trellis_constellation_metrics_cf.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_TRELLIS_CONSTELLATION_METRICS_CF_H
#define INCLUDED_TRELLIS_CONSTELLATION_METRICS_CF_H
+#include <trellis_api.h>
#include <gr_block.h>
#include <digital_constellation.h>
#include <digital_metric_type.h>
@@ -30,13 +31,13 @@
class trellis_constellation_metrics_cf;
typedef boost::shared_ptr<trellis_constellation_metrics_cf> trellis_constellation_metrics_cf_sptr;
-trellis_constellation_metrics_cf_sptr trellis_make_constellation_metrics_cf (digital_constellation_sptr constellation, trellis_metric_type_t TYPE);
+TRELLIS_API trellis_constellation_metrics_cf_sptr trellis_make_constellation_metrics_cf (digital_constellation_sptr constellation, trellis_metric_type_t TYPE);
/*!
* \brief Evaluate metrics for use by the Viterbi algorithm.
* \ingroup coding_blk
*/
-class trellis_constellation_metrics_cf : public gr_block
+class TRELLIS_API trellis_constellation_metrics_cf : public gr_block
{
public:
void forecast (int noutput_items,
@@ -53,7 +54,7 @@ class trellis_constellation_metrics_cf : public gr_block
trellis_metric_type_t d_TYPE;
unsigned int d_O;
unsigned int d_D;
- friend trellis_constellation_metrics_cf_sptr trellis_make_constellation_metrics_cf (digital_constellation_sptr constellation, trellis_metric_type_t TYPE);
+ friend TRELLIS_API trellis_constellation_metrics_cf_sptr trellis_make_constellation_metrics_cf (digital_constellation_sptr constellation, trellis_metric_type_t TYPE);
};
diff --git a/gr-trellis/src/lib/trellis_encoder_XX.h.t b/gr-trellis/src/lib/trellis_encoder_XX.h.t
index b56fde0bf..4038caac9 100644
--- a/gr-trellis/src/lib/trellis_encoder_XX.h.t
+++ b/gr-trellis/src/lib/trellis_encoder_XX.h.t
@@ -25,22 +25,23 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <trellis_api.h>
#include "fsm.h"
#include <gr_sync_block.h>
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, int ST);
+TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, int ST);
/*!
* \brief Convolutional encoder.
* \ingroup coding_blk
*/
-class @NAME@ : public gr_sync_block
+class TRELLIS_API @NAME@ : public gr_sync_block
{
private:
- friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, int ST);
+ friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, int ST);
fsm d_FSM;
int d_ST;
@NAME@ (const fsm &FSM, int ST);
diff --git a/gr-trellis/src/lib/trellis_metrics_X.h.t b/gr-trellis/src/lib/trellis_metrics_X.h.t
index 45d4ace10..809c27e65 100644
--- a/gr-trellis/src/lib/trellis_metrics_X.h.t
+++ b/gr-trellis/src/lib/trellis_metrics_X.h.t
@@ -25,26 +25,27 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <trellis_api.h>
#include <gr_block.h>
#include "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);
+TRELLIS_API @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
+class TRELLIS_API @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);
+ friend TRELLIS_API @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:
diff --git a/gr-trellis/src/lib/trellis_pccc_decoder_X.h.t b/gr-trellis/src/lib/trellis_pccc_decoder_X.h.t
index 2a5b43df6..a58a03264 100644
--- a/gr-trellis/src/lib/trellis_pccc_decoder_X.h.t
+++ b/gr-trellis/src/lib/trellis_pccc_decoder_X.h.t
@@ -25,6 +25,7 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <trellis_api.h>
#include "fsm.h"
#include "interleaver.h"
#include <gr_block.h>
@@ -34,7 +35,7 @@
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ trellis_make_@BASE_NAME@ (
+TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (
const fsm &FSM1, int ST10, int ST1K,
const fsm &FSM2, int ST20, int ST2K,
const interleaver &INTERLEAVER,
@@ -47,7 +48,7 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
/*!
* \ingroup coding_blk
*/
-class @NAME@ : public gr_block
+class TRELLIS_API @NAME@ : public gr_block
{
fsm d_FSM1;
int d_ST10;
@@ -61,7 +62,7 @@ class @NAME@ : public gr_block
trellis_siso_type_t d_SISO_TYPE;
std::vector<float> d_buffer;
- friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (
+ friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (
const fsm &FSM1, int ST10, int ST1K,
const fsm &FSM2, int ST20, int ST2K,
const interleaver &INTERLEAVER,
diff --git a/gr-trellis/src/lib/trellis_pccc_decoder_combined_XX.h.t b/gr-trellis/src/lib/trellis_pccc_decoder_combined_XX.h.t
index dd9979af9..6d177cca2 100644
--- a/gr-trellis/src/lib/trellis_pccc_decoder_combined_XX.h.t
+++ b/gr-trellis/src/lib/trellis_pccc_decoder_combined_XX.h.t
@@ -25,6 +25,7 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <trellis_api.h>
#include "fsm.h"
#include "interleaver.h"
#include <gr_block.h>
@@ -35,7 +36,7 @@
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ trellis_make_@BASE_NAME@ (
+TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (
const fsm &FSMo, int STo0, int SToK,
const fsm &FSMi, int STi0, int STiK,
const interleaver &INTERLEAVER,
@@ -52,7 +53,7 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
/*!
* \ingroup coding_blk
*/
-class @NAME@ : public gr_block
+class TRELLIS_API @NAME@ : public gr_block
{
fsm d_FSMo;
fsm d_FSMi;
@@ -70,7 +71,7 @@ class @NAME@ : public gr_block
float d_scaling;
std::vector<float> d_buffer;
- friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (
+ friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (
const fsm &FSMo, int STo0, int SToK,
const fsm &FSMi, int STi0, int STiK,
const interleaver &INTERLEAVER,
diff --git a/gr-trellis/src/lib/trellis_pccc_encoder_XX.h.t b/gr-trellis/src/lib/trellis_pccc_encoder_XX.h.t
index 68ccf75db..2b6110e37 100644
--- a/gr-trellis/src/lib/trellis_pccc_encoder_XX.h.t
+++ b/gr-trellis/src/lib/trellis_pccc_encoder_XX.h.t
@@ -25,6 +25,7 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <trellis_api.h>
#include <vector>
#include "fsm.h"
#include "interleaver.h"
@@ -33,7 +34,7 @@
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ trellis_make_@BASE_NAME@ (
+TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (
const fsm &FSM1, int ST1,
const fsm &FSM2, int ST2,
const interleaver &INTERLEAVER,
@@ -44,10 +45,10 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
* \brief SCCC encoder.
* \ingroup coding_blk
*/
-class @NAME@ : public gr_sync_block
+class TRELLIS_API @NAME@ : public gr_sync_block
{
private:
- friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (
+ friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (
const fsm &FSM1, int ST1,
const fsm &FSM2, int ST2,
const interleaver &INTERLEAVER,
diff --git a/gr-trellis/src/lib/trellis_permutation.h b/gr-trellis/src/lib/trellis_permutation.h
index a5c858a8b..2786de29a 100644
--- a/gr-trellis/src/lib/trellis_permutation.h
+++ b/gr-trellis/src/lib/trellis_permutation.h
@@ -24,22 +24,23 @@
#ifndef INCLUDED_TRELLIS_PERMUTATION_H
#define INCLUDED_TRELLIS_PERMUTATION_H
+#include <trellis_api.h>
#include <vector>
#include <gr_sync_block.h>
class trellis_permutation;
typedef boost::shared_ptr<trellis_permutation> trellis_permutation_sptr;
-trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t BYTES_PER_SYMBOL);
+TRELLIS_API trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t BYTES_PER_SYMBOL);
/*!
* \brief Permutation.
* \ingroup coding_blk
*/
-class trellis_permutation : public gr_sync_block
+class TRELLIS_API trellis_permutation : public gr_sync_block
{
private:
- friend trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t BYTES_PER_SYMBOL);
+ friend TRELLIS_API trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t BYTES_PER_SYMBOL);
int d_K;
std::vector<int> d_TABLE;
int d_SYMS_PER_BLOCK;
diff --git a/gr-trellis/src/lib/trellis_sccc_decoder_X.h.t b/gr-trellis/src/lib/trellis_sccc_decoder_X.h.t
index 93c9ac9b8..9857c6a34 100644
--- a/gr-trellis/src/lib/trellis_sccc_decoder_X.h.t
+++ b/gr-trellis/src/lib/trellis_sccc_decoder_X.h.t
@@ -25,6 +25,7 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <trellis_api.h>
#include "fsm.h"
#include "interleaver.h"
#include <gr_block.h>
@@ -34,7 +35,7 @@
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ trellis_make_@BASE_NAME@ (
+TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (
const fsm &FSMo, int STo0, int SToK,
const fsm &FSMi, int STi0, int STiK,
const interleaver &INTERLEAVER,
@@ -47,7 +48,7 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
/*!
* \ingroup coding_blk
*/
-class @NAME@ : public gr_block
+class TRELLIS_API @NAME@ : public gr_block
{
fsm d_FSMo;
int d_STo0;
@@ -61,7 +62,7 @@ class @NAME@ : public gr_block
trellis_siso_type_t d_SISO_TYPE;
std::vector<float> d_buffer;
- friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (
+ friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (
const fsm &FSMo, int STo0, int SToK,
const fsm &FSMi, int STi0, int STiK,
const interleaver &INTERLEAVER,
diff --git a/gr-trellis/src/lib/trellis_sccc_decoder_combined_XX.h.t b/gr-trellis/src/lib/trellis_sccc_decoder_combined_XX.h.t
index 225a07ffe..5d2c2b85c 100644
--- a/gr-trellis/src/lib/trellis_sccc_decoder_combined_XX.h.t
+++ b/gr-trellis/src/lib/trellis_sccc_decoder_combined_XX.h.t
@@ -25,6 +25,7 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <trellis_api.h>
#include "fsm.h"
#include "interleaver.h"
#include <gr_block.h>
@@ -35,7 +36,7 @@
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ trellis_make_@BASE_NAME@ (
+TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (
const fsm &FSMo, int STo0, int SToK,
const fsm &FSMi, int STi0, int STiK,
const interleaver &INTERLEAVER,
@@ -52,7 +53,7 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
/*!
* \ingroup coding_blk
*/
-class @NAME@ : public gr_block
+class TRELLIS_API @NAME@ : public gr_block
{
fsm d_FSMo;
int d_STo0;
@@ -70,7 +71,7 @@ class @NAME@ : public gr_block
float d_scaling;
std::vector<float> d_buffer;
- friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (
+ friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (
const fsm &FSMo, int STo0, int SToK,
const fsm &FSMi, int STi0, int STiK,
const interleaver &INTERLEAVER,
diff --git a/gr-trellis/src/lib/trellis_sccc_encoder_XX.h.t b/gr-trellis/src/lib/trellis_sccc_encoder_XX.h.t
index a9e4dc454..0e8ff45a4 100644
--- a/gr-trellis/src/lib/trellis_sccc_encoder_XX.h.t
+++ b/gr-trellis/src/lib/trellis_sccc_encoder_XX.h.t
@@ -25,6 +25,7 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <trellis_api.h>
#include <vector>
#include "fsm.h"
#include "interleaver.h"
@@ -33,7 +34,7 @@
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ trellis_make_@BASE_NAME@ (
+TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (
const fsm &FSMo, int STo,
const fsm &FSMi, int STi,
const interleaver &INTERLEAVER,
@@ -44,10 +45,10 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
* \brief SCCC encoder.
* \ingroup coding_blk
*/
-class @NAME@ : public gr_sync_block
+class TRELLIS_API @NAME@ : public gr_sync_block
{
private:
- friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (
+ friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (
const fsm &FSMo, int STo,
const fsm &FSMi, int STi,
const interleaver &INTERLEAVER,
diff --git a/gr-trellis/src/lib/trellis_siso_combined_f.h b/gr-trellis/src/lib/trellis_siso_combined_f.h
index 786e79386..2d043df62 100644
--- a/gr-trellis/src/lib/trellis_siso_combined_f.h
+++ b/gr-trellis/src/lib/trellis_siso_combined_f.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_TRELLIS_SISO_COMBINED_F_H
#define INCLUDED_TRELLIS_SISO_COMBINED_F_H
+#include <trellis_api.h>
#include "fsm.h"
#include "siso_type.h"
#include "calc_metric.h"
@@ -32,7 +33,7 @@
class trellis_siso_combined_f;
typedef boost::shared_ptr<trellis_siso_combined_f> trellis_siso_combined_f_sptr;
-trellis_siso_combined_f_sptr trellis_make_siso_combined_f (
+TRELLIS_API trellis_siso_combined_f_sptr trellis_make_siso_combined_f (
const fsm &FSM, // underlying FSM
int K, // block size in trellis steps
int S0, // initial state (put -1 if not specified)
@@ -48,7 +49,7 @@ trellis_siso_combined_f_sptr trellis_make_siso_combined_f (
/*!
* \ingroup coding_blk
*/
-class trellis_siso_combined_f : public gr_block
+class TRELLIS_API trellis_siso_combined_f : public gr_block
{
fsm d_FSM;
int d_K;
@@ -63,7 +64,7 @@ class trellis_siso_combined_f : public gr_block
//std::vector<float> d_alpha;
//std::vector<float> d_beta;
- friend trellis_siso_combined_f_sptr trellis_make_siso_combined_f (
+ friend TRELLIS_API trellis_siso_combined_f_sptr trellis_make_siso_combined_f (
const fsm &FSM,
int K,
int S0,
diff --git a/gr-trellis/src/lib/trellis_siso_f.h b/gr-trellis/src/lib/trellis_siso_f.h
index 0e2cba67a..b3d02ad05 100644
--- a/gr-trellis/src/lib/trellis_siso_f.h
+++ b/gr-trellis/src/lib/trellis_siso_f.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_TRELLIS_SISO_F_H
#define INCLUDED_TRELLIS_SISO_F_H
+#include <trellis_api.h>
#include "fsm.h"
#include "siso_type.h"
#include "core_algorithms.h"
@@ -31,7 +32,7 @@
class trellis_siso_f;
typedef boost::shared_ptr<trellis_siso_f> trellis_siso_f_sptr;
-trellis_siso_f_sptr trellis_make_siso_f (
+TRELLIS_API trellis_siso_f_sptr trellis_make_siso_f (
const fsm &FSM, // underlying FSM
int K, // block size in trellis steps
int S0, // initial state (put -1 if not specified)
@@ -45,7 +46,7 @@ trellis_siso_f_sptr trellis_make_siso_f (
/*!
* \ingroup coding_blk
*/
-class trellis_siso_f : public gr_block
+class TRELLIS_API trellis_siso_f : public gr_block
{
fsm d_FSM;
int d_K;
@@ -57,7 +58,7 @@ class trellis_siso_f : public gr_block
//std::vector<float> d_alpha;
//std::vector<float> d_beta;
- friend trellis_siso_f_sptr trellis_make_siso_f (
+ friend TRELLIS_API trellis_siso_f_sptr trellis_make_siso_f (
const fsm &FSM,
int K,
int S0,
diff --git a/gr-trellis/src/lib/trellis_viterbi_X.h.t b/gr-trellis/src/lib/trellis_viterbi_X.h.t
index 362d3f57e..c679649bb 100644
--- a/gr-trellis/src/lib/trellis_viterbi_X.h.t
+++ b/gr-trellis/src/lib/trellis_viterbi_X.h.t
@@ -25,6 +25,7 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <trellis_api.h>
#include "fsm.h"
#include <gr_block.h>
#include "core_algorithms.h"
@@ -32,7 +33,7 @@
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ trellis_make_@BASE_NAME@ (
+TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (
const fsm &FSM,
int K,
int S0,
@@ -43,7 +44,7 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
/*!
* \ingroup coding_blk
*/
-class @NAME@ : public gr_block
+class TRELLIS_API @NAME@ : public gr_block
{
fsm d_FSM;
int d_K;
@@ -51,7 +52,7 @@ class @NAME@ : public gr_block
int d_SK;
//std::vector<int> d_trace;
- friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (
+ friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (
const fsm &FSM,
int K,
int S0,
diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_XX.h.t b/gr-trellis/src/lib/trellis_viterbi_combined_XX.h.t
index 35e6c4ce0..072f66158 100644
--- a/gr-trellis/src/lib/trellis_viterbi_combined_XX.h.t
+++ b/gr-trellis/src/lib/trellis_viterbi_combined_XX.h.t
@@ -25,6 +25,7 @@
#ifndef @GUARD_NAME@
#define @GUARD_NAME@
+#include <trellis_api.h>
#include "fsm.h"
#include <gr_block.h>
#include "calc_metric.h"
@@ -33,7 +34,7 @@
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ trellis_make_@BASE_NAME@ (
+TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (
const fsm &FSM,
int K,
int S0,
@@ -46,7 +47,7 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
/*!
* \ingroup coding_blk
*/
-class @NAME@ : public gr_block
+class TRELLIS_API @NAME@ : public gr_block
{
fsm d_FSM;
int d_K;
@@ -57,7 +58,7 @@ class @NAME@ : public gr_block
trellis_metric_type_t d_TYPE;
//std::vector<int> d_trace;
- friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (
+ friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (
const fsm &FSM,
int K,
int S0,
diff --git a/gr-trellis/src/python/CMakeLists.txt b/gr-trellis/src/python/CMakeLists.txt
new file mode 100644
index 000000000..9a9cc6aed
--- /dev/null
+++ b/gr-trellis/src/python/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Handle the unit tests
+########################################################################
+if(ENABLE_TESTING)
+include(GrTest)
+file(GLOB py_qa_test_files "qa_*.py")
+foreach(py_qa_test_file ${py_qa_test_files})
+ get_filename_component(py_qa_test_name ${py_qa_test_file} NAME_WE)
+ set(GR_TEST_PYTHON_DIRS
+ ${CMAKE_BINARY_DIR}/gnuradio-core/src/python
+ ${CMAKE_BINARY_DIR}/gnuradio-core/src/lib/swig
+ ${CMAKE_BINARY_DIR}/gr-digital/swig
+ ${CMAKE_BINARY_DIR}/gr-trellis/src/lib
+ )
+ set(GR_TEST_TARGET_DEPS gruel gnuradio-core gnuradio-digital gnuradio-trellis)
+ GR_ADD_TEST(${py_qa_test_name} ${PYTHON_EXECUTABLE} ${py_qa_test_file})
+endforeach(py_qa_test_file)
+endif(ENABLE_TESTING)
diff --git a/gr-uhd/CMakeLists.txt b/gr-uhd/CMakeLists.txt
new file mode 100644
index 000000000..8eacc6105
--- /dev/null
+++ b/gr-uhd/CMakeLists.txt
@@ -0,0 +1,107 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup dependencies
+########################################################################
+include(GrBoost)
+
+find_package(UHD)
+
+########################################################################
+# Register component
+########################################################################
+include(GrComponent)
+GR_REGISTER_COMPONENT("gr-uhd" ENABLE_GR_UHD
+ Boost_FOUND
+ UHD_FOUND
+ ENABLE_GR_CORE
+)
+
+GR_SET_GLOBAL(GR_UHD_INCLUDE_DIRS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${UHD_INCLUDE_DIRS}
+)
+
+########################################################################
+# Begin conditional configuration
+########################################################################
+if(ENABLE_GR_UHD)
+
+########################################################################
+# Setup CPack components
+########################################################################
+include(GrPackage)
+CPACK_SET(CPACK_COMPONENT_GROUP_UHD_DESCRIPTION "GNU Radio UHD Blocks")
+
+CPACK_COMPONENT("uhd_runtime"
+ GROUP "UHD"
+ DISPLAY_NAME "Runtime"
+ DESCRIPTION "Runtime"
+ DEPENDS "core_runtime"
+)
+
+CPACK_COMPONENT("uhd_devel"
+ GROUP "UHD"
+ DISPLAY_NAME "Development"
+ DESCRIPTION "C++ headers, package config, import libraries"
+ DEPENDS "core_devel"
+)
+
+CPACK_COMPONENT("uhd_python"
+ GROUP "UHD"
+ DISPLAY_NAME "Python"
+ DESCRIPTION "Python modules for runtime; GRC xml files"
+ DEPENDS "core_python;uhd_runtime"
+)
+
+CPACK_COMPONENT("uhd_swig"
+ GROUP "UHD"
+ DISPLAY_NAME "SWIG"
+ DESCRIPTION "SWIG development .i files"
+ DEPENDS "core_swig;uhd_python;uhd_devel"
+)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(include)
+add_subdirectory(lib)
+add_subdirectory(examples)
+if(ENABLE_PYTHON)
+ add_subdirectory(swig)
+ add_subdirectory(grc)
+ add_subdirectory(apps)
+endif(ENABLE_PYTHON)
+
+########################################################################
+# Create Pkg Config File
+########################################################################
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-uhd.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-uhd.pc
+@ONLY)
+
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-uhd.pc
+ DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
+ COMPONENT "uhd_devel"
+)
+
+endif(ENABLE_GR_UHD)
diff --git a/gr-uhd/apps/CMakeLists.txt b/gr-uhd/apps/CMakeLists.txt
new file mode 100644
index 000000000..36bee13e0
--- /dev/null
+++ b/gr-uhd/apps/CMakeLists.txt
@@ -0,0 +1,84 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrPython)
+
+########################################################################
+# Install some uhd apps
+########################################################################
+GR_PYTHON_INSTALL(
+ PROGRAMS
+ uhd_fft.py
+ uhd_rx_cfile.py
+ uhd_siggen.py
+ uhd_siggen_gui.py
+ uhd_rx_nogui.py
+ DESTINATION ${GR_RUNTIME_DIR}
+ COMPONENT "uhd_python"
+)
+
+########################################################################
+# Install hf radio apps
+########################################################################
+install(
+ FILES
+ hf_radio/hfir.sci
+ hf_radio/radio.xml
+ hf_radio/README.TXT
+ hf_radio/ssb_taps
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/hf_radio
+ COMPONENT "uhd_python"
+)
+
+GR_PYTHON_INSTALL(
+ FILES
+ hf_radio/input.py
+ hf_radio/output.py
+ hf_radio/ssbagc.py
+ hf_radio/ssbdemod.py
+ hf_radio/startup.py
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/hf_radio
+ COMPONENT "uhd_python"
+)
+
+GR_PYTHON_INSTALL(
+ PROGRAMS
+ hf_radio/radio.py
+ hf_radio/ui.py
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/hf_radio
+ COMPONENT "uhd_python"
+)
+
+########################################################################
+# Install hf explorer
+########################################################################
+install(
+ FILES
+ hf_explorer/README
+ hf_explorer/hfx_help
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/hf_explorer
+ COMPONENT "uhd_python"
+)
+
+GR_PYTHON_INSTALL(
+ PROGRAMS
+ hf_explorer/hfx.py
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/hf_explorer
+ COMPONENT "uhd_python"
+)
diff --git a/gr-uhd/examples/CMakeLists.txt b/gr-uhd/examples/CMakeLists.txt
new file mode 100644
index 000000000..9e92b89d7
--- /dev/null
+++ b/gr-uhd/examples/CMakeLists.txt
@@ -0,0 +1,75 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup the include and linker paths
+########################################################################
+include_directories(
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GR_UHD_INCLUDE_DIRS}
+ ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+include_directories(${UHD_INCLUDE_DIRS})
+link_directories(${UHD_LIBRARY_DIRS})
+
+include_directories(${Boost_INCLUDE_DIRS})
+link_directories(${Boost_LIBRARY_DIRS})
+
+########################################################################
+# Build executable
+########################################################################
+add_executable(tags_demo tags_demo.cc)
+target_link_libraries(tags_demo gnuradio-uhd)
+
+########################################################################
+# Python examples
+########################################################################
+if(ENABLE_PYTHON)
+GR_PYTHON_INSTALL(
+ PROGRAMS
+ fm_tx4.py
+ fm_tx_2_daughterboards.py
+ max_power.py
+ usrp_am_mw_rcv.py
+ usrp_nbfm_ptt.py
+ usrp_nbfm_rcv.py
+ usrp_spectrum_sense.py
+ usrp_tv_rcv_nogui.py
+ usrp_tv_rcv.py
+ usrp_wfm_rcv2_nogui.py
+ usrp_wfm_rcv_fmdet.py
+ usrp_wfm_rcv_nogui.py
+ usrp_wfm_rcv_pll.py
+ usrp_wfm_rcv.py
+ usrp_wfm_rcv_sca.py
+ usrp_wxapt_rcv.py
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/uhd
+ COMPONENT "uhd_python"
+)
+
+GR_PYTHON_INSTALL(
+ PROGRAMS
+ multi-antenna/multi_fft.py
+ multi-antenna/multi_file.py
+ multi-antenna/multi_scope.py
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/multi-antenna
+ COMPONENT "uhd_python"
+)
+endif(ENABLE_PYTHON)
diff --git a/gr-uhd/grc/CMakeLists.txt b/gr-uhd/grc/CMakeLists.txt
new file mode 100644
index 000000000..3297db8d7
--- /dev/null
+++ b/gr-uhd/grc/CMakeLists.txt
@@ -0,0 +1,46 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Rules for generating the source and sink xml wrappers
+########################################################################
+include(GrPython)
+
+macro(GEN_BLOCK_XML _generator _xml_block)
+ set(generator ${CMAKE_CURRENT_SOURCE_DIR}/${_generator})
+ set(xml_block ${CMAKE_CURRENT_BINARY_DIR}/${_xml_block})
+ list(APPEND xml_blocks ${xml_block})
+ add_custom_command(
+ DEPENDS ${generator} OUTPUT ${xml_block}
+ COMMAND ${PYTHON_EXECUTABLE} ${generator} ${xml_block}
+ )
+endmacro(GEN_BLOCK_XML)
+
+GEN_BLOCK_XML(gen_uhd_usrp_blocks.py uhd_usrp_source.xml)
+GEN_BLOCK_XML(gen_uhd_usrp_blocks.py uhd_usrp_sink.xml)
+
+add_custom_target(uhd_grc_xml_blocks ALL DEPENDS ${xml_blocks})
+
+install(FILES
+ ${xml_blocks}
+ uhd_amsg_source.xml
+ uhd_block_tree.xml
+ DESTINATION ${GRC_BLOCKS_DIR}
+ COMPONENT "uhd_python"
+)
diff --git a/gr-uhd/include/CMakeLists.txt b/gr-uhd/include/CMakeLists.txt
new file mode 100644
index 000000000..fdd384d58
--- /dev/null
+++ b/gr-uhd/include/CMakeLists.txt
@@ -0,0 +1,30 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Install header files
+########################################################################
+install(FILES
+ gr_uhd_api.h
+ gr_uhd_usrp_source.h
+ gr_uhd_usrp_sink.h
+ gr_uhd_amsg_source.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "uhd_devel"
+)
diff --git a/gr-uhd/lib/CMakeLists.txt b/gr-uhd/lib/CMakeLists.txt
new file mode 100644
index 000000000..fbdca0566
--- /dev/null
+++ b/gr-uhd/lib/CMakeLists.txt
@@ -0,0 +1,58 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup the include and linker paths
+########################################################################
+include_directories(
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GR_UHD_INCLUDE_DIRS}
+)
+
+include_directories(${UHD_INCLUDE_DIRS})
+link_directories(${UHD_LIBRARY_DIRS})
+
+include_directories(${Boost_INCLUDE_DIRS})
+link_directories(${Boost_LIBRARY_DIRS})
+
+########################################################################
+# Setup library
+########################################################################
+list(APPEND gr_uhd_sources
+ gr_uhd_usrp_source.cc
+ gr_uhd_usrp_sink.cc
+ gr_uhd_amsg_source.cc
+)
+
+list(APPEND uhd_libs
+ gnuradio-core
+ ${Boost_LIBRARIES}
+ ${UHD_LIBRARIES}
+)
+
+add_library(gnuradio-uhd SHARED ${gr_uhd_sources})
+target_link_libraries(gnuradio-uhd ${uhd_libs})
+set_target_properties(gnuradio-uhd PROPERTIES DEFINE_SYMBOL "gnuradio_uhd_EXPORTS")
+set_target_properties(gnuradio-uhd PROPERTIES SOVERSION ${LIBVER})
+
+install(TARGETS gnuradio-uhd
+ LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT "uhd_runtime" # .so/.dylib file
+ ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT "uhd_devel" # .lib file
+ RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT "uhd_runtime" # .dll file
+)
diff --git a/gr-uhd/swig/CMakeLists.txt b/gr-uhd/swig/CMakeLists.txt
new file mode 100644
index 000000000..4c778b05c
--- /dev/null
+++ b/gr-uhd/swig/CMakeLists.txt
@@ -0,0 +1,53 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup swig generation
+########################################################################
+include(GrPython)
+include(GrSwig)
+
+set(GR_SWIG_FLAGS -DGR_HAVE_UHD) #needed to parse uhd_swig.i
+
+set(GR_SWIG_INCLUDE_DIRS
+ ${GR_UHD_INCLUDE_DIRS}
+ ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+)
+link_directories(${UHD_LIBRARY_DIRS})
+set(GR_SWIG_LIBRARIES gnuradio-uhd ${UHD_LIBRARIES})
+
+GR_SWIG_MAKE(uhd_swig uhd_swig.i)
+
+GR_SWIG_INSTALL(
+ TARGETS uhd_swig
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/uhd
+ COMPONENT "uhd_python"
+)
+
+install(
+ FILES uhd_swig.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "uhd_swig"
+)
+
+GR_PYTHON_INSTALL(
+ FILES __init__.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/uhd
+ COMPONENT "uhd_python"
+)
diff --git a/gr-video-sdl/CMakeLists.txt b/gr-video-sdl/CMakeLists.txt
new file mode 100644
index 000000000..6b1d7f79e
--- /dev/null
+++ b/gr-video-sdl/CMakeLists.txt
@@ -0,0 +1,99 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup dependencies
+########################################################################
+include(GrBoost)
+
+find_package(SDL)
+
+########################################################################
+# Register component
+########################################################################
+include(GrComponent)
+GR_REGISTER_COMPONENT("gr-video-sdl" ENABLE_GR_VIDEO_SDL
+ SDL_FOUND
+ Boost_FOUND
+ ENABLE_GR_CORE
+)
+
+GR_SET_GLOBAL(GR_VIDEO_SDL_INCLUDE_DIRS
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+)
+
+########################################################################
+# Begin conditional configuration
+########################################################################
+if(ENABLE_GR_VIDEO_SDL)
+
+########################################################################
+# Setup CPack components
+########################################################################
+include(GrPackage)
+CPACK_SET(CPACK_COMPONENT_GROUP_VIDEO_SDL_DESCRIPTION "GNU Radio Video SDL Blocks")
+
+CPACK_COMPONENT("video_sdl_runtime"
+ GROUP "Video SDL"
+ DISPLAY_NAME "Runtime"
+ DESCRIPTION "Runtime"
+ DEPENDS "core_runtime"
+)
+
+CPACK_COMPONENT("video_sdl_devel"
+ GROUP "Video SDL"
+ DISPLAY_NAME "Development"
+ DESCRIPTION "C++ headers, package config, import libraries"
+ DEPENDS "core_devel"
+)
+
+CPACK_COMPONENT("video_sdl_python"
+ GROUP "Video SDL"
+ DISPLAY_NAME "Python"
+ DESCRIPTION "Python modules for runtime; GRC xml files"
+ DEPENDS "core_python;video_sdl_runtime"
+)
+
+CPACK_COMPONENT("video_sdl_swig"
+ GROUP "Video SDL"
+ DISPLAY_NAME "SWIG"
+ DESCRIPTION "SWIG development .i files"
+ DEPENDS "core_swig;video_sdl_python;video_sdl_devel"
+)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(src)
+
+########################################################################
+# Create Pkg Config File
+########################################################################
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-video-sdl.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-video-sdl.pc
+@ONLY)
+
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-video-sdl.pc
+ DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
+ COMPONENT "video_sdl_devel"
+)
+
+endif(ENABLE_GR_VIDEO_SDL)
diff --git a/gr-video-sdl/src/CMakeLists.txt b/gr-video-sdl/src/CMakeLists.txt
new file mode 100644
index 000000000..9ad5fcbb1
--- /dev/null
+++ b/gr-video-sdl/src/CMakeLists.txt
@@ -0,0 +1,115 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup the include and linker paths
+########################################################################
+include_directories(
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GR_VIDEO_SDL_INCLUDE_DIRS}
+)
+
+include_directories(${Boost_INCLUDE_DIRS})
+link_directories(${Boost_LIBRARY_DIRS})
+
+include_directories(${SDL_INCLUDE_DIR})
+
+########################################################################
+# Setup library
+########################################################################
+list(APPEND gr_video_sdl_sources
+ video_sdl_sink_uc.cc
+ video_sdl_sink_s.cc
+)
+
+list(APPEND video_sdl_libs
+ gnuradio-core
+ ${Boost_LIBRARIES}
+ ${SDL_LIBRARY}
+)
+
+add_library(gnuradio-video-sdl SHARED ${gr_video_sdl_sources})
+target_link_libraries(gnuradio-video-sdl ${video_sdl_libs})
+set_target_properties(gnuradio-video-sdl PROPERTIES DEFINE_SYMBOL "gnuradio_video_sdl_EXPORTS")
+set_target_properties(gnuradio-video-sdl PROPERTIES SOVERSION ${LIBVER})
+
+install(TARGETS gnuradio-video-sdl
+ LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT "video_sdl_runtime" # .so/.dylib file
+ ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT "video_sdl_devel" # .lib file
+ RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT "video_sdl_runtime" # .dll file
+)
+
+########################################################################
+# Install public header files
+########################################################################
+install(FILES
+ video_sdl_api.h
+ video_sdl_sink_uc.h
+ video_sdl_sink_s.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "video_sdl_devel"
+)
+
+########################################################################
+# Setup swig generation
+########################################################################
+if(ENABLE_PYTHON)
+include(GrPython)
+include(GrSwig)
+
+set(GR_SWIG_INCLUDE_DIRS
+ ${GR_COMEDI_INCLUDE_DIRS}
+ ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+)
+
+set(GR_SWIG_LIBRARIES gnuradio-video-sdl)
+
+GR_SWIG_MAKE(video_sdl video_sdl.i)
+
+GR_SWIG_INSTALL(
+ TARGETS video_sdl
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio
+ COMPONENT "video_sdl_python"
+)
+
+install(
+ FILES video_sdl.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "video_sdl_swig"
+)
+
+endif(ENABLE_PYTHON)
+
+########################################################################
+# Handle the unit tests
+########################################################################
+if(ENABLE_TESTING AND ENABLE_PYTHON)
+include(GrTest)
+file(GLOB py_qa_test_files "qa_*.py")
+foreach(py_qa_test_file ${py_qa_test_files})
+ get_filename_component(py_qa_test_name ${py_qa_test_file} NAME_WE)
+ set(GR_TEST_PYTHON_DIRS
+ ${CMAKE_BINARY_DIR}/gnuradio-core/src/python
+ ${CMAKE_BINARY_DIR}/gnuradio-core/src/lib/swig
+ ${CMAKE_BINARY_DIR}/gr-video-sdl/src
+ )
+ set(GR_TEST_TARGET_DEPS gruel gnuradio-core gnuradio-video-sdl)
+ GR_ADD_TEST(${py_qa_test_name} ${PYTHON_EXECUTABLE} ${py_qa_test_file})
+endforeach(py_qa_test_file)
+endif(ENABLE_TESTING AND ENABLE_PYTHON)
diff --git a/gr-video-sdl/src/Makefile.am b/gr-video-sdl/src/Makefile.am
index 04c39542a..496671bea 100644
--- a/gr-video-sdl/src/Makefile.am
+++ b/gr-video-sdl/src/Makefile.am
@@ -33,6 +33,7 @@ noinst_PYTHON = \
qa_video_sdl.py
grinclude_HEADERS = \
+ video_sdl_api.h \
video_sdl_sink_uc.h \
video_sdl_sink_s.h
diff --git a/gr-video-sdl/src/video_sdl_api.h b/gr-video-sdl/src/video_sdl_api.h
new file mode 100644
index 000000000..5418f86f0
--- /dev/null
+++ b/gr-video-sdl/src/video_sdl_api.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2011 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along 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_VIDEO_SDL_API_H
+#define INCLUDED_VIDEO_SDL_API_H
+
+#include <gruel/attributes.h>
+
+#ifdef gnuradio_video_sdl_EXPORTS
+# define VIDEO_SDL_API __GR_ATTR_EXPORT
+#else
+# define VIDEO_SDL_API __GR_ATTR_IMPORT
+#endif
+
+#endif /* INCLUDED_VIDEO_SDL_API_H */
diff --git a/gr-video-sdl/src/video_sdl_sink_s.h b/gr-video-sdl/src/video_sdl_sink_s.h
index 9d3651402..2ec15e36d 100644
--- a/gr-video-sdl/src/video_sdl_sink_s.h
+++ b/gr-video-sdl/src/video_sdl_sink_s.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_VIDEO_SDL_SINK_S_H
#define INCLUDED_VIDEO_SDL_SINK_S_H
+#include <video_sdl_api.h>
#include <gr_sync_block.h>
#include <string>
#include <SDL.h>
@@ -34,7 +35,7 @@
class video_sdl_sink_s;
typedef boost::shared_ptr<video_sdl_sink_s> video_sdl_sink_s_sptr;
-video_sdl_sink_s_sptr
+VIDEO_SDL_API video_sdl_sink_s_sptr
video_sdl_make_sink_s (double framerate,int width=640, int height=480,unsigned int format=IMGFMT_YV12,int dst_width=-1,int dst_height=-1);
/*!
@@ -47,8 +48,8 @@ video_sdl_make_sink_s (double framerate,int width=640, int height=480,unsigned i
* Input samples must be in the range [0,255].
*/
-class video_sdl_sink_s : public gr_sync_block {
- friend video_sdl_sink_s_sptr
+class VIDEO_SDL_API video_sdl_sink_s : public gr_sync_block {
+ friend VIDEO_SDL_API video_sdl_sink_s_sptr
video_sdl_make_sink_s (double framerate,int width, int height,unsigned int format,int dst_width,int dst_height);
int d_chunk_size;
diff --git a/gr-video-sdl/src/video_sdl_sink_uc.h b/gr-video-sdl/src/video_sdl_sink_uc.h
index 955b003f8..435ddaa8f 100644
--- a/gr-video-sdl/src/video_sdl_sink_uc.h
+++ b/gr-video-sdl/src/video_sdl_sink_uc.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_VIDEO_SDL_SINK_UC_H
#define INCLUDED_VIDEO_SDL_SINK_UC_H
+#include <video_sdl_api.h>
#include <gr_sync_block.h>
#include <string>
#include <SDL.h>
@@ -34,7 +35,7 @@
class video_sdl_sink_uc;
typedef boost::shared_ptr<video_sdl_sink_uc> video_sdl_sink_uc_sptr;
-video_sdl_sink_uc_sptr
+VIDEO_SDL_API video_sdl_sink_uc_sptr
video_sdl_make_sink_uc (double framerate,int width=640, int height=480,unsigned int format=IMGFMT_YV12,int dst_width=-1,int dst_height=-1);
/*!
@@ -47,8 +48,8 @@ video_sdl_make_sink_uc (double framerate,int width=640, int height=480,unsigned
* Input samples must be in the range [0,255].
*/
-class video_sdl_sink_uc : public gr_sync_block {
- friend video_sdl_sink_uc_sptr
+class VIDEO_SDL_API video_sdl_sink_uc : public gr_sync_block {
+ friend VIDEO_SDL_API video_sdl_sink_uc_sptr
video_sdl_make_sink_uc (double framerate,int width, int height,unsigned int format,int dst_width,int dst_height);
int d_chunk_size;
diff --git a/gr-vocoder/CMakeLists.txt b/gr-vocoder/CMakeLists.txt
new file mode 100644
index 000000000..f601b4670
--- /dev/null
+++ b/gr-vocoder/CMakeLists.txt
@@ -0,0 +1,109 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup dependencies
+########################################################################
+include(GrBoost)
+
+########################################################################
+# Register component
+########################################################################
+include(GrComponent)
+GR_REGISTER_COMPONENT("gr-vocoder" ENABLE_GR_VOCODER
+ Boost_FOUND
+ ENABLE_GR_CORE
+)
+
+GR_SET_GLOBAL(GR_VOCODER_INCLUDE_DIRS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+)
+
+########################################################################
+# Begin conditional configuration
+########################################################################
+if(ENABLE_GR_VOCODER)
+
+########################################################################
+# Setup CPack components
+########################################################################
+include(GrPackage)
+CPACK_SET(CPACK_COMPONENT_GROUP_VOCODER_DESCRIPTION "GNU Radio Vocoder Blocks")
+
+CPACK_COMPONENT("vocoder_runtime"
+ GROUP "Vocoder"
+ DISPLAY_NAME "Runtime"
+ DESCRIPTION "Dynamic link libraries"
+ DEPENDS "core_runtime"
+)
+
+CPACK_COMPONENT("vocoder_devel"
+ GROUP "Vocoder"
+ DISPLAY_NAME "Development"
+ DESCRIPTION "C++ headers, package config, import libraries"
+ DEPENDS "core_devel"
+)
+
+CPACK_COMPONENT("vocoder_python"
+ GROUP "Vocoder"
+ DISPLAY_NAME "Python"
+ DESCRIPTION "Python modules for runtime"
+ DEPENDS "core_python;vocoder_runtime"
+)
+
+CPACK_COMPONENT("vocoder_examples"
+ GROUP "Vocoder"
+ DISPLAY_NAME "Examples"
+ DESCRIPTION "Python examples for vocoder"
+ DEPENDS "vocoder_python"
+)
+
+CPACK_COMPONENT("vocoder_swig"
+ GROUP "Vocoder"
+ DISPLAY_NAME "SWIG"
+ DESCRIPTION "SWIG development .i files"
+ DEPENDS "core_swig;vocoder_python;vocoder_devel"
+)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(lib)
+add_subdirectory(include)
+if(ENABLE_PYTHON)
+ add_subdirectory(swig)
+ add_subdirectory(python)
+ add_subdirectory(examples)
+endif(ENABLE_PYTHON)
+
+########################################################################
+# Create Pkg Config File
+########################################################################
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-vocoder.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-vocoder.pc
+@ONLY)
+
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-vocoder.pc
+ DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
+ COMPONENT "vocoder_devel"
+)
+
+endif(ENABLE_GR_VOCODER)
diff --git a/gr-vocoder/examples/CMakeLists.txt b/gr-vocoder/examples/CMakeLists.txt
new file mode 100644
index 000000000..76a757826
--- /dev/null
+++ b/gr-vocoder/examples/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Install Examples
+########################################################################
+include(GrPython)
+
+GR_PYTHON_INSTALL(
+ PROGRAMS
+ alaw_audio_loopback.py
+ codec2_audio_loopback.py
+ cvsd_audio_loopback.py
+ g721_audio_loopback.py
+ g723_24_audio_loopback.py
+ g723_40_audio_loopback.py
+ gsm_audio_loopback.py
+ ulaw_audio_loopback.py
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/vocoder
+ COMPONENT "vocoder_examples"
+)
diff --git a/gr-vocoder/include/CMakeLists.txt b/gr-vocoder/include/CMakeLists.txt
new file mode 100644
index 000000000..23099f59e
--- /dev/null
+++ b/gr-vocoder/include/CMakeLists.txt
@@ -0,0 +1,43 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Install header files
+########################################################################
+install(FILES
+ vocoder_api.h
+ vocoder_alaw_decode_bs.h
+ vocoder_alaw_encode_sb.h
+ vocoder_codec2_decode_ps.h
+ vocoder_codec2_encode_sp.h
+ vocoder_cvsd_decode_bs.h
+ vocoder_cvsd_encode_sb.h
+ vocoder_g721_decode_bs.h
+ vocoder_g721_encode_sb.h
+ vocoder_g723_24_decode_bs.h
+ vocoder_g723_24_encode_sb.h
+ vocoder_g723_40_decode_bs.h
+ vocoder_g723_40_encode_sb.h
+ vocoder_gsm_fr_decode_ps.h
+ vocoder_gsm_fr_encode_sp.h
+ vocoder_ulaw_decode_bs.h
+ vocoder_ulaw_encode_sb.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "vocoder_devel"
+)
diff --git a/gr-vocoder/include/Makefile.am b/gr-vocoder/include/Makefile.am
index aab77e3f9..b579333a3 100644
--- a/gr-vocoder/include/Makefile.am
+++ b/gr-vocoder/include/Makefile.am
@@ -23,6 +23,7 @@ include $(top_srcdir)/Makefile.common
# C/C++ headers get installed in ${prefix}/include/gnuradio
grinclude_HEADERS = \
+ vocoder_api.h \
vocoder_alaw_decode_bs.h \
vocoder_alaw_encode_sb.h \
vocoder_codec2_decode_ps.h \
diff --git a/gr-vocoder/include/vocoder_alaw_decode_bs.h b/gr-vocoder/include/vocoder_alaw_decode_bs.h
index b71569439..f20dfefdb 100644
--- a/gr-vocoder/include/vocoder_alaw_decode_bs.h
+++ b/gr-vocoder/include/vocoder_alaw_decode_bs.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_VOCODER_ALAW_DECODE_BS_H
#define INCLUDED_VOCODER_ALAW_DECODE_BS_H
+#include <vocoder_api.h>
#include <gr_sync_block.h>
class vocoder_alaw_decode_bs;
typedef boost::shared_ptr<vocoder_alaw_decode_bs> vocoder_alaw_decode_bs_sptr;
-vocoder_alaw_decode_bs_sptr vocoder_make_alaw_decode_bs();
+VOCODER_API vocoder_alaw_decode_bs_sptr vocoder_make_alaw_decode_bs();
/*!
* \brief This block performs alaw audio decoding.
@@ -37,10 +38,10 @@ vocoder_alaw_decode_bs_sptr vocoder_make_alaw_decode_bs();
* \ingroup vocoder_blk
*/
-class vocoder_alaw_decode_bs : public gr_sync_block
+class VOCODER_API vocoder_alaw_decode_bs : public gr_sync_block
{
private:
- friend vocoder_alaw_decode_bs_sptr vocoder_make_alaw_decode_bs();
+ friend VOCODER_API vocoder_alaw_decode_bs_sptr vocoder_make_alaw_decode_bs();
vocoder_alaw_decode_bs();
diff --git a/gr-vocoder/include/vocoder_alaw_encode_sb.h b/gr-vocoder/include/vocoder_alaw_encode_sb.h
index d1858d048..c00080fb7 100644
--- a/gr-vocoder/include/vocoder_alaw_encode_sb.h
+++ b/gr-vocoder/include/vocoder_alaw_encode_sb.h
@@ -23,23 +23,24 @@
#ifndef INCLUDED_VOCODER_ALAW_ENCODER_SB_H
#define INCLUDED_VOCODER_ALAW_ENCODER_SB_H
+#include <vocoder_api.h>
#include <gr_sync_block.h>
class vocoder_alaw_encode_sb;
typedef boost::shared_ptr<vocoder_alaw_encode_sb> vocoder_alaw_encode_sb_sptr;
-vocoder_alaw_encode_sb_sptr vocoder_make_alaw_encode_sb();
+VOCODER_API vocoder_alaw_encode_sb_sptr vocoder_make_alaw_encode_sb();
/*!
* \brief This block performs g.711 alaw audio encoding.
*
* \ingroup vocoder_blk
*/
-class vocoder_alaw_encode_sb : public gr_sync_block
+class VOCODER_API vocoder_alaw_encode_sb : public gr_sync_block
{
private:
- friend vocoder_alaw_encode_sb_sptr vocoder_make_alaw_encode_sb();
+ friend VOCODER_API vocoder_alaw_encode_sb_sptr vocoder_make_alaw_encode_sb();
vocoder_alaw_encode_sb();
diff --git a/gr-vocoder/include/vocoder_api.h b/gr-vocoder/include/vocoder_api.h
new file mode 100644
index 000000000..331cf5d0b
--- /dev/null
+++ b/gr-vocoder/include/vocoder_api.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2011 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along 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_VOCODER_API_H
+#define INCLUDED_VOCODER_API_H
+
+#include <gruel/attributes.h>
+
+#ifdef gnuradio_vocoder_EXPORTS
+# define VOCODER_API __GR_ATTR_EXPORT
+#else
+# define VOCODER_API __GR_ATTR_IMPORT
+#endif
+
+#endif /* INCLUDED_VOCODER_API_H */
diff --git a/gr-vocoder/include/vocoder_codec2_decode_ps.h b/gr-vocoder/include/vocoder_codec2_decode_ps.h
index 02b80a454..7e7ea2d5c 100644
--- a/gr-vocoder/include/vocoder_codec2_decode_ps.h
+++ b/gr-vocoder/include/vocoder_codec2_decode_ps.h
@@ -22,21 +22,22 @@
#ifndef INCLUDED_VOCODER_CODEC2_DECODE_PS_H
#define INCLUDED_VOCODER_CODEC2_DECODE_PS_H
+#include <vocoder_api.h>
#include <gr_sync_interpolator.h>
class vocoder_codec2_decode_ps;
typedef boost::shared_ptr<vocoder_codec2_decode_ps> vocoder_codec2_decode_ps_sptr;
-vocoder_codec2_decode_ps_sptr vocoder_make_codec2_decode_ps ();
+VOCODER_API vocoder_codec2_decode_ps_sptr vocoder_make_codec2_decode_ps ();
/*!
* \brief CODEC2 Vocoder Decoder
* \ingroup vocoder_blk
*/
-class vocoder_codec2_decode_ps : public gr_sync_interpolator {
+class VOCODER_API vocoder_codec2_decode_ps : public gr_sync_interpolator {
void *d_codec2;
- friend vocoder_codec2_decode_ps_sptr vocoder_make_codec2_decode_ps ();
+ friend VOCODER_API vocoder_codec2_decode_ps_sptr vocoder_make_codec2_decode_ps ();
vocoder_codec2_decode_ps ();
public:
diff --git a/gr-vocoder/include/vocoder_codec2_encode_sp.h b/gr-vocoder/include/vocoder_codec2_encode_sp.h
index de4784f8d..8d8588daf 100644
--- a/gr-vocoder/include/vocoder_codec2_encode_sp.h
+++ b/gr-vocoder/include/vocoder_codec2_encode_sp.h
@@ -22,21 +22,22 @@
#ifndef INCLUDED_VOCODER_CODEC2_ENCODE_SP_H
#define INCLUDED_VOCODER_CODEC2_ENCODE_SP_H
+#include <vocoder_api.h>
#include <gr_sync_decimator.h>
class vocoder_codec2_encode_sp;
typedef boost::shared_ptr<vocoder_codec2_encode_sp> vocoder_codec2_encode_sp_sptr;
-vocoder_codec2_encode_sp_sptr vocoder_make_codec2_encode_sp ();
+VOCODER_API vocoder_codec2_encode_sp_sptr vocoder_make_codec2_encode_sp ();
/*!
* \brief CODEC2 Vocoder Encoder
* \ingroup vocoder_blk
*/
-class vocoder_codec2_encode_sp : public gr_sync_decimator {
+class VOCODER_API vocoder_codec2_encode_sp : public gr_sync_decimator {
void *d_codec2;
- friend vocoder_codec2_encode_sp_sptr vocoder_make_codec2_encode_sp ();
+ friend VOCODER_API vocoder_codec2_encode_sp_sptr vocoder_make_codec2_encode_sp ();
vocoder_codec2_encode_sp ();
public:
diff --git a/gr-vocoder/include/vocoder_cvsd_decode_bs.h b/gr-vocoder/include/vocoder_cvsd_decode_bs.h
index 104ec2400..2ad2f096f 100644
--- a/gr-vocoder/include/vocoder_cvsd_decode_bs.h
+++ b/gr-vocoder/include/vocoder_cvsd_decode_bs.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_VOCODER_CVSD_DECODE_BS_H
#define INCLUDED_VOCODER_CVSD_DECODE_BS_H
+#include <vocoder_api.h>
#include <gr_sync_interpolator.h>
class vocoder_cvsd_decode_bs;
@@ -46,7 +47,7 @@ typedef boost::shared_ptr<vocoder_cvsd_decode_bs> vocoder_cvsd_decode_bs_sptr;
* \param neg_accum_max Minimum integer value allowed for the internal reference. Default: "-32767" (-2^15 + 1 or MINSHORT+1)
*
*/
-vocoder_cvsd_decode_bs_sptr vocoder_make_cvsd_decode_bs (short min_step=10,
+VOCODER_API vocoder_cvsd_decode_bs_sptr vocoder_make_cvsd_decode_bs (short min_step=10,
short max_step=1280,
double step_decay=0.9990234375,
double accum_decay= 0.96875,
@@ -107,10 +108,10 @@ vocoder_cvsd_decode_bs_sptr vocoder_make_cvsd_decode_bs (short min_step=10,
*
*/
-class vocoder_cvsd_decode_bs : public gr_sync_interpolator
+class VOCODER_API vocoder_cvsd_decode_bs : public gr_sync_interpolator
{
private:
- friend vocoder_cvsd_decode_bs_sptr vocoder_make_cvsd_decode_bs (short min_step,
+ friend VOCODER_API vocoder_cvsd_decode_bs_sptr vocoder_make_cvsd_decode_bs (short min_step,
short max_step,
double step_decay,
double accum_decay,
diff --git a/gr-vocoder/include/vocoder_cvsd_encode_sb.h b/gr-vocoder/include/vocoder_cvsd_encode_sb.h
index 422a2f521..b36edaf8b 100644
--- a/gr-vocoder/include/vocoder_cvsd_encode_sb.h
+++ b/gr-vocoder/include/vocoder_cvsd_encode_sb.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_VOCODER_CVSD_ENCODER_SB_H
#define INCLUDED_VOCODER_CVSD_ENCODER_SB_H
+#include <vocoder_api.h>
#include <gr_sync_decimator.h>
class vocoder_cvsd_encode_sb;
@@ -46,7 +47,7 @@ typedef boost::shared_ptr<vocoder_cvsd_encode_sb> vocoder_cvsd_encode_sb_sptr;
*
*/
-vocoder_cvsd_encode_sb_sptr vocoder_make_cvsd_encode_sb(short min_step=10,
+VOCODER_API vocoder_cvsd_encode_sb_sptr vocoder_make_cvsd_encode_sb(short min_step=10,
short max_step=1280,
double step_decay=0.9990234375,
double accum_decay= 0.96875,
@@ -109,10 +110,10 @@ vocoder_cvsd_encode_sb_sptr vocoder_make_cvsd_encode_sb(short min_step=10,
*
*/
-class vocoder_cvsd_encode_sb : public gr_sync_decimator
+class VOCODER_API vocoder_cvsd_encode_sb : public gr_sync_decimator
{
private:
- friend vocoder_cvsd_encode_sb_sptr vocoder_make_cvsd_encode_sb(short min_step,
+ friend VOCODER_API vocoder_cvsd_encode_sb_sptr vocoder_make_cvsd_encode_sb(short min_step,
short max_step,
double step_decay,
double accum_decay,
diff --git a/gr-vocoder/include/vocoder_g721_decode_bs.h b/gr-vocoder/include/vocoder_g721_decode_bs.h
index 8ce3b12e5..1ac7b993a 100644
--- a/gr-vocoder/include/vocoder_g721_decode_bs.h
+++ b/gr-vocoder/include/vocoder_g721_decode_bs.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_VOCODER_G721_DECODE_BS_H
#define INCLUDED_VOCODER_G721_DECODE_BS_H
+#include <vocoder_api.h>
#include <gr_sync_block.h>
class vocoder_g721_decode_bs;
typedef boost::shared_ptr<vocoder_g721_decode_bs> vocoder_g721_decode_bs_sptr;
-vocoder_g721_decode_bs_sptr vocoder_make_g721_decode_bs();
+VOCODER_API vocoder_g721_decode_bs_sptr vocoder_make_g721_decode_bs();
/*!
* \brief This block performs g721 audio decoding.
@@ -37,7 +38,7 @@ vocoder_g721_decode_bs_sptr vocoder_make_g721_decode_bs();
* \ingroup vocoder_blk
*/
-class vocoder_g721_decode_bs : virtual public gr_sync_block
+class VOCODER_API vocoder_g721_decode_bs : virtual public gr_sync_block
{
};
diff --git a/gr-vocoder/include/vocoder_g721_encode_sb.h b/gr-vocoder/include/vocoder_g721_encode_sb.h
index 5af980640..a154537d0 100644
--- a/gr-vocoder/include/vocoder_g721_encode_sb.h
+++ b/gr-vocoder/include/vocoder_g721_encode_sb.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_VOCODER_G721_ENCODE_SB_H
#define INCLUDED_VOCODER_G721_ENCODE_SB_H
+#include <vocoder_api.h>
#include <gr_sync_block.h>
class vocoder_g721_encode_sb;
typedef boost::shared_ptr<vocoder_g721_encode_sb> vocoder_g721_encode_sb_sptr;
-vocoder_g721_encode_sb_sptr vocoder_make_g721_encode_sb();
+VOCODER_API vocoder_g721_encode_sb_sptr vocoder_make_g721_encode_sb();
/*!
* \brief This block performs g721 audio encoding.
@@ -37,7 +38,7 @@ vocoder_g721_encode_sb_sptr vocoder_make_g721_encode_sb();
* \ingroup vocoder_blk
*/
-class vocoder_g721_encode_sb : virtual public gr_sync_block
+class VOCODER_API vocoder_g721_encode_sb : virtual public gr_sync_block
{
};
diff --git a/gr-vocoder/include/vocoder_g723_24_decode_bs.h b/gr-vocoder/include/vocoder_g723_24_decode_bs.h
index 8ca94f253..80cdbddd4 100644
--- a/gr-vocoder/include/vocoder_g723_24_decode_bs.h
+++ b/gr-vocoder/include/vocoder_g723_24_decode_bs.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_VOCODER_G723_24_DECODE_BS_H
#define INCLUDED_VOCODER_G723_24_DECODE_BS_H
+#include <vocoder_api.h>
#include <gr_sync_block.h>
class vocoder_g723_24_decode_bs;
typedef boost::shared_ptr<vocoder_g723_24_decode_bs> vocoder_g723_24_decode_bs_sptr;
-vocoder_g723_24_decode_bs_sptr vocoder_make_g723_24_decode_bs();
+VOCODER_API vocoder_g723_24_decode_bs_sptr vocoder_make_g723_24_decode_bs();
/*!
* \brief This block performs g723_24 audio decoding.
@@ -37,7 +38,7 @@ vocoder_g723_24_decode_bs_sptr vocoder_make_g723_24_decode_bs();
* \ingroup vocoder_blk
*/
-class vocoder_g723_24_decode_bs : virtual public gr_sync_block
+class VOCODER_API vocoder_g723_24_decode_bs : virtual public gr_sync_block
{
};
diff --git a/gr-vocoder/include/vocoder_g723_24_encode_sb.h b/gr-vocoder/include/vocoder_g723_24_encode_sb.h
index b55229980..d290e0971 100644
--- a/gr-vocoder/include/vocoder_g723_24_encode_sb.h
+++ b/gr-vocoder/include/vocoder_g723_24_encode_sb.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_VOCODER_G723_24_ENCODE_SB_H
#define INCLUDED_VOCODER_G723_24_ENCODE_SB_H
+#include <vocoder_api.h>
#include <gr_sync_block.h>
class vocoder_g723_24_encode_sb;
typedef boost::shared_ptr<vocoder_g723_24_encode_sb> vocoder_g723_24_encode_sb_sptr;
-vocoder_g723_24_encode_sb_sptr vocoder_make_g723_24_encode_sb();
+VOCODER_API vocoder_g723_24_encode_sb_sptr vocoder_make_g723_24_encode_sb();
/*!
* \brief This block performs g723_24 audio encoding.
@@ -37,7 +38,7 @@ vocoder_g723_24_encode_sb_sptr vocoder_make_g723_24_encode_sb();
* \ingroup vocoder_blk
*/
-class vocoder_g723_24_encode_sb : virtual public gr_sync_block
+class VOCODER_API vocoder_g723_24_encode_sb : virtual public gr_sync_block
{
};
diff --git a/gr-vocoder/include/vocoder_g723_40_decode_bs.h b/gr-vocoder/include/vocoder_g723_40_decode_bs.h
index 2299b8806..87a2f6892 100644
--- a/gr-vocoder/include/vocoder_g723_40_decode_bs.h
+++ b/gr-vocoder/include/vocoder_g723_40_decode_bs.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_VOCODER_G723_40_DECODE_BS_H
#define INCLUDED_VOCODER_G723_40_DECODE_BS_H
+#include <vocoder_api.h>
#include <gr_sync_block.h>
class vocoder_g723_40_decode_bs;
typedef boost::shared_ptr<vocoder_g723_40_decode_bs> vocoder_g723_40_decode_bs_sptr;
-vocoder_g723_40_decode_bs_sptr vocoder_make_g723_40_decode_bs();
+VOCODER_API vocoder_g723_40_decode_bs_sptr vocoder_make_g723_40_decode_bs();
/*!
* \brief This block performs g723_40 audio decoding.
@@ -37,7 +38,7 @@ vocoder_g723_40_decode_bs_sptr vocoder_make_g723_40_decode_bs();
* \ingroup vocoder_blk
*/
-class vocoder_g723_40_decode_bs : virtual public gr_sync_block
+class VOCODER_API vocoder_g723_40_decode_bs : virtual public gr_sync_block
{
};
diff --git a/gr-vocoder/include/vocoder_g723_40_encode_sb.h b/gr-vocoder/include/vocoder_g723_40_encode_sb.h
index f349cf425..6ac0f6d05 100644
--- a/gr-vocoder/include/vocoder_g723_40_encode_sb.h
+++ b/gr-vocoder/include/vocoder_g723_40_encode_sb.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_VOCODER_G723_40_ENCODE_SB_H
#define INCLUDED_VOCODER_G723_40_ENCODE_SB_H
+#include <vocoder_api.h>
#include <gr_sync_block.h>
class vocoder_g723_40_encode_sb;
typedef boost::shared_ptr<vocoder_g723_40_encode_sb> vocoder_g723_40_encode_sb_sptr;
-vocoder_g723_40_encode_sb_sptr vocoder_make_g723_40_encode_sb();
+VOCODER_API vocoder_g723_40_encode_sb_sptr vocoder_make_g723_40_encode_sb();
/*!
* \brief This block performs g723_40 audio encoding.
@@ -37,7 +38,7 @@ vocoder_g723_40_encode_sb_sptr vocoder_make_g723_40_encode_sb();
* \ingroup vocoder_blk
*/
-class vocoder_g723_40_encode_sb : virtual public gr_sync_block
+class VOCODER_API vocoder_g723_40_encode_sb : virtual public gr_sync_block
{
};
diff --git a/gr-vocoder/include/vocoder_gsm_fr_decode_ps.h b/gr-vocoder/include/vocoder_gsm_fr_decode_ps.h
index 4c6248d39..748ff5f0f 100644
--- a/gr-vocoder/include/vocoder_gsm_fr_decode_ps.h
+++ b/gr-vocoder/include/vocoder_gsm_fr_decode_ps.h
@@ -23,21 +23,22 @@
#ifndef INCLUDED_VOCODER_GSM_FR_DECODE_PS_H
#define INCLUDED_VOCODER_GSM_FR_DECODE_PS_H
+#include <vocoder_api.h>
#include <gr_sync_interpolator.h>
class vocoder_gsm_fr_decode_ps;
typedef boost::shared_ptr<vocoder_gsm_fr_decode_ps> vocoder_gsm_fr_decode_ps_sptr;
-vocoder_gsm_fr_decode_ps_sptr vocoder_make_gsm_fr_decode_ps ();
+VOCODER_API vocoder_gsm_fr_decode_ps_sptr vocoder_make_gsm_fr_decode_ps ();
/*!
* \brief GSM 06.10 Full Rate Vocoder Decoder
* \ingroup vocoder_blk
*/
-class vocoder_gsm_fr_decode_ps : public gr_sync_interpolator {
+class VOCODER_API vocoder_gsm_fr_decode_ps : public gr_sync_interpolator {
struct gsm_state *d_gsm;
- friend vocoder_gsm_fr_decode_ps_sptr vocoder_make_gsm_fr_decode_ps ();
+ friend VOCODER_API vocoder_gsm_fr_decode_ps_sptr vocoder_make_gsm_fr_decode_ps ();
vocoder_gsm_fr_decode_ps ();
public:
diff --git a/gr-vocoder/include/vocoder_gsm_fr_encode_sp.h b/gr-vocoder/include/vocoder_gsm_fr_encode_sp.h
index d1803c82e..18f78f525 100644
--- a/gr-vocoder/include/vocoder_gsm_fr_encode_sp.h
+++ b/gr-vocoder/include/vocoder_gsm_fr_encode_sp.h
@@ -23,12 +23,13 @@
#ifndef INCLUDED_VOCODER_GSM_FR_ENCODE_SP_H
#define INCLUDED_VOCODER_GSM_FR_ENCODE_SP_H
+#include <vocoder_api.h>
#include <gr_sync_decimator.h>
class vocoder_gsm_fr_encode_sp;
typedef boost::shared_ptr<vocoder_gsm_fr_encode_sp> vocoder_gsm_fr_encode_sp_sptr;
-vocoder_gsm_fr_encode_sp_sptr vocoder_make_gsm_fr_encode_sp ();
+VOCODER_API vocoder_gsm_fr_encode_sp_sptr vocoder_make_gsm_fr_encode_sp ();
/*!
* \brief GSM 06.10 Full Rate Vocoder Encoder
@@ -36,10 +37,10 @@ vocoder_gsm_fr_encode_sp_sptr vocoder_make_gsm_fr_encode_sp ();
*
* shorts in; 33 byte packets out
*/
-class vocoder_gsm_fr_encode_sp : public gr_sync_decimator {
+class VOCODER_API vocoder_gsm_fr_encode_sp : public gr_sync_decimator {
struct gsm_state *d_gsm;
- friend vocoder_gsm_fr_encode_sp_sptr vocoder_make_gsm_fr_encode_sp ();
+ friend VOCODER_API vocoder_gsm_fr_encode_sp_sptr vocoder_make_gsm_fr_encode_sp ();
vocoder_gsm_fr_encode_sp ();
public:
diff --git a/gr-vocoder/include/vocoder_ulaw_decode_bs.h b/gr-vocoder/include/vocoder_ulaw_decode_bs.h
index 1126c6cb3..f69358168 100644
--- a/gr-vocoder/include/vocoder_ulaw_decode_bs.h
+++ b/gr-vocoder/include/vocoder_ulaw_decode_bs.h
@@ -23,13 +23,14 @@
#ifndef INCLUDED_VOCODER_ULAW_DECODE_BS_H
#define INCLUDED_VOCODER_ULAW_DECODE_BS_H
+#include <vocoder_api.h>
#include <gr_sync_block.h>
class vocoder_ulaw_decode_bs;
typedef boost::shared_ptr<vocoder_ulaw_decode_bs> vocoder_ulaw_decode_bs_sptr;
-vocoder_ulaw_decode_bs_sptr vocoder_make_ulaw_decode_bs();
+VOCODER_API vocoder_ulaw_decode_bs_sptr vocoder_make_ulaw_decode_bs();
/*!
* \brief This block performs ulaw audio decoding.
@@ -37,10 +38,10 @@ vocoder_ulaw_decode_bs_sptr vocoder_make_ulaw_decode_bs();
* \ingroup vocoder_blk
*/
-class vocoder_ulaw_decode_bs : public gr_sync_block
+class VOCODER_API vocoder_ulaw_decode_bs : public gr_sync_block
{
private:
- friend vocoder_ulaw_decode_bs_sptr vocoder_make_ulaw_decode_bs();
+ friend VOCODER_API vocoder_ulaw_decode_bs_sptr vocoder_make_ulaw_decode_bs();
vocoder_ulaw_decode_bs();
diff --git a/gr-vocoder/include/vocoder_ulaw_encode_sb.h b/gr-vocoder/include/vocoder_ulaw_encode_sb.h
index eddc4f4e5..a1c2af05b 100644
--- a/gr-vocoder/include/vocoder_ulaw_encode_sb.h
+++ b/gr-vocoder/include/vocoder_ulaw_encode_sb.h
@@ -23,23 +23,24 @@
#ifndef INCLUDED_VOCODER_ULAW_ENCODER_SB_H
#define INCLUDED_VOCODER_ULAW_ENCODER_SB_H
+#include <vocoder_api.h>
#include <gr_sync_block.h>
class vocoder_ulaw_encode_sb;
typedef boost::shared_ptr<vocoder_ulaw_encode_sb> vocoder_ulaw_encode_sb_sptr;
-vocoder_ulaw_encode_sb_sptr vocoder_make_ulaw_encode_sb();
+VOCODER_API vocoder_ulaw_encode_sb_sptr vocoder_make_ulaw_encode_sb();
/*!
* \brief This block performs g.711 ulaw audio encoding.
*
* \ingroup vocoder_blk
*/
-class vocoder_ulaw_encode_sb : public gr_sync_block
+class VOCODER_API vocoder_ulaw_encode_sb : public gr_sync_block
{
private:
- friend vocoder_ulaw_encode_sb_sptr vocoder_make_ulaw_encode_sb();
+ friend VOCODER_API vocoder_ulaw_encode_sb_sptr vocoder_make_ulaw_encode_sb();
vocoder_ulaw_encode_sb();
diff --git a/gr-vocoder/lib/CMakeLists.txt b/gr-vocoder/lib/CMakeLists.txt
new file mode 100644
index 000000000..abcae3b56
--- /dev/null
+++ b/gr-vocoder/lib/CMakeLists.txt
@@ -0,0 +1,74 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup the include and linker paths
+########################################################################
+include_directories(
+ ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GR_VOCODER_INCLUDE_DIRS}
+)
+
+include_directories(${Boost_INCLUDE_DIRS})
+link_directories(${Boost_LIBRARY_DIRS})
+
+########################################################################
+# Setup library
+########################################################################
+list(APPEND gr_vocoder_sources
+ vocoder_alaw_decode_bs.cc
+ vocoder_alaw_encode_sb.cc
+ vocoder_codec2_decode_ps.cc
+ vocoder_codec2_encode_sp.cc
+ vocoder_cvsd_decode_bs.cc
+ vocoder_cvsd_encode_sb.cc
+ vocoder_g721_decode_bs.cc
+ vocoder_g721_encode_sb.cc
+ vocoder_g723_24_decode_bs.cc
+ vocoder_g723_24_encode_sb.cc
+ vocoder_g723_40_decode_bs.cc
+ vocoder_g723_40_encode_sb.cc
+ vocoder_gsm_fr_decode_ps.cc
+ vocoder_gsm_fr_encode_sp.cc
+ vocoder_ulaw_decode_bs.cc
+ vocoder_ulaw_encode_sb.cc
+)
+
+########################################################################
+# Include subdirs rather to populate to the sources lists.
+########################################################################
+GR_INCLUDE_SUBDIRECTORY(codec2)
+GR_INCLUDE_SUBDIRECTORY(g7xx)
+GR_INCLUDE_SUBDIRECTORY(gsm)
+
+list(APPEND vocoder_libs
+ gnuradio-core
+ ${Boost_LIBRARIES}
+)
+
+add_library(gnuradio-vocoder SHARED ${gr_vocoder_sources})
+target_link_libraries(gnuradio-vocoder ${vocoder_libs})
+set_target_properties(gnuradio-vocoder PROPERTIES DEFINE_SYMBOL "gnuradio_vocoder_EXPORTS")
+set_target_properties(gnuradio-vocoder PROPERTIES SOVERSION ${LIBVER})
+
+install(TARGETS gnuradio-vocoder
+ LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT "vocoder_runtime" # .so/.dylib file
+ ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT "vocoder_devel" # .lib file
+ RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT "vocoder_runtime" # .dll file
+)
diff --git a/gr-vocoder/lib/codec2/CMakeLists.txt b/gr-vocoder/lib/codec2/CMakeLists.txt
new file mode 100644
index 000000000..c9839bd96
--- /dev/null
+++ b/gr-vocoder/lib/codec2/CMakeLists.txt
@@ -0,0 +1,113 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Create executable to generate other sources
+# http://www.vtk.org/Wiki/CMake_Cross_Compiling#Using_executables_in_the_build_created_during_the_build
+########################################################################
+if(NOT CMAKE_CROSSCOMPILING)
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+ add_executable(generate_codebook ${CMAKE_CURRENT_SOURCE_DIR}/generate_codebook.c)
+ target_link_libraries(generate_codebook -lm)
+ export(TARGETS generate_codebook APPEND FILE ${EXPORT_FILE})
+endif()
+
+########################################################################
+# Create codebook
+########################################################################
+set(CODEBOOKS
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/lsp1.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/lsp2.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/lsp3.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/lsp4.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/lsp5.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/lsp6.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/lsp7.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/lsp8.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/lsp9.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/lsp10.txt
+)
+
+add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebook.c
+ DEPENDS generate_codebook ${CODEBOOKS}
+ COMMAND generate_codebook lsp_cb ${CODEBOOKS} > ${CMAKE_CURRENT_BINARY_DIR}/codebook.c
+)
+
+########################################################################
+# Create codebookd
+########################################################################
+set(CODEBOOKSD
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/dlsp1.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/dlsp2.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/dlsp3.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/dlsp4.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/dlsp5.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/dlsp6.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/dlsp7.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/dlsp8.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/dlsp9.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/dlsp10.txt
+)
+
+add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookd.c
+ DEPENDS generate_codebook ${CODEBOOKSD}
+ COMMAND generate_codebook lsp_cbd ${CODEBOOKSD} > ${CMAKE_CURRENT_BINARY_DIR}/codebookd.c
+)
+
+########################################################################
+# Create codebookdvq
+########################################################################
+set(CODEBOOKSDVQ
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/dlsp1.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/dlsp2.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/dlsp3.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/dlsp4.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/codebook/dlsp5.txt
+)
+
+add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookdvq.c
+ DEPENDS generate_codebook ${CODEBOOKSDVQ}
+ COMMAND generate_codebook lsp_cbdvq ${CODEBOOKSDVQ} > ${CMAKE_CURRENT_BINARY_DIR}/codebookdvq.c
+)
+
+########################################################################
+# Append all sources in this dir
+########################################################################
+list(APPEND gr_vocoder_sources
+ ${CMAKE_CURRENT_BINARY_DIR}/codebook.c
+ ${CMAKE_CURRENT_BINARY_DIR}/codebookd.c
+ ${CMAKE_CURRENT_BINARY_DIR}/codebookdvq.c
+
+ ${CMAKE_CURRENT_SOURCE_DIR}/dump.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/lpc.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/nlp.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/postfilter.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/sine.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/codec2.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/fft.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/kiss_fft.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/interp.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/lsp.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/phase.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/quantise.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/pack.c
+)
diff --git a/gr-vocoder/lib/g7xx/CMakeLists.txt b/gr-vocoder/lib/g7xx/CMakeLists.txt
new file mode 100644
index 000000000..bde7538d2
--- /dev/null
+++ b/gr-vocoder/lib/g7xx/CMakeLists.txt
@@ -0,0 +1,30 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Append all sources in this dir
+########################################################################
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+list(APPEND gr_vocoder_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/g711.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/g72x.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/g721.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/g723_24.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/g723_40.c
+)
diff --git a/gr-vocoder/lib/gsm/CMakeLists.txt b/gr-vocoder/lib/gsm/CMakeLists.txt
new file mode 100644
index 000000000..8a4813a4f
--- /dev/null
+++ b/gr-vocoder/lib/gsm/CMakeLists.txt
@@ -0,0 +1,49 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Append all sources in this dir
+########################################################################
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+set(gsm_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/add.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/code.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/debug.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/decode.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/gsm_create.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/gsm_decode.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/gsm_destroy.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/gsm_encode.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/gsm_explode.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/gsm_implode.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/gsm_option.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/gsm_print.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/long_term.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/lpc.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/preprocess.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/rpe.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/short_term.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/table.c
+)
+
+set_source_files_properties(${gsm_sources}
+ PROPERTIES COMPILE_DEFINITION "NeedFunctionPrototypes=1"
+)
+list(APPEND gr_vocoder_sources ${gsm_sources})
diff --git a/gr-vocoder/lib/gsm/gsm_create.c b/gr-vocoder/lib/gsm/gsm_create.c
index de0b125b4..a59aa2f2a 100644
--- a/gr-vocoder/lib/gsm/gsm_create.c
+++ b/gr-vocoder/lib/gsm/gsm_create.c
@@ -30,7 +30,6 @@ static char const ident[] = "$Header$";
#include "gsm.h"
#include "private.h"
#include "proto.h"
-#include <strings.h>
gsm gsm_create P0()
{
diff --git a/gr-vocoder/python/CMakeLists.txt b/gr-vocoder/python/CMakeLists.txt
new file mode 100644
index 000000000..fff3fffbd
--- /dev/null
+++ b/gr-vocoder/python/CMakeLists.txt
@@ -0,0 +1,50 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup python install
+########################################################################
+include(GrPython)
+
+GR_PYTHON_INSTALL(
+ FILES
+ __init__.py
+ cvsd.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/vocoder
+ COMPONENT "vocoder_python"
+)
+
+########################################################################
+# Handle the unit tests
+########################################################################
+if(ENABLE_TESTING)
+include(GrTest)
+file(GLOB py_qa_test_files "qa_*.py")
+foreach(py_qa_test_file ${py_qa_test_files})
+ get_filename_component(py_qa_test_name ${py_qa_test_file} NAME_WE)
+ set(GR_TEST_PYTHON_DIRS
+ ${CMAKE_BINARY_DIR}/gnuradio-core/src/python
+ ${CMAKE_BINARY_DIR}/gnuradio-core/src/lib/swig
+ ${CMAKE_BINARY_DIR}/gr-vocoder/python
+ ${CMAKE_BINARY_DIR}/gr-vocoder/swig
+ )
+ set(GR_TEST_TARGET_DEPS gruel gnuradio-core gnuradio-vocoder)
+ GR_ADD_TEST(${py_qa_test_name} ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B} ${py_qa_test_file})
+endforeach(py_qa_test_file)
+endif(ENABLE_TESTING)
diff --git a/gr-vocoder/swig/CMakeLists.txt b/gr-vocoder/swig/CMakeLists.txt
new file mode 100644
index 000000000..3a8e16ebf
--- /dev/null
+++ b/gr-vocoder/swig/CMakeLists.txt
@@ -0,0 +1,61 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup swig generation
+########################################################################
+include(GrPython)
+include(GrSwig)
+
+set(GR_SWIG_INCLUDE_DIRS
+ ${GR_VOCODER_INCLUDE_DIRS}
+ ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
+)
+
+set(GR_SWIG_LIBRARIES gnuradio-vocoder)
+
+GR_SWIG_MAKE(vocoder_swig vocoder_swig.i)
+
+GR_SWIG_INSTALL(
+ TARGETS vocoder_swig
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/vocoder
+ COMPONENT "vocoder_python"
+)
+
+install(
+ FILES
+ vocoder_alaw_decode_bs.i
+ vocoder_alaw_encode_sb.i
+ vocoder_codec2_decode_ps.i
+ vocoder_codec2_encode_sp.i
+ vocoder_cvsd_decode_bs.i
+ vocoder_cvsd_encode_sb.i
+ vocoder_g721_decode_bs.i
+ vocoder_g721_encode_sb.i
+ vocoder_g723_24_decode_bs.i
+ vocoder_g723_24_encode_sb.i
+ vocoder_g723_40_decode_bs.i
+ vocoder_g723_40_encode_sb.i
+ vocoder_gsm_fr_encode_sp.i
+ vocoder_gsm_fr_decode_ps.i
+ vocoder_ulaw_decode_bs.i
+ vocoder_ulaw_encode_sb.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "vocoder_swig"
+)
diff --git a/gr-wxgui/CMakeLists.txt b/gr-wxgui/CMakeLists.txt
new file mode 100644
index 000000000..54fe4fb64
--- /dev/null
+++ b/gr-wxgui/CMakeLists.txt
@@ -0,0 +1,83 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup dependencies
+########################################################################
+include(GrPython)
+
+GR_PYTHON_CHECK_MODULE("wx >= 2.8" wx "wx.version().split()[0] >= '2.8'" WX_FOUND)
+GR_PYTHON_CHECK_MODULE("numpy" numpy True NUMPY_FOUND)
+
+########################################################################
+# Register component
+########################################################################
+include(GrComponent)
+GR_REGISTER_COMPONENT("gr-wxgui" ENABLE_WXGUI
+ ENABLE_GR_CORE
+ ENABLE_PYTHON
+ NUMPY_FOUND
+ WX_FOUND
+)
+
+########################################################################
+# Begin conditional configuration
+########################################################################
+if(ENABLE_WXGUI)
+
+########################################################################
+# Setup CPack components
+########################################################################
+include(GrPackage)
+CPACK_COMPONENT("wxgui"
+ DISPLAY_NAME "WxGUI"
+ DESCRIPTION "Wx GUI plotter widgets and grc wrappers"
+ DEPENDS "core_python"
+)
+
+########################################################################
+# Create Pkg Config File
+########################################################################
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr-wxgui.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/gr-wxgui.pc
+@ONLY)
+
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/gr-wxgui.pc
+ DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
+ COMPONENT "wxgui"
+)
+
+########################################################################
+# Install the conf file
+########################################################################
+install(
+ FILES ${CMAKE_CURRENT_SOURCE_DIR}/gr-wxgui.conf
+ DESTINATION ${GR_PKG_CONF_DIR}
+ COMPONENT "wxgui"
+)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(grc)
+add_subdirectory(src/python)
+
+endif(ENABLE_WXGUI)
diff --git a/gr-wxgui/grc/CMakeLists.txt b/gr-wxgui/grc/CMakeLists.txt
new file mode 100644
index 000000000..49e3da3b1
--- /dev/null
+++ b/gr-wxgui/grc/CMakeLists.txt
@@ -0,0 +1,36 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+file(GLOB xml_files "*.xml")
+install(FILES ${xml_files} DESTINATION ${GRC_BLOCKS_DIR} COMPONENT "wxgui")
+
+########################################################################
+#The wxgui module contains a top_block + wxgui frame.
+########################################################################
+include(GrPython)
+
+GR_PYTHON_INSTALL(
+ FILES
+ __init__.py
+ panel.py
+ top_block_gui.py
+ DESTINATION ${GR_PYTHON_DIR}/grc_gnuradio/wxgui
+ COMPONENT "wxgui"
+)
diff --git a/gr-wxgui/src/python/CMakeLists.txt b/gr-wxgui/src/python/CMakeLists.txt
new file mode 100644
index 000000000..24e06acd5
--- /dev/null
+++ b/gr-wxgui/src/python/CMakeLists.txt
@@ -0,0 +1,88 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrPython)
+
+########################################################################
+# Install python files into wxgui module
+########################################################################
+GR_PYTHON_INSTALL(
+ FILES
+ __init__.py
+ common.py
+ constants.py
+ constsink_gl.py
+ const_window.py
+ form.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
+ pubsub.py
+ scopesink2.py
+ scopesink_nongl.py
+ scopesink_gl.py
+ scope_window.py
+ termsink.py
+ waterfallsink2.py
+ waterfallsink_nongl.py
+ waterfallsink_gl.py
+ waterfall_window.py
+ slider.py
+ stdgui2.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/wxgui
+ COMPONENT "wxgui"
+)
+
+########################################################################
+# Install python files into wxgui forms sub-module
+########################################################################
+GR_PYTHON_INSTALL(
+ FILES
+ forms/__init__.py
+ forms/forms.py
+ forms/converters.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/wxgui/forms
+ COMPONENT "wxgui"
+)
+
+########################################################################
+# Install python files into wxgui plotter sub-module
+########################################################################
+GR_PYTHON_INSTALL(
+ FILES
+ plotter/__init__.py
+ plotter/bar_plotter.py
+ plotter/channel_plotter.py
+ plotter/common.py
+ plotter/gltext.py
+ plotter/grid_plotter_base.py
+ plotter/plotter_base.py
+ plotter/waterfall_plotter.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/wxgui/plotter
+ COMPONENT "wxgui"
+)
diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
new file mode 100644
index 000000000..340b8794c
--- /dev/null
+++ b/grc/CMakeLists.txt
@@ -0,0 +1,128 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup dependencies
+########################################################################
+include(GrPython)
+
+GR_PYTHON_CHECK_MODULE("python >= 2.5" sys "sys.version.split()[0] >= '2.5'" PYTHON_MIN_VER_FOUND)
+GR_PYTHON_CHECK_MODULE("Cheetah >= 2.0.0" Cheetah "Cheetah.Version >= '2.0.0'" CHEETAH_FOUND)
+GR_PYTHON_CHECK_MODULE("lxml >= 1.3.6" lxml.etree "lxml.etree.LXML_VERSION >= (1, 3, 6, 0)" LXML_FOUND)
+GR_PYTHON_CHECK_MODULE("pygtk >= 2.10.0" gtk "gtk.pygtk_version >= (2, 10, 0)" PYGTK_FOUND)
+GR_PYTHON_CHECK_MODULE("numpy" numpy True NUMPY_FOUND)
+
+########################################################################
+# Register component
+########################################################################
+include(GrComponent)
+if(NOT CMAKE_CROSSCOMPILING)
+ set(grc_python_deps
+ CHEETAH_FOUND
+ LXML_FOUND
+ PYGTK_FOUND
+ NUMPY_FOUND
+ )
+endif(NOT CMAKE_CROSSCOMPILING)
+
+GR_REGISTER_COMPONENT("gnuradio-companion" ENABLE_GRC
+ ENABLE_GR_CORE
+ ENABLE_PYTHON
+ PYTHON_MIN_VER_FOUND
+ ${grc_python_deps}
+)
+
+########################################################################
+# Begin conditional configuration
+########################################################################
+if(ENABLE_GRC)
+
+########################################################################
+# Setup CPack components
+########################################################################
+include(GrPackage)
+CPACK_COMPONENT("grc"
+ DISPLAY_NAME "GNU Radio Companion"
+ DESCRIPTION "Graphical flow graph designer"
+ DEPENDS "core_python"
+)
+
+########################################################################
+# Create and install the grc conf file
+########################################################################
+file(TO_NATIVE_PATH ${CMAKE_INSTALL_PREFIX}/${GR_PKG_DOC_DIR} docdir)
+file(TO_NATIVE_PATH ${CMAKE_INSTALL_PREFIX}/${GRC_BLOCKS_DIR} blocksdir)
+
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/grc.conf.in
+ ${CMAKE_CURRENT_BINARY_DIR}/grc.conf
+@ONLY)
+
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/grc.conf
+ DESTINATION ${GR_PKG_CONF_DIR}
+ COMPONENT "grc"
+)
+
+GR_PYTHON_INSTALL(
+ FILES __init__.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/grc
+ COMPONENT "grc"
+)
+
+########################################################################
+# Appens NSIS commands to set environment variables
+########################################################################
+if(WIN32)
+
+file(TO_NATIVE_PATH ${GR_PKG_DOC_DIR} GR_DOC_DIR)
+string(REPLACE "\\" "\\\\" GR_DOC_DIR ${GR_DOC_DIR})
+
+file(TO_NATIVE_PATH ${GRC_BLOCKS_DIR} GRC_BLOCKS_PATH)
+string(REPLACE "\\" "\\\\" GRC_BLOCKS_PATH ${GRC_BLOCKS_PATH})
+
+file(TO_NATIVE_PATH ${GR_PYTHON_DIR} GR_PYTHON_POSTFIX)
+string(REPLACE "\\" "\\\\" GR_PYTHON_POSTFIX ${GR_PYTHON_POSTFIX})
+
+CPACK_SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "${CPACK_NSIS_EXTRA_INSTALL_COMMANDS}
+ WriteRegStr HKLM ${HLKM_ENV} \\\"GR_DOC_DIR\\\" \\\"$INSTDIR\\\\${GR_DOC_DIR}\\\"
+ WriteRegStr HKLM ${HLKM_ENV} \\\"GRC_BLOCKS_PATH\\\" \\\"$INSTDIR\\\\${GRC_BLOCKS_PATH}\\\"
+ WriteRegStr HKLM \\\"SOFTWARE\\\\Python\\\\PythonCore\\\\2.7\\\\PythonPath\\\" \\\"gnuradio\\\" \\\"$INSTDIR\\\\${GR_PYTHON_POSTFIX}\\\"
+")
+
+CPACK_SET(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS}
+ DeleteRegValue HKLM ${HLKM_ENV} \\\"GR_DOC_DIR\\\"
+ DeleteRegValue HKLM ${HLKM_ENV} \\\"GRC_BLOCKS_PATH\\\"
+ DeleteRegValue HKLM \\\"SOFTWARE\\\\Python\\\\PythonCore\\\\2.7\\\\PythonPath\\\" \\\"gnuradio\\\"
+")
+
+endif(WIN32)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(base)
+add_subdirectory(blocks)
+add_subdirectory(freedesktop)
+add_subdirectory(grc_gnuradio)
+add_subdirectory(gui)
+add_subdirectory(python)
+add_subdirectory(scripts)
+
+endif(ENABLE_GRC)
diff --git a/grc/base/CMakeLists.txt b/grc/base/CMakeLists.txt
new file mode 100644
index 000000000..c6d6a09eb
--- /dev/null
+++ b/grc/base/CMakeLists.txt
@@ -0,0 +1,42 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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_PYTHON_INSTALL(FILES
+ odict.py
+ ParseXML.py
+ Block.py
+ Connection.py
+ Constants.py
+ Element.py
+ FlowGraph.py
+ Param.py
+ Platform.py
+ Port.py
+ __init__.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/grc/base
+ COMPONENT "grc"
+)
+
+install(FILES
+ block_tree.dtd
+ flow_graph.dtd
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/grc/base
+ COMPONENT "grc"
+)
diff --git a/grc/blocks/CMakeLists.txt b/grc/blocks/CMakeLists.txt
new file mode 100644
index 000000000..ad31b0975
--- /dev/null
+++ b/grc/blocks/CMakeLists.txt
@@ -0,0 +1,22 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+file(GLOB xml_files "*.xml")
+install(FILES ${xml_files} DESTINATION ${GRC_BLOCKS_DIR} COMPONENT "grc")
diff --git a/grc/freedesktop/CMakeLists.txt b/grc/freedesktop/CMakeLists.txt
new file mode 100644
index 000000000..8c0f53d9f
--- /dev/null
+++ b/grc/freedesktop/CMakeLists.txt
@@ -0,0 +1,47 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+set(grc_freedesktop_path ${GR_PKG_DATA_DIR}/grc/freedesktop)
+
+install(FILES
+ 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
+ DESTINATION ${grc_freedesktop_path}
+ COMPONENT "grc"
+)
+
+find_program(HAVE_XDG_UTILS xdg-desktop-menu)
+
+if(UNIX AND HAVE_XDG_UTILS)
+ set(SRCDIR ${CMAKE_INSTALL_PREFIX}/${grc_freedesktop_path})
+ configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/grc_setup_freedesktop.in
+ ${CMAKE_CURRENT_BINARY_DIR}/grc_setup_freedesktop
+ @ONLY)
+ install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/grc_setup_freedesktop
+ DESTINATION ${GR_PKG_LIBEXEC_DIR} COMPONENT "grc"
+ )
+endif(UNIX AND HAVE_XDG_UTILS)
diff --git a/grc/grc_gnuradio/CMakeLists.txt b/grc/grc_gnuradio/CMakeLists.txt
new file mode 100644
index 000000000..e992a60a3
--- /dev/null
+++ b/grc/grc_gnuradio/CMakeLists.txt
@@ -0,0 +1,35 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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_PYTHON_INSTALL(
+ FILES __init__.py
+ DESTINATION ${GR_PYTHON_DIR}/grc_gnuradio
+ COMPONENT "grc"
+)
+
+GR_PYTHON_INSTALL(FILES
+ blks2/__init__.py
+ blks2/error_rate.py
+ blks2/packet.py
+ blks2/selector.py
+ blks2/tcp.py
+ DESTINATION ${GR_PYTHON_DIR}/grc_gnuradio/blks2
+ COMPONENT "grc"
+)
diff --git a/grc/gui/CMakeLists.txt b/grc/gui/CMakeLists.txt
new file mode 100644
index 000000000..c2eb16e9f
--- /dev/null
+++ b/grc/gui/CMakeLists.txt
@@ -0,0 +1,48 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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_PYTHON_INSTALL(FILES
+ 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
+ PropsDialog.py
+ Preferences.py
+ StateCache.py
+ __init__.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/grc/gui
+ COMPONENT "grc"
+)
diff --git a/grc/python/CMakeLists.txt b/grc/python/CMakeLists.txt
new file mode 100644
index 000000000..2075d126d
--- /dev/null
+++ b/grc/python/CMakeLists.txt
@@ -0,0 +1,45 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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_PYTHON_INSTALL(FILES
+ 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
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/grc/python
+ COMPONENT "grc"
+)
+
+install(FILES
+ block.dtd
+ default_flow_graph.grc
+ flow_graph.tmpl
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/grc/python
+ COMPONENT "grc"
+)
diff --git a/grc/scripts/CMakeLists.txt b/grc/scripts/CMakeLists.txt
new file mode 100644
index 000000000..b8d5330f6
--- /dev/null
+++ b/grc/scripts/CMakeLists.txt
@@ -0,0 +1,25 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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_PYTHON_INSTALL(
+ PROGRAMS gnuradio-companion
+ DESTINATION ${GR_RUNTIME_DIR}
+ COMPONENT "grc"
+)
diff --git a/gruel/CMakeLists.txt b/gruel/CMakeLists.txt
new file mode 100644
index 000000000..b33217c14
--- /dev/null
+++ b/gruel/CMakeLists.txt
@@ -0,0 +1,105 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup dependencies
+########################################################################
+include(GrBoost)
+
+include(GrPython) #used for code generation
+
+########################################################################
+# Register component
+########################################################################
+include(GrComponent)
+GR_REGISTER_COMPONENT("gruel" ENABLE_GRUEL
+ Boost_FOUND
+ PYTHONINTERP_FOUND
+)
+
+include(GrMiscUtils)
+GR_SET_GLOBAL(GRUEL_INCLUDE_DIRS
+ ${Boost_INCLUDE_DIRS}
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/include
+ ${CMAKE_CURRENT_BINARY_DIR}/src/include
+)
+
+########################################################################
+# Begin conditional configuration
+########################################################################
+if(ENABLE_GRUEL)
+
+########################################################################
+# Setup CPack components
+########################################################################
+include(GrPackage)
+CPACK_SET(CPACK_COMPONENT_GROUP_GRUEL_DESCRIPTION "GNU Radio Utility Etcetera Library")
+
+CPACK_COMPONENT("gruel_runtime"
+ GROUP "Gruel"
+ DISPLAY_NAME "Runtime"
+ DESCRIPTION "Dynamic link libraries"
+)
+
+CPACK_COMPONENT("gruel_devel"
+ GROUP "Gruel"
+ DISPLAY_NAME "Development"
+ DESCRIPTION "C++ headers, package config, import libraries"
+)
+
+CPACK_COMPONENT("gruel_python"
+ GROUP "Gruel"
+ DISPLAY_NAME "Python"
+ DESCRIPTION "Python modules for runtime"
+ DEPENDS "gruel_runtime"
+)
+
+CPACK_COMPONENT("gruel_swig"
+ GROUP "Gruel"
+ DISPLAY_NAME "SWIG"
+ DESCRIPTION "SWIG development .i files"
+ DEPENDS "gruel_python;gruel_devel"
+)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(src/include/gruel)
+add_subdirectory(src/scheme/gnuradio)
+add_subdirectory(src/lib)
+if(ENABLE_PYTHON)
+ add_subdirectory(src/swig)
+ add_subdirectory(src/python)
+endif(ENABLE_PYTHON)
+
+########################################################################
+# Create Pkg Config File
+########################################################################
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/gruel.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/gruel.pc
+@ONLY)
+
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/gruel.pc
+ DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
+ COMPONENT "gruel_devel"
+)
+
+endif(ENABLE_GRUEL)
diff --git a/gruel/src/include/gruel/CMakeLists.txt b/gruel/src/include/gruel/CMakeLists.txt
new file mode 100644
index 000000000..811856b98
--- /dev/null
+++ b/gruel/src/include/gruel/CMakeLists.txt
@@ -0,0 +1,56 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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 inet.h header file
+########################################################################
+include(TestBigEndian)
+enable_language(C)
+TEST_BIG_ENDIAN(GR_ARCH_BIGENDIAN)
+
+include(CheckIncludeFileCXX)
+CHECK_INCLUDE_FILE_CXX(byteswap.h GR_HAVE_BYTESWAP)
+CHECK_INCLUDE_FILE_CXX(arpa/inet.h GR_HAVE_ARPA_INET)
+
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/inet.h.in
+ ${CMAKE_CURRENT_BINARY_DIR}/inet.h
+@ONLY)
+
+########################################################################
+# Install the headers
+########################################################################
+install(FILES
+ api.h
+ attributes.h
+ high_res_timer.h
+ ${CMAKE_CURRENT_BINARY_DIR}/inet.h
+ msg_accepter.h
+ msg_accepter_msgq.h
+ msg_queue.h
+ msg_passing.h
+ pmt.h
+ pmt_pool.h
+ pmt_sugar.h
+ realtime.h
+ sys_pri.h
+ thread_body_wrapper.h
+ thread_group.h
+ thread.h
+DESTINATION ${GR_INCLUDE_DIR}/gruel COMPONENT "gruel_devel")
diff --git a/gruel/src/include/gruel/Makefile.am b/gruel/src/include/gruel/Makefile.am
index 96aed326e..fce739f08 100644
--- a/gruel/src/include/gruel/Makefile.am
+++ b/gruel/src/include/gruel/Makefile.am
@@ -26,6 +26,7 @@ EXTRA_DIST += inet.h.in
gruelincludedir = $(prefix)/include/gruel
gruelinclude_HEADERS = \
+ api.h \
attributes.h \
high_res_timer.h \
inet.h \
diff --git a/gruel/src/include/gruel/api.h b/gruel/src/include/gruel/api.h
new file mode 100644
index 000000000..945814d43
--- /dev/null
+++ b/gruel/src/include/gruel/api.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2010 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_GRUEL_API_H
+#define INCLUDED_GRUEL_API_H
+
+#include <gruel/attributes.h>
+
+#ifdef gruel_EXPORTS
+# define GRUEL_API __GR_ATTR_EXPORT
+#else
+# define GRUEL_API __GR_ATTR_IMPORT
+#endif
+
+#endif /* INCLUDED_GRUEL_API_H */
diff --git a/gruel/src/include/gruel/attributes.h b/gruel/src/include/gruel/attributes.h
index fdf48c977..baa5521c8 100644
--- a/gruel/src/include/gruel/attributes.h
+++ b/gruel/src/include/gruel/attributes.h
@@ -53,4 +53,22 @@
# define __GR_ATTR_IMPORT
#endif
+////////////////////////////////////////////////////////////////////////
+// define inline when building C
+////////////////////////////////////////////////////////////////////////
+#if defined(_MSC_VER) && !defined(__cplusplus) && !defined(inline)
+# define inline __inline
+#endif
+
+////////////////////////////////////////////////////////////////////////
+// suppress warnings
+////////////////////////////////////////////////////////////////////////
+#ifdef _MSC_VER
+# pragma warning(disable: 4251) // class 'A<T>' needs to have dll-interface to be used by clients of class 'B'
+# pragma warning(disable: 4275) // non dll-interface class ... used as base for dll-interface class ...
+# pragma warning(disable: 4244) // conversion from 'double' to 'float', possible loss of data
+# pragma warning(disable: 4305) // 'initializing' : truncation from 'double' to 'float'
+# pragma warning(disable: 4290) // C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
+#endif
+
#endif /* INCLUDED_GRUEL_ATTRIBUTES_H */
diff --git a/gruel/src/include/gruel/inet.h.in b/gruel/src/include/gruel/inet.h.in
index 7ac01eb56..8545aeea9 100644
--- a/gruel/src/include/gruel/inet.h.in
+++ b/gruel/src/include/gruel/inet.h.in
@@ -19,6 +19,7 @@
#ifndef INCLUDED_INET_H
#define INCLUDED_INET_H
+#include <gruel/api.h>
#include <stdint.h>
#if 1 /* missing htonll or ntohll */
diff --git a/gruel/src/include/gruel/msg_accepter.h b/gruel/src/include/gruel/msg_accepter.h
index 70ac846f5..3dfc8bcf8 100644
--- a/gruel/src/include/gruel/msg_accepter.h
+++ b/gruel/src/include/gruel/msg_accepter.h
@@ -21,6 +21,7 @@
#ifndef INCLUDED_GRUEL_MSG_ACCEPTER_H
#define INCLUDED_GRUEL_MSG_ACCEPTER_H
+#include <gruel/api.h>
#include <gruel/pmt.h>
#include <boost/shared_ptr.hpp>
@@ -29,7 +30,7 @@ namespace gruel {
/*!
* \brief Virtual base class that accepts messages
*/
- class msg_accepter
+ class GRUEL_API msg_accepter
{
public:
msg_accepter() {};
diff --git a/gruel/src/include/gruel/msg_accepter_msgq.h b/gruel/src/include/gruel/msg_accepter_msgq.h
index bf1762e92..22a1855cf 100644
--- a/gruel/src/include/gruel/msg_accepter_msgq.h
+++ b/gruel/src/include/gruel/msg_accepter_msgq.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_MSG_ACCEPTER_MSGQ_H
#define INCLUDED_MSG_ACCEPTER_MSGQ_H
+#include <gruel/api.h>
#include <gruel/msg_accepter.h>
#include <gruel/msg_queue.h>
@@ -30,7 +31,7 @@ namespace gruel {
/*!
* \brief Concrete class that accepts messages and inserts them into a message queue.
*/
- class msg_accepter_msgq : public msg_accepter
+ class GRUEL_API msg_accepter_msgq : public msg_accepter
{
protected:
msg_queue_sptr d_msg_queue;
diff --git a/gruel/src/include/gruel/msg_passing.h b/gruel/src/include/gruel/msg_passing.h
index ebbeca815..51268967a 100644
--- a/gruel/src/include/gruel/msg_passing.h
+++ b/gruel/src/include/gruel/msg_passing.h
@@ -25,6 +25,7 @@
* \brief Include this header to use the message passing features
*/
+#include <gruel/api.h>
#include <gruel/pmt.h>
#include <gruel/msg_accepter.h>
diff --git a/gruel/src/include/gruel/msg_queue.h b/gruel/src/include/gruel/msg_queue.h
index c24313df6..8608842da 100644
--- a/gruel/src/include/gruel/msg_queue.h
+++ b/gruel/src/include/gruel/msg_queue.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_MSG_QUEUE_H
#define INCLUDED_MSG_QUEUE_H
+#include <gruel/api.h>
#include <gruel/thread.h>
#include <gruel/pmt.h>
#include <deque>
@@ -36,7 +37,7 @@ namespace gruel {
/*!
* \brief thread-safe message queue
*/
- class msg_queue {
+ class GRUEL_API msg_queue {
gruel::mutex d_mutex;
gruel::condition_variable d_not_empty;
diff --git a/gruel/src/include/gruel/pmt.h b/gruel/src/include/gruel/pmt.h
index 2948abb39..58533e54e 100644
--- a/gruel/src/include/gruel/pmt.h
+++ b/gruel/src/include/gruel/pmt.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_PMT_H
#define INCLUDED_PMT_H
+#include <gruel/api.h>
#include <boost/intrusive_ptr.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/any.hpp>
@@ -57,28 +58,28 @@ class pmt_base;
*/
typedef boost::intrusive_ptr<pmt_base> pmt_t;
-extern void intrusive_ptr_add_ref(pmt_base*);
-extern void intrusive_ptr_release(pmt_base*);
+extern GRUEL_API void intrusive_ptr_add_ref(pmt_base*);
+extern GRUEL_API void intrusive_ptr_release(pmt_base*);
-class pmt_exception : public std::logic_error
+class GRUEL_API pmt_exception : public std::logic_error
{
public:
pmt_exception(const std::string &msg, pmt_t obj);
};
-class pmt_wrong_type : public pmt_exception
+class GRUEL_API 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
+class GRUEL_API 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
+class GRUEL_API pmt_notimplemented : public pmt_exception
{
public:
pmt_notimplemented(const std::string &msg, pmt_t obj);
@@ -92,24 +93,24 @@ public:
* 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
+extern GRUEL_API const pmt_t PMT_T; //< \#t : boolean true constant
+extern GRUEL_API 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);
+GRUEL_API bool pmt_is_bool(pmt_t obj);
//! Return false if obj is \#f, else return true.
-bool pmt_is_true(pmt_t obj);
+GRUEL_API bool pmt_is_true(pmt_t obj);
//! Return true if obj is \#f, else return true.
-bool pmt_is_false(pmt_t obj);
+GRUEL_API bool pmt_is_false(pmt_t obj);
//! Return \#f is val is false, else return \#t.
-pmt_t pmt_from_bool(bool val);
+GRUEL_API 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);
+GRUEL_API bool pmt_to_bool(pmt_t val);
/*
* ------------------------------------------------------------------------
@@ -118,20 +119,20 @@ bool pmt_to_bool(pmt_t val);
*/
//! Return true if obj is a symbol, else false.
-bool pmt_is_symbol(const pmt_t& obj);
+GRUEL_API bool pmt_is_symbol(const pmt_t& obj);
//! Return the symbol whose name is \p s.
-pmt_t pmt_string_to_symbol(const std::string &s);
+GRUEL_API pmt_t pmt_string_to_symbol(const std::string &s);
//! Alias for pmt_string_to_symbol
-pmt_t pmt_intern(const std::string &s);
+GRUEL_API 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(const pmt_t& sym);
+GRUEL_API const std::string pmt_symbol_to_string(const pmt_t& sym);
/*
* ------------------------------------------------------------------------
@@ -140,7 +141,7 @@ const std::string pmt_symbol_to_string(const pmt_t& sym);
*/
//! Return true if obj is any kind of number, else false.
-bool pmt_is_number(pmt_t obj);
+GRUEL_API bool pmt_is_number(pmt_t obj);
/*
* ------------------------------------------------------------------------
@@ -149,10 +150,10 @@ bool pmt_is_number(pmt_t obj);
*/
//! Return true if \p x is an integer number, else false
-bool pmt_is_integer(pmt_t x);
+GRUEL_API bool pmt_is_integer(pmt_t x);
//! Return the pmt value that represents the integer \p x.
-pmt_t pmt_from_long(long x);
+GRUEL_API pmt_t pmt_from_long(long x);
/*!
* \brief Convert pmt to long if possible.
@@ -161,7 +162,7 @@ pmt_t pmt_from_long(long x);
* 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);
+GRUEL_API long pmt_to_long(pmt_t x);
/*
* ------------------------------------------------------------------------
@@ -170,10 +171,10 @@ long pmt_to_long(pmt_t x);
*/
//! Return true if \p x is an uint64 number, else false
-bool pmt_is_uint64(pmt_t x);
+GRUEL_API bool pmt_is_uint64(pmt_t x);
//! Return the pmt value that represents the uint64 \p x.
-pmt_t pmt_from_uint64(uint64_t x);
+GRUEL_API pmt_t pmt_from_uint64(uint64_t x);
/*!
* \brief Convert pmt to uint64 if possible.
@@ -182,7 +183,7 @@ pmt_t pmt_from_uint64(uint64_t x);
* return that uint64. Else raise an exception, either wrong_type
* when x is not an exact uint64, or out_of_range when it doesn't fit.
*/
-uint64_t pmt_to_uint64(pmt_t x);
+GRUEL_API uint64_t pmt_to_uint64(pmt_t x);
/*
* ------------------------------------------------------------------------
@@ -193,10 +194,10 @@ uint64_t pmt_to_uint64(pmt_t x);
/*
* \brief Return true if \p obj is a real number, else false.
*/
-bool pmt_is_real(pmt_t obj);
+GRUEL_API bool pmt_is_real(pmt_t obj);
//! Return the pmt value that represents double \p x.
-pmt_t pmt_from_double(double x);
+GRUEL_API pmt_t pmt_from_double(double x);
/*!
* \brief Convert pmt to double if possible.
@@ -205,7 +206,7 @@ pmt_t pmt_from_double(double x);
* 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);
+GRUEL_API double pmt_to_double(pmt_t x);
/*
* ------------------------------------------------------------------------
@@ -216,16 +217,16 @@ double pmt_to_double(pmt_t x);
/*!
* \brief return true if \p obj is a complex number, false otherwise.
*/
-bool pmt_is_complex(pmt_t obj);
+GRUEL_API 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);
+GRUEL_API pmt_t pmt_make_rectangular(double re, double im);
/*!
* If \p z is complex, real or integer, return the closest complex<double>.
* Otherwise, raise the wrong_type exception.
*/
-std::complex<double> pmt_to_complex(pmt_t z);
+GRUEL_API std::complex<double> pmt_to_complex(pmt_t z);
/*
* ------------------------------------------------------------------------
@@ -233,35 +234,35 @@ std::complex<double> pmt_to_complex(pmt_t z);
* ------------------------------------------------------------------------
*/
-extern const pmt_t PMT_NIL; //< the empty list
+extern GRUEL_API const pmt_t PMT_NIL; //< the empty list
//! Return true if \p x is the empty list, otherwise return false.
-bool pmt_is_null(const pmt_t& x);
+GRUEL_API bool pmt_is_null(const pmt_t& x);
//! Return true if \p obj is a pair, else false.
-bool pmt_is_pair(const pmt_t& obj);
+GRUEL_API bool pmt_is_pair(const pmt_t& obj);
//! Return a newly allocated pair whose car is \p x and whose cdr is \p y.
-pmt_t pmt_cons(const pmt_t& x, const pmt_t& y);
+GRUEL_API pmt_t pmt_cons(const pmt_t& x, const pmt_t& y);
//! If \p pair is a pair, return the car of the \p pair, otherwise raise wrong_type.
-pmt_t pmt_car(const pmt_t& pair);
+GRUEL_API pmt_t pmt_car(const pmt_t& pair);
//! If \p pair is a pair, return the cdr of the \p pair, otherwise raise wrong_type.
-pmt_t pmt_cdr(const pmt_t& pair);
+GRUEL_API pmt_t pmt_cdr(const pmt_t& pair);
//! Stores \p value in the car field of \p pair.
-void pmt_set_car(pmt_t pair, pmt_t value);
+GRUEL_API 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);
+GRUEL_API 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);
+GRUEL_API pmt_t pmt_caar(pmt_t pair);
+GRUEL_API pmt_t pmt_cadr(pmt_t pair);
+GRUEL_API pmt_t pmt_cdar(pmt_t pair);
+GRUEL_API pmt_t pmt_cddr(pmt_t pair);
+GRUEL_API pmt_t pmt_caddr(pmt_t pair);
+GRUEL_API pmt_t pmt_cadddr(pmt_t pair);
/*
* ------------------------------------------------------------------------
@@ -274,30 +275,30 @@ pmt_t pmt_cadddr(pmt_t pair);
*/
//! Return true if \p x is a tuple, othewise false.
-bool pmt_is_tuple(pmt_t x);
+GRUEL_API bool pmt_is_tuple(pmt_t x);
-pmt_t pmt_make_tuple();
-pmt_t pmt_make_tuple(const pmt_t &e0);
-pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1);
-pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2);
-pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3);
-pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4);
-pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5);
-pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5, const pmt_t &e6);
-pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5, const pmt_t &e6, const pmt_t &e7);
-pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5, const pmt_t &e6, const pmt_t &e7, const pmt_t &e8);
-pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5, const pmt_t &e6, const pmt_t &e7, const pmt_t &e8, const pmt_t &e9);
+GRUEL_API pmt_t pmt_make_tuple();
+GRUEL_API pmt_t pmt_make_tuple(const pmt_t &e0);
+GRUEL_API pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1);
+GRUEL_API pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2);
+GRUEL_API pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3);
+GRUEL_API pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4);
+GRUEL_API pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5);
+GRUEL_API pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5, const pmt_t &e6);
+GRUEL_API pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5, const pmt_t &e6, const pmt_t &e7);
+GRUEL_API pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5, const pmt_t &e6, const pmt_t &e7, const pmt_t &e8);
+GRUEL_API pmt_t pmt_make_tuple(const pmt_t &e0, const pmt_t &e1, const pmt_t &e2, const pmt_t &e3, const pmt_t &e4, const pmt_t &e5, const pmt_t &e6, const pmt_t &e7, const pmt_t &e8, const pmt_t &e9);
/*!
* If \p x is a vector or proper list, return a tuple containing the elements of x
*/
-pmt_t pmt_to_tuple(const pmt_t &x);
+GRUEL_API pmt_t pmt_to_tuple(const pmt_t &x);
/*!
* Return the contents of position \p k of \p tuple.
* \p k must be a valid index of \p tuple.
*/
-pmt_t pmt_tuple_ref(const pmt_t &tuple, size_t k);
+GRUEL_API pmt_t pmt_tuple_ref(const pmt_t &tuple, size_t k);
/*
* ------------------------------------------------------------------------
@@ -308,22 +309,22 @@ pmt_t pmt_tuple_ref(const pmt_t &tuple, size_t k);
*/
//! Return true if \p x is a vector, othewise false.
-bool pmt_is_vector(pmt_t x);
+GRUEL_API 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);
+GRUEL_API 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);
+GRUEL_API 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);
+GRUEL_API 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);
+GRUEL_API void pmt_vector_fill(pmt_t vector, pmt_t fill);
/*
* ------------------------------------------------------------------------
@@ -334,7 +335,7 @@ void pmt_vector_fill(pmt_t vector, pmt_t fill);
*/
//! Return true if \p x is a blob, othewise false.
-bool pmt_is_blob(pmt_t x);
+GRUEL_API bool pmt_is_blob(pmt_t x);
/*!
* \brief Make a blob given a pointer and length in bytes
@@ -344,13 +345,13 @@ bool pmt_is_blob(pmt_t x);
*
* The data is copied into the blob.
*/
-pmt_t pmt_make_blob(const void *buf, size_t len);
+GRUEL_API pmt_t pmt_make_blob(const void *buf, size_t len);
//! Return a pointer to the blob's data
-const void *pmt_blob_data(pmt_t blob);
+GRUEL_API const void *pmt_blob_data(pmt_t blob);
//! Return the blob's length in bytes
-size_t pmt_blob_length(pmt_t blob);
+GRUEL_API size_t pmt_blob_length(pmt_t blob);
/*!
* <pre>
@@ -382,106 +383,106 @@ size_t pmt_blob_length(pmt_t blob);
*/
//! 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<float> fill);
-pmt_t pmt_make_c64vector(size_t k, std::complex<double> 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<float> *data);
-pmt_t pmt_init_c64vector(size_t k, const std::complex<double> *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<float> pmt_c32vector_ref(pmt_t v, size_t k);
-std::complex<double> 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<float> x);
-void pmt_c64vector_set(pmt_t v, size_t k, std::complex<double> x);
+GRUEL_API bool pmt_is_uniform_vector(pmt_t x);
+
+GRUEL_API bool pmt_is_u8vector(pmt_t x);
+GRUEL_API bool pmt_is_s8vector(pmt_t x);
+GRUEL_API bool pmt_is_u16vector(pmt_t x);
+GRUEL_API bool pmt_is_s16vector(pmt_t x);
+GRUEL_API bool pmt_is_u32vector(pmt_t x);
+GRUEL_API bool pmt_is_s32vector(pmt_t x);
+GRUEL_API bool pmt_is_u64vector(pmt_t x);
+GRUEL_API bool pmt_is_s64vector(pmt_t x);
+GRUEL_API bool pmt_is_f32vector(pmt_t x);
+GRUEL_API bool pmt_is_f64vector(pmt_t x);
+GRUEL_API bool pmt_is_c32vector(pmt_t x);
+GRUEL_API bool pmt_is_c64vector(pmt_t x);
+
+GRUEL_API pmt_t pmt_make_u8vector(size_t k, uint8_t fill);
+GRUEL_API pmt_t pmt_make_s8vector(size_t k, int8_t fill);
+GRUEL_API pmt_t pmt_make_u16vector(size_t k, uint16_t fill);
+GRUEL_API pmt_t pmt_make_s16vector(size_t k, int16_t fill);
+GRUEL_API pmt_t pmt_make_u32vector(size_t k, uint32_t fill);
+GRUEL_API pmt_t pmt_make_s32vector(size_t k, int32_t fill);
+GRUEL_API pmt_t pmt_make_u64vector(size_t k, uint64_t fill);
+GRUEL_API pmt_t pmt_make_s64vector(size_t k, int64_t fill);
+GRUEL_API pmt_t pmt_make_f32vector(size_t k, float fill);
+GRUEL_API pmt_t pmt_make_f64vector(size_t k, double fill);
+GRUEL_API pmt_t pmt_make_c32vector(size_t k, std::complex<float> fill);
+GRUEL_API pmt_t pmt_make_c64vector(size_t k, std::complex<double> fill);
+
+GRUEL_API pmt_t pmt_init_u8vector(size_t k, const uint8_t *data);
+GRUEL_API pmt_t pmt_init_s8vector(size_t k, const int8_t *data);
+GRUEL_API pmt_t pmt_init_u16vector(size_t k, const uint16_t *data);
+GRUEL_API pmt_t pmt_init_s16vector(size_t k, const int16_t *data);
+GRUEL_API pmt_t pmt_init_u32vector(size_t k, const uint32_t *data);
+GRUEL_API pmt_t pmt_init_s32vector(size_t k, const int32_t *data);
+GRUEL_API pmt_t pmt_init_u64vector(size_t k, const uint64_t *data);
+GRUEL_API pmt_t pmt_init_s64vector(size_t k, const int64_t *data);
+GRUEL_API pmt_t pmt_init_f32vector(size_t k, const float *data);
+GRUEL_API pmt_t pmt_init_f64vector(size_t k, const double *data);
+GRUEL_API pmt_t pmt_init_c32vector(size_t k, const std::complex<float> *data);
+GRUEL_API pmt_t pmt_init_c64vector(size_t k, const std::complex<double> *data);
+
+GRUEL_API uint8_t pmt_u8vector_ref(pmt_t v, size_t k);
+GRUEL_API int8_t pmt_s8vector_ref(pmt_t v, size_t k);
+GRUEL_API uint16_t pmt_u16vector_ref(pmt_t v, size_t k);
+GRUEL_API int16_t pmt_s16vector_ref(pmt_t v, size_t k);
+GRUEL_API uint32_t pmt_u32vector_ref(pmt_t v, size_t k);
+GRUEL_API int32_t pmt_s32vector_ref(pmt_t v, size_t k);
+GRUEL_API uint64_t pmt_u64vector_ref(pmt_t v, size_t k);
+GRUEL_API int64_t pmt_s64vector_ref(pmt_t v, size_t k);
+GRUEL_API float pmt_f32vector_ref(pmt_t v, size_t k);
+GRUEL_API double pmt_f64vector_ref(pmt_t v, size_t k);
+GRUEL_API std::complex<float> pmt_c32vector_ref(pmt_t v, size_t k);
+GRUEL_API std::complex<double> pmt_c64vector_ref(pmt_t v, size_t k);
+
+GRUEL_API void pmt_u8vector_set(pmt_t v, size_t k, uint8_t x); //< v[k] = x
+GRUEL_API void pmt_s8vector_set(pmt_t v, size_t k, int8_t x);
+GRUEL_API void pmt_u16vector_set(pmt_t v, size_t k, uint16_t x);
+GRUEL_API void pmt_s16vector_set(pmt_t v, size_t k, int16_t x);
+GRUEL_API void pmt_u32vector_set(pmt_t v, size_t k, uint32_t x);
+GRUEL_API void pmt_s32vector_set(pmt_t v, size_t k, int32_t x);
+GRUEL_API void pmt_u64vector_set(pmt_t v, size_t k, uint64_t x);
+GRUEL_API void pmt_s64vector_set(pmt_t v, size_t k, int64_t x);
+GRUEL_API void pmt_f32vector_set(pmt_t v, size_t k, float x);
+GRUEL_API void pmt_f64vector_set(pmt_t v, size_t k, double x);
+GRUEL_API void pmt_c32vector_set(pmt_t v, size_t k, std::complex<float> x);
+GRUEL_API void pmt_c64vector_set(pmt_t v, size_t k, std::complex<double> 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<float> *pmt_c32vector_elements(pmt_t v, size_t &len); //< len is in elements
-const std::complex<double> *pmt_c64vector_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API const void *pmt_uniform_vector_elements(pmt_t v, size_t &len); //< works with any; len is in bytes
+
+GRUEL_API const uint8_t *pmt_u8vector_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API const int8_t *pmt_s8vector_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API const uint16_t *pmt_u16vector_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API const int16_t *pmt_s16vector_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API const uint32_t *pmt_u32vector_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API const int32_t *pmt_s32vector_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API const uint64_t *pmt_u64vector_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API const int64_t *pmt_s64vector_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API const float *pmt_f32vector_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API const double *pmt_f64vector_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API const std::complex<float> *pmt_c32vector_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API const std::complex<double> *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<float> *pmt_c32vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
-std::complex<double> *pmt_c64vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API void *pmt_uniform_vector_writable_elements(pmt_t v, size_t &len); //< works with any; len is in bytes
+
+GRUEL_API uint8_t *pmt_u8vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API int8_t *pmt_s8vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API uint16_t *pmt_u16vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API int16_t *pmt_s16vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API uint32_t *pmt_u32vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API int32_t *pmt_s32vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API uint64_t *pmt_u64vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API int64_t *pmt_s64vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API float *pmt_f32vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API double *pmt_f64vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API std::complex<float> *pmt_c32vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
+GRUEL_API std::complex<double> *pmt_c64vector_writable_elements(pmt_t v, size_t &len); //< len is in elements
/*
* ------------------------------------------------------------------------
@@ -494,31 +495,31 @@ std::complex<double> *pmt_c64vector_writable_elements(pmt_t v, size_t &len); //<
*/
//! Return true if \p obj is a dictionary
-bool pmt_is_dict(const pmt_t &obj);
+GRUEL_API bool pmt_is_dict(const pmt_t &obj);
//! Make an empty dictionary
-pmt_t pmt_make_dict();
+GRUEL_API pmt_t pmt_make_dict();
//! Return a new dictionary with \p key associated with \p value.
-pmt_t pmt_dict_add(const pmt_t &dict, const pmt_t &key, const pmt_t &value);
+GRUEL_API pmt_t pmt_dict_add(const pmt_t &dict, const pmt_t &key, const pmt_t &value);
//! Return a new dictionary with \p key removed.
-pmt_t pmt_dict_delete(const pmt_t &dict, const pmt_t &key);
+GRUEL_API pmt_t pmt_dict_delete(const pmt_t &dict, const pmt_t &key);
//! Return true if \p key exists in \p dict
-bool pmt_dict_has_key(const pmt_t &dict, const pmt_t &key);
+GRUEL_API bool pmt_dict_has_key(const pmt_t &dict, const pmt_t &key);
//! If \p key exists in \p dict, return associated value; otherwise return \p not_found.
-pmt_t pmt_dict_ref(const pmt_t &dict, const pmt_t &key, const pmt_t &not_found);
+GRUEL_API pmt_t pmt_dict_ref(const pmt_t &dict, const pmt_t &key, const pmt_t &not_found);
//! Return list of (key . value) pairs
-pmt_t pmt_dict_items(pmt_t dict);
+GRUEL_API pmt_t pmt_dict_items(pmt_t dict);
//! Return list of keys
-pmt_t pmt_dict_keys(pmt_t dict);
+GRUEL_API pmt_t pmt_dict_keys(pmt_t dict);
//! Return list of values
-pmt_t pmt_dict_values(pmt_t dict);
+GRUEL_API pmt_t pmt_dict_values(pmt_t dict);
/*
* ------------------------------------------------------------------------
@@ -530,16 +531,16 @@ pmt_t pmt_dict_values(pmt_t dict);
*/
//! Return true if \p obj is an any
-bool pmt_is_any(pmt_t obj);
+GRUEL_API bool pmt_is_any(pmt_t obj);
//! make an any
-pmt_t pmt_make_any(const boost::any &any);
+GRUEL_API pmt_t pmt_make_any(const boost::any &any);
//! Return underlying boost::any
-boost::any pmt_any_ref(pmt_t obj);
+GRUEL_API 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);
+GRUEL_API void pmt_any_set(pmt_t obj, const boost::any &any);
/*
@@ -548,13 +549,13 @@ void pmt_any_set(pmt_t obj, const boost::any &any);
* ------------------------------------------------------------------------
*/
//! Return true if \p obj is a msg_accepter
-bool pmt_is_msg_accepter(const pmt_t &obj);
+GRUEL_API bool pmt_is_msg_accepter(const pmt_t &obj);
//! make a msg_accepter
-pmt_t pmt_make_msg_accepter(boost::shared_ptr<gruel::msg_accepter> ma);
+GRUEL_API pmt_t pmt_make_msg_accepter(boost::shared_ptr<gruel::msg_accepter> ma);
//! Return underlying msg_accepter
-boost::shared_ptr<gruel::msg_accepter> pmt_msg_accepter_ref(const pmt_t &obj);
+GRUEL_API boost::shared_ptr<gruel::msg_accepter> pmt_msg_accepter_ref(const pmt_t &obj);
/*
* ------------------------------------------------------------------------
@@ -563,7 +564,7 @@ boost::shared_ptr<gruel::msg_accepter> pmt_msg_accepter_ref(const pmt_t &obj);
*/
//! Return true if x and y are the same object; otherwise return false.
-bool pmt_eq(const pmt_t& x, const pmt_t& y);
+GRUEL_API bool pmt_eq(const pmt_t& x, const pmt_t& y);
/*!
* \brief Return true if x and y should normally be regarded as the same object, else false.
@@ -578,7 +579,7 @@ bool pmt_eq(const pmt_t& x, const pmt_t& y);
* x and y are pairs or vectors that denote same location in store.
* </pre>
*/
-bool pmt_eqv(const pmt_t& x, const pmt_t& y);
+GRUEL_API bool pmt_eqv(const pmt_t& x, const pmt_t& y);
/*!
* pmt_equal recursively compares the contents of pairs and vectors,
@@ -586,11 +587,11 @@ bool pmt_eqv(const pmt_t& x, const pmt_t& y);
* pmt_equal may fail to terminate if its arguments are circular data
* structures.
*/
-bool pmt_equal(const pmt_t& x, const pmt_t& y);
+GRUEL_API bool pmt_equal(const pmt_t& x, const pmt_t& y);
//! Return the number of elements in v
-size_t pmt_length(const pmt_t& v);
+GRUEL_API size_t pmt_length(const pmt_t& v);
/*!
* \brief Find the first pair in \p alist whose car field is \p obj
@@ -600,7 +601,7 @@ size_t pmt_length(const pmt_t& v);
* 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);
+GRUEL_API pmt_t pmt_assq(pmt_t obj, pmt_t alist);
/*!
* \brief Find the first pair in \p alist whose car field is \p obj
@@ -610,7 +611,7 @@ pmt_t pmt_assq(pmt_t obj, pmt_t alist);
* 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);
+GRUEL_API pmt_t pmt_assv(pmt_t obj, pmt_t alist);
/*!
* \brief Find the first pair in \p alist whose car field is \p obj
@@ -620,7 +621,7 @@ pmt_t pmt_assv(pmt_t obj, pmt_t alist);
* 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);
+GRUEL_API pmt_t pmt_assoc(pmt_t obj, pmt_t alist);
/*!
* \brief Apply \p proc element-wise to the elements of list and returns
@@ -629,21 +630,21 @@ pmt_t pmt_assoc(pmt_t obj, pmt_t alist);
* \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(const pmt_t&), pmt_t list);
+GRUEL_API pmt_t pmt_map(pmt_t proc(const pmt_t&), pmt_t list);
/*!
* \brief reverse \p list.
*
* \p list must be a proper list.
*/
-pmt_t pmt_reverse(pmt_t list);
+GRUEL_API 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);
+GRUEL_API pmt_t pmt_reverse_x(pmt_t list);
/*!
* \brief (acons x y a) == (cons (cons x y) a)
@@ -657,76 +658,76 @@ pmt_acons(pmt_t x, pmt_t y, pmt_t 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);
+GRUEL_API 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);
+GRUEL_API 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);
+GRUEL_API 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);
+GRUEL_API 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);
+GRUEL_API 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);
+GRUEL_API bool pmt_subsetp(pmt_t list1, pmt_t list2);
/*!
* \brief Return a list of length 1 containing \p x1
*/
-pmt_t pmt_list1(const pmt_t& x1);
+GRUEL_API pmt_t pmt_list1(const pmt_t& x1);
/*!
* \brief Return a list of length 2 containing \p x1, \p x2
*/
-pmt_t pmt_list2(const pmt_t& x1, const pmt_t& x2);
+GRUEL_API pmt_t pmt_list2(const pmt_t& x1, const pmt_t& x2);
/*!
* \brief Return a list of length 3 containing \p x1, \p x2, \p x3
*/
-pmt_t pmt_list3(const pmt_t& x1, const pmt_t& x2, const pmt_t& x3);
+GRUEL_API pmt_t pmt_list3(const pmt_t& x1, const pmt_t& x2, const pmt_t& x3);
/*!
* \brief Return a list of length 4 containing \p x1, \p x2, \p x3, \p x4
*/
-pmt_t pmt_list4(const pmt_t& x1, const pmt_t& x2, const pmt_t& x3, const pmt_t& x4);
+GRUEL_API pmt_t pmt_list4(const pmt_t& x1, const pmt_t& x2, const pmt_t& x3, const 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(const pmt_t& x1, const pmt_t& x2, const pmt_t& x3, const pmt_t& x4, const pmt_t& x5);
+GRUEL_API pmt_t pmt_list5(const pmt_t& x1, const pmt_t& x2, const pmt_t& x3, const pmt_t& x4, const 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(const pmt_t& x1, const pmt_t& x2, const pmt_t& x3, const pmt_t& x4, const pmt_t& x5, const pmt_t& x6);
+GRUEL_API pmt_t pmt_list6(const pmt_t& x1, const pmt_t& x2, const pmt_t& x3, const pmt_t& x4, const pmt_t& x5, const pmt_t& x6);
/*!
* \brief Return \p list with \p item added to it.
*/
-pmt_t pmt_list_add(pmt_t list, const pmt_t& item);
+GRUEL_API pmt_t pmt_list_add(pmt_t list, const pmt_t& item);
/*
@@ -734,10 +735,10 @@ pmt_t pmt_list_add(pmt_t list, const pmt_t& item);
* read / write
* ------------------------------------------------------------------------
*/
-extern const pmt_t PMT_EOF; //< The end of file object
+extern GRUEL_API 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);
+GRUEL_API bool pmt_is_eof_object(pmt_t obj);
/*!
* read converts external representations of pmt objects into the
@@ -754,26 +755,26 @@ bool pmt_is_eof_object(pmt_t obj);
* representation, but the external representation is incomplete and
* therefore not parsable, an error is signaled.
*/
-pmt_t pmt_read(std::istream &port);
+GRUEL_API 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);
+GRUEL_API 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);
+GRUEL_API std::string pmt_write_string(pmt_t obj);
-std::ostream& operator<<(std::ostream &os, pmt_t obj);
+GRUEL_API std::ostream& operator<<(std::ostream &os, pmt_t obj);
/*!
* \brief Write pmt string representation to stdout.
*/
-void pmt_print(pmt_t v);
+GRUEL_API void pmt_print(pmt_t v);
/*
@@ -784,25 +785,25 @@ void pmt_print(pmt_t v);
/*!
* \brief Write portable byte-serial representation of \p obj to \p sink
*/
-bool pmt_serialize(pmt_t obj, std::streambuf &sink);
+GRUEL_API bool pmt_serialize(pmt_t obj, std::streambuf &sink);
/*!
* \brief Create obj from portable byte-serial representation
*/
-pmt_t pmt_deserialize(std::streambuf &source);
+GRUEL_API pmt_t pmt_deserialize(std::streambuf &source);
-void pmt_dump_sizeof(); // debugging
+GRUEL_API void pmt_dump_sizeof(); // debugging
/*!
* \brief Provide a simple string generating interface to pmt's serialize function
*/
-std::string pmt_serialize_str(pmt_t obj);
+GRUEL_API std::string pmt_serialize_str(pmt_t obj);
/*!
* \brief Provide a simple string generating interface to pmt's deserialize function
*/
-pmt_t pmt_deserialize_str(std::string str);
+GRUEL_API pmt_t pmt_deserialize_str(std::string str);
} /* namespace pmt */
diff --git a/gruel/src/include/gruel/pmt_pool.h b/gruel/src/include/gruel/pmt_pool.h
index b792523e0..2b227ce6a 100644
--- a/gruel/src/include/gruel/pmt_pool.h
+++ b/gruel/src/include/gruel/pmt_pool.h
@@ -21,6 +21,7 @@
#ifndef INCLUDED_PMT_POOL_H
#define INCLUDED_PMT_POOL_H
+#include <gruel/api.h>
#include <cstddef>
#include <vector>
#include <boost/thread.hpp>
@@ -33,9 +34,9 @@ namespace pmt {
* FIXME may want to go to global allocation with per-thread free list.
* This would eliminate virtually all lock contention.
*/
-class pmt_pool {
+class GRUEL_API pmt_pool {
- struct item {
+ struct GRUEL_API item {
struct item *d_next;
};
diff --git a/gruel/src/include/gruel/realtime.h b/gruel/src/include/gruel/realtime.h
index d110ec956..87f2b0f74 100644
--- a/gruel/src/include/gruel/realtime.h
+++ b/gruel/src/include/gruel/realtime.h
@@ -23,6 +23,7 @@
#ifndef INCLUDED_GRUEL_REALTIME_H
#define INCLUDED_GRUEL_REALTIME_H
+#include <gruel/api.h>
#include <stdexcept>
/*!
@@ -58,7 +59,7 @@ namespace gruel {
static inline int rt_priority_max() { return 15; }
static inline int rt_priority_default() { return 1; }
- struct rt_sched_param {
+ struct GRUEL_API rt_sched_param {
int priority;
rt_sched_policy policy;
@@ -88,7 +89,7 @@ namespace gruel {
// 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());
+ GRUEL_API enable_realtime_scheduling(rt_sched_param = rt_sched_param());
} // namespace gruel
diff --git a/gruel/src/include/gruel/sys_pri.h b/gruel/src/include/gruel/sys_pri.h
index b0fd83654..a29b051bf 100644
--- a/gruel/src/include/gruel/sys_pri.h
+++ b/gruel/src/include/gruel/sys_pri.h
@@ -22,6 +22,7 @@
#ifndef INCLUDED_GRUEL_SYS_PRI_H
#define INCLUDED_GRUEL_SYS_PRI_H
+#include <gruel/api.h>
#include <gruel/realtime.h>
/*
@@ -29,7 +30,7 @@
*/
namespace gruel {
- struct sys_pri {
+ struct GRUEL_API sys_pri {
static rt_sched_param python(); // python code
static rt_sched_param normal(); // normal blocks
static rt_sched_param gcell_event_handler();
diff --git a/gruel/src/include/gruel/thread.h b/gruel/src/include/gruel/thread.h
index 5a8ab1876..c6031d88d 100644
--- a/gruel/src/include/gruel/thread.h
+++ b/gruel/src/include/gruel/thread.h
@@ -21,6 +21,7 @@
#ifndef INCLUDED_THREAD_H
#define INCLUDED_THREAD_H
+#include <gruel/api.h>
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/locks.hpp>
diff --git a/gruel/src/include/gruel/thread_body_wrapper.h b/gruel/src/include/gruel/thread_body_wrapper.h
index b024bfdaf..ae0feda08 100644
--- a/gruel/src/include/gruel/thread_body_wrapper.h
+++ b/gruel/src/include/gruel/thread_body_wrapper.h
@@ -21,6 +21,7 @@
#ifndef INCLUDED_THREAD_BODY_WRAPPER_H
#define INCLUDED_THREAD_BODY_WRAPPER_H
+#include <gruel/api.h>
#include <gruel/thread.h>
#include <exception>
#include <iostream>
@@ -28,7 +29,7 @@
namespace gruel
{
- void mask_signals();
+ GRUEL_API void mask_signals();
template <class F>
class thread_body_wrapper
diff --git a/gruel/src/include/gruel/thread_group.h b/gruel/src/include/gruel/thread_group.h
index 0270746e4..e1658dd1f 100644
--- a/gruel/src/include/gruel/thread_group.h
+++ b/gruel/src/include/gruel/thread_group.h
@@ -15,6 +15,7 @@
#ifndef INCLUDED_GRUEL_THREAD_GROUP_H
#define INCLUDED_GRUEL_THREAD_GROUP_H
+#include <gruel/api.h>
#include <gruel/thread.h>
#include <boost/utility.hpp>
#include <boost/thread/shared_mutex.hpp>
@@ -22,7 +23,7 @@
namespace gruel
{
- class thread_group : public boost::noncopyable
+ class GRUEL_API thread_group : public boost::noncopyable
{
public:
thread_group();
diff --git a/gruel/src/lib/CMakeLists.txt b/gruel/src/lib/CMakeLists.txt
new file mode 100644
index 000000000..b54e644bc
--- /dev/null
+++ b/gruel/src/lib/CMakeLists.txt
@@ -0,0 +1,110 @@
+# Copyright 2010-2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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 subdirs rather to populate to the sources lists.
+########################################################################
+include(GrMiscUtils)
+include(CheckCXXSourceCompiles)
+
+GR_CHECK_HDR_N_DEF(signal.h HAVE_SIGNAL_H)
+GR_CHECK_HDR_N_DEF(sched.h HAVE_SCHED_H)
+
+set(CMAKE_REQUIRED_LIBRARIES -lpthread)
+CHECK_CXX_SOURCE_COMPILES("
+ #include <signal.h>
+ int main(){pthread_sigmask(0, 0, 0); return 0;}
+ " HAVE_PTHREAD_SIGMASK
+)
+GR_ADD_COND_DEF(HAVE_PTHREAD_SIGMASK)
+
+set(CMAKE_REQUIRED_LIBRARIES -lpthread)
+CHECK_CXX_SOURCE_COMPILES("
+ #include <pthread.h>
+ int main(){
+ pthread_t pthread;
+ pthread_setschedparam(pthread, 0, 0);
+ return 0;
+ } " HAVE_PTHREAD_SETSCHEDPARAM
+)
+GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)
+
+CHECK_CXX_SOURCE_COMPILES("
+ #include <sched.h>
+ int main(){
+ pid_t pid;
+ sched_setscheduler(pid, 0, 0);
+ return 0;
+ } " HAVE_SCHED_SETSCHEDULER
+)
+GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
+
+########################################################################
+# Include subdirs rather to populate to the sources lists.
+########################################################################
+GR_INCLUDE_SUBDIRECTORY(msg)
+GR_INCLUDE_SUBDIRECTORY(pmt)
+
+########################################################################
+# Setup the include and linker paths
+########################################################################
+include_directories(${GRUEL_INCLUDE_DIRS})
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+include_directories(${Boost_INCLUDE_DIRS})
+link_directories(${Boost_LIBRARY_DIRS})
+
+########################################################################
+# Setup library
+########################################################################
+list(APPEND gruel_sources
+ realtime.cc
+ sys_pri.cc
+ thread_body_wrapper.cc
+ thread_group.cc
+)
+
+add_library(gruel SHARED ${gruel_sources})
+target_link_libraries(gruel ${Boost_LIBRARIES})
+set_target_properties(gruel PROPERTIES DEFINE_SYMBOL "gruel_EXPORTS")
+set_target_properties(gruel PROPERTIES SOVERSION ${LIBVER})
+
+install(TARGETS gruel
+ LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT "gruel_runtime" # .so/.dylib file
+ ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT "gruel_devel" # .lib file
+ RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT "gruel_runtime" # .dll file
+)
+
+########################################################################
+# Setup tests
+# Set the test environment so the build libs will be found under MSVC.
+########################################################################
+if(ENABLE_TESTING)
+
+include_directories(${CPPUNIT_INCLUDE_DIRS})
+link_directories(${CPPUNIT_LIBRARY_DIRS})
+
+include(GrTest)
+set(GR_TEST_TARGET_DEPS gruel)
+list(APPEND test_gruel_sources test_gruel.cc)
+add_executable(test_gruel ${test_gruel_sources})
+target_link_libraries(test_gruel gruel ${CPPUNIT_LIBRARIES})
+GR_ADD_TEST(gruel-test test_gruel)
+
+endif(ENABLE_TESTING)
diff --git a/gruel/src/lib/msg/CMakeLists.txt b/gruel/src/lib/msg/CMakeLists.txt
new file mode 100644
index 000000000..116d2c67f
--- /dev/null
+++ b/gruel/src/lib/msg/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Copyright 2010 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# This file included, use CMake directory variables
+########################################################################
+
+list(APPEND gruel_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/msg_accepter.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/msg_accepter_msgq.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/msg_queue.cc
+)
diff --git a/gruel/src/lib/pmt/CMakeLists.txt b/gruel/src/lib/pmt/CMakeLists.txt
new file mode 100644
index 000000000..a708fa7ad
--- /dev/null
+++ b/gruel/src/lib/pmt/CMakeLists.txt
@@ -0,0 +1,90 @@
+# Copyright 2010 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with 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 included, use CMake directory variables
+########################################################################
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+########################################################################
+# Generate serial tags header file
+########################################################################
+get_filename_component(SCHEME_DIR
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../scheme/gnuradio ABSOLUTE
+)
+
+get_filename_component(PMT_SERIAL_TAGS_H
+ ${CMAKE_CURRENT_BINARY_DIR}/../../include/gruel/pmt_serial_tags.h ABSOLUTE
+)
+
+add_custom_command(
+ OUTPUT ${PMT_SERIAL_TAGS_H}
+ DEPENDS ${SCHEME_DIR}/gen-serial-tags.py
+ DEPENDS ${SCHEME_DIR}/pmt-serial-tags.scm
+ COMMAND ${PYTHON_EXECUTABLE}
+ ${SCHEME_DIR}/gen-serial-tags.py
+ ${SCHEME_DIR}/pmt-serial-tags.scm
+ ${PMT_SERIAL_TAGS_H}
+)
+
+install(
+ FILES ${PMT_SERIAL_TAGS_H}
+ DESTINATION ${GR_INCLUDE_DIR}/gruel
+ COMPONENT "gruel_devel"
+)
+
+include(AddFileDependencies)
+ADD_FILE_DEPENDENCIES(
+ ${CMAKE_CURRENT_SOURCE_DIR}/pmt_serialize.cc
+ ${PMT_SERIAL_TAGS_H}
+)
+
+########################################################################
+# Generate other pmt stuff
+########################################################################
+add_custom_command(
+ OUTPUT
+ ${CMAKE_CURRENT_BINARY_DIR}/pmt_unv_int.h
+ ${CMAKE_CURRENT_BINARY_DIR}/qa_pmt_unv.h
+ ${CMAKE_CURRENT_BINARY_DIR}/pmt_unv.cc
+ ${CMAKE_CURRENT_BINARY_DIR}/qa_pmt_unv.cc
+ DEPENDS
+ ${CMAKE_CURRENT_SOURCE_DIR}/generate_unv.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/unv_template.h.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/unv_template.cc.t
+ ${CMAKE_CURRENT_SOURCE_DIR}/unv_qa_template.cc.t
+ COMMAND ${PYTHON_EXECUTABLE} -B -c
+ \"import os,sys\;srcdir='${CMAKE_CURRENT_SOURCE_DIR}'\;sys.path.append(srcdir)\;os.environ['srcdir']=srcdir\;from generate_unv import main\;main()\"
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+)
+
+list(APPEND gruel_sources
+ ${CMAKE_CURRENT_BINARY_DIR}/pmt_unv.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/pmt.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/pmt_io.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/pmt_pool.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/pmt_serialize.cc
+)
+
+list(APPEND test_gruel_sources
+ ${CMAKE_CURRENT_BINARY_DIR}/qa_pmt_unv.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_pmt_prims.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_pmt.cc
+)
diff --git a/gruel/src/lib/pmt/pmt_int.h b/gruel/src/lib/pmt/pmt_int.h
index ea28e37b4..3a5cd382b 100644
--- a/gruel/src/lib/pmt/pmt_int.h
+++ b/gruel/src/lib/pmt/pmt_int.h
@@ -35,7 +35,7 @@
#define PMT_LOCAL_ALLOCATOR 0 // define to 0 or 1
namespace pmt {
-class pmt_base : boost::noncopyable {
+class GRUEL_API pmt_base : boost::noncopyable {
mutable boost::detail::atomic_count count_;
protected:
diff --git a/gruel/src/lib/pmt/qa_pmt.h b/gruel/src/lib/pmt/qa_pmt.h
index 43a6dbf67..424c1065b 100644
--- a/gruel/src/lib/pmt/qa_pmt.h
+++ b/gruel/src/lib/pmt/qa_pmt.h
@@ -23,11 +23,12 @@
#ifndef INCLUDED_QA_PMT_H
#define INCLUDED_QA_PMT_H
+#include <gruel/attributes.h>
#include <cppunit/TestSuite.h>
//! collect all the tests for pmt
-class qa_pmt {
+class __GR_ATTR_EXPORT qa_pmt {
public:
//! return suite of tests for all of pmt
static CppUnit::TestSuite *suite ();
diff --git a/gruel/src/lib/pmt/qa_pmt_prims.cc b/gruel/src/lib/pmt/qa_pmt_prims.cc
index 985361f13..7dec30d56 100644
--- a/gruel/src/lib/pmt/qa_pmt_prims.cc
+++ b/gruel/src/lib/pmt/qa_pmt_prims.cc
@@ -23,6 +23,7 @@
#include <qa_pmt_prims.h>
#include <cppunit/TestAssert.h>
#include <gruel/msg_passing.h>
+#include <boost/format.hpp>
#include <cstdio>
#include <cstring>
#include <sstream>
@@ -54,9 +55,8 @@ qa_pmt_prims::test_symbols()
// generate a bunch of symbols
for (int i = 0; i < N; i++){
- char buf[100];
- snprintf(buf, sizeof(buf), "test-%d", i);
- v1[i] = mp(buf);
+ std::string buf = str(boost::format("test-%d") % i);
+ v1[i] = mp(buf.c_str());
}
// confirm that they are all unique
@@ -66,9 +66,8 @@ qa_pmt_prims::test_symbols()
// generate the same symbols again
for (int i = 0; i < N; i++){
- char buf[100];
- snprintf(buf, sizeof(buf), "test-%d", i);
- v2[i] = mp(buf);
+ std::string buf = str(boost::format("test-%d") % i);
+ v2[i] = mp(buf.c_str());
}
// confirm that we get the same ones back
diff --git a/gruel/src/lib/pmt/qa_pmt_prims.h b/gruel/src/lib/pmt/qa_pmt_prims.h
index efc5c6050..cc1409ee6 100644
--- a/gruel/src/lib/pmt/qa_pmt_prims.h
+++ b/gruel/src/lib/pmt/qa_pmt_prims.h
@@ -22,10 +22,12 @@
#ifndef INCLUDED_QA_PMT_PRIMS_H
#define INCLUDED_QA_PMT_PRIMS_H
+#include <gruel/attributes.h>
+#include <gruel/api.h> //reason: suppress warnings
#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/TestCase.h>
-class qa_pmt_prims : public CppUnit::TestCase {
+class __GR_ATTR_EXPORT qa_pmt_prims : public CppUnit::TestCase {
CPPUNIT_TEST_SUITE(qa_pmt_prims);
CPPUNIT_TEST(test_symbols);
diff --git a/gruel/src/lib/realtime.cc b/gruel/src/lib/realtime.cc
index 7397cf3d3..96351f812 100644
--- a/gruel/src/lib/realtime.cc
+++ b/gruel/src/lib/realtime.cc
@@ -132,6 +132,38 @@ namespace gruel {
} // namespace gruel
+#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+
+#include <windows.h>
+
+namespace gruel {
+
+ rt_status_t enable_realtime_scheduling(rt_sched_param p){
+
+ //set the priority class on the process
+ int pri_class = (true)? REALTIME_PRIORITY_CLASS : NORMAL_PRIORITY_CLASS;
+ if (SetPriorityClass(GetCurrentProcess(), pri_class) == 0)
+ return RT_OTHER_ERROR;
+
+ //scale the priority value to the constants
+ int priorities[] = {
+ THREAD_PRIORITY_IDLE, THREAD_PRIORITY_LOWEST, THREAD_PRIORITY_BELOW_NORMAL, THREAD_PRIORITY_NORMAL,
+ THREAD_PRIORITY_ABOVE_NORMAL, THREAD_PRIORITY_HIGHEST, THREAD_PRIORITY_TIME_CRITICAL
+ };
+ const double priority = double(p.priority)/(rt_priority_max() - rt_priority_min());
+ size_t pri_index = size_t((priority+1.0)*6/2.0); // -1 -> 0, +1 -> 6
+ pri_index %= sizeof(priorities)/sizeof(*priorities); //range check
+
+ //set the thread priority on the thread
+ if (SetThreadPriority(GetCurrentThread(), priorities[pri_index]) == 0)
+ return RT_OTHER_ERROR;
+
+ //printf("SetPriorityClass + SetThreadPriority\n");
+ return RT_OK;
+ }
+
+} // namespace gruel
+
#else
namespace gruel {
diff --git a/gruel/src/python/CMakeLists.txt b/gruel/src/python/CMakeLists.txt
new file mode 100644
index 000000000..be5ac956e
--- /dev/null
+++ b/gruel/src/python/CMakeLists.txt
@@ -0,0 +1,52 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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(GrPython)
+
+########################################################################
+# Install python files
+########################################################################
+GR_PYTHON_INSTALL(
+ FILES __init__.py
+ DESTINATION ${GR_PYTHON_DIR}/gruel
+ COMPONENT "gruel_python"
+)
+
+GR_PYTHON_INSTALL(
+ FILES pmt/__init__.py
+ DESTINATION ${GR_PYTHON_DIR}/gruel/pmt
+ COMPONENT "gruel_python"
+)
+
+########################################################################
+# Setup unit tests
+########################################################################
+if(ENABLE_TESTING)
+include(GrTest)
+file(GLOB py_qa_test_files "qa_*.py")
+foreach(py_qa_test_file ${py_qa_test_files})
+ get_filename_component(py_qa_test_name ${py_qa_test_file} NAME_WE)
+ set(GR_TEST_PYTHON_DIRS
+ ${CMAKE_BINARY_DIR}/gruel/src/python
+ ${CMAKE_BINARY_DIR}/gruel/src/swig
+ )
+ set(GR_TEST_TARGET_DEPS gruel gnuradio-core)
+ GR_ADD_TEST(${py_qa_test_name} ${PYTHON_EXECUTABLE} ${py_qa_test_file})
+endforeach(py_qa_test_file)
+endif(ENABLE_TESTING)
diff --git a/gruel/src/scheme/gnuradio/CMakeLists.txt b/gruel/src/scheme/gnuradio/CMakeLists.txt
new file mode 100644
index 000000000..4ff4f7feb
--- /dev/null
+++ b/gruel/src/scheme/gnuradio/CMakeLists.txt
@@ -0,0 +1,26 @@
+# Copyright 2010 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+
+install(FILES
+ pmt-serial-tags.scm
+ pmt-serialize.scm
+ macros-etc.scm
+DESTINATION ${GR_PKG_DATA_DIR} COMPONENT "gruel_swig")
diff --git a/gruel/src/swig/CMakeLists.txt b/gruel/src/swig/CMakeLists.txt
new file mode 100644
index 000000000..c2769ae27
--- /dev/null
+++ b/gruel/src/swig/CMakeLists.txt
@@ -0,0 +1,41 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup swig generation
+########################################################################
+include(GrPython)
+include(GrSwig)
+
+set(GR_SWIG_INCLUDE_DIRS ${GRUEL_INCLUDE_DIRS})
+set(GR_SWIG_LIBRARIES gruel)
+
+GR_SWIG_MAKE(pmt_swig pmt_swig.i)
+
+GR_SWIG_INSTALL(
+ TARGETS pmt_swig
+ DESTINATION ${GR_PYTHON_DIR}/gruel/pmt
+ COMPONENT "gruel_python"
+)
+
+install(
+ FILES gr_intrusive_ptr.i pmt_swig.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "gruel_swig"
+)
diff --git a/volk/CMakeLists.txt b/volk/CMakeLists.txt
index 22c09b3f8..4b8fda059 100644
--- a/volk/CMakeLists.txt
+++ b/volk/CMakeLists.txt
@@ -18,71 +18,78 @@
########################################################################
# Project setup
########################################################################
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-IF(NOT DEFINED CMAKE_BUILD_TYPE)
- SET(CMAKE_BUILD_TYPE Release)
-ENDIF()
-SET(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Choose build type: None Debug Release RelWithDebInfo MinSizeRel")
-PROJECT(volk)
-ENABLE_LANGUAGE(CXX)
-ENABLE_LANGUAGE(C)
-ENABLE_TESTING()
-SET(VERSION 0.1)
-SET(LIBVER 0.0.0)
+cmake_minimum_required(VERSION 2.6)
+if(NOT DEFINED CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE Release)
+endif()
+set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Choose build type: None Debug Release RelWithDebInfo MinSizeRel")
+project(volk)
+enable_language(CXX)
+enable_language(C)
+enable_testing()
+set(VERSION 0.1)
+set(LIBVER 0.0.0)
+
+set(CMAKE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) #allows this to be a sub-project
+set(CMAKE_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) #allows this to be a sub-project
########################################################################
# Dependencies setup
########################################################################
-FIND_PACKAGE(PythonInterp)
-IF(NOT PYTHONINTERP_FOUND)
- MESSAGE(FATAL_ERROR "Python interpreter required by the build system.")
-ENDIF(NOT PYTHONINTERP_FOUND)
+find_package(PythonInterp)
+if(NOT PYTHONINTERP_FOUND)
+ message(FATAL_ERROR "Python interpreter required by the build system.")
+endif(NOT PYTHONINTERP_FOUND)
########################################################################
# Setup the package config file
########################################################################
#set variables found in the pc.in file
-SET(prefix ${CMAKE_INSTALL_PREFIX})
-SET(exec_prefix "\${prefix}")
-SET(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
-SET(includedir "\${prefix}/include")
+set(prefix ${CMAKE_INSTALL_PREFIX})
+set(exec_prefix "\${prefix}")
+set(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
+set(includedir "\${prefix}/include")
-CONFIGURE_FILE(
+configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/volk.pc.in
${CMAKE_CURRENT_BINARY_DIR}/volk.pc
@ONLY)
-INSTALL(
+install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/volk.pc
DESTINATION lib${LIB_SUFFIX}/pkgconfig
+ COMPONENT "volk_devel"
)
########################################################################
# Install all headers in the include directories
########################################################################
-INSTALL(
+install(
DIRECTORY ${CMAKE_SOURCE_DIR}/include/volk
- DESTINATION include FILES_MATCHING PATTERN "*.h"
+ DESTINATION include COMPONENT "volk_devel"
+ FILES_MATCHING PATTERN "*.h"
)
-INSTALL(FILES
+install(FILES
${CMAKE_BINARY_DIR}/include/volk/volk.h
${CMAKE_BINARY_DIR}/include/volk/volk_cpu.h
${CMAKE_BINARY_DIR}/include/volk/volk_config_fixed.h
${CMAKE_BINARY_DIR}/include/volk/volk_typedefs.h
-DESTINATION include/volk)
+ DESTINATION include/volk
+ COMPONENT "volk_devel"
+)
########################################################################
# Setup the library
########################################################################
-ADD_SUBDIRECTORY(lib)
+add_subdirectory(lib)
########################################################################
# And the utility apps
########################################################################
-ADD_SUBDIRECTORY(apps)
+add_subdirectory(apps)
########################################################################
# Print summary
########################################################################
-MESSAGE(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
diff --git a/volk/apps/CMakeLists.txt b/volk/apps/CMakeLists.txt
index a0bf7e900..f27bdc126 100644
--- a/volk/apps/CMakeLists.txt
+++ b/volk/apps/CMakeLists.txt
@@ -18,21 +18,28 @@
########################################################################
# Setup profiler
########################################################################
-IF(MSVC)
- INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/msvc)
-ENDIF(MSVC)
+find_package(Boost)
-INCLUDE_DIRECTORIES(
+if(Boost_FOUND AND UNIX) #uses mkdir and $HOME
+
+if(MSVC)
+ include_directories(${CMAKE_SOURCE_DIR}/msvc)
+endif(MSVC)
+
+include_directories(
${CMAKE_SOURCE_DIR}/include
${CMAKE_BINARY_DIR}/include
${CMAKE_SOURCE_DIR}/lib
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
+ ${Boost_INCLUDE_DIRS}
)
-ADD_EXECUTABLE(volk_profile
+add_executable(volk_profile
${CMAKE_CURRENT_SOURCE_DIR}/volk_profile.cc
${CMAKE_SOURCE_DIR}/lib/qa_utils.cc
)
-TARGET_LINK_LIBRARIES(volk_profile volk ${Boost_LIBRARIES})
+target_link_libraries(volk_profile volk ${Boost_LIBRARIES})
+
+endif(Boost_FOUND AND UNIX)
diff --git a/volk/gen/archs.xml b/volk/gen/archs.xml
index f6822871f..960558b7c 100644
--- a/volk/gen/archs.xml
+++ b/volk/gen/archs.xml
@@ -29,6 +29,7 @@
<val>1</val>
<overrule>MD_SUBCPU</overrule>
<overrule_val>x86</overrule_val>
+ <mutex>32</mutex>
</arch>
<arch name="3dnow" type="x86">
diff --git a/volk/gen/volk_register.py b/volk/gen/volk_register.py
index 75e5eeb87..cd874e470 100644
--- a/volk/gen/volk_register.py
+++ b/volk/gen/volk_register.py
@@ -3,6 +3,7 @@
import sys
import os
import re
+import glob
import string
from xml.dom import minidom
from volk_regexp import *
@@ -48,18 +49,13 @@ outfile_environment_h = open(os.path.join(gendir, "lib/volk_environment_init.h")
outfile_makefile_am = open(os.path.join(gendir, "lib/Makefile.am"), "w")
outfile_machines_h = open(os.path.join(gendir, "lib/volk_machines.h"), "w")
outfile_machines_c = open(os.path.join(gendir, "lib/volk_machines.c"), "w")
-infile = open(os.path.join(srcdir, "include/volk/Makefile.am"), "r")
-
-
-mfile = infile.readlines();
+hdr_files = glob.glob(os.path.join(srcdir, "include/volk/*.h"))
datatypes = [];
functions = [];
-
-
-for line in mfile:
- subline = re.search(".*_(a|u)\.h.*", line);
+for line in hdr_files:
+ subline = re.search(".*_(a|u)\.h.*", os.path.basename(line))
if subline:
subsubline = re.search("(?<=volk_).*", subline.group(0));
if subsubline:
@@ -71,7 +67,7 @@ for line in mfile:
datatypes = set(datatypes);
-for line in mfile:
+for line in hdr_files:
for dt in datatypes:
if dt in line:
subline = re.search("(volk_" + dt +"_.*(a|u).*\.h)", line);
@@ -91,7 +87,7 @@ for arch in archs:
if a_var:
archs.remove(arch);
-
+#strip out mutex archs
archflags_dict = {}
for filearch in filearchs:
diff --git a/volk/lib/CMakeLists.txt b/volk/lib/CMakeLists.txt
index 33a478265..f4177b16e 100644
--- a/volk/lib/CMakeLists.txt
+++ b/volk/lib/CMakeLists.txt
@@ -21,51 +21,72 @@
# If the test passes append the arch to the available list.
########################################################################
#extract the arch lines from the xml file using crazy python
-EXECUTE_PROCESS(
+execute_process(
COMMAND ${PYTHON_EXECUTABLE} -c
"from xml.dom import minidom; print ';'.join(map(lambda a: '%s %s'%(a.attributes['name'].value,a.getElementsByTagName('flag')[0].firstChild.data),minidom.parse('${CMAKE_SOURCE_DIR}/gen/archs.xml').getElementsByTagName('arch')))"
OUTPUT_VARIABLE arch_lines OUTPUT_STRIP_TRAILING_WHITESPACE
)
+#get any mutually exclusive archs so we can exclude them
+#this is really for compilers which can do both 32- and 64-bit compilations.
+execute_process(
+ COMMAND ${PYTHON_EXECUTABLE} -c
+ "from xml.dom import minidom; print ';'.join(map(lambda a: '%s %s'%(a.parentNode.attributes['name'].value,a.firstChild.data),minidom.parse('${CMAKE_SOURCE_DIR}/gen/archs.xml').getElementsByTagName('mutex')))"
+ OUTPUT_VARIABLE mutex_lines OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+
#This macro sets the ${arch}_flag variable,
#and handles special cases for MSVC arch flags.
-MACRO(set_arch_flag name flag)
- IF(MSVC AND ${name} STREQUAL "mmx")
- SET(${name}_flag "/arch:SSE") #no /arch:MMX
- ELSEIF(MSVC AND ${name} STREQUAL "sse")
- SET(${name}_flag "/arch:SSE")
- ELSEIF(MSVC AND ${name} STREQUAL "sse2")
- SET(${name}_flag "/arch:SSE2")
- ELSE()
- SET(${name}_flag -${flag})
- ENDIF()
-ENDMACRO(set_arch_flag)
-
-MACRO(handle_arch name flag)
+macro(set_arch_flag name flag)
+ if(MSVC AND ${name} STREQUAL "mmx")
+ set(${name}_flag "/arch:SSE") #no /arch:MMX
+ elseif(MSVC AND ${name} STREQUAL "sse")
+ set(${name}_flag "/arch:SSE")
+ elseif(MSVC AND ${name} STREQUAL "sse2")
+ set(${name}_flag "/arch:SSE2")
+ else()
+ set(${name}_flag -${flag})
+ endif()
+endmacro(set_arch_flag)
+
+macro(handle_arch name flag)
#handle special case for none flag
- IF(${flag} STREQUAL "none")
- SET(have_${name} TRUE)
+ if(${flag} STREQUAL "none")
+ set(have_${name} TRUE)
#otherwise test the flag against the compiler
- ELSE()
- INCLUDE(CheckCXXCompilerFlag)
+ else()
+ include(CheckCXXCompilerFlag)
set_arch_flag(${name} ${flag})
CHECK_CXX_COMPILER_FLAG(${${name}_flag} have_${name})
- ENDIF()
+ endif()
- IF(have_${name})
- LIST(APPEND available_arches ${name})
- ENDIF()
-ENDMACRO(handle_arch)
+ if(have_${name})
+ list(APPEND available_arches ${name})
+ endif()
+endmacro(handle_arch)
+
+macro(remove_mutex name mutex)
+ if(have_${name})
+ unset(have_${mutex})
+ endif()
+ list(REMOVE_ITEM available_arches ${mutex})
+endmacro(remove_mutex)
#create a list of available arches
-FOREACH(arch_line ${arch_lines})
- SEPARATE_ARGUMENTS(args UNIX_COMMAND "${arch_line}")
+foreach(arch_line ${arch_lines})
+ separate_arguments(args UNIX_COMMAND "${arch_line}")
handle_arch(${args})
-ENDFOREACH(arch_line)
+endforeach(arch_line)
+
+#strip out mutex archs
+foreach(mutex_line ${mutex_lines})
+ separate_arguments(args UNIX_COMMAND "${mutex_line}")
+ remove_mutex(${args})
+endforeach(mutex_line)
-MESSAGE(STATUS "Available arches: ${available_arches}")
+message(STATUS "Available arches: ${available_arches}")
########################################################################
# Parse the machines xml file:
@@ -73,61 +94,61 @@ MESSAGE(STATUS "Available arches: ${available_arches}")
# Build a list of supported machines and the machine definitions.
########################################################################
#extract the machine lines from the xml file using crazy python
-EXECUTE_PROCESS(
+execute_process(
COMMAND ${PYTHON_EXECUTABLE} -c
"from xml.dom import minidom; print ';'.join(map(lambda a: '%s %s'%(a.attributes['name'].value,a.getElementsByTagName('archs')[0].firstChild.data),minidom.parse('${CMAKE_SOURCE_DIR}/gen/machines.xml').getElementsByTagName('machine')))"
OUTPUT_VARIABLE machine_lines OUTPUT_STRIP_TRAILING_WHITESPACE
)
-MACRO(handle_machine1 name)
- UNSET(machine_flags)
- STRING(TOUPPER LV_MACHINE_${name} machine_def)
+macro(handle_machine1 name)
+ unset(machine_flags)
+ string(TOUPPER LV_MACHINE_${name} machine_def)
#check if all the arches are supported
- FOREACH(arch ${ARGN})
- SET(is_match ${have_${arch}})
- IF(NOT is_match)
- SET(is_match FALSE)
- BREAK()
- ENDIF(NOT is_match)
- SET(machine_flags "${machine_flags} ${${arch}_flag}")
- ENDFOREACH(arch)
-
- IF(is_match)
+ foreach(arch ${ARGN})
+ set(is_match ${have_${arch}})
+ if(NOT is_match)
+ set(is_match FALSE)
+ break()
+ endif(NOT is_match)
+ set(machine_flags "${machine_flags} ${${arch}_flag}")
+ endforeach(arch)
+
+ if(is_match)
#this is a match, append the source and set its flags
- SET(machine_source ${CMAKE_CURRENT_BINARY_DIR}/volk_machine_${name}.c)
- SET_SOURCE_FILES_PROPERTIES(${machine_source} PROPERTIES COMPILE_FLAGS ${machine_flags})
- LIST(APPEND machine_sources ${machine_source})
- LIST(APPEND machine_defs ${machine_def})
- LIST(APPEND available_machines ${name})
- ENDIF()
-ENDMACRO(handle_machine1)
-
-MACRO(handle_machine name)
- SET(arches ${ARGN})
- LIST(FIND arches "32|64" index)
- IF(${index} EQUAL -1)
+ set(machine_source ${CMAKE_CURRENT_BINARY_DIR}/volk_machine_${name}.c)
+ set_source_files_properties(${machine_source} PROPERTIES COMPILE_FLAGS ${machine_flags})
+ list(APPEND machine_sources ${machine_source})
+ list(APPEND machine_defs ${machine_def})
+ list(APPEND available_machines ${name})
+ endif()
+endmacro(handle_machine1)
+
+macro(handle_machine name)
+ set(arches ${ARGN})
+ list(FIND arches "32|64" index)
+ if(${index} EQUAL -1)
handle_machine1(${name} ${arches})
- ELSE()
- LIST(REMOVE_ITEM arches "32|64")
+ else()
+ list(REMOVE_ITEM arches "32|64")
handle_machine1(${name}_32 32 ${arches})
handle_machine1(${name}_64 64 ${arches})
- ENDIF()
-ENDMACRO(handle_machine)
+ endif()
+endmacro(handle_machine)
#setup the available machines
-FOREACH(machine_line ${machine_lines})
- SEPARATE_ARGUMENTS(args UNIX_COMMAND "${machine_line}")
+foreach(machine_line ${machine_lines})
+ separate_arguments(args UNIX_COMMAND "${machine_line}")
handle_machine(${args})
-ENDFOREACH(machine_line)
+endforeach(machine_line)
-MESSAGE(STATUS "Available machines: ${available_machines}")
+message(STATUS "Available machines: ${available_machines}")
########################################################################
# Create rules to run the volk generator
########################################################################
#list of the generated sources
-SET(volk_gen_sources
+set(volk_gen_sources
${CMAKE_BINARY_DIR}/include/volk/volk.h
${CMAKE_BINARY_DIR}/lib/volk.c
${CMAKE_BINARY_DIR}/lib/volk_init.h
@@ -143,14 +164,24 @@ SET(volk_gen_sources
)
#dependencies are all python, xml, and header implementation files
-FILE(GLOB xml_files ${CMAKE_SOURCE_DIR}/gen/*.xml)
-FILE(GLOB py_files ${CMAKE_SOURCE_DIR}/gen/*.py)
-FILE(GLOB h_files ${CMAKE_SOURCE_DIR}/include/volk/*.h)
+file(GLOB xml_files ${CMAKE_SOURCE_DIR}/gen/*.xml)
+file(GLOB py_files ${CMAKE_SOURCE_DIR}/gen/*.py)
+file(GLOB h_files ${CMAKE_SOURCE_DIR}/include/volk/*.h)
+
+#make sure we can use -B with python (introduced in 2.6)
+execute_process(
+ COMMAND ${PYTHON_EXECUTABLE} -B -c ""
+ OUTPUT_QUIET ERROR_QUIET
+ RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
+)
+if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
+ set(PYTHON_DASH_B "-B")
+endif()
-ADD_CUSTOM_COMMAND(
+add_custom_command(
OUTPUT ${volk_gen_sources}
DEPENDS ${xml_files} ${py_files} ${h_files}
- COMMAND ${PYTHON_EXECUTABLE} -B
+ COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
${CMAKE_SOURCE_DIR}/gen/volk_register.py
${CMAKE_BINARY_DIR}
)
@@ -158,104 +189,105 @@ ADD_CUSTOM_COMMAND(
########################################################################
# Handle orc support
########################################################################
-FIND_PACKAGE(PkgConfig)
-IF(PKG_CONFIG_FOUND)
-PKG_CHECK_MODULES(ORC "orc-0.4")
-ENDIF(PKG_CONFIG_FOUND)
+find_package(PkgConfig)
+if(PKG_CONFIG_FOUND)
+PKG_CHECK_MODULES(ORC "orc-0.4 > 0.4.11")
+endif(PKG_CONFIG_FOUND)
-FIND_PROGRAM(ORCC_EXECUTABLE orcc)
+find_program(ORCC_EXECUTABLE orcc)
-IF(ORC_FOUND AND ORCC_EXECUTABLE)
+if(ORC_FOUND AND ORCC_EXECUTABLE)
#setup orc library usage
- INCLUDE_DIRECTORIES(${ORC_INCLUDE_DIRS})
- LINK_DIRECTORIES(${ORC_LIBRARY_DIRS})
- ADD_DEFINITIONS(-DLV_HAVE_ORC)
+ include_directories(${ORC_INCLUDE_DIRS})
+ link_directories(${ORC_LIBRARY_DIRS})
+ add_definitions(-DLV_HAVE_ORC)
#setup orc functions
- FILE(GLOB orc_files ${CMAKE_SOURCE_DIR}/orc/*.orc)
- FOREACH(orc_file ${orc_files})
+ file(GLOB orc_files ${CMAKE_SOURCE_DIR}/orc/*.orc)
+ foreach(orc_file ${orc_files})
#extract the name for the generated c source from the orc file
- GET_FILENAME_COMPONENT(orc_file_name_we ${orc_file} NAME_WE)
- SET(orcc_gen ${CMAKE_CURRENT_BINARY_DIR}/${orc_file_name_we}.c)
+ get_filename_component(orc_file_name_we ${orc_file} NAME_WE)
+ set(orcc_gen ${CMAKE_CURRENT_BINARY_DIR}/${orc_file_name_we}.c)
#create a rule to generate the source and add to the list of sources
- ADD_CUSTOM_COMMAND(
+ add_custom_command(
COMMAND ${ORCC_EXECUTABLE} --implementation -o ${orcc_gen} ${orc_file}
DEPENDS ${orc_file} OUTPUT ${orcc_gen}
)
- LIST(APPEND volk_sources ${orcc_gen})
+ list(APPEND volk_sources ${orcc_gen})
- ENDFOREACH(orc_file)
-ELSE()
- MESSAGE(STATUS "Did not find liborc and orcc, disabling orc support...")
-ENDIF()
+ endforeach(orc_file)
+else()
+ message(STATUS "Did not find liborc and orcc, disabling orc support...")
+endif()
########################################################################
# Setup the volk sources list and library
########################################################################
-IF(NOT WIN32)
- ADD_DEFINITIONS(-fvisibility=hidden)
-ENDIF()
+if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
+ #http://gcc.gnu.org/wiki/Visibility
+ add_definitions(-fvisibility=hidden)
+endif()
-INCLUDE_DIRECTORIES(
+include_directories(
${CMAKE_SOURCE_DIR}/include
${CMAKE_BINARY_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
)
-LIST(APPEND volk_sources
+list(APPEND volk_sources
${CMAKE_CURRENT_SOURCE_DIR}/volk_prefs.c
${CMAKE_CURRENT_SOURCE_DIR}/volk_rank_archs.c
${volk_gen_sources}
)
#set the machine definitions where applicable
-SET_SOURCE_FILES_PROPERTIES(
+set_source_files_properties(
${CMAKE_CURRENT_BINARY_DIR}/volk.c
${CMAKE_CURRENT_BINARY_DIR}/volk_machines.c
PROPERTIES COMPILE_DEFINITIONS "${machine_defs}")
-IF(MSVC)
+if(MSVC)
#add compatibility includes for stdint types
- INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/msvc)
+ include_directories(${CMAKE_SOURCE_DIR}/msvc)
#compile the sources as C++ due to the lack of complex.h under MSVC
- SET_SOURCE_FILES_PROPERTIES(${volk_sources} PROPERTIES LANGUAGE CXX)
-ENDIF(MSVC)
+ set_source_files_properties(${volk_sources} PROPERTIES LANGUAGE CXX)
+endif(MSVC)
#create the volk runtime library
-ADD_LIBRARY(volk SHARED ${volk_sources})
-TARGET_LINK_LIBRARIES(volk ${ORC_LIBRARIES})
-SET_TARGET_PROPERTIES(volk PROPERTIES SOVERSION ${LIBVER})
-SET_TARGET_PROPERTIES(volk PROPERTIES DEFINE_SYMBOL "volk_EXPORTS")
-
-INSTALL(TARGETS volk
- LIBRARY DESTINATION lib${LIB_SUFFIX} # .so file
- ARCHIVE DESTINATION lib${LIB_SUFFIX} # .lib file
- RUNTIME DESTINATION bin # .dll file
+add_library(volk SHARED ${volk_sources})
+target_link_libraries(volk ${ORC_LIBRARIES})
+set_target_properties(volk PROPERTIES SOVERSION ${LIBVER})
+set_target_properties(volk PROPERTIES DEFINE_SYMBOL "volk_EXPORTS")
+
+install(TARGETS volk
+ LIBRARY DESTINATION lib${LIB_SUFFIX} COMPONENT "volk_runtime" # .so file
+ ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT "volk_devel" # .lib file
+ RUNTIME DESTINATION bin COMPONENT "volk_runtime" # .dll file
)
########################################################################
# Build the QA test application
########################################################################
-FIND_PACKAGE(Boost COMPONENTS unit_test_framework)
+find_package(Boost COMPONENTS unit_test_framework)
-IF(Boost_FOUND)
+if(Boost_FOUND)
-SET_SOURCE_FILES_PROPERTIES(
+set_source_files_properties(
${CMAKE_CURRENT_SOURCE_DIR}/testqa.cc PROPERTIES
COMPILE_DEFINITIONS "BOOST_TEST_DYN_LINK;BOOST_TEST_MAIN"
)
-INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
-LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
+include_directories(${Boost_INCLUDE_DIRS})
+link_directories(${Boost_LIBRARY_DIRS})
-ADD_EXECUTABLE(test_all
+add_executable(test_all
${CMAKE_CURRENT_SOURCE_DIR}/testqa.cc
${CMAKE_CURRENT_SOURCE_DIR}/qa_utils.cc
)
-TARGET_LINK_LIBRARIES(test_all volk ${Boost_LIBRARIES})
-ADD_TEST(qa_volk_test_all test_all)
+target_link_libraries(test_all volk ${Boost_LIBRARIES})
+#ADD_TEST(qa_volk_test_all test_all)
-ENDIF()
+endif()
diff --git a/volk/lib/volk_prefs.c b/volk/lib/volk_prefs.c
index 9743c51d9..b29d5fd87 100644
--- a/volk/lib/volk_prefs.c
+++ b/volk/lib/volk_prefs.c
@@ -23,7 +23,7 @@ int load_preferences(struct volk_arch_pref **prefs) {
//get the config path
get_config_path(path);
config_file = fopen(path, "r");
- if(!config_file) return; //no prefs found
+ if(!config_file) return n_arch_prefs; //no prefs found
while(fgets(line, 512, config_file) != NULL) {
if(sscanf(line, "%s %s", function, arch) == 2 && !strncmp(function, "volk_", 5)) {