All of lore.kernel.org
 help / color / mirror / Atom feed
* EXPORT_FUNCTIONS - change in behaviour proposal
@ 2012-12-10 16:09 Richard Purdie
  2012-12-10 17:29   ` [bitbake-devel] " Chris Larson
  0 siblings, 1 reply; 9+ messages in thread
From: Richard Purdie @ 2012-12-10 16:09 UTC (permalink / raw)
  To: bitbake-devel, openembedded-core

After Enrico's reported problem, I've been poking around the
EXPORT_FUNCTIONS code. Currently OE-Core metadata generates list A
below. In particular, this leads to code like:

 do_configure calls gnomebase_do_configure
 gnomebase_do_configure calls autotools_do_configure

which has a level of indirection. The gnomebase class never references
do_configure. I can appreciate adding in a default mapping of:

 do_configure calls autotools_do_configure

since it allows a user to call into autotools_do_configure from a custom
do_configure but I can't see the value of the intermediary
gnomebase_do_configure. Does anyone know of a use for it?

I have a suspicion that if it ever did do anything useful, it stopped
being useful long ago.

I'm therefore strongly tempted to remove the intermediaries from the
code. This would result in list B below which is a more direct set of
mappings.

Any thoughts/comments from anyone?

Cheers,

Richard

List A:
 autotools_do_siteconfig calls siteconfig_do_siteconfig
 autotools_do_siteconfig_gencache calls siteconfig_do_siteconfig_gencache
 base_do_patch calls patch_do_patch
 cmake_do_configure calls autotools_do_configure
 cmake_do_install calls autotools_do_install
 core-image_do_rootfs calls image_do_rootfs
 core-image_make_zimage_symlink_relative calls image_make_zimage_symlink_relative
 core-image_remove_init_link calls image_remove_init_link
 core-image_rootfs_no_x_startup calls image_rootfs_no_x_startup
 core-image_rootfs_update_timestamp calls image_rootfs_update_timestamp
 core-image_set_image_autologin calls image_set_image_autologin
 core-image_zap_root_password calls image_zap_root_password
 do_compile calls base_do_compile
 do_compile calls cmake_do_compile
 do_compile calls cpan_do_compile
 do_compile calls distutils_do_compile
 do_compile calls kernel_do_compile
 do_compile calls module_do_compile
 do_compile calls setuptools_do_compile
 do_configure calls autotools_do_configure
 do_configure calls base_do_configure
 do_configure calls cmake_do_configure
 do_configure calls cml1_do_configure
 do_configure calls cpan_do_configure
 do_configure calls gnomebase_do_configure
 do_configure calls kernel_do_configure
 do_configure calls qmake2_do_configure
 do_configure calls qmake_base_do_configure
 do_deploy calls kernel_do_deploy
 do_fetch calls base_do_fetch
 do_generate_toolchain_file calls cmake_do_generate_toolchain_file
 do_install calls autotools_do_install
 do_install calls base_do_install
 do_install calls cmake_do_install
 do_install calls cpan_do_install
 do_install calls distutils_do_install
 do_install calls gnomebase_do_install
 do_install calls kernel_do_install
 do_install calls module_do_install
 do_install calls setuptools_do_install
 do_package calls base_do_package
 do_patch calls base_do_patch
 do_siteconfig calls autotools_do_siteconfig
 do_siteconfig_gencache calls autotools_do_siteconfig_gencache
 do_unpack calls base_do_unpack
 gnomebase_do_configure calls autotools_do_configure
 gnomebase_do_install calls autotools_do_install
 package_name_hook calls debian_package_name_hook
 qmake2_do_configure calls qmake_base_do_configure
 setuptools_do_compile calls distutils_do_compile
 setuptools_do_install calls distutils_do_install


List B:
 do_compile calls base_do_compile
 do_compile calls cmake_do_compile
 do_compile calls cpan_do_compile
 do_compile calls distutils_do_compile
 do_compile calls kernel_do_compile
 do_compile calls module_do_compile
 do_configure calls autotools_do_configure
 do_configure calls base_do_configure
 do_configure calls cmake_do_configure
 do_configure calls cml1_do_configure
 do_configure calls cpan_do_configure
 do_configure calls kernel_do_configure
 do_configure calls qmake_base_do_configure
 do_deploy calls kernel_do_deploy
 do_fetch calls base_do_fetch
 do_generate_toolchain_file calls cmake_do_generate_toolchain_file
 do_install calls autotools_do_install
 do_install calls base_do_install
 do_install calls cmake_do_install
 do_install calls cpan_do_install
 do_install calls distutils_do_install
 do_install calls kernel_do_install
 do_install calls module_do_install
 do_package calls base_do_package
 do_patch calls patch_do_patch
 do_siteconfig calls siteconfig_do_siteconfig
 do_siteconfig_gencache calls siteconfig_do_siteconfig_gencache
 do_unpack calls base_do_unpack
 package_name_hook calls debian_package_name_hook




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: EXPORT_FUNCTIONS - change in behaviour proposal
  2012-12-10 16:09 EXPORT_FUNCTIONS - change in behaviour proposal Richard Purdie
@ 2012-12-10 17:29   ` Chris Larson
  0 siblings, 0 replies; 9+ messages in thread
From: Chris Larson @ 2012-12-10 17:29 UTC (permalink / raw)
  To: Richard Purdie; +Cc: bitbake-devel, openembedded-core

[-- Attachment #1: Type: text/plain, Size: 1547 bytes --]

On Mon, Dec 10, 2012 at 9:09 AM, Richard Purdie <
richard.purdie@linuxfoundation.org> wrote:

> After Enrico's reported problem, I've been poking around the
> EXPORT_FUNCTIONS code. Currently OE-Core metadata generates list A
> below. In particular, this leads to code like:
>
>  do_configure calls gnomebase_do_configure
>  gnomebase_do_configure calls autotools_do_configure
>
> which has a level of indirection. The gnomebase class never references
> do_configure. I can appreciate adding in a default mapping of:
>
>  do_configure calls autotools_do_configure
>
> since it allows a user to call into autotools_do_configure from a custom
> do_configure but I can't see the value of the intermediary
> gnomebase_do_configure. Does anyone know of a use for it?
>
> I have a suspicion that if it ever did do anything useful, it stopped
> being useful long ago.
>
> I'm therefore strongly tempted to remove the intermediaries from the
> code. This would result in list B below which is a more direct set of
> mappings.
>
> Any thoughts/comments from anyone?
>

In theory, I could see a situation where one class inherits another, rather
than just individual components all inherited by the recipe.

E.g. in class alpha:

inherit beta

alpha_do_stuff () {
   pre_stuff
   beta_do_stuff
   post_stuff
}

But this is a theoretical case, and often we hack around things via
_prepend/_append rather than doing things like this, so I doubt this is
actually done anywhere in practice.
-- 
Christopher Larson

[-- Attachment #2: Type: text/html, Size: 2284 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [bitbake-devel] EXPORT_FUNCTIONS - change in behaviour proposal
@ 2012-12-10 17:29   ` Chris Larson
  0 siblings, 0 replies; 9+ messages in thread
From: Chris Larson @ 2012-12-10 17:29 UTC (permalink / raw)
  To: Richard Purdie; +Cc: bitbake-devel, openembedded-core

[-- Attachment #1: Type: text/plain, Size: 1547 bytes --]

On Mon, Dec 10, 2012 at 9:09 AM, Richard Purdie <
richard.purdie@linuxfoundation.org> wrote:

> After Enrico's reported problem, I've been poking around the
> EXPORT_FUNCTIONS code. Currently OE-Core metadata generates list A
> below. In particular, this leads to code like:
>
>  do_configure calls gnomebase_do_configure
>  gnomebase_do_configure calls autotools_do_configure
>
> which has a level of indirection. The gnomebase class never references
> do_configure. I can appreciate adding in a default mapping of:
>
>  do_configure calls autotools_do_configure
>
> since it allows a user to call into autotools_do_configure from a custom
> do_configure but I can't see the value of the intermediary
> gnomebase_do_configure. Does anyone know of a use for it?
>
> I have a suspicion that if it ever did do anything useful, it stopped
> being useful long ago.
>
> I'm therefore strongly tempted to remove the intermediaries from the
> code. This would result in list B below which is a more direct set of
> mappings.
>
> Any thoughts/comments from anyone?
>

In theory, I could see a situation where one class inherits another, rather
than just individual components all inherited by the recipe.

E.g. in class alpha:

inherit beta

alpha_do_stuff () {
   pre_stuff
   beta_do_stuff
   post_stuff
}

But this is a theoretical case, and often we hack around things via
_prepend/_append rather than doing things like this, so I doubt this is
actually done anywhere in practice.
-- 
Christopher Larson

[-- Attachment #2: Type: text/html, Size: 2284 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: EXPORT_FUNCTIONS - change in behaviour proposal
  2012-12-10 17:29   ` [bitbake-devel] " Chris Larson
@ 2012-12-10 17:44     ` Richard Purdie
  -1 siblings, 0 replies; 9+ messages in thread
From: Richard Purdie @ 2012-12-10 17:44 UTC (permalink / raw)
  To: Chris Larson; +Cc: bitbake-devel, openembedded-core

On Mon, 2012-12-10 at 10:29 -0700, Chris Larson wrote:
> On Mon, Dec 10, 2012 at 9:09 AM, Richard Purdie
> <richard.purdie@linuxfoundation.org> wrote:
>         After Enrico's reported problem, I've been poking around the
>         EXPORT_FUNCTIONS code. Currently OE-Core metadata generates
>         list A
>         below. In particular, this leads to code like:
>         
>          do_configure calls gnomebase_do_configure
>          gnomebase_do_configure calls autotools_do_configure
>         
>         which has a level of indirection. The gnomebase class never
>         references
>         do_configure. I can appreciate adding in a default mapping of:
>         
>          do_configure calls autotools_do_configure
>         
>         since it allows a user to call into autotools_do_configure
>         from a custom
>         do_configure but I can't see the value of the intermediary
>         gnomebase_do_configure. Does anyone know of a use for it?
>         
>         I have a suspicion that if it ever did do anything useful, it
>         stopped
>         being useful long ago.
>         
>         I'm therefore strongly tempted to remove the intermediaries
>         from the
>         code. This would result in list B below which is a more direct
>         set of
>         mappings.
>         
>         Any thoughts/comments from anyone?
>
> In theory, I could see a situation where one class inherits another,
> rather than just individual components all inherited by the recipe.
>
> E.g. in class alpha:
>
> inherit beta
>
> alpha_do_stuff () {
>    pre_stuff
>    beta_do_stuff
>    post_stuff
> }
>
> But this is a theoretical case, and often we hack around things via
> _prepend/_append rather than doing things like this, so I doubt this
> is actually done anywhere in practice.

With an "EXPORT_FUNCTIONS = do_stuff" in alpha.bbclass, wouldn't that
still work without the intermediaries though?

Cheers,

Richard







^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [bitbake-devel] EXPORT_FUNCTIONS - change in behaviour proposal
@ 2012-12-10 17:44     ` Richard Purdie
  0 siblings, 0 replies; 9+ messages in thread
From: Richard Purdie @ 2012-12-10 17:44 UTC (permalink / raw)
  To: Chris Larson; +Cc: bitbake-devel, openembedded-core

On Mon, 2012-12-10 at 10:29 -0700, Chris Larson wrote:
> On Mon, Dec 10, 2012 at 9:09 AM, Richard Purdie
> <richard.purdie@linuxfoundation.org> wrote:
>         After Enrico's reported problem, I've been poking around the
>         EXPORT_FUNCTIONS code. Currently OE-Core metadata generates
>         list A
>         below. In particular, this leads to code like:
>         
>          do_configure calls gnomebase_do_configure
>          gnomebase_do_configure calls autotools_do_configure
>         
>         which has a level of indirection. The gnomebase class never
>         references
>         do_configure. I can appreciate adding in a default mapping of:
>         
>          do_configure calls autotools_do_configure
>         
>         since it allows a user to call into autotools_do_configure
>         from a custom
>         do_configure but I can't see the value of the intermediary
>         gnomebase_do_configure. Does anyone know of a use for it?
>         
>         I have a suspicion that if it ever did do anything useful, it
>         stopped
>         being useful long ago.
>         
>         I'm therefore strongly tempted to remove the intermediaries
>         from the
>         code. This would result in list B below which is a more direct
>         set of
>         mappings.
>         
>         Any thoughts/comments from anyone?
>
> In theory, I could see a situation where one class inherits another,
> rather than just individual components all inherited by the recipe.
>
> E.g. in class alpha:
>
> inherit beta
>
> alpha_do_stuff () {
>    pre_stuff
>    beta_do_stuff
>    post_stuff
> }
>
> But this is a theoretical case, and often we hack around things via
> _prepend/_append rather than doing things like this, so I doubt this
> is actually done anywhere in practice.

With an "EXPORT_FUNCTIONS = do_stuff" in alpha.bbclass, wouldn't that
still work without the intermediaries though?

Cheers,

Richard







^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: EXPORT_FUNCTIONS - change in behaviour proposal
  2012-12-10 17:44     ` [bitbake-devel] " Richard Purdie
@ 2012-12-10 19:41       ` Chris Larson
  -1 siblings, 0 replies; 9+ messages in thread
From: Chris Larson @ 2012-12-10 19:41 UTC (permalink / raw)
  To: Richard Purdie; +Cc: bitbake-devel, openembedded-core

[-- Attachment #1: Type: text/plain, Size: 1250 bytes --]

On Mon, Dec 10, 2012 at 10:44 AM, Richard Purdie <
richard.purdie@linuxfoundation.org> wrote:

> > E.g. in class alpha:
> >
> > inherit beta
> >
> > alpha_do_stuff () {
> >    pre_stuff
> >    beta_do_stuff
> >    post_stuff
> > }
> >
> > But this is a theoretical case, and often we hack around things via
> > _prepend/_append rather than doing things like this, so I doubt this
> > is actually done anywhere in practice.
>
> With an "EXPORT_FUNCTIONS = do_stuff" in alpha.bbclass, wouldn't that
> still work without the intermediaries though?
>

Hmm, yes, good point. Perhaps it was to allow the user to override an
intermediate function that might or might not exist?

E.g. in the do_configure calls gnomebase_do_configure calls
autotools_do_configure case, the user could override
gnomebase_do_configure, without having to know whether or not gnomebase
actually defines a configure function?

I'm guessing here, but that *could* be why it was implemented this way. In
practice, however, we have to know what our classes are doing anyway, most
of the time, for a wide variety of reasons. E.g. uses of overrides have to
be operated against carefully to avoid your changes being blown away.
-- 
Christopher Larson

[-- Attachment #2: Type: text/html, Size: 2062 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [bitbake-devel] EXPORT_FUNCTIONS - change in behaviour proposal
@ 2012-12-10 19:41       ` Chris Larson
  0 siblings, 0 replies; 9+ messages in thread
From: Chris Larson @ 2012-12-10 19:41 UTC (permalink / raw)
  To: Richard Purdie; +Cc: bitbake-devel, openembedded-core

[-- Attachment #1: Type: text/plain, Size: 1250 bytes --]

On Mon, Dec 10, 2012 at 10:44 AM, Richard Purdie <
richard.purdie@linuxfoundation.org> wrote:

> > E.g. in class alpha:
> >
> > inherit beta
> >
> > alpha_do_stuff () {
> >    pre_stuff
> >    beta_do_stuff
> >    post_stuff
> > }
> >
> > But this is a theoretical case, and often we hack around things via
> > _prepend/_append rather than doing things like this, so I doubt this
> > is actually done anywhere in practice.
>
> With an "EXPORT_FUNCTIONS = do_stuff" in alpha.bbclass, wouldn't that
> still work without the intermediaries though?
>

Hmm, yes, good point. Perhaps it was to allow the user to override an
intermediate function that might or might not exist?

E.g. in the do_configure calls gnomebase_do_configure calls
autotools_do_configure case, the user could override
gnomebase_do_configure, without having to know whether or not gnomebase
actually defines a configure function?

I'm guessing here, but that *could* be why it was implemented this way. In
practice, however, we have to know what our classes are doing anyway, most
of the time, for a wide variety of reasons. E.g. uses of overrides have to
be operated against carefully to avoid your changes being blown away.
-- 
Christopher Larson

[-- Attachment #2: Type: text/html, Size: 2062 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: EXPORT_FUNCTIONS - change in behaviour proposal
  2012-12-10 19:41       ` [bitbake-devel] " Chris Larson
@ 2012-12-11  0:12         ` Richard Purdie
  -1 siblings, 0 replies; 9+ messages in thread
From: Richard Purdie @ 2012-12-11  0:12 UTC (permalink / raw)
  To: Chris Larson; +Cc: bitbake-devel, openembedded-core

On Mon, 2012-12-10 at 12:41 -0700, Chris Larson wrote:
> On Mon, Dec 10, 2012 at 10:44 AM, Richard Purdie
> <richard.purdie@linuxfoundation.org> wrote:
>         > E.g. in class alpha:
>         >
>         > inherit beta
>         >
>         > alpha_do_stuff () {
>         >    pre_stuff
>         >    beta_do_stuff
>         >    post_stuff
>         > }
>         >
>         > But this is a theoretical case, and often we hack around
>         things via
>         > _prepend/_append rather than doing things like this, so I
>         doubt this
>         > is actually done anywhere in practice.
>         
>         
>         With an "EXPORT_FUNCTIONS = do_stuff" in alpha.bbclass,
>         wouldn't that
>         still work without the intermediaries though?
> 
> Hmm, yes, good point. Perhaps it was to allow the user to override an
> intermediate function that might or might not exist?
>
> E.g. in the do_configure calls gnomebase_do_configure calls
> autotools_do_configure case, the user could override
> gnomebase_do_configure, without having to know whether or not
> gnomebase actually defines a configure function?
>
> I'm guessing here, but that *could* be why it was implemented this
> way. In practice, however, we have to know what our classes are doing
> anyway, most of the time, for a wide variety of reasons. E.g. uses of
> overrides have to be operated against carefully to avoid your changes
> being blown away.

Could well be this was the reason. I think the exact class the current
code will pick for any intermediary is determined by parse order and I
can't find any case we actually use this property. As you say, I can't
see it being that useful in practise.

I've proposed a bitbake patch which removes the intermediary and
simplifies things a bit.

Cheers,

Richard





^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [bitbake-devel] EXPORT_FUNCTIONS - change in behaviour proposal
@ 2012-12-11  0:12         ` Richard Purdie
  0 siblings, 0 replies; 9+ messages in thread
From: Richard Purdie @ 2012-12-11  0:12 UTC (permalink / raw)
  To: Chris Larson; +Cc: bitbake-devel, openembedded-core

On Mon, 2012-12-10 at 12:41 -0700, Chris Larson wrote:
> On Mon, Dec 10, 2012 at 10:44 AM, Richard Purdie
> <richard.purdie@linuxfoundation.org> wrote:
>         > E.g. in class alpha:
>         >
>         > inherit beta
>         >
>         > alpha_do_stuff () {
>         >    pre_stuff
>         >    beta_do_stuff
>         >    post_stuff
>         > }
>         >
>         > But this is a theoretical case, and often we hack around
>         things via
>         > _prepend/_append rather than doing things like this, so I
>         doubt this
>         > is actually done anywhere in practice.
>         
>         
>         With an "EXPORT_FUNCTIONS = do_stuff" in alpha.bbclass,
>         wouldn't that
>         still work without the intermediaries though?
> 
> Hmm, yes, good point. Perhaps it was to allow the user to override an
> intermediate function that might or might not exist?
>
> E.g. in the do_configure calls gnomebase_do_configure calls
> autotools_do_configure case, the user could override
> gnomebase_do_configure, without having to know whether or not
> gnomebase actually defines a configure function?
>
> I'm guessing here, but that *could* be why it was implemented this
> way. In practice, however, we have to know what our classes are doing
> anyway, most of the time, for a wide variety of reasons. E.g. uses of
> overrides have to be operated against carefully to avoid your changes
> being blown away.

Could well be this was the reason. I think the exact class the current
code will pick for any intermediary is determined by parse order and I
can't find any case we actually use this property. As you say, I can't
see it being that useful in practise.

I've proposed a bitbake patch which removes the intermediary and
simplifies things a bit.

Cheers,

Richard





^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2012-12-11  0:26 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-12-10 16:09 EXPORT_FUNCTIONS - change in behaviour proposal Richard Purdie
2012-12-10 17:29 ` Chris Larson
2012-12-10 17:29   ` [bitbake-devel] " Chris Larson
2012-12-10 17:44   ` Richard Purdie
2012-12-10 17:44     ` [bitbake-devel] " Richard Purdie
2012-12-10 19:41     ` Chris Larson
2012-12-10 19:41       ` [bitbake-devel] " Chris Larson
2012-12-11  0:12       ` Richard Purdie
2012-12-11  0:12         ` [bitbake-devel] " Richard Purdie

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.