Message ID | 1405381684-3844-1-git-send-email-yann.morin.1998@free.fr |
---|---|
State | Accepted |
Headers | show |
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
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.
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)) >
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
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.
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 --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))