Subject: Re: bug#45303: 28.0.50; [feature/native-comp] comp.c compilation error on Windows 10

From: Eli Zaretskii <[email-masked]>
Date: Fri, 18 Dec 2020 22:49:25 +0200

> From: Andrea Corallo <[email-masked]>
> Cc: [email-masked],  [email-masked],
>   =?UTF-8?Q?Li=C4=[email-masked]
> Date: Fri, 18 Dec 2020 16:37:31 +0000
> 
> Eli Zaretskii <[email-masked]> writes:
> 
> >> Date: Fri, 18 Dec 2020 13:28:20 +0000
> >> Cc: [email-masked], =?UTF-8?Q?Li=C4=[email-masked]
> >> From: Andrea Corallo via "Bug reports for GNU Emacs,
> >>  the Swiss army knife of text editors" <[email-masked]>
> >>
> >> >>  CCLD     temacs.exe
> >> >> C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
> >> >> comp.o: in function `md5_gz_stream':
> >> >> C:\msys64\home\VWinUser0\Downloads\emacs\native-comp\build\src/../../src/src/comp.c:713:
> >> >> undefined reference to `inflateInit2_'
> >> >> C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
> >> >> C:\msys64\home\VWinUser0\Downloads\emacs\native-comp\build\src/../../src/src/comp.c:730:
> >> >> undefined reference to `inflate'
> >> >
> >> > That's curious, looks you've not zlib but from the config.log you do...
> >>
> >> I really would like to understand what's going on here.
> >>
> >> We check in configure for zlib presence, actually this is also require
> >> by --with-nativecomp but somehow the linker fails to find it.
> >
> > Why does the native-comp branch require zlib in comp.c? what does it
> > do with zlib?
> 
> We hash the content of the lisp source files to obtain the correspondent
> eln name in the eln-cache.
> 
> This machinery has to work since early bootstrap (and has to be fast
> since is executed at each file load), so is directly done from comp.c.
> 
> When Emacs is installed the el files are compressed and so before
> hashing them we have to decompress therefore we use zlib.

Thanks for the explanations.

> > On master, zlib is an optional library, and when some Emacs command is
> > invoked that needs it, on MS-Windows we load the zlib DLL at run time
> > when requested.  See init_zlib_functions in decompress.c.  This is
> > unlike on Posix systems, where Emacs is linked with zlib at link time.
> > Does this explain what is going on?
> 
> I see, we should probably have comp.c use the necessary DEF_DLL_FN bloat
> or have these functions wrapped in decompress.c.

I think it's better to use functions in decompress.c or add whatever
you need there, and have the new functions use the same paradigm,
which on Windows loads the DLL the first time it is needed.