summaryrefslogtreecommitdiff
path: root/grc/scripts/gnuradio-companion
diff options
context:
space:
mode:
Diffstat (limited to 'grc/scripts/gnuradio-companion')
-rwxr-xr-xgrc/scripts/gnuradio-companion88
1 files changed, 74 insertions, 14 deletions
diff --git a/grc/scripts/gnuradio-companion b/grc/scripts/gnuradio-companion
index 6130582f35..8f267c8198 100755
--- a/grc/scripts/gnuradio-companion
+++ b/grc/scripts/gnuradio-companion
@@ -20,22 +20,82 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
import os
import sys
+import warnings
-script_path = os.path.dirname(os.path.abspath(__file__))
-source_tree_subpath = "/grc/scripts"
-if not script_path.endswith(source_tree_subpath):
- # run the installed version
- from gnuradio.grc import checks
- checks.do_all()
- from gnuradio.grc.main import main
- exit(main())
+GR_IMPORT_ERROR_MESSAGE = """\
+Cannot import gnuradio.
+
+Is the model path environment variable set correctly?
+ All OS: PYTHONPATH
+
+Is the library path environment variable set correctly?
+ Linux: LD_LIBRARY_PATH
+ Windows: PATH
+ MacOSX: DYLD_LIBRARY_PATH
+"""
+
+
+def die(error, message):
+ msg = "{0}\n\n({1})".format(message, error)
+ try:
+ from gi.repository import Gtk
+ d = Gtk.MessageDialog(
+ message_type=Gtk.MessageType.ERROR,
+ buttons=Gtk.ButtonsType.CLOSE,
+ text=msg,
+ )
+ d.set_title(type(error).__name__)
+ d.run()
+ exit(1)
+ except ImportError:
+ exit(type(error).__name__ + '\n\n' + msg)
+
+
+def check_gtk():
+ try:
+ warnings.filterwarnings("error")
+ import gi
+ gi.require_version('Gtk', '3.0')
+ gi.require_version('PangoCairo', '1.0')
-else:
- print("Running from source tree")
- sys.path.insert(1, script_path[:-len(source_tree_subpath)])
- from grc import checks
- checks.do_all()
- from grc.main import main
+ from gi.repository import Gtk
+ Gtk.init_check()
+ warnings.filterwarnings("always")
+ except Exception as err:
+ die(err, "Failed to initialize GTK. If you are running over ssh, "
+ "did you enable X forwarding and start ssh with -X?")
+
+
+def check_gnuradio_import():
+ try:
+ from gnuradio import gr
+ except ImportError as err:
+ die(err, GR_IMPORT_ERROR_MESSAGE)
+
+
+def check_blocks_path():
+ if 'GR_DONT_LOAD_PREFS' in os.environ and not os.environ.get('GRC_BLOCKS_PATH', ''):
+ die(EnvironmentError("No block definitions available"),
+ "Can't find block definitions. Use config.conf or GRC_BLOCKS_PATH.")
+
+
+def run_main():
+ script_path = os.path.dirname(os.path.abspath(__file__))
+ source_tree_subpath = "/grc/scripts"
+
+ if not script_path.endswith(source_tree_subpath):
+ # run the installed version
+ from gnuradio.grc.main import main
+ else:
+ print("Running from source tree")
+ sys.path.insert(1, script_path[:-len(source_tree_subpath)])
+ from grc.main import main
exit(main())
+
+if __name__ == '__main__':
+ check_gnuradio_import()
+ check_gtk()
+ check_blocks_path()
+ run_main()