scons: Don't use isdir in AddLocalRPATH.
authorGabe Black <gabeblack@google.com>
Tue, 12 Mar 2019 12:00:41 +0000 (05:00 -0700)
committerGabe Black <gabeblack@google.com>
Tue, 12 Mar 2019 15:43:38 +0000 (15:43 +0000)
isdir isn't a nice way to check if an FS.Base is a File or a Dir as was
initially assumed, it literally checks if a path can be stat-ed and is
reported as a directory by stat. This means that if a directory is
going to be created as part of the build, the result of that test will
change depending on whether that part of the build has happened
successfully before.

A better check which behaves as originally intended is to check whether
the Node is an instance of the SCons.Node.FS.Dir class.

Change-Id: Id041917d50b768a8205769c0a05320f92b09993c
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17128
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Gabe Black <gabeblack@google.com>

SConstruct

index 3599371c89641c4e2212748cf16f2a1c51a0550b..53b8c9deab1cd1df21786e1b45b74d43fde4fdbd 100755 (executable)
@@ -97,6 +97,7 @@ from re import match
 # SCons includes
 import SCons
 import SCons.Node
+import SCons.Node.FS
 
 from m5.util import compareVersions, readCommand
 
@@ -1096,7 +1097,7 @@ def add_local_rpath(env, *targets):
     binary.'''
     for target in targets:
         target = env.Entry(target)
-        if not target.isdir():
+        if not isinstance(target, SCons.Node.FS.Dir):
             target = target.dir
         relpath = os.path.relpath(target.abspath, env['BUILDDIR'])
         components = [