]> git.ipfire.org Git - pakfire.git/commitdiff
pakfire: Read distro configuration from file
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 16 Apr 2021 15:06:12 +0000 (15:06 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 16 Apr 2021 15:06:12 +0000 (15:06 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
contrib/config/distros/ipfire3.conf
src/libpakfire/pakfire.c

index 25edb3b6ee88d16d23f6dc42058f36d139b23bdc..f0eb8c4aae32b18e9c5ca5c2303cfa67fad3ebe7 100644 (file)
@@ -2,14 +2,15 @@
 # Configuration of IPFire 3.
 
 [distro]
-name = IPFire
-release = 3
-slogan = An Open Source Firewall Solution.
+name           = IPFire
+id                     = ipfire
+version_id     = 3
+codename       =
 
-vendor = IPFire Project
-contact = ipfire-3@ipfire.org
+vendor         = IPFire Project
+slogan         = An Open Source Firewall Solution
 
-source_dl = https://source.ipfire.org/source-3.x/
+source_dl      = https://source.ipfire.org/source-3.x/
 
 [repo:stable]
 description = IPFire 3 - Stable repository.
index dbedffc0fde70bf47b2fc8ebdf28bfa66f67d315..4792305a9a47446a2c58a45e14399fbcd0090eff 100644 (file)
@@ -86,8 +86,9 @@ struct _Pakfire {
                char pretty_name[256];
                char name[64];
                char id[32];
-               char version[32];
-               char version_id[32];
+               char version[64];
+               char version_codename[32];
+               char version_id[8];
        } distro;
 };
 
@@ -396,6 +397,45 @@ static int pakfire_safety_checks(Pakfire pakfire) {
        return 0;
 }
 
+static int pakfire_config_import_distro(Pakfire pakfire) {
+       // Nothing to do if there is no distro section
+       if (!pakfire_config_has_section(pakfire->config, "distro"))
+               return 0;
+
+       // Name
+       const char* name = pakfire_config_get(pakfire->config, "distro", "name", NULL);
+       if (name)
+               pakfire_string_set(pakfire->distro.name, name);
+
+       // ID
+       const char* id = pakfire_config_get(pakfire->config, "distro", "id", NULL);
+       if (id)
+               pakfire_string_set(pakfire->distro.id, id);
+
+       // Version ID
+       const char* version_id = pakfire_config_get(pakfire->config, "distro", "version_id", NULL);
+       if (version_id)
+               pakfire_string_set(pakfire->distro.version_id, version_id);
+
+       // Codename
+       const char* codename = pakfire_config_get(pakfire->config, "distro", "codename", NULL);
+       if (codename)
+               pakfire_string_set(pakfire->distro.version_codename, codename);
+
+       // Fill in version
+       if (*pakfire->distro.version_codename)
+               pakfire_string_format(pakfire->distro.version, "%s (%s)",
+                       pakfire->distro.version_id, pakfire->distro.version_codename);
+       else
+               pakfire_string_set(pakfire->distro.version, pakfire->distro.version_id);
+
+       // Fill in pretty name
+       pakfire_string_format(pakfire->distro.pretty_name, "%s %s",
+               pakfire->distro.name, pakfire->distro.version);
+
+       return 0;
+}
+
 static int pakfire_read_config(Pakfire pakfire, const char* path) {
        char* default_path = NULL;
 
@@ -424,6 +464,11 @@ static int pakfire_read_config(Pakfire pakfire, const char* path) {
        if (r)
                goto ERROR;
 
+       // Import distro configuration
+       r = pakfire_config_import_distro(pakfire);
+       if (r)
+               goto ERROR;
+
 ERROR:
        fclose(f);
 
@@ -484,6 +529,8 @@ static int pakfire_read_os_release(Pakfire pakfire) {
                        r = pakfire_string_set(pakfire->distro.id, val);
                else if (strcmp(key, "VERSION") == 0)
                        r = pakfire_string_set(pakfire->distro.version, val);
+               else if (strcmp(key, "VERSION_CODENAME") == 0)
+                       r = pakfire_string_set(pakfire->distro.version_codename, val);
                else if (strcmp(key, "VERSION_ID") == 0)
                        r = pakfire_string_set(pakfire->distro.version_id, val);
                else