bug#81647: libtool 2.6.2: regression on macOS
Bruno Haible via bug-libtool via Bug reports for the GNU libtool shared library maintenance tool <[email protected]>
| Newsgroups | gmane.comp.gnu.libtool.bugs |
|---|---|
| Message-ID | <2934321.gORTcIGjah@cagnes> |
Hi Ileana,
In GNU gettext, I switched from libtool 2.6.0 to libtool 2.6.2.
Since then, builds on macOS
- where libxml2 is installed in the system,
- and the configure option '--with-included-libxml' is not specified,
now fail. The problem is that -l options that reference system-installed
libraries now get silently dropped, leading to link errors.
In detail:
In the build log, line 14554, there is a libtool invocation:
/bin/sh ../libtool --tag=CC --mode=link cc -std=gnu23 <some-W-options> -g -O2 -release 20260809 ../gnulib-lib/libgettextlib.la ../../libtextstyle/lib/libtextstyle.la ../../gettext-runtime/intl/libintl.la -Wl,-framework -Wl,CoreFoundation -Wl,-framework -Wl,CoreServices -L/Users/haible/lib -liconv -R/Users/haible/lib -lc -no-undefined -L/Users/haible/lib -o libgettextsrc.la -rpath /Users/haible/lib <some-.lo-files>
Where ../gnulib-lib/libgettextlib.la has a dependency_libs line
dependency_libs=' -R/Users/haible/lib -L/Users/haible/lib /Users/haible/STORAGE/gettext-202608xx/build/gettext-runtime/intl/libintl.la -lxml2 /Users/haible/lib/libiconv.la'
and ../../libtextstyle/lib/libtextstyle.la has a dependency_libs line
dependency_libs=' -R/Users/haible/lib -L/Users/haible/lib /Users/haible/lib/libiconv.la -lncurses'
The next line in the build log looks like this, with libtool 2.6.0:
libtool: link: cc -std=gnu23 -dynamiclib -o .libs/libgettextsrc-20260809.dylib <some-.libs/*.o-files> ../gnulib-lib/.libs/libgettextlib.dylib -L/Users/haible/lib /Users/haible/STORAGE/gettext-20260809/build/gettext-runtime/intl/.libs/libintl.dylib -lxml2 ../../libtextstyle/lib/.libs/libtextstyle.dylib -lncurses ../../gettext-runtime/intl/.libs/libintl.dylib /Users/haible/lib/libiconv.dylib -lc <some-W-options> -g -O2 -Wl,-framework -Wl,CoreFoundation -Wl,-framework -Wl,CoreServices -Wl,-dylib_file -Wl,/Users/haible/lib/libintl.8.dylib:/Users/haible/STORAGE/gettext-20260809/build/gettext-runtime/intl/.libs/libintl.dylib -install_name /Users/haible/lib/libgettextsrc-20260809.dylib
and like this, with libtool 2.6.2:
libtool: link: cc -std=gnu23 -dynamiclib -o .libs/libgettextsrc-20260810.dylib <some-.libs/*.o-files> ../gnulib-lib/.libs/libgettextlib.dylib -L/Users/haible/lib ../../libtextstyle/lib/.libs/libtextstyle.dylib ../../gettext-runtime/intl/.libs/libintl.dylib /Users/haible/lib/libiconv.dylib -lc <some-W-options> -g -O2 -Wl,-framework -Wl,CoreFoundation -Wl,-framework -Wl,CoreServices -Wl,-dylib_file -Wl,/Users/haible/lib/libintl.8.dylib:/Users/haible/STORAGE/gettext-20260810/build/gettext-runtime/intl/.libs/libintl.dylib -install_name /Users/haible/lib/libgettextsrc-20260810.dylib
Here, the options -lxml2 and -lncurses are no longer present, and the link fails:
Undefined symbols for architecture arm64:
"_xmlAddChild", referenced from:
__its_is_valid_simple_gen_xml in libgettextsrc_la-its.o
__its_is_valid_simple_gen_xml in libgettextsrc_la-its.o
__its_is_valid_simple_gen_xml in libgettextsrc_la-its.o
__its_is_valid_simple_gen_xml in libgettextsrc_la-its.o
__its_is_valid_simple_gen_xml in libgettextsrc_la-its.o
"_xmlAddChildList", referenced from:
_its_merge_context_merge in libgettextsrc_la-its.o
"_xmlAddNextSibling", referenced from:
_its_merge_context_merge in libgettextsrc_la-its.o
"_xmlAllocOutputBuffer", referenced from:
__its_collect_text_content in libgettextsrc_la-its.o
"_xmlCheckVersion", referenced from:
_locating_rule_list_alloc in libgettextsrc_la-locating-rules.o
"_xmlCopyNamespace", referenced from:
_its_rule_list_add_from_doc in libgettextsrc_la-its.o
"_xmlDocFormatDump", referenced from:
_its_merge_context_write in libgettextsrc_la-its.o
"_xmlDocGetRootElement", referenced from:
_locating_rule_match in libgettextsrc_la-locating-rules.o
_locating_rule_list_add_from_directory in libgettextsrc_la-locating-rules.o
_its_rule_list_add_from_doc in libgettextsrc_la-its.o
_its_rule_list_extract in libgettextsrc_la-its.o
_its_merge_context_alloc in libgettextsrc_la-its.o
"_xmlFreeDoc", referenced from:
_format_parse in libgettextsrc_la-format-kde-kuit.o
_format_parse in libgettextsrc_la-format-kde-kuit.o
_locating_rule_match in libgettextsrc_la-locating-rules.o
_locating_rule_match in libgettextsrc_la-locating-rules.o
_locating_rule_list_add_from_directory in libgettextsrc_la-locating-rules.o
_OUTLINED_FUNCTION_6 in libgettextsrc_la-locating-rules.o
_its_rule_list_add_from_file in libgettextsrc_la-its.o
...
"_xmlFreeNs", referenced from:
_its_rule_destructor in libgettextsrc_la-its.o
"_xmlFreeTextWriter", referenced from:
__its_collect_text_content in libgettextsrc_la-its.o
"_xmlGetLastError", referenced from:
_format_parse in libgettextsrc_la-format-kde-kuit.o
_locating_rule_match.cold.2 in libgettextsrc_la-locating-rules.o
_its_rule_list_add_from_string.cold.1 in libgettextsrc_la-its.o
_OUTLINED_FUNCTION_9 in libgettextsrc_la-its.o
"_xmlGetLineNo", referenced from:
_its_rule_list_extract in libgettextsrc_la-its.o
"_xmlGetNsList", referenced from:
_its_rule_list_add_from_doc in libgettextsrc_la-its.o
"_xmlGetNsProp", referenced from:
_its_merge_context_merge in libgettextsrc_la-its.o
_its_translate_rule_constructor in libgettextsrc_la-its.o
_its_translate_rule_constructor in libgettextsrc_la-its.o
_its_translate_rule_eval in libgettextsrc_la-its.o
_its_localization_note_rule_constructor in libgettextsrc_la-its.o
_its_localization_note_rule_constructor in libgettextsrc_la-its.o
_its_localization_note_rule_constructor in libgettextsrc_la-its.o
_its_localization_note_rule_constructor in libgettextsrc_la-its.o
...
"_xmlGetProp", referenced from:
_locating_rule_list_add_from_directory in libgettextsrc_la-locating-rules.o
_locating_rule_list_add_from_directory in libgettextsrc_la-locating-rules.o
_locating_rule_list_add_from_directory in libgettextsrc_la-locating-rules.o
_locating_rule_list_add_from_directory in libgettextsrc_la-locating-rules.o
_locating_rule_list_add_from_directory in libgettextsrc_la-locating-rules.o
_locating_rule_list_add_from_directory in libgettextsrc_la-locating-rules.o
__its_collect_text_content in libgettextsrc_la-its.o
...
"_xmlHasNsProp", referenced from:
_its_translate_rule_eval in libgettextsrc_la-its.o
_its_localization_note_rule_eval in libgettextsrc_la-its.o
_its_localization_note_rule_eval in libgettextsrc_la-its.o
_its_localization_note_rule_eval in libgettextsrc_la-its.o
_its_localization_note_rule_eval in libgettextsrc_la-its.o
_its_localization_note_rule_eval in libgettextsrc_la-its.o
_its_element_within_text_rule_eval in libgettextsrc_la-its.o
...
"_xmlHasProp", referenced from:
_locating_rule_list_add_from_directory in libgettextsrc_la-locating-rules.o
_locating_rule_list_add_from_directory in libgettextsrc_la-locating-rules.o
_locating_rule_list_add_from_directory in libgettextsrc_la-locating-rules.o
_locating_rule_list_add_from_directory in libgettextsrc_la-locating-rules.o
_locating_rule_list_add_from_directory in libgettextsrc_la-locating-rules.o
_locating_rule_list_add_from_directory in libgettextsrc_la-locating-rules.o
_its_translate_rule_constructor in libgettextsrc_la-its.o
_its_translate_rule_constructor in libgettextsrc_la-its.o
...
"_xmlNewDocNodeEatName", referenced from:
__its_is_valid_simple_gen_xml in libgettextsrc_la-its.o
"_xmlNewDocTextLen", referenced from:
__its_is_valid_simple_gen_xml in libgettextsrc_la-its.o
__its_is_valid_simple_gen_xml in libgettextsrc_la-its.o
__its_is_valid_simple_gen_xml in libgettextsrc_la-its.o
__its_is_valid_simple_gen_xml in libgettextsrc_la-its.o
"_xmlNewNode", referenced from:
_its_merge_context_merge in libgettextsrc_la-its.o
"_xmlNewNsProp", referenced from:
_its_merge_context_merge in libgettextsrc_la-its.o
"_xmlNewProp", referenced from:
__its_is_valid_simple_gen_xml in libgettextsrc_la-its.o
"_xmlNewTextWriter", referenced from:
__its_collect_text_content in libgettextsrc_la-its.o
"_xmlNodeAddContent", referenced from:
_its_merge_context_merge in libgettextsrc_la-its.o
"_xmlNodeGetContent", referenced from:
_its_rule_list_extract in libgettextsrc_la-its.o
__its_collect_text_content in libgettextsrc_la-its.o
"_xmlNodeSetContent", referenced from:
_its_merge_context_merge in libgettextsrc_la-its.o
_its_merge_context_merge in libgettextsrc_la-its.o
_its_merge_context_merge in libgettextsrc_la-its.o
"_xmlNodeSetContentLen", referenced from:
__its_is_valid_simple_gen_xml in libgettextsrc_la-its.o
__its_is_valid_simple_gen_xml in libgettextsrc_la-its.o
__its_is_valid_simple_gen_xml in libgettextsrc_la-its.o
__its_is_valid_simple_gen_xml in libgettextsrc_la-its.o
__its_is_valid_simple_gen_xml in libgettextsrc_la-its.o
"_xmlOutputBufferGetContent", referenced from:
__its_collect_text_content in libgettextsrc_la-its.o
"_xmlParseInNodeContext", referenced from:
_its_merge_context_merge in libgettextsrc_la-its.o
"_xmlReadFd", referenced from:
_its_rule_list_extract in libgettextsrc_la-its.o
"_xmlReadFile", referenced from:
_locating_rule_match in libgettextsrc_la-locating-rules.o
_locating_rule_list_add_from_directory in libgettextsrc_la-locating-rules.o
_its_rule_list_add_from_file in libgettextsrc_la-its.o
_its_merge_context_alloc in libgettextsrc_la-its.o
"_xmlReadMemory", referenced from:
_format_parse in libgettextsrc_la-format-kde-kuit.o
_its_rule_list_add_from_string in libgettextsrc_la-its.o
"_xmlSetGenericErrorFunc", referenced from:
_its_rule_list_add_from_file in libgettextsrc_la-its.o
_its_rule_list_add_from_file in libgettextsrc_la-its.o
_its_rule_list_add_from_string in libgettextsrc_la-its.o
_its_rule_list_add_from_string in libgettextsrc_la-its.o
_its_rule_list_extract in libgettextsrc_la-its.o
_its_rule_list_extract in libgettextsrc_la-its.o
_its_merge_context_merge in libgettextsrc_la-its.o
_its_merge_context_merge in libgettextsrc_la-its.o
...
"_xmlSetProp", referenced from:
_its_merge_context_merge in libgettextsrc_la-its.o
"_xmlSetStructuredErrorFunc", referenced from:
_its_rule_list_add_from_file in libgettextsrc_la-its.o
_its_rule_list_add_from_file in libgettextsrc_la-its.o
_its_rule_list_add_from_string in libgettextsrc_la-its.o
_its_rule_list_add_from_string in libgettextsrc_la-its.o
_its_rule_list_extract in libgettextsrc_la-its.o
_its_rule_list_extract in libgettextsrc_la-its.o
_its_merge_context_merge in libgettextsrc_la-its.o
_its_merge_context_merge in libgettextsrc_la-its.o
...
"_xmlStrEqual", referenced from:
_locating_rule_match in libgettextsrc_la-locating-rules.o
_locating_rule_match in libgettextsrc_la-locating-rules.o
_locating_rule_list_add_from_directory in libgettextsrc_la-locating-rules.o
_locating_rule_list_add_from_directory in libgettextsrc_la-locating-rules.o
_locating_rule_list_add_from_directory in libgettextsrc_la-locating-rules.o
_its_rule_list_add_from_doc in libgettextsrc_la-its.o
_its_rule_list_add_from_doc in libgettextsrc_la-its.o
...
"_xmlTextWriterEndElement", referenced from:
__its_collect_text_content in libgettextsrc_la-its.o
"_xmlTextWriterStartElement", referenced from:
__its_collect_text_content in libgettextsrc_la-its.o
"_xmlTextWriterWriteAttribute", referenced from:
__its_collect_text_content in libgettextsrc_la-its.o
"_xmlTextWriterWriteRaw", referenced from:
__its_collect_text_content in libgettextsrc_la-its.o
"_xmlXPathEval", referenced from:
_its_rule_apply in libgettextsrc_la-its.o
"_xmlXPathEvalExpression", referenced from:
__its_get_content in libgettextsrc_la-its.o
"_xmlXPathFreeContext", referenced from:
_its_rule_apply in libgettextsrc_la-its.o
__its_get_content in libgettextsrc_la-its.o
_its_rule_apply.cold.2 in libgettextsrc_la-its.o
__its_get_content.cold.1 in libgettextsrc_la-its.o
"_xmlXPathFreeObject", referenced from:
_its_rule_apply in libgettextsrc_la-its.o
__its_get_content in libgettextsrc_la-its.o
"_xmlXPathNewContext", referenced from:
_its_rule_apply in libgettextsrc_la-its.o
__its_get_content in libgettextsrc_la-its.o
"_xmlXPathRegisterNs", referenced from:
_its_rule_apply in libgettextsrc_la-its.o
__its_get_content in libgettextsrc_la-its.o
"_xmlXPathSetContextNode", referenced from:
__its_get_content in libgettextsrc_la-its.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[5]: *** [libgettextsrc.la] Error 1
How to reproduce:
In https://alpha.gnu.org/gnu/gettext/gettext-20260809.tar.gz you find the source
tarball with libtool 2.6.0.
In https://alpha.gnu.org/gnu/gettext/gettext-20260810.tar.gz you find the source
tarball with libtool 2.6.2.
Compile them on a macOS machine, e.g. cfarm104.cfarm.net.
I have the builds still lying around in
cfarm104.cfarm.net:~haible/STORAGE/gettext-20260809/build
and cfarm104.cfarm.net:~haible/STORAGE/gettext-20260810/build
Bruno