Remove distinction of widget's version 46/23646/2
authorJose Bollo <jose.bollo@iot.bzh>
Fri, 24 Jan 2020 13:49:23 +0000 (14:49 +0100)
committerJosé Bollo <jose.bollo@iot.bzh>
Fri, 14 Feb 2020 09:04:56 +0000 (09:04 +0000)
This removes the distinction between the different
versions of a widget. The boolean CMAKE option
DISTINCT_VERSIONS allows to switch between the two
possibilities:

 DISTINCT_VERSIONS=OFF (default)

    Widget installed in {afm_appdir}/{id}
    Ids of applications have no version part: {id}

 DISTINCT_VERSIONS=ON (legacy, old default)

    Widget installed in {afm_appdir}/{id}/{ver}
    Ids of applications have no version part: {id}@{ver}

Bug-AGL: SPEC-2538

Change-Id: I7cb54d4b296b740c553be8a627e66175107e5a4b
Signed-off-by: Jose Bollo <jose.bollo@iot.bzh>
CMakeLists.txt
src/wgt-info.c
src/wgtpkg-install.c
src/wgtpkg-uninstall.c

index 06086e5..c1d80ce 100644 (file)
@@ -30,15 +30,16 @@ set(AGLVERSION "8.0.0" CACHE STRING "Version of AGL")
 set(PROJECT_VERSION ${AGLVERSION} CACHE STRING "Version of the project can override AGLVERSION")
 set(PROJECT_URL "https://gerrit.automotivelinux.org/gerrit/gitweb?p=src/app-framework-main.git;a=summary")
 
-set(USE_LIBZIP     ON  CACHE BOOL "should try to use libzip?")
-set(USE_SIMULATION OFF CACHE BOOL "if set simulates security manager and smack")
-set(USE_SDK        OFF CACHE BOOL "if set, avoids installating system runtime files")
-set(ALLOW_NO_SIGNATURE OFF CACHE BOOL "if set, widgets without signature are accepted")
+option(DISTINCT_VERSIONS  "Should the version of application be distinguished" OFF)
+option(USE_LIBZIP         "Should try to use libzip?" ON)
+option(USE_SIMULATION     "If set simulates security manager and smack" OFF)
+option(USE_SDK            "If set, avoids installating system runtime files" OFF)
+option(ALLOW_NO_SIGNATURE "If set, widgets without signature are accepted" OFF)
 
-set(SIMULATE_SECMGR OFF CACHE BOOL "if set, the security manager is simulated")
-set(SIMULATE_SMACK  OFF CACHE BOOL "if set, the smack environment is simulated")
+option(SIMULATE_SECMGR    "If set, the security manager is simulated" OFF)
+option(SIMULATE_SMACK     "If set, the smack environment is simulated"  OFF)
 
-set(LEGACY_USER_DAEMON OFF CACHE BOOL "compile and install the legacy afm-user-daemon")
+option(LEGACY_USER_DAEMON "compile and install the legacy afm-user-daemon" OFF)
 
 set(afm_name                "afm" CACHE STRING "Name for application framework user")
 set(afm_confdir             "${CMAKE_INSTALL_FULL_SYSCONFDIR}/${afm_name}" CACHE STRING "Directory for configuration files")
@@ -78,7 +79,11 @@ if(ALLOW_NO_SIGNATURE)
 else(ALLOW_NO_SIGNATURE)
        add_definitions(-DDEFAULT_ALLOW_NO_SIGNATURE=0)
 endif(ALLOW_NO_SIGNATURE)
-
+if(DISTINCT_VERSIONS)
+       add_definitions(-DDISTINCT_VERSIONS=1)
+else(DISTINCT_VERSIONS)
+       add_definitions(-DDISTINCT_VERSIONS=0)
+endif(DISTINCT_VERSIONS)
 
 add_subdirectory(src)
 add_subdirectory(conf)
index 3b7cb36..ade3830 100644 (file)
@@ -102,6 +102,7 @@ static char *mkver(char *version)
 
 static char *mkidaver(char *id, char *ver)
 {
+#if DISTINCT_VERSIONS
        size_t lid, lver;
        char *r;
        if (id && ver) {
@@ -117,6 +118,9 @@ static char *mkidaver(char *id, char *ver)
                }
        }
        return NULL;
+#else
+       return strdup(id);
+#endif
 }
 
 static void make_lowercase(char *s)
index 57c17b8..386d70b 100644 (file)
@@ -398,7 +398,11 @@ static int get_target_directory(char target[PATH_MAX], const char *root, const s
 {
        int rc;
 
+#if DISTINCT_VERSIONS
        rc = snprintf(target, PATH_MAX, "%s/%s/%s", root, desc->id, desc->ver);
+#else
+       rc = snprintf(target, PATH_MAX, "%s/%s", root, desc->id);
+#endif
        if (rc < PATH_MAX)
                rc = 0;
        else {
index bb7739f..dba667c 100644 (file)
 /* uninstall the widget of idaver */
 int uninstall_widget(const char *idaver, const char *root)
 {
+#if DISTINCT_VERSIONS
        char *id;
        char *ver;
-       char path[PATH_MAX];
        const char *at;
+#endif
+       char path[PATH_MAX];
        int rc, rc2;
        struct unitconf uconf;
        struct wgt_info *ifo;
@@ -47,6 +49,7 @@ int uninstall_widget(const char *idaver, const char *root)
        NOTICE("-- UNINSTALLING widget of id %s from %s --", idaver, root);
 
        /* find the last '@' of the id */
+#if DISTINCT_VERSIONS
        at = strrchr(idaver, '@');
        if (at == NULL) {
                ERROR("bad widget id '%s', no @", idaver);
@@ -58,6 +61,10 @@ int uninstall_widget(const char *idaver, const char *root)
 
        /* compute the path */
        rc = snprintf(path, sizeof path, "%s/%s/%s", root, id, ver);
+#else
+       rc = snprintf(path, sizeof path, "%s/%s", root, idaver);
+#endif
+
        if (rc >= (int)sizeof path) {
                ERROR("bad widget id '%s', too long", idaver);
                errno = EINVAL;
@@ -91,6 +98,7 @@ int uninstall_widget(const char *idaver, const char *root)
        if (rc < 0 && errno != ENOENT)
                ERROR("can't remove '%s': %m", path);
 
+#if DISTINCT_VERSIONS
        /* removes the parent directory if empty */
        rc2 = snprintf(path, sizeof path, "%s/%s", root, id);
        assert(rc2 < (int)sizeof path);
@@ -107,6 +115,9 @@ int uninstall_widget(const char *idaver, const char *root)
         * uninstall it for the security-manager
         */
        rc2 = secmgr_init(id);
+#else
+       rc2 = secmgr_init(idaver);
+#endif
        if (rc2) {
                ERROR("can't init security manager context");
                return -1;