Re: belated question about xmlregexp removal at 2.9.10
Tim Mooney via xml <[email protected]> Mon, 15 Nov 2021 17:32:22 -0600 (CST)
| Newsgroups | gmane.comp.gnome.lib.xml.general |
|---|---|
| Message-ID | <[email protected]> |
In regard to: Re: [xml] belated question about xmlregexp removal at 2.9.10,...: > Hi Tim! Hi Shlomi! > Tim Mooney via xml <[email protected]> wrote: [elided] >> When libxml2 2.9.10 was released, a number of formerly-public symbols >> were removed from the shared library. On the surface, that seems like >> it would be an ABI break, which might suggest a change in the SONAME of >> the library (such as a version bump from .2 to .3). That didn't happen, >> though. >> > > Reading the code, I see: > > ``` > if test "$with_regexps" = "no" ; then > echo Disabling Regexps support > WITH_REGEXPS=0 > TEST_REGEXPS= > else > WITH_REGEXPS=1 > TEST_REGEXPS="Regexptests Automatatests" > fi > AC_SUBST(WITH_REGEXPS) > AC_SUBST(TEST_REGEXPS) > > ``` > > Did you try --with-regexps? I had not tried that, but I have now. I don't think it made a difference for the question I'm asking about. libxml2-2.9.10 and later ships with 'libxml2.syms' in the top level of the distribution. That linker map file does not appear to be modified as part of the configure process, so (AFAICT) it is not updated with additional symbols based on the "--with-regexps" argument. Please do correct me if I'm incorrect about that. Now, assuming that's true, prior to 2.9.10, the libxml2.syms file block for LIBXML2_2.6.21 published a bunch of xmlExp* and related symbols as 'global'. At 2.9.10, those symbols were commented out. Here's just the section of libxml2.syms that I'm talking about: LIBXML2_2.6.21 { global: # xmlautomata xmlAutomataNewNegTrans; # xmlregexp # emptyExp; removed in 2.9.10 # forbiddenExp; removed in 2.9.10 # xmlExpCtxtNbCons; removed in 2.9.10 # xmlExpCtxtNbNodes; removed in 2.9.10 # xmlExpDump; removed in 2.9.10 # xmlExpExpDerive; removed in 2.9.10 # xmlExpFreeCtxt; removed in 2.9.10 # xmlExpFree; removed in 2.9.10 # xmlExpGetLanguage; removed in 2.9.10 # xmlExpGetStart; removed in 2.9.10 # xmlExpIsNillable; removed in 2.9.10 # xmlExpMaxToken; removed in 2.9.10 # xmlExpNewAtom; removed in 2.9.10 # xmlExpNewCtxt; removed in 2.9.10 # xmlExpNewOr; removed in 2.9.10 # xmlExpNewRange; removed in 2.9.10 # xmlExpNewSeq; removed in 2.9.10 # xmlExpParse; removed in 2.9.10 # xmlExpRef; removed in 2.9.10 # xmlExpStringDerive; removed in 2.9.10 # xmlExpSubsume; removed in 2.9.10 [elided] Other symbols in the same block were not changed, so they're still part of the public interface of the library. Even when I include '--with-regexps' when configuring libxml2, as far as I can tell none of the generated object files provide any of those symbols listed above as "removed in 2.9.10". Please feel free to correct any misunderstanding I'm operating under, but right now it still looks like an ABI break that has the potential to crash any binaries that were linked against 2.9.9 or earlier. I would be really happy to be wrong and completely missing some critical bit of information, so if I am incorrect about this, please do let me know. Thanks, Tim -- Tim Mooney [email protected] Enterprise Computing & Infrastructure / Division of Information Technology / 701-231-1076 (Voice) North Dakota State University, Fargo, ND 58105-5164