[OE-core] [PATCHv2 05/16] tcl: Use SYSROOT_DIRS to add dirs to stage in sysroot
Peter Kjellerstedt
peter.kjellerstedt at axis.com
Tue May 31 09:02:40 UTC 2016
> -----Original Message-----
> From: Andreas Müller [mailto:schnitzeltony at googlemail.com]
> Sent: den 28 maj 2016 15:42
> To: Peter Kjellerstedt
> Cc: Patches and discussions about the oe-core layer
> Subject: Re: [OE-core] [PATCHv2 05/16] tcl: Use SYSROOT_DIRS to add
> dirs to stage in sysroot
>
> On Thu, May 26, 2016 at 10:14 PM, Andreas Müller
> <schnitzeltony at googlemail.com> wrote:
> > On Thu, May 26, 2016 at 3:41 PM, Peter Kjellerstedt
> > <peter.kjellerstedt at axis.com> wrote:
> >>> -----Original Message-----
> >>> From: Andreas Müller [mailto:schnitzeltony at googlemail.com]
> >>> Sent: den 26 maj 2016 14:00
> >>> To: Peter Kjellerstedt
> >>> Cc: Patches and discussions about the oe-core layer
> >>> Subject: Re: [OE-core] [PATCHv2 05/16] tcl: Use SYSROOT_DIRS to add
> >>> dirs to stage in sysroot
> >>>
> >>> On Thu, May 12, 2016 at 10:37 AM, Peter Kjellerstedt
> >>> <peter.kjellerstedt at axis.com> wrote:
> >>> > ---
> >>> > meta/recipes-devtools/tcltk/tcl_8.6.4.bb | 5 +----
> >>> > 1 file changed, 1 insertion(+), 4 deletions(-)
> >>> >
> >>> > diff --git a/meta/recipes-devtools/tcltk/tcl_8.6.4.bb
> b/meta/recipes-
> >>> devtools/tcltk/tcl_8.6.4.bb
> >>> > index 8e92b3e..61be81d 100644
> >>> > --- a/meta/recipes-devtools/tcltk/tcl_8.6.4.bb
> >>> > +++ b/meta/recipes-devtools/tcltk/tcl_8.6.4.bb
> >>> > @@ -68,10 +68,7 @@ do_install() {
> >>> > done
> >>> > }
> >>> >
> >>> > -SYSROOT_PREPROCESS_FUNCS += "tcl_sysroot_preprocess"
> >>> > -tcl_sysroot_preprocess () {
> >>> > - sysroot_stage_dir ${D}${bindir_crossscripts}
> ${SYSROOT_DESTDIR}${bindir_crossscripts}
> >>> > -}
> >>> > +SYSROOT_DIRS += "${bindir_crossscripts}"
> >>> >
> >>> > PACKAGES =+ "tcl-lib"
> >>> > FILES_tcl-lib = "${libdir}/libtcl8.6.so.*"
> >>> > --
> >>> > 2.1.0
> >>> >
> >>> This one breaks meta-oe's postgresql.
> >>>
> >>> Andreas
> >>
> >> Breaks it how?
> >>
> >> //Peter
> >>
> > Yes I agree I cannot see what's wrong with this patch - together with
> > modifications of staging.bbclass it should do same as before. For
> test
> > I reverted this patch and postgresql builds fine again. Have no idea
> > what's causing postgresql failure
> >
> > Some typo I don't see?
> >
> To get more infomation I
>
> * build with patch reverted
> * put sysroot under git control
> * remove revert again
>
> Don't know why but now we see absolute paths in tclConfig.sh:
>
> --- a/usr/bin/crossscripts/tclConfig.sh
> +++ b/usr/bin/crossscripts/tclConfig.sh
> @@ -57,7 +57,7 @@ TCL_SHLIB_CFLAGS='-fPIC'
> TCL_CFLAGS_WARNING='-Wall'
>
> # Extra flags to pass to cc:
> -TCL_EXTRA_CFLAGS=' -O2 -pipe -g -feliminate-unused-debug-types
> -fdebug-prefix-map=/home/superandy/tmp/oe-core-
> glibc/sysroots/raspberrypi2/usr/include=/usr/src/debug/tcl/8.6.4-r0
> -fdebug-prefix-map=/home/superandy/tmp/oe-core-glibc/sysroots/x86_64-
> linux=
> -fdebug-prefix-map=/home/superandy/tmp/oe-core-
> glibc/sysroots/raspberrypi2=
> -pipe '
> +TCL_EXTRA_CFLAGS=' -O2 -pipe -g -feliminate-unused-debug-types
> -fdebug-prefix-map=/home/superandy/tmp/oe-core-
> glibc/sysroots/raspberrypi2/usr/include=/home/superandy/tmp/oe-core-
> glibc/sysroots/raspberrypi2/usr/src/debug/tcl/8.6.4-r0
> -fdebug-prefix-map=/home/superandy/tmp/oe-core-glibc/sysroots/x86_64-
> linux=
> -fdebug-prefix-map=/home/superandy/tmp/oe-core-
> glibc/sysroots/raspberrypi2=
> -pipe '
>
> # Base command to use for combining object files into a shared
> library:
> TCL_SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
> @@ -104,11 +104,11 @@
> TCL_BUILD_LIB_SPEC='-L/home/superandy/tmp/oe-core-
> glibc/sysroots/raspberrypi2/us
>
> # String to pass to linker to pick up the Tcl library from its
> # installed directory.
> -TCL_LIB_SPEC='-L=/usr/lib -ltcl8.6'
> +TCL_LIB_SPEC='-L=/home/superandy/tmp/oe-core-
> glibc/sysroots/raspberrypi2/usr/lib
> -ltcl8.6'
>
> # String to pass to the compiler so that an extension can
> # find installed Tcl headers.
> -TCL_INCLUDE_SPEC='-I=/usr/include/tcl8.6'
> +TCL_INCLUDE_SPEC='-I=/home/superandy/tmp/oe-core-
> glibc/sysroots/raspberrypi2/usr/include/tcl8.6'
>
> # Indicates whether a version numbers should be used in -l switches
> # ("ok" means it's safe to use switches like -ltcl7.5; "nodots" means
> @@ -157,7 +157,7 @@
> TCL_BUILD_STUB_LIB_SPEC='-L/home/superandy/tmp/oe-core-
> glibc/sysroots/raspberryp
>
> # String to pass to linker to pick up the Tcl stub library from its
> # installed directory.
> -TCL_STUB_LIB_SPEC='-L=/usr/lib -ltclstub8.6'
> +TCL_STUB_LIB_SPEC='-L=/home/superandy/tmp/oe-core-
> glibc/sysroots/raspberrypi2/usr/lib
> -ltclstub8.6'
>
> # Path to the Tcl stub library in the build directory.
> TCL_BUILD_STUB_LIB_PATH='/home/superandy/tmp/oe-core-
> glibc/sysroots/raspberrypi2/usr/include/build/libtclstub8.6.a'
>
> This is the symptom but what is it caused by?
>
> Andreas
It seems to be an intricate history. The difference stems from the
the order things are executed in SYSROOT_PREPROCESS_FUNCS, the fact
that the tcl recipe inherits binconfig and that it sets
BINCONFIG_GLOB to "*Config.sh".
Before my change, the tcl_sysroot_preprocess() function was called
after the binconfig_sysroot_preprocess() function, and thus overwrote
the tclConfig.sh that the latter function had installed. After my
change the "correct" tclConfig.sh is installed by sysroot_stage_all()
which is run before binconfig_sysroot_preprocess() and thus the
latter now overwrites the "correct" tclConfig.sh with a "faulty"
version (I used "correct" and "faulty" here as I guess it depends
on one's point of view, and what one expect inheriting binconfig to
do...)
If I change:
BINCONFIG_GLOB = "*Config.sh"
to:
BINCONFIG_GLOB_class-target = "tclConfig.sh"
both the installed files in the sysroots and on target go back to
look exactly as they did before my change (and postgresql builds
again). Changing "*Config.sh" to "tclConfig.sh" will avoid
installing extra files in the sysroots (itclConfig.sh, tclooConfig.sh
and tdbcConfig.sh) as I do not think that was intended when the use
of binconfig was introduced for tcl (based on what is installed by
do_install()).
I will send a patch to fix the tcl recipe as per above.
//Peter
More information about the Openembedded-core
mailing list