Is it time for a libc_fixes library yet?

Ken Cunningham ken.cunningham.webuse at gmail.com
Mon Jul 3 20:26:06 UTC 2017


I see a general frustration with the current situation has led things to move along rather quicker than I had originally thought they might.

I will never know as much about licensing as you do. I hope this can be worked out to advantage. I notice most of this code is already being pasted in as patches, and it's in the files directory of many ports...

Right now this library is a dylib, as you previously recommended. Hope that helps. Will seek out any more liberal implementations. Most of these came for Apple open source, I think, over the past year.


K


On 2017-07-03, at 1:09 PM, Rainer Müller wrote:

> On 2017-07-03 19:07, Ken Cunningham wrote:
>> So the last 10 or so tickets in trac seem like they are all for
>> basically the same issue - a few missing symbols from libc prior to 10.7.
> 
> Well, I would take this as a reason to just drop support for such an old
> OS release... I know, I cannot convince you to do that yet. ;-)
> 
>> It is easy enough, but time consuming, to patch each individual source
>> file that is missing the definition (there might be several, also, so
>> you might have to do it multiple times in different files).
>> 
>> With this library of these missing functions
>> <https://github.com/kencu/snowleopardfixes>, all of them from the Apple
>> open source website IIRC, all you need to do is the following in the
>> Portfile:
>> 
>> if{${os.platform}eq "darwin"&& ${os.major} < 11} |{ depends_lib-append
>> port:snowleopardfixes configure.ldflags-append -lsnowleopardfixes } |
> 
> Taking a quick look at this library, all implementations seem to be
> covered by GPL-2+.
> 
> That makes this library not suitable for many ports, as the result after
> linking would no longer be distributable. It would be better to use
> implementations under a non-copyleft license such BSD, MIT, ISC, etc.
> 
>> It could be better named, perhaps libcfixes, as it applies to 10.4 to
>> 10.6, not just SnowLeopard. 
> 
> I would not declare theses as "fixes", but rather as "supplements"
> providing additional functions not available in libc.
> 
>> Addendum 1
>> 
>> I have a header in there as well to provide the function definitions,
>> but that header can cause trouble by bringing in other #defines, and it
>> seems that no port actually needs the header. Perhaps the header idea
>> can be improved by someone with more knowledge of #include_next, etc, or
>> more specific defines.
> 
> I guess you would see compiler warnings about implicit declarations?
> 
> As an example, if the compiler assumes a declaration like
>  int strnlen(int, int)
> instead of
>  size_t strnlen(const char *s, size_t maxlen)
> that could still work as long as sizeof(int) == sizeof(char*), because
> the parameters are passed with the same calling convention. However,
> this might fail in other cases at runtime (structs, floats, ...).
> Although it might still work correctly for builtins, for which the
> compiler actually knows the declaration.
> 
> To avoid exposing too many functions, the declarations could be
> controlled with preprocessor conditions.
> 
> #if !defined(SNOWLEOPARDFIXES_MANUAL_MODE) ||
>    defined(SNOWLEOPARDFIXES_STRNLEN)
> size_t strnlen(const char *s, size_t maxlen)
> #endif
> 
>> Addendum 2
>> 
>> As we have said before (last year) this library could be automatically
>> linked in by base. That would cause trouble with the ports that have
>> already patched in a def, tho.
> 
> If this library itself were in base, adding new functions would require
> a new base release. So you would still need local patches, which later
> break with the new release...
> 
> base could automatically add it as a dependency, with the port being in
> our ports tree.
> 
> Rainer



More information about the macports-dev mailing list