Skip to contentSkip to conversation

autotools-package: also handle pre-installed external toolchain in .la fixup

PATCH New Arnout Vandecappelle (Essensium/Mind) 3 participants 9 messages May 2, 2015 – May 3, 2015

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 autotools-package: also handle pre-installed external toolchain in .la fixup

The .la fixup handling looks for paths starting with /usr and assumes that they are missing the installation prefix (i.e. $(STAGING_DIR)). It already handles the cases that $(STAGING_DIR) itself and $(BASE_DIR) are under /usr, but it does not yet handle the case that a pre-installed external toolchain is under /usr (and tracks that fact in some .la file). For instance, if you use buildroot to generate a toolchain with HOST_DIR=/usr/local/some_path, this problem will occur.

Fix this in the same way as $(STAGING_DIR) and $(BASE_DIR), but in addition check that TOOLCHAIN_EXTERNAL_INSTALL_DIR is non-empty. For internal toolchains, it is empty and the sed expression would fail.

---
I haven't been able to test this very extensively because it's not so easy to find .la files where it goes wrong.

Carlos, can you check if this patch solves the problem for you?

---
 package/pkg-autotools.mk | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)
package/pkg-autotools.mk +11 -4
index 49b42d4..9dea08a 100644
@@ -304,10 +304,13 @@ endif
 # needs to be applied to any path that starts with /usr.
 #
 # To protect against the case that the output or staging directories
-# themselves are under /usr, we first substitute away any occurrences
-# of these directories as @BASE_DIR@ and @STAGING_DIR at . Note that
-# STAGING_DIR can be outside BASE_DIR when the user sets BR2_HOST_DIR
-# to a custom value.
+# or the pre-installed external toolchain themselves are under /usr,
+# we first substitute away any occurrences of these directories as
+# @BASE_DIR@, @STAGING_DIR@ and @TOOLCHAIN_EXTERNAL_INSTALL_DIR@ respectively.
+# Note that STAGING_DIR can be outside BASE_DIR when the user sets
+# BR2_HOST_DIR to a custom value. Note that TOOLCHAIN_EXTERNAL_INSTALL_DIR
+# can be under @BASE_DIR@ when it's a downloaded toolchain, and can be empty
+# when we use an internal toolchain.
 #
 ifndef $(2)_INSTALL_STAGING_CMDS
 define $(2)_INSTALL_STAGING_CMDS
@@ -315,7 +318,11 @@ define $(2)_INSTALL_STAGING_CMDS
 	find $$(STAGING_DIR)/usr/lib* -name "*.la" | xargs --no-run-if-empty \
 		$$(SED) "s:$$(BASE_DIR):@BASE_DIR@:g" \
 			-e "s:$$(STAGING_DIR):@STAGING_DIR@:g" \
+			$$(if $$(TOOLCHAIN_EXTERNAL_INSTALL_DIR),\
+				-e "s:$$(TOOLCHAIN_EXTERNAL_INSTALL_DIR):@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:g") \
 			-e "s:\(['= ]\)/usr:\\1 at STAGING_DIR@/usr:g" \
+			$$(if $$(TOOLCHAIN_EXTERNAL_INSTALL_DIR),\
+				-e "s:@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:$$(TOOLCHAIN_EXTERNAL_INSTALL_DIR):g") \
 			-e "s:@STAGING_DIR@:$$(STAGING_DIR):g" \
 			-e "s:@BASE_DIR@:$$(BASE_DIR):g"
 endef
Signature · 1 line
2.1.4
#1 lore raw

PATCH 1/1 autotools-package: also handle pre-installed external toolchain in .la fixup

Arnout, All,

On 2015-05-02 23:50 +0200, Arnout Vandecappelle (Essensium/Mind) spake thusly:

Quoted 8 lines

The .la fixup handling looks for paths starting with /usr and assumes that they are missing the installation prefix (i.e. $(STAGING_DIR)). It already handles the cases that $(STAGING_DIR) itself and $(BASE_DIR) are under /usr, but it does not yet handle the case that a pre-installed external toolchain is under /usr (and tracks that fact in some .la file). For instance, if you use buildroot to generate a toolchain with HOST_DIR=/usr/local/some_path, this problem will occur.

Quoted 7 lines

Fix this in the same way as $(STAGING_DIR) and $(BASE_DIR), but in addition check that TOOLCHAIN_EXTERNAL_INSTALL_DIR is non-empty. For internal toolchains, it is empty and the sed expression would fail.

I however wonder: shouldn't we do that .la munging in a hook that we forcibly add to the list of post-staging-install hooks, so that it is run even for those packages that redefine their _INSTALL_STAGING_CMDS ?

Regards,
Yann E. MORIN.

Quoted 50 lines

---
I haven't been able to test this very extensively because it's not so easy to find .la files where it goes wrong.

Carlos, can you check if this patch solves the problem for you?

---
 package/pkg-autotools.mk | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)
package/pkg-autotools.mk +11 -4
index 49b42d4..9dea08a 100644
@@ -304,10 +304,13 @@ endif
 # needs to be applied to any path that starts with /usr.
 #
 # To protect against the case that the output or staging directories
-# themselves are under /usr, we first substitute away any occurrences
-# of these directories as @BASE_DIR@ and @STAGING_DIR at . Note that
-# STAGING_DIR can be outside BASE_DIR when the user sets BR2_HOST_DIR
-# to a custom value.
+# or the pre-installed external toolchain themselves are under /usr,
+# we first substitute away any occurrences of these directories as
+# @BASE_DIR@, @STAGING_DIR@ and @TOOLCHAIN_EXTERNAL_INSTALL_DIR@ respectively.
+# Note that STAGING_DIR can be outside BASE_DIR when the user sets
+# BR2_HOST_DIR to a custom value. Note that TOOLCHAIN_EXTERNAL_INSTALL_DIR
+# can be under @BASE_DIR@ when it's a downloaded toolchain, and can be empty
+# when we use an internal toolchain.
 #
 ifndef $(2)_INSTALL_STAGING_CMDS
 define $(2)_INSTALL_STAGING_CMDS
@@ -315,7 +318,11 @@ define $(2)_INSTALL_STAGING_CMDS
 	find $$(STAGING_DIR)/usr/lib* -name "*.la" | xargs --no-run-if-empty \
 		$$(SED) "s:$$(BASE_DIR):@BASE_DIR@:g" \
 			-e "s:$$(STAGING_DIR):@STAGING_DIR@:g" \
+			$$(if $$(TOOLCHAIN_EXTERNAL_INSTALL_DIR),\
+				-e "s:$$(TOOLCHAIN_EXTERNAL_INSTALL_DIR):@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:g") \
 			-e "s:\(['= ]\)/usr:\\1 at STAGING_DIR@/usr:g" \
+			$$(if $$(TOOLCHAIN_EXTERNAL_INSTALL_DIR),\
+				-e "s:@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:$$(TOOLCHAIN_EXTERNAL_INSTALL_DIR):g") \
 			-e "s:@STAGING_DIR@:$$(STAGING_DIR):g" \
 			-e "s:@BASE_DIR@:$$(BASE_DIR):g"
 endef
Signature · 6 lines
2.1.4

_______________________________________________
buildroot mailing list
buildroot at busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#2 lore raw

PATCH 1/1 autotools-package: also handle pre-installed external toolchain in .la fixup

Quoted 19 lines · Yann E. MORIN

Arnout, All,

On 2015-05-02 23:50 +0200, Arnout Vandecappelle (Essensium/Mind) spake thusly:

Quoted 8 lines

The .la fixup handling looks for paths starting with /usr and assumes that they are missing the installation prefix (i.e. $(STAGING_DIR)). It already handles the cases that $(STAGING_DIR) itself and $(BASE_DIR) are under /usr, but it does not yet handle the case that a pre-installed external toolchain is under /usr (and tracks that fact in some .la file). For instance, if you use buildroot to generate a toolchain with HOST_DIR=/usr/local/some_path, this problem will occur.

Quoted 7 lines

Fix this in the same way as $(STAGING_DIR) and $(BASE_DIR), but in addition check that TOOLCHAIN_EXTERNAL_INSTALL_DIR is non-empty. For internal toolchains, it is empty and the sed expression would fail.

Quoted 5 lines

I however wonder: shouldn't we do that .la munging in a hook that we forcibly add to the list of post-staging-install hooks, so that it is run even for those packages that redefine their _INSTALL_STAGING_CMDS ?

I had the same thought... Even more: it is not really tied to autotools-package
because generic packages may also use libtool, so it could go directly into the .stamp_staging_installed code.

Regards,
Arnout

Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
#3 lore raw

PATCH 1/1 autotools-package: also handle pre-installed external toolchain in .la fixup

Arnout, All,

On 2015-05-03 11:43 +0200, Arnout Vandecappelle spake thusly:

Quoted 20 lines · Yann E. MORIN
Quoted 19 lines

On 2015-05-02 23:50 +0200, Arnout Vandecappelle (Essensium/Mind) spake thusly:

Quoted 8 lines

The .la fixup handling looks for paths starting with /usr and assumes that they are missing the installation prefix (i.e. $(STAGING_DIR)). It already handles the cases that $(STAGING_DIR) itself and $(BASE_DIR) are under /usr, but it does not yet handle the case that a pre-installed external toolchain is under /usr (and tracks that fact in some .la file). For instance, if you use buildroot to generate a toolchain with HOST_DIR=/usr/local/some_path, this problem will occur.

Quoted 7 lines

Fix this in the same way as $(STAGING_DIR) and $(BASE_DIR), but in addition check that TOOLCHAIN_EXTERNAL_INSTALL_DIR is non-empty. For internal toolchains, it is empty and the sed expression would fail.

Quoted 7 lines
Quoted 3 lines

I however wonder: shouldn't we do that .la munging in a hook that we forcibly add to the list of post-staging-install hooks, so that it is run even for those packages that redefine their _INSTALL_STAGING_CMDS ?

I had the same thought... Even more: it is not really tied to autotools-package
because generic packages may also use libtool, so it could go directly into the .stamp_staging_installed code.

Agreed. Shall I do it, or do you already have something on your side?

Regards,
Yann E. MORIN.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#4 lore raw

PATCH 1/1 autotools-package: also handle pre-installed external toolchain in .la fixup

In reply to Arnout Vandecappelle (Essensium/Mind)

2015-05-02 23:50 GMT+02:00 Arnout Vandecappelle (Essensium/Mind) < [email protected]>:

Quoted 12 lines

The .la fixup handling looks for paths starting with /usr and assumes that they are missing the installation prefix (i.e. $(STAGING_DIR)). It already handles the cases that $(STAGING_DIR) itself and $(BASE_DIR) are under /usr, but it does not yet handle the case that a pre-installed external toolchain is under /usr (and tracks that fact in some .la file). For instance, if you use buildroot to generate a toolchain with HOST_DIR=/usr/local/some_path, this problem will occur.

Fix this in the same way as $(STAGING_DIR) and $(BASE_DIR), but in addition check that TOOLCHAIN_EXTERNAL_INSTALL_DIR is non-empty. For internal toolchains, it is empty and the sed expression would fail.

Quoted 9 lines

---
I haven't been able to test this very extensively because it's not so easy to find .la files where it goes wrong.

Carlos, can you check if this patch solves the problem for you?

Hi Arnout,
I'm afraid it does not work. I've tried patching buildroot but it gave me
errors. So I've applied manually the changes to pkg-autotools.mk and that's
what happened after a make clean && make
find /home/starsl/iMX6/buildroot/output/host/usr/arm-buildroot-linux-gnueabihf/sysroot/usr/lib* -name "*.la" | xargs --no-run-if-empty /bin/sed -i -e "s:/home/starsl/iMX6/buildroot/output:@BASE_DIR@:g" -e "s:/home/starsl/iMX6/buildroot/output/host/usr/arm-buildroot-linux-gnueabihf/sysroot:@STAGING_DIR@:g" -e "s:/usr/local/xtools/arm-cortexa9_neon-linux-gnueabihf:@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:g" -e "s:\(['= ]\)/usr:\\1 at STAGING_DIR@/usr:g" -e "s:@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:/usr/local/xtools/arm-cortexa9_neon-linux-gnueabihf:g" \
/bin/sed: can't read : No such file or directory
make: *** [/home/starsl/iMX6/buildroot/output/build/alsa-lib-1.0.28/.stamp_staging_installed] Error 123

Quoted 43 lines
---
 package/pkg-autotools.mk | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)
package/pkg-autotools.mk +3 -4
index 49b42d4..9dea08a 100644
@@ -304,10 +304,13 @@ endif
 # needs to be applied to any path that starts with /usr.
 #
 # To protect against the case that the output or staging directories
-# themselves are under /usr, we first substitute away any occurrences
-# of these directories as @BASE_DIR@ and @STAGING_DIR at . Note that
-# STAGING_DIR can be outside BASE_DIR when the user sets BR2_HOST_DIR
-# to a custom value.
+# or the pre-installed external toolchain themselves are under /usr,
+# we first substitute away any occurrences of these directories as
+# @BASE_DIR@, @STAGING_DIR@ and @TOOLCHAIN_EXTERNAL_INSTALL_DIR@

respectively.

package/pkg-autotools.mk +3 -0
+# Note that STAGING_DIR can be outside BASE_DIR when the user sets
+# BR2_HOST_DIR to a custom value. Note that TOOLCHAIN_EXTERNAL_INSTALL_DIR
+# can be under @BASE_DIR@ when it's a downloaded toolchain, and can be

empty

package/pkg-autotools.mk +5 -1
+# when we use an internal toolchain.
 #
 ifndef $(2)_INSTALL_STAGING_CMDS
 define $(2)_INSTALL_STAGING_CMDS
@@ -315,7 +318,11 @@ define $(2)_INSTALL_STAGING_CMDS
        find $$(STAGING_DIR)/usr/lib* -name "*.la" | xargs
--no-run-if-empty \
                $$(SED) "s:$$(BASE_DIR):@BASE_DIR@:g" \
                        -e "s:$$(STAGING_DIR):@STAGING_DIR@:g" \
+                       $$(if $$(TOOLCHAIN_EXTERNAL_INSTALL_DIR),\
+                               -e
 "s:$$(TOOLCHAIN_EXTERNAL_INSTALL_DIR):@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:g")
 \
                        -e "s:\(['= ]\)/usr:\\1 at STAGING_DIR@/usr:g" \
+                       $$(if $$(TOOLCHAIN_EXTERNAL_INSTALL_DIR),\
+                               -e "s:@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:$$(TOOLCHAIN_EXTERNAL_INSTALL_DIR):g")
\
                        -e "s:@STAGING_DIR@:$$(STAGING_DIR):g" \
                        -e "s:@BASE_DIR@:$$(BASE_DIR):g"
Quoted 5 lines

endef
--
2.1.4

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20150503/6ac25091/attachment.html>

#5 lore raw

PATCH 1/1 autotools-package: also handle pre-installed external toolchain in .la fixup

Quoted 26 lines · Carlos Soto

2015-05-02 23:50 GMT+02:00 Arnout Vandecappelle (Essensium/Mind) <[email protected] <mailto:[email protected]>>:

The .la fixup handling looks for paths starting with /usr and assumes that they are missing the installation prefix (i.e. $(STAGING_DIR)). It already handles the cases that $(STAGING_DIR) itself and $(BASE_DIR) are under /usr, but it does not yet handle the case that a pre-installed external toolchain is under /usr (and tracks that fact in some .la file). For instance, if you use buildroot to generate a toolchain with HOST_DIR=/usr/local/some_path, this problem will occur.

Fix this in the same way as $(STAGING_DIR) and $(BASE_DIR), but in addition check that TOOLCHAIN_EXTERNAL_INSTALL_DIR is non-empty. For internal toolchains, it is empty and the sed expression would fail.

<mailto:[email protected]>>

Reported-by Carlos Soto <csotoalonso at gmail.com <mailto:[email protected]>>
Cc Carlos Soto <csotoalonso at gmail.com <mailto:[email protected]>>

---
I haven't been able to test this very extensively because it's not so easy to find .la files where it goes wrong.

Carlos, can you check if this patch solves the problem for you?

Quoted 14 lines

Hi Arnout,
I'm afraid it does not work. I've tried patching buildroot but it gave me
errors. So I've applied manually the changes to pkg-autotools.mk
<http://pkg-autotools.mk> and that's what happened after a make clean && make
find /home/starsl/iMX6/buildroot/output/host/usr/arm-buildroot-linux-gnueabihf/sysroot/usr/lib* -name "*.la" | xargs --no-run-if-empty /bin/sed -i -e "s:/home/starsl/iMX6/buildroot/output:@BASE_DIR@:g" -e "s:/home/starsl/iMX6/buildroot/output/host/usr/arm-buildroot-linux-gnueabihf/sysroot:@STAGING_DIR@:g" -e "s:/usr/local/xtools/arm-cortexa9_neon-linux-gnueabihf:@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:g" -e "s:\(['= ]\)/usr:\\1 at STAGING_DIR@/usr:g" -e "s:@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:/usr/local/xtools/arm-cortexa9_neon-linux-gnueabihf:g" \

You did something wrong when manually applying the patch: there's a spurious \
at the end. At least, I think that that's the problem. Can you post the relevant part of pkg-autotools.mk to be sure?

Regards,
Arnout

Quoted 7 lines

/bin/sed: can't read : No such file or directory
make: *** [/home/starsl/iMX6/buildroot/output/build/alsa-lib-1.0.28/.stamp_staging_installed] Error 123

[snip]

Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
#6 lore raw

PATCH 1/1 autotools-package: also handle pre-installed external toolchain in .la fixup

2015-05-03 18:26 GMT+02:00 Arnout Vandecappelle <[email protected]>:

Quoted 54 lines · Carlos Soto
Quoted 1 line

2015-05-02 23:50 GMT+02:00 Arnout Vandecappelle (Essensium/Mind) <

arnout at mind.be

Quoted 4 lines

<mailto:[email protected]>>:

The .la fixup handling looks for paths starting with /usr and assumes that they are missing the installation prefix (i.e. $(STAGING_DIR)).

It

Quoted 5 lines

already handles the cases that $(STAGING_DIR) itself and $(BASE_DIR) are under /usr, but it does not yet handle the case that a pre-installed external toolchain is under /usr (and tracks that fact in some .la file). For instance, if you use buildroot to generate a toolchain with HOST_DIR=/usr/local/some_path, this problem will

occur.

Quoted 8 lines

Fix this in the same way as $(STAGING_DIR) and $(BASE_DIR), but in addition check that TOOLCHAIN_EXTERNAL_INSTALL_DIR is non-empty. For internal toolchains, it is empty and the sed expression would fail.

<mailto:[email protected]>>

csotoalonso at gmail.com>>

Quoted 6 lines
Cc Carlos Soto <csotoalonso at gmail.com <mailto:[email protected]
Quoted 1 line

---
I haven't been able to test this very extensively because it's not so easy to find .la files where it goes wrong.

Quoted 7 lines

Carlos, can you check if this patch solves the problem for you?

Hi Arnout,
I'm afraid it does not work. I've tried patching buildroot but it gave me errors. So I've applied manually the changes to pkg-autotools.mk
<http://pkg-autotools.mk> and that's what happened after a make clean

&& make

Quoted 2 lines

find

/home/starsl/iMX6/buildroot/output/host/usr/arm-buildroot-linux-gnueabihf/sysroot/usr/lib*

Quoted 3 lines

-name "*.la" | xargs --no-run-if-empty /bin/sed -i -e "s:/home/starsl/iMX6/buildroot/output:@BASE_DIR@:g" -e

"s:/home/starsl/iMX6/buildroot/output/host/usr/arm-buildroot-linux-gnueabihf/sysroot:@STAGING_DIR @:g"

Quoted 2 lines

-e

"s:/usr/local/xtools/arm-cortexa9_neon-linux-gnueabihf:@TOOLCHAIN_EXTERNAL_INSTALL_DIR @:g"

Quoted 2 lines

-e "s:\(['= ]\)/usr:\\1 at STAGING_DIR@/usr:g" -e "s:@TOOLCHAIN_EXTERNAL_INSTALL_DIR

@:/usr/local/xtools/arm-cortexa9_neon-linux-gnueabihf:g"

Quoted 1 line

\

Quoted 10 lines

You did something wrong when manually applying the patch: there's a
spurious \
at the end. At least, I think that that's the problem. Can you post the relevant
part of pkg-autotools.mk to be sure?

Regards,
Arnout

Sure, here it is:

# or the pre-installed external toolchain themselves are under /usr,
# we first substitute away any occurrences of these directories as
# @BASE_DIR@, @STAGING_DIR@ and @TOOLCHAIN_EXTERNAL_INSTALL_DIR@
respectively.
# Note that STAGING_DIR can be outside BASE_DIR when the user sets
# BR2_HOST_DIR to a custom value. Note that TOOLCHAIN_EXTERNAL_INSTALL_DIR
# can be under @BASE_DIR@ when it's a downloaded toolchain, and can be empty
# when we use an internal toolchain.
#
ifndef $(2)_INSTALL_STAGING_CMDS
define $(2)_INSTALL_STAGING_CMDS
    $$(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE)
$$($$(PKG)_INSTALL_STAGING_OPTS) -C $$($$(PKG)_SRCDIR)
    find $$(STAGING_DIR)/usr/lib* -name "*.la" | xargs --no-run-if-empty \
        $$(SED) "s:$$(BASE_DIR):@BASE_DIR@:g" \
            -e "s:$$(STAGING_DIR):@STAGING_DIR@:g" \
            $$(if $$(TOOLCHAIN_EXTERNAL_INSTALL_DIR),\
                -e
"s:$$(TOOLCHAIN_EXTERNAL_INSTALL_DIR):@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:g") \
            -e "s:\(['= ]\)/usr:\\1 at STAGING_DIR@/usr:g" \
            $$(if $$(TOOLCHAIN_EXTERNAL_INSTALL_DIR),\
                -e
"s:@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:$$(TOOLCHAIN_EXTERNAL_INSTALL_DIR):g")
\
            -e "s:@STAGING_DIR@:$$(STAGING_DIR):g" \
            -e "s:@BASE_DIR@:$$(BASE_DIR):g"
endef
endif
Quoted 10 lines

[snip]

--

Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20150503/ab2872d8/attachment.html>

#7 lore raw

PATCH 1/1 autotools-package: also handle pre-installed external toolchain in .la fixup

Quoted 71 lines · Carlos Soto

2015-05-03 18:26 GMT+02:00 Arnout Vandecappelle <[email protected] <mailto:[email protected]>>:

On 03/05/15 18:11, Carlos Soto wrote:
> 2015-05-02 23:50 GMT+02:00 Arnout Vandecappelle (Essensium/Mind) <arnout at mind.be <mailto:[email protected]> > <mailto:arnout at mind.be <mailto:[email protected]>>>:
>
> The .la fixup handling looks for paths starting with /usr and assumes
> that they are missing the installation prefix (i.e. $(STAGING_DIR)). It
> already handles the cases that $(STAGING_DIR) itself and $(BASE_DIR)
> are under /usr, but it does not yet handle the case that a
> pre-installed external toolchain is under /usr (and tracks that fact
> in some .la file). For instance, if you use buildroot to generate a
> toolchain with HOST_DIR=/usr/local/some_path, this problem will occur.
>
> Fix this in the same way as $(STAGING_DIR) and $(BASE_DIR), but in
> addition check that TOOLCHAIN_EXTERNAL_INSTALL_DIR is non-empty. For
> internal toolchains, it is empty and the sed expression would fail.
>
> Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout at mind.be <mailto:[email protected]>
> <mailto:arnout at mind.be <mailto:[email protected]>>>
> Reported-by: Carlos Soto <[email protected]
<mailto:[email protected]> <mailto:[email protected] <mailto:[email protected]>>>
> Cc: Carlos Soto <csotoalonso at gmail.com <mailto:[email protected]>
<mailto:csotoalonso at gmail.com <mailto:[email protected]>>>
> ---
> I haven't been able to test this very extensively because it's not so
> easy to find .la files where it goes wrong.
>
> Carlos, can you check if this patch solves the problem for you?
>
>
> Hi Arnout,
> I'm afraid it does not work. I've tried patching buildroot but it gave me
> errors. So I've applied manually the changes to pkg-autotools.mk <http://pkg-autotools.mk>
> <http://pkg-autotools.mk> and that's what happened after a make clean && make
> find
> /home/starsl/iMX6/buildroot/output/host/usr/arm-buildroot-linux-gnueabihf/sysroot/usr/lib* > -name "*.la" | xargs --no-run-if-empty /bin/sed -i -e
> "s:/home/starsl/iMX6/buildroot/output:@BASE_DIR@:g" -e
> "s:/home/starsl/iMX6/buildroot/output/host/usr/arm-buildroot-linux-gnueabihf/sysroot:@STAGING_DIR@:g" > -e
> "s:/usr/local/xtools/arm-cortexa9_neon-linux-gnueabihf:@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:g" > -e "s:\(['= ]\)/usr:\\1 at STAGING_DIR@/usr:g" -e
> "s:@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:/usr/local/xtools/arm-cortexa9_neon-linux-gnueabihf:g" > \

You did something wrong when manually applying the patch: there's a spurious \
at the end. At least, I think that that's the problem. Can you post the relevant part of pkg-autotools.mk <http://pkg-autotools.mk> to be sure?

Regards,
Arnout

Sure, here it is:

# or the pre-installed external toolchain themselves are under /usr,
# we first substitute away any occurrences of these directories as
# @BASE_DIR@, @STAGING_DIR@ and @TOOLCHAIN_EXTERNAL_INSTALL_DIR@ respectively.
# Note that STAGING_DIR can be outside BASE_DIR when the user sets
# BR2_HOST_DIR to a custom value. Note that TOOLCHAIN_EXTERNAL_INSTALL_DIR
# can be under @BASE_DIR@ when it's a downloaded toolchain, and can be empty
# when we use an internal toolchain.
#
ifndef $(2)_INSTALL_STAGING_CMDS
define $(2)_INSTALL_STAGING_CMDS
    $$(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE)
$$($$(PKG)_INSTALL_STAGING_OPTS) -C $$($$(PKG)_SRCDIR)
    find $$(STAGING_DIR)/usr/lib* -name "*.la" | xargs --no-run-if-empty \
        $$(SED) "s:$$(BASE_DIR):@BASE_DIR@:g" \
Quoted 9 lines
            -e "s:$$(STAGING_DIR):@STAGING_DIR@:g" \
            $$(if $$(TOOLCHAIN_EXTERNAL_INSTALL_DIR),\
                -e
"s:$$(TOOLCHAIN_EXTERNAL_INSTALL_DIR):@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:g") \
            -e "s:\(['= ]\)/usr:\\1 at STAGING_DIR@/usr:g" \
            $$(if $$(TOOLCHAIN_EXTERNAL_INSTALL_DIR),\
                -e
"s:@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:$$(TOOLCHAIN_EXTERNAL_INSTALL_DIR):g") \   

Can you double-check that there is no space behind the \ here?

Regards,
Arnout

Quoted 20 lines
            -e "s:@STAGING_DIR@:$$(STAGING_DIR):g" \
            -e "s:@BASE_DIR@:$$(BASE_DIR):g"

endef
endif

[snip]

--
Arnout Vandecappelle arnout at mind be
Senior Embedded Software Architect +32-16-286500
Essensium/Mind http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint: 7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
#8 lore raw

PATCH 1/1 autotools-package: also handle pre-installed external toolchain in .la fixup

2015-05-03 18:38 GMT+02:00 Arnout Vandecappelle <[email protected]>:

Quoted 109 lines · Carlos Soto
Quoted 5 lines

2015-05-03 18:26 GMT+02:00 Arnout Vandecappelle <[email protected] <mailto:[email protected]>>:

    On 03/05/15 18:11, Carlos Soto wrote:
    > 2015-05-02 23:50 GMT+02:00 Arnout Vandecappelle (Essensium/Mind) <

arnout at mind.be <mailto:[email protected]>

Quoted 3 lines
Quoted 3 lines

<mailto:arnout at mind.be <mailto:[email protected]>>>:

The .la fixup handling looks for paths starting with /usr and

assumes

Quoted 1 line
Quoted 1 line

that they are missing the installation prefix (i.e.

$(STAGING_DIR)). It

Quoted 1 line
Quoted 1 line
    already handles the cases that $(STAGING_DIR) itself and

$(BASE_DIR)

Quoted 2 lines
Quoted 2 lines

are under /usr, but it does not yet handle the case that a pre-installed external toolchain is under /usr (and tracks

that fact

Quoted 1 line
Quoted 1 line

in some .la file). For instance, if you use buildroot to

generate a

Quoted 1 line
Quoted 1 line

toolchain with HOST_DIR=/usr/local/some_path, this problem

will occur.

Quoted 2 lines
Quoted 2 lines
    Fix this in the same way as $(STAGING_DIR) and $(BASE_DIR),

but in

Quoted 1 line
Quoted 1 line

addition check that TOOLCHAIN_EXTERNAL_INSTALL_DIR is

non-empty. For

Quoted 1 line
Quoted 1 line

internal toolchains, it is empty and the sed expression would

fail.

Quoted 2 lines
Quoted 2 lines
Signed-off-by Arnout Vandecappelle (Essensium/Mind) <

arnout at mind.be <mailto:[email protected]>

Quoted 5 lines
Quoted 2 lines

<mailto:arnout at mind.be <mailto:[email protected]>>>

<mailto:[email protected]> <mailto:[email protected] <mailto:[email protected]>>>
> Cc: Carlos Soto <[email protected] <mailto:

csotoalonso at gmail.com>

Quoted 3 lines

<mailto:csotoalonso at gmail.com <mailto:[email protected]>>>
> ---
> I haven't been able to test this very extensively because it's

not so

Quoted 7 lines
Quoted 7 lines

easy to find .la files where it goes wrong.

Carlos, can you check if this patch solves the problem for you?

Hi Arnout,
I'm afraid it does not work. I've tried patching buildroot but it

gave me

Quoted 1 line
Quoted 1 line

errors. So I've applied manually the changes to pkg-autotools.mk <

http://pkg-autotools.mk>

Quoted 1 line
Quoted 1 line

<http://pkg-autotools.mk> and that's what happened after a make

clean && make

Quoted 2 lines
Quoted 2 lines

find

/home/starsl/iMX6/buildroot/output/host/usr/arm-buildroot-linux-gnueabihf/sysroot/usr/lib*

Quoted 3 lines
Quoted 3 lines

-name "*.la" | xargs --no-run-if-empty /bin/sed -i -e "s:/home/starsl/iMX6/buildroot/output:@BASE_DIR@:g" -e

"s:/home/starsl/iMX6/buildroot/output/host/usr/arm-buildroot-linux-gnueabihf/sysroot:@STAGING_DIR @:g"

Quoted 2 lines
Quoted 2 lines

-e

"s:/usr/local/xtools/arm-cortexa9_neon-linux-gnueabihf:@TOOLCHAIN_EXTERNAL_INSTALL_DIR @:g"

Quoted 2 lines
Quoted 2 lines

-e "s:\(['= ]\)/usr:\\1 at STAGING_DIR@/usr:g" -e "s:@TOOLCHAIN_EXTERNAL_INSTALL_DIR

@:/usr/local/xtools/arm-cortexa9_neon-linux-gnueabihf:g"

Quoted 3 lines
Quoted 1 line

\

You did something wrong when manually applying the patch: there's a

spurious \

Quoted 1 line

at the end. At least, I think that that's the problem. Can you post

the relevant

Quoted 10 lines

part of pkg-autotools.mk <http://pkg-autotools.mk> to be sure?

Regards,
Arnout

Sure, here it is:

# or the pre-installed external toolchain themselves are under /usr,
# we first substitute away any occurrences of these directories as
# @BASE_DIR@, @STAGING_DIR@ and @TOOLCHAIN_EXTERNAL_INSTALL_DIR@

respectively.

Quoted 2 lines

# Note that STAGING_DIR can be outside BASE_DIR when the user sets # BR2_HOST_DIR to a custom value. Note that

TOOLCHAIN_EXTERNAL_INSTALL_DIR

Quoted 1 line
# can be under @BASE_DIR@ when it's a downloaded toolchain, and can be

empty

Quoted 7 lines
# when we use an internal toolchain.
#
ifndef $(2)_INSTALL_STAGING_CMDS
define $(2)_INSTALL_STAGING_CMDS
    $$(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE)
$$($$(PKG)_INSTALL_STAGING_OPTS) -C $$($$(PKG)_SRCDIR)
    find $$(STAGING_DIR)/usr/lib* -name "*.la" | xargs --no-run-if-empty

\

Quoted 5 lines
        $$(SED) "s:$$(BASE_DIR):@BASE_DIR@:g" \
            -e "s:$$(STAGING_DIR):@STAGING_DIR@:g" \
            $$(if $$(TOOLCHAIN_EXTERNAL_INSTALL_DIR),\
                -e

"s:$$(TOOLCHAIN_EXTERNAL_INSTALL_DIR):@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:g")

\

Quoted 4 lines
            -e "s:\(['= ]\)/usr:\\1 at STAGING_DIR@/usr:g" \
            $$(if $$(TOOLCHAIN_EXTERNAL_INSTALL_DIR),\
                -e

"s:@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:$$(TOOLCHAIN_EXTERNAL_INSTALL_DIR):g")

Quoted 8 lines

\

Quoted 1 line

Can you double-check that there is no space behind the \ here?

Regards,
Arnout

Yes, that was the problem. I removed the trailing spaces and now the .la files in the staging directory all have the right path. Sorry about that Arnaut, and thank you very much for your help.

Regards,
Carlos

Quoted 24 lines
Quoted 10 lines
            -e "s:@STAGING_DIR@:$$(STAGING_DIR):g" \
            -e "s:@BASE_DIR@:$$(BASE_DIR):g"

endef
endif

Quoted 7 lines
    [snip]

    --
    Arnout Vandecappelle                          arnout at mind be
    Senior Embedded Software Architect            +32-16-286500
    Essensium/Mind                                http://www.mind.be
    G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR

Leuven

Quoted 4 lines

LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint: 7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

Quoted 8 lines

--

Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20150503/bbef456c/attachment.html>