HEADSUP: zlib updated [svn commit: r205471 - in head: . lib/libz lib/libz/contrib lib/libz/doc sys/sys]

Xin LI delphij at gmail.com
Fri Apr 2 04:30:56 UTC 2010


Hi, Tom,

On Thu, Apr 1, 2010 at 12:59 PM, Tom Uffner <tom at uffner.com> wrote:
[...]
> i realize this. i was just adding to the list of ports that no longer
> build after this change. ghostscript is kind of important for print
> support.
>
> i doubt this is "right" either, but it is a quick & dirty way to
> make mplayer compile again:
>
> --- configure.orig      2010-04-01 15:49:37.000000000 -0400
> +++ configure   2010-04-01 15:50:50.000000000 -0400
> @@ -5337,7 +5337,7 @@
>  #include <dvdread/nav_read.h>
>  int main(void) { return 0; }
>  EOF
> -    cc_check -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
> -D_LARGEFILE64_SOURCE \
> +    cc_check -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 \
>       -ldvdread $_ld_dl && _dvdread=yes && _res_comment="external"
>   fi
>  fi
> @@ -7412,8 +7412,6 @@
>  if test "$_largefiles" = yes || freebsd ; then
>   CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
>   if test "$_dvdread" = yes || test "$_libdvdcss_internal" = yes ; then
> -    # dvdread support requires this (for off64_t)
> -    CFLAGS="$CFLAGS -D_LARGEFILE64_SOURCE"
>     cygwin && CFLAGS="$CFLAGS -DSYS_CYGWIN"
>   fi
>  fi

Specifying -DFOO basically means in C code one have:

%%%
#define FOO 1
%%%

This would not cause problem for zlib, at least not for zlib 1.2.4.1.
However, defining it do cause *64 interfaces being included, the
assumption doesn't seem right, according to my understanding of GNU
libc's manual.

I was wrong in a previous e-mail that it's not -D_LARGEFILE64_SOURCE
itself being broken, but #define _LARGEFILE64_SOURCE broken if it's
not defined as '1'.  GNU libc seems to test whether this is defined,
rather than testing it against '1' (zlib do this).

So in conclusion:

a) We actually face two different types of problems, one is defining
_LARGEFILE64_SOURCE on FreeBSD, this is not right.  It should not be
defined at all; another is to have "#define _LARGEFILE64_SOURCE"
instead of "#define _LARGEFILE64_SOURCE 1", this type would break not
only on FreeBSD but perhaps some other platforms, unfortunately this
seems to be common.  Should one hit either case, please have it fixed
by upstream developers, as it would benefit not only FreeBSD but also
other platforms.

b) For now I have implemented a temporary solution on -HEAD by
unifdef'ing _LARGEFILE64_SOURCE, _LFS64_SOURCE on zlib.h and zconf.h,
so ports may appear as "fixed".  This is not ideal since it makes us
to diverge away from zlib.  A better solution is under discussion and
this situation MAY change in the next import.

Cheers,
-- 
Xin LI <delphij at delphij.net> http://www.delphij.net


More information about the freebsd-current mailing list