Apologies, I didn't realize that was a special case. I may not have time to
implement it before I have to stop for the day (although I'll try), but it
would be simple enough to add a parameter to init called "sys_paths" or
something along those lines which defaults to None, and if still None in
init isn't set on that instance. Otherwise, self._sys_paths would be set to
that and override the class default.

Gabe

On Fri, Nov 10, 2017 at 10:30 AM, Curtis Dunham <curtis.dun...@arm.com>
wrote:

> Hi all, Gabe,
> This commit breaks the regression quick/fs/80.netperf-stream/
> alpha/linux/twosys-tsunami-simple-atomic.
> It's the only regression that uses SysConfig() with an actual script
> argument, and it needs to find that script in $GEM5_ROOT/configs/boot/.
>
> Before this commit, this would be found because script.path was
> initialized with [joinpath(config_root, 'boot')].  Now it is initialized
> with PathSearchFunc('boot'), a (nonexistent) sibling to
> $M5_PATH/{disks,binaries}.
>
>
> Thanks,
> Curtis
>
> -----Original Message-----
> From: gem5-dev [mailto:gem5-dev-boun...@gem5.org] On Behalf Of Gabe Black
> (Gerrit)
> Sent: Tuesday, October 31, 2017 5:18 PM
> Subject: [gem5-dev] Change in public/gem5[master]: config: Rework the
> SysPaths functions into functors.
>
> Gabe Black has submitted this change and it was merged. (
> https://gem5-review.googlesource.com/5341 )
>
> Change subject: config: Rework the SysPaths functions into functors.
> ......................................................................
>
> config: Rework the SysPaths functions into functors.
>
> These functions were already being treated as psuedo objects and had
> properties assigned to them setting what their paths were. That's a bit
> unusual and made it less obvious what the code was doing, but also forced
> the "system" function to know what all the possible path searching
> functions were so that they'd have their "path" property initialized
> properly in a central location.
>
> This change introduces a PathSearcFunc class which encapsulates the
> mechanisms of the old code and makes it implicitly extensible so that other
> path searching functions which might look in other directories can be added
> in other places.
>
> Change-Id: I7be28e51481a06ec83997677af99927709b18003
> Reviewed-on: https://gem5-review.googlesource.com/5341
> Reviewed-by: Andreas Sandberg <andreas.sandb...@arm.com>
> Maintainer: Andreas Sandberg <andreas.sandb...@arm.com>
> ---
> M configs/common/SysPaths.py
> 1 file changed, 28 insertions(+), 42 deletions(-)
>
> Approvals:
>    Andreas Sandberg: Looks good to me, approved; Looks good to me, approved
>
>
>
> diff --git a/configs/common/SysPaths.py b/configs/common/SysPaths.py index
> 316fd03..c012846 100644
> --- a/configs/common/SysPaths.py
> +++ b/configs/common/SysPaths.py
> @@ -27,55 +27,41 @@
>   # Authors: Ali Saidi
>
>   import os, sys
> -from os.path import join as joinpath
> -from os import environ as env
>
>   config_path = os.path.dirname(os.path.abspath(__file__))
>   config_root = os.path.dirname(config_path)
>
> -def searchpath(path, filename):
> -    for p in path:
> -        f = joinpath(p, filename)
> -        if os.path.exists(f):
> -            return f
> -    raise IOError, "Can't find file '%s' on path." % filename
> +class PathSearchFunc(object):
> +    _sys_paths = None
>
> -def disk(filename):
> -    system()
> -    return searchpath(disk.path, filename)
> +    def __init__(self, *subdirs):
> +        self._subdir = os.path.join(*subdirs)
>
> -def binary(filename):
> -    system()
> -    return searchpath(binary.path, filename)
> +    def __call__(self, filename):
> +        if self._sys_paths is None:
> +            try:
> +                paths = os.environ['M5_PATH'].split(':')
> +            except KeyError:
> +                paths = [ '/dist/m5/system',
> + '/n/poolfs/z/dist/m5/system' ]
>
> -def script(filename):
> -    system()
> -    return searchpath(script.path, filename)
> +            # expand '~' and '~user' in paths
> +            paths = map(os.path.expanduser, paths)
>
> -def system():
> -    if not system.path:
> +            # filter out non-existent directories
> +            paths = filter(os.path.isdir, paths)
> +
> +            if not paths:
> +                raise IOError, "Can't find a path to system files."
> +
> +            self._sys_paths = paths
> +
> +        filepath = os.path.join(self._subdir, filename)
> +        paths = (os.path.join(p, filepath) for p in self._sys_paths)
>           try:
> -            path = env['M5_PATH'].split(':')
> -        except KeyError:
> -            path = [ '/dist/m5/system', '/n/poolfs/z/dist/m5/system' ]
> +            return next(p for p in paths if os.path.exists(p))
> +        except StopIteration:
> +            raise IOError, "Can't find file '%s' on path." % filename
>
> -        # expand '~' and '~user' in paths
> -        path = map(os.path.expanduser, path)
> -
> -        # filter out non-existent directories
> -        system.path = filter(os.path.isdir, path)
> -
> -        if not system.path:
> -            raise IOError, "Can't find a path to system files."
> -
> -    if not binary.path:
> -        binary.path = [joinpath(p, 'binaries') for p in system.path]
> -    if not disk.path:
> -        disk.path = [joinpath(p, 'disks') for p in system.path]
> -    if not script.path:
> -        script.path = [joinpath(config_root, 'boot')]
> -
> -system.path = None
> -binary.path = None
> -disk.path = None
> -script.path = None
> +disk = PathSearchFunc('disks')
> +binary = PathSearchFunc('binaries')
> +script = PathSearchFunc('boot')
>
> --
> To view, visit https://gem5-review.googlesource.com/5341
> To unsubscribe, or for help writing mail filters, visit
> https://gem5-review.googlesource.com/settings
>
> Gerrit-Project: public/gem5
> Gerrit-Branch: master
> Gerrit-MessageType: merged
> Gerrit-Change-Id: I7be28e51481a06ec83997677af99927709b18003
> Gerrit-Change-Number: 5341
> Gerrit-PatchSet: 2
> Gerrit-Owner: Gabe Black <gabebl...@google.com>
> Gerrit-Assignee: Andreas Sandberg <andreas.sandb...@arm.com>
> Gerrit-Reviewer: Andreas Sandberg <andreas.sandb...@arm.com>
> Gerrit-Reviewer: Gabe Black <gabebl...@google.com>
> _______________________________________________
> gem5-dev mailing list
> gem5-dev@gem5.org
> http://m5sim.org/mailman/listinfo/gem5-dev
> IMPORTANT NOTICE: The contents of this email and any attachments are
> confidential and may also be privileged. If you are not the intended
> recipient, please notify the sender immediately and do not disclose the
> contents to any other person, use it for any purpose, or store or copy the
> information in any medium. Thank you.
>
_______________________________________________
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to