1# Copyright (c) 2006 The Regents of The University of Michigan 2# All rights reserved. 3# 4# Redistribution and use in source and binary forms, with or without 5# modification, are permitted provided that the following conditions are 6# met: redistributions of source code must retain the above copyright 7# notice, this list of conditions and the following disclaimer; 8# redistributions in binary form must reproduce the above copyright --- 20 unchanged lines hidden (view full) --- 29import os, sys 30 31config_path = os.path.dirname(os.path.abspath(__file__)) 32config_root = os.path.dirname(config_path) 33 34class PathSearchFunc(object): 35 _sys_paths = None 36 |
37 def __init__(self, subdirs, sys_paths=None): 38 if isinstance(subdirs, basestring): 39 subdirs = [subdirs] |
40 self._subdir = os.path.join(*subdirs) |
41 if sys_paths: 42 self._sys_paths = sys_paths |
43 44 def __call__(self, filename): 45 if self._sys_paths is None: 46 try: 47 paths = os.environ['M5_PATH'].split(':') 48 except KeyError: 49 paths = [ '/dist/m5/system', '/n/poolfs/z/dist/m5/system' ] 50 --- 12 unchanged lines hidden (view full) --- 63 paths = (os.path.join(p, filepath) for p in self._sys_paths) 64 try: 65 return next(p for p in paths if os.path.exists(p)) 66 except StopIteration: 67 raise IOError, "Can't find file '%s' on path." % filename 68 69disk = PathSearchFunc('disks') 70binary = PathSearchFunc('binaries') |
71script = PathSearchFunc('boot', sys_paths=[config_root]) |