]> git.ipfire.org Git - pakfire.git/commitdiff
packages: Export build architectures in Python
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 29 Aug 2023 16:47:57 +0000 (16:47 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 29 Aug 2023 16:47:57 +0000 (16:47 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/package.c
src/_pakfire/util.c
src/_pakfire/util.h
src/libpakfire/libpakfire.sym
tests/python/package.py

index 0cc17b32422dc8c43126b0a6c425fd5c91077a20..153b253d43d06d26ec80d14dfadee3819ca8c825 100644 (file)
@@ -359,6 +359,29 @@ static PyObject* Package_get_size(PackageObject* self) {
        return PyLong_FromUnsignedLongLong(size);
 }
 
+static PyObject* Package_get_build_arches(PackageObject* self) {
+       PyObject* ret = NULL;
+
+       // Fetch all supported arches
+       char** build_arches = pakfire_package_get_strings(self->package, PAKFIRE_PKG_BUILD_ARCHES);
+       if (!build_arches) {
+               ret = PyList_New(0);
+               goto END;
+       }
+
+       // Make a new list
+       ret = PyUnicodeList_FromStringArray(build_arches);
+
+       // Cleanup
+       for (char** build_arch = build_arches; *build_arch; build_arch++) {
+               free(*build_arch);
+       }
+       free(build_arches);
+
+END:
+       return ret;
+}
+
 static PyObject* Package_get_buildhost(PackageObject* self) {
        const char* build_host = pakfire_package_get_string(self->package, PAKFIRE_PKG_BUILD_HOST);
        if (!build_host)
@@ -905,6 +928,13 @@ static struct PyGetSetDef Package_getsetters[] = {
                NULL,
                NULL
        },
+       {
+               "build_arches",
+               (getter)Package_get_build_arches,
+               NULL,
+               NULL,
+               NULL,
+       },
        {
                "source_package",
                (getter)Package_get_source_package,
index fb2b1f133a3a826d5217220e12b097c3cd9b0194..085ddcdd43f202bcb001b6f3f9d9cc6faa94c13a 100644 (file)
 #include "package.h"
 #include "util.h"
 
+PyObject* PyUnicodeList_FromStringArray(char** l) {
+       PyObject* list = NULL;
+       PyObject* s = NULL;
+       int r;
+
+       // Check inputs
+       if (!l)
+               return NULL;
+
+       list = PyList_New(0);
+       if (!list)
+               goto ERROR;
+
+       while (*l) {
+               s = PyUnicode_FromString(*l);
+               if (!s)
+                       goto ERROR;
+
+               r = PyList_Append(list, s);
+               if (r)
+                       goto ERROR;
+       }
+
+ERROR:
+       if (list)
+               Py_DECREF(list);
+
+       return NULL;
+}
+
 PyObject* PyList_FromPackageList(struct pakfire_packagelist* packagelist) {
        PyObject* list = PyList_New(0);
 
index adf9f651fcc0238159f5c35f47b1cb3bebaf0112..343ec0eb33ce7381e7c99949ad0064168268bade 100644 (file)
@@ -27,6 +27,8 @@
 #include <pakfire/filelist.h>
 #include <pakfire/packagelist.h>
 
+PyObject* PyUnicodeList_FromStringArray(char** l);
+
 PyObject* PyList_FromPackageList(struct pakfire_packagelist* packagelist);
 PyObject* PyList_FromFileList(struct pakfire_filelist* filelist);
 
index 6a75f063f3c88d7a1547ae98258f1a9c25ac846b..c2d1967fe8e564d56230fd8cdd96a094483c9c8c 100644 (file)
@@ -179,6 +179,7 @@ global:
        pakfire_package_get_reverse_requires;
        pakfire_package_get_size;
        pakfire_package_get_string;
+       pakfire_package_get_strings;
        pakfire_package_get_uuid;
        pakfire_package_id;
        pakfire_package_installcheck;
@@ -188,6 +189,7 @@ global:
        pakfire_package_set_num;
        pakfire_package_set_path;
        pakfire_package_set_string;
+       pakfire_package_set_strings;
        pakfire_package_set_uuid;
        pakfire_package_unref;
 
index 723a5fed833ef39c5b2f46a0c52e3b57f0105a2c..e6a433a73ccb111b5cf5fa4823f7240b61f293b7 100755 (executable)
@@ -83,6 +83,8 @@ class Test(unittest.TestCase):
                self.assertEqual(p.source_arch, "src")
                self.assertEqual(p.source_evr, "1.3-2.ipfire3")
 
+               self.assertEqual(p.build_arches, [])
+
                # Digest
                algo, digest = p.digest