Re: [gentoo-dev] Re: sys-libs/ncurses: erronious deletion of *.dll.a files; possibly other packages affected

2017-09-29 Thread Michał Górny
Dnia 29 września 2017 11:29:03 CEST, Michael Haubenwallner  
napisał(a):
>On 09/29/2017 10:33 AM, Marty E. Plummer wrote:
>> On Fri, Sep 29, 2017 at 08:29:07AM +, Michael Haubenwallner
>wrote:
>>> On 09/29/2017 03:36 AM, Marty E. Plummer wrote:
 On Thu, Sep 28, 2017 at 07:35:20PM +, Mike Gilbert wrote:
> On Wed, Sep 20, 2017 at 10:01 PM, Marty E. Plummer
>  wrote:
>> arfrever suggests I send a mail here, as there are other packages
>which
>> may be affected by this issue and perhaps a more generalized fix
>is
>> required instead of an explicit fix in sys-libs/ncurses and other
>ebuilds
>> that may require it.
>
> I think the solution here is to remove those overly broad "find
> -delete" statements and replace them with something safer.
>
> Ideally the build system(s) would be patched to not compile static
> libs in the first place.
>
> If that's not possible, perhaps an eclass function could be
>created to
> safely remove static libs.
>
 Honestly I already have a pr up that fixes this particular
>package's
 issue, fairly simple fix https://github.com/gentoo/gentoo/pull/5734

 --- a/sys-libs/ncurses/ncurses-6.0-r1.ebuild
 +++ b/sys-libs/ncurses/ncurses-6.0-r1.ebuild
 @@ -241,7 +241,8 @@ multilib_src_install() {
# Provide a link for -lcurses.
ln -sf libncurses$(get_libname)
>"${ED}"/usr/$(get_libdir)/libcurses$(get_libname) || die
fi
 -  use static-libs || find "${ED}"/usr/ -name '*.a' -delete
 +  # don't delete '*.dll.a', needed for linking #631468
 +  use static-libs || find "${ED}"/usr/ -name '*.a' ! -name
>'*.dll.a' -delete
>>>
>>> In prefix overlay we have this version:
>>>
>>>   use static-libs || find "${ED}"/usr/ -name '*.a' -not -name
>"*$(get_libname)" -delete
>>>
>> Won't work here, as $(get_libname) returns .dll in this case, which
>is
>> why the symlinking is busted
>
>Indeed! Although I do believe get_libname should return the
>(dynamically) linkable file
>name rather than the dynamically loadable one, because a build system's
>target often is
>the dynamically linkable file, creating the loadable as side effect.
>Note that only COFF
>based systems (AIX, Windows) may distinguish (dynamically) linkable and
>loadable files.

Why not add a separate function to avoid this ambiguity?

>
>Additionally (although unused in Prefix), AIX allows for one single
>file libN.a containing
>Shared Objects, which can be statically linked too!
>
>And for winnt I've yet to decide the value for $(get_libname) as the
>Import Library:
>Candidates are ".so", ".dll.a", ".dll.lib" - as I do support all of
>them in the msvc
>wrapper ("parity") to reduce the need of patching various build systems
>for now...
>
>So probably the real safe one here is (in case get_libname may return
>".a"):
>
>use static-libs || find "${ED}"/usr/ -name '*.a' -not -name '*.dll.a'
>-not -name "*$(get_libname)" -delete
>
>OR: Really have some function prune_static_libs to remove library files
>serving as
>Static Library only - neither as Import Library nor Shared Library:
>Implemented
>for some platforms to ignore the file name but inspect the content
>instead.
>
>Remember: This is (related but) different from prune_libtool_libs,
>which suggests the find "${D}" -name '*.la' -delete alternative only.
>
>/haubi/


-- 
Best regards,
Michał Górny (by phone)



[gentoo-dev] Re: sys-libs/ncurses: erronious deletion of *.dll.a files; possibly other packages affected

2017-09-29 Thread Michael Haubenwallner
On 09/29/2017 10:33 AM, Marty E. Plummer wrote:
> On Fri, Sep 29, 2017 at 08:29:07AM +, Michael Haubenwallner wrote:
>> On 09/29/2017 03:36 AM, Marty E. Plummer wrote:
>>> On Thu, Sep 28, 2017 at 07:35:20PM +, Mike Gilbert wrote:
 On Wed, Sep 20, 2017 at 10:01 PM, Marty E. Plummer
  wrote:
> arfrever suggests I send a mail here, as there are other packages which
> may be affected by this issue and perhaps a more generalized fix is
> required instead of an explicit fix in sys-libs/ncurses and other ebuilds
> that may require it.

 I think the solution here is to remove those overly broad "find
 -delete" statements and replace them with something safer.

 Ideally the build system(s) would be patched to not compile static
 libs in the first place.

 If that's not possible, perhaps an eclass function could be created to
 safely remove static libs.

>>> Honestly I already have a pr up that fixes this particular package's
>>> issue, fairly simple fix https://github.com/gentoo/gentoo/pull/5734
>>>
>>> --- a/sys-libs/ncurses/ncurses-6.0-r1.ebuild
>>> +++ b/sys-libs/ncurses/ncurses-6.0-r1.ebuild
>>> @@ -241,7 +241,8 @@ multilib_src_install() {
>>> # Provide a link for -lcurses.
>>> ln -sf libncurses$(get_libname) 
>>> "${ED}"/usr/$(get_libdir)/libcurses$(get_libname) || die
>>> fi
>>> -   use static-libs || find "${ED}"/usr/ -name '*.a' -delete
>>> +   # don't delete '*.dll.a', needed for linking #631468
>>> +   use static-libs || find "${ED}"/usr/ -name '*.a' ! -name '*.dll.a' 
>>> -delete
>>
>> In prefix overlay we have this version:
>>
>>   use static-libs || find "${ED}"/usr/ -name '*.a' -not -name 
>> "*$(get_libname)" -delete
>>
> Won't work here, as $(get_libname) returns .dll in this case, which is
> why the symlinking is busted

Indeed! Although I do believe get_libname should return the (dynamically) 
linkable file
name rather than the dynamically loadable one, because a build system's target 
often is
the dynamically linkable file, creating the loadable as side effect. Note that 
only COFF
based systems (AIX, Windows) may distinguish (dynamically) linkable and 
loadable files.

Additionally (although unused in Prefix), AIX allows for one single file libN.a 
containing
Shared Objects, which can be statically linked too!

And for winnt I've yet to decide the value for $(get_libname) as the Import 
Library:
Candidates are ".so", ".dll.a", ".dll.lib" - as I do support all of them in the 
msvc
wrapper ("parity") to reduce the need of patching various build systems for 
now...

So probably the real safe one here is (in case get_libname may return ".a"):

  use static-libs || find "${ED}"/usr/ -name '*.a' -not -name '*.dll.a' -not 
-name "*$(get_libname)" -delete

OR: Really have some function prune_static_libs to remove library files serving 
as
Static Library only - neither as Import Library nor Shared Library: Implemented
for some platforms to ignore the file name but inspect the content instead.

Remember: This is (related but) different from prune_libtool_libs,
which suggests the find "${D}" -name '*.la' -delete alternative only.

/haubi/



[gentoo-dev] Re: sys-libs/ncurses: erronious deletion of *.dll.a files; possibly other packages affected

2017-09-29 Thread Marty E. Plummer
On Fri, Sep 29, 2017 at 08:29:07AM +, Michael Haubenwallner wrote:
> On 09/29/2017 03:36 AM, Marty E. Plummer wrote:
> > On Thu, Sep 28, 2017 at 07:35:20PM +, Mike Gilbert wrote:
> >> On Wed, Sep 20, 2017 at 10:01 PM, Marty E. Plummer
> >>  wrote:
> >>> arfrever suggests I send a mail here, as there are other packages which
> >>> may be affected by this issue and perhaps a more generalized fix is
> >>> required instead of an explicit fix in sys-libs/ncurses and other ebuilds
> >>> that may require it.
> >>
> >> I think the solution here is to remove those overly broad "find
> >> -delete" statements and replace them with something safer.
> >>
> >> Ideally the build system(s) would be patched to not compile static
> >> libs in the first place.
> >>
> >> If that's not possible, perhaps an eclass function could be created to
> >> safely remove static libs.
> >>
> > Honestly I already have a pr up that fixes this particular package's
> > issue, fairly simple fix https://github.com/gentoo/gentoo/pull/5734
> > 
> > --- a/sys-libs/ncurses/ncurses-6.0-r1.ebuild
> > +++ b/sys-libs/ncurses/ncurses-6.0-r1.ebuild
> > @@ -241,7 +241,8 @@ multilib_src_install() {
> > # Provide a link for -lcurses.
> > ln -sf libncurses$(get_libname) 
> > "${ED}"/usr/$(get_libdir)/libcurses$(get_libname) || die
> > fi
> > -   use static-libs || find "${ED}"/usr/ -name '*.a' -delete
> > +   # don't delete '*.dll.a', needed for linking #631468
> > +   use static-libs || find "${ED}"/usr/ -name '*.a' ! -name '*.dll.a' 
> > -delete
> 
> In prefix overlay we have this version:
> 
>   use static-libs || find "${ED}"/usr/ -name '*.a' -not -name 
> "*$(get_libname)" -delete
> 
> /haubi/
Won't work here, as $(get_libname) returns .dll in this case, which is
why the symlinking is busted



[gentoo-dev] Re: sys-libs/ncurses: erronious deletion of *.dll.a files; possibly other packages affected

2017-09-29 Thread Michael Haubenwallner
On 09/29/2017 03:36 AM, Marty E. Plummer wrote:
> On Thu, Sep 28, 2017 at 07:35:20PM +, Mike Gilbert wrote:
>> On Wed, Sep 20, 2017 at 10:01 PM, Marty E. Plummer
>>  wrote:
>>> arfrever suggests I send a mail here, as there are other packages which
>>> may be affected by this issue and perhaps a more generalized fix is
>>> required instead of an explicit fix in sys-libs/ncurses and other ebuilds
>>> that may require it.
>>
>> I think the solution here is to remove those overly broad "find
>> -delete" statements and replace them with something safer.
>>
>> Ideally the build system(s) would be patched to not compile static
>> libs in the first place.
>>
>> If that's not possible, perhaps an eclass function could be created to
>> safely remove static libs.
>>
> Honestly I already have a pr up that fixes this particular package's
> issue, fairly simple fix https://github.com/gentoo/gentoo/pull/5734
> 
> --- a/sys-libs/ncurses/ncurses-6.0-r1.ebuild
> +++ b/sys-libs/ncurses/ncurses-6.0-r1.ebuild
> @@ -241,7 +241,8 @@ multilib_src_install() {
>   # Provide a link for -lcurses.
>   ln -sf libncurses$(get_libname) 
> "${ED}"/usr/$(get_libdir)/libcurses$(get_libname) || die
>   fi
> - use static-libs || find "${ED}"/usr/ -name '*.a' -delete
> + # don't delete '*.dll.a', needed for linking #631468
> + use static-libs || find "${ED}"/usr/ -name '*.a' ! -name '*.dll.a' 
> -delete

In prefix overlay we have this version:

  use static-libs || find "${ED}"/usr/ -name '*.a' -not -name "*$(get_libname)" 
-delete

/haubi/