class Gnuradio < Formula desc "SDK providing the signal processing runtime and processing blocks" homepage "https://gnuradio.org/" url "https://gnuradio.org/releases/gnuradio/gnuradio-3.7.13.4.tar.gz" sha256 "c536c268b1e9c24f1206bbc881a5819ac46e662f4e8beaded6f3f441d3502f0d" revision 12 head "https://github.com/gnuradio/gnuradio.git" bottle do sha256 "426f2df8293360e29050dfec708e317e76718a1030b90dd9a77bfe0024a6d972" => :catalina sha256 "1524b7c15a18d1a5b9b7aa53c47c482668b782df2d41cd4c8dc2c8b775776570" => :mojave sha256 "7e18a8c2e2cecd01854395bc481ab82affce32cef73c54b9b65ebb9e182b06df" => :high_sierra end depends_on "cmake" => :build depends_on "doxygen" => :build depends_on "pkg-config" => :build depends_on "sphinx-doc" => :build depends_on "swig" => :build depends_on "boost" depends_on "fftw" depends_on "gsl" depends_on "numpy@1.16" depends_on "portaudio" depends_on "uhd" depends_on "zeromq" uses_from_macos "python@2" # Does not support Python 3 # cheetah starts here resource "Markdown" do url "https://files.pythonhosted.org/packages/b3/73/fc5c850f44af5889192dff783b7b0d8f3fe8d30b65c8e3f78f8f0265fecf/Markdown-2.6.11.tar.gz" sha256 "a856869c7ff079ad84a3e19cd87a64998350c2b94e9e08e44270faef33400f81" end resource "Cheetah" do url "https://files.pythonhosted.org/packages/cd/b0/c2d700252fc251e91c08639ff41a8a5203b627f4e0a2ae18a6b662ab32ea/Cheetah-2.4.4.tar.gz" sha256 "be308229f0c1e5e5af4f27d7ee06d90bb19e6af3059794e5fd536a6f29a9b550" end # cheetah ends here resource "lxml" do url "https://files.pythonhosted.org/packages/54/a6/43be8cf1cc23e3fa208cab04ba2f9c3b7af0233aab32af6b5089122b44cd/lxml-4.2.3.tar.gz" sha256 "622f7e40faef13d232fb52003661f2764ce6cdef3edb0a59af7c1559e4cc36d1" end resource "MarkupSafe" do url "https://files.pythonhosted.org/packages/4d/de/32d741db316d8fdb7680822dd37001ef7a448255de9699ab4bfcbdf4172b/MarkupSafe-1.0.tar.gz" sha256 "a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665" end resource "Mako" do url "https://files.pythonhosted.org/packages/eb/f3/67579bb486517c0d49547f9697e36582cd19dafb5df9e687ed8e22de57fa/Mako-1.0.7.tar.gz" sha256 "4e02fde57bd4abb5ec400181e4c314f56ac3e49ba4fb8b0d50bba18cb27d25ae" end resource "six" do url "https://files.pythonhosted.org/packages/16/d8/bc6316cf98419719bd59c91742194c111b6f2e85abac88e496adefaf7afe/six-1.11.0.tar.gz" sha256 "70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9" end resource "cppzmq" do url "https://raw.githubusercontent.com/zeromq/cppzmq/46fc0572c5e9f09a32a23d6f22fd79b841f77e00/zmq.hpp" sha256 "964031c0944f913933f55ad1610938105a6657a69d1ac5a6dd50e16a679104d5" end # patch for boost 1.70.0, remove after next release patch do url "https://github.com/gnuradio/gnuradio/commit/6dc8229fd0dda25c054c2194ee2c9b28affe92d8.patch?full_index=1" sha256 "9836235ea69b3d66b5cd4b2cdc89f80d010797d2bd59dc5c6631a96af921db8c" end def install ENV.prepend_path "PATH", "/System/Library/Frameworks/Python.framework/Versions/2.7/bin" ENV["CHEETAH_INSTALL_WITHOUT_SETUPTOOLS"] = "1" ENV["XML_CATALOG_FILES"] = etc/"xml/catalog" ENV.prepend_create_path "PYTHONPATH", libexec/"vendor/lib/python2.7/site-packages" %w[Markdown Cheetah MarkupSafe Mako six].each do |r| resource(r).stage do system "python", *Language::Python.setup_install_args(libexec/"vendor") end end begin # Fix "ld: file not found: /usr/lib/system/libsystem_darwin.dylib" for lxml ENV["SDKROOT"] = MacOS.sdk_path if MacOS.version == :sierra resource("lxml").stage do system "python", *Language::Python.setup_install_args(libexec/"vendor") end ensure ENV.delete("SDKROOT") end resource("cppzmq").stage include.to_s args = std_cmake_args + %W[ -DGR_PKG_CONF_DIR=#{etc}/gnuradio/conf.d -DGR_PREFSDIR=#{etc}/gnuradio/conf.d -DENABLE_DEFAULT=OFF ] enabled = %w[GR_ANALOG GR_FFT VOLK GR_FILTER GNURADIO_RUNTIME GR_BLOCKS GR_PAGER GR_NOAA GR_CHANNELS GR_AUDIO GR_FCD GR_VOCODER GR_FEC GR_DIGITAL GR_DTV GR_ATSC GR_TRELLIS GR_ZEROMQ GR_WAVELET GR_UHD DOXYGEN SPHINX PYTHON GR_UTILS] enabled.each do |c| args << "-DENABLE_#{c}=ON" end mkdir "build" do system "cmake", "..", *args system "make" system "make", "install" end rm bin.children.reject(&:executable?) bin.env_script_all_files(libexec/"bin", :PYTHONPATH => ENV["PYTHONPATH"]) end test do assert_match version.to_s, shell_output("#{bin}/gnuradio-config-info -v") (testpath/"test.c++").write <<~EOS #include #include #include #include #include class top_block : public gr::top_block { public: top_block(); private: gr::blocks::null_source::sptr null_source; gr::blocks::null_sink::sptr null_sink; gr::blocks::head::sptr head; }; top_block::top_block() : gr::top_block("Top block") { long s = sizeof(gr_complex); null_source = gr::blocks::null_source::make(s); null_sink = gr::blocks::null_sink::make(s); head = gr::blocks::head::make(s, 1024); connect(null_source, 0, head, 0); connect(head, 0, null_sink, 0); } int main(int argc, char **argv) { top_block top; top.run(); } EOS system ENV.cxx, "-L#{lib}", "-L#{Formula["boost"].opt_lib}", "-lgnuradio-blocks", "-lgnuradio-runtime", "-lgnuradio-pmt", "-lboost_system", testpath/"test.c++", "-o", testpath/"test" system "./test" (testpath/"test.py").write <<~EOS from gnuradio import blocks from gnuradio import gr class top_block(gr.top_block): def __init__(self): gr.top_block.__init__(self, "Top Block") self.samp_rate = 32000 s = gr.sizeof_gr_complex self.blocks_null_source_0 = blocks.null_source(s) self.blocks_null_sink_0 = blocks.null_sink(s) self.blocks_head_0 = blocks.head(s, 1024) self.connect((self.blocks_head_0, 0), (self.blocks_null_sink_0, 0)) self.connect((self.blocks_null_source_0, 0), (self.blocks_head_0, 0)) def main(top_block_cls=top_block, options=None): tb = top_block_cls() tb.start() tb.wait() main() EOS system "python", testpath/"test.py" cd testpath do system "#{bin}/gr_modtool", "newmod", "test" cd "gr-test" do system "#{bin}/gr_modtool", "add", "-t", "general", "test_ff", "-l", "python", "-y", "--argument-list=''", "--add-python-qa", "--copyright=brew" end end end end