Skip to content

Commit 4d94e52

Browse files
committed
pkg.ebuild: export DEFINED_PHASES metadata
1 parent 861177d commit 4d94e52

4 files changed

Lines changed: 38 additions & 0 deletions

File tree

src/pkgcraft/pkg/ebuild.pxd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ cdef class EbuildPkg(Pkg):
1717
cdef object _required_use
1818
cdef object _restrict
1919
cdef object _src_uri
20+
cdef frozenset _defined_phases
2021
cdef tuple _homepage
2122
cdef tuple _keywords
2223
cdef tuple _inherit

src/pkgcraft/pkg/ebuild.pyx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,18 @@ cdef class EbuildPkg(Pkg):
165165
self._src_uri = None if deps is NULL else DepSet.from_ptr(deps)
166166
return self._src_uri
167167

168+
@property
169+
def defined_phases(self):
170+
"""Get a package's defined phases."""
171+
cdef char **phases
172+
cdef size_t length
173+
174+
if self._defined_phases is None:
175+
phases = C.pkgcraft_ebuild_pkg_defined_phases(self._ebuild_pkg, &length)
176+
self._defined_phases = frozenset(phases[i].decode() for i in range(length))
177+
C.pkgcraft_str_array_free(phases, length)
178+
return self._defined_phases
179+
168180
@property
169181
def homepage(self):
170182
"""Get a package's homepage."""

src/pkgcraft/pkgcraft_c.pxd

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,12 @@ cdef extern from "pkgcraft.h":
333333
# The argument must be a non-null EbuildPkg pointer.
334334
DepSet *pkgcraft_ebuild_pkg_bdepend(EbuildPkg *p);
335335

336+
# Return a package's defined phases.
337+
#
338+
# # Safety
339+
# The argument must be a non-null EbuildPkg pointer.
340+
char **pkgcraft_ebuild_pkg_defined_phases(EbuildPkg *p, uintptr_t *len);
341+
336342
# Return a package's DEPEND.
337343
#
338344
# Returns NULL on nonexistence.

tests/pkg/test_ebuild.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,25 @@ def test_src_uri(self, repo):
122122
pkg = repo.create_pkg(src_uri='https://a.com/b.tar.gz')
123123
assert str(pkg.src_uri) == 'https://a.com/b.tar.gz'
124124

125+
def test_defined_phases(self, repo):
126+
# none
127+
pkg = repo.create_pkg()
128+
assert not pkg.defined_phases
129+
130+
# single
131+
data="src_configure() { :; }"
132+
pkg = repo.create_pkg(data=data)
133+
assert pkg.defined_phases == {'configure'}
134+
135+
# multiple
136+
data=textwrap.dedent("""
137+
src_prepare() { :; }
138+
src_configure() { :; }
139+
src_compile() { :; }
140+
""")
141+
pkg = repo.create_pkg(data=data)
142+
assert pkg.defined_phases == {'prepare', 'configure', 'compile'}
143+
125144
def test_homepage(self, repo):
126145
# none
127146
pkg = repo.create_pkg()

0 commit comments

Comments
 (0)