Date   

Re: [OE-core] [PATCH 1/3] opkg: add --ignore-recommends flag

Scott Rifenbark <srifenbark@...>
 



On Thu, Feb 7, 2019 at 9:44 AM Alejandro Del Castillo <alejandro.delcastillo@...> wrote:


On 2/7/19 11:36 AM, Scott Rifenbark wrote:
> This change looks like it impacts documentation (i.e.
> https://yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#var-BAD_RECOMMENDATIONS
> When will this change go into effect?

I believe it doesn't. It is refactoring the opkg implementation to
leverage a new opkg feature (--add-ignore-recommends), which is a more
robust implementation. Should be transparent to users.

Thank you for the clarification... I thought it might be a user option.


> On Thu, Feb 7, 2019 at 7:58 AM Alejandro del Castillo
> <alejandro.delcastillo@... <mailto:alejandro.delcastillo@...>> wrote:
>
>     To be used for BAD_RECOMMENDATIONS feature.
>
>     Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@...
>     <mailto:alejandro.delcastillo@...>>
>     ---
>       ...pkg-add-add-ignore-recommends-option.patch | 259 ++++++++++++++++++
>       meta/recipes-devtools/opkg/opkg_0.4.0.bb
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg-5F0.4.0.bb&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=JvgzuAyAoVrkeSZAdWZUuIsFWQ8okApbCk1iiF13CDc&e=>
>          |   1 +
>       2 files changed, 260 insertions(+)
>       create mode 100644
>     meta/recipes-devtools/opkg/opkg/0001-libopkg-add-add-ignore-recommends-option.patch
>
>     diff --git
>     a/meta/recipes-devtools/opkg/opkg/0001-libopkg-add-add-ignore-recommends-option.patch
>     b/meta/recipes-devtools/opkg/opkg/0001-libopkg-add-add-ignore-recommends-option.patch
>     new file mode 100644
>     index 0000000000..47d1b3c37e
>     --- /dev/null
>     +++
>     b/meta/recipes-devtools/opkg/opkg/0001-libopkg-add-add-ignore-recommends-option.patch
>     @@ -0,0 +1,259 @@
>     +From 64aa98646a17c299bf37af2975b98daf5d7d30b4 Mon Sep 17 00:00:00 2001
>     +From: Alejandro del Castillo <alejandro.delcastillo@...
>     <mailto:alejandro.delcastillo@...>>
>     +Date: Thu, 31 Jan 2019 18:16:08 -0600
>     +Subject: [PATCH] libopkg: add --add-ignore-recommends option
>     +
>     +Add option to ignore specific recommended packages. On the libsolv
>     +backed, this feature will only work on libsolv version > 0.7.2 [1].
>     +
>     +[1]
>     https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_openSUSE_libsolv_issues_254&d=DwIBaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=GObNHzFJpWpf_PripIrf-K2RhsktYdAUEieAJexXOKw&s=3G-meChUqClFggFPqsrAxIZBfLnRKIHm62Uuy1X6nQQ&e=
>     +
>     +Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@...
>     <mailto:alejandro.delcastillo@...>>
>     +
>     +Upstream-Status: Accepted
>     +---
>     + libopkg/opkg_conf.c                           |  2 +
>     + libopkg/opkg_conf.h                           |  1 +
>     + .../solvers/internal/pkg_depends_internal.c   |  3 +-
>     + libopkg/solvers/libsolv/opkg_solver_libsolv.c | 21 ++++++-
>     + man/opkg.1.in
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg.1.in&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=8yIWRVT6JV0YnkHzVgeo8pAkiFPM4xz8y9APvxobmhY&e=>
>                                     |  3 +
>     + src/opkg.c                                    |  6 ++
>     + tests/Makefile                                |  1 +
>     + tests/core/43_add_ignore_recommends.py        | 62 +++++++++++++++++++
>     + 8 files changed, 97 insertions(+), 2 deletions(-)
>     + create mode 100755 tests/core/43_add_ignore_recommends.py
>     +
>     +diff --git a/libopkg/opkg_conf.c b/libopkg/opkg_conf.c
>     +index 06880a1..f2330cd 100644
>     +--- a/libopkg/opkg_conf.c
>     ++++ b/libopkg/opkg_conf.c
>     +@@ -597,6 +597,7 @@ int opkg_conf_init(void)
>     +     pkg_dest_list_init(&opkg_config->tmp_dest_list);
>     +     nv_pair_list_init(&opkg_config->arch_list);
>     +     str_list_init(&opkg_config->exclude_list);
>     ++    str_list_init(&opkg_config->ignore_recommends_list);
>     +
>     +     return 0;
>     + }
>     +@@ -938,6 +939,7 @@ void opkg_conf_deinit(void)
>     +     pkg_dest_list_deinit(&opkg_config->pkg_dest_list);
>     +     nv_pair_list_deinit(&opkg_config->arch_list);
>     +     str_list_deinit(&opkg_config->exclude_list);
>     ++    str_list_deinit(&opkg_config->ignore_recommends_list);
>     +
>     +     if (opkg_config->verbosity >= DEBUG) {
>     +         hash_print_stats(&opkg_config->pkg_hash);
>     +diff --git a/libopkg/opkg_conf.h b/libopkg/opkg_conf.h
>     +index eb56a29..316c500 100644
>     +--- a/libopkg/opkg_conf.h
>     ++++ b/libopkg/opkg_conf.h
>     +@@ -61,6 +61,7 @@ typedef struct opkg_conf {
>     +     pkg_dest_list_t tmp_dest_list;
>     +     nv_pair_list_t arch_list;
>     +     str_list_t exclude_list;
>     ++    str_list_t ignore_recommends_list;
>     +
>     +     int restrict_to_default_dest;
>     +     pkg_dest_t *default_dest;
>     +diff --git a/libopkg/solvers/internal/pkg_depends_internal.c
>     b/libopkg/solvers/internal/pkg_depends_internal.c
>     +index cd56d84..5deee70 100644
>     +--- a/libopkg/solvers/internal/pkg_depends_internal.c
>     ++++ b/libopkg/solvers/internal/pkg_depends_internal.c
>     +@@ -228,7 +228,8 @@ int
>     pkg_hash_fetch_unsatisfied_dependencies(pkg_t *pkg,
>     +                             || compound_depend->type == SUGGEST)
>     +                         && (satisfying_pkg->state_want == SW_DEINSTALL
>     +                             || satisfying_pkg->state_want == SW_PURGE
>     +-                            || opkg_config->no_install_recommends);
>     ++                            || opkg_config->no_install_recommends
>     ++                            ||
>     str_list_contains(&opkg_config->ignore_recommends_list,
>     satisfying_pkg->name));
>     +                 if (ignore) {
>     +                     opkg_msg(NOTICE,
>     +                              "%s: ignoring recommendation for "
>     +diff --git a/libopkg/solvers/libsolv/opkg_solver_libsolv.c
>     b/libopkg/solvers/libsolv/opkg_solver_libsolv.c
>     +index 2b27e3a..403e07b 100644
>     +--- a/libopkg/solvers/libsolv/opkg_solver_libsolv.c
>     ++++ b/libopkg/solvers/libsolv/opkg_solver_libsolv.c
>     +@@ -484,6 +484,7 @@ static void pkg2solvable(pkg_t *pkg, Solvable
>     *solvable_out)
>     + static void populate_installed_repo(libsolv_solver_t *libsolv_solver)
>     + {
>     +     int i;
>     ++    Id what;
>     +
>     +     pkg_vec_t *installed_pkgs = pkg_vec_alloc();
>     +
>     +@@ -507,6 +508,15 @@ static void
>     populate_installed_repo(libsolv_solver_t *libsolv_solver)
>     +         /* set solvable attributes */
>     +         pkg2solvable(pkg, solvable);
>     +
>     ++        /* if the package is in ignore-recommends-list, disfavor
>     installation */
>     ++        if
>     (str_list_contains(&opkg_config->ignore_recommends_list, pkg->name)) {
>     ++            opkg_message(NOTICE, "Disfavor package: %s\n",
>     ++                         pkg->name);
>     ++            what = pool_str2id(libsolv_solver->pool, pkg->name, 1);
>     ++            queue_push2(&libsolv_solver->solver_jobs,
>     SOLVER_SOLVABLE_NAME
>     ++                        | SOLVER_DISFAVOR, what);
>     ++        }
>     ++
>     +         /* if the package is not autoinstalled, mark it as user
>     installed */
>     +         if (!pkg->auto_installed)
>     +             queue_push2(&libsolv_solver->solver_jobs, SOLVER_SOLVABLE
>     +@@ -539,7 +549,7 @@ static void
>     populate_available_repos(libsolv_solver_t *libsolv_solver)
>     + {
>     +     int i;
>     +     Solvable *solvable;
>     +-    Id solvable_id;
>     ++    Id solvable_id, what;
>     +
>     +     pkg_vec_t *available_pkgs = pkg_vec_alloc();
>     +
>     +@@ -608,6 +618,15 @@ static void
>     populate_available_repos(libsolv_solver_t *libsolv_solver)
>     +         solvable = pool_id2solvable(libsolv_solver->pool,
>     solvable_id);
>     +         pkg2solvable(pkg, solvable);
>     +
>     ++        /* if the package is in ignore-recommends-list, disfavor
>     installation */
>     ++        if
>     (str_list_contains(&opkg_config->ignore_recommends_list, pkg->name)) {
>     ++            opkg_message(NOTICE, "Disfavor package: %s\n",
>     ++                         pkg->name);
>     ++            what = pool_str2id(libsolv_solver->pool, pkg->name, 1);
>     ++            queue_push2(&libsolv_solver->solver_jobs,
>     SOLVER_SOLVABLE_NAME
>     ++                        | SOLVER_DISFAVOR, what);
>     ++        }
>     ++
>     +         /* if the --force-depends option is specified make
>     dependencies weak */
>     +         if (opkg_config->force_depends)
>     +             queue_push2(&libsolv_solver->solver_jobs, SOLVER_SOLVABLE
>     +diff --git a/man/opkg.1.in
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg.1.in&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=8yIWRVT6JV0YnkHzVgeo8pAkiFPM4xz8y9APvxobmhY&e=>
>     b/man/opkg.1.in
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg.1.in&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=8yIWRVT6JV0YnkHzVgeo8pAkiFPM4xz8y9APvxobmhY&e=>
>     +index 27fa9c1..f192c3b 100644
>     +--- a/man/opkg.1.in
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg.1.in&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=8yIWRVT6JV0YnkHzVgeo8pAkiFPM4xz8y9APvxobmhY&e=>
>     ++++ b/man/opkg.1.in
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg.1.in&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=8yIWRVT6JV0YnkHzVgeo8pAkiFPM4xz8y9APvxobmhY&e=>
>     +@@ -162,6 +162,9 @@ priority \fIprio\fP. Lower priorities take
>     precedence.
>     + \fB\--add-exclude <\fIname\fP>\fR
>     + Register package to be excluded from install
>     + .TP
>     ++\fB\--add-ignore-recommends <\fIname\fP>\fR
>     ++Register package to be ignored as a recomendee
>     ++.TP
>     + \fB\--prefer-arch-to-version\fR
>     + Use the architecture priority package rather than the higher version
>     + one if more than one candidate is found.
>     +diff --git a/src/opkg.c b/src/opkg.c
>     +index 650e278..3c93a3b 100644
>     +--- a/src/opkg.c
>     ++++ b/src/opkg.c
>     +@@ -51,6 +51,7 @@ enum {
>     +     ARGS_OPT_ADD_DEST,
>     +     ARGS_OPT_SIZE,
>     +     ARGS_OPT_ADD_EXCLUDE,
>     ++    ARGS_OPT_ADD_IGNORE_RECOMMENDS,
>     +     ARGS_OPT_NOACTION,
>     +     ARGS_OPT_DOWNLOAD_ONLY,
>     +     ARGS_OPT_NODEPS,
>     +@@ -112,6 +113,7 @@ static struct option long_options[] = {
>     +     {"add-dest", 1, 0, ARGS_OPT_ADD_DEST},
>     +     {"size", 0, 0, ARGS_OPT_SIZE},
>     +     {"add-exclude", 1, 0, ARGS_OPT_ADD_EXCLUDE},
>     ++    {"add-ignore-recommends", 1, 0, ARGS_OPT_ADD_IGNORE_RECOMMENDS},
>     +     {"test", 0, 0, ARGS_OPT_NOACTION},
>     +     {"tmp-dir", 1, 0, 't'},
>     +     {"tmp_dir", 1, 0, 't'},
>     +@@ -234,6 +236,9 @@ static int args_parse(int argc, char *argv[])
>     +         case ARGS_OPT_ADD_EXCLUDE:
>     +             str_list_append(&opkg_config->exclude_list, optarg);
>     +             break;
>     ++        case ARGS_OPT_ADD_IGNORE_RECOMMENDS:
>     ++            str_list_append(&opkg_config->ignore_recommends_list,
>     optarg);
>     ++            break;
>     +         case ARGS_OPT_SIZE:
>     +             opkg_config->size = 1;
>     +             break;
>     +@@ -343,6 +348,7 @@ static void usage()
>     +     printf("\t--add-dest <name>:<path>        Register destination
>     with given path\n");
>     +     printf("\t--add-arch <arch>:<prio>        Register
>     architecture with given priority\n");
>     +     printf("\t--add-exclude <name>            Register package to
>     be excluded from install\n");
>     ++    printf("\t--add-ignore-recommends <name>  Register package to
>     be ignored as a recomendee\n");
>     +     printf("\t--prefer-arch-to-version        Use the architecture
>     priority package rather\n");
>     +     printf("\t                                than the higher
>     version one if more\n");
>     +     printf("\t                                than one candidate
>     is found.\n");
>     +diff --git a/tests/Makefile b/tests/Makefile
>     +index 8e5be08..799816d 100644
>     +--- a/tests/Makefile
>     ++++ b/tests/Makefile
>     +@@ -42,6 +42,7 @@ REGRESSION_TESTS := core/01_install.py \
>     +                   core/40_arch.py \
>     +                   core/41_info_fields.py \
>     +                   core/42_info_description.py \
>     ++                  core/43_add_ignore_recommends.py \
>     +                   regress/issue26.py \
>     +                   regress/issue31.py \
>     +                   regress/issue32.py \
>     +diff --git a/tests/core/43_add_ignore_recommends.py
>     b/tests/core/43_add_ignore_recommends.py
>     +new file mode 100755
>     +index 0000000..7da0096
>     +--- /dev/null
>     ++++ b/tests/core/43_add_ignore_recommends.py
>     +@@ -0,0 +1,62 @@
>     ++#! /usr/bin/env python3
>     ++#
>     ++# Create package 'a' (1.0) which Recommends 'c'.
>     ++# Install 'a' with --add-ignore-recommends 'c'.
>     ++# Check that only 'a' (1.0) is installed.
>     ++# Create package 'b' which Depends on 'c'.
>     ++# Install 'a' & 'b', with --add-ignore-recommends 'c'.
>     ++# Verify that 'a','b' & 'c' are installed.
>     ++# Uninstall 'b' & 'c'.
>     ++# Create package 'a' (2.0), which Recommends 'c'.
>     ++# Upgrade 'a' with --add-ignore-recommends 'c'
>     ++# Verify that only 'a' (2.0) is installed
>     ++#
>     ++
>     ++import os
>     ++import opk, cfg, opkgcl
>     ++
>     ++opk.regress_init()
>     ++o = opk.OpkGroup()
>     ++
>     ++o.add(Package='a', Recommends='c', Version='1.0')
>     ++o.add(Package='b', Depends='c')
>     ++o.add(Package='c')
>     ++o.write_opk()
>     ++o.write_list()
>     ++
>     ++opkgcl.update()
>     ++
>     ++opkgcl.install('a', '--add-ignore-recommends c')
>     ++
>     ++if not opkgcl.is_installed('a'):
>     ++      opk.fail("Package 'a' installed but reports as not installed.")
>     ++
>     ++if opkgcl.is_installed('c'):
>     ++      opk.xfail("[libsolv<0.7.3] Package 'c' should not have been
>     installed since it was in --add-ignore-recommends.")
>     ++
>     ++opkgcl.remove('a')
>     ++opkgcl.install('a b', '--add-ignore-recommends c')
>     ++
>     ++if not opkgcl.is_installed('a'):
>     ++      opk.fail("Package 'a' installed but reports as not installed.")
>     ++
>     ++if not opkgcl.is_installed('b'):
>     ++      opk.fail("Package 'b' installed but reports as not installed.")
>     ++
>     ++if not opkgcl.is_installed('c'):
>     ++      opk.fail("Package 'c' should have been installed since 'b'
>     depends on it.")
>     ++
>     ++opkgcl.remove('b c', '--force-depends')
>     ++o.add(Package='a', Recommends='c', Version='2.0')
>     ++o.write_opk()
>     ++o.write_list()
>     ++
>     ++opkgcl.update()
>     ++
>     ++opkgcl.upgrade('a', '--add-ignore-recommends c')
>     ++
>     ++if not opkgcl.is_installed('a', '2.0'):
>     ++      opk.fail("Package 'a (2.0)' installed but reports as not
>     installed.")
>     ++
>     ++if opkgcl.is_installed('c'):
>     ++      opk.fail("Package 'c' should not have been installed since
>     it was in --add-ignore-recommends.")
>     +--
>     +2.20.1
>     +
>     diff --git a/meta/recipes-devtools/opkg/opkg_0.4.0.bb
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg-5F0.4.0.bb&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=JvgzuAyAoVrkeSZAdWZUuIsFWQ8okApbCk1iiF13CDc&e=>
>     b/meta/recipes-devtools/opkg/opkg_0.4.0.bb
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg-5F0.4.0.bb&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=JvgzuAyAoVrkeSZAdWZUuIsFWQ8okApbCk1iiF13CDc&e=>
>     index 9b7cf3f596..a2329d3e71 100644
>     --- a/meta/recipes-devtools/opkg/opkg_0.4.0.bb
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg-5F0.4.0.bb&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=JvgzuAyAoVrkeSZAdWZUuIsFWQ8okApbCk1iiF13CDc&e=>
>     +++ b/meta/recipes-devtools/opkg/opkg_0.4.0.bb
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg-5F0.4.0.bb&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=JvgzuAyAoVrkeSZAdWZUuIsFWQ8okApbCk1iiF13CDc&e=>
>     @@ -14,6 +14,7 @@ PE = "1"
>       SRC_URI =
>     "http://downloads.yoctoproject.org/releases/${BPN}/${BPN}-${PV}.tar.gz
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__downloads.yoctoproject.org_releases_-24-257BBPN-257D_-24-257BBPN-257D-2D-24-257BPV-257D.tar.gz&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=YLvorPjD5Y4WlqpYdjRMCkzwnh_cz-C6op19u5O23b8&e=>
>     \
>                  file://opkg.conf \
>                 
>     file://0001-opkg_conf-create-opkg.lock-in-run-instead-of-var-run.patch \
>     +           file://0001-libopkg-add-add-ignore-recommends-option.patch \
>       "
>
>       SRC_URI[md5sum] = "ae51d95fee599bb4dce08453529158f5"
>     --
>     2.20.1
>
>     --
>     _______________________________________________
>     Openembedded-core mailing list
>     Openembedded-core@...
>     <mailto:Openembedded-core@...>
>     http://lists.openembedded.org/mailman/listinfo/openembedded-core
>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.openembedded.org_mailman_listinfo_openembedded-2Dcore&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=UHPegBWeyh1LTyIdp2oai1-Ecy-s_l8In1Kk14OFS6Q&e=>
>

--
Cheers,

Alejandro


Re: [OE-core] [PATCH 1/3] opkg: add --ignore-recommends flag

Alejandro Del Castillo <alejandro.delcastillo@...>
 

On 2/7/19 11:36 AM, Scott Rifenbark wrote:
This change looks like it impacts documentation (i.e.
https://yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#var-BAD_RECOMMENDATIONS.
When will this change go into effect?
I believe it doesn't. It is refactoring the opkg implementation to
leverage a new opkg feature (--add-ignore-recommends), which is a more
robust implementation. Should be transparent to users.

On Thu, Feb 7, 2019 at 7:58 AM Alejandro del Castillo
<alejandro.delcastillo@ni.com <mailto:alejandro.delcastillo@ni.com>> wrote:

To be used for BAD_RECOMMENDATIONS feature.

Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com
<mailto:alejandro.delcastillo@ni.com>>
---
 ...pkg-add-add-ignore-recommends-option.patch | 259 ++++++++++++++++++
 meta/recipes-devtools/opkg/opkg_0.4.0.bb
<https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg-5F0.4.0.bb&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=JvgzuAyAoVrkeSZAdWZUuIsFWQ8okApbCk1iiF13CDc&e=>
    |   1 +
 2 files changed, 260 insertions(+)
 create mode 100644
meta/recipes-devtools/opkg/opkg/0001-libopkg-add-add-ignore-recommends-option.patch

diff --git
a/meta/recipes-devtools/opkg/opkg/0001-libopkg-add-add-ignore-recommends-option.patch
b/meta/recipes-devtools/opkg/opkg/0001-libopkg-add-add-ignore-recommends-option.patch
new file mode 100644
index 0000000000..47d1b3c37e
--- /dev/null
+++
b/meta/recipes-devtools/opkg/opkg/0001-libopkg-add-add-ignore-recommends-option.patch
@@ -0,0 +1,259 @@
+From 64aa98646a17c299bf37af2975b98daf5d7d30b4 Mon Sep 17 00:00:00 2001
+From: Alejandro del Castillo <alejandro.delcastillo@ni.com
<mailto:alejandro.delcastillo@ni.com>>
+Date: Thu, 31 Jan 2019 18:16:08 -0600
+Subject: [PATCH] libopkg: add --add-ignore-recommends option
+
+Add option to ignore specific recommended packages. On the libsolv
+backed, this feature will only work on libsolv version > 0.7.2 [1].
+
+[1]
https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_openSUSE_libsolv_issues_254&d=DwIBaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=GObNHzFJpWpf_PripIrf-K2RhsktYdAUEieAJexXOKw&s=3G-meChUqClFggFPqsrAxIZBfLnRKIHm62Uuy1X6nQQ&e=
+
+Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com
<mailto:alejandro.delcastillo@ni.com>>
+
+Upstream-Status: Accepted
+---
+ libopkg/opkg_conf.c                           |  2 +
+ libopkg/opkg_conf.h                           |  1 +
+ .../solvers/internal/pkg_depends_internal.c   |  3 +-
+ libopkg/solvers/libsolv/opkg_solver_libsolv.c | 21 ++++++-
+ man/opkg.1.in
<https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg.1.in&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=8yIWRVT6JV0YnkHzVgeo8pAkiFPM4xz8y9APvxobmhY&e=>
                               |  3 +
+ src/opkg.c                                    |  6 ++
+ tests/Makefile                                |  1 +
+ tests/core/43_add_ignore_recommends.py        | 62 +++++++++++++++++++
+ 8 files changed, 97 insertions(+), 2 deletions(-)
+ create mode 100755 tests/core/43_add_ignore_recommends.py
+
+diff --git a/libopkg/opkg_conf.c b/libopkg/opkg_conf.c
+index 06880a1..f2330cd 100644
+--- a/libopkg/opkg_conf.c
++++ b/libopkg/opkg_conf.c
+@@ -597,6 +597,7 @@ int opkg_conf_init(void)
+     pkg_dest_list_init(&opkg_config->tmp_dest_list);
+     nv_pair_list_init(&opkg_config->arch_list);
+     str_list_init(&opkg_config->exclude_list);
++    str_list_init(&opkg_config->ignore_recommends_list);
+
+     return 0;
+ }
+@@ -938,6 +939,7 @@ void opkg_conf_deinit(void)
+     pkg_dest_list_deinit(&opkg_config->pkg_dest_list);
+     nv_pair_list_deinit(&opkg_config->arch_list);
+     str_list_deinit(&opkg_config->exclude_list);
++    str_list_deinit(&opkg_config->ignore_recommends_list);
+
+     if (opkg_config->verbosity >= DEBUG) {
+         hash_print_stats(&opkg_config->pkg_hash);
+diff --git a/libopkg/opkg_conf.h b/libopkg/opkg_conf.h
+index eb56a29..316c500 100644
+--- a/libopkg/opkg_conf.h
++++ b/libopkg/opkg_conf.h
+@@ -61,6 +61,7 @@ typedef struct opkg_conf {
+     pkg_dest_list_t tmp_dest_list;
+     nv_pair_list_t arch_list;
+     str_list_t exclude_list;
++    str_list_t ignore_recommends_list;
+
+     int restrict_to_default_dest;
+     pkg_dest_t *default_dest;
+diff --git a/libopkg/solvers/internal/pkg_depends_internal.c
b/libopkg/solvers/internal/pkg_depends_internal.c
+index cd56d84..5deee70 100644
+--- a/libopkg/solvers/internal/pkg_depends_internal.c
++++ b/libopkg/solvers/internal/pkg_depends_internal.c
+@@ -228,7 +228,8 @@ int
pkg_hash_fetch_unsatisfied_dependencies(pkg_t *pkg,
+                             || compound_depend->type == SUGGEST)
+                         && (satisfying_pkg->state_want == SW_DEINSTALL
+                             || satisfying_pkg->state_want == SW_PURGE
+-                            || opkg_config->no_install_recommends);
++                            || opkg_config->no_install_recommends
++                            ||
str_list_contains(&opkg_config->ignore_recommends_list,
satisfying_pkg->name));
+                 if (ignore) {
+                     opkg_msg(NOTICE,
+                              "%s: ignoring recommendation for "
+diff --git a/libopkg/solvers/libsolv/opkg_solver_libsolv.c
b/libopkg/solvers/libsolv/opkg_solver_libsolv.c
+index 2b27e3a..403e07b 100644
+--- a/libopkg/solvers/libsolv/opkg_solver_libsolv.c
++++ b/libopkg/solvers/libsolv/opkg_solver_libsolv.c
+@@ -484,6 +484,7 @@ static void pkg2solvable(pkg_t *pkg, Solvable
*solvable_out)
+ static void populate_installed_repo(libsolv_solver_t *libsolv_solver)
+ {
+     int i;
++    Id what;
+
+     pkg_vec_t *installed_pkgs = pkg_vec_alloc();
+
+@@ -507,6 +508,15 @@ static void
populate_installed_repo(libsolv_solver_t *libsolv_solver)
+         /* set solvable attributes */
+         pkg2solvable(pkg, solvable);
+
++        /* if the package is in ignore-recommends-list, disfavor
installation */
++        if
(str_list_contains(&opkg_config->ignore_recommends_list, pkg->name)) {
++            opkg_message(NOTICE, "Disfavor package: %s\n",
++                         pkg->name);
++            what = pool_str2id(libsolv_solver->pool, pkg->name, 1);
++            queue_push2(&libsolv_solver->solver_jobs,
SOLVER_SOLVABLE_NAME
++                        | SOLVER_DISFAVOR, what);
++        }
++
+         /* if the package is not autoinstalled, mark it as user
installed */
+         if (!pkg->auto_installed)
+             queue_push2(&libsolv_solver->solver_jobs, SOLVER_SOLVABLE
+@@ -539,7 +549,7 @@ static void
populate_available_repos(libsolv_solver_t *libsolv_solver)
+ {
+     int i;
+     Solvable *solvable;
+-    Id solvable_id;
++    Id solvable_id, what;
+
+     pkg_vec_t *available_pkgs = pkg_vec_alloc();
+
+@@ -608,6 +618,15 @@ static void
populate_available_repos(libsolv_solver_t *libsolv_solver)
+         solvable = pool_id2solvable(libsolv_solver->pool,
solvable_id);
+         pkg2solvable(pkg, solvable);
+
++        /* if the package is in ignore-recommends-list, disfavor
installation */
++        if
(str_list_contains(&opkg_config->ignore_recommends_list, pkg->name)) {
++            opkg_message(NOTICE, "Disfavor package: %s\n",
++                         pkg->name);
++            what = pool_str2id(libsolv_solver->pool, pkg->name, 1);
++            queue_push2(&libsolv_solver->solver_jobs,
SOLVER_SOLVABLE_NAME
++                        | SOLVER_DISFAVOR, what);
++        }
++
+         /* if the --force-depends option is specified make
dependencies weak */
+         if (opkg_config->force_depends)
+             queue_push2(&libsolv_solver->solver_jobs, SOLVER_SOLVABLE
+diff --git a/man/opkg.1.in
<https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg.1.in&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=8yIWRVT6JV0YnkHzVgeo8pAkiFPM4xz8y9APvxobmhY&e=>
b/man/opkg.1.in
<https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg.1.in&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=8yIWRVT6JV0YnkHzVgeo8pAkiFPM4xz8y9APvxobmhY&e=>
+index 27fa9c1..f192c3b 100644
+--- a/man/opkg.1.in
<https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg.1.in&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=8yIWRVT6JV0YnkHzVgeo8pAkiFPM4xz8y9APvxobmhY&e=>
++++ b/man/opkg.1.in
<https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg.1.in&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=8yIWRVT6JV0YnkHzVgeo8pAkiFPM4xz8y9APvxobmhY&e=>
+@@ -162,6 +162,9 @@ priority \fIprio\fP. Lower priorities take
precedence.
+ \fB\--add-exclude <\fIname\fP>\fR
+ Register package to be excluded from install
+ .TP
++\fB\--add-ignore-recommends <\fIname\fP>\fR
++Register package to be ignored as a recomendee
++.TP
+ \fB\--prefer-arch-to-version\fR
+ Use the architecture priority package rather than the higher version
+ one if more than one candidate is found.
+diff --git a/src/opkg.c b/src/opkg.c
+index 650e278..3c93a3b 100644
+--- a/src/opkg.c
++++ b/src/opkg.c
+@@ -51,6 +51,7 @@ enum {
+     ARGS_OPT_ADD_DEST,
+     ARGS_OPT_SIZE,
+     ARGS_OPT_ADD_EXCLUDE,
++    ARGS_OPT_ADD_IGNORE_RECOMMENDS,
+     ARGS_OPT_NOACTION,
+     ARGS_OPT_DOWNLOAD_ONLY,
+     ARGS_OPT_NODEPS,
+@@ -112,6 +113,7 @@ static struct option long_options[] = {
+     {"add-dest", 1, 0, ARGS_OPT_ADD_DEST},
+     {"size", 0, 0, ARGS_OPT_SIZE},
+     {"add-exclude", 1, 0, ARGS_OPT_ADD_EXCLUDE},
++    {"add-ignore-recommends", 1, 0, ARGS_OPT_ADD_IGNORE_RECOMMENDS},
+     {"test", 0, 0, ARGS_OPT_NOACTION},
+     {"tmp-dir", 1, 0, 't'},
+     {"tmp_dir", 1, 0, 't'},
+@@ -234,6 +236,9 @@ static int args_parse(int argc, char *argv[])
+         case ARGS_OPT_ADD_EXCLUDE:
+             str_list_append(&opkg_config->exclude_list, optarg);
+             break;
++        case ARGS_OPT_ADD_IGNORE_RECOMMENDS:
++            str_list_append(&opkg_config->ignore_recommends_list,
optarg);
++            break;
+         case ARGS_OPT_SIZE:
+             opkg_config->size = 1;
+             break;
+@@ -343,6 +348,7 @@ static void usage()
+     printf("\t--add-dest <name>:<path>        Register destination
with given path\n");
+     printf("\t--add-arch <arch>:<prio>        Register
architecture with given priority\n");
+     printf("\t--add-exclude <name>            Register package to
be excluded from install\n");
++    printf("\t--add-ignore-recommends <name>  Register package to
be ignored as a recomendee\n");
+     printf("\t--prefer-arch-to-version        Use the architecture
priority package rather\n");
+     printf("\t                                than the higher
version one if more\n");
+     printf("\t                                than one candidate
is found.\n");
+diff --git a/tests/Makefile b/tests/Makefile
+index 8e5be08..799816d 100644
+--- a/tests/Makefile
++++ b/tests/Makefile
+@@ -42,6 +42,7 @@ REGRESSION_TESTS := core/01_install.py \
+                   core/40_arch.py \
+                   core/41_info_fields.py \
+                   core/42_info_description.py \
++                  core/43_add_ignore_recommends.py \
+                   regress/issue26.py \
+                   regress/issue31.py \
+                   regress/issue32.py \
+diff --git a/tests/core/43_add_ignore_recommends.py
b/tests/core/43_add_ignore_recommends.py
+new file mode 100755
+index 0000000..7da0096
+--- /dev/null
++++ b/tests/core/43_add_ignore_recommends.py
+@@ -0,0 +1,62 @@
++#! /usr/bin/env python3
++#
++# Create package 'a' (1.0) which Recommends 'c'.
++# Install 'a' with --add-ignore-recommends 'c'.
++# Check that only 'a' (1.0) is installed.
++# Create package 'b' which Depends on 'c'.
++# Install 'a' & 'b', with --add-ignore-recommends 'c'.
++# Verify that 'a','b' & 'c' are installed.
++# Uninstall 'b' & 'c'.
++# Create package 'a' (2.0), which Recommends 'c'.
++# Upgrade 'a' with --add-ignore-recommends 'c'
++# Verify that only 'a' (2.0) is installed
++#
++
++import os
++import opk, cfg, opkgcl
++
++opk.regress_init()
++o = opk.OpkGroup()
++
++o.add(Package='a', Recommends='c', Version='1.0')
++o.add(Package='b', Depends='c')
++o.add(Package='c')
++o.write_opk()
++o.write_list()
++
++opkgcl.update()
++
++opkgcl.install('a', '--add-ignore-recommends c')
++
++if not opkgcl.is_installed('a'):
++      opk.fail("Package 'a' installed but reports as not installed.")
++
++if opkgcl.is_installed('c'):
++      opk.xfail("[libsolv<0.7.3] Package 'c' should not have been
installed since it was in --add-ignore-recommends.")
++
++opkgcl.remove('a')
++opkgcl.install('a b', '--add-ignore-recommends c')
++
++if not opkgcl.is_installed('a'):
++      opk.fail("Package 'a' installed but reports as not installed.")
++
++if not opkgcl.is_installed('b'):
++      opk.fail("Package 'b' installed but reports as not installed.")
++
++if not opkgcl.is_installed('c'):
++      opk.fail("Package 'c' should have been installed since 'b'
depends on it.")
++
++opkgcl.remove('b c', '--force-depends')
++o.add(Package='a', Recommends='c', Version='2.0')
++o.write_opk()
++o.write_list()
++
++opkgcl.update()
++
++opkgcl.upgrade('a', '--add-ignore-recommends c')
++
++if not opkgcl.is_installed('a', '2.0'):
++      opk.fail("Package 'a (2.0)' installed but reports as not
installed.")
++
++if opkgcl.is_installed('c'):
++      opk.fail("Package 'c' should not have been installed since
it was in --add-ignore-recommends.")
+--
+2.20.1
+
diff --git a/meta/recipes-devtools/opkg/opkg_0.4.0.bb
<https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg-5F0.4.0.bb&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=JvgzuAyAoVrkeSZAdWZUuIsFWQ8okApbCk1iiF13CDc&e=>
b/meta/recipes-devtools/opkg/opkg_0.4.0.bb
<https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg-5F0.4.0.bb&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=JvgzuAyAoVrkeSZAdWZUuIsFWQ8okApbCk1iiF13CDc&e=>
index 9b7cf3f596..a2329d3e71 100644
--- a/meta/recipes-devtools/opkg/opkg_0.4.0.bb
<https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg-5F0.4.0.bb&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=JvgzuAyAoVrkeSZAdWZUuIsFWQ8okApbCk1iiF13CDc&e=>
+++ b/meta/recipes-devtools/opkg/opkg_0.4.0.bb
<https://urldefense.proofpoint.com/v2/url?u=http-3A__opkg-5F0.4.0.bb&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=JvgzuAyAoVrkeSZAdWZUuIsFWQ8okApbCk1iiF13CDc&e=>
@@ -14,6 +14,7 @@ PE = "1"
 SRC_URI =
"http://downloads.yoctoproject.org/releases/${BPN}/${BPN}-${PV}.tar.gz
<https://urldefense.proofpoint.com/v2/url?u=http-3A__downloads.yoctoproject.org_releases_-24-257BBPN-257D_-24-257BBPN-257D-2D-24-257BPV-257D.tar.gz&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=YLvorPjD5Y4WlqpYdjRMCkzwnh_cz-C6op19u5O23b8&e=>
\
            file://opkg.conf \

file://0001-opkg_conf-create-opkg.lock-in-run-instead-of-var-run.patch \
+           file://0001-libopkg-add-add-ignore-recommends-option.patch \
 "

 SRC_URI[md5sum] = "ae51d95fee599bb4dce08453529158f5"
--
2.20.1

--
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
<mailto:Openembedded-core@lists.openembedded.org>
http://lists.openembedded.org/mailman/listinfo/openembedded-core
<https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.openembedded.org_mailman_listinfo_openembedded-2Dcore&d=DwMFaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=8hd_9vew95YIf_VIv2QHNu2EFnc3G2WZ5KA2Upnv5j8&s=UHPegBWeyh1LTyIdp2oai1-Ecy-s_l8In1Kk14OFS6Q&e=>
--
Cheers,

Alejandro


Re: [OE-core] [PATCH 1/3] opkg: add --ignore-recommends flag

Scott Rifenbark <srifenbark@...>
 

This change looks like it impacts documentation (i.e. https://yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#var-BAD_RECOMMENDATIONS).  When will this change go into effect?

Scott


On Thu, Feb 7, 2019 at 7:58 AM Alejandro del Castillo <alejandro.delcastillo@...> wrote:
To be used for BAD_RECOMMENDATIONS feature.

Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@...>
---
 ...pkg-add-add-ignore-recommends-option.patch | 259 ++++++++++++++++++
 meta/recipes-devtools/opkg/opkg_0.4.0.bb      |   1 +
 2 files changed, 260 insertions(+)
 create mode 100644 meta/recipes-devtools/opkg/opkg/0001-libopkg-add-add-ignore-recommends-option.patch

diff --git a/meta/recipes-devtools/opkg/opkg/0001-libopkg-add-add-ignore-recommends-option.patch b/meta/recipes-devtools/opkg/opkg/0001-libopkg-add-add-ignore-recommends-option.patch
new file mode 100644
index 0000000000..47d1b3c37e
--- /dev/null
+++ b/meta/recipes-devtools/opkg/opkg/0001-libopkg-add-add-ignore-recommends-option.patch
@@ -0,0 +1,259 @@
+From 64aa98646a17c299bf37af2975b98daf5d7d30b4 Mon Sep 17 00:00:00 2001
+From: Alejandro del Castillo <alejandro.delcastillo@...>
+Date: Thu, 31 Jan 2019 18:16:08 -0600
+Subject: [PATCH] libopkg: add --add-ignore-recommends option
+
+Add option to ignore specific recommended packages. On the libsolv
+backed, this feature will only work on libsolv version > 0.7.2 [1].
+
+[1] https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_openSUSE_libsolv_issues_254&d=DwIBaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=wNcrL2akRn6jfxhHaKavUrJB_C9JAMXtynjLd8ZzgXQ&m=GObNHzFJpWpf_PripIrf-K2RhsktYdAUEieAJexXOKw&s=3G-meChUqClFggFPqsrAxIZBfLnRKIHm62Uuy1X6nQQ&e=
+
+Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@...>
+
+Upstream-Status: Accepted
+---
+ libopkg/opkg_conf.c                           |  2 +
+ libopkg/opkg_conf.h                           |  1 +
+ .../solvers/internal/pkg_depends_internal.c   |  3 +-
+ libopkg/solvers/libsolv/opkg_solver_libsolv.c | 21 ++++++-
+ man/opkg.1.in                                 |  3 +
+ src/opkg.c                                    |  6 ++
+ tests/Makefile                                |  1 +
+ tests/core/43_add_ignore_recommends.py        | 62 +++++++++++++++++++
+ 8 files changed, 97 insertions(+), 2 deletions(-)
+ create mode 100755 tests/core/43_add_ignore_recommends.py
+
+diff --git a/libopkg/opkg_conf.c b/libopkg/opkg_conf.c
+index 06880a1..f2330cd 100644
+--- a/libopkg/opkg_conf.c
++++ b/libopkg/opkg_conf.c
+@@ -597,6 +597,7 @@ int opkg_conf_init(void)
+     pkg_dest_list_init(&opkg_config->tmp_dest_list);
+     nv_pair_list_init(&opkg_config->arch_list);
+     str_list_init(&opkg_config->exclude_list);
++    str_list_init(&opkg_config->ignore_recommends_list);
+
+     return 0;
+ }
+@@ -938,6 +939,7 @@ void opkg_conf_deinit(void)
+     pkg_dest_list_deinit(&opkg_config->pkg_dest_list);
+     nv_pair_list_deinit(&opkg_config->arch_list);
+     str_list_deinit(&opkg_config->exclude_list);
++    str_list_deinit(&opkg_config->ignore_recommends_list);
+
+     if (opkg_config->verbosity >= DEBUG) {
+         hash_print_stats(&opkg_config->pkg_hash);
+diff --git a/libopkg/opkg_conf.h b/libopkg/opkg_conf.h
+index eb56a29..316c500 100644
+--- a/libopkg/opkg_conf.h
++++ b/libopkg/opkg_conf.h
+@@ -61,6 +61,7 @@ typedef struct opkg_conf {
+     pkg_dest_list_t tmp_dest_list;
+     nv_pair_list_t arch_list;
+     str_list_t exclude_list;
++    str_list_t ignore_recommends_list;
+
+     int restrict_to_default_dest;
+     pkg_dest_t *default_dest;
+diff --git a/libopkg/solvers/internal/pkg_depends_internal.c b/libopkg/solvers/internal/pkg_depends_internal.c
+index cd56d84..5deee70 100644
+--- a/libopkg/solvers/internal/pkg_depends_internal.c
++++ b/libopkg/solvers/internal/pkg_depends_internal.c
+@@ -228,7 +228,8 @@ int pkg_hash_fetch_unsatisfied_dependencies(pkg_t *pkg,
+                             || compound_depend->type == SUGGEST)
+                         && (satisfying_pkg->state_want == SW_DEINSTALL
+                             || satisfying_pkg->state_want == SW_PURGE
+-                            || opkg_config->no_install_recommends);
++                            || opkg_config->no_install_recommends
++                            || str_list_contains(&opkg_config->ignore_recommends_list, satisfying_pkg->name));
+                 if (ignore) {
+                     opkg_msg(NOTICE,
+                              "%s: ignoring recommendation for "
+diff --git a/libopkg/solvers/libsolv/opkg_solver_libsolv.c b/libopkg/solvers/libsolv/opkg_solver_libsolv.c
+index 2b27e3a..403e07b 100644
+--- a/libopkg/solvers/libsolv/opkg_solver_libsolv.c
++++ b/libopkg/solvers/libsolv/opkg_solver_libsolv.c
+@@ -484,6 +484,7 @@ static void pkg2solvable(pkg_t *pkg, Solvable *solvable_out)
+ static void populate_installed_repo(libsolv_solver_t *libsolv_solver)
+ {
+     int i;
++    Id what;
+
+     pkg_vec_t *installed_pkgs = pkg_vec_alloc();
+
+@@ -507,6 +508,15 @@ static void populate_installed_repo(libsolv_solver_t *libsolv_solver)
+         /* set solvable attributes */
+         pkg2solvable(pkg, solvable);
+
++        /* if the package is in ignore-recommends-list, disfavor installation */
++        if (str_list_contains(&opkg_config->ignore_recommends_list, pkg->name)) {
++            opkg_message(NOTICE, "Disfavor package: %s\n",
++                         pkg->name);
++            what = pool_str2id(libsolv_solver->pool, pkg->name, 1);
++            queue_push2(&libsolv_solver->solver_jobs, SOLVER_SOLVABLE_NAME
++                        | SOLVER_DISFAVOR, what);
++        }
++
+         /* if the package is not autoinstalled, mark it as user installed */
+         if (!pkg->auto_installed)
+             queue_push2(&libsolv_solver->solver_jobs, SOLVER_SOLVABLE
+@@ -539,7 +549,7 @@ static void populate_available_repos(libsolv_solver_t *libsolv_solver)
+ {
+     int i;
+     Solvable *solvable;
+-    Id solvable_id;
++    Id solvable_id, what;
+
+     pkg_vec_t *available_pkgs = pkg_vec_alloc();
+
+@@ -608,6 +618,15 @@ static void populate_available_repos(libsolv_solver_t *libsolv_solver)
+         solvable = pool_id2solvable(libsolv_solver->pool, solvable_id);
+         pkg2solvable(pkg, solvable);
+
++        /* if the package is in ignore-recommends-list, disfavor installation */
++        if (str_list_contains(&opkg_config->ignore_recommends_list, pkg->name)) {
++            opkg_message(NOTICE, "Disfavor package: %s\n",
++                         pkg->name);
++            what = pool_str2id(libsolv_solver->pool, pkg->name, 1);
++            queue_push2(&libsolv_solver->solver_jobs, SOLVER_SOLVABLE_NAME
++                        | SOLVER_DISFAVOR, what);
++        }
++
+         /* if the --force-depends option is specified make dependencies weak */
+         if (opkg_config->force_depends)
+             queue_push2(&libsolv_solver->solver_jobs, SOLVER_SOLVABLE
+diff --git a/man/opkg.1.in b/man/opkg.1.in
+index 27fa9c1..f192c3b 100644
+--- a/man/opkg.1.in
++++ b/man/opkg.1.in
+@@ -162,6 +162,9 @@ priority \fIprio\fP. Lower priorities take precedence.
+ \fB\--add-exclude <\fIname\fP>\fR
+ Register package to be excluded from install
+ .TP
++\fB\--add-ignore-recommends <\fIname\fP>\fR
++Register package to be ignored as a recomendee
++.TP
+ \fB\--prefer-arch-to-version\fR
+ Use the architecture priority package rather than the higher version
+ one if more than one candidate is found.
+diff --git a/src/opkg.c b/src/opkg.c
+index 650e278..3c93a3b 100644
+--- a/src/opkg.c
++++ b/src/opkg.c
+@@ -51,6 +51,7 @@ enum {
+     ARGS_OPT_ADD_DEST,
+     ARGS_OPT_SIZE,
+     ARGS_OPT_ADD_EXCLUDE,
++    ARGS_OPT_ADD_IGNORE_RECOMMENDS,
+     ARGS_OPT_NOACTION,
+     ARGS_OPT_DOWNLOAD_ONLY,
+     ARGS_OPT_NODEPS,
+@@ -112,6 +113,7 @@ static struct option long_options[] = {
+     {"add-dest", 1, 0, ARGS_OPT_ADD_DEST},
+     {"size", 0, 0, ARGS_OPT_SIZE},
+     {"add-exclude", 1, 0, ARGS_OPT_ADD_EXCLUDE},
++    {"add-ignore-recommends", 1, 0, ARGS_OPT_ADD_IGNORE_RECOMMENDS},
+     {"test", 0, 0, ARGS_OPT_NOACTION},
+     {"tmp-dir", 1, 0, 't'},
+     {"tmp_dir", 1, 0, 't'},
+@@ -234,6 +236,9 @@ static int args_parse(int argc, char *argv[])
+         case ARGS_OPT_ADD_EXCLUDE:
+             str_list_append(&opkg_config->exclude_list, optarg);
+             break;
++        case ARGS_OPT_ADD_IGNORE_RECOMMENDS:
++            str_list_append(&opkg_config->ignore_recommends_list, optarg);
++            break;
+         case ARGS_OPT_SIZE:
+             opkg_config->size = 1;
+             break;
+@@ -343,6 +348,7 @@ static void usage()
+     printf("\t--add-dest <name>:<path>        Register destination with given path\n");
+     printf("\t--add-arch <arch>:<prio>        Register architecture with given priority\n");
+     printf("\t--add-exclude <name>            Register package to be excluded from install\n");
++    printf("\t--add-ignore-recommends <name>  Register package to be ignored as a recomendee\n");
+     printf("\t--prefer-arch-to-version        Use the architecture priority package rather\n");
+     printf("\t                                than the higher version one if more\n");
+     printf("\t                                than one candidate is found.\n");
+diff --git a/tests/Makefile b/tests/Makefile
+index 8e5be08..799816d 100644
+--- a/tests/Makefile
++++ b/tests/Makefile
+@@ -42,6 +42,7 @@ REGRESSION_TESTS := core/01_install.py \
+                   core/40_arch.py \
+                   core/41_info_fields.py \
+                   core/42_info_description.py \
++                  core/43_add_ignore_recommends.py \
+                   regress/issue26.py \
+                   regress/issue31.py \
+                   regress/issue32.py \
+diff --git a/tests/core/43_add_ignore_recommends.py b/tests/core/43_add_ignore_recommends.py
+new file mode 100755
+index 0000000..7da0096
+--- /dev/null
++++ b/tests/core/43_add_ignore_recommends.py
+@@ -0,0 +1,62 @@
++#! /usr/bin/env python3
++#
++# Create package 'a' (1.0) which Recommends 'c'.
++# Install 'a' with --add-ignore-recommends 'c'.
++# Check that only 'a' (1.0) is installed.
++# Create package 'b' which Depends on 'c'.
++# Install 'a' & 'b', with --add-ignore-recommends 'c'.
++# Verify that 'a','b' & 'c' are installed.
++# Uninstall 'b' & 'c'.
++# Create package 'a' (2.0), which Recommends 'c'.
++# Upgrade 'a' with --add-ignore-recommends 'c'
++# Verify that only 'a' (2.0) is installed
++#
++
++import os
++import opk, cfg, opkgcl
++
++opk.regress_init()
++o = opk.OpkGroup()
++
++o.add(Package='a', Recommends='c', Version='1.0')
++o.add(Package='b', Depends='c')
++o.add(Package='c')
++o.write_opk()
++o.write_list()
++
++opkgcl.update()
++
++opkgcl.install('a', '--add-ignore-recommends c')
++
++if not opkgcl.is_installed('a'):
++      opk.fail("Package 'a' installed but reports as not installed.")
++
++if opkgcl.is_installed('c'):
++      opk.xfail("[libsolv<0.7.3] Package 'c' should not have been installed since it was in --add-ignore-recommends.")
++
++opkgcl.remove('a')
++opkgcl.install('a b', '--add-ignore-recommends c')
++
++if not opkgcl.is_installed('a'):
++      opk.fail("Package 'a' installed but reports as not installed.")
++
++if not opkgcl.is_installed('b'):
++      opk.fail("Package 'b' installed but reports as not installed.")
++
++if not opkgcl.is_installed('c'):
++      opk.fail("Package 'c' should have been installed since 'b' depends on it.")
++
++opkgcl.remove('b c', '--force-depends')
++o.add(Package='a', Recommends='c', Version='2.0')
++o.write_opk()
++o.write_list()
++
++opkgcl.update()
++
++opkgcl.upgrade('a', '--add-ignore-recommends c')
++
++if not opkgcl.is_installed('a', '2.0'):
++      opk.fail("Package 'a (2.0)' installed but reports as not installed.")
++
++if opkgcl.is_installed('c'):
++      opk.fail("Package 'c' should not have been installed since it was in --add-ignore-recommends.")
+--
+2.20.1
+
diff --git a/meta/recipes-devtools/opkg/opkg_0.4.0.bb b/meta/recipes-devtools/opkg/opkg_0.4.0.bb
index 9b7cf3f596..a2329d3e71 100644
--- a/meta/recipes-devtools/opkg/opkg_0.4.0.bb
+++ b/meta/recipes-devtools/opkg/opkg_0.4.0.bb
@@ -14,6 +14,7 @@ PE = "1"
 SRC_URI = "http://downloads.yoctoproject.org/releases/${BPN}/${BPN}-${PV}.tar.gz \
            file://opkg.conf \
            file://0001-opkg_conf-create-opkg.lock-in-run-instead-of-var-run.patch \
+           file://0001-libopkg-add-add-ignore-recommends-option.patch \
 "

 SRC_URI[md5sum] = "ae51d95fee599bb4dce08453529158f5"
--
2.20.1

--
_______________________________________________
Openembedded-core mailing list
Openembedded-core@...
http://lists.openembedded.org/mailman/listinfo/openembedded-core


glxinfo

Peter Balazovic <balazovic.peter@...>
 

I'd like to ask which yocto recipe has "glxinfo" available? I will make available that package within local.conf...

Thanks.
Peter


Re: CMake based recipes and defining CMAKE_BUILD_TYPE

Mikko Rapeli
 

Hi,

From my experience, what CMAKE_BUILD_TYPE means varies between SW components.
Thus I think the current approach of not setting it is correct. SW components
must set their own defaults in either CMakeLists.txt or in the bitbake recipe.

Also, building with debug info is separate from CMAKE_BUILD_TYPE. The default
compile flags from yocto will include -g for debug symbols and this is provided
to CMake compile flags too.

Cheers,

-Mikko


Re: SDK install w/ CMake

Bach, Pascal <pascal.bach@...>
 

Hi Eric

I don't think your issue has something do to with CMake.

-----Original Message-----
From: yocto-bounces@yoctoproject.org <yocto-bounces@yoctoproject.org>
On Behalf Of Eric Schwarz
Sent: Freitag, 1. Februar 2019 09:51
To: yocto@yoctoproject.org
Subject: [yocto] SDK install w/ CMake

Hello,

we have got the problem that w/ the Yocto recipe and CMake install targets
as below always everything (headers and library or binary
respectively) is installed in the SDK.
The binary also goes into the SDK even though we just add it to
IMAGE_INSTALL based on a XILINX yocto build (rel-v2018.3).
I'm not sure I understand what you are trying to do. If you add something to IMAGE_INSTALL it gets installed to the target.
That usually includes binaries and libraries.

If you only want libraries but not binaries it's probably best to split them into multiple packages as described in https://www.yoctoproject.org/docs/latest/mega-manual/mega-manual.html#package-splitting-dev-environment

This way you can have the binaries in a different package like ${PN}-tools.

Pascal

For sure we only want headers to be installed when "<library_name>-dev"
is added to TOOLCHAIN_TARGET_TASK_append and the binary should not
be installed at all when it is just added to IMAGE_INSTALL.

For sure we studied Yocto and CMake recipes from other libraries where it
works like pugixml but weren't able to figure out what's going wrong.


Yocto recipe
============

DESCRIPTION = "C++ reflection library"
SECTION = "libs"
LICENSE = "CLOSED"

SRCREV = "${AUTOREV}"
SRCBRANCH = "next"
SRC_URI =
"git://gitlab.company.de/psg/${PN}.git;branch=${SRCBRANCH};protocol=ssh
"

DEPENDS = "catch2"

inherit cmake
S = "${WORKDIR}/git"
FILES_${PN}-dev += "${libdir}/cmake"

# The following are needed because the library is unversioned.
# See
https://wiki.yoctoproject.org/wiki/TipsAndTricks/Packaging_Prebuilt_Librari
es#Non-versioned_Libraries
SOLIBS = ".so"
FILES_SOLIBSDEV = ""


CMake library install part
==========================

# Shared client library target.
add_library(shared SHARED $<TARGET_OBJECTS:objects>)
target_include_directories(shared PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)

set_target_properties(shared
PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY lib/shared
LIBRARY_OUTPUT_DIRECTORY lib/shared
RUNTIME_OUTPUT_DIRECTORY lib/shared
OUTPUT_NAME ${LIBRARY_NAME}
)

# Install target.
install(TARGETS shared static
EXPORT ${LIBRARY_NAME}-config
DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(DIRECTORY include/reflect DESTINATION
${CMAKE_INSTALL_INCLUDEDIR})
install(EXPORT ${LIBRARY_NAME}-config
NAMESPACE ${LIBRARY_NAME}-
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${LIBRARY_NAME})


CMake binary install part
=========================

install(TARGETS ${EXECUTABLE_NAME} DESTINATION
${CMAKE_INSTALL_BINDIR})


Many thanks for any hints
Eric
--
_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto


do_populate_lic fail from scratch build but succed after clean

Jonas Andersson
 

Hi

I have an recipe based on serialport npm package created with devtool.

I added some custom licenses in my layer with LICENSE_PATH:

# Additional license directories.
LICENSE_PATH += "${LAYERDIR}/files/common-licenses"

After this I get some inconsistent build result (or i dont understand ).

Te steps I make is the following, build from scratch then bitbake fails, clean recipe and build recipe and it succed:

1. bitbake myLayer -> 

WARNING: serialport-6.2.2-r0 do_populate_lic: Could not copy license file /home/jonas/yocto/build/tmp/work/cortexa9hf-neon-goerlix-linux-gnueabi/serialport/6.2.2-r0/npmpkg/node_modules/prompt-list/node_modules/prompt-radio/node_modules/prompt-checkbox/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/LICENSE to /home/jonas/yocto/build/tmp/work/cortexa9hf-neon-goerlix-linux-gnueabi/serialport/6.2.2-r0/license-destdir/serialport/LICENSE.3: [Errno 2] No such file or directory: '/home/jonas/yocto/build/tmp/work/cortexa9hf-neon-goerlix-linux-gnueabi/serialport/6.2.2-r0/npmpkg/node_modules/prompt-list/node_modules/prompt-radio/node_modules/prompt-checkbox/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/LICENSE'
.
//
.
ERROR: serialport-6.2.2-r0 do_populate_lic: QA Issue: serialport: LIC_FILES_CHKSUM points to an invalid file: /home/jonas/yocto/build/tmp/work/cortexa9hf-neon-goerlix-linux-gnueabi/serialport/6.2.2-r0/npmpkg/node_modules/prompt-list/node_modules/prompt-radio/node_modules/prompt-checkbox/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/LICENSE [license-checksum]
.
//
.
ERROR: serialport-6.2.2-r0 do_populate_lic: Fatal QA errors found, failing task.
ERROR: serialport-6.2.2-r0 do_populate_lic: Function failed: populate_lic_qa_checksum

2. bitbake serialport -c clean
3. bitbake serialport -> success

In my view it feels like different tasks is executed in different order, like the npm recipe is missing some dependency but before I adden LICENSE_PATH to the layer config I had no problem..
______________________________________________________________________________________________
Build Configuration:
BB_VERSION           = "1.40.0"
BUILD_SYS            = "x86_64-linux"
NATIVELSBSTRING      = "universal"

TUNE_FEATURES        = "arm armv7a vfp neon callconvention-hard cortexa9"
TARGET_FPU           = "hard"
meta                 = "thud:3541f019a505d18263fad0b46b88d470e3fd9d62"
meta-oe              
meta-python          
meta-networking      
meta-filesystems     = "thud:6094ae18c8a35e5cc9998ac39869390d7f3bb1e2"
meta-yocto-bsp       = "thud:3541f019a505d18263fad0b46b88d470e3fd9d62"
meta-microservicebus-node = "thud:cab931199236b5bdeeb660f64aea55c2e0c09c2b"

Best regards
Jonas



Python default libraries

Emily Smith <easmith5@...>
 

Hi -

I’ve been working with yocto and with some code running on my OS, however I’m seeing errors that seem to indicate that default python libraries are no longer included (specifically logging and importlib). Has something about the default python libraries changed?

Thanks!
Emily Smith


[PATCH] ruby: remove CVE-2018-1000073.patch as already fixed

Grandbois, Brett <brett.grandbois@...>
 

rubygems 2.7.6 which is in ruby 2.5.3 has this fix and as currently
applied all gem extraction fails as the realpath check is done against
the full path including the file to be extracted which will always fail
as the file hasnt been extracted yet

Signed-off-by: Brett Grandbois <brett.grandbois@opengear.com>
---
.../ruby/ruby/CVE-2018-1000073.patch | 34 -------------------
meta/recipes-devtools/ruby/ruby_2.5.3.bb | 1 -
2 files changed, 35 deletions(-)
delete mode 100644 meta/recipes-devtools/ruby/ruby/CVE-2018-1000073.patch

diff --git a/meta/recipes-devtools/ruby/ruby/CVE-2018-1000073.patch b/meta/recipes-devtools/ruby/ruby/CVE-2018-1000073.patch
deleted file mode 100644
index 22fa1b5f4d..0000000000
--- a/meta/recipes-devtools/ruby/ruby/CVE-2018-1000073.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 1b931fc03b819b9a0214be3eaca844ef534175e2 Mon Sep 17 00:00:00 2001
-From: Jonathan Claudius <jclaudius@mozilla.com>
-Date: Wed, 7 Feb 2018 23:54:52 -0500
-Subject: [PATCH] Non-working patch for deducing symlinked base-dirs
-
----
-CVE: CVE-2018-1000073
-
-Fixed in ruby 2.7.6.
-
-Upstream-Status: Backport [github.com/rubygems/rubygems/commit/1b931fc...]
-
-Signed-off-by: Joe Slater <joe.slater@windriver.com>
-
----
- lib/rubygems/package.rb | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/lib/rubygems/package.rb b/lib/rubygems/package.rb
-index dede959..cb9c74a 100644
---- a/lib/rubygems/package.rb
-+++ b/lib/rubygems/package.rb
-@@ -421,6 +421,8 @@ EOM
- destination_dir = File.expand_path destination_dir
-
- destination = File.join destination_dir, filename
-+ destination = File.realpath destination if
-+ File.respond_to? :realpath
- destination = File.expand_path destination
-
- raise Gem::Package::PathError.new(destination, destination_dir) unless
---
-1.7.9.5
-
diff --git a/meta/recipes-devtools/ruby/ruby_2.5.3.bb b/meta/recipes-devtools/ruby/ruby_2.5.3.bb
index e9f0453788..3fb427e90e 100644
--- a/meta/recipes-devtools/ruby/ruby_2.5.3.bb
+++ b/meta/recipes-devtools/ruby/ruby_2.5.3.bb
@@ -3,7 +3,6 @@ require ruby.inc
SRC_URI += " \
file://ruby-CVE-2017-9226.patch \
file://ruby-CVE-2017-9228.patch \
- file://CVE-2018-1000073.patch \
"

SRC_URI[md5sum] = "20c85b67846d49622ef3b24230803fef"
--
2.17.1


Re: CMake based recipes and defining CMAKE_BUILD_TYPE

Matthew Z Schuckmann
 

Aright thank you for checking into this, you went farther then I expected.
I will take the approach of setting it for the recipes I really care about and leave the rest alone.

Matt S.
________________________________________
From: Andreas Müller <schnitzeltony@gmail.com>
Sent: Wednesday, February 6, 2019 3:11 PM
To: Matt Schuckmann
Cc: yocto@yoctoproject.org
Subject: Re: [yocto] CMake based recipes and defining CMAKE_BUILD_TYPE

On Wed, Feb 6, 2019 at 11:53 PM Andreas Müller <schnitzeltony@gmail.com> wrote:

On Wed, Feb 6, 2019 at 11:24 PM Andreas Müller <schnitzeltony@gmail.com> wrote:

On Wed, Feb 6, 2019 at 11:05 PM Matt Schuckmann
<Matt.Schuckmann@planar.com> wrote:

Hi Andreas,

Thanks for the response, do you set build type in each recipe individually or is there some central .conf file or other other location that you set it?

Matt S.
Honestly: I do not set them yet because I thought RelWithDebInfo is
default. That assumption was based on some projects but I checked now:
it does not seem to be something to rely on...
Will build-/run-test this with my 'world':

diff --git a/meta/classes/cmake.bbclass b/meta/classes/cmake.bbclass
index fd40a9863e..a8e08e6d6f 100644
--- a/meta/classes/cmake.bbclass
+++ b/meta/classes/cmake.bbclass
@@ -153,6 +153,7 @@ cmake_do_configure() {
-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain.cmake \
-DCMAKE_VERBOSE_MAKEFILE=1 \
-DCMAKE_NO_SYSTEM_FROM_IMPORTED=1 \
+ -DCMAKE_BUILD_TYPE=${@d.getVar(oe.utils.vartrue('DEBUG_BUILD',
'Debug', 'RelWithDebInfo', d))} \
${EXTRA_OECMAKE} \
-Wno-dev
}

Takes a while...
Not exactly: After short build I saw:

* There are some sed on '*-noconfig.cmake' they are going to break
* libeigen fails because it supports 'Debug' and 'Release' only (and I
bet there are more)

Will skip further tests and get the feeling that a common solution won't do...

Andreas


Re: CMake based recipes and defining CMAKE_BUILD_TYPE

Andreas Müller
 

On Wed, Feb 6, 2019 at 11:53 PM Andreas Müller <schnitzeltony@gmail.com> wrote:

On Wed, Feb 6, 2019 at 11:24 PM Andreas Müller <schnitzeltony@gmail.com> wrote:

On Wed, Feb 6, 2019 at 11:05 PM Matt Schuckmann
<Matt.Schuckmann@planar.com> wrote:

Hi Andreas,

Thanks for the response, do you set build type in each recipe individually or is there some central .conf file or other other location that you set it?

Matt S.
Honestly: I do not set them yet because I thought RelWithDebInfo is
default. That assumption was based on some projects but I checked now:
it does not seem to be something to rely on...
Will build-/run-test this with my 'world':

diff --git a/meta/classes/cmake.bbclass b/meta/classes/cmake.bbclass
index fd40a9863e..a8e08e6d6f 100644
--- a/meta/classes/cmake.bbclass
+++ b/meta/classes/cmake.bbclass
@@ -153,6 +153,7 @@ cmake_do_configure() {
-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain.cmake \
-DCMAKE_VERBOSE_MAKEFILE=1 \
-DCMAKE_NO_SYSTEM_FROM_IMPORTED=1 \
+ -DCMAKE_BUILD_TYPE=${@d.getVar(oe.utils.vartrue('DEBUG_BUILD',
'Debug', 'RelWithDebInfo', d))} \
${EXTRA_OECMAKE} \
-Wno-dev
}

Takes a while...
Not exactly: After short build I saw:

* There are some sed on '*-noconfig.cmake' they are going to break
* libeigen fails because it supports 'Debug' and 'Release' only (and I
bet there are more)

Will skip further tests and get the feeling that a common solution won't do...

Andreas


Re: [PATCH 00/10] Misc fixes (cover letter only)

Paul Eggleton
 

Oops, yes, I forgot the [layerindex-web], my apologies.

I can cc the oe-devel list if people really want to see it there as well; up
to this point we've been using this list only. The other option would be a
dedicated list but I suspect that would have a very limited subscription.

Cheers,
Paul

On Thursday, 7 February 2019 11:24:24 AM NZDT akuster wrote:

Hello Paul.

On 2/6/19 2:00 PM, Paul Eggleton wrote:
The following changes since commit
61e9b048591adab88d1996646286e1d7df024bea:

Fix drop-down alignment on duplicates page (2018-11-20 11:58:42 +1300)

are available in the Git repository at:

git://git.yoctoproject.org/layerindex-web paule/fixes12
http://git.yoctoproject.org/cgit.cgi/layerindex-web/log/?h=paule/fixes12

Paul Eggleton (10):
Send people an email when another user adds them as a maintainer
Add links to other branch recipes in recipe detail
Fix errors due to races deleting bitbake temp files
local.conf: allow for upstream_tracking.inc to be missing
Use try...finally or with to ensure files get closed
Replace use of assert with exceptions
docker: add wget to dependencies
RRS: fix sorting arrow positioning
rrs_maintainer_history: check out layer branch before looking for
maintainers.inc
RRS: add tool to import/export upstream history data
Thanks for the updates and fixes. This is a very useful tool to both YP
and OE.

I had to look at what was actual changes to figure out what this patch
set was against. Should we change the "subject" to help clarify? ie
[layer-index][PATCH ...?

The layer index is hosted on OE. Should one of the OE mailing be CC'ed??

Yes I realize the sources are hosted on YP but the url for the tool is
http://layers.openembedded.org. can be confusing.

kind regards,
Armin

Dockerfile | 1 +
conf/local.conf | 2 +-
layerindex/bulkchange.py | 18 +-
layerindex/update.py | 4 +-
layerindex/update_layer.py | 14 +-
layerindex/utils.py | 21 ++-
layerindex/views.py | 70 ++++++--
rrs/tools/historytool.py | 196 +++++++++++++++++++++
rrs/tools/rrs_distros.py | 19 +-
rrs/tools/rrs_maintainer_history.py | 45 ++---
rrs/tools/rrs_upgrade_history.py | 4 +-
rrs/tools/rrs_upstream_history.py | 3 +-
rrs/tools/upgrade_history_internal.py | 3 +-
rrs/views.py | 2 +
templates/layerindex/maintemail.txt | 9 +
templates/layerindex/maintemailsubject.txt | 1 +
templates/layerindex/recipedetail.html | 27 +++
templates/rrs/maintainers.html | 2 +-
templates/rrs/recipedetail.html | 27 +++
templates/rrs/recipes.html | 2 +-
20 files changed, 392 insertions(+), 78 deletions(-)
create mode 100755 rrs/tools/historytool.py
create mode 100644 templates/layerindex/maintemail.txt
create mode 100644 templates/layerindex/maintemailsubject.txt

--

Paul Eggleton
Intel Open Source Technology Centre


Re: CMake based recipes and defining CMAKE_BUILD_TYPE

Andreas Müller
 

On Wed, Feb 6, 2019 at 11:24 PM Andreas Müller <schnitzeltony@gmail.com> wrote:

On Wed, Feb 6, 2019 at 11:05 PM Matt Schuckmann
<Matt.Schuckmann@planar.com> wrote:

Hi Andreas,

Thanks for the response, do you set build type in each recipe individually or is there some central .conf file or other other location that you set it?

Matt S.
Honestly: I do not set them yet because I thought RelWithDebInfo is
default. That assumption was based on some projects but I checked now:
it does not seem to be something to rely on...
Will build-/run-test this with my 'world':

diff --git a/meta/classes/cmake.bbclass b/meta/classes/cmake.bbclass
index fd40a9863e..a8e08e6d6f 100644
--- a/meta/classes/cmake.bbclass
+++ b/meta/classes/cmake.bbclass
@@ -153,6 +153,7 @@ cmake_do_configure() {
-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain.cmake \
-DCMAKE_VERBOSE_MAKEFILE=1 \
-DCMAKE_NO_SYSTEM_FROM_IMPORTED=1 \
+ -DCMAKE_BUILD_TYPE=${@d.getVar(oe.utils.vartrue('DEBUG_BUILD',
'Debug', 'RelWithDebInfo', d))} \
${EXTRA_OECMAKE} \
-Wno-dev
}

Takes a while...

Andreas


Re: [PATCH 00/10] Misc fixes (cover letter only)

Armin Kuster
 

Hello Paul.

On 2/6/19 2:00 PM, Paul Eggleton wrote:
The following changes since commit 61e9b048591adab88d1996646286e1d7df024bea:

Fix drop-down alignment on duplicates page (2018-11-20 11:58:42 +1300)

are available in the Git repository at:

git://git.yoctoproject.org/layerindex-web paule/fixes12
http://git.yoctoproject.org/cgit.cgi/layerindex-web/log/?h=paule/fixes12

Paul Eggleton (10):
Send people an email when another user adds them as a maintainer
Add links to other branch recipes in recipe detail
Fix errors due to races deleting bitbake temp files
local.conf: allow for upstream_tracking.inc to be missing
Use try...finally or with to ensure files get closed
Replace use of assert with exceptions
docker: add wget to dependencies
RRS: fix sorting arrow positioning
rrs_maintainer_history: check out layer branch before looking for
maintainers.inc
RRS: add tool to import/export upstream history data
Thanks for the updates and fixes. This is  a very useful tool to both YP
and OE. 

I had to look at what was actual changes to figure out what this patch
set was against.  Should we change the "subject" to help clarify? ie
[layer-index][PATCH ...?

The layer index is hosted on OE. Should one of the  OE mailing be CC'ed??

Yes I realize the sources are hosted on YP but the url for the tool is
http://layers.openembedded.org. can be confusing.

kind regards,
Armin

Dockerfile | 1 +
conf/local.conf | 2 +-
layerindex/bulkchange.py | 18 +-
layerindex/update.py | 4 +-
layerindex/update_layer.py | 14 +-
layerindex/utils.py | 21 ++-
layerindex/views.py | 70 ++++++--
rrs/tools/historytool.py | 196 +++++++++++++++++++++
rrs/tools/rrs_distros.py | 19 +-
rrs/tools/rrs_maintainer_history.py | 45 ++---
rrs/tools/rrs_upgrade_history.py | 4 +-
rrs/tools/rrs_upstream_history.py | 3 +-
rrs/tools/upgrade_history_internal.py | 3 +-
rrs/views.py | 2 +
templates/layerindex/maintemail.txt | 9 +
templates/layerindex/maintemailsubject.txt | 1 +
templates/layerindex/recipedetail.html | 27 +++
templates/rrs/maintainers.html | 2 +-
templates/rrs/recipedetail.html | 27 +++
templates/rrs/recipes.html | 2 +-
20 files changed, 392 insertions(+), 78 deletions(-)
create mode 100755 rrs/tools/historytool.py
create mode 100644 templates/layerindex/maintemail.txt
create mode 100644 templates/layerindex/maintemailsubject.txt


Re: CMake based recipes and defining CMAKE_BUILD_TYPE

Andreas Müller
 

On Wed, Feb 6, 2019 at 11:05 PM Matt Schuckmann
<Matt.Schuckmann@planar.com> wrote:

Hi Andreas,

Thanks for the response, do you set build type in each recipe individually or is there some central .conf file or other other location that you set it?

Matt S.
Honestly: I do not set them yet because I thought RelWithDebInfo is
default. That assumption was based on some projects but I checked now:
it does not seem to be something to rely on...

Andreas


Re: CMake based recipes and defining CMAKE_BUILD_TYPE

Matthew Z Schuckmann
 

Hi Andreas,

Thanks for the response, do you set build type in each recipe individually or is there some central .conf file or other other location that you set it?

Matt S.
________________________________________
From: Andreas Müller <schnitzeltony@gmail.com>
Sent: Wednesday, February 6, 2019 1:31 PM
To: Matt Schuckmann
Cc: yocto@yoctoproject.org
Subject: Re: [yocto] CMake based recipes and defining CMAKE_BUILD_TYPE

On Wed, Feb 6, 2019 at 7:39 PM Matt Schuckmann
<Matt.Schuckmann@planar.com> wrote:

I'm trying to understand why the cmake.bbclass doesn't make any attempt to set CMAKE_BUILD_TYPE and what the design philosophy behind that is?

On the surface I would expect that the default build type would be Release but I can see how that might not always be the right choice. I'm really surprised that there isn't a global variable that can be set for this, am I missing something, or is it really expected that each recipe provide it if they care?


FYI I started looking into this when I realized that NDEBUG is not set for many (if not all) of my CMake based recipes and thus asserts are still enabled in my production code. This appears to be known behavior for CMake if CMAKE_BUILD_TYPE is not set.


Matt S.
Hi Matt,

This is not a full answer but Release is not a common target for us:
cmake will produce not containing debug info. With these debugging is
useless (and you'll get package qa warnings). If there is a default
target for us it is RelWithDebInfo.

Andreas


[PATCH 00/10] Misc fixes (cover letter only)

Paul Eggleton
 

The following changes since commit 61e9b048591adab88d1996646286e1d7df024bea:

Fix drop-down alignment on duplicates page (2018-11-20 11:58:42 +1300)

are available in the Git repository at:

git://git.yoctoproject.org/layerindex-web paule/fixes12
http://git.yoctoproject.org/cgit.cgi/layerindex-web/log/?h=paule/fixes12

Paul Eggleton (10):
Send people an email when another user adds them as a maintainer
Add links to other branch recipes in recipe detail
Fix errors due to races deleting bitbake temp files
local.conf: allow for upstream_tracking.inc to be missing
Use try...finally or with to ensure files get closed
Replace use of assert with exceptions
docker: add wget to dependencies
RRS: fix sorting arrow positioning
rrs_maintainer_history: check out layer branch before looking for
maintainers.inc
RRS: add tool to import/export upstream history data

Dockerfile | 1 +
conf/local.conf | 2 +-
layerindex/bulkchange.py | 18 +-
layerindex/update.py | 4 +-
layerindex/update_layer.py | 14 +-
layerindex/utils.py | 21 ++-
layerindex/views.py | 70 ++++++--
rrs/tools/historytool.py | 196 +++++++++++++++++++++
rrs/tools/rrs_distros.py | 19 +-
rrs/tools/rrs_maintainer_history.py | 45 ++---
rrs/tools/rrs_upgrade_history.py | 4 +-
rrs/tools/rrs_upstream_history.py | 3 +-
rrs/tools/upgrade_history_internal.py | 3 +-
rrs/views.py | 2 +
templates/layerindex/maintemail.txt | 9 +
templates/layerindex/maintemailsubject.txt | 1 +
templates/layerindex/recipedetail.html | 27 +++
templates/rrs/maintainers.html | 2 +-
templates/rrs/recipedetail.html | 27 +++
templates/rrs/recipes.html | 2 +-
20 files changed, 392 insertions(+), 78 deletions(-)
create mode 100755 rrs/tools/historytool.py
create mode 100644 templates/layerindex/maintemail.txt
create mode 100644 templates/layerindex/maintemailsubject.txt

--
2.17.2


Re: CMake based recipes and defining CMAKE_BUILD_TYPE

Andreas Müller
 

On Wed, Feb 6, 2019 at 7:39 PM Matt Schuckmann
<Matt.Schuckmann@planar.com> wrote:

I'm trying to understand why the cmake.bbclass doesn't make any attempt to set CMAKE_BUILD_TYPE and what the design philosophy behind that is?

On the surface I would expect that the default build type would be Release but I can see how that might not always be the right choice. I'm really surprised that there isn't a global variable that can be set for this, am I missing something, or is it really expected that each recipe provide it if they care?


FYI I started looking into this when I realized that NDEBUG is not set for many (if not all) of my CMake based recipes and thus asserts are still enabled in my production code. This appears to be known behavior for CMake if CMAKE_BUILD_TYPE is not set.


Matt S.
Hi Matt,

This is not a full answer but Release is not a common target for us:
cmake will produce not containing debug info. With these debugging is
useless (and you'll get package qa warnings). If there is a default
target for us it is RelWithDebInfo.

Andreas


CMake based recipes and defining CMAKE_BUILD_TYPE

Matthew Z Schuckmann
 

I'm trying to understand why the cmake.bbclass doesn't make any attempt to set CMAKE_BUILD_TYPE and what the design philosophy behind that is? 

On the surface I would expect that the default build type would be Release but I can see how that might not always be the right choice. I'm really surprised that there isn't a global variable that can be set for this, am I missing something, or is it really expected that each recipe provide it if they care?


FYI I started looking into this when I realized that NDEBUG is not set for many (if not all) of my CMake based recipes and thus asserts are still enabled in my production code. This appears to be known behavior for CMake if CMAKE_BUILD_TYPE is not set. 


Matt S. 


Re: Proper Use of KERNEL_MODULE_AUTOLOAD variable

Ulf Samuelsson
 

Maybe it would be good to have a working example in the tree.

Best Regards,
Ulf Samuelsson

6 feb. 2019 kl. 02:22 skrev Khem Raj <raj.khem@...>:



On Sat, Feb 2, 2019 at 7:17 PM Ken Sloat <ken.sloat@...> wrote:
On Sat, Feb 2, 2019 at 10:03 PM Bruce Ashfield
<bruce.ashfield@...> wrote:
>
> On 2019-02-02 9:59 p.m., Ken Sloat wrote:
> > Hello,
> >
> > I have an out of tree kernel module which I want autoloaded at startup
> > on my system. Looking at the Yocto project manual, I see that one way
> > I can do this is to add the module name to the KERNEL_MODULE_AUTOLOAD
> > variable within my custom module recipe.
> >
> > What I have found is that the module-split class is indeed generating
> > the "/etc/modules-load.d/mymodule.conf" file, however this file is not
> > actually being installed. To be more precise it is appearing in the
> > "package" directory (i.e.
> > tmp/work/**/mymodule/package/etc/modules-load.d/mymodule.conf) but not
> > within the "image" directory (nor in my final rootfs).
> >
> > Is there something I'm missing in the usage of KERNEL_MODULE_AUTOLOAD?
> > Is the intention for this variable I add extra steps to manually
> > install this file in my recipe? FYI I'm using Morty.
>
> Can you provide your recipe ? It would make suggestions easier. For
> example, my first question is: Is the module being installed to your
> image via IMAGE_INSTALL, or some other similar variable ?
>
> Bruce
>
> >
> > Thanks,
> > Ken Sloat
> >
>

Hi Bruce,

Thanks for your quick reply. Yes the module is being installed via
image_install. Module is installed but generated conf file is not. See
recipe below:

require mymodule.inc

inherit module kernel-module-split

DEPENDS = "virtual/kernel"

EXTRA_OEMAKE_append = " \
    KERNELDIR=${STAGING_KERNEL_DIR} \
    "

MAKE_TARGETS = "module"

MODULE_NAME = "mymodule"

PKG_${PN} = "kernel-module-${MODULE_NAME}"

module_do_install() {
    install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/${MODULE_NAME}
    install -m 0644 ${MODULE_NAME}.ko \
    ${D}/lib/modules/${KERNEL_VERSION}/kernel/${MODULE_NAME}/${MODULE_NAME}.ko
}

FILES_${PN} = " \
    /lib/modules/${KERNEL_VERSION}/kernel/${MODULE_NAME} \
"

Your recipe is overwriting common stuff which otherwise should be provided by module bbclass 
I would suggest that you append to the variables instead of over writing them above and try to reuse
The primitives from bbclass as much as you can for best results 


KERNEL_MODULE_AUTOLOAD += "${MODULE_NAME}"
--
_______________________________________________
yocto mailing list
yocto@...
https://lists.yoctoproject.org/listinfo/yocto
--
_______________________________________________
yocto mailing list
yocto@...
https://lists.yoctoproject.org/listinfo/yocto

10761 - 10780 of 54812