Skip to content

Commit c04f489

Browse files
committed
depset: simplify depset-related C calls for pkgcraft-c updates
1 parent 43d15a8 commit c04f489

4 files changed

Lines changed: 43 additions & 100 deletions

File tree

src/pkgcraft/depset.pxd

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,8 @@
11
from . cimport pkgcraft_c as C
22

33

4-
cdef class DepSetAtom:
5-
cdef const C.DepSetAtom *_deps
4+
cdef class DepSet:
5+
cdef C.DepSet *_deps
66

77
@staticmethod
8-
cdef DepSetAtom from_ptr(const C.DepSetAtom *)
9-
10-
11-
cdef class DepSetString:
12-
cdef const C.DepSetString *_deps
13-
14-
@staticmethod
15-
cdef DepSetString from_ptr(const C.DepSetString *)
16-
17-
18-
cdef class DepSetUri:
19-
cdef const C.DepSetUri *_deps
20-
21-
@staticmethod
22-
cdef DepSetUri from_ptr(const C.DepSetUri *)
8+
cdef DepSet from_ptr(C.DepSet *)

src/pkgcraft/depset.pyx

Lines changed: 7 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,49 +4,20 @@ from .pkg cimport Pkg
44
from .error import PkgcraftError
55

66

7-
cdef class DepSetAtom:
8-
"""Dependency set of atom objects."""
7+
cdef class DepSet:
8+
"""Dependency set of objects."""
99

1010
@staticmethod
11-
cdef DepSetAtom from_ptr(const C.DepSetAtom *deps):
12-
obj = <DepSetAtom>DepSetAtom.__new__(DepSetAtom)
11+
cdef DepSet from_ptr(C.DepSet *deps):
12+
obj = <DepSet>DepSet.__new__(DepSet)
1313
obj._deps = deps
1414
return obj
1515

1616
def __str__(self):
17-
cdef char *c_str = C.pkgcraft_depset_atom_str(self._deps)
17+
cdef char *c_str = C.pkgcraft_depset_str(self._deps)
1818
s = c_str.decode()
1919
C.pkgcraft_str_free(c_str)
2020
return s
2121

22-
23-
cdef class DepSetString:
24-
"""Dependency set of string objects."""
25-
26-
@staticmethod
27-
cdef DepSetString from_ptr(const C.DepSetString *deps):
28-
obj = <DepSetString>DepSetString.__new__(DepSetString)
29-
obj._deps = deps
30-
return obj
31-
32-
def __str__(self):
33-
cdef char *c_str = C.pkgcraft_depset_string_str(self._deps)
34-
s = c_str.decode()
35-
C.pkgcraft_str_free(c_str)
36-
return s
37-
38-
39-
cdef class DepSetUri:
40-
"""Dependency set of URI objects."""
41-
42-
@staticmethod
43-
cdef DepSetUri from_ptr(const C.DepSetUri *deps):
44-
obj = <DepSetUri>DepSetUri.__new__(DepSetUri)
45-
obj._deps = deps
46-
return obj
47-
48-
def __str__(self):
49-
cdef char *c_str = C.pkgcraft_depset_uri_str(self._deps)
50-
s = c_str.decode()
51-
C.pkgcraft_str_free(c_str)
52-
return s
22+
def __dealloc__(self):
23+
C.pkgcraft_depset_free(self._deps)

src/pkgcraft/pkg/ebuild.pyx

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from .. cimport pkgcraft_c as C
22
from .._misc cimport SENTINEL
3-
from ..depset cimport DepSetAtom, DepSetString, DepSetUri
3+
from ..depset cimport DepSet
44
from . cimport Pkg
55
from ..error import PkgcraftError
66
from ..repo cimport EbuildRepo
@@ -76,73 +76,73 @@ cdef class EbuildPkg(Pkg):
7676
@property
7777
def depend(self):
7878
"""Get a package's DEPEND."""
79-
cdef const C.DepSetAtom *deps
79+
cdef C.DepSet *deps
8080
if self._depend is SENTINEL:
8181
deps = C.pkgcraft_ebuild_pkg_depend(self._ebuild_pkg)
82-
self._depend = None if deps is NULL else DepSetAtom.from_ptr(deps)
82+
self._depend = None if deps is NULL else DepSet.from_ptr(deps)
8383
return self._depend
8484

8585
@property
8686
def bdepend(self):
8787
"""Get a package's BDEPEND."""
88-
cdef const C.DepSetAtom *deps
88+
cdef C.DepSet *deps
8989
if self._bdepend is SENTINEL:
9090
deps = C.pkgcraft_ebuild_pkg_bdepend(self._ebuild_pkg)
91-
self._bdepend = None if deps is NULL else DepSetAtom.from_ptr(deps)
91+
self._bdepend = None if deps is NULL else DepSet.from_ptr(deps)
9292
return self._bdepend
9393

9494
@property
9595
def idepend(self):
9696
"""Get a package's IDEPEND."""
97-
cdef const C.DepSetAtom *deps
97+
cdef C.DepSet *deps
9898
if self._idepend is SENTINEL:
9999
deps = C.pkgcraft_ebuild_pkg_idepend(self._ebuild_pkg)
100-
self._idepend = None if deps is NULL else DepSetAtom.from_ptr(deps)
100+
self._idepend = None if deps is NULL else DepSet.from_ptr(deps)
101101
return self._idepend
102102

103103
@property
104104
def pdepend(self):
105105
"""Get a package's PDEPEND."""
106-
cdef const C.DepSetAtom *deps
106+
cdef C.DepSet *deps
107107
if self._pdepend is SENTINEL:
108108
deps = C.pkgcraft_ebuild_pkg_pdepend(self._ebuild_pkg)
109-
self._pdepend = None if deps is NULL else DepSetAtom.from_ptr(deps)
109+
self._pdepend = None if deps is NULL else DepSet.from_ptr(deps)
110110
return self._pdepend
111111

112112
@property
113113
def rdepend(self):
114114
"""Get a package's RDEPEND."""
115-
cdef const C.DepSetAtom *deps
115+
cdef C.DepSet *deps
116116
if self._rdepend is SENTINEL:
117117
deps = C.pkgcraft_ebuild_pkg_rdepend(self._ebuild_pkg)
118-
self._rdepend = None if deps is NULL else DepSetAtom.from_ptr(deps)
118+
self._rdepend = None if deps is NULL else DepSet.from_ptr(deps)
119119
return self._rdepend
120120

121121
@property
122122
def license(self):
123123
"""Get a package's LICENSE."""
124-
cdef const C.DepSetString *deps
124+
cdef C.DepSet *deps
125125
if self._license is SENTINEL:
126126
deps = C.pkgcraft_ebuild_pkg_license(self._ebuild_pkg)
127-
self._license = None if deps is NULL else DepSetString.from_ptr(deps)
127+
self._license = None if deps is NULL else DepSet.from_ptr(deps)
128128
return self._license
129129

130130
@property
131131
def required_use(self):
132132
"""Get a package's REQUIRED_USE."""
133-
cdef const C.DepSetString *deps
133+
cdef C.DepSet *deps
134134
if self._required_use is SENTINEL:
135135
deps = C.pkgcraft_ebuild_pkg_required_use(self._ebuild_pkg)
136-
self._required_use = None if deps is NULL else DepSetString.from_ptr(deps)
136+
self._required_use = None if deps is NULL else DepSet.from_ptr(deps)
137137
return self._required_use
138138

139139
@property
140140
def src_uri(self):
141141
"""Get a package's SRC_URI."""
142-
cdef const C.DepSetUri *deps
142+
cdef C.DepSet *deps
143143
if self._src_uri is SENTINEL:
144144
deps = C.pkgcraft_ebuild_pkg_src_uri(self._ebuild_pkg)
145-
self._src_uri = None if deps is NULL else DepSetUri.from_ptr(deps)
145+
self._src_uri = None if deps is NULL else DepSet.from_ptr(deps)
146146
return self._src_uri
147147

148148
@property

src/pkgcraft/pkgcraft_c.pxd

Lines changed: 16 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,8 @@ cdef extern from "pkgcraft.h":
2525
cdef struct Config:
2626
pass
2727

28-
# Opaque wrapper for DepSetAtom objects.
29-
cdef struct DepSetAtom:
30-
pass
31-
32-
# Opaque wrapper for DepSetString objects.
33-
cdef struct DepSetString:
34-
pass
35-
36-
# Opaque wrapper for DepSetUri objects.
37-
cdef struct DepSetUri:
28+
# Opaque wrapper for DepSet objects.
29+
cdef struct DepSet:
3830
pass
3931

4032
# EAPI object.
@@ -261,23 +253,17 @@ cdef extern from "pkgcraft.h":
261253
# The argument should be a UTF-8 string.
262254
Atom *pkgcraft_cpv(const char *s);
263255

264-
# Return the formatted string for a DepSetAtom object.
265-
#
266-
# # Safety
267-
# The argument must be a non-null DepSetAtom pointer.
268-
char *pkgcraft_depset_atom_str(const DepSetAtom *dep);
269-
270-
# Return the formatted string for a DepSetString object.
256+
# Free a DepSet.
271257
#
272258
# # Safety
273-
# The argument must be a non-null DepSetString pointer.
274-
char *pkgcraft_depset_string_str(const DepSetString *dep);
259+
# The argument must be a DepSet pointer or NULL.
260+
void pkgcraft_depset_free(DepSet *d);
275261

276-
# Return the formatted string for a DepSetUri object.
262+
# Return the formatted string for a DepSet object.
277263
#
278264
# # Safety
279-
# The argument must be a non-null DepSetUri pointer.
280-
char *pkgcraft_depset_uri_str(const DepSetUri *dep);
265+
# The argument must be a non-null DepSet pointer.
266+
char *pkgcraft_depset_str(DepSet *dep);
281267

282268
# Return an EAPI's identifier.
283269
#
@@ -345,15 +331,15 @@ cdef extern from "pkgcraft.h":
345331
#
346332
# # Safety
347333
# The argument must be a non-null EbuildPkg pointer.
348-
const DepSetAtom *pkgcraft_ebuild_pkg_bdepend(EbuildPkg *p);
334+
DepSet *pkgcraft_ebuild_pkg_bdepend(EbuildPkg *p);
349335

350336
# Return a package's DEPEND.
351337
#
352338
# Returns NULL on nonexistence.
353339
#
354340
# # Safety
355341
# The argument must be a non-null EbuildPkg pointer.
356-
const DepSetAtom *pkgcraft_ebuild_pkg_depend(EbuildPkg *p);
342+
DepSet *pkgcraft_ebuild_pkg_depend(EbuildPkg *p);
357343

358344
# Return a package's description.
359345
#
@@ -381,7 +367,7 @@ cdef extern from "pkgcraft.h":
381367
#
382368
# # Safety
383369
# The argument must be a non-null EbuildPkg pointer.
384-
const DepSetAtom *pkgcraft_ebuild_pkg_idepend(EbuildPkg *p);
370+
DepSet *pkgcraft_ebuild_pkg_idepend(EbuildPkg *p);
385371

386372
# Return a package's directly inherited eclasses.
387373
#
@@ -413,7 +399,7 @@ cdef extern from "pkgcraft.h":
413399
#
414400
# # Safety
415401
# The argument must be a non-null EbuildPkg pointer.
416-
const DepSetString *pkgcraft_ebuild_pkg_license(EbuildPkg *p);
402+
DepSet *pkgcraft_ebuild_pkg_license(EbuildPkg *p);
417403

418404
# Return a package's long description.
419405
#
@@ -448,23 +434,23 @@ cdef extern from "pkgcraft.h":
448434
#
449435
# # Safety
450436
# The argument must be a non-null EbuildPkg pointer.
451-
const DepSetAtom *pkgcraft_ebuild_pkg_pdepend(EbuildPkg *p);
437+
DepSet *pkgcraft_ebuild_pkg_pdepend(EbuildPkg *p);
452438

453439
# Return a package's RDEPEND.
454440
#
455441
# Returns NULL on nonexistence.
456442
#
457443
# # Safety
458444
# The argument must be a non-null EbuildPkg pointer.
459-
const DepSetAtom *pkgcraft_ebuild_pkg_rdepend(EbuildPkg *p);
445+
DepSet *pkgcraft_ebuild_pkg_rdepend(EbuildPkg *p);
460446

461447
# Return a package's REQUIRED_USE.
462448
#
463449
# Returns NULL on nonexistence.
464450
#
465451
# # Safety
466452
# The argument must be a non-null EbuildPkg pointer.
467-
const DepSetString *pkgcraft_ebuild_pkg_required_use(EbuildPkg *p);
453+
DepSet *pkgcraft_ebuild_pkg_required_use(EbuildPkg *p);
468454

469455
# Return a package's slot.
470456
#
@@ -478,7 +464,7 @@ cdef extern from "pkgcraft.h":
478464
#
479465
# # Safety
480466
# The argument must be a non-null EbuildPkg pointer.
481-
const DepSetUri *pkgcraft_ebuild_pkg_src_uri(EbuildPkg *p);
467+
DepSet *pkgcraft_ebuild_pkg_src_uri(EbuildPkg *p);
482468

483469
# Return a package's subslot.
484470
#

0 commit comments

Comments
 (0)