summaryrefslogtreecommitdiff
path: root/python/project.py
diff options
context:
space:
mode:
authorJosh Ferrell <josh@vector35.com>2025-08-26 15:49:45 -0400
committerAlexander Taylor <alex@vector35.com>2025-11-04 22:08:25 -0500
commitae1dbe7e69e3a1d5cc69fa5362fba1b85ba5b6b8 (patch)
tree034f72677b3751a8d467d229192646f5ce1b40e0 /python/project.py
parent21324fa57b44ba77e46be4952a02484cb8c3ef5c (diff)
Add project file dependencies
Diffstat (limited to 'python/project.py')
-rw-r--r--python/project.py60
1 files changed, 59 insertions, 1 deletions
diff --git a/python/project.py b/python/project.py
index e8ab5198..7df3d2b5 100644
--- a/python/project.py
+++ b/python/project.py
@@ -202,10 +202,68 @@ class ProjectFile:
"""
Get this file's path in its parent project
- :return: The path on disk of the file or None
+ :return: The path in the project or None
"""
return core.BNProjectFileGetPathInProject(self._handle)
+ def add_dependency(self, file: 'ProjectFile') -> bool:
+ """
+ Add a ProjectFile as a dependency of this file
+
+ :return: True on success, False otherwise
+ """
+ return core.BNProjectFileAddDependency(self._handle, file._handle)
+
+ def remove_dependency(self, file: 'ProjectFile') -> bool:
+ """
+ Remove a ProjectFile as a dependency of this file
+
+ :return: True on success, False otherwise
+ """
+ return core.BNProjectFileRemoveDependency(self._handle, file._handle)
+
+ def get_dependencies(self) -> List['ProjectFile']:
+ """
+ Get the list of files that this file depends on
+
+ :return: List of ProjectFiles that this file depends on
+ """
+ count = ctypes.c_size_t()
+ value = core.BNProjectFileGetDependencies(self._handle, count)
+ if value is None:
+ raise ProjectException("Failed to get list of project file dependencies")
+ result = []
+ try:
+ for i in range(count.value):
+ file_handle = core.BNNewProjectFileReference(value[i])
+ if file_handle is None:
+ raise ProjectException("core.BNNewProjectFileReference returned None")
+ result.append(ProjectFile(file_handle))
+ return result
+ finally:
+ core.BNFreeProjectFileList(value, count.value)
+
+ def get_required_by(self) -> List['ProjectFile']:
+ """
+ Get the list of files that depend on this file
+
+ :return: List of ProjectFiles that depend on this file
+ """
+ count = ctypes.c_size_t()
+ value = core.BNProjectFileGetRequiredBy(self._handle, count)
+ if value is None:
+ raise ProjectException("Failed to get list of project files that depend on file")
+ result = []
+ try:
+ for i in range(count.value):
+ file_handle = core.BNNewProjectFileReference(value[i])
+ if file_handle is None:
+ raise ProjectException("core.BNNewProjectFileReference returned None")
+ result.append(ProjectFile(file_handle))
+ return result
+ finally:
+ core.BNFreeProjectFileList(value, count.value)
+
class ProjectFolder:
"""