commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] [gnuradio] 04/08: grc: rewrite grcc


From: git
Subject: [Commit-gnuradio] [gnuradio] 04/08: grc: rewrite grcc
Date: Wed, 28 Sep 2016 11:42:40 +0000 (UTC)

This is an automated email from the git hooks/post-receive script.

jcorgan pushed a commit to branch next
in repository gnuradio.

commit 3388c012cfb07b959c3cde93ea0fd07bb0fb776f
Author: Sebastian Koslowski <address@hidden>
Date:   Fri Sep 23 21:13:36 2016 +0200

    grc: rewrite grcc
---
 grc/compiler.py                |  73 +++++++++++++++++++++++++++++
 grc/core/Config.py             |   4 +-
 grc/scripts/gnuradio-companion |  34 +++++++-------
 grc/scripts/grcc               | 103 ++++++++++++++++-------------------------
 4 files changed, 131 insertions(+), 83 deletions(-)

diff --git a/grc/compiler.py b/grc/compiler.py
new file mode 100755
index 0000000..3be98de
--- /dev/null
+++ b/grc/compiler.py
@@ -0,0 +1,73 @@
+# Copyright 2016 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along 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 __future__ import print_function, absolute_import
+
+import argparse
+import os
+import subprocess
+
+from gnuradio import gr
+
+from .core import Messages
+from .core.Platform import Platform
+
+
+def argument_parser():
+    parser = argparse.ArgumentParser(description=(
+        "Compiles a GRC file (.grc) into a GNU Radio Python program. "
+        "The program is stored in ~/.grc_gnuradio by default, "
+        "but this location can be changed with the -d option."
+    ))
+    parser.add_argument("-d", "--directory", dest='out_dir', default='',
+                        help="Specify the directory to output the compiled 
program "
+                             "(default is the hier_block library)")
+    parser.add_argument("-e", "--execute", action="store_true", default=False,
+                        help="Run the program after compiling 
[default=%(default)s]")
+    parser.add_argument(metavar="GRC_FILE", dest='grc_files', nargs='+',
+                        help=".grc file to compile")
+    return parser
+
+
+def main(args=None):
+    args = args or argument_parser().parse_args()
+
+    platform = Platform(
+        name='GNU Radio Companion Compiler',
+        prefs_file=gr.prefs(),
+        version=gr.version(),
+        version_parts=(gr.major_version(), gr.api_version(), 
gr.minor_version())
+    )
+    out_dir = args.out_dir or platform.config.hier_block_lib_dir
+    if not os.path.exists(out_dir):
+        exit('Error: Invalid output directory.')
+
+    Messages.send_init(platform)
+    flow_graph = file_path = None
+    for grc_file in args.grc_files:
+        os.path.exists(grc_file) or exit('Error: missing ' + grc_file)
+        Messages.send('\n')
+
+        flow_graph, file_path = platform.load_and_generate_flow_graph(
+            os.path.abspath(grc_file), os.path.abspath(out_dir))
+        if not file_path:
+            exit('Compilation error. Aborting.')
+    if file_path and args.execute:
+        run_command_args = flow_graph.get_run_command(file_path, split=True)
+        subprocess.call(run_command_args)
diff --git a/grc/core/Config.py b/grc/core/Config.py
index 78ff344..744ad06 100644
--- a/grc/core/Config.py
+++ b/grc/core/Config.py
@@ -32,10 +32,12 @@ class Config(object):
 
     hier_block_lib_dir = os.environ.get('GRC_HIER_PATH', 
Constants.DEFAULT_HIER_BLOCK_LIB_DIR)
 
-    def __init__(self, prefs_file, version, version_parts=None):
+    def __init__(self, prefs_file, version, version_parts=None, name=None):
         self.prefs = prefs_file
         self.version = version
         self.version_parts = version_parts or version[1:].split('-', 
1)[0].split('.')[:3]
+        if name:
+            self.name = name
 
     @property
     def block_paths(self):
diff --git a/grc/scripts/gnuradio-companion b/grc/scripts/gnuradio-companion
index 34bb0bf..bacbbe2 100755
--- a/grc/scripts/gnuradio-companion
+++ b/grc/scripts/gnuradio-companion
@@ -1,22 +1,20 @@
 #!/usr/bin/env python
-"""
-Copyright 2016 Free Software Foundation, Inc.
-This file is part of GNU Radio
-
-GNU Radio Companion is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-GNU Radio Companion is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
-"""
+# Copyright 2016 Free Software Foundation, Inc.
+# This file is part of GNU Radio
+#
+# GNU Radio Companion is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# GNU Radio Companion is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
USA
 
 import os
 import sys
diff --git a/grc/scripts/grcc b/grc/scripts/grcc
index e93802f..c3a53a9 100755
--- a/grc/scripts/grcc
+++ b/grc/scripts/grcc
@@ -1,89 +1,64 @@
 #!/usr/bin/env python
-#
-# Copyright 2012 Free Software Foundation, Inc.
-#
+# Copyright 2016 Free Software Foundation, Inc.
 # This file is part of GNU Radio
 #
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
+# GNU Radio Companion is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
 #
-# GNU Radio is distributed in the hope that it will be useful,
+# GNU Radio Companion is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING.  If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
USA
 
 import os
 import sys
-from argparse import ArgumentParser
-import warnings
-warnings.simplefilter('ignore')
-
-from gnuradio import gr
 
-try:
-    from grc.core.Platform import Platform
-except ImportError:
-    from gnuradio.grc.core.Platform import Platform
 
+GR_IMPORT_ERROR_MESSAGE = """\
+Cannot import gnuradio.
 
-class GRCC:
-    def __init__(self, grcfile, out_dir):
-        self.out_dir = out_dir
-        self.platform = Platform(
-            prefs_file=gr.prefs(),
-            version=gr.version(),
-            version_parts=(gr.major_version(), gr.api_version(), 
gr.minor_version())
-        )
-        data = self.platform.parse_flow_graph(grcfile)
+Is the model path environment variable set correctly?
+    All OS: PYTHONPATH
 
-        self.fg = self.platform.get_new_flow_graph()
-        self.fg.import_data(data)
-        self.fg.grc_file_path = os.path.abspath(grcfile)
-        self.fg.validate()
+Is the library path environment variable set correctly?
+    Linux: LD_LIBRARY_PATH
+    Windows: PATH
+    MacOSX: DYLD_LIBRARY_PATH
+"""
 
-        if not self.fg.is_valid():
-            raise StandardError("\n\n".join(
-                ["Validation failed:"] + self.fg.get_error_messages()
-            ))
 
-        self.gen = self.platform.Generator(self.fg, out_dir)
-        self.gen.write()
+def die(error, message):
+    msg = "{0}\n\n({1})".format(message, error)
+    exit(type(error).__name__ + '\n\n' + msg)
 
-    def exec_program(self):
-        progname = self.fg.get_option('id')
-        os.system("{0}/{1}.py".format(self.out_dir, progname))
 
+def check_gnuradio_import():
+    try:
+        from gnuradio import gr
+    except ImportError as err:
+        die(err, GR_IMPORT_ERROR_MESSAGE)
 
-def main():
-    description = "Compiles a GRC file (.grc) into a GNU Radio Python program. 
The program is stored in ~/.grc_gnuradio by default, but this location can be 
changed with the -d option."
-
-    parser = ArgumentParser(description=description)
-    parser.add_argument("-d", "--directory",
-            default='{0}/.grc_gnuradio/'.format(os.environ["HOME"]),
-            help="Specify the directory to output the compile program 
[default=%(default)s]")
-    parser.add_argument("-e", "--execute", action="store_true", default=False,
-            help="Run the program after compiling [default=%(default)s]")
-    parser.add_argument('grc_file', metavar="GRC_FILE", help=".grc file to 
compile")
-    args = parser.parse_args()
 
-    try:
-        g = GRCC(args.grc_file, args.directory + "/")
-    except Exception as e:
-        sys.stderr.write(str(e) + "\n")
-        sys.stderr.write("Error during file compilation.\n")
-        sys.exit(1)
+def run_main():
+    script_path = os.path.dirname(os.path.abspath(__file__))
+    source_tree_subpath = "/grc/scripts"
 
-    if args.execute:
-        g.exec_program()
+    if not script_path.endswith(source_tree_subpath):
+        # run the installed version
+        from gnuradio.grc.compiler import main
+    else:
+        print("Running from source tree")
+        sys.path.insert(1, script_path[:-len(source_tree_subpath)])
+        from grc.compiler import main
+    exit(main())
 
 
-if __name__ == "__main__":
-    main()
+if __name__ == '__main__':
+    check_gnuradio_import()
+    run_main()



reply via email to

[Prev in Thread] Current Thread [Next in Thread]