All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [pull request] Pull request for branch for-2012.05/perl
@ 2012-03-27  7:06 Thomas Petazzoni
  2012-03-27  7:06 ` [Buildroot] [PATCH 1/2] microperl: fix MICROPERL_INSTALL_TARGET_CMDS Thomas Petazzoni
  2012-03-27  7:06 ` [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl Thomas Petazzoni
  0 siblings, 2 replies; 17+ messages in thread
From: Thomas Petazzoni @ 2012-03-27  7:06 UTC (permalink / raw)
  To: buildroot

The following changes since commit b5fd0f2709cab72f48da12a5804dd8670fffbf6e:

  Change the /etc/mtab symlink to use an absolute path (2012-03-19 17:08:13 +0100)

are available in the git repository at:
  git://git.free-electrons.com/users/thomas-petazzoni/buildroot.git for-2012.05/perl

Thomas Petazzoni (2):
      microperl: fix MICROPERL_INSTALL_TARGET_CMDS
      microperl: install host-microperl in $(HOST_DIR)/opt/perl

 package/microperl/microperl.mk |   28 ++++++++++++++++++----------
 1 files changed, 18 insertions(+), 10 deletions(-)

Thanks,
-- 
Thomas Petazzoni

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

* [Buildroot] [PATCH 1/2] microperl: fix MICROPERL_INSTALL_TARGET_CMDS
  2012-03-27  7:06 [Buildroot] [pull request] Pull request for branch for-2012.05/perl Thomas Petazzoni
@ 2012-03-27  7:06 ` Thomas Petazzoni
  2012-03-28  6:28   ` Peter Korsgaard
  2012-03-27  7:06 ` [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl Thomas Petazzoni
  1 sibling, 1 reply; 17+ messages in thread
From: Thomas Petazzoni @ 2012-03-27  7:06 UTC (permalink / raw)
  To: buildroot

The MICROPERL_INSTALL_TARGET_CMDS used the following construct in a
for loop:

		[ -d $(@D)/lib/$$j ] && cp -af $(@D)/lib/$$j \
			$(TARGET_DIR)/$(MICROPERL_MODS_DIR) ; \
		[ -f $(@D)/lib/$$i ] && $(INSTALL) -m 0644 -D $(@D)/lib/$$i \
			$(TARGET_DIR)/$(MICROPERL_MODS_DIR)/$$i; \

The problem is that when at the last iteration, the second test (-f)
fails, then the whole loop ends with a non-zero error code, and makes
aborts the build. This happens for example if the last Perl modules in
the list is Time::Local, because such modules are taken care of by the
first condition (that copies a complete directory).

By moving to full if statements, we ensure that the return code is
zero even if the condition was false.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/microperl/microperl.mk |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/package/microperl/microperl.mk b/package/microperl/microperl.mk
index d5b5a7c..5bf4a2e 100644
--- a/package/microperl/microperl.mk
+++ b/package/microperl/microperl.mk
@@ -132,10 +132,12 @@ define MICROPERL_INSTALL_TARGET_CMDS
 	$(MICROPERL_BUILD_EXTENSIONS)
 	for i in $(MICROPERL_MODS); do \
 		j=`echo $$i|cut -d : -f 1` ; \
-		[ -d $(@D)/lib/$$j ] && cp -af $(@D)/lib/$$j \
-			$(TARGET_DIR)/$(MICROPERL_MODS_DIR) ; \
-		[ -f $(@D)/lib/$$i ] && $(INSTALL) -m 0644 -D $(@D)/lib/$$i \
-			$(TARGET_DIR)/$(MICROPERL_MODS_DIR)/$$i; \
+		if [ -d $(@D)/lib/$$j ] ; then \
+			cp -af $(@D)/lib/$$j $(TARGET_DIR)/$(MICROPERL_MODS_DIR) ; \
+		fi ; \
+		if [ -f $(@D)/lib/$$i ] ; then \
+			$(INSTALL) -m 0644 -D $(@D)/lib/$$i $(TARGET_DIR)/$(MICROPERL_MODS_DIR)/$$i; \
+		fi ; \
 	done
 	# Remove test files
 	find $(TARGET_DIR)/$(MICROPERL_MODS_DIR) -type f -name *.t \
-- 
1.7.4.1

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

* [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl
  2012-03-27  7:06 [Buildroot] [pull request] Pull request for branch for-2012.05/perl Thomas Petazzoni
  2012-03-27  7:06 ` [Buildroot] [PATCH 1/2] microperl: fix MICROPERL_INSTALL_TARGET_CMDS Thomas Petazzoni
@ 2012-03-27  7:06 ` Thomas Petazzoni
  2012-03-27  7:12   ` Thomas Petazzoni
  2012-03-28  6:54   ` Peter Korsgaard
  1 sibling, 2 replies; 17+ messages in thread
From: Thomas Petazzoni @ 2012-03-27  7:06 UTC (permalink / raw)
  To: buildroot

This commit is a tentative at fixing some Perl-related build problems
we are having nowadays, due to the fact that microperl now depends on
host-microperl. Since the perl binary from host-microperl is installed
in $(HOST_DIR)/usr/bin, it gets picked up when we run host tools like
host-intltool, which were normally meant to be used against the
distribution-provided Perl.

This problem currently causes between a third to half of the failures
in our random build tests.

Another, cleaner, option would be to make host-intltool depend on
host-microperl, but this would require every user needing intltool to
build a host Perl interpreter, even if the real reason for build the
host Perl interpreter is only needed for those who want to build the
Perl interpreter for the target. This commit is really a test at
trying another solution than adding this dependency, to see whether it
turns out to be a reasonable trade-off or not. Later developments and
improvements in the Perl area may require to switch to a different
solution than the one implemented by this patch.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/microperl/microperl.mk |   18 ++++++++++++------
 1 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/package/microperl/microperl.mk b/package/microperl/microperl.mk
index 5bf4a2e..31b7a63 100644
--- a/package/microperl/microperl.mk
+++ b/package/microperl/microperl.mk
@@ -22,10 +22,16 @@ MICROPERL_MODS += constant.pm CGI CGI.pm Carp.pm Exporter.pm overload.pm \
 	vars.pm warnings.pm warnings/register.pm
 endif
 
-# Host microperl is actually full-blown perl
+# Host microperl is actually full-blown perl. Instead of installing it
+# with prefix=$(HOST_DIR)/usr, we install it with
+# prefix=$(HOST_DIR)/opt/perl so that this host-microperl is only used
+# for building the target microperl. If we install the host-microperl
+# in $(HOST_DIR)/usr, it gets picked up by all Perl-based utilities
+# (such as intltool) that Buildroot has installed, creating
+# incompatibilites with the Perl provided by the distribution.
 define HOST_MICROPERL_CONFIGURE_CMDS
 	cd $(@D) ; \
-	./Configure -Dcc="$(HOSTCC)" -Dprefix="$(HOST_DIR)/usr" \
+	./Configure -Dcc="$(HOSTCC)" -Dprefix="$(HOST_DIR)/opt/perl/" \
 		-Dloclibpth='/lib /lib64 /usr/lib /usr/lib64' -des
 endef
 
@@ -95,8 +101,8 @@ define MICROPERL_CONFIGURE_CMDS
 	cp -f $(@D)/uconfig.sh $(@D)/config.sh
 	echo "ccname='$(TARGET_CC)'" >>$(@D)/config.sh
 	echo "PERL_CONFIG_SH=true" >>$(@D)/config.sh
-	cd $(@D) ; $(HOST_DIR)/usr/bin/perl make_patchnum.pl ; \
-	$(HOST_DIR)/usr/bin/perl configpm
+	cd $(@D) ; $(HOST_DIR)/opt/perl/bin/perl make_patchnum.pl ; \
+	$(HOST_DIR)/opt/perl/bin/perl configpm
 endef
 
 define MICROPERL_BUILD_CMDS
@@ -111,9 +117,9 @@ endef
 # Just ignore make_ext.pl warning/errors
 define MICROPERL_BUILD_EXTENSIONS
 	for i in $(MICROPERL_MODS); do \
-	cd $(@D); ln -sf $(HOST_DIR)/usr/bin/perl miniperl; \
+	cd $(@D); ln -sf $(HOST_DIR)/opt/perl/bin/perl miniperl; \
 		PERL5LIB=$(TARGET_DIR)/$(MICROPERL_ARCH_DIR) \
-		$(HOST_DIR)/usr/bin/perl make_ext.pl MAKE="$(MAKE)" --nonxs \
+		$(HOST_DIR)/opt/perl/bin/perl make_ext.pl MAKE="$(MAKE)" --nonxs \
 		`echo $$i|sed -e 's/.pm//'`; \
 	done
 endef
-- 
1.7.4.1

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

* [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl
  2012-03-27  7:06 ` [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl Thomas Petazzoni
@ 2012-03-27  7:12   ` Thomas Petazzoni
  2012-03-28  6:54   ` Peter Korsgaard
  1 sibling, 0 replies; 17+ messages in thread
From: Thomas Petazzoni @ 2012-03-27  7:12 UTC (permalink / raw)
  To: buildroot

Le Tue, 27 Mar 2012 09:06:18 +0200,
Thomas Petazzoni <thomas.petazzoni@free-electrons.com> a ?crit :

> This commit is a tentative at fixing some Perl-related build problems
> we are having nowadays, due to the fact that microperl now depends on
> host-microperl. Since the perl binary from host-microperl is installed
> in $(HOST_DIR)/usr/bin, it gets picked up when we run host tools like
> host-intltool, which were normally meant to be used against the
> distribution-provided Perl.
> 
> This problem currently causes between a third to half of the failures
> in our random build tests.
> 
> Another, cleaner, option would be to make host-intltool depend on
> host-microperl, but this would require every user needing intltool to
> build a host Perl interpreter, even if the real reason for build the
> host Perl interpreter is only needed for those who want to build the
> Perl interpreter for the target. This commit is really a test at
> trying another solution than adding this dependency, to see whether it
> turns out to be a reasonable trade-off or not. Later developments and
> improvements in the Perl area may require to switch to a different
> solution than the one implemented by this patch.
> 
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

I have tested
http://autobuild.buildroot.org/results/9980055bf8ebc1ea442f5affc3418eb869c4c90d/defconfig
without the patch, in which case we have the host-intltool problem.
With this patch, this problem disappears and this defconfig builds
until the end with no problem.

Best regards,

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

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

* [Buildroot] [PATCH 1/2] microperl: fix MICROPERL_INSTALL_TARGET_CMDS
  2012-03-27  7:06 ` [Buildroot] [PATCH 1/2] microperl: fix MICROPERL_INSTALL_TARGET_CMDS Thomas Petazzoni
@ 2012-03-28  6:28   ` Peter Korsgaard
  0 siblings, 0 replies; 17+ messages in thread
From: Peter Korsgaard @ 2012-03-28  6:28 UTC (permalink / raw)
  To: buildroot

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 Thomas> The MICROPERL_INSTALL_TARGET_CMDS used the following construct in a
 Thomas> for loop:

 Thomas> 		[ -d $(@D)/lib/$$j ] && cp -af $(@D)/lib/$$j \
 Thomas> 			$(TARGET_DIR)/$(MICROPERL_MODS_DIR) ; \
 Thomas> 		[ -f $(@D)/lib/$$i ] && $(INSTALL) -m 0644 -D $(@D)/lib/$$i \
 Thomas> 			$(TARGET_DIR)/$(MICROPERL_MODS_DIR)/$$i; \

Committed, thanks.

-- 
Bye, Peter Korsgaard

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

* [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl
  2012-03-27  7:06 ` [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl Thomas Petazzoni
  2012-03-27  7:12   ` Thomas Petazzoni
@ 2012-03-28  6:54   ` Peter Korsgaard
  2012-03-28  7:55     ` Thomas Petazzoni
  1 sibling, 1 reply; 17+ messages in thread
From: Peter Korsgaard @ 2012-03-28  6:54 UTC (permalink / raw)
  To: buildroot

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 Thomas> This commit is a tentative at fixing some Perl-related build problems
 Thomas> we are having nowadays, due to the fact that microperl now depends on
 Thomas> host-microperl. Since the perl binary from host-microperl is installed
 Thomas> in $(HOST_DIR)/usr/bin, it gets picked up when we run host tools like
 Thomas> host-intltool, which were normally meant to be used against the
 Thomas> distribution-provided Perl.

Thanks, but I have fixed it a bit differently instead:

commit d0e5eb281f0e3b323ecb3446c1b16baf7f3baa69
Author: Peter Korsgaard <jacmet@sunsite.dk>
Date:   Tue Mar 27 17:11:36 2012 +0200

    libxml-parser-perl: fix host-intltool breakage when microperl is enabled
    
    Microperl will build host-microperl and install it into HOST_DIR/usr/bin,
    where other packages will pick it up as _CONFIGURE_OPTS / _MAKE_ENV
    prepends that to the path.
    
    libxml-parser-perl didn't though, so it would still be built against
    the system perl, causing host-intltool to fail when it would use
    host-microperl together with libxml-parser-perl if the system perl
    isn't compatible with host-microperl.
    
    Fix it by using HOST_CONFIGURE_OPTS and ensuring it is built after
    (host-)microperl if enabled.

-- 
Bye, Peter Korsgaard

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

* [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl
  2012-03-28  6:54   ` Peter Korsgaard
@ 2012-03-28  7:55     ` Thomas Petazzoni
  2012-03-28  9:32       ` Peter Korsgaard
  0 siblings, 1 reply; 17+ messages in thread
From: Thomas Petazzoni @ 2012-03-28  7:55 UTC (permalink / raw)
  To: buildroot

Hello Peter,

Le Wed, 28 Mar 2012 08:54:32 +0200,
Peter Korsgaard <jacmet@uclibc.org> a ?crit :

> Thanks, but I have fixed it a bit differently instead:
> 
> commit d0e5eb281f0e3b323ecb3446c1b16baf7f3baa69
> Author: Peter Korsgaard <jacmet@sunsite.dk>
> Date:   Tue Mar 27 17:11:36 2012 +0200

Thanks, yes. As discussed on IRC, I haven't tested your change, but I
agree on the principle.

However, I am worried by the case reported by Will Newton in:

From: Will Newton <will.newton@gmail.com>
To: buildroot at busybox.net
Subject: [Buildroot] Host libxml-parser-perl build issue
Date: Mon, 26 Mar 2012 17:35:29 +0100

In his case, the microperl for the target was not selected, so the
host-microperl was not built, and still he was having issues.
Apparently, the problem is that host-libxml-parser-perl didn't pick up
the libexpat from the $(HOST_DIR). Normally, we build all binaries with
a rpath set to $(HOST_DIR)/usr/lib, but in the specific case of Perl
modules that use a native library such as libexpat, I am not sure how
we are supposed to tell Perl to build such modules with an rpath set.
The current workaround of Will is to pass the LD_LIBRARY_PATH
environment variable in TARGET_CONFIGURE_OPTS and TARGET_MAKE_ENV, but
I don't think this would work for all packages (I remember libtool
being confused by a LD_LIBRARY_PATH being set).

Regards,

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

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

* [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl
  2012-03-28  7:55     ` Thomas Petazzoni
@ 2012-03-28  9:32       ` Peter Korsgaard
  2012-03-28 10:40         ` Will Newton
  0 siblings, 1 reply; 17+ messages in thread
From: Peter Korsgaard @ 2012-03-28  9:32 UTC (permalink / raw)
  To: buildroot

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

Hi,

 Thomas> However, I am worried by the case reported by Will Newton in:

 Thomas> From: Will Newton <will.newton@gmail.com>
 Thomas> To: buildroot at busybox.net
 Thomas> Subject: [Buildroot] Host libxml-parser-perl build issue
 Thomas> Date: Mon, 26 Mar 2012 17:35:29 +0100

 Thomas> In his case, the microperl for the target was not selected, so the
 Thomas> host-microperl was not built, and still he was having issues.

Yes, I've seen it. I don't really have a good idea about what we can do
about it though :/

-- 
Bye, Peter Korsgaard

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

* [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl
  2012-03-28  9:32       ` Peter Korsgaard
@ 2012-03-28 10:40         ` Will Newton
  2012-03-28 10:55           ` Thomas Petazzoni
  0 siblings, 1 reply; 17+ messages in thread
From: Will Newton @ 2012-03-28 10:40 UTC (permalink / raw)
  To: buildroot

On Wed, Mar 28, 2012 at 10:32 AM, Peter Korsgaard <jacmet@uclibc.org> wrote:

Hi Peter,

>>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:
>
> Hi,
>
> ?Thomas> However, I am worried by the case reported by Will Newton in:
>
> ?Thomas> From: Will Newton <will.newton@gmail.com>
> ?Thomas> To: buildroot at busybox.net
> ?Thomas> Subject: [Buildroot] Host libxml-parser-perl build issue
> ?Thomas> Date: Mon, 26 Mar 2012 17:35:29 +0100
>
> ?Thomas> In his case, the microperl for the target was not selected, so the
> ?Thomas> host-microperl was not built, and still he was having issues.
>
> Yes, I've seen it. I don't really have a good idea about what we can do
> about it though :/

Do you think that setting LD_LIBRARY_PATH in the way I suggested is
unsafe? I had some concerns that it might affect the search path for
libraries but I believe this is not an issue with a cross linker
(according to the ld man page, I haven't checked the code), and it
does not break any of the test builds I have done.

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

* [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl
  2012-03-28 10:40         ` Will Newton
@ 2012-03-28 10:55           ` Thomas Petazzoni
  2012-03-28 12:47             ` Will Newton
  2012-03-28 12:52             ` Thomas Petazzoni
  0 siblings, 2 replies; 17+ messages in thread
From: Thomas Petazzoni @ 2012-03-28 10:55 UTC (permalink / raw)
  To: buildroot

Le Wed, 28 Mar 2012 11:40:00 +0100,
Will Newton <will.newton@gmail.com> a ?crit :

> Do you think that setting LD_LIBRARY_PATH in the way I suggested is
> unsafe? I had some concerns that it might affect the search path for
> libraries but I believe this is not an issue with a cross linker
> (according to the ld man page, I haven't checked the code), and it
> does not break any of the test builds I have done.

In the past, we had the problem that when we were building target
packages that required host utilities installed in $(HOST_DIR)/usr/bin,
those utilities were not able to find their libraries in
$(HOST_DIR)/usr/lib. We tried using LD_LIBRARY_PATH, but libtool used
it as the search path for libraries when compiling target stuff. So, we
decided to hardcode the correct rpath in all binaries built and
installed in $(HOST_DIR)/usr/bin.

So, yes, I believe that adding LD_LIBRARY_PATH is going to cause
problems, unless those problems have disappeared for some other reason.

See:

 c1b6242fdcf2cff7ebf09fec4cc1be58963e8427
 0d1830b07db4ebfd14e77a258de6fb391e57e960
 6b939d40f6a29a43277566adc9d4312d49cb3abf

For a history of what we tried on this topic.

Best regards,

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

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

* [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl
  2012-03-28 10:55           ` Thomas Petazzoni
@ 2012-03-28 12:47             ` Will Newton
  2012-03-28 12:52             ` Thomas Petazzoni
  1 sibling, 0 replies; 17+ messages in thread
From: Will Newton @ 2012-03-28 12:47 UTC (permalink / raw)
  To: buildroot

On Wed, Mar 28, 2012 at 11:55 AM, Thomas Petazzoni
<thomas.petazzoni@free-electrons.com> wrote:
> Le Wed, 28 Mar 2012 11:40:00 +0100,
> Will Newton <will.newton@gmail.com> a ?crit :
>
>> Do you think that setting LD_LIBRARY_PATH in the way I suggested is
>> unsafe? I had some concerns that it might affect the search path for
>> libraries but I believe this is not an issue with a cross linker
>> (according to the ld man page, I haven't checked the code), and it
>> does not break any of the test builds I have done.
>
> In the past, we had the problem that when we were building target
> packages that required host utilities installed in $(HOST_DIR)/usr/bin,
> those utilities were not able to find their libraries in
> $(HOST_DIR)/usr/lib. We tried using LD_LIBRARY_PATH, but libtool used
> it as the search path for libraries when compiling target stuff. So, we
> decided to hardcode the correct rpath in all binaries built and
> installed in $(HOST_DIR)/usr/bin.
>
> So, yes, I believe that adding LD_LIBRARY_PATH is going to cause
> problems, unless those problems have disappeared for some other reason.
>
> See:
>
> ?c1b6242fdcf2cff7ebf09fec4cc1be58963e8427
> ?0d1830b07db4ebfd14e77a258de6fb391e57e960
> ?6b939d40f6a29a43277566adc9d4312d49cb3abf
>
> For a history of what we tried on this topic.

If ld handles this explicitly and correctly then this sounds like a
libtool bug to me. Do you have a testcase that can reproduce it? I
have spent some time trying to make libtool break but without success,
but I am far from an expert in that area...

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

* [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl
  2012-03-28 10:55           ` Thomas Petazzoni
  2012-03-28 12:47             ` Will Newton
@ 2012-03-28 12:52             ` Thomas Petazzoni
  2012-03-28 13:01               ` Will Newton
  1 sibling, 1 reply; 17+ messages in thread
From: Thomas Petazzoni @ 2012-03-28 12:52 UTC (permalink / raw)
  To: buildroot

Le Wed, 28 Mar 2012 12:55:47 +0200,
Thomas Petazzoni <thomas.petazzoni@free-electrons.com> a ?crit :

> In the past, we had the problem that when we were building target
> packages that required host utilities installed in $(HOST_DIR)/usr/bin,
> those utilities were not able to find their libraries in
> $(HOST_DIR)/usr/lib. We tried using LD_LIBRARY_PATH, but libtool used
> it as the search path for libraries when compiling target stuff. So, we
> decided to hardcode the correct rpath in all binaries built and
> installed in $(HOST_DIR)/usr/bin.

I had a quick look at this, and here the Perl dynamic module that
depends on libexpat.so.1 is built with the correct RPATH:

$ arm-linux-gnueabi-readelf -a host/usr/lib/perl/auto/XML/Parser/Expat/Expat.so | grep RPATH
 0x000000000000000f (RPATH)              Library rpath: [/opt/outputs/perl/host/usr/lib]

So normally, when this Expat.so library is dlopen'ed by Perl, it should
use the RPATH of Expat.so to find where libexpat.so.1 is located. And
on my system, it does:

$ PERLLIB=/opt/outputs/perl/host/usr/lib/perl/ LD_DEBUG=libs perl -e 'require XML::Parser;'
      9529:	find library=libperl.so.5.10 [0]; searching
      9529:	 search cache=/etc/ld.so.cache
      9529:	  trying file=/usr/lib/libperl.so.5.10
      9529:	
      9529:	find library=libdl.so.2 [0]; searching
      9529:	 search cache=/etc/ld.so.cache
      9529:	  trying file=/lib/x86_64-linux-gnu/libdl.so.2
      9529:	
      9529:	find library=libm.so.6 [0]; searching
      9529:	 search cache=/etc/ld.so.cache
      9529:	  trying file=/lib/x86_64-linux-gnu/libm.so.6
      9529:	
      9529:	find library=libpthread.so.0 [0]; searching
      9529:	 search cache=/etc/ld.so.cache
      9529:	  trying file=/lib/x86_64-linux-gnu/libpthread.so.0
      9529:	
      9529:	find library=libc.so.6 [0]; searching
      9529:	 search cache=/etc/ld.so.cache
      9529:	  trying file=/lib/x86_64-linux-gnu/libc.so.6
      9529:	
      9529:	find library=libcrypt.so.1 [0]; searching
      9529:	 search cache=/etc/ld.so.cache
      9529:	  trying file=/lib/x86_64-linux-gnu/libcrypt.so.1
      9529:	
      9529:	
      9529:	calling init: /lib/x86_64-linux-gnu/libpthread.so.0
      9529:	calling init: /lib/x86_64-linux-gnu/libc.so.6
      9529:	calling init: /lib/x86_64-linux-gnu/libcrypt.so.1
      9529:	calling init: /lib/x86_64-linux-gnu/libm.so.6
      9529:	calling init: /lib/x86_64-linux-gnu/libdl.so.2
      9529:	calling init: /usr/lib/libperl.so.5.10
      9529:	
      9529:	
      9529:	initialize program: perl
      9529:	transferring control: perl
      9529:	
      9529:	find library=libexpat.so.1 [0]; searching
      9529:	 search path=/opt/outputs/perl/host/usr/lib/tls/x86_64:/opt/outputs/perl/host/usr/lib/tls:/opt/outputs/perl/host/usr/lib/x86_64:/opt/outputs/perl/host/usr/lib		(RPATH from file /opt/outputs/perl/host/usr/lib/perl//auto/XML/Parser/Expat/Expat.so)
      9529:	  trying file=/opt/outputs/perl/host/usr/lib/tls/x86_64/libexpat.so.1
      9529:	  trying file=/opt/outputs/perl/host/usr/lib/tls/libexpat.so.1
      9529:	  trying file=/opt/outputs/perl/host/usr/lib/x86_64/libexpat.so.1
      9529:	  trying file=/opt/outputs/perl/host/usr/lib/libexpat.so.1
      9529:	
      9529:	calling init: /opt/outputs/perl/host/usr/lib/libexpat.so.1
      9529:	calling init: /opt/outputs/perl/host/usr/lib/perl//auto/XML/Parser/Expat/Expat.so
      9529:	calling fini: perl [0]
      9529:	calling fini: /usr/lib/libperl.so.5.10 [0]
      9529:	calling fini: /lib/x86_64-linux-gnu/libdl.so.2 [0]
      9529:	calling fini: /lib/x86_64-linux-gnu/libm.so.6 [0]
      9529:	calling fini: /lib/x86_64-linux-gnu/libpthread.so.0 [0]
      9529:	calling fini: /lib/x86_64-linux-gnu/libcrypt.so.1 [0]
      9529:	calling fini: /opt/outputs/perl/host/usr/lib/perl//auto/XML/Parser/Expat/Expat.so [0]
      9529:	calling fini: /opt/outputs/perl/host/usr/lib/libexpat.so.1 [0]
      9529:	calling fini: /lib/x86_64-linux-gnu/libc.so.6 [0]

As you can see here, it clearly looks in the RPATH encoded into
Expat.so to find where libexpat.so.1 is located. In my
case /opt/outputs/perl/ in the Buildroot output directory, and it
clearly uses the libexpat.so.1 from this output directory, and not the
one from my system.

Are you sure you don't have any value set in your LD_LIBRARY_PATH
environment variable (outside of Buildroot)? Can you try the commands
above (check the RPATH of Expat.so and check the resolution of
libraries when asking Perl to require the XML::Parser module, when
PERLLIB points to the Perl modules built by Buildroot), and post the
results?

Thanks,

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

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

* [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl
  2012-03-28 12:52             ` Thomas Petazzoni
@ 2012-03-28 13:01               ` Will Newton
  2012-03-28 13:10                 ` Will Newton
  2012-03-28 13:18                 ` Thomas Petazzoni
  0 siblings, 2 replies; 17+ messages in thread
From: Will Newton @ 2012-03-28 13:01 UTC (permalink / raw)
  To: buildroot

On Wed, Mar 28, 2012 at 1:52 PM, Thomas Petazzoni
<thomas.petazzoni@free-electrons.com> wrote:
> Le Wed, 28 Mar 2012 12:55:47 +0200,
> Thomas Petazzoni <thomas.petazzoni@free-electrons.com> a ?crit :
>
>> In the past, we had the problem that when we were building target
>> packages that required host utilities installed in $(HOST_DIR)/usr/bin,
>> those utilities were not able to find their libraries in
>> $(HOST_DIR)/usr/lib. We tried using LD_LIBRARY_PATH, but libtool used
>> it as the search path for libraries when compiling target stuff. So, we
>> decided to hardcode the correct rpath in all binaries built and
>> installed in $(HOST_DIR)/usr/bin.
>
> I had a quick look at this, and here the Perl dynamic module that
> depends on libexpat.so.1 is built with the correct RPATH:
>
> $ arm-linux-gnueabi-readelf -a host/usr/lib/perl/auto/XML/Parser/Expat/Expat.so | grep RPATH
> ?0x000000000000000f (RPATH) ? ? ? ? ? ? ?Library rpath: [/opt/outputs/perl/host/usr/lib]
>
> So normally, when this Expat.so library is dlopen'ed by Perl, it should
> use the RPATH of Expat.so to find where libexpat.so.1 is located. And
> on my system, it does:
>
> $ PERLLIB=/opt/outputs/perl/host/usr/lib/perl/ LD_DEBUG=libs perl -e 'require XML::Parser;'
> ? ? ?9529: ? ? find library=libperl.so.5.10 [0]; searching
> ? ? ?9529: ? ? ?search cache=/etc/ld.so.cache
> ? ? ?9529: ? ? ? trying file=/usr/lib/libperl.so.5.10
> ? ? ?9529:
> ? ? ?9529: ? ? find library=libdl.so.2 [0]; searching
> ? ? ?9529: ? ? ?search cache=/etc/ld.so.cache
> ? ? ?9529: ? ? ? trying file=/lib/x86_64-linux-gnu/libdl.so.2
> ? ? ?9529:
> ? ? ?9529: ? ? find library=libm.so.6 [0]; searching
> ? ? ?9529: ? ? ?search cache=/etc/ld.so.cache
> ? ? ?9529: ? ? ? trying file=/lib/x86_64-linux-gnu/libm.so.6
> ? ? ?9529:
> ? ? ?9529: ? ? find library=libpthread.so.0 [0]; searching
> ? ? ?9529: ? ? ?search cache=/etc/ld.so.cache
> ? ? ?9529: ? ? ? trying file=/lib/x86_64-linux-gnu/libpthread.so.0
> ? ? ?9529:
> ? ? ?9529: ? ? find library=libc.so.6 [0]; searching
> ? ? ?9529: ? ? ?search cache=/etc/ld.so.cache
> ? ? ?9529: ? ? ? trying file=/lib/x86_64-linux-gnu/libc.so.6
> ? ? ?9529:
> ? ? ?9529: ? ? find library=libcrypt.so.1 [0]; searching
> ? ? ?9529: ? ? ?search cache=/etc/ld.so.cache
> ? ? ?9529: ? ? ? trying file=/lib/x86_64-linux-gnu/libcrypt.so.1
> ? ? ?9529:
> ? ? ?9529:
> ? ? ?9529: ? ? calling init: /lib/x86_64-linux-gnu/libpthread.so.0
> ? ? ?9529: ? ? calling init: /lib/x86_64-linux-gnu/libc.so.6
> ? ? ?9529: ? ? calling init: /lib/x86_64-linux-gnu/libcrypt.so.1
> ? ? ?9529: ? ? calling init: /lib/x86_64-linux-gnu/libm.so.6
> ? ? ?9529: ? ? calling init: /lib/x86_64-linux-gnu/libdl.so.2
> ? ? ?9529: ? ? calling init: /usr/lib/libperl.so.5.10
> ? ? ?9529:
> ? ? ?9529:
> ? ? ?9529: ? ? initialize program: perl
> ? ? ?9529: ? ? transferring control: perl
> ? ? ?9529:
> ? ? ?9529: ? ? find library=libexpat.so.1 [0]; searching
> ? ? ?9529: ? ? ?search path=/opt/outputs/perl/host/usr/lib/tls/x86_64:/opt/outputs/perl/host/usr/lib/tls:/opt/outputs/perl/host/usr/lib/x86_64:/opt/outputs/perl/host/usr/lib ? ? ? ? ?(RPATH from file /opt/outputs/perl/host/usr/lib/perl//auto/XML/Parser/Expat/Expat.so)
> ? ? ?9529: ? ? ? trying file=/opt/outputs/perl/host/usr/lib/tls/x86_64/libexpat.so.1
> ? ? ?9529: ? ? ? trying file=/opt/outputs/perl/host/usr/lib/tls/libexpat.so.1
> ? ? ?9529: ? ? ? trying file=/opt/outputs/perl/host/usr/lib/x86_64/libexpat.so.1
> ? ? ?9529: ? ? ? trying file=/opt/outputs/perl/host/usr/lib/libexpat.so.1
> ? ? ?9529:
> ? ? ?9529: ? ? calling init: /opt/outputs/perl/host/usr/lib/libexpat.so.1
> ? ? ?9529: ? ? calling init: /opt/outputs/perl/host/usr/lib/perl//auto/XML/Parser/Expat/Expat.so
> ? ? ?9529: ? ? calling fini: perl [0]
> ? ? ?9529: ? ? calling fini: /usr/lib/libperl.so.5.10 [0]
> ? ? ?9529: ? ? calling fini: /lib/x86_64-linux-gnu/libdl.so.2 [0]
> ? ? ?9529: ? ? calling fini: /lib/x86_64-linux-gnu/libm.so.6 [0]
> ? ? ?9529: ? ? calling fini: /lib/x86_64-linux-gnu/libpthread.so.0 [0]
> ? ? ?9529: ? ? calling fini: /lib/x86_64-linux-gnu/libcrypt.so.1 [0]
> ? ? ?9529: ? ? calling fini: /opt/outputs/perl/host/usr/lib/perl//auto/XML/Parser/Expat/Expat.so [0]
> ? ? ?9529: ? ? calling fini: /opt/outputs/perl/host/usr/lib/libexpat.so.1 [0]
> ? ? ?9529: ? ? calling fini: /lib/x86_64-linux-gnu/libc.so.6 [0]
>
> As you can see here, it clearly looks in the RPATH encoded into
> Expat.so to find where libexpat.so.1 is located. In my
> case /opt/outputs/perl/ in the Buildroot output directory, and it
> clearly uses the libexpat.so.1 from this output directory, and not the
> one from my system.
>
> Are you sure you don't have any value set in your LD_LIBRARY_PATH
> environment variable (outside of Buildroot)? Can you try the commands
> above (check the RPATH of Expat.so and check the resolution of
> libraries when asking Perl to require the XML::Parser module, when
> PERLLIB points to the Perl modules built by Buildroot), and post the
> results?

I haven't got any LD_LIBRARY_PATH set, but it looks like there is no
rpath set. I wonder if this is some perl Makefile issue.

[win at lemeta01 buildroot]$ env | grep LD_LIBRARY
[win at lemeta01 buildroot]$ ./output/host/usr/bin/arm-linux-readelf -a
./output/host/usr/lib/perl/auto/XML/Parser/Expat/Expat.so | grep RPATH
[win at lemeta01 buildroot]$

Although the makefiles do mention rpath, but that one does not seem to
be getting used either:

[win at lemeta01 host-libxml-parser-perl-2.36]$ grep -ri rpath *
Expat/Makefile:CCDLFLAGS = -Wl,-E
-Wl,-rpath,/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE
Makefile:CCDLFLAGS = -Wl,-E
-Wl,-rpath,/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE

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

* [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl
  2012-03-28 13:01               ` Will Newton
@ 2012-03-28 13:10                 ` Will Newton
  2012-03-28 13:18                 ` Thomas Petazzoni
  1 sibling, 0 replies; 17+ messages in thread
From: Will Newton @ 2012-03-28 13:10 UTC (permalink / raw)
  To: buildroot

On Wed, Mar 28, 2012 at 2:01 PM, Will Newton <will.newton@gmail.com> wrote:
> On Wed, Mar 28, 2012 at 1:52 PM, Thomas Petazzoni
> <thomas.petazzoni@free-electrons.com> wrote:
>> Le Wed, 28 Mar 2012 12:55:47 +0200,
>> Thomas Petazzoni <thomas.petazzoni@free-electrons.com> a ?crit :
>>
>>> In the past, we had the problem that when we were building target
>>> packages that required host utilities installed in $(HOST_DIR)/usr/bin,
>>> those utilities were not able to find their libraries in
>>> $(HOST_DIR)/usr/lib. We tried using LD_LIBRARY_PATH, but libtool used
>>> it as the search path for libraries when compiling target stuff. So, we
>>> decided to hardcode the correct rpath in all binaries built and
>>> installed in $(HOST_DIR)/usr/bin.
>>
>> I had a quick look at this, and here the Perl dynamic module that
>> depends on libexpat.so.1 is built with the correct RPATH:
>>
>> $ arm-linux-gnueabi-readelf -a host/usr/lib/perl/auto/XML/Parser/Expat/Expat.so | grep RPATH
>> ?0x000000000000000f (RPATH) ? ? ? ? ? ? ?Library rpath: [/opt/outputs/perl/host/usr/lib]
>>
>> So normally, when this Expat.so library is dlopen'ed by Perl, it should
>> use the RPATH of Expat.so to find where libexpat.so.1 is located. And
>> on my system, it does:
>>
>> $ PERLLIB=/opt/outputs/perl/host/usr/lib/perl/ LD_DEBUG=libs perl -e 'require XML::Parser;'
>> ? ? ?9529: ? ? find library=libperl.so.5.10 [0]; searching
>> ? ? ?9529: ? ? ?search cache=/etc/ld.so.cache
>> ? ? ?9529: ? ? ? trying file=/usr/lib/libperl.so.5.10
>> ? ? ?9529:
>> ? ? ?9529: ? ? find library=libdl.so.2 [0]; searching
>> ? ? ?9529: ? ? ?search cache=/etc/ld.so.cache
>> ? ? ?9529: ? ? ? trying file=/lib/x86_64-linux-gnu/libdl.so.2
>> ? ? ?9529:
>> ? ? ?9529: ? ? find library=libm.so.6 [0]; searching
>> ? ? ?9529: ? ? ?search cache=/etc/ld.so.cache
>> ? ? ?9529: ? ? ? trying file=/lib/x86_64-linux-gnu/libm.so.6
>> ? ? ?9529:
>> ? ? ?9529: ? ? find library=libpthread.so.0 [0]; searching
>> ? ? ?9529: ? ? ?search cache=/etc/ld.so.cache
>> ? ? ?9529: ? ? ? trying file=/lib/x86_64-linux-gnu/libpthread.so.0
>> ? ? ?9529:
>> ? ? ?9529: ? ? find library=libc.so.6 [0]; searching
>> ? ? ?9529: ? ? ?search cache=/etc/ld.so.cache
>> ? ? ?9529: ? ? ? trying file=/lib/x86_64-linux-gnu/libc.so.6
>> ? ? ?9529:
>> ? ? ?9529: ? ? find library=libcrypt.so.1 [0]; searching
>> ? ? ?9529: ? ? ?search cache=/etc/ld.so.cache
>> ? ? ?9529: ? ? ? trying file=/lib/x86_64-linux-gnu/libcrypt.so.1
>> ? ? ?9529:
>> ? ? ?9529:
>> ? ? ?9529: ? ? calling init: /lib/x86_64-linux-gnu/libpthread.so.0
>> ? ? ?9529: ? ? calling init: /lib/x86_64-linux-gnu/libc.so.6
>> ? ? ?9529: ? ? calling init: /lib/x86_64-linux-gnu/libcrypt.so.1
>> ? ? ?9529: ? ? calling init: /lib/x86_64-linux-gnu/libm.so.6
>> ? ? ?9529: ? ? calling init: /lib/x86_64-linux-gnu/libdl.so.2
>> ? ? ?9529: ? ? calling init: /usr/lib/libperl.so.5.10
>> ? ? ?9529:
>> ? ? ?9529:
>> ? ? ?9529: ? ? initialize program: perl
>> ? ? ?9529: ? ? transferring control: perl
>> ? ? ?9529:
>> ? ? ?9529: ? ? find library=libexpat.so.1 [0]; searching
>> ? ? ?9529: ? ? ?search path=/opt/outputs/perl/host/usr/lib/tls/x86_64:/opt/outputs/perl/host/usr/lib/tls:/opt/outputs/perl/host/usr/lib/x86_64:/opt/outputs/perl/host/usr/lib ? ? ? ? ?(RPATH from file /opt/outputs/perl/host/usr/lib/perl//auto/XML/Parser/Expat/Expat.so)
>> ? ? ?9529: ? ? ? trying file=/opt/outputs/perl/host/usr/lib/tls/x86_64/libexpat.so.1
>> ? ? ?9529: ? ? ? trying file=/opt/outputs/perl/host/usr/lib/tls/libexpat.so.1
>> ? ? ?9529: ? ? ? trying file=/opt/outputs/perl/host/usr/lib/x86_64/libexpat.so.1
>> ? ? ?9529: ? ? ? trying file=/opt/outputs/perl/host/usr/lib/libexpat.so.1
>> ? ? ?9529:
>> ? ? ?9529: ? ? calling init: /opt/outputs/perl/host/usr/lib/libexpat.so.1
>> ? ? ?9529: ? ? calling init: /opt/outputs/perl/host/usr/lib/perl//auto/XML/Parser/Expat/Expat.so
>> ? ? ?9529: ? ? calling fini: perl [0]
>> ? ? ?9529: ? ? calling fini: /usr/lib/libperl.so.5.10 [0]
>> ? ? ?9529: ? ? calling fini: /lib/x86_64-linux-gnu/libdl.so.2 [0]
>> ? ? ?9529: ? ? calling fini: /lib/x86_64-linux-gnu/libm.so.6 [0]
>> ? ? ?9529: ? ? calling fini: /lib/x86_64-linux-gnu/libpthread.so.0 [0]
>> ? ? ?9529: ? ? calling fini: /lib/x86_64-linux-gnu/libcrypt.so.1 [0]
>> ? ? ?9529: ? ? calling fini: /opt/outputs/perl/host/usr/lib/perl//auto/XML/Parser/Expat/Expat.so [0]
>> ? ? ?9529: ? ? calling fini: /opt/outputs/perl/host/usr/lib/libexpat.so.1 [0]
>> ? ? ?9529: ? ? calling fini: /lib/x86_64-linux-gnu/libc.so.6 [0]
>>
>> As you can see here, it clearly looks in the RPATH encoded into
>> Expat.so to find where libexpat.so.1 is located. In my
>> case /opt/outputs/perl/ in the Buildroot output directory, and it
>> clearly uses the libexpat.so.1 from this output directory, and not the
>> one from my system.
>>
>> Are you sure you don't have any value set in your LD_LIBRARY_PATH
>> environment variable (outside of Buildroot)? Can you try the commands
>> above (check the RPATH of Expat.so and check the resolution of
>> libraries when asking Perl to require the XML::Parser module, when
>> PERLLIB points to the Perl modules built by Buildroot), and post the
>> results?
>
> I haven't got any LD_LIBRARY_PATH set, but it looks like there is no
> rpath set. I wonder if this is some perl Makefile issue.
>
> [win at lemeta01 buildroot]$ env | grep LD_LIBRARY
> [win at lemeta01 buildroot]$ ./output/host/usr/bin/arm-linux-readelf -a
> ./output/host/usr/lib/perl/auto/XML/Parser/Expat/Expat.so | grep RPATH
> [win at lemeta01 buildroot]$
>
> Although the makefiles do mention rpath, but that one does not seem to
> be getting used either:
>
> [win at lemeta01 host-libxml-parser-perl-2.36]$ grep -ri rpath *
> Expat/Makefile:CCDLFLAGS = -Wl,-E
> -Wl,-rpath,/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE
> Makefile:CCDLFLAGS = -Wl,-E
> -Wl,-rpath,/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE

However it does use LD_RUN_PATH:

[win at lemeta01 host-libxml-parser-perl-2.36]$ grep -r LD_RUN_PATH *
Expat/Makefile:LD_RUN_PATH = /meta/home/win/buildroot/output/host/usr/lib

If I change that line to "export LD_RUN_PATH..." it seems to set the
rpath and work correctly...

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

* [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl
  2012-03-28 13:01               ` Will Newton
  2012-03-28 13:10                 ` Will Newton
@ 2012-03-28 13:18                 ` Thomas Petazzoni
  2012-03-28 14:00                   ` Will Newton
  1 sibling, 1 reply; 17+ messages in thread
From: Thomas Petazzoni @ 2012-03-28 13:18 UTC (permalink / raw)
  To: buildroot

Le Wed, 28 Mar 2012 14:01:56 +0100,
Will Newton <will.newton@gmail.com> a ?crit :

> [win at lemeta01 buildroot]$ env | grep LD_LIBRARY
> [win at lemeta01 buildroot]$ ./output/host/usr/bin/arm-linux-readelf -a
> ./output/host/usr/lib/perl/auto/XML/Parser/Expat/Expat.so | grep RPATH
> [win at lemeta01 buildroot]$

Ah, ah, this is our problem.

> Although the makefiles do mention rpath, but that one does not seem to
> be getting used either:

We have a rpath set in HOST_LDFLAGS, but this variable doesn't seem to
be used when building host-libxml-parser-perl. However, by
Expat/Makefile contains LD_RUN_PATH="/opt/outputs/perl/host/usr/lib" in
the environment when calling ld:

LD_RUN_PATH="/opt/outputs/perl/host/usr/lib" cc  -shared -O2 -g -L/usr/local/lib -fstack-protector Expat.o  -o ../blib/arch/auto/XML/Parser/Expat/Expat.so 	\
	   -L/opt/outputs/perl/host/usr/lib -lexpat

And LD_RUN_PATH is used by ld as the RPATH when no -rpath option is
used. I guess this LD_RUN_PATH is set because we run the Makefile.PL
script with INSTALLSITELIB=/opt/outputs/perl/host/usr/lib/perl.

Could you post the output of:

rm -rf output/build/host-libxml-parser-perl*
make

Thanks,

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

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

* [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl
  2012-03-28 13:18                 ` Thomas Petazzoni
@ 2012-03-28 14:00                   ` Will Newton
  2012-03-28 15:46                     ` Thomas Petazzoni
  0 siblings, 1 reply; 17+ messages in thread
From: Will Newton @ 2012-03-28 14:00 UTC (permalink / raw)
  To: buildroot

On Wed, Mar 28, 2012 at 2:18 PM, Thomas Petazzoni
<thomas.petazzoni@free-electrons.com> wrote:
> Le Wed, 28 Mar 2012 14:01:56 +0100,
> Will Newton <will.newton@gmail.com> a ?crit :
>
>> [win at lemeta01 buildroot]$ env | grep LD_LIBRARY
>> [win at lemeta01 buildroot]$ ./output/host/usr/bin/arm-linux-readelf -a
>> ./output/host/usr/lib/perl/auto/XML/Parser/Expat/Expat.so | grep RPATH
>> [win at lemeta01 buildroot]$
>
> Ah, ah, this is our problem.
>
>> Although the makefiles do mention rpath, but that one does not seem to
>> be getting used either:
>
> We have a rpath set in HOST_LDFLAGS, but this variable doesn't seem to
> be used when building host-libxml-parser-perl. However, by
> Expat/Makefile contains LD_RUN_PATH="/opt/outputs/perl/host/usr/lib" in
> the environment when calling ld:
>
> LD_RUN_PATH="/opt/outputs/perl/host/usr/lib" cc ?-shared -O2 -g -L/usr/local/lib -fstack-protector Expat.o ?-o ../blib/arch/auto/XML/Parser/Expat/Expat.so ? ? ?\
> ? ? ? ? ? -L/opt/outputs/perl/host/usr/lib -lexpat
>
> And LD_RUN_PATH is used by ld as the RPATH when no -rpath option is
> used. I guess this LD_RUN_PATH is set because we run the Makefile.PL
> script with INSTALLSITELIB=/opt/outputs/perl/host/usr/lib/perl.
>
> Could you post the output of:
>
> rm -rf output/build/host-libxml-parser-perl*
> make

I think I may have a solution. It looks like Red Hat (and hence
CentOS) remove support for LD_RUN_PATH by default:

https://bugzilla.redhat.com/show_bug.cgi?id=136009

However there is a flag to turn it back on. Setting this seems to get
me a sane runpath. Does this look ok? I assume it will silently do
nothing on non-RH systems.

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

* [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl
  2012-03-28 14:00                   ` Will Newton
@ 2012-03-28 15:46                     ` Thomas Petazzoni
  0 siblings, 0 replies; 17+ messages in thread
From: Thomas Petazzoni @ 2012-03-28 15:46 UTC (permalink / raw)
  To: buildroot

Le Wed, 28 Mar 2012 15:00:36 +0100,
Will Newton <will.newton@gmail.com> a ?crit :

> I think I may have a solution. It looks like Red Hat (and hence
> CentOS) remove support for LD_RUN_PATH by default:
> 
> https://bugzilla.redhat.com/show_bug.cgi?id=136009
> 
> However there is a flag to turn it back on. Setting this seems to get
> me a sane runpath. Does this look ok? I assume it will silently do
> nothing on non-RH systems.

Ah, ah, it looks like a very good solution indeed.

Acked-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

Thanks for the time you have spent investigating this problem!

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

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

end of thread, other threads:[~2012-03-28 15:46 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-03-27  7:06 [Buildroot] [pull request] Pull request for branch for-2012.05/perl Thomas Petazzoni
2012-03-27  7:06 ` [Buildroot] [PATCH 1/2] microperl: fix MICROPERL_INSTALL_TARGET_CMDS Thomas Petazzoni
2012-03-28  6:28   ` Peter Korsgaard
2012-03-27  7:06 ` [Buildroot] [PATCH 2/2] microperl: install host-microperl in $(HOST_DIR)/opt/perl Thomas Petazzoni
2012-03-27  7:12   ` Thomas Petazzoni
2012-03-28  6:54   ` Peter Korsgaard
2012-03-28  7:55     ` Thomas Petazzoni
2012-03-28  9:32       ` Peter Korsgaard
2012-03-28 10:40         ` Will Newton
2012-03-28 10:55           ` Thomas Petazzoni
2012-03-28 12:47             ` Will Newton
2012-03-28 12:52             ` Thomas Petazzoni
2012-03-28 13:01               ` Will Newton
2012-03-28 13:10                 ` Will Newton
2012-03-28 13:18                 ` Thomas Petazzoni
2012-03-28 14:00                   ` Will Newton
2012-03-28 15:46                     ` Thomas Petazzoni

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.