pkg-perl: add $(2)_CONV_ENV
PATCH v2 1/3 pkg-perl: add $(2)_CONV_ENV
in some case $(2)_CONV_OPT is not enough
--- docs/manual/adding-packages-perl.txt | 4 ++++ package/pkg-perl.mk | 4 ++++ 2 files changed, 8 insertions(+)
docs/manual/adding-packages-perl.txt +4 -0
@@ -100,6 +100,10 @@ A few additional variables, specific to the Perl/CPAN infrastructure, can also be defined. Many of them are only useful in very specific cases, typical packages will therefore only use a few of them. +* +PERL_FOO_ENV_OPT+/+HOST_PERL_FOO_ENV_OPT+, to specify additional + environment variables to pass to the +perl Makefile.PL+ or +perl Build.PL+. + By default, empty. + * +PERL_FOO_CONF_OPT+/+HOST_PERL_FOO_CONF_OPT+, to specify additional configure options to pass to the +perl Makefile.PL+ or +perl Build.PL+. By default, empty.
package/pkg-perl.mk +4 -0
@@ -49,6 +49,7 @@ ifeq ($(4),target) # Configure package for target define $(2)_CONFIGURE_CMDS cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] ; then \ + $$($(2)_CONF_ENV) \ PERL_MM_USE_DEFAULT=1 \ perl Build.PL \ --config ar="$$(TARGET_AR)" \
@@ -69,6 +70,7 @@ define $(2)_CONFIGURE_CMDS --install_path libdoc=/usr/share/man/man3 \ $$($(2)_CONF_OPT); \ else \ + $$($(2)_CONF_ENV) \ PERL_MM_USE_DEFAULT=1 \ PERL_AUTOINSTALL=--skipdeps \ perl Makefile.PL \
@@ -95,12 +97,14 @@ else # Configure package for host define $(2)_CONFIGURE_CMDS cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] ; then \ + $$($(2)_CONF_ENV) \ PERL_MM_USE_DEFAULT=1 \ perl Build.PL \ --install_base $$(HOST_DIR)/usr \ --installdirs vendor \ $$($(2)_CONF_OPT); \ else \ + $$($(2)_CONF_ENV) \ PERL_MM_USE_DEFAULT=1 \ PERL_AUTOINSTALL=--skipdeps \ perl Makefile.PL \
Signature · 1 line
1.9.1
PATCH v2 2/3 perl-net-ssleay: fix build
set the correct prefix, instead of '/usr' detected on the host
see http://autobuild.buildroot.net/results/135/135867ef85535863e3647cc5fb82accb6f77612c/
--- package/perl-net-ssleay/perl-net-ssleay.mk | 2 ++ 1 file changed, 2 insertions(+)
package/perl-net-ssleay/perl-net-ssleay.mk +2 -0
@@ -11,4 +11,6 @@ PERL_NET_SSLEAY_DEPENDENCIES = perl openssl PERL_NET_SSLEAY_LICENSE = OpenSSL PERL_NET_SSLEAY_LICENSE_FILES = LICENSE +PERL_NET_SSLEAY_CONF_ENV = OPENSSL_PREFIX=$(STAGING_DIR)/usr + $(eval $(perl-package))
Signature · 1 line
1.9.1
PATCH v2 2/3 perl-net-ssleay: fix build
Dear Francois Perrad,
Quoted 5 lines · Francois Perrad
set the correct prefix, instead of '/usr' detected on the host
see http://autobuild.buildroot.net/results/135/135867ef85535863e3647cc5fb82accb6f77612c/
Signed-off-by Francois Perrad <[email protected]>
Again, sorry to be annoying, but please, please, please, better commit logs. The title should be more something like:
perl-net-ssleay: specific correct OpenSSL prefix to fix build
Thanks,
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
PATCH v2 3/3 perl-net-ssleay: fix build
In reply to Francois Perradthe following error occurs after the previous patch
arm-none-linux-gnueabi-gcc: error: unrecognized command line option '-shared '
so, force LDDLFLAGS without quote
note: previously LDDLFLAGS was correct
--- package/perl-net-ssleay/perl-net-ssleay.mk | 5 +++++ 1 file changed, 5 insertions(+)
package/perl-net-ssleay/perl-net-ssleay.mk +5 -0
@@ -13,4 +13,9 @@ PERL_NET_SSLEAY_LICENSE_FILES = LICENSE PERL_NET_SSLEAY_CONF_ENV = OPENSSL_PREFIX=$(STAGING_DIR)/usr +define PERL_NET_SSLEAY_FIX_MAKEFILE + $(SED) 's/^LDDLFLAGS =.*/LDDLFLAGS = -shared/' $(@D)/Makefile +endef +PERL_NET_SSLEAY_POST_CONFIGURE_HOOKS += PERL_NET_SSLEAY_FIX_MAKEFILE + $(eval $(perl-package))
Signature · 1 line
1.9.1
PATCH v2 3/3 perl-net-ssleay: fix build
Dear Francois Perrad,
See: this patch has exactly the same title as the previous one. That's a good indication that the title is not sufficiently distinctive.
Quoted 16 lines · Francois Perrad
the following error occurs after the previous patch
arm-none-linux-gnueabi-gcc: error: unrecognized command line option '-shared 'so, force LDDLFLAGS without quote
note: previously LDDLFLAGS was correct
Signed-off-by Francois Perrad <[email protected]>--- package/perl-net-ssleay/perl-net-ssleay.mk | 5 +++++ 1 file changed, 5 insertions(+)package/perl-net-ssleay/perl-net-ssleay.mk +0
-0
package/perl-net-ssleay/perl-net-ssleay.mk PERL_NET_SSLEAY_LICENSE_FILES = LICENSE · line 19
Quoted 7 lines
package/perl-net-ssleay/perl-net-ssleay.mk +4
-0@@ -13,4 +13,9 @@ PERL_NET_SSLEAY_LICENSE_FILES = LICENSE PERL_NET_SSLEAY_CONF_ENV = OPENSSL_PREFIX=$(STAGING_DIR)/usr +define PERL_NET_SSLEAY_FIX_MAKEFILE + $(SED) 's/^LDDLFLAGS =.*/LDDLFLAGS = -shared/' $(@D)/Makefile +endef +PERL_NET_SSLEAY_POST_CONFIGURE_HOOKS += PERL_NET_SSLEAY_FIX_MAKEFILE
What about BR2_PREFER_STATIC_LIB=y configurations, as Peter asked in the review of your initial patch?
Thanks!
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
PATCH v2 3/3 perl-net-ssleay: fix build
In reply to Francois PerradFran?ois, All,
On 2014-07-03 18:53 +0200, Francois Perrad spake thusly:
Quoted 7 lines
the following error occurs after the previous patch
arm-none-linux-gnueabi-gcc: error: unrecognized command line option '-shared 'so, force LDDLFLAGS without quote
note: previously LDDLFLAGS was correct
Signed-off-by Francois Perrad <[email protected]>
I've dropped this patch from my resend [0], and marked it Rejected in the patchwork, because I submitted an alternative patch, and C extensions to Perl can not be built static anyway.
[0] http://lists.busybox.net/pipermail/buildroot/2014-July/101699.html
Regards,
Yann E. MORIN.
Quoted 25 lines
--- package/perl-net-ssleay/perl-net-ssleay.mk | 5 +++++ 1 file changed, 5 insertions(+)package/perl-net-ssleay/perl-net-ssleay.mk +5
-0@@ -13,4 +13,9 @@ PERL_NET_SSLEAY_LICENSE_FILES = LICENSE PERL_NET_SSLEAY_CONF_ENV = OPENSSL_PREFIX=$(STAGING_DIR)/usr +define PERL_NET_SSLEAY_FIX_MAKEFILE + $(SED) 's/^LDDLFLAGS =.*/LDDLFLAGS = -shared/' $(@D)/Makefile +endef +PERL_NET_SSLEAY_POST_CONFIGURE_HOOKS += PERL_NET_SSLEAY_FIX_MAKEFILE + $(eval $(perl-package))Signature · 6 lines
1.9.1 _______________________________________________ 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. | '------------------------------^-------^------------------^--------------------'
PATCH v2 3/3 perl-net-ssleay: fix build
2014-07-13 15:35 GMT+02:00 Yann E. MORIN <[email protected]>:
Quoted 8 lines
Fran?ois, All,
On 2014-07-03 18:53 +0200, Francois Perrad spake thusly:
Quoted 5 lines
the following error occurs after the previous patch
arm-none-linux-gnueabi-gcc: error: unrecognized command line option '-shared 'so, force LDDLFLAGS without quote
Quoted 9 lines
Quoted 2 lines
note: previously LDDLFLAGS was correct
Signed-off-by Francois Perrad <[email protected]>I've dropped this patch from my resend [0], and marked it Rejected in the patchwork, because I submitted an alternative patch, and C extensions to Perl can not be built static anyway.
[0] http://lists.busybox.net/pipermail/buildroot/2014-July/101699.html
On my box, with all patches already applied in the trunk, I still need this patch.
Fran?ois
Quoted 40 lines
Regards,
Yann E. MORIN.Quoted 21 lines
--- package/perl-net-ssleay/perl-net-ssleay.mk | 5 +++++ 1 file changed, 5 insertions(+)package/perl-net-ssleay/perl-net-ssleay.mk +5
-1@@ -13,4 +13,9 @@ PERL_NET_SSLEAY_LICENSE_FILES = LICENSE PERL_NET_SSLEAY_CONF_ENV = OPENSSL_PREFIX=$(STAGING_DIR)/usr +define PERL_NET_SSLEAY_FIX_MAKEFILE + $(SED) 's/^LDDLFLAGS =.*/LDDLFLAGS = -shared/' $(@D)/Makefile +endef +PERL_NET_SSLEAY_POST_CONFIGURE_HOOKS += PERL_NET_SSLEAY_FIX_MAKEFILE + $(eval $(perl-package)) --1.9.1
Quoted 4 lines
_______________________________________________
buildroot mailing list
buildroot at busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot--
.-----------------.--------------------.------------------.--------------------.| 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. |'------------------------------^-------^------------------^--------------------'
_______________________________________________
buildroot mailing list
buildroot at busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot
PATCH v2 3/3 perl-net-ssleay: fix build
Fran?ois, All,
On 2014-07-14 21:52 +0200, Fran?ois Perrad spake thusly:
Quoted 10 lines
2014-07-13 15:35 GMT+02:00 Yann E. MORIN <[email protected]>:
Quoted 9 lines
On 2014-07-03 18:53 +0200, Francois Perrad spake thusly:
Quoted 7 lines
the following error occurs after the previous patch
arm-none-linux-gnueabi-gcc: error: unrecognized command line option '-shared 'so, force LDDLFLAGS without quote
note: previously LDDLFLAGS was correct
Signed-off-by Francois Perrad <[email protected]>
Quoted 6 lines
Quoted 3 lines
I've dropped this patch from my resend [0], and marked it Rejected in the patchwork, because I submitted an alternative patch, and C extensions to Perl can not be built static anyway.
On my box, with all patches already applied in the trunk, I still need this patch.
Ah, I see. I re-tested here, and indeed, it does perl-net-ssleay does not build anymore.
I swear I was able to build it before I removed that patch... :-(
However, I have investigated a bit, and here are my findings:
- our pkg-perl simply calls 'perl' to run the configure steps
- this calls to the host system's perl
- it also passes (among many other flags)::
--config lddlflags="-shared $$(TARGET_LDFLAGS)"
- this gets shoehorned into the generated Makefile as:
LDDLFLAGS = '-shared '
- which, when calling gcc for the link step, is then passed as:
...-gcc '-shared ' ...- which is interpreted by gcc as the option '-shared ', so with a trailing space.
Removing the -shared from the configure steps yields a Makefile with:
LDDLFLAGS = -shared -L/usr/local/lib -fstack-protector
Notice how there is no longer any single-quote around the value. And now, it builds!
However, there is an unwanted -L/usr/local/lib option, which is properly wrong, since we're doing cross-compilation. So, where does it come from?
Well, remember we're calling the host system's perl. On my system, I was able to track the definition of LDDLFALGS to this file:
/usr/lib/perl/5.18.2/Config_heavy.pl
which aptly contains:
lddlflags='-shared -L/usr/local/lib -fstack-protector'
Changing the 'local' in there by 'YEM' would yield a Makefile for perl-net-ssleay with, guess what? The following:
LDDLFLAGS = -shared -L/usr/YEM/lib -fstack-protector
Bingo!
But why doesn't it take the value we pass on the configure line? Ah, for my config, $(TARGET_LDFLAGS) is empty. So, it seems that if we pass an empty value to --lddlflags, then it uses the default value specified in the installation's files. That's not good...
So, it seems we would need to do one of the following:
- find a way to pass a no-op, non-empty value to lddlflags, or
- munge all generated Makefile so they no longer have paths to the host system libs/includes, or
- tell the host perl not to use system paths, but I guess perl is not well equipped to be gentle to cross-compiletion, or
- build our own host-perl and munge its installed files so they point
to $(STAGING_DIR) (instead of $(HOST_DIR), probably)
Heck, I think the first option is the quickest as a workaround, but that the latest is the safest, although the most complex. I doubt the third would be that easy, while with the second option, we may miss something... :-(
In any case, the -shared value in the configure steps is absolutely not needed (and it breaks the build!) I'm testing the other extensions now to see if we can really remove it...
BTW, all the above is also valid for LDFLAGS, sicne mine also contain an option -L/usr/local/lib .
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. | '------------------------------^-------^------------------^--------------------'
PATCH v2 3/3 perl-net-ssleay: fix build
Fran?ois, All,
On 2014-07-15 00:43 +0200, Yann E. MORIN spake thusly:
Quoted 15 lines
On 2014-07-14 21:52 +0200, Fran?ois Perrad spake thusly:
Quoted 14 lines
2014-07-13 15:35 GMT+02:00 Yann E. MORIN <[email protected]>:
Quoted 12 lines
On 2014-07-03 18:53 +0200, Francois Perrad spake thusly:
Quoted 7 lines
the following error occurs after the previous patch
arm-none-linux-gnueabi-gcc: error: unrecognized command line option '-shared 'so, force LDDLFLAGS without quote
note: previously LDDLFLAGS was correct
Signed-off-by Francois Perrad <[email protected]>I've dropped this patch from my resend [0], and marked it Rejected in the patchwork, because I submitted an alternative patch, and C extensions to Perl can not be built static anyway.
Quoted 7 lines
Quoted 2 lines
On my box, with all patches already applied in the trunk, I still need this patch.
Ah, I see. I re-tested here, and indeed, it does perl-net-ssleay does not build anymore.
I swear I was able to build it before I removed that patch... :-(
OK, that's probably because I had removed -shared fron pkg-perl.mk and forgot about it.
Quoted 6 lines
However, I have investigated a bit, and here are my findings:
- our pkg-perl simply calls 'perl' to run the configure steps
- this calls to the host system's perl
- it also passes (among many other flags)::--config lddlflags="-shared $$(TARGET_LDFLAGS)"
I tried to set TARGET_LDFLAGS="-g" since -g is simply ignored by ld, and I left the -shared in lddlflags on the configure line, but then, here's what I got:
arm-linux-gnueabihf-gcc: error: unrecognized command line option ?-shared -g?
Bummer! So, if we pass more than one option to --lddlflags, the perl infra completely derails, and sets LDDLFLAGS in the Makefile, to:
LDDLFLAGS = '-shared -g'
Bad, real bad... :-(
OK, let's see what happens to other extensions. What about perl-mojolicious? Here's what LDDLFLAGS looks like with -shared on the configure line, and TARGET_LDFLAGS=-g:
LDDLFLAGS = -shared -g
Oooookay... And other extensions are OK, too.
So, that's not the perl infra that is brain-dead, that's really perl-net-ssleay which is completely f*cked up... :-(
OK, I'll revive your patch, with a few quirks...
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. | '------------------------------^-------^------------------^--------------------'
PATCH v2 3/3 perl-net-ssleay: fix build
Fran?ois, All,
On 2014-07-15 01:22 +0200, Yann E. MORIN spake thusly:
Quoted 9 lines
On 2014-07-15 00:43 +0200, Yann E. MORIN spake thusly:
Quoted 7 lines
On 2014-07-14 21:52 +0200, Fran?ois Perrad spake thusly:
Quoted 6 lines
2014-07-13 15:35 GMT+02:00 Yann E. MORIN <[email protected]>:
Quoted 3 lines
I've dropped this patch from my resend [0], and marked it Rejected in the patchwork, because I submitted an alternative patch, and C extensions to Perl can not be built static anyway.
On my box, with all patches already applied in the trunk, I still need this patch.
OK, I'll revive your patch, with a few quirks...
And the new patch has been posted, now:
http://patchwork.ozlabs.org/patch/369784/
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. | '------------------------------^-------^------------------^--------------------'
PATCH v2 1/3 pkg-perl: add $(2)_CONV_ENV
In reply to Francois PerradDear Francois Perrad,
Quoted 1 line · Francois Perrad
in some case $(2)_CONV_OPT is not enough
In title and commit log: s/CONV/CONF/. Also please try to write more detailed commit messages, such as:
"""
pkg-perl: add support for $(2)_CONF_ENV
This commit adds support for specifying additional variables to be passed in the perl Makefile.PL or perl Build.PL executions for packages based on the perl-package infrastructure.
"""
Quoted 12 lines
Signed-off-by Francois Perrad <[email protected]>--- docs/manual/adding-packages-perl.txt | 4 ++++ package/pkg-perl.mk | 4 ++++ 2 files changed, 8 insertions(+)docs/manual/adding-packages-perl.txt +0
-0
docs/manual/adding-packages-perl.txt A few additional variables, specific to the Perl/CPAN infrastructure, · line 103
Quoted 4 lines
docs/manual/adding-packages-perl.txt +1
-0@@ -100,6 +100,10 @@ A few additional variables, specific to the Perl/CPAN infrastructure, can also be defined. Many of them are only useful in very specific cases, typical packages will therefore only use a few of them. +* +PERL_FOO_ENV_OPT+/+HOST_PERL_FOO_ENV_OPT+, to specify additional
The name of the options is incorrect here, it should be PERL_FOO_CONF_ENV and HOST_PERL_FOO_CONV_ENV.
Thanks,
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com