Patchwork [03/22,v2] update-alternatives.bbclass: Add missing runtime dependency

login
register
mail settings
Submitter Mark Hatle
Date Dec. 5, 2012, 2:33 a.m.
Message ID <1354674831-24287-1-git-send-email-mark.hatle@windriver.com>
Download mbox | patch
Permalink /patch/40395/
State New
Headers show

Comments

Mark Hatle - Dec. 5, 2012, 2:33 a.m.
When using update-alternatives, there should be a runtime dependency on
${VIRTUAL-RUNTIME_update-alternatives}.  Without this, it's possible to
get into a situation where the package is not installable.

(If VIRTUAL-RUNTIME_update-alternatives is not defined, no requirement
is added.)

Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
 meta/classes/update-alternatives.bbclass |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)
Richard Purdie - Dec. 6, 2012, 12:12 p.m.
On Tue, 2012-12-04 at 20:33 -0600, Mark Hatle wrote:
> When using update-alternatives, there should be a runtime dependency on
> ${VIRTUAL-RUNTIME_update-alternatives}.  Without this, it's possible to
> get into a situation where the package is not installable.
> 
> (If VIRTUAL-RUNTIME_update-alternatives is not defined, no requirement
> is added.)
> 
> Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
> ---
>  meta/classes/update-alternatives.bbclass |    8 ++++++++
>  1 files changed, 8 insertions(+), 0 deletions(-)
> 
> diff --git a/meta/classes/update-alternatives.bbclass b/meta/classes/update-alternatives.bbclass
> index 4e1ff27..96fd1e8 100644
> --- a/meta/classes/update-alternatives.bbclass
> +++ b/meta/classes/update-alternatives.bbclass
> @@ -304,6 +304,14 @@ python populate_packages_prepend () {
>              alt_remove_links += '\tupdate-alternatives --remove  %s %s\n' % (alt_name, alt_target)
>  
>          if alt_setup_links:
> +            # RDEPENDS setup
> +            provider = d.getVar('VIRTUAL-RUNTIME_update-alternatives', True)
> +            if provider:
> +                bb.note('adding runtime requirement for update-alternatives for %s' % pkg)
> +                rdepends = d.getVar('RDEPENDS_%s' % pkg, True) or ""
> +                rdepends += ' ' + d.getVar('MLPREFIX') + provider
> +                d.setVar("RDEPENDS_%s" % pkg, rdepends)
> +
>              bb.note('adding update-alternatives calls to postinst/postrm for %s' % pkg)
>              bb.note('%s' % alt_setup_links)
>              postinst = (d.getVar('pkg_postinst_%s' % pkg, True) or d.getVar('pkg_postinst', True)) or '#!/bin/sh\n'

I'm afraid I don't like this patch. Firstly, do we really need a bb.note
in there? We don't note every little thing we do, not least as it would
kill performance.

Secondly, why not simply do:

d.appendVar('RDEPENDS_%s' % pkg, ' ' + d.getVar('MLPREFIX') + provider)

?

Cheers,

Richard
Mark Hatle - Dec. 6, 2012, 5:10 p.m.
On 12/6/12 6:12 AM, Richard Purdie wrote:
> On Tue, 2012-12-04 at 20:33 -0600, Mark Hatle wrote:
>> When using update-alternatives, there should be a runtime dependency on
>> ${VIRTUAL-RUNTIME_update-alternatives}.  Without this, it's possible to
>> get into a situation where the package is not installable.
>>
>> (If VIRTUAL-RUNTIME_update-alternatives is not defined, no requirement
>> is added.)
>>
>> Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
>> ---
>>   meta/classes/update-alternatives.bbclass |    8 ++++++++
>>   1 files changed, 8 insertions(+), 0 deletions(-)
>>
>> diff --git a/meta/classes/update-alternatives.bbclass b/meta/classes/update-alternatives.bbclass
>> index 4e1ff27..96fd1e8 100644
>> --- a/meta/classes/update-alternatives.bbclass
>> +++ b/meta/classes/update-alternatives.bbclass
>> @@ -304,6 +304,14 @@ python populate_packages_prepend () {
>>               alt_remove_links += '\tupdate-alternatives --remove  %s %s\n' % (alt_name, alt_target)
>>
>>           if alt_setup_links:
>> +            # RDEPENDS setup
>> +            provider = d.getVar('VIRTUAL-RUNTIME_update-alternatives', True)
>> +            if provider:
>> +                bb.note('adding runtime requirement for update-alternatives for %s' % pkg)
>> +                rdepends = d.getVar('RDEPENDS_%s' % pkg, True) or ""
>> +                rdepends += ' ' + d.getVar('MLPREFIX') + provider
>> +                d.setVar("RDEPENDS_%s" % pkg, rdepends)
>> +
>>               bb.note('adding update-alternatives calls to postinst/postrm for %s' % pkg)
>>               bb.note('%s' % alt_setup_links)
>>               postinst = (d.getVar('pkg_postinst_%s' % pkg, True) or d.getVar('pkg_postinst', True)) or '#!/bin/sh\n'
>
> I'm afraid I don't like this patch. Firstly, do we really need a bb.note
> in there? We don't note every little thing we do, not least as it would
> kill performance.

There are very few instances of this, I'm surprised if performance would be 
impacted beyond the noise.  The next item has a similar bb.note as well.

> Secondly, why not simply do:
>
> d.appendVar('RDEPENDS_%s' % pkg, ' ' + d.getVar('MLPREFIX') + provider)

There was originally code in there to remove duplicates, when it got refactored 
out the rest was never changed.  I'll fix that up.

--Mark

> ?
>
> Cheers,
>
> Richard
>

Patch

diff --git a/meta/classes/update-alternatives.bbclass b/meta/classes/update-alternatives.bbclass
index 4e1ff27..96fd1e8 100644
--- a/meta/classes/update-alternatives.bbclass
+++ b/meta/classes/update-alternatives.bbclass
@@ -304,6 +304,14 @@  python populate_packages_prepend () {
             alt_remove_links += '\tupdate-alternatives --remove  %s %s\n' % (alt_name, alt_target)
 
         if alt_setup_links:
+            # RDEPENDS setup
+            provider = d.getVar('VIRTUAL-RUNTIME_update-alternatives', True)
+            if provider:
+                bb.note('adding runtime requirement for update-alternatives for %s' % pkg)
+                rdepends = d.getVar('RDEPENDS_%s' % pkg, True) or ""
+                rdepends += ' ' + d.getVar('MLPREFIX') + provider
+                d.setVar("RDEPENDS_%s" % pkg, rdepends)
+
             bb.note('adding update-alternatives calls to postinst/postrm for %s' % pkg)
             bb.note('%s' % alt_setup_links)
             postinst = (d.getVar('pkg_postinst_%s' % pkg, True) or d.getVar('pkg_postinst', True)) or '#!/bin/sh\n'