summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Golle2021-03-10 23:39:48 +0000
committerDaniel Golle2021-03-11 00:16:46 +0000
commitd71856a4f137dc9fb890c5e777790e2c51fde921 (patch)
tree312c117daae0a5e8bf45fb73c3992a17027c1558
parent9bbc7eae91edc3dbb020e2a50d51d9a3fbbf31ca (diff)
downloadopkg-lede-d71856a4f137dc9fb890c5e777790e2c51fde921.tar.gz
pkg: pass-through ABIVersion to status file
This allows removing it from package names if needed without storing the SourceName for each and every package, which is mostly redundant information. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
-rw-r--r--libopkg/pkg.c10
-rw-r--r--libopkg/pkg.h1
-rw-r--r--libopkg/pkg_parse.c4
-rw-r--r--libopkg/pkg_parse.h1
4 files changed, 14 insertions, 2 deletions
diff --git a/libopkg/pkg.c b/libopkg/pkg.c
index f68ce0c..5111068 100644
--- a/libopkg/pkg.c
+++ b/libopkg/pkg.c
@@ -479,6 +479,8 @@ int pkg_merge(pkg_t * oldpkg, pkg_t * newpkg)
pkg_set_string(oldpkg, PKG_PRIORITY, pkg_get_string(newpkg, PKG_PRIORITY));
if (!pkg_get_string(oldpkg, PKG_SOURCE))
pkg_set_string(oldpkg, PKG_SOURCE, pkg_get_string(newpkg, PKG_SOURCE));
+ if (!pkg_get_string(oldpkg, PKG_ABIVERSION))
+ pkg_set_string(oldpkg, PKG_ABIVERSION, pkg_get_string(newpkg, PKG_ABIVERSION));
if (!pkg_get_ptr(oldpkg, PKG_CONFFILES)) {
pkg_set_ptr(oldpkg, PKG_CONFFILES, pkg_get_ptr(newpkg, PKG_CONFFILES));
@@ -650,7 +652,12 @@ void pkg_formatted_field(FILE * fp, pkg_t * pkg, const char *field)
switch (field[0]) {
case 'a':
case 'A':
- if (strcasecmp(field, "Alternatives") == 0) {
+ if (strcasecmp(field, "ABIVersion") == 0) {
+ p = pkg_get_string(pkg, PKG_ABIVERSION);
+ if (p) {
+ fprintf(fp, "ABIVersion: %s\n", p);
+ }
+ } else if (strcasecmp(field, "Alternatives") == 0) {
struct pkg_alternatives *pkg_alts = pkg_get_ptr(pkg, PKG_ALTERNATIVES);
if (pkg_alts && pkg_alts->nalts > 0) {
@@ -954,6 +961,7 @@ void pkg_print_status(pkg_t * pkg, FILE * file)
}
pkg_formatted_field(file, pkg, "Package");
+ pkg_formatted_field(file, pkg, "ABIVersion");
pkg_formatted_field(file, pkg, "Version");
pkg_formatted_field(file, pkg, "Depends");
pkg_formatted_field(file, pkg, "Recommends");
diff --git a/libopkg/pkg.h b/libopkg/pkg.h
index bc0e030..c9bfa7e 100644
--- a/libopkg/pkg.h
+++ b/libopkg/pkg.h
@@ -101,6 +101,7 @@ enum pkg_fields {
PKG_CONFLICTS,
PKG_CONFFILES,
PKG_ALTERNATIVES,
+ PKG_ABIVERSION,
};
struct abstract_pkg {
diff --git a/libopkg/pkg_parse.c b/libopkg/pkg_parse.c
index 0baa4db..c9e0cdf 100644
--- a/libopkg/pkg_parse.c
+++ b/libopkg/pkg_parse.c
@@ -208,7 +208,9 @@ int pkg_parse_line(void *ptr, char *line, uint mask)
switch (*line) {
case 'A':
- if ((mask & PFM_ALTERNATIVES) && is_field("Alternatives", line))
+ if ((mask & PFM_ABIVERSION) && is_field("ABIVersion", line))
+ pkg_set_string(pkg, PKG_ABIVERSION, line + strlen("ABIVersion") + 1);
+ else if ((mask & PFM_ALTERNATIVES) && is_field("Alternatives", line))
parse_alternatives(pkg, line + strlen("Alternatives") + 1);
else if ((mask & PFM_ARCHITECTURE) && is_field("Architecture", line))
parse_architecture(pkg, line + strlen("Architecture") + 1);
diff --git a/libopkg/pkg_parse.h b/libopkg/pkg_parse.h
index d1f901a..e27eadd 100644
--- a/libopkg/pkg_parse.h
+++ b/libopkg/pkg_parse.h
@@ -54,6 +54,7 @@ int pkg_parse_line(void *ptr, char *line, uint mask);
#define PFM_SUGGESTS (1 << 25)
#define PFM_TAGS (1 << 26)
#define PFM_VERSION (1 << 27)
+#define PFM_ABIVERSION (1 << 28)
#define PFM_ALL (~(uint)0)