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

From: Andrea Corallo <[email-masked]>
Date: Mon, 21 Dec 2020 09:48:01 +0000

Eli Zaretskii <[email-masked]> writes:

>> 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.

Hi Eli,

so I did, with 5b10a0324d I moved 'md5_gz_stream' to decompress.c,
before running it we load zlib if necessary.

Hopefully this solves this part of the issue.

Thanks

  Andrea