+ self.dir = os.path.join(self.PACKAGES_DIR, name)
+
+ # search package build.sh
+ build_sh_path = os.path.join(self.dir, 'build.sh')
+ if not os.path.isfile(build_sh_path):
+ raise Exception("build.sh not found")
+
+ self.buildfile = TermuxBuildFile(build_sh_path)
+ self.deps = self.buildfile._get_dependencies()
+
+ # search subpackages
+ self.subpkgs = []
+
+ for filename in os.listdir(self.dir):
+ if not filename.endswith('.subpackage.sh'):
+ continue
+
+ subpkg_name = filename.split('.subpackage.sh')[0]
+ subpkg = TermuxSubPackage(subpkg_name, parent=self)
+
+ self.subpkgs.append(subpkg)
+ self.deps |= subpkg.deps
+
+ # Do not depend on itself
+ self.deps.discard(self.name)
+ # Do not depend on any sub package
+ self.deps.difference_update([subpkg.name for subpkg in self.subpkgs])
+
+ self.needed_by = set() # to be completed outside, reverse of deps
+
+ def __repr__(self):
+ return "<{} '{}'>".format(self.__class__.__name__, self.name)
+
+
+class TermuxSubPackage(TermuxPackage):
+
+ def __init__(self, name, parent=None):
+ if parent is None:
+ raise Exception("SubPackages should have a parent")
+
+ self.name = name
+ self.parent = parent
+ self.buildfile = TermuxBuildFile(os.path.join(self.parent.dir, name + '.subpackage.sh'))
+ self.deps = self.buildfile._get_dependencies()
+
+ def __repr__(self):
+ return "<{} '{}' parent='{}'>".format(self.__class__.__name__, self.name, self.parent)