From a855d14583b2ac2629dfac696fea788826bacc4d Mon Sep 17 00:00:00 2001 From: Jose Bollo Date: Fri, 24 Jan 2020 14:49:23 +0100 Subject: [PATCH] Remove distinction of widget's version 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 --- CMakeLists.txt | 21 +++++++++++++-------- src/wgt-info.c | 4 ++++ src/wgtpkg-install.c | 4 ++++ src/wgtpkg-uninstall.c | 13 ++++++++++++- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 06086e5..c1d80ce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) diff --git a/src/wgt-info.c b/src/wgt-info.c index 3b7cb36..ade3830 100644 --- a/src/wgt-info.c +++ b/src/wgt-info.c @@ -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) diff --git a/src/wgtpkg-install.c b/src/wgtpkg-install.c index 57c17b8..386d70b 100644 --- a/src/wgtpkg-install.c +++ b/src/wgtpkg-install.c @@ -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 { diff --git a/src/wgtpkg-uninstall.c b/src/wgtpkg-uninstall.c index bb7739f..dba667c 100644 --- a/src/wgtpkg-uninstall.c +++ b/src/wgtpkg-uninstall.c @@ -36,10 +36,12 @@ /* 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; -- 2.16.6