Skip to content

Commit ebe272d

Browse files
committed
cbuild: add "renames" template field
Unlike `provides`, this can be used to reliably rename packages including accounting for any potential automatic subpackages.
1 parent 5740601 commit ebe272d

File tree

6 files changed

+29
-22
lines changed

6 files changed

+29
-22
lines changed

Packaging.md

+5
Original file line numberDiff line numberDiff line change
@@ -965,6 +965,11 @@ Keep in mind that default values may be overridden by build styles.
965965
library scanning is automatic; but sometimes libraries provide either a
966966
non-conforming `SONAME` which the scanner does not pick up, or the
967967
scanner is disabled explicitly.
968+
* `renames` *(list)* A list of old names for the package. This is like
969+
`provides` except no explicit version is required (it always takes on
970+
the version of the package by default, but an explicit version can be
971+
specified if needed) and they always make it into autosplit packages
972+
with the appropriate suffix. This ensures a clean rename upgrade path.
968973
* `replaces_priority` *(int)* When used with `replaces`, this specifies
969974
which of the packages gets to keep the files (i.e. the higher-priority
970975
package will keep them). Defaults to 0.

main/kmod/template.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,13 @@ def post_install(self):
3535

3636
@subpackage("kmod-devel")
3737
def _(self):
38-
# transitional
39-
self.provides = [self.with_pkgver("libkmod-devel")]
38+
self.renames = ["libkmod-devel"]
4039

4140
return self.default_devel()
4241

4342

4443
@subpackage("kmod-libs")
4544
def _(self):
46-
# transitional
47-
self.provides = [self.with_pkgver("libkmod")]
45+
self.renames = ["libkmod"]
4846

4947
return self.default_libs()

main/zlib-ng-compat-devel-static

-1
This file was deleted.

main/zlib-ng-compat/template.py

+3-15
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,8 @@
1313
hostmakedepends = ["pkgconf"]
1414
# we need to explicitly provide higher ver or apk won't upgrade it,
1515
# even with provider_priority set which is strange but it is how it is
16-
provides = [
17-
f"so:libz.so.1={_cver}.99",
18-
f"zlib={_cver}-r99",
19-
]
20-
replaces = [f"zlib<{_cver}-r99"]
16+
provides = [f"so:libz.so.1={_cver}.99"]
17+
renames = [f"zlib={_cver}-r99"]
2118
pkgdesc = "Implementation of zlib compression library"
2219
license = "Zlib"
2320
url = "https://github.com/zlib-ng/zlib-ng"
@@ -32,17 +29,8 @@
3229
configure_env["CHOST"] = self.profile().triplet
3330

3431

35-
@subpackage("zlib-ng-compat-devel-static")
36-
def _(self):
37-
self.provides = [f"zlib-devel-static={_cver}-r99"]
38-
self.replaces = [f"zlib-devel-static<{_cver}-r99"]
39-
40-
return ["usr/lib/*.a"]
41-
42-
4332
@subpackage("zlib-ng-compat-devel")
4433
def _(self):
45-
self.provides = [f"zlib-devel={_cver}-r99"]
46-
self.replaces = [f"zlib-devel<{_cver}-r99"]
34+
self.renames = [f"zlib-devel={_cver}-r99"]
4735

4836
return self.default_devel()

src/cbuild/apk/generate.py

+7
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,13 @@ def _get_new_deps(pkg, origin):
131131
# explicit provides
132132
provides += pkg.provides
133133

134+
# renames are provides
135+
for ren in pkg.renames:
136+
if ren.find("=") < 0:
137+
provides.append(f"{ren}={pkg.pkgver}-r{pkg.pkgrel}")
138+
else:
139+
provides.append(ren)
140+
134141
# shlib provides
135142
if hasattr(pkg, "aso_provides"):
136143
provides += map(

src/cbuild/core/template.py

+12-2
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,7 @@ def find(self, path, pattern, files=False):
407407
# other package lists + related
408408
("provides", [], list, False, True, False),
409409
("provider_priority", 0, int, False, True, True),
410+
("renames", [], list, False, True, False),
410411
("replaces", [], list, False, True, False),
411412
("replaces_priority", 0, int, False, True, True),
412413
("install_if", [], list, False, True, False),
@@ -507,6 +508,7 @@ def find(self, path, pattern, files=False):
507508
("go_check_tags", False),
508509
("provides", True),
509510
("provider_priority", True),
511+
("renames", True),
510512
("replaces", True),
511513
("replaces_priority", True),
512514
("install_if", True),
@@ -2330,16 +2332,24 @@ def __init__(
23302332
else:
23312333
setattr(self, fl, copy_of_dval(dval))
23322334

2333-
# set up options/replaces if automatic, also setup paths
2335+
# set up options/replaces/renames if automatic, also setup paths
23342336
# basically for each parent replace, we also replace matching
23352337
# autopkg, e.g. foo replaces bar == foo-man replaces bar-man
23362338
if auto:
2339+
asfx = self.pkgname.removeprefix(parent.pkgname)
23372340
self.options = parent.options
23382341
for rep in parent.replaces:
23392342
sn, sv, sop = autil.split_pkg_name(rep)
23402343
if sn:
2341-
asfx = self.pkgname.removeprefix(parent.pkgname)
23422344
self.replaces.append(f"{sn}{asfx}{sop}{sv}")
2345+
# renames are a bit simpler to deal with
2346+
self.renames = []
2347+
for ren in parent.renames:
2348+
eq = ren.find("=")
2349+
if eq < 0:
2350+
self.renames.append(f"{ren}{asfx}")
2351+
else:
2352+
self.renames.append(f"{ren[0:eq]}{asfx}{ren[eq:]}")
23432353
self.setup_paths()
23442354

23452355
ddeps = []

0 commit comments

Comments
 (0)