diff mbox

perl-net-ssleay: fix configure

Message ID 1405381684-3844-1-git-send-email-yann.morin.1998@free.fr
State Accepted
Headers show

Commit Message

Yann E. MORIN July 14, 2014, 11:48 p.m. UTC
From: Francois Perrad <fperrad@gmail.com>

When TARGET_LDFLAGS contains more than one option, the generated
Makefile contains this definition of LDDLFLAGS:
        LDDLFLAGS = '--option-1 --option-2'

Which when passed to gcc is interpreted as a single option, and gcc
(rightfully) barfs on it, like with:
        arm-linux-gnueabihf-gcc: error: unrecognized command line
        option ‘-shared -g’

This is because perl-net-ssleay's buildsystem is really completely
brain-damaged. Other perl extensions do not behave like that, and
instead are doing the only same thing to do: not add single quotes
around the definition, and just use what they were provided for
lddlflags.

So, just do the same for perl-net-ssleay. Since tweaking (yet once
more) their buildsystem is too complex, we just use a post-configure
hook to fix up the mess, by removing single quotes around the definition
of LDDLFLAGS.

Note: if only one option is specified, no single quotes are added,
but out hook is a no-op in this case.

See also:
    http://lists.busybox.net/pipermail/buildroot/2014-July/101782.html
and the previous message for even more entertainment. ;-)

Signed-off-by: Francois Perrad <francois.perrad@gadz.org>
[me: find the real cause of the issue, tweak the sed expression to not
 force -shared and instead just trim the single quotes, enhance commit
 log]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
 package/perl-net-ssleay/perl-net-ssleay.mk | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Thomas Petazzoni July 15, 2014, 5:13 p.m. UTC | #1
Dear Yann E. MORIN,

On Tue, 15 Jul 2014 01:48:04 +0200, Yann E. MORIN wrote:

> This is because perl-net-ssleay's buildsystem is really completely
> brain-damaged. Other perl extensions do not behave like that, and
> instead are doing the only same thing to do: not add single quotes

same -> sane

> around the definition, and just use what they were provided for
> lddlflags.

lddflags -> LDDLFLAGS.

> So, just do the same for perl-net-ssleay. Since tweaking (yet once
> more) their buildsystem is too complex, we just use a post-configure
> hook to fix up the mess, by removing single quotes around the definition
> of LDDLFLAGS.
> 
> Note: if only one option is specified, no single quotes are added,
> but out hook is a no-op in this case.

out -> our.

> +define PERL_NET_SSLEAY_FIX_MAKEFILE
> +	$(SED) "s/^LDDLFLAGS = '\(.*\)'/LDDLFLAGS = \1/" $(@D)/Makefile
> +endef
> +PERL_NET_SSLEAY_POST_CONFIGURE_HOOKS += PERL_NET_SSLEAY_FIX_MAKEFILE

I've fixed these and added a short comment above the hook definition to
explain what it is doing. Committed!

Thomas
Yann E. MORIN July 15, 2014, 5:19 p.m. UTC | #2
Thomas, All,

On 2014-07-15 19:13 +0200, Thomas Petazzoni spake thusly:
> On Tue, 15 Jul 2014 01:48:04 +0200, Yann E. MORIN wrote:
[--SNIP--]
> I've fixed these and added a short comment above the hook definition to
> explain what it is doing. Committed!

Thanks!

/me should really look for a spelling+grammar checker for git commits...

Regards,
Yann E. MORIN.
Arnout Vandecappelle July 16, 2014, 6:15 a.m. UTC | #3
Hi Yann, Francois,

On 15/07/14 01:48, Yann E. MORIN wrote:
> From: Francois Perrad <fperrad@gmail.com>
> 
> When TARGET_LDFLAGS contains more than one option, the generated
> Makefile contains this definition of LDDLFLAGS:
>         LDDLFLAGS = '--option-1 --option-2'
> 
> Which when passed to gcc is interpreted as a single option, and gcc
> (rightfully) barfs on it, like with:
>         arm-linux-gnueabihf-gcc: error: unrecognized command line
>         option ‘-shared -g’
> 
> This is because perl-net-ssleay's buildsystem is really completely
> brain-damaged. Other perl extensions do not behave like that, and
> instead are doing the only same thing to do: not add single quotes
> around the definition, and just use what they were provided for
> lddlflags.
> 
> So, just do the same for perl-net-ssleay. Since tweaking (yet once
> more) their buildsystem is too complex, we just use a post-configure
> hook to fix up the mess, by removing single quotes around the definition
> of LDDLFLAGS.

 Are you sure that it is only perl-net-ssleay that is broken in this way, and
not perl-xml-libxml?

 I tried to run (without this patch)

make perl-net-ssleay BR2_TARGET_LDFLAGS=-g

and that worked just fine. So I suspect the problem is in the system's MakeMaker
package, and not in perl-net-ssleay itself. If that is the case, you should see
the same problem for perl-xml-libxml (because it also uses the LDDLFLAGS, while
other packages don't because they don't build any C code).

 I'm not sure what the real solution would be. Perhaps add a host-perl-makemaker
package and depend on that?

 Regards,
 Arnout


> 
> Note: if only one option is specified, no single quotes are added,
> but out hook is a no-op in this case.
> 
> See also:
>     http://lists.busybox.net/pipermail/buildroot/2014-July/101782.html
> and the previous message for even more entertainment. ;-)
> 
> Signed-off-by: Francois Perrad <francois.perrad@gadz.org>
> [me: find the real cause of the issue, tweak the sed expression to not
>  force -shared and instead just trim the single quotes, enhance commit
>  log]
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> ---
>  package/perl-net-ssleay/perl-net-ssleay.mk | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/package/perl-net-ssleay/perl-net-ssleay.mk b/package/perl-net-ssleay/perl-net-ssleay.mk
> index 4a362fb..6b21eb2 100644
> --- a/package/perl-net-ssleay/perl-net-ssleay.mk
> +++ b/package/perl-net-ssleay/perl-net-ssleay.mk
> @@ -15,4 +15,9 @@ PERL_NET_SSLEAY_LICENSE_FILES = LICENSE
>  # suffers from: don't search for openssl, they pick the host-system one.
>  PERL_NET_SSLEAY_CONF_ENV = OPENSSL_PREFIX=$(STAGING_DIR)/usr
>  
> +define PERL_NET_SSLEAY_FIX_MAKEFILE
> +	$(SED) "s/^LDDLFLAGS = '\(.*\)'/LDDLFLAGS = \1/" $(@D)/Makefile
> +endef
> +PERL_NET_SSLEAY_POST_CONFIGURE_HOOKS += PERL_NET_SSLEAY_FIX_MAKEFILE
> +
>  $(eval $(perl-package))
>
Francois Perrad July 16, 2014, 5:42 p.m. UTC | #4
2014-07-16 8:15 GMT+02:00 Arnout Vandecappelle <arnout@mind.be>:
>  Hi Yann, Francois,
>
> On 15/07/14 01:48, Yann E. MORIN wrote:
>> From: Francois Perrad <fperrad@gmail.com>
>>
>> When TARGET_LDFLAGS contains more than one option, the generated
>> Makefile contains this definition of LDDLFLAGS:
>>         LDDLFLAGS = '--option-1 --option-2'
>>
>> Which when passed to gcc is interpreted as a single option, and gcc
>> (rightfully) barfs on it, like with:
>>         arm-linux-gnueabihf-gcc: error: unrecognized command line
>>         option ‘-shared -g’
>>
>> This is because perl-net-ssleay's buildsystem is really completely
>> brain-damaged. Other perl extensions do not behave like that, and
>> instead are doing the only same thing to do: not add single quotes
>> around the definition, and just use what they were provided for
>> lddlflags.
>>
>> So, just do the same for perl-net-ssleay. Since tweaking (yet once
>> more) their buildsystem is too complex, we just use a post-configure
>> hook to fix up the mess, by removing single quotes around the definition
>> of LDDLFLAGS.
>
>  Are you sure that it is only perl-net-ssleay that is broken in this way, and
> not perl-xml-libxml?
>
>  I tried to run (without this patch)
>
> make perl-net-ssleay BR2_TARGET_LDFLAGS=-g
>
> and that worked just fine. So I suspect the problem is in the system's MakeMaker
> package, and not in perl-net-ssleay itself. If that is the case, you should see
> the same problem for perl-xml-libxml (because it also uses the LDDLFLAGS, while
> other packages don't because they don't build any C code).
>
>  I'm not sure what the real solution would be. Perhaps add a host-perl-makemaker
> package and depend on that?
>

Net-SSLeay has a Makefile.PL, but it doesn't use to run the classic
ExtUtils-MakeMaker,
it runs a local copy of Module-Install, see in inc/

François

>  Regards,
>  Arnout
>
>
>>
>> Note: if only one option is specified, no single quotes are added,
>> but out hook is a no-op in this case.
>>
>> See also:
>>     http://lists.busybox.net/pipermail/buildroot/2014-July/101782.html
>> and the previous message for even more entertainment. ;-)
>>
>> Signed-off-by: Francois Perrad <francois.perrad@gadz.org>
>> [me: find the real cause of the issue, tweak the sed expression to not
>>  force -shared and instead just trim the single quotes, enhance commit
>>  log]
>> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
>> ---
>>  package/perl-net-ssleay/perl-net-ssleay.mk | 5 +++++
>>  1 file changed, 5 insertions(+)
>>
>> diff --git a/package/perl-net-ssleay/perl-net-ssleay.mk b/package/perl-net-ssleay/perl-net-ssleay.mk
>> index 4a362fb..6b21eb2 100644
>> --- a/package/perl-net-ssleay/perl-net-ssleay.mk
>> +++ b/package/perl-net-ssleay/perl-net-ssleay.mk
>> @@ -15,4 +15,9 @@ PERL_NET_SSLEAY_LICENSE_FILES = LICENSE
>>  # suffers from: don't search for openssl, they pick the host-system one.
>>  PERL_NET_SSLEAY_CONF_ENV = OPENSSL_PREFIX=$(STAGING_DIR)/usr
>>
>> +define PERL_NET_SSLEAY_FIX_MAKEFILE
>> +     $(SED) "s/^LDDLFLAGS = '\(.*\)'/LDDLFLAGS = \1/" $(@D)/Makefile
>> +endef
>> +PERL_NET_SSLEAY_POST_CONFIGURE_HOOKS += PERL_NET_SSLEAY_FIX_MAKEFILE
>> +
>>  $(eval $(perl-package))
>>
>
>
> --
> 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
> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
Yann E. MORIN July 16, 2014, 8:05 p.m. UTC | #5
Arnout, All,

On 2014-07-16 08:15 +0200, Arnout Vandecappelle spake thusly:
> On 15/07/14 01:48, Yann E. MORIN wrote:
[--SNIP--]
> > This is because perl-net-ssleay's buildsystem is really completely
> > brain-damaged. Other perl extensions do not behave like that, and
> > instead are doing the only same thing to do: not add single quotes
> > around the definition, and just use what they were provided for
> > lddlflags.
> > 
> > So, just do the same for perl-net-ssleay. Since tweaking (yet once
> > more) their buildsystem is too complex, we just use a post-configure
> > hook to fix up the mess, by removing single quotes around the definition
> > of LDDLFLAGS.
> 
>  Are you sure that it is only perl-net-ssleay that is broken in this way, and
> not perl-xml-libxml?

No, perl-xml-libxml is not impacted by this issue. I just checked, and I
get a generated Makefile that contains:
    LDDLFLAGS = -shared -g

I maintain my position: perl-net-ssleay's buildsystem is brain-danaged! ;-)
And François confirmed that in his reply, too. ;-)

If we needed yet another reason why bundling dependencies in one's own
package was just bad, perl-net-ssleay is just that example. ;-)

Regards,
Yann E. MORIN.
Yann E. MORIN July 16, 2014, 8:07 p.m. UTC | #6
François, All,

On 2014-07-16 19:42 +0200, François Perrad spake thusly:
> Net-SSLeay has a Makefile.PL, but it doesn't use to run the classic
> ExtUtils-MakeMaker,
> it runs a local copy of Module-Install, see in inc/

Ah! Thanks for the explanations. Indeed, that's bad...

Would it be possible to make it use the system perl's MakeMaker instead
of its own copy? For example, if we were to just remove it?

Regards,
Yann E. MORIN.
diff mbox

Patch

diff --git a/package/perl-net-ssleay/perl-net-ssleay.mk b/package/perl-net-ssleay/perl-net-ssleay.mk
index 4a362fb..6b21eb2 100644
--- a/package/perl-net-ssleay/perl-net-ssleay.mk
+++ b/package/perl-net-ssleay/perl-net-ssleay.mk
@@ -15,4 +15,9 @@  PERL_NET_SSLEAY_LICENSE_FILES = LICENSE
 # suffers from: don't search for openssl, they pick the host-system one.
 PERL_NET_SSLEAY_CONF_ENV = OPENSSL_PREFIX=$(STAGING_DIR)/usr
 
+define PERL_NET_SSLEAY_FIX_MAKEFILE
+	$(SED) "s/^LDDLFLAGS = '\(.*\)'/LDDLFLAGS = \1/" $(@D)/Makefile
+endef
+PERL_NET_SSLEAY_POST_CONFIGURE_HOOKS += PERL_NET_SSLEAY_FIX_MAKEFILE
+
 $(eval $(perl-package))