This is an automated email from the ASF dual-hosted git repository. jimjag pushed a commit to branch AOO42X in repository https://gitbox.apache.org/repos/asf/openoffice.git
commit 5e3709ad1754c3416b2cfc2b6c120bf226f037ea Author: Jim Jagielski <[email protected]> AuthorDate: Wed Aug 5 19:31:03 2026 -0400 configure.ac: honor the directory given to --with-system-libxml/-libxslt/-curl (cherry picked from commit 6ebe52f808faa3285ea18ab8e983eb89d5cfb82c) --- main/configure.ac | 67 +++++++++++++++++++++++++++++++++++---- main/forms/util/makefile.mk | 28 ++++++++++++---- main/set_soenv.in | 3 ++ main/xmlsecurity/util/makefile.mk | 45 ++++++++++++++++++++++---- 4 files changed, 123 insertions(+), 20 deletions(-) diff --git a/main/configure.ac b/main/configure.ac index 7af09495a5..f61df52ccb 100644 --- a/main/configure.ac +++ b/main/configure.ac @@ -3926,8 +3926,23 @@ if test -n "$with_system_libxslt" -o -n "$with_system_libs" -o \ if test "$_os" != "Darwin"; then PKG_CHECK_MODULES(LIBXSLT, libxslt) else - LIBXSLT_CFLAGS=`xslt-config --cflags` - LIBXSLT_LIBS=`xslt-config --libs` + dnl See the matching libxml check below for why this pins + dnl xslt-config to the directory given to --with-system-libxslt + dnl instead of resolving a bare "xslt-config" off PATH. + if test "$with_system_libxslt" != "yes" -a -n "$with_system_libxslt"; then + XSLT_CONFIG="$with_system_libxslt/bin/xslt-config" + if test ! -x "$XSLT_CONFIG"; then + AC_MSG_ERROR([--with-system-libxslt=$with_system_libxslt given, but $XSLT_CONFIG not found or not executable]) + fi + else + AC_PATH_PROG(XSLT_CONFIG, xslt-config, []) + if test -z "$XSLT_CONFIG"; then + AC_MSG_ERROR([xslt-config not found on PATH]) + fi + fi + LIBXSLT_CFLAGS=`$XSLT_CONFIG --cflags` + LIBXSLT_LIBS=`$XSLT_CONFIG --libs` + LIBXSLT_PREFIX=`$XSLT_CONFIG --prefix` fi dnl Check for xsltproc @@ -3943,6 +3958,7 @@ fi AC_SUBST(SYSTEM_LIBXSLT) AC_SUBST(LIBXSLT_CFLAGS) AC_SUBST(LIBXSLT_LIBS) +AC_SUBST(LIBXSLT_PREFIX) dnl =================================================================== @@ -3959,8 +3975,27 @@ if test -n "$with_system_libxml" -o -n "$with_system_libs" -o \ if test "$_os" != "Darwin"; then PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0) else - LIBXML_CFLAGS=`xml2-config --cflags` - LIBXML_LIBS=`xml2-config --libs` + dnl A bare "xml2-config" resolves off whatever happens to be + dnl first on PATH, which is ambiguous when several package + dnl managers each ship their own libxml2 (MacPorts, Homebrew, + dnl a hand-built static copy, ...). When --with-system-libxml + dnl is given an actual directory (not just a bare "yes"), pin + dnl xml2-config to that prefix explicitly so the intended copy + dnl can't be shadowed by PATH order. + if test "$with_system_libxml" != "yes" -a -n "$with_system_libxml"; then + XML2_CONFIG="$with_system_libxml/bin/xml2-config" + if test ! -x "$XML2_CONFIG"; then + AC_MSG_ERROR([--with-system-libxml=$with_system_libxml given, but $XML2_CONFIG not found or not executable]) + fi + else + AC_PATH_PROG(XML2_CONFIG, xml2-config, []) + if test -z "$XML2_CONFIG"; then + AC_MSG_ERROR([xml2-config not found on PATH]) + fi + fi + LIBXML_CFLAGS=`$XML2_CONFIG --cflags` + LIBXML_LIBS=`$XML2_CONFIG --libs` + LIBXML_PREFIX=`$XML2_CONFIG --prefix` fi else AC_MSG_RESULT([internal]) @@ -3970,6 +4005,7 @@ fi AC_SUBST(SYSTEM_LIBXML) AC_SUBST(LIBXML_CFLAGS) AC_SUBST(LIBXML_LIBS) +AC_SUBST(LIBXML_PREFIX) dnl =================================================================== @@ -4607,6 +4643,11 @@ AC_SUBST(COINMP_LIBS) dnl =================================================================== dnl Check for system curl dnl =================================================================== +dnl Darwin always treats curl as external (see the "-o \"$_os\" = \"Darwin\"" +dnl clause below), regardless of whether --with-system-curl was actually +dnl given a directory -- capture the as-given value first, before it gets +dnl forced to a bare "yes", so a real --with-system-curl=DIR isn't lost. +with_system_curl_dir="$with_system_curl" if test "$_os" = "Darwin" && test "$with_system_curl" != "no"; then with_system_curl=yes fi @@ -4616,9 +4657,19 @@ if test -n "$with_system_curl" -o -n "$with_system_libs" && \ AC_MSG_RESULT([external]) SYSTEM_CURL=YES - AC_PATH_PROG( CURLCONFIG, curl-config) - if test -z "$CURLCONFIG"; then - AC_MSG_ERROR([install curl to run this script]) + dnl See the matching libxml check above for why this pins + dnl curl-config to the directory given to --with-system-curl instead + dnl of resolving a bare "curl-config" off PATH. + if test "$with_system_curl_dir" != "yes" -a -n "$with_system_curl_dir"; then + CURLCONFIG="$with_system_curl_dir/bin/curl-config" + if test ! -x "$CURLCONFIG"; then + AC_MSG_ERROR([--with-system-curl=$with_system_curl_dir given, but $CURLCONFIG not found or not executable]) + fi + else + AC_PATH_PROG( CURLCONFIG, curl-config) + if test -z "$CURLCONFIG"; then + AC_MSG_ERROR([install curl to run this script]) + fi fi # check curl version @@ -4641,6 +4692,7 @@ if test -n "$with_system_curl" -o -n "$with_system_libs" && \ CURL_LIBS=`$CURLCONFIG --libs` CURL_CFLAGS=`$CURLCONFIG --cflags` + CURL_PREFIX=`$CURLCONFIG --prefix` else AC_MSG_RESULT([internal]) SYSTEM_CURL=NO @@ -4649,6 +4701,7 @@ fi AC_SUBST(SYSTEM_CURL) AC_SUBST(CURL_CFLAGS) AC_SUBST(CURL_LIBS) +AC_SUBST(CURL_PREFIX) dnl =================================================================== dnl Check for system mdds diff --git a/main/forms/util/makefile.mk b/main/forms/util/makefile.mk index dea1f96486..887f0f1f9d 100644 --- a/main/forms/util/makefile.mk +++ b/main/forms/util/makefile.mk @@ -56,12 +56,28 @@ SHL1TARGET=$(TARGET)$(DLLPOSTFIX) # plain "-lxml2" (as pulled in by LIBXML2LIB) resolves to that bundled # copy instead of the configured --with-system-libxml one, and it is # missing symbols (xmlXPathValuePush, xmlXPathValuePop) that xformsxpath -# needs. Link the intended libxml2 statically by absolute path so the -# search order can't shadow it and no dylib needs to be bundled. -# The static archive carries no dependency info (unlike a dylib, which -# records its own link to libz), so zlib must be linked explicitly here -# to satisfy libxml2's HTTP/gzip symbols (deflate, inflate, gzopen, ...). -FORMS_LIBXML2LIB:=$(shell xml2-config --prefix)/lib/libxml2.a $(ZLIB3RDLIB) +# needs. Link the intended libxml2 by absolute path so the search order +# can't shadow it. +# +# The path is built from $(LIBXML_PREFIX), not a live `xml2-config` +# lookup -- see the matching comment in xmlsecurity/util/makefile.mk for +# why: $(LIBXML_PREFIX) is resolved exactly once by `./configure` +# (honoring the directory given to --with-system-libxml=DIR) and exported +# via the generated *Env.Set.sh script, so it can't drift from what +# configure actually resolved the way a fresh `xml2-config` shell-out at +# dmake time could. +# +# Prefer the dylib when one is actually present at that prefix (it +# records its own transitive links, e.g. to libz, so nothing extra needs +# to be added); fall back to the static archive -- which carries no +# dependency info, so zlib must be linked explicitly to satisfy libxml2's +# HTTP/gzip symbols (deflate, inflate, gzopen, ...) -- when no dylib +# exists there. +.IF "$(shell test -f $(LIBXML_PREFIX)/lib/libxml2.dylib && echo yes)"=="yes" +FORMS_LIBXML2LIB:=$(LIBXML_PREFIX)/lib/libxml2.dylib +.ELSE +FORMS_LIBXML2LIB:=$(LIBXML_PREFIX)/lib/libxml2.a $(ZLIB3RDLIB) +.ENDIF .ELSE FORMS_LIBXML2LIB=$(LIBXML2LIB) .ENDIF diff --git a/main/set_soenv.in b/main/set_soenv.in index 94f830b2b6..df39dd0dd4 100644 --- a/main/set_soenv.in +++ b/main/set_soenv.in @@ -1981,6 +1981,7 @@ ToFile( "SYSTEM_LIBXML", "@SYSTEM_LIBXML@", "e" ); ToFile( "USE_FT_EMBOLDEN", "@USE_FT_EMBOLDEN@", "e" ); ToFile( "LIBXML_CFLAGS", "@LIBXML_CFLAGS@", "e" ); ToFile( "LIBXML_LIBS", "@LIBXML_LIBS@", "e" ); +ToFile( "LIBXML_PREFIX", "@LIBXML_PREFIX@", "e" ); ToFile( "SYSTEM_EXPAT", "@SYSTEM_EXPAT@", "e" ); ToFile( "ENABLE_MYSQLC", "@ENABLE_MYSQLC@", "e" ); ToFile( "SYSTEM_MYSQL", "@SYSTEM_MYSQL@", "e" ); @@ -2009,11 +2010,13 @@ ToFile( "SYSTEM_ODBC_HEADERS","@SYSTEM_ODBC_HEADERS@","e" ); ToFile( "SYSTEM_LIBXSLT", "@SYSTEM_LIBXSLT@", "e" ); ToFile( "LIBXSLT_CFLAGS", "@LIBXSLT_CFLAGS@", "e" ); ToFile( "LIBXSLT_LIBS", "@LIBXSLT_LIBS@", "e" ); +ToFile( "LIBXSLT_PREFIX", "@LIBXSLT_PREFIX@", "e" ); ToFile( "SYSTEM_SANE_HEADER","@SYSTEM_SANE_HEADER@","e" ); ToFile( "SYSTEM_XRENDER_HEADERS","@SYSTEM_XRENDER_HEADERS@","e" ); ToFile( "SYSTEM_CURL", "@SYSTEM_CURL@", "e" ); ToFile( "CURL_CFLAGS", "@CURL_CFLAGS@", "e" ); ToFile( "CURL_LIBS", "@CURL_LIBS@", "e" ); +ToFile( "CURL_PREFIX", "@CURL_PREFIX@", "e" ); ToFile( "SYSTEM_BOOST", "@SYSTEM_BOOST@", "e" ); ToFile( "SYSTEM_MDDS", "@SYSTEM_MDDS@", "e" ); ToFile( "SYSTEM_VIGRA", "@SYSTEM_VIGRA@", "e" ); diff --git a/main/xmlsecurity/util/makefile.mk b/main/xmlsecurity/util/makefile.mk index 34fe3c8a9b..2e80734b44 100644 --- a/main/xmlsecurity/util/makefile.mk +++ b/main/xmlsecurity/util/makefile.mk @@ -125,13 +125,44 @@ SHL2STDLIBS+= $(NSS3LIB) $(NSPR4LIB) # plain "-lxml2" (as pulled in by NSSCRYPTOLIBS via LIBXML2LIB) resolves # to that bundled copy instead of the configured --with-system-libxml one, # and it is missing symbols (xmlCtxtPushInput, xmlXPathValuePush) that -# xmlsec1 needs. Link the intended libxml2 statically by absolute path -# so the search order can't shadow it and no dylib needs to be bundled. -# The static archive carries no dependency info (unlike a dylib, which -# records its own link to libz), so zlib must be linked explicitly here -# to satisfy libxml2's HTTP/gzip symbols (deflate, inflate, gzopen, ...). -XMLSECURITY_SYSTEM_LIBXML2:=$(shell xml2-config --prefix)/lib/libxml2.a -SHL2STDLIBS+= $(XMLSECLIB-NSS) $(XMLSECLIB) $(XMLSECURITY_SYSTEM_LIBXML2) $(ZLIB3RDLIB) $(NSS3LIB) $(NSPR4LIB) $(PLC4LIB) +# xmlsec1 needs. Link the intended libxml2 by absolute path so the search +# order can't shadow it. +# +# The path is built from $(LIBXML_PREFIX), not a live `xml2-config` +# lookup: $(LIBXML_PREFIX) is resolved exactly once by `./configure` +# (honoring the directory given to --with-system-libxml=DIR, see +# configure.ac's libxml check) and exported via the generated +# *Env.Set.sh script -- the same mechanism that already delivers +# $(LIBXML_CFLAGS)/$(LIBXML_LIBS) (aka $(LIBXML2LIB), solenv/inc/libs.mk) +# to every other module. Re-running `xml2-config` here at build time +# instead would re-do that PATH-dependent lookup a second time, +# independently of configure -- if the build-resume shell's PATH ever +# differs from the configure shell's (e.g. MacPorts' /opt/local ends up +# ahead of the intended prefix), that would silently link a stray +# libxml2.a instead of the intended one, pulling in a different, unrelated +# set of missing transitive symbols (seen in practice: ICU + GNU libiconv +# from a MacPorts copy on one machine, liblzma from a different stray copy +# on another). Going through $(LIBXML_PREFIX) removes that ambiguity. +# +# Prefer the dylib when one is actually present at that prefix: unlike a +# static archive, a dylib records its own transitive links (e.g. to libz), +# so the linker resolves those automatically and no extra -lz/-llzma is +# needed. Fall back to the static archive (community builds normally only +# install that, via --enable-shared=no) when no dylib exists there. +.IF "$(shell test -f $(LIBXML_PREFIX)/lib/libxml2.dylib && echo yes)"=="yes" +XMLSECURITY_SYSTEM_LIBXML2:=$(LIBXML_PREFIX)/lib/libxml2.dylib +XMLSECURITY_SYSTEM_LIBXML2_EXTRALIBS:= +.ELSE +XMLSECURITY_SYSTEM_LIBXML2:=$(LIBXML_PREFIX)/lib/libxml2.a +# The static archive carries no dependency info, so zlib must be linked +# explicitly here to satisfy libxml2's HTTP/gzip symbols (deflate, +# inflate, gzopen, ...). liblzma is linked only if actually present next +# to it: it's not part of the documented static-lib bundle, so only +# needed if this libxml2 build happens to have xz support compiled in. +XMLSECURITY_SYSTEM_LIBLZMA:=$(shell test -f $(LIBXML_PREFIX)/lib/liblzma.a -o -f $(LIBXML_PREFIX)/lib/liblzma.dylib && echo $(LIBXML_PREFIX)/lib/liblzma.a) +XMLSECURITY_SYSTEM_LIBXML2_EXTRALIBS:=$(ZLIB3RDLIB) $(XMLSECURITY_SYSTEM_LIBLZMA) +.ENDIF +SHL2STDLIBS+= $(XMLSECLIB-NSS) $(XMLSECLIB) $(XMLSECURITY_SYSTEM_LIBXML2) $(XMLSECURITY_SYSTEM_LIBXML2_EXTRALIBS) $(NSS3LIB) $(NSPR4LIB) $(PLC4LIB) .ELSE SHL2STDLIBS+= $(NSSCRYPTOLIBS) .ENDIF
