summaryrefslogtreecommitdiffstats
path: root/SCons/Node/FS.py
diff options
context:
space:
mode:
Diffstat (limited to 'SCons/Node/FS.py')
-rw-r--r--SCons/Node/FS.py31
1 files changed, 17 insertions, 14 deletions
diff --git a/SCons/Node/FS.py b/SCons/Node/FS.py
index a5282e6..d1ffddb 100644
--- a/SCons/Node/FS.py
+++ b/SCons/Node/FS.py
@@ -1294,7 +1294,7 @@ class FS(LocalFS):
self.Root[''] = root
return root
- def _lookup(self, p, directory, fsclass, create: int=1):
+ def _lookup(self, p, directory, fsclass, create: bool = True):
"""
The generic entry point for Node lookup with user-supplied data.
@@ -1430,7 +1430,7 @@ class FS(LocalFS):
return root._lookup_abs(p, fsclass, create)
- def Entry(self, name, directory = None, create: int = 1):
+ def Entry(self, name, directory = None, create: bool = True):
"""Look up or create a generic Entry node with the specified name.
If the name is a relative path (begins with ./, ../, or a file
name), then it is looked up relative to the supplied directory
@@ -1439,7 +1439,7 @@ class FS(LocalFS):
"""
return self._lookup(name, directory, Entry, create)
- def File(self, name, directory = None, create: int = 1):
+ def File(self, name, directory = None, create: bool = True):
"""Look up or create a File node with the specified name. If
the name is a relative path (begins with ./, ../, or a file name),
then it is looked up relative to the supplied directory node,
@@ -1486,21 +1486,24 @@ class FS(LocalFS):
d = self.Dir(d)
self.Top.addRepository(d)
- def PyPackageDir(self, modulename):
- r"""Locate the directory of a given python module name
+ def PyPackageDir(self, modulename) -> Optional[Dir]:
+ r"""Locate the directory of Python module *modulename*.
- For example scons might resolve to
- Windows: C:\Python27\Lib\site-packages\scons-2.5.1
- Linux: /usr/lib/scons
+ For example 'SCons' might resolve to
+ Windows: C:\Python311\Lib\site-packages\SCons
+ Linux: /usr/lib64/python3.11/site-packages/SCons
- This can be useful when we want to determine a toolpath based on a python module name"""
+ Can be used to determine a toolpath based on a Python module name.
- dirpath = ''
-
- # Python3 Code
+ This is the backend called by the public API function
+ :meth:`~Environment.Base.PyPackageDir`.
+ """
modspec = importlib.util.find_spec(modulename)
- dirpath = os.path.dirname(modspec.origin)
- return self._lookup(dirpath, None, Dir, True)
+ if modspec:
+ origin = os.path.dirname(modspec.origin)
+ return self._lookup(origin, directory=None, fsclass=Dir, create=True)
+ else:
+ return None
def variant_dir_target_climb(self, orig, dir, tail):