Did a little work with path handling.
authorjblum <jblum@221aa14e-8319-0410-a670-987f0aec2ac5>
Fri, 29 May 2009 06:43:35 +0000 (06:43 +0000)
committerjblum <jblum@221aa14e-8319-0410-a670-987f0aec2ac5>
Fri, 29 May 2009 06:43:35 +0000 (06:43 +0000)
Additional blocks paths can be specified with environment variable GRC_BLOCKS_PATH

git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@11163 221aa14e-8319-0410-a670-987f0aec2ac5

grc/scripts/grc
grc/scripts/usrp2_probe
grc/scripts/usrp_probe
grc/src/platforms/base/Platform.py
grc/src/platforms/python/Platform.py

index d0b8099f1b4ecbe9a94e1411dc7ff9c578a844ec..a2e3bc28ace73b141279cd45150959e475e2b5b0 100755 (executable)
@@ -18,6 +18,8 @@ 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 pygtk
 pygtk.require('2.0')
 import gtk
@@ -50,5 +52,8 @@ and you are welcome to redistribute it.
        #setup icon using icon theme
        try: gtk.window_set_default_icon(gtk.IconTheme().load_icon('gnuradio-grc', 256, 0))
        except: pass
-       ActionHandler(args, Platform())
+       #extract extra block paths from environment variable, separated by semicolon
+       try: extra_blocks = os.environ['GRC_BLOCKS_PATH'].split(';')
+       except: extra_blocks = list()
+       ActionHandler(args, Platform(extra_blocks=extra_blocks))
 
index baf44a47942162ae24a39e1928511ef9be590351..fac2427de0453471ed1d5c10b2b50764386b954f 100755 (executable)
@@ -30,7 +30,7 @@ import gobject
 from gnuradio.grc.gui.Dialogs import TextDisplay
 
 from gnuradio.grc.platforms.python.Platform import Platform
-platform = Platform(block_paths_internal_only=['usrp2_probe.xml'])
+platform = Platform(critical_only=True)
 
 from gnuradio.grc.platforms.gui.Platform import Platform
 platform = Platform(platform)
index 3d7b6f0cbb521bef5893f6448d2f2a1c0b22685b..3eb3de58ed9d28fa847edcda7fa0cf5c42a45366 100755 (executable)
@@ -28,7 +28,7 @@ import gtk
 from gnuradio.grc.gui.Dialogs import TextDisplay
 
 from gnuradio.grc.platforms.python.Platform import Platform
-platform = Platform(block_paths_internal_only=['usrp_probe.xml'])
+platform = Platform(critical_only=True)
 
 from gnuradio.grc.platforms.gui.Platform import Platform
 platform = Platform(platform)
index 1f04fa0a6bc5ee6f2c030c8cfc103a96dc45126d..35227d99fb5ea1f561483e671eeea3a081017013 100644 (file)
@@ -61,8 +61,6 @@ class Platform(_Element):
                                        for filename in filter(lambda f: f.endswith('.xml'), filenames):
                                                self._load_blocks(os.path.join(dirpath, filename))
 
-       def get_prefs_block(self): return self.get_new_flow_graph().get_new_block('preferences')
-
        def _load_blocks(self, f):
                """
                Load the block wrappers from the file path.
index 9b0b3bb309bcfb6fa804b0de9666d4e5ae43acb9..d2bb4627ede389e318bae9676c9a6727959e5a47 100644 (file)
@@ -30,25 +30,22 @@ from Constants import \
        BLOCK_TREE, DEFAULT_FLOW_GRAPH, \
        BLOCKS_DIR
 
+_critical_blocks_only = map(lambda b: os.path.join(BLOCKS_DIR, b), ['options.xml', 'usrp_probe.xml', 'usrp2_probe.xml'])
+
 class Platform(_Platform):
 
-       def __init__(self, block_paths_internal_only=[], block_paths_external=[]):
+       def __init__(self, extra_blocks=[], critical_only=False):
                """
                Make a platform for gnuradio.
-               The internal only list will replace the current block path.
-               @param block_paths_internal_only a list of blocks internal to this platform
-               @param block_paths_external a list of blocks to load in addition to the above blocks
+               @param extra_blocks a list of block paths to load in addition to main block library
+               @param critical_only only load critical blocks (used only for usrp probe scripts to speed up load time)
                """
                #ensure hier dir
                if not os.path.exists(HIER_BLOCKS_LIB_DIR): os.mkdir(HIER_BLOCKS_LIB_DIR)
-               #handle internal/only
-               if block_paths_internal_only:
-                       block_paths = map(lambda b: os.path.join(BLOCKS_DIR, b), ['options.xml'] + block_paths_internal_only)
-               else: block_paths = [BLOCKS_DIR]
-               #handle external
-               block_paths.extend(block_paths_external)
-               #append custom hiers
-               block_paths.append(HIER_BLOCKS_LIB_DIR)
+               if critical_only: block_paths = _critical_blocks_only
+               else: block_paths = extra_blocks + [HIER_BLOCKS_LIB_DIR, BLOCKS_DIR]
+               #convert block paths to absolute paths, ensure uniqueness
+               block_paths = set(map(os.path.abspath, block_paths))
                #init
                _Platform.__init__(
                        self,