macOS /w Xcode 15: force the old linker when targeting macOS 11 or lower
[libreoffice.git] / configure.ac
blob3fe42df3978ce594ab4e5c0672dd92eff8398977
1 dnl -*- Mode: Autoconf; tab-width: 4; indent-tabs-mode: nil; fill-column: 100 -*-
2 dnl configure.ac serves as input for the GNU autoconf package
3 dnl in order to create a configure script.
5 # The version number in the second argument to AC_INIT should be four numbers separated by
6 # periods. Some parts of the code requires the first one to be less than 128 and the others to be less
7 # than 256. The four numbers can optionally be followed by a period and a free-form string containing
8 # no spaces or periods, like "frobozz-mumble-42" or "alpha0". If the free-form string ends with one or
9 # several non-alphanumeric characters, those are split off and used only for the
10 # ABOUTBOXPRODUCTVERSIONSUFFIX in openoffice.lst. Why that is necessary, no idea.
12 AC_INIT([LibreOffice],[24.2.0.0.alpha0+],[],[],[http://documentfoundation.org/])
14 dnl libnumbertext needs autoconf 2.68, but that can pick up autoconf268 just fine if it is installed
15 dnl whereas aclocal (as run by autogen.sh) insists on using autoconf and fails hard
16 dnl so check for the version of autoconf that is actually used to create the configure script
17 AC_PREREQ([2.59])
18 m4_if(m4_version_compare(m4_defn([AC_AUTOCONF_VERSION]), [2.68]), -1,
19     [AC_MSG_ERROR([at least autoconf version 2.68 is needed (you can use AUTOCONF environment variable to point to a suitable one)])])
21 if test -n "$BUILD_TYPE"; then
22     AC_MSG_ERROR([You have sourced config_host.mk in this shell.  This may lead to trouble, please run in a fresh (login) shell.])
25 save_CC=$CC
26 save_CXX=$CXX
28 first_arg_basename()
30     for i in $1; do
31         basename "$i"
32         break
33     done
36 CC_BASE=`first_arg_basename "$CC"`
37 CXX_BASE=`first_arg_basename "$CXX"`
39 BUILD_TYPE="LibO"
40 SCPDEFS=""
41 GIT_NEEDED_SUBMODULES=""
42 LO_PATH= # used by path_munge to construct a PATH variable
44 FilterLibs()
46     # Return value: $filteredlibs
48     filteredlibs=
49     if test "$COM" = "MSC"; then
50         for f in $1; do
51             if test "x$f" != "x${f#-L}"; then
52                 filteredlibs="$filteredlibs -LIBPATH:${f:2}"
53             elif test "x$f" != "x${f#-l}"; then
54                 filteredlibs="$filteredlibs ${f:2}.lib"
55             else
56                 filteredlibs="$filteredlibs $f"
57             fi
58         done
59     else
60         for f in $1; do
61             case "$f" in
62                 # let's start with Fedora's paths for now
63                 -L/lib|-L/lib/|-L/lib64|-L/lib64/|-L/usr/lib|-L/usr/lib/|-L/usr/lib64|-L/usr/lib64/)
64                     # ignore it: on UNIXoids it is searched by default anyway
65                     # but if it's given explicitly then it may override other paths
66                     # (on macOS it would be an error to use it instead of SDK)
67                     ;;
68                 *)
69                     filteredlibs="$filteredlibs $f"
70                     ;;
71             esac
72         done
73     fi
76 PathFormat()
78     # Args: $1: A pathname. On Cygwin and WSL, in either the Unix or the Windows format. Note that this
79     # function is called also on Unix.
80     #
81     # Return value: $formatted_path and $formatted_path_unix.
82     #
83     # $formatted_path is the argument in Windows format, but using forward slashes instead of
84     # backslashes, using 8.3 pathname components if necessary (if it otherwise would contains spaces
85     # or shell metacharacters).
86     #
87     # $formatted_path_unix is the argument in a form usable in Cygwin or WSL, using 8.3 components if
88     # necessary. On Cygwin, it is the same as $formatted_path, but on WSL it is $formatted_path as a
89     # Unix pathname.
90     #
91     # Errors out if 8.3 names are needed but aren't present for some of the path components.
93     # Examples:
94     #
95     # /home/tml/lo/master-optimised => C:/cygwin64/home/tml/lo/master-optimised
96     #
97     # C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe => C:/PROGRA~2/MICROS~3/INSTAL~1/vswhere.exe
98     #
99     # C:\Program Files (x86)\Microsoft Visual Studio\2019\Community => C:/PROGRA~2/MICROS~3/2019/COMMUN~1
100     #
101     # C:/PROGRA~2/WI3CF2~1/10/Include/10.0.18362.0/ucrt => C:/PROGRA~2/WI3CF2~1/10/Include/10.0.18362.0/ucrt
102     #
103     # /cygdrive/c/PROGRA~2/WI3CF2~1/10 => C:/PROGRA~2/WI3CF2~1/10
104     #
105     # C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\ => C:/PROGRA~2/WI3CF2~1/NETFXSDK/4.8/
106     #
107     # /usr/bin/find.exe => C:/cygwin64/bin/find.exe
109     if test -n "$UNITTEST_WSL_PATHFORMAT"; then
110         printf "PathFormat $1 ==> "
111     fi
113     formatted_path="$1"
114     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
115         if test "$build_os" = "wsl"; then
116             formatted_path=$(echo "$formatted_path" | tr -d '\r')
117         fi
119         pf_conv_to_dos=
120         # spaces,parentheses,brackets,braces are problematic in pathname
121         # so are backslashes
122         case "$formatted_path" in
123             *\ * | *\)* | *\(* | *\{* | *\}* | *\[* | *\]* | *\\* )
124                 pf_conv_to_dos="yes"
125             ;;
126         esac
127         if test "$pf_conv_to_dos" = "yes"; then
128             if test "$build_os" = "wsl"; then
129                 case "$formatted_path" in
130                     /*)
131                         formatted_path=$(wslpath -w "$formatted_path")
132                         ;;
133                 esac
134                 formatted_path=$($WSL_LO_HELPER --8.3 "$formatted_path")
135             elif test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
136                 formatted_path=`cygpath -sm "$formatted_path"`
137             else
138                 formatted_path=`cygpath -d "$formatted_path"`
139             fi
140             if test $? -ne 0;  then
141                 AC_MSG_ERROR([path conversion failed for "$1".])
142             fi
143         fi
144         fp_count_colon=`echo "$formatted_path" | $GREP -c "[:]"`
145         fp_count_slash=`echo "$formatted_path" | $GREP -c "[/]"`
146         if test "$fp_count_slash$fp_count_colon" != "00"; then
147             if test "$fp_count_colon" = "0"; then
148                 new_formatted_path=`realpath "$formatted_path"`
149                 if test $? -ne 0;  then
150                     AC_MSG_WARN([realpath failed for "$formatted_path", not necessarily a problem.])
151                 else
152                     formatted_path="$new_formatted_path"
153                 fi
154             fi
155             if test "$build_os" = "wsl"; then
156                 if test "$fp_count_colon" != "0"; then
157                     formatted_path=$(wslpath "$formatted_path")
158                     local final_slash=
159                     case "$formatted_path" in
160                         */)
161                             final_slash=/
162                             ;;
163                     esac
164                     formatted_path=$(wslpath -m $formatted_path)
165                     case "$formatted_path" in
166                         */)
167                             ;;
168                         *)
169                             formatted_path="$formatted_path"$final_slash
170                             ;;
171                     esac
172                 else
173                     formatted_path=$(wslpath -m "$formatted_path")
174                 fi
175             else
176                 formatted_path=`cygpath -m "$formatted_path"`
177             fi
178             if test $? -ne 0;  then
179                 AC_MSG_ERROR([path conversion failed for "$1".])
180             fi
181         fi
182         fp_count_space=`echo "$formatted_path" | $GREP -c "[ ]"`
183         if test "$fp_count_space" != "0"; then
184             AC_MSG_ERROR([converted path "$formatted_path" still contains spaces. Short filenames (8.3 filenames) support was disabled on this system?])
185         fi
186     fi
187     if test "$build_os" = "wsl"; then
188         # WSL can't run Windows binaries from Windows pathnames so we need a separate return value in Unix format
189         formatted_path_unix=$(wslpath "$formatted_path")
190     else
191         # But Cygwin can
192         formatted_path_unix="$formatted_path"
193     fi
196 AbsolutePath()
198     # There appears to be no simple and portable method to get an absolute and
199     # canonical path, so we try creating the directory if does not exist and
200     # utilizing the shell and pwd.
202     # Args: $1: A possibly relative pathname
203     # Return value: $absolute_path
205     # Convert to unix path, mkdir would treat c:/path as a relative path.
206     PathFormat "$1"
207     local rel="$formatted_path_unix"
208     absolute_path=""
209     test ! -e "$rel" && mkdir -p "$rel"
210     if test -d "$rel" ; then
211         cd "$rel" || AC_MSG_ERROR([absolute path resolution failed for "$rel".])
212         absolute_path="$(pwd)"
213         cd - > /dev/null
214     else
215         AC_MSG_ERROR([Failed to resolve absolute path.  "$rel" does not exist or is not a directory.])
216     fi
219 WARNINGS_FILE=config.warn
220 WARNINGS_FILE_FOR_BUILD=config.Build.warn
221 rm -f "$WARNINGS_FILE" "$WARNINGS_FILE_FOR_BUILD"
222 have_WARNINGS="no"
223 add_warning()
225     if test "$have_WARNINGS" = "no"; then
226         echo "*************************************" > "$WARNINGS_FILE"
227         have_WARNINGS="yes"
228         if which tput >/dev/null && test "`tput colors 2>/dev/null || echo 0`" -ge 8; then
229             dnl <esc> as actual byte (U+1b), [ escaped using quadrigraph @<:@
230             COLORWARN='*\e@<:@1;33;40m WARNING \e@<:@0m:'
231         else
232             COLORWARN="* WARNING :"
233         fi
234     fi
235     echo "$COLORWARN $@" >> "$WARNINGS_FILE"
238 dnl Some Mac User have the bad habit of letting a lot of crap
239 dnl accumulate in their PATH and even adding stuff in /usr/local/bin
240 dnl that confuse the build.
241 dnl For the ones that use LODE, let's be nice and protect them
242 dnl from themselves
244 mac_sanitize_path()
246     mac_path="$LODE_HOME/opt/bin:/usr/bin:/bin:/usr/sbin:/sbin"
247 dnl a common but nevertheless necessary thing that may be in a fancy
248 dnl path location is git, so make sure we have it
249     mac_git_path=`which git 2>/dev/null`
250     if test -n "$mac_git_path" -a -x "$mac_git_path" -a "$mac_git_path" != "/usr/bin/git" ; then
251         mac_path="$mac_path:`dirname $mac_git_path`"
252     fi
253 dnl a not so common but nevertheless quite helpful thing that may be in a fancy
254 dnl path location is gpg, so make sure we find it
255     mac_gpg_path=`which gpg 2>/dev/null`
256     if test -n "$mac_gpg_path" -a -x "$mac_gpg_path" -a "$mac_gpg_path" != "/usr/bin/gpg" ; then
257         mac_path="$mac_path:`dirname $mac_gpg_path`"
258     fi
259     PATH="$mac_path"
260     unset mac_path
261     unset mac_git_path
262     unset mac_gpg_path
265 dnl semantically test a three digits version
266 dnl $1 - $3 = minimal version
267 dnl $4 - $6 = current version
269 check_semantic_version_three()
271     test "$4" -gt "$1" \
272         -o \( "$4" -eq "$1" -a "$5" -gt "$2" \) \
273         -o \( "$4" -eq "$1" -a "$5" -eq "$2" -a "$6" -ge "$3" \)
274     return $?
277 dnl calls check_semantic_version_three with digits in named variables $1_MAJOR, $1_MINOR, $1_TINY
278 dnl $1 = current version prefix, e.g. EMSCRIPTEN => EMSCRIPTEN_
279 dnl $2 = postfix to $1, e.g. MIN => EMSCRIPTEN_MIN_
281 check_semantic_version_three_prefixed()
283     eval local MIN_MAJOR="\$${1}_${2}_MAJOR"
284     eval local MIN_MINOR="\$${1}_${2}_MINOR"
285     eval local MIN_TINY="\$${1}_${2}_TINY"
286     eval local CUR_MAJOR="\$${1}_MAJOR"
287     eval local CUR_MINOR="\$${1}_MINOR"
288     eval local CUR_TINY="\$${1}_TINY"
289     check_semantic_version_three $MIN_MAJOR $MIN_MINOR $MIN_TINY $CUR_MAJOR $CUR_MINOR $CUR_TINY
290     return $?
293 echo "********************************************************************"
294 echo "*"
295 echo "*   Running ${PACKAGE_NAME} build configuration."
296 echo "*"
297 echo "********************************************************************"
298 echo ""
300 dnl ===================================================================
301 dnl checks build and host OSes
302 dnl do this before argument processing to allow for platform dependent defaults
303 dnl ===================================================================
305 # Check for WSL (version 2, at least). But if --host is explicitly specified (to really do build for
306 # Linux on WSL) trust that.
307 if test -z "$host" -a -z "$build" -a "`wslsys -v 2>/dev/null`" != ""; then
308     ac_cv_host="x86_64-pc-wsl"
309     ac_cv_host_cpu="x86_64"
310     ac_cv_host_os="wsl"
311     ac_cv_build="$ac_cv_host"
312     ac_cv_build_cpu="$ac_cv_host_cpu"
313     ac_cv_build_os="$ac_cv_host_os"
315     # Emulation of Cygwin's cygpath command for WSL.
316     cygpath()
317     {
318         if test -n "$UNITTEST_WSL_CYGPATH"; then
319             echo -n cygpath "$@" "==> "
320         fi
322         # Cygwin's real cygpath has a plethora of options but we use only a few here.
323         local args="$@"
324         local opt
325         local opt_d opt_m opt_u opt_w opt_l opt_s opt_p
326         OPTIND=1
328         while getopts dmuwlsp opt; do
329             case "$opt" in
330                 \?)
331                     AC_MSG_ERROR([Unimplemented cygpath emulation option in invocation: cygpath $args])
332                     ;;
333                 ?)
334                     eval opt_$opt=yes
335                     ;;
336             esac
337         done
339         shift $((OPTIND-1))
341         if test $# -ne 1; then
342             AC_MSG_ERROR([Invalid cygpath emulation invocation: Pathname missing]);
343         fi
345         local input="$1"
347         local result
349         if test -n "$opt_d" -o -n "$opt_m" -o -n "$opt_w"; then
350             # Print Windows path, possibly in 8.3 form (-d) or with forward slashes (-m)
352             if test -n "$opt_u"; then
353                 AC_MSG_ERROR([Invalid cygpath invocation: Both Windows and Unix path output requested])
354             fi
356             case "$input" in
357                 /mnt/*)
358                     # A Windows file in WSL format
359                     input=$(wslpath -w "$input")
360                     ;;
361                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
362                     # Already in Windows format
363                     ;;
364                 /*)
365                     input=$(wslpath -w "$input")
366                     ;;
367                 *)
368                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
369                     ;;
370             esac
371             if test -n "$opt_d" -o -n "$opt_s"; then
372                 input=$($WSL_LO_HELPER --8.3 "$input")
373             fi
374             if test -n "$opt_m"; then
375                 input="${input//\\//}"
376             fi
377             echo "$input"
378         else
379             # Print Unix path
381             case "$input" in
382                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
383                     wslpath -u "$input"
384                     ;;
385                 /)
386                     echo "$input"
387                     ;;
388                 *)
389                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
390                     ;;
391             esac
392         fi
393     }
395     if test -n "$UNITTEST_WSL_CYGPATH"; then
396         BUILDDIR=.
398         # Nothing special with these file names, just arbitrary ones picked to test with
399         cygpath -d /usr/lib64/ld-linux-x86-64.so.2
400         cygpath -w /usr/lib64/ld-linux-x86-64.so.2
401         cygpath -m /usr/lib64/ld-linux-x86-64.so.2
402         cygpath -m -s /usr/lib64/ld-linux-x86-64.so.2
403         # At least on my machine for instance this file does have an 8.3 name
404         cygpath -d /mnt/c/windows/WindowsUpdate.log
405         # But for instance this one doesn't
406         cygpath -w /mnt/c/windows/system32/AboutSettingsHandlers.dll
407         cygpath -ws /mnt/c/windows/WindowsUpdate.log
408         cygpath -m /mnt/c/windows/system32/AboutSettingsHandlers.dll
409         cygpath -ms /mnt/c/windows/WindowsUpdate.log
411         cygpath -u 'c:\windows\system32\AboutSettingsHandlers.dll'
412         cygpath -u 'c:/windows/system32/AboutSettingsHandlers.dll'
414         exit 0
415     fi
417     if test -z "$WSL_LO_HELPER"; then
418         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/wsl-lo-helper" ; then
419             WSL_LO_HELPER="$LODE_HOME/opt/bin/wsl-lo-helper"
420         elif test -x "/opt/lo/bin/wsl-lo-helper"; then
421             WSL_LO_HELPER="/opt/lo/bin/wsl-lo-helper"
422         fi
423     fi
424     if test -z "$WSL_LO_HELPER"; then
425         AC_MSG_ERROR([wsl-lo-helper not found. See solenv/wsl/README.])
426     fi
429 AC_CANONICAL_HOST
430 AC_CANONICAL_BUILD
432 if test -n "$UNITTEST_WSL_PATHFORMAT"; then
433     BUILDDIR=.
434     GREP=grep
436     # Use of PathFormat must be after AC_CANONICAL_BUILD above
437     PathFormat /
438     printf "$formatted_path , $formatted_path_unix\n"
440     PathFormat $PWD
441     printf "$formatted_path , $formatted_path_unix\n"
443     PathFormat "$PROGRAMFILESX86"
444     printf "$formatted_path , $formatted_path_unix\n"
446     exit 0
449 AC_MSG_CHECKING([for product name])
450 PRODUCTNAME="AC_PACKAGE_NAME"
451 if test -n "$with_product_name" -a "$with_product_name" != no; then
452     PRODUCTNAME="$with_product_name"
454 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
455     PRODUCTNAME="${PRODUCTNAME}Dev"
457 AC_MSG_RESULT([$PRODUCTNAME])
458 AC_SUBST(PRODUCTNAME)
459 PRODUCTNAME_WITHOUT_SPACES=$(printf %s "$PRODUCTNAME" | sed 's/ //g')
460 AC_SUBST(PRODUCTNAME_WITHOUT_SPACES)
462 dnl ===================================================================
463 dnl Our version is defined by the AC_INIT() at the top of this script.
464 dnl ===================================================================
466 AC_MSG_CHECKING([for package version])
467 if test -n "$with_package_version" -a "$with_package_version" != no; then
468     PACKAGE_VERSION="$with_package_version"
470 AC_MSG_RESULT([$PACKAGE_VERSION])
472 set `echo "$PACKAGE_VERSION" | sed "s/\./ /g"`
474 LIBO_VERSION_MAJOR=$1
475 LIBO_VERSION_MINOR=$2
476 LIBO_VERSION_MICRO=$3
477 LIBO_VERSION_PATCH=$4
479 LIBO_VERSION_SUFFIX=$5
481 # Split out LIBO_VERSION_SUFFIX_SUFFIX... horrible crack. But apparently wanted separately in
482 # openoffice.lst as ABOUTBOXPRODUCTVERSIONSUFFIX. Note that the double brackets are for m4's sake,
483 # they get undoubled before actually passed to sed.
484 LIBO_VERSION_SUFFIX_SUFFIX=`echo "$LIBO_VERSION_SUFFIX" | sed -e 's/.*[[a-zA-Z0-9]]\([[^a-zA-Z0-9]]*\)$/\1/'`
485 test -n "$LIBO_VERSION_SUFFIX_SUFFIX" && LIBO_VERSION_SUFFIX="${LIBO_VERSION_SUFFIX%${LIBO_VERSION_SUFFIX_SUFFIX}}"
486 # LIBO_VERSION_SUFFIX, if non-empty, should include the period separator
487 test -n "$LIBO_VERSION_SUFFIX" && LIBO_VERSION_SUFFIX=".$LIBO_VERSION_SUFFIX"
489 # The value for key CFBundleVersion in the Info.plist file must be a period-separated list of at most
490 # three non-negative integers. Please find more information about CFBundleVersion at
491 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleversion
493 # The value for key CFBundleShortVersionString in the Info.plist file must be a period-separated list
494 # of at most three non-negative integers. Please find more information about
495 # CFBundleShortVersionString at
496 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring
498 # But that is enforced only in the App Store, and we apparently want to break the rules otherwise.
500 if test "$enable_macosx_sandbox" = yes; then
501     MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.`expr $LIBO_VERSION_MICRO '*' 1000 + $LIBO_VERSION_PATCH`
502     MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION
503 else
504     MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.$LIBO_VERSION_MICRO.$LIBO_VERSION_PATCH
505     MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION$LIBO_VERSION_SUFFIX
508 AC_SUBST(LIBO_VERSION_MAJOR)
509 AC_SUBST(LIBO_VERSION_MINOR)
510 AC_SUBST(LIBO_VERSION_MICRO)
511 AC_SUBST(LIBO_VERSION_PATCH)
512 AC_SUBST(LIBO_VERSION_SUFFIX)
513 AC_SUBST(LIBO_VERSION_SUFFIX_SUFFIX)
514 AC_SUBST(MACOSX_BUNDLE_SHORTVERSION)
515 AC_SUBST(MACOSX_BUNDLE_VERSION)
517 AC_DEFINE_UNQUOTED(LIBO_VERSION_MAJOR,$LIBO_VERSION_MAJOR)
518 AC_DEFINE_UNQUOTED(LIBO_VERSION_MINOR,$LIBO_VERSION_MINOR)
519 AC_DEFINE_UNQUOTED(LIBO_VERSION_MICRO,$LIBO_VERSION_MICRO)
520 AC_DEFINE_UNQUOTED(LIBO_VERSION_PATCH,$LIBO_VERSION_PATCH)
522 LIBO_THIS_YEAR=`date +%Y`
523 AC_DEFINE_UNQUOTED(LIBO_THIS_YEAR,$LIBO_THIS_YEAR)
525 # replace backslashes, to get a valid c++ string
526 config_args=$(echo $ac_configure_args | tr '\\' '/')
527 AC_DEFINE_UNQUOTED([BUILDCONFIG],[["$config_args"]],[Options passed to configure script])
529 dnl ===================================================================
530 dnl Product version
531 dnl ===================================================================
532 AC_MSG_CHECKING([for product version])
533 PRODUCTVERSION="$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR"
534 AC_MSG_RESULT([$PRODUCTVERSION])
535 AC_SUBST(PRODUCTVERSION)
537 AC_PROG_EGREP
538 # AC_PROG_EGREP doesn't set GREP on all systems as well
539 AC_PATH_PROG(GREP, grep)
541 BUILDDIR=`pwd`
542 cd $srcdir
543 SRC_ROOT=`pwd`
544 cd $BUILDDIR
545 x_Cygwin=[\#]
547 dnl ======================================
548 dnl Required GObject introspection version
549 dnl ======================================
550 INTROSPECTION_REQUIRED_VERSION=1.32.0
552 dnl ===================================================================
553 dnl Search all the common names for GNU Make
554 dnl ===================================================================
555 AC_MSG_CHECKING([for GNU Make])
557 # try to use our own make if it is available and GNUMAKE was not already defined
558 if test -z "$GNUMAKE"; then
559     if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/make" ; then
560         GNUMAKE="$LODE_HOME/opt/bin/make"
561     elif test -x "/opt/lo/bin/make"; then
562         GNUMAKE="/opt/lo/bin/make"
563     fi
566 GNUMAKE_WIN_NATIVE=
567 for a in "$MAKE" "$GNUMAKE" make gmake gnumake; do
568     if test -n "$a"; then
569         $a --version 2> /dev/null | grep GNU  2>&1 > /dev/null
570         if test $? -eq 0;  then
571             if test "$build_os" = "cygwin"; then
572                 if test -n "$($a -v | grep 'Built for Windows')" ; then
573                     GNUMAKE="$(cygpath -m "$(which "$(cygpath -u $a)")")"
574                     GNUMAKE_WIN_NATIVE="TRUE"
575                 else
576                     GNUMAKE=`which $a`
577                 fi
578             else
579                 GNUMAKE=`which $a`
580             fi
581             break
582         fi
583     fi
584 done
585 AC_MSG_RESULT($GNUMAKE)
586 if test -z "$GNUMAKE"; then
587     AC_MSG_ERROR([not found. install GNU Make.])
588 else
589     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
590         AC_MSG_NOTICE([Using a native Win32 GNU Make version.])
591     fi
594 win_short_path_for_make()
596     local short_path="$1"
597     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
598         cygpath -sm "$short_path"
599     else
600         cygpath -u "$(cygpath -d "$short_path")"
601     fi
605 if test "$build_os" = "cygwin"; then
606     PathFormat "$SRC_ROOT"
607     SRC_ROOT="$formatted_path"
608     PathFormat "$BUILDDIR"
609     BUILDDIR="$formatted_path"
610     x_Cygwin=
611     AC_MSG_CHECKING(for explicit COMSPEC)
612     if test -z "$COMSPEC"; then
613         AC_MSG_ERROR([COMSPEC not set in environment, please set it and rerun])
614     else
615         AC_MSG_RESULT([found: $COMSPEC])
616     fi
619 AC_SUBST(SRC_ROOT)
620 AC_SUBST(BUILDDIR)
621 AC_SUBST(x_Cygwin)
622 AC_DEFINE_UNQUOTED(SRCDIR,"$SRC_ROOT")
623 AC_DEFINE_UNQUOTED(SRC_ROOT,"$SRC_ROOT")
624 AC_DEFINE_UNQUOTED(BUILDDIR,"$BUILDDIR")
626 if test "z$EUID" = "z0" -a "`uname -o 2>/dev/null`" = "Cygwin"; then
627     AC_MSG_ERROR([You must build LibreOffice as a normal user - not using an administrative account])
630 # need sed in os checks...
631 AC_PATH_PROGS(SED, sed)
632 if test -z "$SED"; then
633     AC_MSG_ERROR([install sed to run this script])
636 # Set the ENABLE_LTO variable
637 # ===================================================================
638 AC_MSG_CHECKING([whether to use link-time optimization])
639 if test -n "$enable_lto" -a "$enable_lto" != "no"; then
640     ENABLE_LTO="TRUE"
641     AC_MSG_RESULT([yes])
642 else
643     ENABLE_LTO=""
644     AC_MSG_RESULT([no])
646 AC_SUBST(ENABLE_LTO)
648 AC_ARG_ENABLE(fuzz-options,
649     AS_HELP_STRING([--enable-fuzz-options],
650         [Randomly enable or disable each of those configurable options
651          that are supposed to be freely selectable without interdependencies,
652          or where bad interaction from interdependencies is automatically avoided.])
655 dnl ===================================================================
656 dnl When building for Android, --with-android-ndk,
657 dnl --with-android-ndk-toolchain-version and --with-android-sdk are
658 dnl mandatory
659 dnl ===================================================================
661 AC_ARG_WITH(android-ndk,
662     AS_HELP_STRING([--with-android-ndk],
663         [Specify location of the Android Native Development Kit. Mandatory when building for Android.]),
666 AC_ARG_WITH(android-ndk-toolchain-version,
667     AS_HELP_STRING([--with-android-ndk-toolchain-version],
668         [Specify which toolchain version to use, of those present in the
669         Android NDK you are using. The default (and only supported version currently) is "clang5.0"]),,
670         with_android_ndk_toolchain_version=clang5.0)
672 AC_ARG_WITH(android-sdk,
673     AS_HELP_STRING([--with-android-sdk],
674         [Specify location of the Android SDK. Mandatory when building for Android.]),
677 AC_ARG_WITH(android-api-level,
678     AS_HELP_STRING([--with-android-api-level],
679         [Specify the API level when building for Android. Defaults to 16 for ARM and x86 and to 21 for ARM64 and x86-64]),
682 ANDROID_NDK_DIR=
683 if test -z "$with_android_ndk" -a -e "$SRC_ROOT/external/android-ndk" -a "$build" != "$host"; then
684     with_android_ndk="$SRC_ROOT/external/android-ndk"
686 if test -n "$with_android_ndk"; then
687     eval ANDROID_NDK_DIR=$with_android_ndk
689     ANDROID_API_LEVEL=16
690     if test -n "$with_android_api_level" ; then
691         ANDROID_API_LEVEL="$with_android_api_level"
692     fi
694     if test $host_cpu = arm; then
695         LLVM_TRIPLE=armv7a-linux-androideabi
696         ANDROID_SYSROOT_PLATFORM=arm-linux-androideabi
697         ANDROID_APP_ABI=armeabi-v7a
698         ANDROIDCFLAGS="-mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=neon -Wl,--fix-cortex-a8"
699     elif test $host_cpu = aarch64; then
700         LLVM_TRIPLE=aarch64-linux-android
701         ANDROID_SYSROOT_PLATFORM=$LLVM_TRIPLE
702         # minimum android version that supports aarch64
703         if test "$ANDROID_API_LEVEL" -lt "21" ; then
704             ANDROID_API_LEVEL=21
705         fi
706         ANDROID_APP_ABI=arm64-v8a
707     elif test $host_cpu = x86_64; then
708         LLVM_TRIPLE=x86_64-linux-android
709         ANDROID_SYSROOT_PLATFORM=$LLVM_TRIPLE
710         # minimum android version that supports x86_64
711         ANDROID_API_LEVEL=21
712         ANDROID_APP_ABI=x86_64
713     else
714         # host_cpu is something like "i386" or "i686" I guess, NDK uses
715         # "x86" in some contexts
716         LLVM_TRIPLE=i686-linux-android
717         ANDROID_SYSROOT_PLATFORM=$LLVM_TRIPLE
718         ANDROID_APP_ABI=x86
719     fi
721     # Set up a lot of pre-canned defaults
723     if test ! -f $ANDROID_NDK_DIR/RELEASE.TXT; then
724         if test ! -f $ANDROID_NDK_DIR/source.properties; then
725             AC_MSG_ERROR([Unrecognized Android NDK. Missing RELEASE.TXT or source.properties file in $ANDROID_NDK_DIR.])
726         fi
727         ANDROID_NDK_VERSION=`sed -n -e 's/Pkg.Revision = //p' $ANDROID_NDK_DIR/source.properties`
728     else
729         ANDROID_NDK_VERSION=`cut -f1 -d' ' <$ANDROID_NDK_DIR/RELEASE.TXT`
730     fi
731     if test -z "$ANDROID_NDK_VERSION";  then
732         AC_MSG_ERROR([Failed to determine Android NDK version. Please check your installation.])
733     fi
734     case $ANDROID_NDK_VERSION in
735     r9*|r10*)
736         AC_MSG_ERROR([Building for Android requires NDK version >= 23.*])
737         ;;
738     11.1.*|12.1.*|13.1.*|14.1.*|16.*|17.*|18.*|19.*|20.*|21.*|22.*)
739         AC_MSG_ERROR([Building for Android requires NDK version >= 23.*])
740         ;;
741     23.*)
742         ;;
743     *)
744         # NDK 24 dropped support for API levels < 19
745         if test "$ANDROID_API_LEVEL" -lt "19"; then
746             ANDROID_API_LEVEL=19
747         fi
748         case $ANDROID_NDK_VERSION in
749         24.*|25.*)
750             ;;
751         *)
752             AC_MSG_WARN([Untested Android NDK version $ANDROID_NDK_VERSION, only versions 23.* to 25.* have been used successfully. Proceed at your own risk.])
753             add_warning "Untested Android NDK version $ANDROID_NDK_VERSION, only versions 23.* to 25.* have been used successfully. Proceed at your own risk."
754             ;;
755         esac
756         ;;
757     esac
759     case "$with_android_ndk_toolchain_version" in
760     clang5.0)
761         ANDROID_GCC_TOOLCHAIN_VERSION=4.9
762         ;;
763     *)
764         AC_MSG_ERROR([Unrecognized value for the --with-android-ndk-toolchain-version option. Building for Android is only supported with Clang 5.*])
765     esac
767     AC_MSG_NOTICE([using the Android API level... $ANDROID_API_LEVEL])
769     # NDK 15 or later toolchain is 64bit-only, except for Windows that we don't support. Using a 64-bit
770     # linker is required if you compile large parts of the code with -g. A 32-bit linker just won't
771     # manage to link the (app-specific) single huge .so that is built for the app in
772     # android/source/ if there is debug information in a significant part of the object files.
773     # (A 64-bit ld.gold grows too much over 10 gigabytes of virtual space when linking such a .so if
774     # all objects have been built with debug information.)
775     case $build_os in
776     linux-gnu*)
777         android_HOST_TAG=linux-x86_64
778         ;;
779     darwin*)
780         android_HOST_TAG=darwin-x86_64
781         ;;
782     *)
783         AC_MSG_ERROR([We only support building for Android from Linux or macOS])
784         # ndk would also support windows and windows-x86_64
785         ;;
786     esac
787     ANDROID_TOOLCHAIN=$ANDROID_NDK_DIR/toolchains/llvm/prebuilt/$android_HOST_TAG
788     ANDROID_COMPILER_BIN=$ANDROID_TOOLCHAIN/bin
790     test -z "$AR" && AR=$ANDROID_COMPILER_BIN/llvm-ar
791     test -z "$NM" && NM=$ANDROID_COMPILER_BIN/llvm-nm
792     test -z "$OBJDUMP" && OBJDUMP=$ANDROID_COMPILER_BIN/llvm-objdump
793     test -z "$RANLIB" && RANLIB=$ANDROID_COMPILER_BIN/llvm-ranlib
794     test -z "$STRIP" && STRIP=$ANDROID_COMPILER_BIN/llvm-strip
796     ANDROIDCFLAGS="$ANDROIDCFLAGS -target ${LLVM_TRIPLE}${ANDROID_API_LEVEL}"
797     ANDROIDCFLAGS="$ANDROIDCFLAGS -no-canonical-prefixes -ffunction-sections -fdata-sections -Qunused-arguments"
798     if test "$ENABLE_LTO" = TRUE; then
799         # -flto comes from com_GCC_defs.mk, too, but we need to make sure it gets passed as part of
800         # $CC and $CXX when building external libraries
801         ANDROIDCFLAGS="$ANDROIDCFLAGS -flto -fuse-linker-plugin -O2"
802     fi
804     ANDROIDCXXFLAGS="$ANDROIDCFLAGS -stdlib=libc++"
806     if test -z "$CC"; then
807         CC="$ANDROID_COMPILER_BIN/clang $ANDROIDCFLAGS"
808         CC_BASE="clang"
809     fi
810     if test -z "$CXX"; then
811         CXX="$ANDROID_COMPILER_BIN/clang++ $ANDROIDCXXFLAGS"
812         CXX_BASE="clang++"
813     fi
815 AC_SUBST(ANDROID_NDK_DIR)
816 AC_SUBST(ANDROID_API_LEVEL)
817 AC_SUBST(ANDROID_APP_ABI)
818 AC_SUBST(ANDROID_GCC_TOOLCHAIN_VERSION)
819 AC_SUBST(ANDROID_SYSROOT_PLATFORM)
820 AC_SUBST(ANDROID_TOOLCHAIN)
822 dnl ===================================================================
823 dnl --with-android-sdk
824 dnl ===================================================================
825 ANDROID_SDK_DIR=
826 if test -z "$with_android_sdk" -a -e "$SRC_ROOT/external/android-sdk-linux" -a "$build" != "$host"; then
827     with_android_sdk="$SRC_ROOT/external/android-sdk-linux"
829 if test -n "$with_android_sdk"; then
830     eval ANDROID_SDK_DIR=$with_android_sdk
831     PATH="$ANDROID_SDK_DIR/platform-tools:$ANDROID_SDK_DIR/tools:$PATH"
833 AC_SUBST(ANDROID_SDK_DIR)
835 AC_ARG_ENABLE([android-lok],
836     AS_HELP_STRING([--enable-android-lok],
837         [The Android app from the android/ subdir needs several tweaks all
838          over the place that break the LOK when used in the Online-based
839          Android app.  This switch indicates that the intent of this build is
840          actually the Online-based, non-modified LOK.])
842 ENABLE_ANDROID_LOK=
843 if test -n "$ANDROID_NDK_DIR" ; then
844     if test "$enable_android_lok" = yes; then
845         ENABLE_ANDROID_LOK=TRUE
846         AC_DEFINE(HAVE_FEATURE_ANDROID_LOK)
847         AC_MSG_NOTICE([building the Android version... for the Online-based Android app])
848     else
849         AC_MSG_NOTICE([building the Android version... for the app from the android/ subdir])
850     fi
852 AC_SUBST([ENABLE_ANDROID_LOK])
854 libo_FUZZ_ARG_ENABLE([android-editing],
855     AS_HELP_STRING([--enable-android-editing],
856         [Enable the experimental editing feature on Android.])
858 ENABLE_ANDROID_EDITING=
859 if test "$enable_android_editing" = yes; then
860     ENABLE_ANDROID_EDITING=TRUE
862 AC_SUBST([ENABLE_ANDROID_EDITING])
864 disable_database_connectivity_dependencies()
866     enable_evolution2=no
867     enable_firebird_sdbc=no
868     enable_mariadb_sdbc=no
869     enable_postgresql_sdbc=no
870     enable_report_builder=no
873 # ===================================================================
875 # Start initial platform setup
877 # The using_* variables reflect platform support and should not be
878 # changed after the "End initial platform setup" block.
879 # This is also true for most test_* variables.
880 # ===================================================================
881 build_crypto=yes
882 test_clucene=no
883 test_gdb_index=no
884 test_openldap=yes
885 test_split_debug=no
886 test_webdav=yes
887 usable_dlapi=yes
889 # There is currently just iOS not using salplug, so this explicitly enables it.
890 # must: using_freetype_fontconfig
891 #  may: using_headless_plugin defaults to $using_freetype_fontconfig
892 # must: using_x11
894 # Default values, as such probably valid just for Linux, set
895 # differently below just for Mac OSX, but at least better than
896 # hardcoding these as we used to do. Much of this is duplicated also
897 # in solenv for old build system and for gbuild, ideally we should
898 # perhaps define stuff like this only here in configure.ac?
900 LINKFLAGSSHL="-shared"
901 PICSWITCH="-fpic"
902 DLLPOST=".so"
904 LINKFLAGSNOUNDEFS="-Wl,-z,defs"
906 INSTROOTBASESUFFIX=
907 INSTROOTCONTENTSUFFIX=
908 SDKDIRNAME=sdk
910 HOST_PLATFORM="$host"
912 host_cpu_for_clang="$host_cpu"
914 case "$host_os" in
916 solaris*)
917     using_freetype_fontconfig=yes
918     using_x11=yes
919     build_skia=yes
920     _os=SunOS
922     dnl ===========================================================
923     dnl Check whether we're using Solaris 10 - SPARC or Intel.
924     dnl ===========================================================
925     AC_MSG_CHECKING([the Solaris operating system release])
926     _os_release=`echo $host_os | $SED -e s/solaris2\.//`
927     if test "$_os_release" -lt "10"; then
928         AC_MSG_ERROR([use Solaris >= 10 to build LibreOffice])
929     else
930         AC_MSG_RESULT([ok ($_os_release)])
931     fi
933     dnl Check whether we're using a SPARC or i386 processor
934     AC_MSG_CHECKING([the processor type])
935     if test "$host_cpu" = "sparc" -o "$host_cpu" = "i386"; then
936         AC_MSG_RESULT([ok ($host_cpu)])
937     else
938         AC_MSG_ERROR([only SPARC and i386 processors are supported])
939     fi
940     ;;
942 linux-gnu*|k*bsd*-gnu*|linux-musl*)
943     using_freetype_fontconfig=yes
944     using_x11=yes
945     build_skia=yes
946     test_gdb_index=yes
947     test_split_debug=yes
948     if test "$enable_fuzzers" = yes; then
949         test_system_freetype=no
950     fi
951     _os=Linux
952     ;;
954 gnu)
955     using_freetype_fontconfig=yes
956     using_x11=no
957     _os=GNU
958      ;;
960 cygwin*|wsl*)
961     # When building on Windows normally with MSVC under Cygwin,
962     # configure thinks that the host platform (the platform the
963     # built code will run on) is Cygwin, even if it obviously is
964     # Windows, which in Autoconf terminology is called
965     # "mingw32". (Which is misleading as MinGW is the name of the
966     # tool-chain, not an operating system.)
968     # Somewhat confusing, yes. But this configure script doesn't
969     # look at $host etc that much, it mostly uses its own $_os
970     # variable, set here in this case statement.
972     using_freetype_fontconfig=no
973     using_x11=no
974     test_unix_dlapi=no
975     test_openldap=no
976     enable_pagein=no
977     build_skia=yes
978     _os=WINNT
980     DLLPOST=".dll"
981     LINKFLAGSNOUNDEFS=
983     if test "$host_cpu" = "aarch64"; then
984         build_skia=no
985         enable_gpgmepp=no
986         enable_coinmp=no
987         enable_firebird_sdbc=no
988     fi
989     ;;
991 darwin*) # macOS
992     using_freetype_fontconfig=no
993     using_x11=no
994     build_skia=yes
995     enable_pagein=no
996     if test -n "$LODE_HOME" ; then
997         mac_sanitize_path
998         AC_MSG_NOTICE([sanitized the PATH to $PATH])
999     fi
1000     _os=Darwin
1001     INSTROOTBASESUFFIX=/$PRODUCTNAME_WITHOUT_SPACES.app
1002     INSTROOTCONTENTSUFFIX=/Contents
1003     SDKDIRNAME=${PRODUCTNAME_WITHOUT_SPACES}${PRODUCTVERSION}_SDK
1004     # See "Default values, as such probably valid just for Linux" comment above the case "$host_os"
1005     LINKFLAGSSHL="-dynamiclib -single_module"
1007     # -fPIC is default
1008     PICSWITCH=""
1010     DLLPOST=".dylib"
1012     # -undefined error is the default
1013     LINKFLAGSNOUNDEFS=""
1014     case "$host_cpu" in
1015     aarch64|arm64)
1016         # Apple's Clang uses "arm64"
1017         host_cpu_for_clang=arm64
1018     esac
1021 ios*) # iOS
1022     using_freetype_fontconfig=no
1023     using_x11=no
1024     build_crypto=no
1025     test_libcmis=no
1026     test_openldap=no
1027     test_webdav=no
1028     if test -n "$LODE_HOME" ; then
1029         mac_sanitize_path
1030         AC_MSG_NOTICE([sanitized the PATH to $PATH])
1031     fi
1032     enable_gpgmepp=no
1033     _os=iOS
1034     enable_mpl_subset=yes
1035     enable_lotuswordpro=no
1036     disable_database_connectivity_dependencies
1037     enable_coinmp=no
1038     enable_lpsolve=no
1039     enable_extension_integration=no
1040     enable_xmlhelp=no
1041     with_ppds=no
1042     if test "$enable_ios_simulator" = "yes"; then
1043         host=x86_64-apple-darwin
1044     fi
1045     # See "Default values, as such probably valid just for Linux" comment above the case "$host_os"
1046     LINKFLAGSSHL="-dynamiclib -single_module"
1048     # -fPIC is default
1049     PICSWITCH=""
1051     DLLPOST=".dylib"
1053     # -undefined error is the default
1054     LINKFLAGSNOUNDEFS=""
1056     # HOST_PLATFORM is used for external projects and their configury typically doesn't like the "ios"
1057     # part, so use aarch64-apple-darwin for now.
1058     HOST_PLATFORM=aarch64-apple-darwin
1060     # Apple's Clang uses "arm64"
1061     host_cpu_for_clang=arm64
1064 freebsd*)
1065     using_freetype_fontconfig=yes
1066     using_x11=yes
1067     build_skia=yes
1068     AC_MSG_CHECKING([the FreeBSD operating system release])
1069     if test -n "$with_os_version"; then
1070         OSVERSION="$with_os_version"
1071     else
1072         OSVERSION=`/sbin/sysctl -n kern.osreldate`
1073     fi
1074     AC_MSG_RESULT([found OSVERSION=$OSVERSION])
1075     AC_MSG_CHECKING([which thread library to use])
1076     if test "$OSVERSION" -lt "500016"; then
1077         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1078         PTHREAD_LIBS="-pthread"
1079     elif test "$OSVERSION" -lt "502102"; then
1080         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1081         PTHREAD_LIBS="-lc_r"
1082     else
1083         PTHREAD_CFLAGS=""
1084         PTHREAD_LIBS="-pthread"
1085     fi
1086     AC_MSG_RESULT([$PTHREAD_LIBS])
1087     _os=FreeBSD
1088     ;;
1090 *netbsd*)
1091     using_freetype_fontconfig=yes
1092     using_x11=yes
1093     test_gtk3_kde5=no
1094     build_skia=yes
1095     PTHREAD_LIBS="-pthread -lpthread"
1096     _os=NetBSD
1097     ;;
1099 openbsd*)
1100     using_freetype_fontconfig=yes
1101     using_x11=yes
1102     PTHREAD_CFLAGS="-D_THREAD_SAFE"
1103     PTHREAD_LIBS="-pthread"
1104     _os=OpenBSD
1105     ;;
1107 dragonfly*)
1108     using_freetype_fontconfig=yes
1109     using_x11=yes
1110     build_skia=yes
1111     PTHREAD_LIBS="-pthread"
1112     _os=DragonFly
1113     ;;
1115 linux-android*)
1116     # API exists, but seems not really usable since Android 7 AFAIK
1117     usable_dlapi=no
1118     using_freetype_fontconfig=yes
1119     using_headless_plugin=no
1120     using_x11=no
1121     build_crypto=no
1122     test_openldap=no
1123     test_system_freetype=no
1124     test_webdav=no
1125     disable_database_connectivity_dependencies
1126     enable_lotuswordpro=no
1127     enable_mpl_subset=yes
1128     enable_cairo_canvas=no
1129     enable_coinmp=yes
1130     enable_lpsolve=no
1131     enable_odk=no
1132     enable_python=no
1133     enable_xmlhelp=no
1134     _os=Android
1135     ;;
1137 haiku*)
1138     using_freetype_fontconfig=yes
1139     using_x11=no
1140     test_gtk3=no
1141     test_gtk3_kde5=no
1142     test_kf5=yes
1143     test_kf6=yes
1144     enable_odk=no
1145     enable_coinmp=no
1146     enable_pdfium=no
1147     enable_sdremote=no
1148     enable_postgresql_sdbc=no
1149     enable_firebird_sdbc=no
1150     _os=Haiku
1151     ;;
1153 emscripten)
1154     # API currently just exists in headers, not code
1155     usable_dlapi=no
1156     using_freetype_fontconfig=yes
1157     using_x11=yes
1158     test_openldap=no
1159     test_qt5=yes
1160     test_split_debug=yes
1161     test_system_freetype=no
1162     enable_compiler_plugins=no
1163     enable_customtarget_components=yes
1164     enable_split_debug=yes
1165     enable_wasm_strip=yes
1166     with_system_zlib=no
1167     with_theme="colibre"
1168     _os=Emscripten
1169     ;;
1172     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
1173     ;;
1174 esac
1176 AC_SUBST(HOST_PLATFORM)
1178 if test -z "$using_x11" -o -z "$using_freetype_fontconfig"; then
1179     AC_MSG_ERROR([You must set \$using_freetype_fontconfig and \$using_x11 for your platform])
1182 # Set defaults, if not set by platform
1183 test "${test_cups+set}" = set || test_cups="$using_x11"
1184 test "${test_dbus+set}" = set || test_dbus="$using_x11"
1185 test "${test_gen+set}" = set || test_gen="$using_x11"
1186 test "${test_gstreamer_1_0+set}" = set || test_gstreamer_1_0="$using_x11"
1187 test "${test_gtk3+set}" = set || test_gtk3="$using_x11"
1188 test "${test_gtk4+set}" = set || test_gtk4="$using_x11"
1189 test "${test_kf5+set}" = set || test_kf5="$using_x11"
1190 test "${test_kf6+set}" = set || test_kf6="$using_x11"
1191 # don't handle test_qt5, so it can disable test_kf5 later
1192 test "${test_qt6+set}" = set || test_qt6="$using_x11"
1193 test "${test_randr+set}" = set || test_randr="$using_x11"
1194 test "${test_xrender+set}" = set || test_xrender="$using_x11"
1195 test "${using_headless_plugin+set}" = set || using_headless_plugin="$using_freetype_fontconfig"
1197 test "${test_gtk3_kde5+set}" != set -a "$test_kf5" = yes -a "$test_gtk3" = yes && test_gtk3_kde5="yes"
1198 # Make sure fontconfig and freetype test both either system or not
1199 test "${test_system_fontconfig+set}" != set -a "${test_system_freetype+set}" = set && test_system_fontconfig="$test_system_freetype"
1200 test "${test_system_freetype+set}" != set -a "${test_system_fontconfig+set}" = set && test_system_freetype="$test_system_fontconfig"
1202 # convenience / platform overriding "fixes"
1203 # Don't sort!
1204 test "$test_kf5" = yes -a "$test_qt5" = no && test_kf5=no
1205 test "$test_kf5" = yes && test_qt5=yes
1206 test "$test_gtk3" != yes && enable_gtk3=no
1207 test "$test_gtk3" != yes -o "$test_kf5" != yes && test_gtk3_kde5=no
1208 test "$using_freetype_fontconfig" = no && using_headless_plugin=no
1209 test "$using_freetype_fontconfig" = yes && test_cairo=yes
1211 # Keep in sync with the above $using_x11 depending test default list
1212 disable_x11_tests()
1214     test_cups=no
1215     test_dbus=no
1216     test_gen=no
1217     test_gstreamer_1_0=no
1218     test_gtk3_kde5=no
1219     test_gtk3=no
1220     test_gtk4=no
1221     test_kf5=no
1222     test_kf6=no
1223     test_qt5=no
1224     test_qt6=no
1225     test_randr=no
1226     test_xrender=no
1229 test "$using_x11" = yes && USING_X11=TRUE
1231 if test "$using_freetype_fontconfig" = yes; then
1232     AC_DEFINE(USE_HEADLESS_CODE)
1233     USE_HEADLESS_CODE=TRUE
1234     if test "$using_headless_plugin" = yes; then
1235         AC_DEFINE(ENABLE_HEADLESS)
1236         ENABLE_HEADLESS=TRUE
1237     fi
1238 else
1239     test_fontconfig=no
1240     test_freetype=no
1243 AC_SUBST(ENABLE_HEADLESS)
1244 AC_SUBST(USE_HEADLESS_CODE)
1246 AC_MSG_NOTICE([VCL platform has a usable dynamic loading API: $usable_dlapi])
1247 AC_MSG_NOTICE([VCL platform uses freetype+fontconfig: $using_freetype_fontconfig])
1248 AC_MSG_NOTICE([VCL platform uses headless plugin: $using_headless_plugin])
1249 AC_MSG_NOTICE([VCL platform uses X11: $using_x11])
1251 # ===================================================================
1253 # End initial platform setup
1255 # ===================================================================
1257 if test "$_os" = "Android" ; then
1258     # Verify that the NDK and SDK options are proper
1259     if test -z "$with_android_ndk"; then
1260         AC_MSG_ERROR([the --with-android-ndk option is mandatory, unless it is available at external/android-ndk/.])
1261     elif test ! -f "$ANDROID_NDK_DIR/meta/abis.json"; then
1262         AC_MSG_ERROR([the --with-android-ndk option does not point to an Android NDK])
1263     fi
1265     if test -z "$ANDROID_SDK_DIR"; then
1266         AC_MSG_ERROR([the --with-android-sdk option is mandatory, unless it is available at external/android-sdk-linux/.])
1267     elif test ! -d "$ANDROID_SDK_DIR/platforms"; then
1268         AC_MSG_ERROR([the --with-android-sdk option does not point to an Android SDK])
1269     fi
1272 AC_SUBST(SDKDIRNAME)
1274 AC_SUBST(PTHREAD_CFLAGS)
1275 AC_SUBST(PTHREAD_LIBS)
1277 # Check for explicit A/C/CXX/OBJC/OBJCXX/LDFLAGS.
1278 # By default use the ones specified by our build system,
1279 # but explicit override is possible.
1280 AC_MSG_CHECKING(for explicit AFLAGS)
1281 if test -n "$AFLAGS"; then
1282     AC_MSG_RESULT([$AFLAGS])
1283     x_AFLAGS=
1284 else
1285     AC_MSG_RESULT(no)
1286     x_AFLAGS=[\#]
1288 AC_MSG_CHECKING(for explicit CFLAGS)
1289 if test -n "$CFLAGS"; then
1290     AC_MSG_RESULT([$CFLAGS])
1291     x_CFLAGS=
1292 else
1293     AC_MSG_RESULT(no)
1294     x_CFLAGS=[\#]
1296 AC_MSG_CHECKING(for explicit CXXFLAGS)
1297 if test -n "$CXXFLAGS"; then
1298     AC_MSG_RESULT([$CXXFLAGS])
1299     x_CXXFLAGS=
1300 else
1301     AC_MSG_RESULT(no)
1302     x_CXXFLAGS=[\#]
1304 AC_MSG_CHECKING(for explicit OBJCFLAGS)
1305 if test -n "$OBJCFLAGS"; then
1306     AC_MSG_RESULT([$OBJCFLAGS])
1307     x_OBJCFLAGS=
1308 else
1309     AC_MSG_RESULT(no)
1310     x_OBJCFLAGS=[\#]
1312 AC_MSG_CHECKING(for explicit OBJCXXFLAGS)
1313 if test -n "$OBJCXXFLAGS"; then
1314     AC_MSG_RESULT([$OBJCXXFLAGS])
1315     x_OBJCXXFLAGS=
1316 else
1317     AC_MSG_RESULT(no)
1318     x_OBJCXXFLAGS=[\#]
1320 AC_MSG_CHECKING(for explicit LDFLAGS)
1321 if test -n "$LDFLAGS"; then
1322     AC_MSG_RESULT([$LDFLAGS])
1323     x_LDFLAGS=
1324 else
1325     AC_MSG_RESULT(no)
1326     x_LDFLAGS=[\#]
1328 AC_SUBST(AFLAGS)
1329 AC_SUBST(CFLAGS)
1330 AC_SUBST(CXXFLAGS)
1331 AC_SUBST(OBJCFLAGS)
1332 AC_SUBST(OBJCXXFLAGS)
1333 AC_SUBST(LDFLAGS)
1334 AC_SUBST(x_AFLAGS)
1335 AC_SUBST(x_CFLAGS)
1336 AC_SUBST(x_CXXFLAGS)
1337 AC_SUBST(x_OBJCFLAGS)
1338 AC_SUBST(x_OBJCXXFLAGS)
1339 AC_SUBST(x_LDFLAGS)
1341 dnl These are potentially set for MSVC, in the code checking for UCRT below:
1342 my_original_CFLAGS=$CFLAGS
1343 my_original_CXXFLAGS=$CXXFLAGS
1344 my_original_CPPFLAGS=$CPPFLAGS
1346 dnl The following checks for gcc, cc and then cl (if it weren't guarded for win32)
1347 dnl Needs to precede the AC_C_BIGENDIAN and AC_SEARCH_LIBS calls below, which apparently call
1348 dnl AC_PROG_CC internally.
1349 if test "$_os" != "WINNT"; then
1350     # AC_PROG_CC sets CFLAGS to -g -O2 if not set, avoid that
1351     save_CFLAGS=$CFLAGS
1352     AC_PROG_CC
1353     CFLAGS=$save_CFLAGS
1354     if test -z "$CC_BASE"; then
1355         CC_BASE=`first_arg_basename "$CC"`
1356     fi
1359 if test "$_os" != "WINNT"; then
1360     AC_C_BIGENDIAN([ENDIANNESS=big], [ENDIANNESS=little])
1361 else
1362     ENDIANNESS=little
1364 AC_SUBST(ENDIANNESS)
1366 if test "$usable_dlapi" != no; then
1367     AC_DEFINE([HAVE_DLAPI])
1368     if test "$test_unix_dlapi" != no; then
1369         save_LIBS="$LIBS"
1370         AC_SEARCH_LIBS([dlsym], [dl],
1371             [case "$ac_cv_search_dlsym" in -l*) UNIX_DLAPI_LIBS="$ac_cv_search_dlsym";; esac],
1372             [AC_MSG_ERROR([dlsym not found in either libc nor libdl])])
1373         LIBS="$save_LIBS"
1374         AC_DEFINE([HAVE_UNIX_DLAPI])
1375     fi
1377 AC_SUBST(UNIX_DLAPI_LIBS)
1379 # Check for a (GNU) backtrace implementation
1380 AC_ARG_VAR([BACKTRACE_CFLAGS], [Compiler flags needed to use backtrace(3)])
1381 AC_ARG_VAR([BACKTRACE_LIBS], [Linker flags needed to use backtrace(3)])
1382 AS_IF([test "x$BACKTRACE_LIBS$BACKTRACE_CFLAGS" = x], [
1383     save_LIBS="$LIBS"
1384     AC_SEARCH_LIBS([backtrace], [libexecinfo],
1385         [case "$ac_cv_search_backtrace" in -l*) BACKTRACE_LIBS="$ac_cv_search_backtrace";; esac],
1386         [PKG_CHECK_MODULES([BACKTRACE], [libexecinfo], [ac_cv_search_backtrace=], [:])])
1387     LIBS="$save_LIBS"
1389 AS_IF([test "x$ac_cv_search_backtrace" != xno ], [
1390     AC_DEFINE([HAVE_FEATURE_BACKTRACE])
1393 dnl ===================================================================
1394 dnl Sanity checks for Emscripten SDK setup
1395 dnl ===================================================================
1397 EMSCRIPTEN_MIN_MAJOR=2
1398 EMSCRIPTEN_MIN_MINOR=0
1399 EMSCRIPTEN_MIN_TINY=31
1400 EMSCRIPTEN_MIN_VERSION="${EMSCRIPTEN_MIN_MAJOR}.${EMSCRIPTEN_MIN_MINOR}.${EMSCRIPTEN_MIN_TINY}"
1402 if test "$_os" = "Emscripten"; then
1403     AC_MSG_CHECKING([if Emscripten is at least $EMSCRIPTEN_MIN_VERSION])
1404     AS_IF([test -z "$EMSDK"],
1405           [AC_MSG_ERROR([No \$EMSDK environment variable.])])
1406     EMSCRIPTEN_VERSION_H=$EMSDK/upstream/emscripten/cache/sysroot/include/emscripten/version.h
1407     if test -f "$EMSCRIPTEN_VERSION_H"; then
1408         EMSCRIPTEN_MAJOR=$($GREP __EMSCRIPTEN_major__ "$EMSCRIPTEN_VERSION_H" | $SED -ne 's/.*__EMSCRIPTEN_major__ //p')
1409         EMSCRIPTEN_MINOR=$($GREP __EMSCRIPTEN_minor__ "$EMSCRIPTEN_VERSION_H" | $SED -ne 's/.*__EMSCRIPTEN_minor__ //p')
1410         EMSCRIPTEN_TINY=$($GREP __EMSCRIPTEN_tiny__ "$EMSCRIPTEN_VERSION_H" | $SED -ne 's/.*__EMSCRIPTEN_tiny__ //p')
1411     else
1412         EMSCRIPTEN_DEFINES=$(echo | emcc -dM -E - | $GREP __EMSCRIPTEN_)
1413         EMSCRIPTEN_MAJOR=$(echo "$EMSCRIPTEN_DEFINES" | $SED -ne 's/.*__EMSCRIPTEN_major__ //p')
1414         EMSCRIPTEN_MINOR=$(echo "$EMSCRIPTEN_DEFINES" | $SED -ne 's/.*__EMSCRIPTEN_minor__ //p')
1415         EMSCRIPTEN_TINY=$(echo "$EMSCRIPTEN_DEFINES" | $SED -ne 's/.*__EMSCRIPTEN_tiny__ //p')
1416     fi
1418     EMSCRIPTEN_VERSION="${EMSCRIPTEN_MAJOR}.${EMSCRIPTEN_MINOR}.${EMSCRIPTEN_TINY}"
1420     check_semantic_version_three_prefixed EMSCRIPTEN MIN
1421     if test $? -eq 0; then
1422         AC_MSG_RESULT([yes ($EMSCRIPTEN_VERSION)])
1423     else
1424         AC_MSG_ERROR([no, found $EMSCRIPTEN_VERSION])
1425     fi
1427     EMSCRIPTEN_ERROR=0
1428     if ! which emconfigure >/dev/null 2>&1; then
1429         AC_MSG_WARN([emconfigure must be in your \$PATH])
1430         EMSCRIPTEN_ERROR=1
1431     fi
1432     if test -z "$EMMAKEN_JUST_CONFIGURE"; then
1433         AC_MSG_WARN(["\$EMMAKEN_JUST_CONFIGURE wasn't set by emconfigure. Prefix configure or use autogen.sh])
1434         EMSCRIPTEN_ERROR=1
1435     fi
1436     EMSDK_FILE_PACKAGER="$(em-config EMSCRIPTEN_ROOT)"/tools/file_packager
1437     if ! test -x "$EMSDK_FILE_PACKAGER"; then
1438         AC_MSG_WARN([No file_packager found in $(em-config EMSCRIPTEN_ROOT)/tools/file_packager.])
1439         EMSCRIPTEN_ERROR=1
1440     fi
1441     if test $EMSCRIPTEN_ERROR -ne 0; then
1442         AC_MSG_ERROR(["Please fix your EMSDK setup to build with Emscripten!"])
1443     fi
1445 AC_SUBST(EMSDK_FILE_PACKAGER)
1447 ###############################################################################
1448 # Extensions switches --enable/--disable
1449 ###############################################################################
1450 # By default these should be enabled unless having extra dependencies.
1451 # If there is extra dependency over configure options then the enable should
1452 # be automagic based on whether the requiring feature is enabled or not.
1453 # All this options change anything only with --enable-extension-integration.
1455 # The name of this option and its help string makes it sound as if
1456 # extensions are built anyway, just not integrated in the installer,
1457 # if you use --disable-extension-integration. Is that really the
1458 # case?
1460 AC_ARG_ENABLE(ios-simulator,
1461     AS_HELP_STRING([--enable-ios-simulator],
1462         [build for iOS simulator])
1465 libo_FUZZ_ARG_ENABLE(extension-integration,
1466     AS_HELP_STRING([--disable-extension-integration],
1467         [Disable integration of the built extensions in the installer of the
1468          product. Use this switch to disable the integration.])
1471 AC_ARG_ENABLE(avmedia,
1472     AS_HELP_STRING([--disable-avmedia],
1473         [Disable displaying and inserting AV media in documents. Work in progress, use only if you are hacking on it.]),
1474 ,test "${enable_avmedia+set}" = set || enable_avmedia=yes)
1476 AC_ARG_ENABLE(database-connectivity,
1477     AS_HELP_STRING([--disable-database-connectivity],
1478         [Disable various database connectivity. Work in progress, use only if you are hacking on it.])
1481 # This doesn't mean not building (or "integrating") extensions
1482 # (although it probably should; i.e. it should imply
1483 # --disable-extension-integration I guess), it means not supporting
1484 # any extension mechanism at all
1485 libo_FUZZ_ARG_ENABLE(extensions,
1486     AS_HELP_STRING([--disable-extensions],
1487         [Disable all add-on extension functionality. Work in progress, use only if you are hacking on it.])
1490 AC_ARG_ENABLE(scripting,
1491     AS_HELP_STRING([--disable-scripting],
1492         [Disable BASIC, Java and Python. Work in progress, use only if you are hacking on it.]),
1493 ,test "${enable_scripting+set}" = set || enable_scripting=yes)
1495 # This is mainly for Android and iOS, but could potentially be used in some
1496 # special case otherwise, too, so factored out as a separate setting
1498 AC_ARG_ENABLE(dynamic-loading,
1499     AS_HELP_STRING([--disable-dynamic-loading],
1500         [Disable any use of dynamic loading of code. Work in progress, use only if you are hacking on it.])
1503 libo_FUZZ_ARG_ENABLE(report-builder,
1504     AS_HELP_STRING([--disable-report-builder],
1505         [Disable the Report Builder.])
1508 libo_FUZZ_ARG_ENABLE(ext-wiki-publisher,
1509     AS_HELP_STRING([--enable-ext-wiki-publisher],
1510         [Enable the Wiki Publisher extension.])
1513 libo_FUZZ_ARG_ENABLE(lpsolve,
1514     AS_HELP_STRING([--disable-lpsolve],
1515         [Disable compilation of the lp solve solver ])
1517 libo_FUZZ_ARG_ENABLE(coinmp,
1518     AS_HELP_STRING([--disable-coinmp],
1519         [Disable compilation of the CoinMP solver ])
1522 libo_FUZZ_ARG_ENABLE(pdfimport,
1523     AS_HELP_STRING([--disable-pdfimport],
1524         [Disable building the PDF import feature.])
1527 libo_FUZZ_ARG_ENABLE(pdfium,
1528     AS_HELP_STRING([--disable-pdfium],
1529         [Disable building PDFium. Results in unsecure PDF signature verification.])
1532 libo_FUZZ_ARG_ENABLE(skia,
1533     AS_HELP_STRING([--disable-skia],
1534         [Disable building Skia. Use --enable-skia=debug to build without optimizations.])
1537 ###############################################################################
1539 dnl ---------- *** ----------
1541 libo_FUZZ_ARG_ENABLE(mergelibs,
1542     AS_HELP_STRING([--enable-mergelibs],
1543         [Merge several of the smaller libraries into one big, "merged", one.])
1546 libo_FUZZ_ARG_ENABLE(breakpad,
1547     AS_HELP_STRING([--enable-breakpad],
1548         [Enables breakpad for crash reporting.])
1551 libo_FUZZ_ARG_ENABLE(crashdump,
1552     AS_HELP_STRING([--disable-crashdump],
1553         [Disable dump.ini and dump-file, when --enable-breakpad])
1556 AC_ARG_ENABLE(fetch-external,
1557     AS_HELP_STRING([--disable-fetch-external],
1558         [Disables fetching external tarballs from web sources.])
1561 AC_ARG_ENABLE(fuzzers,
1562     AS_HELP_STRING([--enable-fuzzers],
1563         [Enables building libfuzzer targets for fuzz testing.])
1566 libo_FUZZ_ARG_ENABLE(pch,
1567     AS_HELP_STRING([--enable-pch=<yes/no/system/base/normal/full>],
1568         [Enables precompiled header support for C++. Forced default on Windows/VC build.
1569          Using 'system' will include only external headers, 'base' will add also headers
1570          from base modules, 'normal' will also add all headers except from the module built,
1571          'full' will use all suitable headers even from a module itself.])
1574 libo_FUZZ_ARG_ENABLE(epm,
1575     AS_HELP_STRING([--enable-epm],
1576         [LibreOffice includes self-packaging code, that requires epm, however epm is
1577          useless for large scale package building.])
1580 libo_FUZZ_ARG_ENABLE(odk,
1581     AS_HELP_STRING([--enable-odk],
1582         [Enable building the Office Development Kit, the part that extensions need to build against])
1585 AC_ARG_ENABLE(mpl-subset,
1586     AS_HELP_STRING([--enable-mpl-subset],
1587         [Don't compile any pieces which are not MPL or more liberally licensed])
1590 libo_FUZZ_ARG_ENABLE(evolution2,
1591     AS_HELP_STRING([--enable-evolution2],
1592         [Allows the built-in evolution 2 addressbook connectivity build to be
1593          enabled.])
1596 AC_ARG_ENABLE(avahi,
1597     AS_HELP_STRING([--enable-avahi],
1598         [Determines whether to use Avahi to advertise Impress to remote controls.])
1601 libo_FUZZ_ARG_ENABLE(werror,
1602     AS_HELP_STRING([--enable-werror],
1603         [Turn warnings to errors. (Has no effect in modules where the treating
1604          of warnings as errors is disabled explicitly.)]),
1607 libo_FUZZ_ARG_ENABLE(assert-always-abort,
1608     AS_HELP_STRING([--enable-assert-always-abort],
1609         [make assert() failures abort even when building without --enable-debug or --enable-dbgutil.]),
1612 libo_FUZZ_ARG_ENABLE(dbgutil,
1613     AS_HELP_STRING([--enable-dbgutil],
1614         [Provide debugging support from --enable-debug and include additional debugging
1615          utilities such as object counting or more expensive checks.
1616          This is the recommended option for developers.
1617          Note that this makes the build ABI incompatible, it is not possible to mix object
1618          files or libraries from a --enable-dbgutil and a --disable-dbgutil build.]))
1620 libo_FUZZ_ARG_ENABLE(debug,
1621     AS_HELP_STRING([--enable-debug],
1622         [Include debugging information, disable compiler optimization and inlining plus
1623          extra debugging code like assertions. Extra large build! (enables -g compiler flag).]))
1625 libo_FUZZ_ARG_ENABLE(split-debug,
1626     AS_HELP_STRING([--disable-split-debug],
1627         [Disable using split debug information (-gsplit-dwarf compile flag). Split debug information
1628          saves disk space and build time, but requires tools that support it (both build tools and debuggers).]))
1630 libo_FUZZ_ARG_ENABLE(gdb-index,
1631     AS_HELP_STRING([--disable-gdb-index],
1632         [Disables creating debug information in the gdb index format, which makes gdb start faster.
1633          The feature requires a linker that supports the --gdb-index option.]))
1635 libo_FUZZ_ARG_ENABLE(sal-log,
1636     AS_HELP_STRING([--enable-sal-log],
1637         [Make SAL_INFO and SAL_WARN calls do something even in a non-debug build.]))
1639 libo_FUZZ_ARG_ENABLE(symbols,
1640     AS_HELP_STRING([--enable-symbols],
1641         [Generate debug information.
1642          By default, enabled for --enable-debug and --enable-dbgutil, disabled
1643          otherwise. It is possible to explicitly specify gbuild build targets
1644          (where 'all' means everything, '-' prepended means to not enable, '/' appended means
1645          everything in the directory; there is no ordering, more specific overrides
1646          more general, and disabling takes precedence).
1647          Example: --enable-symbols="all -sw/ -Library_sc".]))
1649 libo_FUZZ_ARG_ENABLE(optimized,
1650     AS_HELP_STRING([--enable-optimized=<yes/no/debug>],
1651         [Whether to compile with optimization flags.
1652          By default, disabled for --enable-debug and --enable-dbgutil, enabled
1653          otherwise. Using 'debug' will try to use only optimizations that should
1654          not interfere with debugging. For Emscripten we default to optimized (-O1)
1655          debug build, as otherwise binaries become too large.]))
1657 libo_FUZZ_ARG_ENABLE(runtime-optimizations,
1658     AS_HELP_STRING([--disable-runtime-optimizations],
1659         [Statically disable certain runtime optimizations (like rtl/alloc.h or
1660          JVM JIT) that are known to interact badly with certain dynamic analysis
1661          tools (like -fsanitize=address or Valgrind).  By default, disabled iff
1662          CC contains "-fsanitize=*".  (For Valgrind, those runtime optimizations
1663          are typically disabled dynamically via RUNNING_ON_VALGRIND.)]))
1665 AC_ARG_WITH(valgrind,
1666     AS_HELP_STRING([--with-valgrind],
1667         [Make availability of Valgrind headers a hard requirement.]))
1669 libo_FUZZ_ARG_ENABLE(compiler-plugins,
1670     AS_HELP_STRING([--enable-compiler-plugins],
1671         [Enable compiler plugins that will perform additional checks during
1672          building. Enabled automatically by --enable-dbgutil.
1673          Use --enable-compiler-plugins=debug to also enable debug code in the plugins.]))
1674 COMPILER_PLUGINS_DEBUG=
1675 if test "$enable_compiler_plugins" = debug; then
1676     enable_compiler_plugins=yes
1677     COMPILER_PLUGINS_DEBUG=TRUE
1680 libo_FUZZ_ARG_ENABLE(compiler-plugins-analyzer-pch,
1681     AS_HELP_STRING([--disable-compiler-plugins-analyzer-pch],
1682         [Disable use of precompiled headers when running the Clang compiler plugin analyzer.  Not
1683          relevant in the --disable-compiler-plugins case.]))
1685 libo_FUZZ_ARG_ENABLE(ooenv,
1686     AS_HELP_STRING([--enable-ooenv],
1687         [Enable ooenv for the instdir installation.]))
1689 AC_ARG_ENABLE(lto,
1690     AS_HELP_STRING([--enable-lto],
1691         [Enable link-time optimization. Suitable for (optimised) product builds. Building might take
1692          longer but libraries and executables are optimized for speed. For GCC, best to use the 'gold'
1693          linker.)]))
1695 AC_ARG_ENABLE(python,
1696     AS_HELP_STRING([--enable-python=<no/auto/system/internal/fully-internal>],
1697         [Enables or disables Python support at run-time.
1698          Also specifies what Python to use at build-time.
1699          'fully-internal' even forces the internal version for uses of Python
1700          during the build.
1701          On macOS the only choices are
1702          'internal' (default) or 'fully-internal'. Otherwise the default is 'auto'.
1703          ]))
1705 libo_FUZZ_ARG_ENABLE(gtk3,
1706     AS_HELP_STRING([--disable-gtk3],
1707         [Determines whether to use Gtk+ 3.0 vclplug on platforms where Gtk+ 3.0 is available.]),
1708 ,test "${test_gtk3}" = no -o "${enable_gtk3+set}" = set || enable_gtk3=yes)
1710 AC_ARG_ENABLE(gtk4,
1711     AS_HELP_STRING([--enable-gtk4],
1712         [Determines whether to use Gtk+ 4.0 vclplug on platforms where Gtk+ 4.0 is available.]))
1714 AC_ARG_ENABLE(atspi-tests,
1715     AS_HELP_STRING([--disable-atspi-tests],
1716         [Determines whether to enable AT-SPI2 tests for the GTK3 vclplug.]))
1718 AC_ARG_ENABLE(introspection,
1719     AS_HELP_STRING([--enable-introspection],
1720         [Generate files for GObject introspection.  Requires --enable-gtk3.  (Typically used by
1721          Linux distributions.)]))
1723 AC_ARG_ENABLE(split-app-modules,
1724     AS_HELP_STRING([--enable-split-app-modules],
1725         [Split file lists for app modules, e.g. base, calc.
1726          Has effect only with make distro-pack-install]),
1729 AC_ARG_ENABLE(split-opt-features,
1730     AS_HELP_STRING([--enable-split-opt-features],
1731         [Split file lists for some optional features, e.g. pyuno, testtool.
1732          Has effect only with make distro-pack-install]),
1735 libo_FUZZ_ARG_ENABLE(cairo-canvas,
1736     AS_HELP_STRING([--disable-cairo-canvas],
1737         [Determines whether to build the Cairo canvas on platforms where Cairo is available.]),
1740 libo_FUZZ_ARG_ENABLE(dbus,
1741     AS_HELP_STRING([--disable-dbus],
1742         [Determines whether to enable features that depend on dbus.
1743          e.g. Presentation mode screensaver control, bluetooth presentation control, automatic font install]),
1744 ,test "${enable_dbus+set}" = set || enable_dbus=yes)
1746 libo_FUZZ_ARG_ENABLE(sdremote,
1747     AS_HELP_STRING([--disable-sdremote],
1748         [Determines whether to enable Impress remote control (i.e. the server component).]),
1749 ,test "${enable_sdremote+set}" = set || enable_sdremote=yes)
1751 libo_FUZZ_ARG_ENABLE(sdremote-bluetooth,
1752     AS_HELP_STRING([--disable-sdremote-bluetooth],
1753         [Determines whether to build sdremote with bluetooth support.
1754          Requires dbus on Linux.]))
1756 libo_FUZZ_ARG_ENABLE(gio,
1757     AS_HELP_STRING([--disable-gio],
1758         [Determines whether to use the GIO support.]),
1759 ,test "${enable_gio+set}" = set || enable_gio=yes)
1761 AC_ARG_ENABLE(qt5,
1762     AS_HELP_STRING([--enable-qt5],
1763         [Determines whether to use Qt5 vclplug on platforms where Qt5 is
1764          available.]),
1767 AC_ARG_ENABLE(qt6,
1768     AS_HELP_STRING([--enable-qt6],
1769         [Determines whether to use Qt6 vclplug on platforms where Qt6 is
1770          available.]),
1773 AC_ARG_ENABLE(kf5,
1774     AS_HELP_STRING([--enable-kf5],
1775         [Determines whether to use Qt5/KF5 vclplug on platforms where Qt5 and
1776          KF5 are available.]),
1779 AC_ARG_ENABLE(kf6,
1780     AS_HELP_STRING([--enable-kf6],
1781         [Determines whether to use KF6 vclplug on platforms where Qt6 and
1782          KF6 are available.]),
1786 AC_ARG_ENABLE(gtk3_kde5,
1787     AS_HELP_STRING([--enable-gtk3-kde5],
1788         [Determines whether to use Gtk3 vclplug with KF5 file dialogs on
1789          platforms where Gtk3, Qt5 and Plasma is available.]),
1792 AC_ARG_ENABLE(gen,
1793     AS_HELP_STRING([--enable-gen],
1794         [To select the gen backend in case of --disable-dynamic-loading.
1795          Per default auto-enabled when X11 is used.]),
1796 ,test "${test_gen}" = no -o "${enable_gen+set}" = set || enable_gen=yes)
1798 AC_ARG_ENABLE(gui,
1799     AS_HELP_STRING([--disable-gui],
1800         [Disable use of X11 or Wayland to reduce dependencies (e.g. for building LibreOfficeKit).]),
1801 ,enable_gui=yes)
1803 libo_FUZZ_ARG_ENABLE(randr,
1804     AS_HELP_STRING([--disable-randr],
1805         [Disable RandR support in the vcl project.]),
1806 ,test "${enable_randr+set}" = set || enable_randr=yes)
1808 libo_FUZZ_ARG_ENABLE(gstreamer-1-0,
1809     AS_HELP_STRING([--disable-gstreamer-1-0],
1810         [Disable building with the gstreamer 1.0 avmedia backend.]),
1811 ,test "${enable_gstreamer_1_0+set}" = set || enable_gstreamer_1_0=yes)
1813 libo_FUZZ_ARG_ENABLE([eot],
1814     [AS_HELP_STRING([--enable-eot],
1815         [Enable support for Embedded OpenType fonts.])],
1816 ,test "${enable_eot+set}" = set || enable_eot=no)
1818 libo_FUZZ_ARG_ENABLE(cve-tests,
1819     AS_HELP_STRING([--disable-cve-tests],
1820         [Prevent CVE tests to be executed]),
1823 AC_ARG_ENABLE(build-opensymbol,
1824     AS_HELP_STRING([--enable-build-opensymbol],
1825         [Do not use the prebuilt opens___.ttf. Build it instead. This needs
1826          fontforge installed.]),
1829 AC_ARG_ENABLE(dependency-tracking,
1830     AS_HELP_STRING([--enable-dependency-tracking],
1831         [Do not reject slow dependency extractors.])[
1832   --disable-dependency-tracking
1833                           Disables generation of dependency information.
1834                           Speed up one-time builds.],
1837 AC_ARG_ENABLE(icecream,
1838     AS_HELP_STRING([--enable-icecream],
1839         [Use the 'icecream' distributed compiling tool to speedup the compilation.
1840          It defaults to /opt/icecream for the location of the icecream gcc/g++
1841          wrappers, you can override that using --with-gcc-home=/the/path switch.]),
1844 AC_ARG_ENABLE(ld,
1845     AS_HELP_STRING([--enable-ld=<linker>],
1846         [Use the specified linker. Both 'gold' and 'lld' linkers generally use less memory and link faster.
1847          By default tries to use the best linker possible, use --disable-ld to use the default linker.
1848          If <linker> contains any ':', the part before the first ':' is used as the value of
1849          -fuse-ld, while the part after the first ':' is used as the value of --ld-path (which is
1850          needed for Clang 12).]),
1853 libo_FUZZ_ARG_ENABLE(cups,
1854     AS_HELP_STRING([--disable-cups],
1855         [Do not build cups support.])
1858 AC_ARG_ENABLE(ccache,
1859     AS_HELP_STRING([--disable-ccache],
1860         [Do not try to use ccache automatically.
1861          By default we will try to detect if ccache is available; in that case if
1862          CC/CXX are not yet set, and --enable-icecream is not given, we
1863          attempt to use ccache. --disable-ccache disables ccache completely.
1864          Additionally ccache's depend mode is enabled if possible,
1865          use --enable-ccache=nodepend to enable ccache without depend mode.
1869 AC_ARG_ENABLE(z7-debug,
1870     AS_HELP_STRING([--enable-z7-debug],
1871         [Makes the MSVC compiler use -Z7 for debugging instead of the default -Zi. Using this option takes
1872          more disk spaces but allows to use ccache. Final PDB files are created even with this option enabled.
1873          Enabled by default if ccache is detected.]))
1875 libo_FUZZ_ARG_ENABLE(online-update,
1876     AS_HELP_STRING([--enable-online-update],
1877         [Enable the online update service that will check for new versions of
1878          LibreOffice. Disabled by default. Requires --with-privacy-policy-url to be set.
1879          If the value is "mar", the experimental Mozilla-like update will be
1880          enabled instead of the traditional update mechanism.]),
1883 AC_ARG_WITH(update-config,
1884     AS_HELP_STRING([--with-update-config=/tmp/update.ini],
1885                    [Path to the update config ini file]))
1887 libo_FUZZ_ARG_ENABLE(extension-update,
1888     AS_HELP_STRING([--disable-extension-update],
1889         [Disable possibility to update installed extensions.]),
1892 libo_FUZZ_ARG_ENABLE(release-build,
1893     AS_HELP_STRING([--enable-release-build],
1894         [Enable release build. Note that the "release build" choice is orthogonal to
1895          whether symbols are present, debug info is generated, or optimization
1896          is done.
1897          See https://wiki.documentfoundation.org/Development/DevBuild]),
1900 AC_ARG_ENABLE(windows-build-signing,
1901     AS_HELP_STRING([--enable-windows-build-signing],
1902         [Enable signing of windows binaries (*.exe, *.dll)]),
1905 AC_ARG_ENABLE(silent-msi,
1906     AS_HELP_STRING([--enable-silent-msi],
1907         [Enable MSI with LIMITUI=1 (silent install).]),
1910 AC_ARG_ENABLE(wix,
1911     AS_HELP_STRING([--enable-wix],
1912         [Build Windows installer using WiX.]),
1915 AC_ARG_ENABLE(macosx-code-signing,
1916     AS_HELP_STRING([--enable-macosx-code-signing=<identity>],
1917         [Sign executables, dylibs, frameworks and the app bundle. If you
1918          don't provide an identity the first suitable certificate
1919          in your keychain is used.]),
1922 AC_ARG_ENABLE(macosx-package-signing,
1923     AS_HELP_STRING([--enable-macosx-package-signing=<identity>],
1924         [Create a .pkg suitable for uploading to the Mac App Store and sign
1925          it. If you don't provide an identity the first suitable certificate
1926          in your keychain is used.]),
1929 AC_ARG_ENABLE(macosx-sandbox,
1930     AS_HELP_STRING([--enable-macosx-sandbox],
1931         [Make the app bundle run in a sandbox. Requires code signing.
1932          Is required by apps distributed in the Mac App Store, and implies
1933          adherence to App Store rules.]),
1936 AC_ARG_WITH(macosx-bundle-identifier,
1937     AS_HELP_STRING([--with-macosx-bundle-identifier=tld.mumble.orifice.TheOffice],
1938         [Define the macOS bundle identifier. Default is the somewhat weird
1939          org.libreoffice.script ("script", huh?).]),
1940 ,with_macosx_bundle_identifier=org.libreoffice.script)
1942 AC_ARG_WITH(macosx-provisioning-profile,
1943     AS_HELP_STRING([--with-macosx-provisioning-profile=/path/to/mac.provisionprofile],
1944         [Specify the path to a provisioning profile to use]),
1947 AC_ARG_WITH(product-name,
1948     AS_HELP_STRING([--with-product-name='My Own Office Suite'],
1949         [Define the product name. Default is AC_PACKAGE_NAME.]),
1950 ,with_product_name=$PRODUCTNAME)
1952 libo_FUZZ_ARG_ENABLE(community-flavor,
1953     AS_HELP_STRING([--disable-community-flavor],
1954         [Disable the Community branding.]),
1957 AC_ARG_WITH(package-version,
1958     AS_HELP_STRING([--with-package-version='3.1.4.5'],
1959         [Define the package version. Default is AC_PACKAGE_VERSION. Use only if you distribute an own build for macOS.]),
1962 libo_FUZZ_ARG_ENABLE(readonly-installset,
1963     AS_HELP_STRING([--enable-readonly-installset],
1964         [Prevents any attempts by LibreOffice to write into its installation. That means
1965          at least that no "system-wide" extensions can be added. Partly experimental work in
1966          progress, probably not fully implemented. Always enabled for macOS.]),
1969 libo_FUZZ_ARG_ENABLE(mariadb-sdbc,
1970     AS_HELP_STRING([--disable-mariadb-sdbc],
1971         [Disable the build of the MariaDB/MySQL-SDBC driver.])
1974 libo_FUZZ_ARG_ENABLE(postgresql-sdbc,
1975     AS_HELP_STRING([--disable-postgresql-sdbc],
1976         [Disable the build of the PostgreSQL-SDBC driver.])
1979 libo_FUZZ_ARG_ENABLE(lotuswordpro,
1980     AS_HELP_STRING([--disable-lotuswordpro],
1981         [Disable the build of the Lotus Word Pro filter.]),
1982 ,test "${enable_lotuswordpro+set}" = set || enable_lotuswordpro=yes)
1984 libo_FUZZ_ARG_ENABLE(firebird-sdbc,
1985     AS_HELP_STRING([--disable-firebird-sdbc],
1986         [Disable the build of the Firebird-SDBC driver if it doesn't compile for you.]),
1987 ,test "${enable_firebird_sdbc+set}" = set || enable_firebird_sdbc=yes)
1989 AC_ARG_ENABLE(bogus-pkg-config,
1990     AS_HELP_STRING([--enable-bogus-pkg-config],
1991         [MACOSX only: on MacOSX pkg-config can cause trouble. by default if one is found in the PATH, an error is issued. This flag turn that error into a warning.]),
1994 AC_ARG_ENABLE(openssl,
1995     AS_HELP_STRING([--disable-openssl],
1996         [Disable using libssl/libcrypto from OpenSSL. If disabled,
1997          components will use NSS. Work in progress,
1998          use only if you are hacking on it.]),
1999 ,enable_openssl=yes)
2001 libo_FUZZ_ARG_ENABLE(cipher-openssl-backend,
2002     AS_HELP_STRING([--enable-cipher-openssl-backend],
2003         [Enable using OpenSSL as the actual implementation of the rtl/cipher.h functionality.
2004          Requires --enable-openssl.]))
2006 AC_ARG_ENABLE(nss,
2007     AS_HELP_STRING([--disable-nss],
2008         [Disable using NSS. If disabled,
2009          components will use openssl. Work in progress,
2010          use only if you are hacking on it.]),
2011 ,enable_nss=yes)
2013 AC_ARG_ENABLE(library-bin-tar,
2014     AS_HELP_STRING([--enable-library-bin-tar],
2015         [Enable the building and reused of tarball of binary build for some 'external' libraries.
2016         Some libraries can save their build result in a tarball
2017         stored in TARFILE_LOCATION. That binary tarball is
2018         uniquely identified by the source tarball,
2019         the content of the config_host.mk file and the content
2020         of the top-level directory in core for that library
2021         If this option is enabled, then if such a tarfile exist, it will be untarred
2022         instead of the source tarfile, and the build step will be skipped for that
2023         library.
2024         If a proper tarfile does not exist, then the normal source-based
2025         build is done for that library and a proper binary tarfile is created
2026         for the next time.]),
2029 AC_ARG_ENABLE(dconf,
2030     AS_HELP_STRING([--disable-dconf],
2031         [Disable the dconf configuration backend (enabled by default where
2032          available).]))
2034 libo_FUZZ_ARG_ENABLE(formula-logger,
2035     AS_HELP_STRING(
2036         [--enable-formula-logger],
2037         [Enable formula logger for logging formula calculation flow in Calc.]
2038     )
2041 AC_ARG_ENABLE(ldap,
2042     AS_HELP_STRING([--disable-ldap],
2043         [Disable LDAP support.]),
2044 ,enable_ldap=yes)
2046 AC_ARG_ENABLE(opencl,
2047     AS_HELP_STRING([--disable-opencl],
2048         [Disable OpenCL support.]),
2049 ,enable_opencl=yes)
2051 libo_FUZZ_ARG_ENABLE(librelogo,
2052     AS_HELP_STRING([--disable-librelogo],
2053         [Do not build LibreLogo.]),
2054 ,enable_librelogo=yes)
2056 AC_ARG_ENABLE(wasm-strip,
2057     AS_HELP_STRING([--enable-wasm-strip],
2058         [Strip the static build like for WASM/emscripten platform.]),
2061 AC_ARG_WITH(main-module,
2062     AS_HELP_STRING([--with-main-module=<writer/calc>],
2063         [Specify which main module to build for wasm.
2064         Default value is 'writer'.]),
2067 AC_ARG_ENABLE(wasm-exceptions,
2068     AS_HELP_STRING([--enable-wasm-exceptions],
2069         [Build with native WASM exceptions (AKA -fwasm-exceptions),
2070         matter of fact, this is currently not finished by any implementation)
2071         (see https://webassembly.org/roadmap/ for the current state]),
2074 AC_ARG_ENABLE(xmlhelp,
2075     AS_HELP_STRING([--disable-xmlhelp],
2076         [Disable XML help support]),
2077 ,enable_xmlhelp=yes)
2079 AC_ARG_ENABLE(customtarget-components,
2080     AS_HELP_STRING([--enable-customtarget-components],
2081         [Generates the static UNO object constructor mapping from the build.]))
2083 dnl ===================================================================
2084 dnl Optional Packages (--with/without-)
2085 dnl ===================================================================
2087 AC_ARG_WITH(gcc-home,
2088     AS_HELP_STRING([--with-gcc-home],
2089         [Specify the location of gcc/g++ manually. This can be used in conjunction
2090          with --enable-icecream when icecream gcc/g++ wrappers are installed in a
2091          non-default path.]),
2094 AC_ARG_WITH(gnu-patch,
2095     AS_HELP_STRING([--with-gnu-patch],
2096         [Specify location of GNU patch on Solaris or FreeBSD.]),
2099 AC_ARG_WITH(build-platform-configure-options,
2100     AS_HELP_STRING([--with-build-platform-configure-options],
2101         [Specify options for the configure script run for the *build* platform in a cross-compilation]),
2104 AC_ARG_WITH(gnu-cp,
2105     AS_HELP_STRING([--with-gnu-cp],
2106         [Specify location of GNU cp on Solaris or FreeBSD.]),
2109 AC_ARG_WITH(external-tar,
2110     AS_HELP_STRING([--with-external-tar=<TARFILE_PATH>],
2111         [Specify an absolute path of where to find (and store) tarfiles.]),
2112     TARFILE_LOCATION=$withval ,
2115 AC_ARG_WITH(referenced-git,
2116     AS_HELP_STRING([--with-referenced-git=<OTHER_CHECKOUT_DIR>],
2117         [Specify another checkout directory to reference. This makes use of
2118                  git submodule update --reference, and saves a lot of diskspace
2119                  when having multiple trees side-by-side.]),
2120     GIT_REFERENCE_SRC=$withval ,
2123 AC_ARG_WITH(linked-git,
2124     AS_HELP_STRING([--with-linked-git=<submodules repo basedir>],
2125         [Specify a directory where the repositories of submodules are located.
2126          This uses a method similar to git-new-workdir to get submodules.]),
2127     GIT_LINK_SRC=$withval ,
2130 AC_ARG_WITH(galleries,
2131     AS_HELP_STRING([--with-galleries],
2132         [Specify how galleries should be built. It is possible either to
2133          build these internally from source ("build"),
2134          or to disable them ("no")]),
2137 AC_ARG_WITH(theme,
2138     AS_HELP_STRING([--with-theme="theme1 theme2..."],
2139         [Choose which themes to include. By default those themes with an '*' are included.
2140          Possible choices: *breeze, *breeze_dark, *breeze_dark_svg, *breeze_svg,
2141          *colibre, *colibre_svg, *colibre_dark, *colibre_dark_svg,
2142          *elementary, *elementary_svg,
2143          *karasa_jaga, *karasa_jaga_svg,
2144          *sifr, *sifr_dark, *sifr_dark_svg, *sifr_svg,
2145          *sukapura, *sukapura_dark, *sukapura_dark_svg, *sukapura_svg.]),
2148 libo_FUZZ_ARG_WITH(helppack-integration,
2149     AS_HELP_STRING([--without-helppack-integration],
2150         [It will not integrate the helppacks to the installer
2151          of the product. Please use this switch to use the online help
2152          or separate help packages.]),
2155 libo_FUZZ_ARG_WITH(fonts,
2156     AS_HELP_STRING([--without-fonts],
2157         [LibreOffice includes some third-party fonts to provide a reliable basis for
2158          help content, templates, samples, etc. When these fonts are already
2159          known to be available on the system then you should use this option.]),
2162 AC_ARG_WITH(epm,
2163     AS_HELP_STRING([--with-epm],
2164         [Decides which epm to use. Default is to use the one from the system if
2165          one is built. When either this is not there or you say =internal epm
2166          will be built.]),
2169 AC_ARG_WITH(package-format,
2170     AS_HELP_STRING([--with-package-format],
2171         [Specify package format(s) for LibreOffice installation sets. The
2172          implicit --without-package-format leads to no installation sets being
2173          generated. Possible values: archive, bsd, deb, dmg,
2174          installed, msi, pkg, and rpm.
2175          Example: --with-package-format='deb rpm']),
2178 AC_ARG_WITH(tls,
2179     AS_HELP_STRING([--with-tls],
2180         [Decides which TLS/SSL and cryptographic implementations to use for
2181          LibreOffice's code. Default is to use NSS although OpenSSL is also
2182          possible. Notice that selecting NSS restricts the usage of OpenSSL
2183          in LO's code but selecting OpenSSL doesn't restrict by now the
2184          usage of NSS in LO's code. Possible values: openssl, nss.
2185          Example: --with-tls="nss"]),
2188 AC_ARG_WITH(system-libs,
2189     AS_HELP_STRING([--with-system-libs],
2190         [Use libraries already on system -- enables all --with-system-* flags.]),
2193 AC_ARG_WITH(system-bzip2,
2194     AS_HELP_STRING([--with-system-bzip2],
2195         [Use bzip2 already on system. Used only when --enable-online-update=mar]),,
2196     [with_system_bzip2="$with_system_libs"])
2198 AC_ARG_WITH(system-headers,
2199     AS_HELP_STRING([--with-system-headers],
2200         [Use headers already on system -- enables all --with-system-* flags for
2201          external packages whose headers are the only entities used i.e.
2202          boost/odbc/sane-header(s).]),,
2203     [with_system_headers="$with_system_libs"])
2205 AC_ARG_WITH(system-jars,
2206     AS_HELP_STRING([--without-system-jars],
2207         [When building with --with-system-libs, also the needed jars are expected
2208          on the system. Use this to disable that]),,
2209     [with_system_jars="$with_system_libs"])
2211 AC_ARG_WITH(system-cairo,
2212     AS_HELP_STRING([--with-system-cairo],
2213         [Use cairo libraries already on system.  Happens automatically for
2214          (implicit) --enable-gtk3.]))
2216 AC_ARG_WITH(system-epoxy,
2217     AS_HELP_STRING([--with-system-epoxy],
2218         [Use epoxy libraries already on system.  Happens automatically for
2219          (implicit) --enable-gtk3.]),,
2220        [with_system_epoxy="$with_system_libs"])
2222 AC_ARG_WITH(myspell-dicts,
2223     AS_HELP_STRING([--with-myspell-dicts],
2224         [Adds myspell dictionaries to the LibreOffice installation set]),
2227 AC_ARG_WITH(system-dicts,
2228     AS_HELP_STRING([--without-system-dicts],
2229         [Do not use dictionaries from system paths.]),
2232 AC_ARG_WITH(external-dict-dir,
2233     AS_HELP_STRING([--with-external-dict-dir],
2234         [Specify external dictionary dir.]),
2237 AC_ARG_WITH(external-hyph-dir,
2238     AS_HELP_STRING([--with-external-hyph-dir],
2239         [Specify external hyphenation pattern dir.]),
2242 AC_ARG_WITH(external-thes-dir,
2243     AS_HELP_STRING([--with-external-thes-dir],
2244         [Specify external thesaurus dir.]),
2247 AC_ARG_WITH(system-zlib,
2248     AS_HELP_STRING([--with-system-zlib],
2249         [Use zlib already on system.]),,
2250     [with_system_zlib=auto])
2252 AC_ARG_WITH(system-jpeg,
2253     AS_HELP_STRING([--with-system-jpeg],
2254         [Use jpeg already on system.]),,
2255     [with_system_jpeg="$with_system_libs"])
2257 AC_ARG_WITH(system-expat,
2258     AS_HELP_STRING([--with-system-expat],
2259         [Use expat already on system.]),,
2260     [with_system_expat="$with_system_libs"])
2262 AC_ARG_WITH(system-libxml,
2263     AS_HELP_STRING([--with-system-libxml],
2264         [Use libxml/libxslt already on system.]),,
2265     [with_system_libxml=auto])
2267 AC_ARG_WITH(system-openldap,
2268     AS_HELP_STRING([--with-system-openldap],
2269         [Use the OpenLDAP LDAP SDK already on system.]),,
2270     [with_system_openldap="$with_system_libs"])
2272 libo_FUZZ_ARG_ENABLE(poppler,
2273     AS_HELP_STRING([--disable-poppler],
2274         [Disable building Poppler.])
2277 AC_ARG_WITH(system-poppler,
2278     AS_HELP_STRING([--with-system-poppler],
2279         [Use system poppler (only needed for PDF import).]),,
2280     [with_system_poppler="$with_system_libs"])
2282 AC_ARG_WITH(system-abseil,
2283     AS_HELP_STRING([--with-system-abseil],
2284         [Use the abseil libraries already on system.]),,
2285     [with_system_abseil="$with_system_libs"])
2287 AC_ARG_WITH(system-openjpeg,
2288     AS_HELP_STRING([--with-system-openjpeg],
2289         [Use the OpenJPEG library already on system.]),,
2290     [with_system_openjpeg="$with_system_libs"])
2292 libo_FUZZ_ARG_ENABLE(gpgmepp,
2293     AS_HELP_STRING([--disable-gpgmepp],
2294         [Disable building gpgmepp. Do not use in normal cases unless you want to fix potential problems it causes.])
2297 AC_ARG_WITH(system-gpgmepp,
2298     AS_HELP_STRING([--with-system-gpgmepp],
2299         [Use gpgmepp already on system]),,
2300     [with_system_gpgmepp="$with_system_libs"])
2302 AC_ARG_WITH(system-mariadb,
2303     AS_HELP_STRING([--with-system-mariadb],
2304         [Use MariaDB/MySQL libraries already on system.]),,
2305     [with_system_mariadb="$with_system_libs"])
2307 AC_ARG_ENABLE(bundle-mariadb,
2308     AS_HELP_STRING([--enable-bundle-mariadb],
2309         [When using MariaDB/MySQL libraries already on system, bundle them with the MariaDB Connector/LibreOffice.])
2312 AC_ARG_WITH(system-postgresql,
2313     AS_HELP_STRING([--with-system-postgresql],
2314         [Use PostgreSQL libraries already on system, for building the PostgreSQL-SDBC
2315          driver. If pg_config is not in PATH, use PGCONFIG to point to it.]),,
2316     [with_system_postgresql="$with_system_libs"])
2318 AC_ARG_WITH(libpq-path,
2319     AS_HELP_STRING([--with-libpq-path=<absolute path to your libpq installation>],
2320         [Use this PostgreSQL C interface (libpq) installation for building
2321          the PostgreSQL-SDBC extension.]),
2324 AC_ARG_WITH(system-firebird,
2325     AS_HELP_STRING([--with-system-firebird],
2326         [Use Firebird libraries already on system, for building the Firebird-SDBC
2327          driver. If fb_config is not in PATH, use FBCONFIG to point to it.]),,
2328     [with_system_firebird="$with_system_libs"])
2330 AC_ARG_WITH(system-libtommath,
2331             AS_HELP_STRING([--with-system-libtommath],
2332                            [Use libtommath already on system]),,
2333             [with_system_libtommath="$with_system_libs"])
2335 AC_ARG_WITH(system-hsqldb,
2336     AS_HELP_STRING([--with-system-hsqldb],
2337         [Use hsqldb already on system.]))
2339 AC_ARG_WITH(hsqldb-jar,
2340     AS_HELP_STRING([--with-hsqldb-jar=JARFILE],
2341         [Specify path to jarfile manually.]),
2342     HSQLDB_JAR=$withval)
2344 libo_FUZZ_ARG_ENABLE(scripting-beanshell,
2345     AS_HELP_STRING([--disable-scripting-beanshell],
2346         [Disable support for scripts in BeanShell.]),
2350 AC_ARG_WITH(system-beanshell,
2351     AS_HELP_STRING([--with-system-beanshell],
2352         [Use beanshell already on system.]),,
2353     [with_system_beanshell="$with_system_jars"])
2355 AC_ARG_WITH(beanshell-jar,
2356     AS_HELP_STRING([--with-beanshell-jar=JARFILE],
2357         [Specify path to jarfile manually.]),
2358     BSH_JAR=$withval)
2360 libo_FUZZ_ARG_ENABLE(scripting-javascript,
2361     AS_HELP_STRING([--disable-scripting-javascript],
2362         [Disable support for scripts in JavaScript.]),
2366 AC_ARG_WITH(system-rhino,
2367     AS_HELP_STRING([--with-system-rhino],
2368         [Use rhino already on system.]),,)
2369 #    [with_system_rhino="$with_system_jars"])
2370 # Above is not used as we have different debug interface
2371 # patched into internal rhino. This code needs to be fixed
2372 # before we can enable it by default.
2374 AC_ARG_WITH(rhino-jar,
2375     AS_HELP_STRING([--with-rhino-jar=JARFILE],
2376         [Specify path to jarfile manually.]),
2377     RHINO_JAR=$withval)
2379 AC_ARG_WITH(system-jfreereport,
2380     AS_HELP_STRING([--with-system-jfreereport],
2381         [Use JFreeReport already on system.]),,
2382     [with_system_jfreereport="$with_system_jars"])
2384 AC_ARG_WITH(sac-jar,
2385     AS_HELP_STRING([--with-sac-jar=JARFILE],
2386         [Specify path to jarfile manually.]),
2387     SAC_JAR=$withval)
2389 AC_ARG_WITH(libxml-jar,
2390     AS_HELP_STRING([--with-libxml-jar=JARFILE],
2391         [Specify path to jarfile manually.]),
2392     LIBXML_JAR=$withval)
2394 AC_ARG_WITH(flute-jar,
2395     AS_HELP_STRING([--with-flute-jar=JARFILE],
2396         [Specify path to jarfile manually.]),
2397     FLUTE_JAR=$withval)
2399 AC_ARG_WITH(jfreereport-jar,
2400     AS_HELP_STRING([--with-jfreereport-jar=JARFILE],
2401         [Specify path to jarfile manually.]),
2402     JFREEREPORT_JAR=$withval)
2404 AC_ARG_WITH(liblayout-jar,
2405     AS_HELP_STRING([--with-liblayout-jar=JARFILE],
2406         [Specify path to jarfile manually.]),
2407     LIBLAYOUT_JAR=$withval)
2409 AC_ARG_WITH(libloader-jar,
2410     AS_HELP_STRING([--with-libloader-jar=JARFILE],
2411         [Specify path to jarfile manually.]),
2412     LIBLOADER_JAR=$withval)
2414 AC_ARG_WITH(libformula-jar,
2415     AS_HELP_STRING([--with-libformula-jar=JARFILE],
2416         [Specify path to jarfile manually.]),
2417     LIBFORMULA_JAR=$withval)
2419 AC_ARG_WITH(librepository-jar,
2420     AS_HELP_STRING([--with-librepository-jar=JARFILE],
2421         [Specify path to jarfile manually.]),
2422     LIBREPOSITORY_JAR=$withval)
2424 AC_ARG_WITH(libfonts-jar,
2425     AS_HELP_STRING([--with-libfonts-jar=JARFILE],
2426         [Specify path to jarfile manually.]),
2427     LIBFONTS_JAR=$withval)
2429 AC_ARG_WITH(libserializer-jar,
2430     AS_HELP_STRING([--with-libserializer-jar=JARFILE],
2431         [Specify path to jarfile manually.]),
2432     LIBSERIALIZER_JAR=$withval)
2434 AC_ARG_WITH(libbase-jar,
2435     AS_HELP_STRING([--with-libbase-jar=JARFILE],
2436         [Specify path to jarfile manually.]),
2437     LIBBASE_JAR=$withval)
2439 AC_ARG_WITH(system-odbc,
2440     AS_HELP_STRING([--with-system-odbc],
2441         [Use the odbc headers already on system.]),,
2442     [with_system_odbc="auto"])
2444 AC_ARG_WITH(system-sane,
2445     AS_HELP_STRING([--with-system-sane],
2446         [Use sane.h already on system.]),,
2447     [with_system_sane="$with_system_headers"])
2449 AC_ARG_WITH(system-bluez,
2450     AS_HELP_STRING([--with-system-bluez],
2451         [Use bluetooth.h already on system.]),,
2452     [with_system_bluez="$with_system_headers"])
2454 AC_ARG_WITH(system-boost,
2455     AS_HELP_STRING([--with-system-boost],
2456         [Use boost already on system.]),,
2457     [with_system_boost="$with_system_headers"])
2459 AC_ARG_WITH(system-dragonbox,
2460     AS_HELP_STRING([--with-system-dragonbox],
2461         [Use dragonbox already on system.]),,
2462     [with_system_dragonbox="$with_system_headers"])
2464 AC_ARG_WITH(system-frozen,
2465     AS_HELP_STRING([--with-system-frozen],
2466         [Use frozen already on system.]),,
2467     [with_system_frozen="$with_system_headers"])
2469 AC_ARG_WITH(system-libfixmath,
2470     AS_HELP_STRING([--with-system-libfixmath],
2471         [Use libfixmath already on system.]),,
2472     [with_system_libfixmath="$with_system_libs"])
2474 AC_ARG_WITH(system-glm,
2475     AS_HELP_STRING([--with-system-glm],
2476         [Use glm already on system.]),,
2477     [with_system_glm="$with_system_headers"])
2479 AC_ARG_WITH(system-hunspell,
2480     AS_HELP_STRING([--with-system-hunspell],
2481         [Use libhunspell already on system.]),,
2482     [with_system_hunspell="$with_system_libs"])
2484 libo_FUZZ_ARG_ENABLE(cairo-rgba,
2485     AS_HELP_STRING([--enable-cairo-rgba],
2486         [Use RGBA order, instead of default BRGA. Not possible with --with-system-cairo]))
2488 libo_FUZZ_ARG_ENABLE(zxing,
2489     AS_HELP_STRING([--disable-zxing],
2490        [Disable use of zxing external library.]))
2492 AC_ARG_WITH(system-zxing,
2493     AS_HELP_STRING([--with-system-zxing],
2494         [Use libzxing already on system.]),,
2495     [with_system_zxing="$with_system_libs"])
2497 AC_ARG_WITH(system-box2d,
2498     AS_HELP_STRING([--with-system-box2d],
2499         [Use box2d already on system.]),,
2500     [with_system_box2d="$with_system_libs"])
2502 AC_ARG_WITH(system-mythes,
2503     AS_HELP_STRING([--with-system-mythes],
2504         [Use mythes already on system.]),,
2505     [with_system_mythes="$with_system_libs"])
2507 AC_ARG_WITH(system-altlinuxhyph,
2508     AS_HELP_STRING([--with-system-altlinuxhyph],
2509         [Use ALTLinuxhyph already on system.]),,
2510     [with_system_altlinuxhyph="$with_system_libs"])
2512 AC_ARG_WITH(system-lpsolve,
2513     AS_HELP_STRING([--with-system-lpsolve],
2514         [Use lpsolve already on system.]),,
2515     [with_system_lpsolve="$with_system_libs"])
2517 AC_ARG_WITH(system-coinmp,
2518     AS_HELP_STRING([--with-system-coinmp],
2519         [Use CoinMP already on system.]),,
2520     [with_system_coinmp="$with_system_libs"])
2522 AC_ARG_WITH(system-liblangtag,
2523     AS_HELP_STRING([--with-system-liblangtag],
2524         [Use liblangtag library already on system.]),,
2525     [with_system_liblangtag="$with_system_libs"])
2527 AC_ARG_WITH(system-lockfile,
2528     AS_HELP_STRING([--with-system-lockfile[=file]],
2529         [Detect a system lockfile program or use the \$file argument.]))
2531 AC_ARG_WITH(webdav,
2532     AS_HELP_STRING([--without-webdav],
2533         [Disable WebDAV support in the UCB.]))
2535 AC_ARG_WITH(linker-hash-style,
2536     AS_HELP_STRING([--with-linker-hash-style],
2537         [Use linker with --hash-style=<style> when linking shared objects.
2538          Possible values: "sysv", "gnu", "both". The default value is "gnu"
2539          if supported on the build system, and "sysv" otherwise.]))
2541 AC_ARG_WITH(jdk-home,
2542     AS_HELP_STRING([--with-jdk-home=<absolute path to JDK home>],
2543         [If you have installed JDK 9 or later on your system please supply the
2544          path here. Note that this is not the location of the java command but the
2545          location of the entire distribution. In case of cross-compiling, this
2546          is the JDK of the host os. Use --with-build-platform-configure-options
2547          to point to a different build platform JDK.]),
2550 AC_ARG_WITH(help,
2551     AS_HELP_STRING([--with-help],
2552         [Enable the build of help. There is a special parameter "common" that
2553          can be used to bundle only the common part, .e.g help-specific icons.
2554          This is useful when you build the helpcontent separately.])
2555     [
2556                           Usage:     --with-help    build the old local help
2557                                  --without-help     no local help (default)
2558                                  --with-help=html   build the new HTML local help
2559                                  --with-help=online build the new HTML online help
2560     ],
2563 AC_ARG_WITH(omindex,
2564    AS_HELP_STRING([--with-omindex],
2565         [Enable the support of xapian-omega index for online help.])
2566    [
2567                          Usage: --with-omindex=server prepare the pages for omindex
2568                                 but let xapian-omega be built in server.
2569                                 --with-omindex=noxap do not prepare online pages
2570                                 for xapian-omega
2571   ],
2574 libo_FUZZ_ARG_WITH(java,
2575     AS_HELP_STRING([--with-java=<java command>],
2576         [Specify the name of the Java interpreter command. Typically "java"
2577          which is the default.
2579          To build without support for Java components, applets, accessibility
2580          or the XML filters written in Java, use --without-java or --with-java=no.]),
2581     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ],
2582     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ]
2585 AC_ARG_WITH(jvm-path,
2586     AS_HELP_STRING([--with-jvm-path=<absolute path to parent of jvm home>],
2587         [Use a specific JVM search path at runtime.
2588          e.g. use --with-jvm-path=/usr/lib/ to find JRE/JDK in /usr/lib/jvm/]),
2591 AC_ARG_WITH(ant-home,
2592     AS_HELP_STRING([--with-ant-home=<absolute path to Ant home>],
2593         [If you have installed Apache Ant on your system, please supply the path here.
2594          Note that this is not the location of the Ant binary but the location
2595          of the entire distribution.]),
2598 AC_ARG_WITH(symbol-config,
2599     AS_HELP_STRING([--with-symbol-config],
2600         [Configuration for the crashreport symbol upload]),
2601         [],
2602         [with_symbol_config=no])
2604 AC_ARG_WITH(export-validation,
2605     AS_HELP_STRING([--without-export-validation],
2606         [Disable validating OOXML and ODF files as exported from in-tree tests.]),
2607 ,with_export_validation=auto)
2609 AC_ARG_WITH(bffvalidator,
2610     AS_HELP_STRING([--with-bffvalidator=<absolute path to BFFValidator>],
2611         [Enables export validation for Microsoft Binary formats (doc, xls, ppt).
2612          Requires installed Microsoft Office Binary File Format Validator.
2613          Note: export-validation (--with-export-validation) is required to be turned on.
2614          See https://web.archive.org/web/20200804155745/https://www.microsoft.com/en-us/download/details.aspx?id=26794]),
2615 ,with_bffvalidator=no)
2617 libo_FUZZ_ARG_WITH(junit,
2618     AS_HELP_STRING([--with-junit=<absolute path to JUnit 4 jar>],
2619         [Specifies the JUnit 4 jar file to use for JUnit-based tests.
2620          --without-junit disables those tests. Not relevant in the --without-java case.]),
2621 ,with_junit=yes)
2623 AC_ARG_WITH(hamcrest,
2624     AS_HELP_STRING([--with-hamcrest=<absolute path to hamcrest jar>],
2625         [Specifies the hamcrest jar file to use for JUnit-based tests.
2626          --without-junit disables those tests. Not relevant in the --without-java case.]),
2627 ,with_hamcrest=yes)
2629 AC_ARG_WITH(perl-home,
2630     AS_HELP_STRING([--with-perl-home=<abs. path to Perl 5 home>],
2631         [If you have installed Perl 5 Distribution, on your system, please
2632          supply the path here. Note that this is not the location of the Perl
2633          binary but the location of the entire distribution.]),
2636 libo_FUZZ_ARG_WITH(doxygen,
2637     AS_HELP_STRING(
2638         [--with-doxygen=<absolute path to doxygen executable>],
2639         [Specifies the doxygen executable to use when generating ODK C/C++
2640          documentation. --without-doxygen disables generation of ODK C/C++
2641          documentation. Not relevant in the --disable-odk case.]),
2642 ,with_doxygen=yes)
2644 AC_ARG_WITH(visual-studio,
2645     AS_HELP_STRING([--with-visual-studio=<2019/2022/2022preview>],
2646         [Specify which Visual Studio version to use in case several are
2647          installed. Currently 2019 (default) and 2022 are supported.]),
2650 AC_ARG_WITH(windows-sdk,
2651     AS_HELP_STRING([--with-windows-sdk=<8.0(A)/8.1(A)/10.0>],
2652         [Specify which Windows SDK, or "Windows Kit", version to use
2653          in case the one that came with the selected Visual Studio
2654          is not what you want for some reason. Note that not all compiler/SDK
2655          combinations are supported. The intent is that this option should not
2656          be needed.]),
2659 AC_ARG_WITH(lang,
2660     AS_HELP_STRING([--with-lang="es sw tu cs sk"],
2661         [Use this option to build LibreOffice with additional UI language support.
2662          English (US) is always included by default.
2663          Separate multiple languages with space.
2664          For all languages, use --with-lang=ALL.]),
2667 AC_ARG_WITH(locales,
2668     AS_HELP_STRING([--with-locales="en es pt fr zh kr ja"],
2669         [Use this option to limit the locale information built in.
2670          Separate multiple locales with space.
2671          Very experimental and might well break stuff.
2672          Just a desperate measure to shrink code and data size.
2673          By default all the locales available is included.
2674          Just works with --disable-dynloading. Defaults to "ALL".
2675          This option is completely unrelated to --with-lang.])
2676     [
2677                           Affects also our character encoding conversion
2678                           tables for encodings mainly targeted for a
2679                           particular locale, like EUC-CN and EUC-TW for
2680                           zh, ISO-2022-JP for ja.
2682                           Affects also our add-on break iterator data for
2683                           some languages.
2685                           For the default, all locales, don't use this switch at all.
2686                           Specifying just the language part of a locale means all matching
2687                           locales will be included.
2688     ],
2691 # Kerberos and GSSAPI used only by PostgreSQL as of LibO 3.5
2692 libo_FUZZ_ARG_WITH(krb5,
2693     AS_HELP_STRING([--with-krb5],
2694         [Enable MIT Kerberos 5 support in modules that support it.
2695          By default automatically enabled on platforms
2696          where a good system Kerberos 5 is available.]),
2699 libo_FUZZ_ARG_WITH(gssapi,
2700     AS_HELP_STRING([--with-gssapi],
2701         [Enable GSSAPI support in modules that support it.
2702          By default automatically enabled on platforms
2703          where a good system GSSAPI is available.]),
2706 libo_FUZZ_ARG_WITH(lxml,
2707     AS_HELP_STRING([--without-lxml],
2708         [gla11y will use python lxml when available, potentially building a local copy if necessary.
2709          --without-lxml tells it to not use python lxml at all, which means that gla11y will only
2710          report widget classes and ids.]),
2713 libo_FUZZ_ARG_WITH(latest-c++,
2714     AS_HELP_STRING([--with-latest-c++],
2715         [Try to enable the latest features of the C++ compiler, even if they are not yet part of a
2716          published standard.  This option is ignored when CXXFLAGS_CXX11 is set explicitly.]),,
2717         [with_latest_c__=no])
2719 AC_ARG_WITH(gtk3-build,
2720     AS_HELP_STRING([--with-gtk3-build=<absolute path to GTK3 build>],
2721         [(Windows-only) In order to build GtkTiledViewer on Windows, pass the path
2722          to a GTK3 build, like '--with-gtk3-build=C:/gtk-build/gtk/x64/release'.]))
2724 dnl ===================================================================
2725 dnl Branding
2726 dnl ===================================================================
2728 AC_ARG_WITH(branding,
2729     AS_HELP_STRING([--with-branding=/path/to/images],
2730         [Use given path to retrieve branding images set.])
2731     [
2732                           Search for intro.png about.svg and logo.svg.
2733                           If any is missing, default ones will be used instead.
2735                           Search also progress.conf for progress
2736                           settings on intro screen :
2738                           PROGRESSBARCOLOR="255,255,255" Set color of
2739                           progress bar. Comma separated RGB decimal values.
2740                           PROGRESSSIZE="407,6" Set size of progress bar.
2741                           Comma separated decimal values (width, height).
2742                           PROGRESSPOSITION="61,317" Set position of progress
2743                           bar from left,top. Comma separated decimal values.
2744                           PROGRESSFRAMECOLOR="20,136,3" Set color of progress
2745                           bar frame. Comma separated RGB decimal values.
2746                           PROGRESSTEXTCOLOR="0,0,0" Set color of progress
2747                           bar text. Comma separated RGB decimal values.
2748                           PROGRESSTEXTBASELINE="287" Set vertical position of
2749                           progress bar text from top. Decimal value.
2751                           Default values will be used if not found.
2752     ],
2756 AC_ARG_WITH(extra-buildid,
2757     AS_HELP_STRING([--with-extra-buildid="Tinderbox: Win-x86@6, Branch:master, Date:2012-11-26_00.29.34"],
2758         [Show addition build identification in about dialog.]),
2762 AC_ARG_WITH(vendor,
2763     AS_HELP_STRING([--with-vendor="John the Builder"],
2764         [Set vendor of the build.]),
2767 AC_ARG_WITH(privacy-policy-url,
2768     AS_HELP_STRING([--with-privacy-policy-url="https://yourdomain/privacy-policy"],
2769         [The URL to your privacy policy (needed when
2770          enabling online-update or crashreporting via breakpad)]),
2771         [if test "x$with_privacy_policy_url" = "xyes"; then
2772             AC_MSG_FAILURE([you need to specify an argument when using --with-privacy-policy-url])
2773          elif test "x$with_privacy_policy_url" = "xno"; then
2774             with_privacy_policy_url="undefined"
2775          fi]
2776 ,[with_privacy_policy_url="undefined"])
2778 AC_ARG_WITH(android-package-name,
2779     AS_HELP_STRING([--with-android-package-name="org.libreoffice"],
2780         [Set Android package name of the build.]),
2783 AC_ARG_WITH(compat-oowrappers,
2784     AS_HELP_STRING([--with-compat-oowrappers],
2785         [Install oo* wrappers in parallel with
2786          lo* ones to keep backward compatibility.
2787          Has effect only with make distro-pack-install]),
2790 AC_ARG_WITH(os-version,
2791     AS_HELP_STRING([--with-os-version=<OSVERSION>],
2792         [For FreeBSD users, use this option to override the detected OSVERSION.]),
2795 AC_ARG_WITH(parallelism,
2796     AS_HELP_STRING([--with-parallelism],
2797         [Number of jobs to run simultaneously during build. Parallel builds can
2798         save a lot of time on multi-cpu machines. Defaults to the number of
2799         CPUs on the machine, unless you configure --enable-icecream - then to
2800         40.]),
2803 AC_ARG_WITH(all-tarballs,
2804     AS_HELP_STRING([--with-all-tarballs],
2805         [Download all external tarballs unconditionally]))
2807 AC_ARG_WITH(gdrive-client-id,
2808     AS_HELP_STRING([--with-gdrive-client-id],
2809         [Provides the client id of the application for OAuth2 authentication
2810         on Google Drive. If either this or --with-gdrive-client-secret is
2811         empty, the feature will be disabled]),
2814 AC_ARG_WITH(gdrive-client-secret,
2815     AS_HELP_STRING([--with-gdrive-client-secret],
2816         [Provides the client secret of the application for OAuth2
2817         authentication on Google Drive. If either this or
2818         --with-gdrive-client-id is empty, the feature will be disabled]),
2821 AC_ARG_WITH(alfresco-cloud-client-id,
2822     AS_HELP_STRING([--with-alfresco-cloud-client-id],
2823         [Provides the client id of the application for OAuth2 authentication
2824         on Alfresco Cloud. If either this or --with-alfresco-cloud-client-secret is
2825         empty, the feature will be disabled]),
2828 AC_ARG_WITH(alfresco-cloud-client-secret,
2829     AS_HELP_STRING([--with-alfresco-cloud-client-secret],
2830         [Provides the client secret of the application for OAuth2
2831         authentication on Alfresco Cloud. If either this or
2832         --with-alfresco-cloud-client-id is empty, the feature will be disabled]),
2835 AC_ARG_WITH(onedrive-client-id,
2836     AS_HELP_STRING([--with-onedrive-client-id],
2837         [Provides the client id of the application for OAuth2 authentication
2838         on OneDrive. If either this or --with-onedrive-client-secret is
2839         empty, the feature will be disabled]),
2842 AC_ARG_WITH(onedrive-client-secret,
2843     AS_HELP_STRING([--with-onedrive-client-secret],
2844         [Provides the client secret of the application for OAuth2
2845         authentication on OneDrive. If either this or
2846         --with-onedrive-client-id is empty, the feature will be disabled]),
2849 dnl Check for coredumpctl support to present information about crashing test processes:
2850 AC_ARG_WITH(coredumpctl,
2851     AS_HELP_STRING([--with-coredumpctl],
2852         [Use coredumpctl (together with systemd-run) to retrieve core dumps of crashing test
2853         processes.]))
2855 dnl ===================================================================
2856 dnl Do we want to use pre-build binary tarball for recompile
2857 dnl ===================================================================
2859 if test "$enable_library_bin_tar" = "yes" ; then
2860     USE_LIBRARY_BIN_TAR=TRUE
2861 else
2862     USE_LIBRARY_BIN_TAR=
2864 AC_SUBST(USE_LIBRARY_BIN_TAR)
2866 dnl ===================================================================
2867 dnl Test whether build target is Release Build
2868 dnl ===================================================================
2869 AC_MSG_CHECKING([whether build target is Release Build])
2870 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
2871     AC_MSG_RESULT([no])
2872     ENABLE_RELEASE_BUILD=
2873     dnl Pu the value on one line as make (at least on macOS) seems to ignore
2874     dnl the newlines and then complains about spaces.
2875     GET_TASK_ALLOW_ENTITLEMENT='<!-- We want to be able to debug a hardened process when not building for release --><key>com.apple.security.get-task-allow</key><true/>'
2876 else
2877     AC_MSG_RESULT([yes])
2878     ENABLE_RELEASE_BUILD=TRUE
2879     GET_TASK_ALLOW_ENTITLEMENT=
2881 AC_SUBST(ENABLE_RELEASE_BUILD)
2882 AC_SUBST(GET_TASK_ALLOW_ENTITLEMENT)
2884 AC_MSG_CHECKING([whether to build a Community flavor])
2885 if test -z "$enable_community_flavor" -o "$enable_community_flavor" = "yes"; then
2886     AC_DEFINE(HAVE_FEATURE_COMMUNITY_FLAVOR)
2887     AC_MSG_RESULT([yes])
2888 else
2889     AC_MSG_RESULT([no])
2892 dnl ===================================================================
2893 dnl Test whether to sign Windows Build
2894 dnl ===================================================================
2895 AC_MSG_CHECKING([whether to sign windows build])
2896 if test "$enable_windows_build_signing" = "yes" -a "$_os" = "WINNT"; then
2897     AC_MSG_RESULT([yes])
2898     WINDOWS_BUILD_SIGNING="TRUE"
2899 else
2900     AC_MSG_RESULT([no])
2901     WINDOWS_BUILD_SIGNING="FALSE"
2903 AC_SUBST(WINDOWS_BUILD_SIGNING)
2905 dnl ===================================================================
2906 dnl MacOSX build and runtime environment options
2907 dnl ===================================================================
2909 AC_ARG_WITH(macosx-version-min-required,
2910     AS_HELP_STRING([--with-macosx-version-min-required=<version>],
2911         [set the minimum OS version needed to run the built LibreOffice])
2912     [
2913                           e. g.: --with-macosx-version-min-required=10.15
2914     ],
2917 dnl ===================================================================
2918 dnl Check for incompatible options set by fuzzing, and reset those
2919 dnl automatically to working combinations
2920 dnl ===================================================================
2922 if test "$libo_fuzzed_enable_dbus" = yes -a "$libo_fuzzed_enable_avahi" -a \
2923         "$enable_dbus" != "$enable_avahi"; then
2924     AC_MSG_NOTICE([Resetting --enable-avahi=$enable_dbus])
2925     enable_avahi=$enable_dbus
2928 add_lopath_after ()
2930     if ! echo "$LO_PATH" | $EGREP -q "(^|${P_SEP})$1($|${P_SEP})"; then
2931         LO_PATH="${LO_PATH:+$LO_PATH$P_SEP}$1"
2932     fi
2935 add_lopath_before ()
2937     local IFS=${P_SEP}
2938     local path_cleanup
2939     local dir
2940     for dir in $LO_PATH ; do
2941         if test "$dir" != "$1" ; then
2942             path_cleanup=${path_cleanup:+$path_cleanup$P_SEP}$dir
2943         fi
2944     done
2945     LO_PATH="$1${path_cleanup:+$P_SEP$path_cleanup}"
2948 dnl ===================================================================
2949 dnl check for required programs (grep, awk, sed, bash)
2950 dnl ===================================================================
2952 pathmunge ()
2954     local new_path
2955     if test -n "$1"; then
2956         if test "$build_os" = "cygwin"; then
2957             if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
2958                 PathFormat "$1"
2959                 new_path=`cygpath -sm "$formatted_path"`
2960             else
2961                 PathFormat "$1"
2962                 new_path=`cygpath -u "$formatted_path"`
2963             fi
2964         else
2965             new_path="$1"
2966         fi
2967         if test "$2" = "after"; then
2968             add_lopath_after "$new_path"
2969         else
2970             add_lopath_before "$new_path"
2971         fi
2972     fi
2975 AC_PROG_AWK
2976 AC_PATH_PROG( AWK, $AWK)
2977 if test -z "$AWK"; then
2978     AC_MSG_ERROR([install awk to run this script])
2981 AC_PATH_PROG(BASH, bash)
2982 if test -z "$BASH"; then
2983     AC_MSG_ERROR([bash not found in \$PATH])
2985 AC_SUBST(BASH)
2987 # prefer parallel compression tools, if available
2988 AC_PATH_PROG(COMPRESSIONTOOL, pigz)
2989 if test -z "$COMPRESSIONTOOL"; then
2990     AC_PATH_PROG(COMPRESSIONTOOL, gzip)
2991     if test -z "$COMPRESSIONTOOL"; then
2992         AC_MSG_ERROR([gzip not found in \$PATH])
2993     fi
2995 AC_SUBST(COMPRESSIONTOOL)
2997 AC_MSG_CHECKING([for GNU or BSD tar])
2998 for a in $GNUTAR gtar gnutar tar bsdtar /usr/sfw/bin/gtar; do
2999     $a --version 2> /dev/null | grep -E "GNU|bsdtar"  2>&1 > /dev/null
3000     if test $? -eq 0;  then
3001         GNUTAR=$a
3002         break
3003     fi
3004 done
3005 AC_MSG_RESULT($GNUTAR)
3006 if test -z "$GNUTAR"; then
3007     AC_MSG_ERROR([not found. install GNU or BSD tar.])
3009 AC_SUBST(GNUTAR)
3011 AC_MSG_CHECKING([for tar's option to strip components])
3012 $GNUTAR --help 2> /dev/null | grep -E "bsdtar|strip-components" 2>&1 >/dev/null
3013 if test $? -eq 0; then
3014     STRIP_COMPONENTS="--strip-components"
3015 else
3016     $GNUTAR --help 2> /dev/null | grep -E "strip-path" 2>&1 >/dev/null
3017     if test $? -eq 0; then
3018         STRIP_COMPONENTS="--strip-path"
3019     else
3020         STRIP_COMPONENTS="unsupported"
3021     fi
3023 AC_MSG_RESULT($STRIP_COMPONENTS)
3024 if test x$STRIP_COMPONENTS = xunsupported; then
3025     AC_MSG_ERROR([you need a tar that is able to strip components.])
3027 AC_SUBST(STRIP_COMPONENTS)
3029 dnl It is useful to have a BUILD_TYPE keyword to distinguish "normal"
3030 dnl desktop OSes from "mobile" ones.
3032 dnl We assume that a non-DESKTOP build type is also a non-NATIVE one.
3033 dnl In other words, that when building for an OS that is not a
3034 dnl "desktop" one but a "mobile" one, we are always cross-compiling.
3036 dnl Note the direction of the implication; there is no assumption that
3037 dnl cross-compiling would imply a non-desktop OS.
3039 if test $_os != iOS -a $_os != Android -a "$enable_fuzzers" != "yes"; then
3040     BUILD_TYPE="$BUILD_TYPE DESKTOP"
3041     AC_DEFINE(HAVE_FEATURE_DESKTOP)
3042     if test "$_os" != Emscripten; then
3043         AC_DEFINE(HAVE_FEATURE_MULTIUSER_ENVIRONMENT)
3044     fi
3047 # explicitly doesn't include enable_gtk3=no and enable_qt5=yes, so it should
3048 # also work with the default gtk3 plugin.
3049 if test "$enable_wasm_strip" = "yes"; then
3050     enable_avmedia=no
3051     enable_libcmis=no
3052     enable_coinmp=no
3053     enable_cups=no
3054     test "$_os" = Emscripten && enable_curl=no
3055     enable_database_connectivity=no
3056     enable_dbus=no
3057     enable_dconf=no
3058     test "${enable_dynamic_loading+set}" = set -o "$_os" != Emscripten || enable_dynamic_loading=no
3059     enable_extension_integration=no
3060     enable_extensions=no
3061     enable_extension_update=no
3062     enable_gio=no
3063     enable_gpgmepp=no
3064     enable_ldap=no
3065     enable_lotuswordpro=no
3066     enable_lpsolve=no
3067     enable_nss=no
3068     enable_odk=no
3069     enable_online_update=no
3070     enable_opencl=no
3071     enable_pdfimport=no
3072     enable_randr=no
3073     enable_report_builder=no
3074     enable_scripting=no
3075     enable_sdremote_bluetooth=no
3076     enable_skia=no
3077     enable_xmlhelp=no
3078     enable_zxing=no
3079     test_libepubgen=no
3080     test_libcdr=no
3081     test_libcmis=no
3082     test_libetonyek=no
3083     test_libfreehand=no
3084     test_libmspub=no
3085     test_libpagemaker=no
3086     test_libqxp=no
3087     test_libvisio=no
3088     test_libzmf=no
3089     test_webdav=no
3090     with_galleries=no
3091     with_webdav=no
3092     with_x=no
3094     test "${with_fonts+set}" = set || with_fonts=yes
3095     test "${with_locales+set}" = set || with_locales=en
3097     AC_DEFINE(ENABLE_WASM_STRIP_ACCESSIBILITY)
3098     AC_DEFINE(ENABLE_WASM_STRIP_WRITER)
3099     AC_DEFINE(ENABLE_WASM_STRIP_CALC)
3100     AC_DEFINE(ENABLE_WASM_STRIP_CANVAS)
3101 #    AC_DEFINE(ENABLE_WASM_STRIP_CHART)
3102     AC_DEFINE(ENABLE_WASM_STRIP_DBACCESS)
3103     AC_DEFINE(ENABLE_WASM_STRIP_EPUB)
3104     AC_DEFINE(ENABLE_WASM_STRIP_EXTRA)
3105     AC_DEFINE(ENABLE_WASM_STRIP_GUESSLANG)
3106 #    AC_DEFINE(ENABLE_WASM_STRIP_HUNSPELL)
3107     AC_DEFINE(ENABLE_WASM_STRIP_LANGUAGETOOL)
3108     AC_DEFINE(ENABLE_WASM_STRIP_PINGUSER)
3109     AC_DEFINE(ENABLE_WASM_STRIP_PREMULTIPLY)
3110     AC_DEFINE(ENABLE_WASM_STRIP_RECENT)
3111     AC_DEFINE(ENABLE_WASM_STRIP_RECOVERYUI)
3112     AC_DEFINE(ENABLE_WASM_STRIP_SPLASH)
3113     AC_DEFINE(ENABLE_WASM_STRIP_SWEXPORTS)
3114     AC_DEFINE(ENABLE_WASM_STRIP_SCEXPORTS)
3117 EMSCRIPTEN_NEH_MAJOR=3
3118 EMSCRIPTEN_NEH_MINOR=1
3119 EMSCRIPTEN_NEH_TINY=3
3120 EMSCRIPTEN_NEH_VERSION="${EMSCRIPTEN_NEH_MAJOR}.${EMSCRIPTEN_NEH_MINOR}.${EMSCRIPTEN_NEH_TINY}"
3122 if test "$enable_wasm_exceptions" = yes; then
3123     AC_MSG_CHECKING([if Emscripten version is at least $EMSCRIPTEN_NEH_VERSION for SjLj + native EH])
3124     check_semantic_version_three_prefixed EMSCRIPTEN NEH
3125     if test $? -ne 0; then
3126         AC_MSG_ERROR([no, found $EMSCRIPTEN_VERSION])
3127     else
3128         AC_MSG_RESULT([yes ($EMSCRIPTEN_VERSION)])
3129     fi
3130     ENABLE_WASM_EXCEPTIONS=TRUE
3132 AC_SUBST(ENABLE_WASM_EXCEPTIONS)
3134 # Whether to build "avmedia" functionality or not.
3136 if test "$enable_avmedia" = yes; then
3137     BUILD_TYPE="$BUILD_TYPE AVMEDIA"
3138     AC_DEFINE(HAVE_FEATURE_AVMEDIA)
3139 else
3140     test_gstreamer_1_0=no
3143 # Decide whether to build database connectivity stuff (including Base) or not.
3144 if test "$enable_database_connectivity" != no; then
3145     BUILD_TYPE="$BUILD_TYPE DBCONNECTIVITY"
3146     AC_DEFINE(HAVE_FEATURE_DBCONNECTIVITY)
3147 else
3148     if test "$_os" = iOS; then
3149         AC_MSG_ERROR([Presumly can't disable DB connectivity on iOS.])
3150     fi
3151     disable_database_connectivity_dependencies
3154 if test -z "$enable_extensions"; then
3155     # For iOS and Android Viewer, disable extensions unless specifically overridden with --enable-extensions.
3156     if test $_os != iOS && test $_os != Android -o "$ENABLE_ANDROID_LOK" = TRUE ; then
3157         enable_extensions=yes
3158     fi
3161 DISABLE_SCRIPTING=''
3162 if test "$enable_scripting" = yes; then
3163     BUILD_TYPE="$BUILD_TYPE SCRIPTING"
3164     AC_DEFINE(HAVE_FEATURE_SCRIPTING)
3165 else
3166     DISABLE_SCRIPTING='TRUE'
3167     SCPDEFS="$SCPDEFS -DDISABLE_SCRIPTING"
3170 if test $_os = iOS -o $_os = Android -o $_os = Emscripten; then
3171     # Disable dynamic_loading always for iOS and Android
3172     enable_dynamic_loading=no
3173 elif test -z "$enable_dynamic_loading"; then
3174     # Otherwise enable it unless specifically disabled
3175     enable_dynamic_loading=yes
3178 DISABLE_DYNLOADING=''
3179 if test "$enable_dynamic_loading" = yes; then
3180     BUILD_TYPE="$BUILD_TYPE DYNLOADING"
3181 else
3182     DISABLE_DYNLOADING='TRUE'
3183     if test $_os != iOS -a $_os != Android; then
3184         enable_database_connectivity=no
3185         enable_nss=no
3186         enable_odk=no
3187         enable_python=no
3188         enable_skia=no
3189         with_java=no
3190     fi
3192 AC_SUBST(DISABLE_DYNLOADING)
3194 ENABLE_CUSTOMTARGET_COMPONENTS=
3195 if test "$enable_customtarget_components" = yes -a "$DISABLE_DYNLOADING" = TRUE; then
3196     ENABLE_CUSTOMTARGET_COMPONENTS=TRUE
3197     if test -n "$with_locales" -a "$with_locales" != en -a "$with_locales" != ALL; then
3198         AC_MSG_ERROR([Currently just --with-locales=all or en is supported with --enable-customtarget-components])
3199     fi
3201 AC_SUBST(ENABLE_CUSTOMTARGET_COMPONENTS)
3203 if test "$enable_extensions" = yes; then
3204     BUILD_TYPE="$BUILD_TYPE EXTENSIONS"
3205     AC_DEFINE(HAVE_FEATURE_EXTENSIONS)
3206 else
3207     enable_extension_integration=no
3208     enable_extension_update=no
3211 # remember SYSBASE value
3212 AC_SUBST(SYSBASE)
3214 dnl ===================================================================
3215 dnl  Sort out various gallery compilation options
3216 dnl ===================================================================
3217 WITH_GALLERY_BUILD=TRUE
3218 AC_MSG_CHECKING([how to build and package galleries])
3219 if test -n "${with_galleries}"; then
3220     if test "$with_galleries" = "build"; then
3221         if test "$enable_database_connectivity" = no; then
3222             AC_MSG_ERROR([DB connectivity is needed for gengal / svx])
3223         fi
3224         AC_MSG_RESULT([build from source images internally])
3225     elif test "$with_galleries" = "no"; then
3226         WITH_GALLERY_BUILD=
3227         AC_MSG_RESULT([disable non-internal gallery build])
3228     else
3229         AC_MSG_ERROR([unknown value --with-galleries=$with_galleries])
3230     fi
3231 else
3232     if test $_os != iOS -a $_os != Android; then
3233         AC_MSG_RESULT([internal src images for desktop])
3234     else
3235         WITH_GALLERY_BUILD=
3236         AC_MSG_RESULT([disable src image build])
3237     fi
3239 AC_SUBST(WITH_GALLERY_BUILD)
3241 dnl ===================================================================
3242 dnl  Checks if ccache is available
3243 dnl ===================================================================
3244 CCACHE_DEPEND_MODE=
3245 if test "$enable_ccache" = "no"; then
3246     CCACHE=""
3247 elif test -n "$enable_ccache" -o \( "$enable_ccache" = "" -a "$enable_icecream" != "yes" \); then
3248     case "%$CC%$CXX%" in
3249     # If $CC and/or $CXX already contain "ccache" (possibly suffixed with some version number etc),
3250     # assume that's good then
3251     *%ccache[[-_' ']]*|*/ccache[[-_' ']]*)
3252         AC_MSG_NOTICE([ccache seems to be included in a pre-defined CC and/or CXX])
3253         CCACHE_DEPEND_MODE=1
3254         ;;
3255     *)
3256         # try to use our own ccache if it is available and CCACHE was not already defined
3257         if test -z "$CCACHE"; then
3258             if test "$_os" = "WINNT"; then
3259                 ccache_ext=.exe # e.g. openssl build needs ccache.exe, not just ccache
3260             fi
3261             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/ccache$ccache_ext" ; then
3262                 CCACHE="$LODE_HOME/opt/bin/ccache$ccache_ext"
3263             elif test -x "/opt/lo/bin/ccache$ccache_ext"; then
3264                 CCACHE="/opt/lo/bin/ccache$ccache_ext"
3265             fi
3266         fi
3267         AC_PATH_PROG([CCACHE],[ccache],[not found])
3268         if test "$CCACHE" != "not found" -a "$_os" = "WINNT"; then
3269             CCACHE=`win_short_path_for_make "$CCACHE"`
3270             # check that it has MSVC support (it should recognize it in CCACHE_COMPILERTYPE)
3271             rm -f conftest.txt
3272             AC_MSG_CHECKING([whether $CCACHE has MSVC support])
3273             CCACHE_COMPILERTYPE=cl CCACHE_LOGFILE=conftest.txt $CCACHE echo >/dev/null 2>/dev/null
3274             if grep -q 'Config: (environment) compiler_type = cl' conftest.txt; then
3275                 AC_MSG_RESULT(yes)
3276             else
3277                 AC_MSG_RESULT(no)
3278                 CCACHE="not found"
3279             fi
3280             rm -f conftest.txt
3281         fi
3282         if test "$CCACHE" = "not found" -a "$_os" = "WINNT"; then
3283             # on windows/VC perhaps sccache is around?
3284             case "%$CC%$CXX%" in
3285             # If $CC and/or $CXX already contain "sccache" (possibly suffixed with some version number etc),
3286             # assume that's good then
3287             *%sccache[[-_' ']]*|*/sccache[[-_' ']]*)
3288                 AC_MSG_NOTICE([sccache seems to be included in a pre-defined CC and/or CXX])
3289                 CCACHE_DEPEND_MODE=1
3290                 SCCACHE=1
3291                 ;;
3292             *)
3293                 # for sharing code below, reuse CCACHE env var
3294                 AC_PATH_PROG([CCACHE],[sccache],[not found])
3295                 if test "$CCACHE" != "not found"; then
3296                     CCACHE=`win_short_path_for_make "$CCACHE"`
3297                     SCCACHE=1
3298                     CCACHE_DEPEND_MODE=1
3299                 fi
3300                 ;;
3301             esac
3302         fi
3303         if test "$CCACHE" = "not found"; then
3304             CCACHE=""
3305         fi
3306         if test -n "$CCACHE" -a -z "$SCCACHE"; then
3307             CCACHE_DEPEND_MODE=1
3308             # Need to check for ccache version: otherwise prevents
3309             # caching of the results (like "-x objective-c++" for Mac)
3310             if test $_os = Darwin -o $_os = iOS; then
3311                 # Check ccache version
3312                 AC_MSG_CHECKING([whether version of ccache is suitable])
3313                 CCACHE_VERSION=`"$CCACHE" -V | "$AWK" '/^ccache version/{print $3}'`
3314                 CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
3315                 if test "$CCACHE_VERSION" = "2.4_OOo" -o "$CCACHE_NUMVER" -ge "030100"; then
3316                     AC_MSG_RESULT([yes, $CCACHE_VERSION])
3317                 else
3318                     AC_MSG_RESULT([no, $CCACHE_VERSION])
3319                     CCACHE=""
3320                     CCACHE_DEPEND_MODE=
3321                 fi
3322             fi
3323         fi
3324         ;;
3325     esac
3326 else
3327     CCACHE=""
3329 if test "$enable_ccache" = "nodepend"; then
3330     CCACHE_DEPEND_MODE=""
3332 AC_SUBST(CCACHE_DEPEND_MODE)
3334 # sccache defaults are good enough
3335 if test "$CCACHE" != "" -a -z "$SCCACHE"; then
3336     # e.g. (/home/rene/.config/ccache/ccache.conf) max_size = 20.0G
3337     # or (...) max_size = 20.0 G
3338     # -p works with both 4.2 and 4.4
3339     ccache_size_msg=$([$CCACHE -p | $AWK /max_size/'{ print $4 $5 }' | sed -e 's/\.[0-9]*//'])
3340     ccache_size=$(echo "$ccache_size_msg" | grep "G" | sed -e 's/G.*$//')
3341     if test "$ccache_size" = ""; then
3342         ccache_size=$(echo "$ccache_size_msg" | grep "M" | sed -e 's/\ M.*$//')
3343         if test "$ccache_size" = ""; then
3344             ccache_size=0
3345         fi
3346         # we could not determine the size or it was less than 1GB -> disable auto-ccache
3347         if test $ccache_size -lt 1024; then
3348             CCACHE=""
3349             AC_MSG_WARN([ccache's cache size is less than 1GB using it is counter-productive: Disabling auto-ccache detection])
3350             add_warning "ccache's cache size is less than 1GB using it is counter-productive: auto-ccache detection disabled"
3351         else
3352             # warn that ccache may be too small for debug build
3353             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3354             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3355         fi
3356     else
3357         if test $ccache_size -lt 5; then
3358             #warn that ccache may be too small for debug build
3359             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3360             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3361         fi
3362     fi
3365 ENABLE_Z7_DEBUG=
3366 if test "$enable_z7_debug" != no; then
3367     if test "$enable_z7_debug" = yes -o -n "$CCACHE"; then
3368         ENABLE_Z7_DEBUG=TRUE
3369     fi
3370 else
3371     AC_MSG_WARN([ccache will not work with --disable-z7-debug])
3372     add_warning "ccache will not work with --disable-z7-debug"
3374 AC_SUBST(ENABLE_Z7_DEBUG)
3376 dnl ===================================================================
3377 dnl  Checks for C compiler,
3378 dnl  The check for the C++ compiler is later on.
3379 dnl ===================================================================
3380 if test "$_os" != "WINNT"; then
3381     GCC_HOME_SET="true"
3382     AC_MSG_CHECKING([gcc home])
3383     if test -z "$with_gcc_home"; then
3384         if test "$enable_icecream" = "yes"; then
3385             if test -d "/usr/lib/icecc/bin"; then
3386                 GCC_HOME="/usr/lib/icecc/"
3387             elif test -d "/usr/libexec/icecc/bin"; then
3388                 GCC_HOME="/usr/libexec/icecc/"
3389             elif test -d "/opt/icecream/bin"; then
3390                 GCC_HOME="/opt/icecream/"
3391             else
3392                 AC_MSG_ERROR([Could not figure out the location of icecream GCC wrappers, manually use --with-gcc-home])
3394             fi
3395         else
3396             GCC_HOME=`which gcc | $SED -e s,/bin/gcc,,`
3397             GCC_HOME_SET="false"
3398         fi
3399     else
3400         GCC_HOME="$with_gcc_home"
3401     fi
3402     AC_MSG_RESULT($GCC_HOME)
3403     AC_SUBST(GCC_HOME)
3405     if test "$GCC_HOME_SET" = "true"; then
3406         if test -z "$CC"; then
3407             CC="$GCC_HOME/bin/gcc"
3408             CC_BASE="gcc"
3409         fi
3410         if test -z "$CXX"; then
3411             CXX="$GCC_HOME/bin/g++"
3412             CXX_BASE="g++"
3413         fi
3414     fi
3417 COMPATH=`dirname "$CC"`
3418 if test "$COMPATH" = "."; then
3419     AC_PATH_PROGS(COMPATH, $CC)
3420     dnl double square bracket to get single because of M4 quote...
3421     COMPATH=`echo $COMPATH | $SED "s@/[[^/:]]*\\\$@@"`
3423 COMPATH=`echo $COMPATH | $SED "s@/[[Bb]][[Ii]][[Nn]]\\\$@@"`
3425 dnl ===================================================================
3426 dnl Java support
3427 dnl ===================================================================
3428 AC_MSG_CHECKING([whether to build with Java support])
3429 if test "$with_java" != "no"; then
3430     if test "$DISABLE_SCRIPTING" = TRUE; then
3431         AC_MSG_RESULT([no, overridden by --disable-scripting])
3432         ENABLE_JAVA=""
3433         with_java=no
3434     else
3435         AC_MSG_RESULT([yes])
3436         ENABLE_JAVA="TRUE"
3437         AC_DEFINE(HAVE_FEATURE_JAVA)
3438     fi
3439 else
3440     AC_MSG_RESULT([no])
3441     ENABLE_JAVA=""
3444 AC_SUBST(ENABLE_JAVA)
3446 dnl ENABLE_JAVA="TRUE" if we want there to be *run-time* (and build-time) support for Java
3448 dnl ENABLE_JAVA="" indicate no Java support at all
3450 dnl ===================================================================
3451 dnl Check macOS SDK and compiler
3452 dnl ===================================================================
3454 if test $_os = Darwin; then
3456     # The SDK in the currently selected Xcode should be found.
3458     AC_MSG_CHECKING([what macOS SDK to use])
3459     # XCode only ships with a single SDK for a while now, and using older SDKs alongside is not
3460     # really supported anymore, instead you'd use different copies of Xcode, each with their own
3461     # SDK, and thus xcrun will pick the SDK that matches the currently selected Xcode version
3462     # also restricting the SDK version to "known good" versions doesn't seem necessary anymore, the
3463     # problems that existed in the PPC days with target versions not being respected or random
3464     # failures seems to be a thing of the past or rather: limiting either the Xcode version or the
3465     # SDK version is enough, no need to do both...
3466     MACOSX_SDK_PATH=`xcrun --sdk macosx --show-sdk-path 2> /dev/null`
3467     if test ! -d "$MACOSX_SDK_PATH"; then
3468         AC_MSG_ERROR([Could not find an appropriate macOS SDK])
3469     fi
3470     macosx_sdk=`xcodebuild -version -sdk "$MACOSX_SDK_PATH" SDKVersion`
3471     MACOSX_SDK_BUILD_VERSION=$(xcodebuild -version -sdk "$MACOSX_SDK_PATH" ProductBuildVersion)
3472     # format changed between 10.9 and 10.10 - up to 10.9 it was just four digits (1090), starting
3473     # with macOS 10.10 it was switched to account for x.y.z with six digits, 10.10 is 101000,
3474     # 10.10.2 is 101002
3475     # we don't target the lower versions anymore, so it doesn't matter that we don't generate the
3476     # correct version in case such an old SDK is specified, it will be rejected later anyway
3477     MACOSX_SDK_VERSION=$(echo $macosx_sdk | $AWK -F. '{ print $1*10000+$2*100+$3 }')
3478     if test $MACOSX_SDK_VERSION -lt 101500; then
3479         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported, lowest supported version is 10.15])
3480     fi
3481     if test "$host_cpu" = arm64 -a $MACOSX_SDK_VERSION -lt 110000; then
3482         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported for Apple Silicon (need at least 11.0)])
3483     fi
3484     AC_MSG_RESULT([macOS SDK $macosx_sdk at $MACOSX_SDK_PATH])
3486     AC_MSG_CHECKING([what minimum version of macOS to require])
3487     if test "$with_macosx_version_min_required" = "" ; then
3488         if test "$host_cpu" = x86_64; then
3489             with_macosx_version_min_required="10.15";
3490         else
3491             with_macosx_version_min_required="11.0";
3492         fi
3493     fi
3494     # see same notes about MACOSX_SDK_VERSION above
3495     MAC_OS_X_VERSION_MIN_REQUIRED=$(echo $with_macosx_version_min_required | $AWK -F. '{ print $1*10000+$2*100+$3 }')
3496     if test $MAC_OS_X_VERSION_MIN_REQUIRED -lt 101500; then
3497         AC_MSG_ERROR([with-macosx-version-min-required $with_macosx_version_min_required is not a supported value, minimum supported version is 10.15])
3498     fi
3499     AC_MSG_RESULT([$with_macosx_version_min_required])
3501     AC_MSG_CHECKING([that macosx-version-min-required is coherent with macos-with-sdk])
3502     if test $MAC_OS_X_VERSION_MIN_REQUIRED -gt $MACOSX_SDK_VERSION; then
3503         AC_MSG_ERROR([the version minimum required ($with_macosx_version_min_required) cannot be greater than the sdk level ($macosx_sdk)])
3504     else
3505         AC_MSG_RESULT([yes])
3506     fi
3508     # export this so that "xcrun" invocations later return matching values
3509     DEVELOPER_DIR="${MACOSX_SDK_PATH%/SDKs*}"
3510     DEVELOPER_DIR="${DEVELOPER_DIR%/Platforms*}"
3511     export DEVELOPER_DIR
3512     FRAMEWORKSHOME="$MACOSX_SDK_PATH/System/Library/Frameworks"
3513     MACOSX_DEPLOYMENT_TARGET="$with_macosx_version_min_required"
3515     AC_MSG_CHECKING([whether Xcode is new enough])
3516     my_xcode_ver1=$(xcrun xcodebuild -version | head -n 1)
3517     my_xcode_ver2=${my_xcode_ver1#Xcode }
3518     my_xcode_ver3=$(printf %s "$my_xcode_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
3519     if test "$my_xcode_ver3" -ge 1205; then
3520         AC_MSG_RESULT([yes ($my_xcode_ver2)])
3521         if test $MAC_OS_X_VERSION_MIN_REQUIRED -lt 120000; then
3522             if test "$my_xcode_ver3" -ge 1600; then
3523                 dnl the Xcode 15 relnotes state that the classic linker will disappear in the next version, but nothing about
3524                 dnl fixing the problem with weak symbols/macOS 11 compatibility, so assume for now that Xcode 16 will break it...
3525                 AC_MSG_ERROR([Check that Xcode 16 still supports the old linker/that it doesn't break macOS 11 compatibility, then remove this check]);
3526             fi
3527             if test "$my_xcode_ver3" -ge 1500; then
3528                 AC_MSG_WARN([Xcode 15 has a new linker that causes runtime crashes on macOS 11])
3529                 add_warning "Xcode 15 has a new linker that causes runtime crashes on macOS 11, forcing the old linker."
3530                 add_warning "see https://developer.apple.com/documentation/xcode-release-notes/xcode-15-release-notes#Linking"
3531                 LDFLAGS="$LDFLAGS -Wl,-ld_classic"
3532                 # if LDFLAGS weren't set already, a check above sets x_LDFLAGS=[#] to comment-out the export LDFLAGS line in config_host.mk
3533                 x_LDFLAGS=
3534             fi
3535         fi
3536     else
3537         AC_MSG_ERROR(["$my_xcode_ver1" is too old or unrecognized, must be at least Xcode 12.5])
3538     fi
3540     my_xcode_ver1=$(xcrun xcodebuild -version | tail -n 1)
3541     MACOSX_XCODE_BUILD_VERSION=${my_xcode_ver1#Build version }
3543     LIBTOOL=/usr/bin/libtool
3544     INSTALL_NAME_TOOL=install_name_tool
3545     if test -z "$save_CC"; then
3546         stdlib=-stdlib=libc++
3548         AC_MSG_CHECKING([what C compiler to use])
3549         CC="`xcrun -find clang`"
3550         CC_BASE=`first_arg_basename "$CC"`
3551         if test "$host_cpu" = x86_64; then
3552             CC+=" -target x86_64-apple-macos"
3553         else
3554             CC+=" -target arm64-apple-macos"
3555         fi
3556         CC+=" -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3557         AC_MSG_RESULT([$CC])
3559         AC_MSG_CHECKING([what C++ compiler to use])
3560         CXX="`xcrun -find clang++`"
3561         CXX_BASE=`first_arg_basename "$CXX"`
3562         if test "$host_cpu" = x86_64; then
3563             CXX+=" -target x86_64-apple-macos"
3564         else
3565             CXX+=" -target arm64-apple-macos"
3566         fi
3567         CXX+=" $stdlib -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3568         AC_MSG_RESULT([$CXX])
3570         INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3571         AR=`xcrun -find ar`
3572         NM=`xcrun -find nm`
3573         STRIP=`xcrun -find strip`
3574         LIBTOOL=`xcrun -find libtool`
3575         RANLIB=`xcrun -find ranlib`
3576     fi
3578     AC_MSG_CHECKING([whether to do code signing])
3580     if test -z "$enable_macosx_code_signing" -o "$enable_macosx_code_signing" == "no" ; then
3581         AC_MSG_RESULT([no])
3582     else
3583         if test "$enable_macosx_code_signing" = yes; then
3584             # By default use the first suitable certificate (?).
3586             # https://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3587             # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3588             # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3589             # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3590             # "Developer ID Application" one.
3591             identity="Developer ID Application:"
3592         else
3593             identity=$enable_macosx_code_signing
3594         fi
3595         identity=`security find-identity -p codesigning -v 2>/dev/null | $AWK "/$identity/{print \\$2; exit}"`
3596         if test -n "$identity"; then
3597             MACOSX_CODESIGNING_IDENTITY=$identity
3598             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3599             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3600         else
3601             AC_MSG_ERROR([cannot determine identity to use])
3602         fi
3603     fi
3605     AC_MSG_CHECKING([whether to create a Mac App Store package])
3607     if test -z "$enable_macosx_package_signing" || test "$enable_macosx_package_signing" == no; then
3608         AC_MSG_RESULT([no])
3609     elif test -z "$MACOSX_CODESIGNING_IDENTITY"; then
3610         AC_MSG_ERROR([You forgot --enable-macosx-code-signing])
3611     else
3612         if test "$enable_macosx_package_signing" = yes; then
3613             # By default use the first suitable certificate.
3614             # It should be a "3rd Party Mac Developer Installer" one
3615             identity="3rd Party Mac Developer Installer:"
3616         else
3617             identity=$enable_macosx_package_signing
3618         fi
3619         identity=`security find-identity -v 2>/dev/null | $AWK "/$identity/ {print \\$2; exit}"`
3620         if test -n "$identity"; then
3621             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3622             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3623             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3624         else
3625             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3626         fi
3627     fi
3629     if test -n "$MACOSX_CODESIGNING_IDENTITY" -a -n "$MACOSX_PACKAGE_SIGNING_IDENTITY" -a "$MACOSX_CODESIGNING_IDENTITY" = "$MACOSX_PACKAGE_SIGNING_IDENTITY"; then
3630         AC_MSG_ERROR([You should not use the same identity for code and package signing])
3631     fi
3633     AC_MSG_CHECKING([whether to sandbox the application])
3635     if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then
3636         AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java])
3637     elif test "$enable_macosx_sandbox" = yes; then
3638         ENABLE_MACOSX_SANDBOX=TRUE
3639         AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX)
3640         AC_MSG_RESULT([yes])
3641     else
3642         AC_MSG_RESULT([no])
3643     fi
3645     AC_MSG_CHECKING([what macOS app bundle identifier to use])
3646     MACOSX_BUNDLE_IDENTIFIER=$with_macosx_bundle_identifier
3647     AC_MSG_RESULT([$MACOSX_BUNDLE_IDENTIFIER])
3649     if test -n "$with_macosx_provisioning_profile" ; then
3650         if test ! -f "$with_macosx_provisioning_profile"; then
3651             AC_MSG_ERROR([provisioning profile not found at $with_macosx_provisioning_profile])
3652         else
3653             MACOSX_PROVISIONING_PROFILE=$with_macosx_provisioning_profile
3654             MACOSX_PROVISIONING_INFO=$([security cms -D -i "$MACOSX_PROVISIONING_PROFILE" | \
3655                 xmllint --xpath "//key[.='com.apple.application-identifier' or .='com.apple.developer.team-identifier'] \
3656                     | //key[.='com.apple.application-identifier' or .='com.apple.developer.team-identifier']/following-sibling::string[1]" - | \
3657                 sed -e 's#><#>\n\t<#g' -e 's#^#\t#'])
3658         fi
3659     fi
3661 AC_SUBST(MACOSX_SDK_PATH)
3662 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3663 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3664 AC_SUBST(INSTALL_NAME_TOOL)
3665 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3666 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3667 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3668 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3669 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3670 AC_SUBST(MACOSX_PROVISIONING_INFO)
3671 AC_SUBST(MACOSX_PROVISIONING_PROFILE)
3672 AC_SUBST(MACOSX_SDK_BUILD_VERSION)
3673 AC_SUBST(MACOSX_XCODE_BUILD_VERSION)
3675 dnl ===================================================================
3676 dnl Check iOS SDK and compiler
3677 dnl ===================================================================
3679 if test $_os = iOS; then
3680     AC_MSG_CHECKING([what iOS SDK to use])
3682     if test "$enable_ios_simulator" = "yes"; then
3683         platformlc=iphonesimulator
3684         versionmin=-mios-simulator-version-min=14.5
3685     else
3686         platformlc=iphoneos
3687         versionmin=-miphoneos-version-min=14.5
3688     fi
3690     sysroot=`xcrun --sdk $platformlc --show-sdk-path`
3692     if ! test -d "$sysroot"; then
3693         AC_MSG_ERROR([Could not find iOS SDK $sysroot])
3694     fi
3696     AC_MSG_RESULT($sysroot)
3698     stdlib="-stdlib=libc++"
3700     AC_MSG_CHECKING([what C compiler to use])
3701     CC="`xcrun -find clang`"
3702     CC_BASE=`first_arg_basename "$CC"`
3703     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3704     AC_MSG_RESULT([$CC])
3706     AC_MSG_CHECKING([what C++ compiler to use])
3707     CXX="`xcrun -find clang++`"
3708     CXX_BASE=`first_arg_basename "$CXX"`
3709     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3710     AC_MSG_RESULT([$CXX])
3712     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3713     AR=`xcrun -find ar`
3714     NM=`xcrun -find nm`
3715     STRIP=`xcrun -find strip`
3716     LIBTOOL=`xcrun -find libtool`
3717     RANLIB=`xcrun -find ranlib`
3720 AC_MSG_CHECKING([whether to treat the installation as read-only])
3722 if test $_os = Darwin; then
3723     enable_readonly_installset=yes
3724 elif test "$enable_extensions" != yes; then
3725     enable_readonly_installset=yes
3727 if test "$enable_readonly_installset" = yes; then
3728     AC_MSG_RESULT([yes])
3729     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3730 else
3731     AC_MSG_RESULT([no])
3734 dnl ===================================================================
3735 dnl Structure of install set
3736 dnl ===================================================================
3738 if test $_os = Darwin; then
3739     LIBO_BIN_FOLDER=MacOS
3740     LIBO_ETC_FOLDER=Resources
3741     LIBO_LIBEXEC_FOLDER=MacOS
3742     LIBO_LIB_FOLDER=Frameworks
3743     LIBO_LIB_PYUNO_FOLDER=Resources
3744     LIBO_SHARE_FOLDER=Resources
3745     LIBO_SHARE_HELP_FOLDER=Resources/help
3746     LIBO_SHARE_JAVA_FOLDER=Resources/java
3747     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3748     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3749     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3750     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3751     LIBO_URE_BIN_FOLDER=MacOS
3752     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3753     LIBO_URE_LIB_FOLDER=Frameworks
3754     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3755     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3756 elif test $_os = WINNT; then
3757     LIBO_BIN_FOLDER=program
3758     LIBO_ETC_FOLDER=program
3759     LIBO_LIBEXEC_FOLDER=program
3760     LIBO_LIB_FOLDER=program
3761     LIBO_LIB_PYUNO_FOLDER=program
3762     LIBO_SHARE_FOLDER=share
3763     LIBO_SHARE_HELP_FOLDER=help
3764     LIBO_SHARE_JAVA_FOLDER=program/classes
3765     LIBO_SHARE_PRESETS_FOLDER=presets
3766     LIBO_SHARE_READMES_FOLDER=readmes
3767     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3768     LIBO_SHARE_SHELL_FOLDER=program/shell
3769     LIBO_URE_BIN_FOLDER=program
3770     LIBO_URE_ETC_FOLDER=program
3771     LIBO_URE_LIB_FOLDER=program
3772     LIBO_URE_MISC_FOLDER=program
3773     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3774 else
3775     LIBO_BIN_FOLDER=program
3776     LIBO_ETC_FOLDER=program
3777     LIBO_LIBEXEC_FOLDER=program
3778     LIBO_LIB_FOLDER=program
3779     LIBO_LIB_PYUNO_FOLDER=program
3780     LIBO_SHARE_FOLDER=share
3781     LIBO_SHARE_HELP_FOLDER=help
3782     LIBO_SHARE_JAVA_FOLDER=program/classes
3783     LIBO_SHARE_PRESETS_FOLDER=presets
3784     LIBO_SHARE_READMES_FOLDER=readmes
3785     if test "$enable_fuzzers" != yes; then
3786         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3787     else
3788         LIBO_SHARE_RESOURCE_FOLDER=resource
3789     fi
3790     LIBO_SHARE_SHELL_FOLDER=program/shell
3791     LIBO_URE_BIN_FOLDER=program
3792     LIBO_URE_ETC_FOLDER=program
3793     LIBO_URE_LIB_FOLDER=program
3794     LIBO_URE_MISC_FOLDER=program
3795     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3797 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3798 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3799 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3800 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3801 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3802 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3803 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3804 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3805 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3806 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3807 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3808 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3809 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3810 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3811 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3812 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3814 # Not all of them needed in config_host.mk, add more if need arises
3815 AC_SUBST(LIBO_BIN_FOLDER)
3816 AC_SUBST(LIBO_ETC_FOLDER)
3817 AC_SUBST(LIBO_LIB_FOLDER)
3818 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3819 AC_SUBST(LIBO_SHARE_FOLDER)
3820 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3821 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3822 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3823 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3824 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3825 AC_SUBST(LIBO_URE_BIN_FOLDER)
3826 AC_SUBST(LIBO_URE_ETC_FOLDER)
3827 AC_SUBST(LIBO_URE_LIB_FOLDER)
3828 AC_SUBST(LIBO_URE_MISC_FOLDER)
3829 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3831 dnl ===================================================================
3832 dnl Windows specific tests and stuff
3833 dnl ===================================================================
3835 reg_get_value()
3837     # Return value: $regvalue
3838     unset regvalue
3840     if test "$build_os" = "wsl"; then
3841         regvalue=$($WSL_LO_HELPER --read-registry $1 "$2" 2>/dev/null)
3842         return
3843     fi
3845     local _regentry="/proc/registry${1}/${2}"
3846     if test -f "$_regentry"; then
3847         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3848         # Registry keys read via /proc/registry* are always \0 terminated!
3849         local _regvalue=$(tr -d '\0' < "$_regentry")
3850         if test $? -eq 0; then
3851             regvalue=$_regvalue
3852         fi
3853     fi
3856 # Get a value from the 32-bit side of the Registry
3857 reg_get_value_32()
3859     reg_get_value "32" "$1"
3862 # Get a value from the 64-bit side of the Registry
3863 reg_get_value_64()
3865     reg_get_value "64" "$1"
3868 reg_list_values()
3870     # Return value: $reglist
3871     unset reglist
3873     if test "$build_os" = "wsl"; then
3874         reglist=$($WSL_LO_HELPER --list-registry $1 "$2" 2>/dev/null | tr -d '\r')
3875         return
3876     fi
3878     reglist=$(ls "/proc/registry${1}/${2}")
3881 # List values from the 32-bit side of the Registry
3882 reg_list_values_32()
3884     reg_list_values "32" "$1"
3887 # List values from the 64-bit side of the Registry
3888 reg_list_values_64()
3890     reg_list_values "64" "$1"
3893 case "$host_os" in
3894 cygwin*|wsl*)
3895     COM=MSC
3896     OS=WNT
3897     RTL_OS=Windows
3898     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3899         P_SEP=";"
3900     else
3901         P_SEP=:
3902     fi
3903     case "$host_cpu" in
3904     x86_64)
3905         CPUNAME=X86_64
3906         RTL_ARCH=X86_64
3907         PLATFORMID=windows_x86_64
3908         WINDOWS_X64=1
3909         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
3910         WIN_HOST_ARCH="x64"
3911         WIN_MULTI_ARCH="x86"
3912         WIN_HOST_BITS=64
3913         ;;
3914     i*86)
3915         CPUNAME=INTEL
3916         RTL_ARCH=x86
3917         PLATFORMID=windows_x86
3918         WIN_HOST_ARCH="x86"
3919         WIN_HOST_BITS=32
3920         WIN_OTHER_ARCH="x64"
3921         ;;
3922     aarch64)
3923         CPUNAME=AARCH64
3924         RTL_ARCH=AARCH64
3925         PLATFORMID=windows_aarch64
3926         WINDOWS_X64=1
3927         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
3928         WIN_HOST_ARCH="arm64"
3929         WIN_HOST_BITS=64
3930         with_ucrt_dir=no
3931         ;;
3932     *)
3933         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
3934         ;;
3935     esac
3937     case "$build_cpu" in
3938     x86_64) WIN_BUILD_ARCH="x64" ;;
3939     i*86) WIN_BUILD_ARCH="x86" ;;
3940     aarch64) WIN_BUILD_ARCH="arm64" ;;
3941     *)
3942         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
3943         ;;
3944     esac
3946     SCPDEFS="$SCPDEFS -D_MSC_VER"
3947     ;;
3948 esac
3950 # multi-arch is an arch, which can execute on the host (x86 on x64), while
3951 # other-arch won't, but wouldn't break the build (x64 on x86).
3952 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
3953     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
3957 if test "$build_cpu" != "$host_cpu" -o "$DISABLE_DYNLOADING" = TRUE; then
3958     # To allow building Windows multi-arch releases without cross-tooling
3959     if test "$DISABLE_DYNLOADING" = TRUE -o \( -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH" \); then
3960         cross_compiling="yes"
3961     fi
3964 if test "$cross_compiling" = "yes"; then
3965     export CROSS_COMPILING=TRUE
3966     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
3967         ENABLE_WASM_STRIP=TRUE
3968     fi
3969     if test "$_os" = "Emscripten"; then
3970         if test "$with_main_module" = "calc"; then
3971             ENABLE_WASM_STRIP_WRITER=TRUE
3972         elif test "$with_main_module" = "writer"; then
3973             ENABLE_WASM_STRIP_CALC=TRUE
3974         fi
3975     fi
3976 else
3977     CROSS_COMPILING=
3978     BUILD_TYPE="$BUILD_TYPE NATIVE"
3980 AC_SUBST(CROSS_COMPILING)
3981 AC_SUBST(ENABLE_WASM_STRIP)
3982 AC_SUBST(ENABLE_WASM_STRIP_WRITER)
3983 AC_SUBST(ENABLE_WASM_STRIP_CALC)
3985 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
3986 # NOTE: must _not_ be used for bundled external libraries!
3987 ISYSTEM=
3988 if test "$GCC" = "yes"; then
3989     AC_MSG_CHECKING( for -isystem )
3990     save_CFLAGS=$CFLAGS
3991     CFLAGS="$CFLAGS -isystem /usr/include -Werror"
3992     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
3993     CFLAGS=$save_CFLAGS
3994     if test -n "$ISYSTEM"; then
3995         AC_MSG_RESULT(yes)
3996     else
3997         AC_MSG_RESULT(no)
3998     fi
4000 if test -z "$ISYSTEM"; then
4001     # fall back to using -I
4002     ISYSTEM=-I
4004 AC_SUBST(ISYSTEM)
4006 dnl ===================================================================
4007 dnl  Check which Visual Studio compiler is used
4008 dnl ===================================================================
4010 map_vs_year_to_version()
4012     # Return value: $vsversion
4014     unset vsversion
4016     case $1 in
4017     2019)
4018         vsversion=16;;
4019     2022)
4020         vsversion=17;;
4021     2022preview)
4022         vsversion=17.8;;
4023     *)
4024         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
4025     esac
4028 vs_versions_to_check()
4030     # Args: $1 (optional) : versions to check, in the order of preference
4031     # Return value: $vsversions
4033     unset vsversions
4035     if test -n "$1"; then
4036         map_vs_year_to_version "$1"
4037         vsversions=$vsversion
4038     else
4039         # Default version is 2019
4040         vsversions="16"
4041     fi
4044 win_get_env_from_vsdevcmdbat()
4046     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
4047     printf '@set VSCMD_SKIP_SENDTELEMETRY=1\r\n' > $WRAPPERBATCHFILEPATH
4048     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$(cygpath -w $VC_PRODUCT_DIR)" >> $WRAPPERBATCHFILEPATH
4049     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
4050     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
4051     local result
4052     if test "$build_os" = "wsl"; then
4053         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
4054     else
4055         chmod +x $WRAPPERBATCHFILEPATH
4056         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
4057     fi
4058     rm -f $WRAPPERBATCHFILEPATH
4059     printf '%s' "$result"
4062 find_ucrt()
4064     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/InstallationFolder"
4065     if test -n "$regvalue"; then
4066         PathFormat "$regvalue"
4067         UCRTSDKDIR=$formatted_path_unix
4068         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion"
4069         UCRTVERSION=$regvalue
4070         # Rest if not exist
4071         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
4072           UCRTSDKDIR=
4073         fi
4074     fi
4075     if test -z "$UCRTSDKDIR"; then
4076         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
4077         ide_env_file="${ide_env_dir}VsDevCmd.bat"
4078         if test -f "$ide_env_file"; then
4079             PathFormat "$(win_get_env_from_vsdevcmdbat UniversalCRTSdkDir)"
4080             UCRTSDKDIR=$formatted_path
4081             UCRTVERSION=$(win_get_env_from_vsdevcmdbat UCRTVersion)
4082             dnl Hack needed at least by tml:
4083             if test "$UCRTVERSION" = 10.0.15063.0 \
4084                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
4085                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
4086             then
4087                 UCRTVERSION=10.0.14393.0
4088             fi
4089         else
4090           AC_MSG_ERROR([No UCRT found])
4091         fi
4092     fi
4095 find_msvc()
4097     # Find Visual C++
4098     # Args: $1 (optional) : The VS version year
4099     # Return values: $vctest, $vcyear, $vctoolset, $vcnumwithdot, $vcbuildnumber
4101     unset vctest vctoolset vcnumwithdot vcbuildnumber
4103     vs_versions_to_check "$1"
4104     if test "$build_os" = wsl; then
4105         vswhere="$PROGRAMFILESX86"
4106         if test -z "$vswhere"; then
4107             vswhere="c:\\Program Files (x86)"
4108         fi
4109     else
4110         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
4111     fi
4112     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
4113     PathFormat "$vswhere"
4114     vswhere=$formatted_path_unix
4115     for ver in $vsversions; do
4116         vswhereoutput=`$vswhere -version "@<:@ $ver , $(expr ${ver%%.*} + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4117         if test -z "$vswhereoutput"; then
4118             vswhereoutput=`$vswhere -prerelease -version "@<:@ $ver , $(expr ${ver%%.*} + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4119         fi
4120         # Fall back to all MS products (this includes VC++ Build Tools)
4121         if ! test -n "$vswhereoutput"; then
4122             AC_MSG_CHECKING([VC++ Build Tools and similar])
4123             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr ${ver%%.*} + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4124         fi
4125         if test -n "$vswhereoutput"; then
4126             PathFormat "$vswhereoutput"
4127             vctest=$formatted_path_unix
4128             break
4129         fi
4130     done
4132     if test -n "$vctest"; then
4133         vcnumwithdot="$ver"
4134         if test "${vcnumwithdot%%.*}" = "$vcnumwithdot"; then
4135             vcnumwithdot=$vcnumwithdot.0
4136         fi
4137         case "$vcnumwithdot" in
4138         16.0)
4139             vcyear=2019
4140             vctoolset=v142
4141             ;;
4142         17.0 | 17.8)
4143             vcyear=2022
4144             vctoolset=v143
4145             ;;
4146         esac
4147         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
4149     fi
4152 test_cl_exe()
4154     AC_MSG_CHECKING([$1 compiler])
4156     CL_EXE_PATH="$2/cl.exe"
4158     if test ! -f "$CL_EXE_PATH"; then
4159         if test "$1" = "multi-arch"; then
4160             AC_MSG_WARN([no compiler (cl.exe) in $2])
4161             return 1
4162         else
4163             AC_MSG_ERROR([no compiler (cl.exe) in $2])
4164         fi
4165     fi
4167     dnl ===========================================================
4168     dnl  Check for the corresponding mspdb*.dll
4169     dnl ===========================================================
4171     # MSVC 15.0 has libraries from 14.0?
4172     mspdbnum="140"
4174     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
4175         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
4176     fi
4178     # The compiles has to find its shared libraries
4179     OLD_PATH="$PATH"
4180     TEMP_PATH=`cygpath -d "$2"`
4181     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
4183     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
4184         AC_MSG_ERROR([no compiler (cl.exe) in $2])
4185     fi
4187     PATH="$OLD_PATH"
4189     AC_MSG_RESULT([$CL_EXE_PATH])
4192 SOLARINC=
4193 MSBUILD_PATH=
4194 DEVENV=
4195 if test "$_os" = "WINNT"; then
4196     AC_MSG_CHECKING([Visual C++])
4197     find_msvc "$with_visual_studio"
4198     if test -z "$vctest"; then
4199         if test -n "$with_visual_studio"; then
4200             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
4201         else
4202             AC_MSG_ERROR([no Visual Studio installation found])
4203         fi
4204     fi
4205     AC_MSG_RESULT([])
4207     VC_PRODUCT_DIR="$vctest/VC"
4208     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
4210     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
4211     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
4212         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
4213         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
4214         if test $? -ne 0; then
4215             WIN_MULTI_ARCH=""
4216             WIN_OTHER_ARCH=""
4217         fi
4218     fi
4220     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
4221         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
4222         test_cl_exe "build" "$MSVC_BUILD_PATH"
4223     fi
4225     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
4226         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
4227         test_cl_exe "host" "$MSVC_HOST_PATH"
4228     else
4229         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
4230     fi
4232     AC_MSG_CHECKING([for short pathname of VC product directory])
4233     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
4234     AC_MSG_RESULT([$VC_PRODUCT_DIR])
4236     UCRTSDKDIR=
4237     UCRTVERSION=
4239     AC_MSG_CHECKING([for UCRT location])
4240     find_ucrt
4241     # find_ucrt errors out if it doesn't find it
4242     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
4243     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
4244     ucrtincpath_formatted=$formatted_path
4245     # SOLARINC is used for external modules and must be set too.
4246     # And no, it's not sufficient to set SOLARINC only, as configure
4247     # itself doesn't honour it.
4248     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
4249     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
4250     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
4251     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4253     AC_SUBST(UCRTSDKDIR)
4254     AC_SUBST(UCRTVERSION)
4256     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4257     # Find the proper version of MSBuild.exe to use based on the VS version
4258     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath
4259     if test -z "$regvalue" ; then
4260         if test "$WIN_BUILD_ARCH" != "x64"; then
4261             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4262         else
4263             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4264         fi
4265     fi
4266     if test -d "$regvalue" ; then
4267         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4268         AC_MSG_RESULT([$regvalue])
4269     else
4270         AC_MSG_ERROR([MSBuild.exe location not found])
4271     fi
4273     # Find the version of devenv.exe
4274     # MSVC 2017 devenv does not start properly from a DOS 8.3 path
4275     DEVENV=$(cygpath -lm "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe")
4276     DEVENV_unix=$(cygpath -u "$DEVENV")
4277     if test ! -e "$DEVENV_unix"; then
4278         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4279     fi
4281     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4282     dnl needed when building CLR code:
4283     if test -z "$MSVC_CXX"; then
4284         # This gives us a posix path with 8.3 filename restrictions
4285         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4286     fi
4288     if test -z "$CC"; then
4289         CC=$MSVC_CXX
4290         CC_BASE=`first_arg_basename "$CC"`
4291     fi
4292     if test -z "$CXX"; then
4293         CXX=$MSVC_CXX
4294         CXX_BASE=`first_arg_basename "$CXX"`
4295     fi
4297     if test -n "$CC"; then
4298         # Remove /cl.exe from CC case insensitive
4299         AC_MSG_NOTICE([found Visual C++ $vcyear])
4301         main_include_dir=`cygpath -d -m "$COMPATH/Include"`
4302         CPPFLAGS="$CPPFLAGS -I$main_include_dir"
4304         PathFormat "$COMPATH"
4305         COMPATH=`win_short_path_for_make "$formatted_path"`
4307         VCVER=$vcnumwithdot
4308         VCTOOLSET=$vctoolset
4310         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4311         # are always "better", we list them in reverse chronological order.
4313         case "$vcnumwithdot" in
4314         16.0 | 17.0 | 17.8)
4315             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4316             ;;
4317         esac
4319         # The expectation is that --with-windows-sdk should not need to be used
4320         if test -n "$with_windows_sdk"; then
4321             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4322             *" "$with_windows_sdk" "*)
4323                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4324                 ;;
4325             *)
4326                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4327                 ;;
4328             esac
4329         fi
4331         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4332         ac_objext=obj
4333         ac_exeext=exe
4335     else
4336         AC_MSG_ERROR([Visual C++ not found after all, huh])
4337     fi
4339     # ERROR if VS version < 16.5
4340     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4341     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4342         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4343         // between Visual Studio versions and _MSC_VER:
4344         #if _MSC_VER < 1925
4345         #error
4346         #endif
4347     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4349     # WARN if VS version < 16.10
4350     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.10])
4351     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4352         #if _MSC_VER < 1929
4353         #error
4354         #endif
4355     ]])],[vs2019_recommended_version=yes],[vs2019_recommended_version=no])
4357     if test $vs2019_recommended_version = yes; then
4358         AC_MSG_RESULT([yes])
4359     else
4360         AC_MSG_WARN([no])
4361         add_warning "You should have at least Visual Studio 2019 version 16.10 to avoid build problems. Otherwise, you may face problems with the build of some modules including dragonbox."
4362     fi
4364     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4365     # version of the Explorer extension (and maybe other small
4366     # bits, too) needed when installing a 32-bit LibreOffice on a
4367     # 64-bit OS. The 64-bit Explorer extension is a feature that
4368     # has been present since long in OOo. Don't confuse it with
4369     # building LibreOffice itself as 64-bit code.
4371     BUILD_X64=
4372     CXX_X64_BINARY=
4374     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4375         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4376         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4377              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4378         then
4379             BUILD_X64=TRUE
4380             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4381             AC_MSG_RESULT([found])
4382         else
4383             AC_MSG_RESULT([not found])
4384             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4385         fi
4386     elif test "$WIN_HOST_ARCH" = "x64"; then
4387         CXX_X64_BINARY=$CXX
4388     fi
4389     AC_SUBST(BUILD_X64)
4391     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4392     AC_SUBST(CXX_X64_BINARY)
4394     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4395     # needed to support TWAIN scan on both 32- and 64-bit systems
4397     case "$WIN_HOST_ARCH" in
4398     x64)
4399         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4400         if test -n "$CXX_X86_BINARY"; then
4401             BUILD_X86=TRUE
4402             AC_MSG_RESULT([preset])
4403         elif test -n "$WIN_MULTI_ARCH"; then
4404             BUILD_X86=TRUE
4405             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4406             AC_MSG_RESULT([found])
4407         else
4408             AC_MSG_RESULT([not found])
4409             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4410         fi
4411         ;;
4412     x86)
4413         BUILD_X86=TRUE
4414         CXX_X86_BINARY=$MSVC_CXX
4415         ;;
4416     esac
4417     AC_SUBST(BUILD_X86)
4418     AC_SUBST(CXX_X86_BINARY)
4420 AC_SUBST(VCVER)
4421 AC_SUBST(VCTOOLSET)
4422 AC_SUBST(DEVENV)
4423 AC_SUBST(MSVC_CXX)
4425 COM_IS_CLANG=
4426 AC_MSG_CHECKING([whether the compiler is actually Clang])
4427 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4428     #ifndef __clang__
4429     you lose
4430     #endif
4431     int foo=42;
4432     ]])],
4433     [AC_MSG_RESULT([yes])
4434      COM_IS_CLANG=TRUE],
4435     [AC_MSG_RESULT([no])])
4436 AC_SUBST(COM_IS_CLANG)
4438 CLANGVER=
4439 if test "$COM_IS_CLANG" = TRUE; then
4440     AC_MSG_CHECKING([whether Clang is new enough])
4441     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4442         #if !defined __apple_build_version__
4443         #error
4444         #endif
4445         ]])],
4446         [my_apple_clang=yes],[my_apple_clang=])
4447     if test "$my_apple_clang" = yes; then
4448         AC_MSG_RESULT([assumed yes (Apple Clang)])
4449     elif test "$_os" = Emscripten; then
4450         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4451     else
4452         if test "$_os" = WINNT; then
4453             dnl In which case, assume clang-cl:
4454             my_args="/EP /TC"
4455         else
4456             my_args="-E -P"
4457         fi
4458         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC $my_args - | sed 's/ //g'`
4459         CLANG_FULL_VERSION=`echo __clang_version__ | $CC $my_args -`
4460         CLANGVER=`echo $clang_version \
4461             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4462         if test "$CLANGVER" -ge 120000; then
4463             AC_MSG_RESULT([yes ($clang_version)])
4464         else
4465             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 12])
4466         fi
4467         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4468         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4469     fi
4472 SHOWINCLUDES_PREFIX=
4473 if test "$_os" = WINNT; then
4474     dnl We need to guess the prefix of the -showIncludes output, it can be
4475     dnl localized
4476     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4477     echo "#include <stdlib.h>" > conftest.c
4478     SHOWINCLUDES_PREFIX=`VSLANG=1033 $CC $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4479         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4480     rm -f conftest.c conftest.obj
4481     if test -z "$SHOWINCLUDES_PREFIX"; then
4482         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4483     else
4484         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4485     fi
4487 AC_SUBST(SHOWINCLUDES_PREFIX)
4490 # prefix C with ccache if needed
4492 if test "$CCACHE" != ""; then
4493     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4495     AC_LANG_PUSH([C])
4496     save_CFLAGS=$CFLAGS
4497     CFLAGS="$CFLAGS --ccache-skip -O2"
4498     # msvc does not fail on unknown options, check stdout
4499     if test "$COM" = MSC; then
4500         CFLAGS="$CFLAGS -nologo"
4501     fi
4502     save_ac_c_werror_flag=$ac_c_werror_flag
4503     ac_c_werror_flag=yes
4504     dnl an empty program will do, we're checking the compiler flags
4505     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4506                       [use_ccache=yes], [use_ccache=no])
4507     CFLAGS=$save_CFLAGS
4508     ac_c_werror_flag=$save_ac_c_werror_flag
4509     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4510         AC_MSG_RESULT([yes])
4511     else
4512         CC="$CCACHE $CC"
4513         CC_BASE="ccache $CC_BASE"
4514         AC_MSG_RESULT([no])
4515     fi
4516     AC_LANG_POP([C])
4519 # ===================================================================
4520 # check various GCC options that Clang does not support now but maybe
4521 # will somewhen in the future, check them even for GCC, so that the
4522 # flags are set
4523 # ===================================================================
4525 HAVE_GCC_GGDB2=
4526 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4527     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4528     save_CFLAGS=$CFLAGS
4529     CFLAGS="$CFLAGS -Werror -ggdb2"
4530     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4531     CFLAGS=$save_CFLAGS
4532     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4533         AC_MSG_RESULT([yes])
4534     else
4535         AC_MSG_RESULT([no])
4536     fi
4538     if test "$host_cpu" = "m68k"; then
4539         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4540         save_CFLAGS=$CFLAGS
4541         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4542         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4543         CFLAGS=$save_CFLAGS
4544         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4545             AC_MSG_RESULT([yes])
4546         else
4547             AC_MSG_ERROR([no])
4548         fi
4549     fi
4551 AC_SUBST(HAVE_GCC_GGDB2)
4553 dnl ===================================================================
4554 dnl  Test the gcc version
4555 dnl ===================================================================
4556 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4557     AC_MSG_CHECKING([the GCC version])
4558     _gcc_version=`$CC -dumpfullversion`
4559     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4560         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4561     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4563     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4565     if test "$gcc_full_version" -lt 120000; then
4566         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 12])
4567     fi
4568 else
4569     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4570     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4571     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4572     # (which reports itself as GCC 4.2.1).
4573     GCC_VERSION=
4575 AC_SUBST(GCC_VERSION)
4577 dnl Set the ENABLE_DBGUTIL variable
4578 dnl ===================================================================
4579 AC_MSG_CHECKING([whether to build with additional debug utilities])
4580 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4581     ENABLE_DBGUTIL="TRUE"
4582     # this is an extra var so it can have different default on different MSVC
4583     # versions (in case there are version specific problems with it)
4584     MSVC_USE_DEBUG_RUNTIME="TRUE"
4586     AC_MSG_RESULT([yes])
4587     # cppunit and graphite expose STL in public headers
4588     if test "$with_system_cppunit" = "yes"; then
4589         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4590     else
4591         with_system_cppunit=no
4592     fi
4593     if test "$with_system_graphite" = "yes"; then
4594         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4595     else
4596         with_system_graphite=no
4597     fi
4598     if test "$with_system_orcus" = "yes"; then
4599         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4600     else
4601         with_system_orcus=no
4602     fi
4603     if test "$with_system_libcmis" = "yes"; then
4604         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4605     else
4606         with_system_libcmis=no
4607     fi
4608     if test "$with_system_hunspell" = "yes"; then
4609         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4610     else
4611         with_system_hunspell=no
4612     fi
4613     if test "$with_system_gpgmepp" = "yes"; then
4614         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4615     else
4616         with_system_gpgmepp=no
4617     fi
4618     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4619     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4620     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4621     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4622     # of those two is using the system variant:
4623     if test "$with_system_libnumbertext" = "yes"; then
4624         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4625     else
4626         with_system_libnumbertext=no
4627     fi
4628     if test "$with_system_libwps" = "yes"; then
4629         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4630     else
4631         with_system_libwps=no
4632     fi
4633 else
4634     ENABLE_DBGUTIL=""
4635     MSVC_USE_DEBUG_RUNTIME=""
4636     AC_MSG_RESULT([no])
4638 AC_SUBST(ENABLE_DBGUTIL)
4639 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4641 dnl Set the ENABLE_DEBUG variable.
4642 dnl ===================================================================
4643 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4644     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4646 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4647     if test -z "$libo_fuzzed_enable_debug"; then
4648         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4649     else
4650         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4651         enable_debug=yes
4652     fi
4655 AC_MSG_CHECKING([whether to do a debug build])
4656 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4657     ENABLE_DEBUG="TRUE"
4658     if test -n "$ENABLE_DBGUTIL" ; then
4659         AC_MSG_RESULT([yes (dbgutil)])
4660     else
4661         AC_MSG_RESULT([yes])
4662     fi
4663 else
4664     ENABLE_DEBUG=""
4665     AC_MSG_RESULT([no])
4667 AC_SUBST(ENABLE_DEBUG)
4669 dnl ===================================================================
4670 dnl Select the linker to use (gold/lld/ld.bfd/mold).
4671 dnl This is done only after compiler checks (need to know if Clang is
4672 dnl used, for different defaults) and after checking if a debug build
4673 dnl is wanted (non-debug builds get the default linker if not explicitly
4674 dnl specified otherwise).
4675 dnl All checks for linker features/options should come after this.
4676 dnl ===================================================================
4677 check_use_ld()
4679     use_ld=-fuse-ld=${1%%:*}
4680     use_ld_path=${1#*:}
4681     if test "$use_ld_path" != "$1"; then
4682         if test "$COM_IS_CLANG" = TRUE; then
4683             if test "$CLANGVER" -ge 120000; then
4684                 use_ld="${use_ld} --ld-path=${use_ld_path}"
4685             else
4686                 use_ld="-fuse-ld=${use_ld_path}"
4687             fi
4688         else
4689             # I tried to use gcc's '-B<path>' and a directory + symlink setup in
4690             # $BUILDDIR, but libtool always filtered-out that option, so gcc wouldn't
4691             # pickup the alternative linker, when called by libtool for linking.
4692             # For mold, one can use LD_PRELOAD=/usr/lib/mold/mold-wrapper.so instead.
4693             AC_MSG_ERROR([A linker path is just supported with clang, because of libtool's -B filtering!])
4694         fi
4695     fi
4696     use_ld_fail_if_error=$2
4697     use_ld_ok=
4698     AC_MSG_CHECKING([for $use_ld linker support])
4699     use_ld_ldflags_save="$LDFLAGS"
4700     LDFLAGS="$LDFLAGS $use_ld"
4701     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4702 #include <stdio.h>
4703         ],[
4704 printf ("hello world\n");
4705         ])], USE_LD=$use_ld, [])
4706     if test -n "$USE_LD"; then
4707         AC_MSG_RESULT( yes )
4708         use_ld_ok=yes
4709     else
4710         if test -n "$use_ld_fail_if_error"; then
4711             AC_MSG_ERROR( no )
4712         else
4713             AC_MSG_RESULT( no )
4714         fi
4715     fi
4716     if test -n "$use_ld_ok"; then
4717         dnl keep the value of LDFLAGS
4718         return 0
4719     fi
4720     LDFLAGS="$use_ld_ldflags_save"
4721     return 1
4723 USE_LD=
4724 if test "$enable_ld" != "no"; then
4725     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4726         if test -n "$enable_ld"; then
4727             check_use_ld "$enable_ld" fail_if_error
4728         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4729             dnl non-debug builds default to the default linker
4730             true
4731         elif test -n "$COM_IS_CLANG"; then
4732             check_use_ld lld
4733             if test $? -ne 0; then
4734                 check_use_ld gold
4735                 if test $? -ne 0; then
4736                     check_use_ld mold
4737                 fi
4738             fi
4739         else
4740             # For gcc first try gold, new versions also support lld/mold.
4741             check_use_ld gold
4742             if test $? -ne 0; then
4743                 check_use_ld lld
4744                 if test $? -ne 0; then
4745                     check_use_ld mold
4746                 fi
4747             fi
4748         fi
4749         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4750         rm conftest.out
4751         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD|^mold)')
4752         if test -z "$ld_used"; then
4753             ld_used="unknown"
4754         fi
4755         AC_MSG_CHECKING([for linker that is used])
4756         AC_MSG_RESULT([$ld_used])
4757         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4758             if echo "$ld_used" | grep -q "^GNU ld"; then
4759                 AC_MSG_WARN([The default GNU linker is slow, consider using LLD, mold or the GNU gold linker.])
4760                 add_warning "The default GNU linker is slow, consider using LLD, mold or the GNU gold linker."
4761             fi
4762         fi
4763     else
4764         if test "$enable_ld" = "yes"; then
4765             AC_MSG_ERROR([--enable-ld not supported])
4766         fi
4767     fi
4769 AC_SUBST(USE_LD)
4770 AC_SUBST(LD)
4772 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4773 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4774     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4775     bsymbolic_functions_ldflags_save=$LDFLAGS
4776     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4777     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4778 #include <stdio.h>
4779         ],[
4780 printf ("hello world\n");
4781         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4782     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4783         AC_MSG_RESULT( found )
4784     else
4785         AC_MSG_RESULT( not found )
4786     fi
4787     LDFLAGS=$bsymbolic_functions_ldflags_save
4789 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4791 LD_GC_SECTIONS=
4792 if test "$GCC" = "yes"; then
4793     for flag in "--gc-sections" "-dead_strip"; do
4794         AC_MSG_CHECKING([for $flag linker support])
4795         ldflags_save=$LDFLAGS
4796         LDFLAGS="$LDFLAGS -Wl,$flag"
4797         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4798 #include <stdio.h>
4799             ],[
4800 printf ("hello world\n");
4801             ])],[
4802             LD_GC_SECTIONS="-Wl,$flag"
4803             AC_MSG_RESULT( found )
4804             ], [
4805             AC_MSG_RESULT( not found )
4806             ])
4807         LDFLAGS=$ldflags_save
4808         if test -n "$LD_GC_SECTIONS"; then
4809             break
4810         fi
4811     done
4813 AC_SUBST(LD_GC_SECTIONS)
4815 HAVE_EXTERNAL_DWARF=
4816 if test "$enable_split_debug" != no; then
4817     use_split_debug=
4818     if test -n "$ENABLE_LTO"; then
4819         : # Inherently incompatible, since no debug info is created while compiling, GCC complains.
4820     elif test "$enable_split_debug" = yes; then
4821         use_split_debug=1
4822     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4823     elif test "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4824         use_split_debug=1
4825     fi
4826     if test -n "$use_split_debug"; then
4827         if test "$_os" = "Emscripten"; then
4828             TEST_CC_FLAG=-gseparate-dwarf
4829         else
4830             TEST_CC_FLAG=-gsplit-dwarf
4831         fi
4832         AC_MSG_CHECKING([whether $CC_BASE supports $TEST_CC_FLAG])
4833         save_CFLAGS=$CFLAGS
4834         CFLAGS="$CFLAGS -Werror $TEST_CC_FLAG"
4835         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_EXTERNAL_DWARF=TRUE ],[])
4836         CFLAGS=$save_CFLAGS
4837         if test "$HAVE_EXTERNAL_DWARF" = "TRUE"; then
4838             AC_MSG_RESULT([yes])
4839         else
4840             if test "$enable_split_debug" = yes; then
4841                 AC_MSG_ERROR([no])
4842             else
4843                 AC_MSG_RESULT([no])
4844             fi
4845         fi
4846     fi
4847     if test -z "$HAVE_EXTERNAL_DWARF" -a "$test_split_debug" = "yes" -a -n "$use_split_debug"; then
4848         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4849         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4850     fi
4852 AC_SUBST(HAVE_EXTERNAL_DWARF)
4854 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4855 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4856 save_CFLAGS=$CFLAGS
4857 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4858 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4859 CFLAGS=$save_CFLAGS
4860 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4861     AC_MSG_RESULT([yes])
4862 else
4863     AC_MSG_RESULT([no])
4865 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4867 ENABLE_GDB_INDEX=
4868 if test "$enable_gdb_index" != "no"; then
4869     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4870     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4871         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4872         save_CFLAGS=$CFLAGS
4873         CFLAGS="$CFLAGS -Werror -g -ggnu-pubnames"
4874         have_ggnu_pubnames=
4875         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4876         if test "$have_ggnu_pubnames" != "TRUE"; then
4877             if test "$enable_gdb_index" = "yes"; then
4878                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4879             else
4880                 AC_MSG_RESULT( no )
4881             fi
4882         else
4883             AC_MSG_RESULT( yes )
4884             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4885             ldflags_save=$LDFLAGS
4886             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4887             AC_LINK_IFELSE([AC_LANG_PROGRAM([
4888 #include <stdio.h>
4889                 ],[
4890 printf ("hello world\n");
4891                 ])], ENABLE_GDB_INDEX=TRUE, [])
4892             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
4893                 AC_MSG_RESULT( yes )
4894             else
4895                 if test "$enable_gdb_index" = "yes"; then
4896                     AC_MSG_ERROR( no )
4897                 else
4898                     AC_MSG_RESULT( no )
4899                 fi
4900             fi
4901             LDFLAGS=$ldflags_save
4902         fi
4903         CFLAGS=$save_CFLAGS
4904         fi
4905     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4906         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
4907         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
4908     fi
4910 AC_SUBST(ENABLE_GDB_INDEX)
4912 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
4913     enable_sal_log=yes
4915 if test "$enable_sal_log" = yes; then
4916     ENABLE_SAL_LOG=TRUE
4918 AC_SUBST(ENABLE_SAL_LOG)
4920 dnl Check for enable symbols option
4921 dnl ===================================================================
4922 AC_MSG_CHECKING([whether to generate debug information])
4923 if test -z "$enable_symbols"; then
4924     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4925         enable_symbols=yes
4926     else
4927         enable_symbols=no
4928     fi
4930 if test "$enable_symbols" = yes; then
4931     ENABLE_SYMBOLS_FOR=all
4932     AC_MSG_RESULT([yes])
4933 elif test "$enable_symbols" = no; then
4934     ENABLE_SYMBOLS_FOR=
4935     AC_MSG_RESULT([no])
4936 else
4937     # Selective debuginfo.
4938     ENABLE_SYMBOLS_FOR="$enable_symbols"
4939     AC_MSG_RESULT([for "$enable_symbols"])
4941 AC_SUBST(ENABLE_SYMBOLS_FOR)
4943 if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then
4944     # Building on Android with full symbols: without enough memory the linker never finishes currently.
4945     AC_MSG_CHECKING([whether enough memory is available for linking])
4946     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
4947     # Check for 15GB, as Linux reports a bit less than the physical memory size.
4948     if test -n "$mem_size" -a $mem_size -lt 15728640; then
4949         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
4950     else
4951         AC_MSG_RESULT([yes])
4952     fi
4955 ENABLE_OPTIMIZED=
4956 ENABLE_OPTIMIZED_DEBUG=
4957 AC_MSG_CHECKING([whether to compile with optimization flags])
4958 if test -z "$enable_optimized"; then
4959     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4960         enable_optimized=no
4961     else
4962         enable_optimized=yes
4963     fi
4965 if test "$enable_optimized" = yes; then
4966     ENABLE_OPTIMIZED=TRUE
4967     AC_MSG_RESULT([yes])
4968 elif test "$enable_optimized" = debug; then
4969     ENABLE_OPTIMIZED_DEBUG=TRUE
4970     AC_MSG_RESULT([yes (debug)])
4971     HAVE_GCC_OG=
4972     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4973         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
4974         save_CFLAGS=$CFLAGS
4975         CFLAGS="$CFLAGS -Werror -Og"
4976         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
4977         CFLAGS=$save_CFLAGS
4978         if test "$HAVE_GCC_OG" = "TRUE"; then
4979             AC_MSG_RESULT([yes])
4980         else
4981             AC_MSG_RESULT([no])
4982         fi
4983     fi
4984     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
4985         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
4986     fi
4987 else
4988     AC_MSG_RESULT([no])
4990 AC_SUBST(ENABLE_OPTIMIZED)
4991 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
4994 # determine CPUNAME, OS, ...
4996 case "$host_os" in
4998 cygwin*|wsl*)
4999     # Already handled
5000     ;;
5002 darwin*)
5003     COM=GCC
5004     OS=MACOSX
5005     RTL_OS=MacOSX
5006     P_SEP=:
5008     case "$host_cpu" in
5009     aarch64|arm64)
5010         if test "$enable_ios_simulator" = "yes"; then
5011             OS=iOS
5012         else
5013             CPUNAME=AARCH64
5014             RTL_ARCH=AARCH64
5015             PLATFORMID=macosx_aarch64
5016         fi
5017         ;;
5018     x86_64)
5019         if test "$enable_ios_simulator" = "yes"; then
5020             OS=iOS
5021         fi
5022         CPUNAME=X86_64
5023         RTL_ARCH=X86_64
5024         PLATFORMID=macosx_x86_64
5025         ;;
5026     *)
5027         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5028         ;;
5029     esac
5030     ;;
5032 ios*)
5033     COM=GCC
5034     OS=iOS
5035     RTL_OS=iOS
5036     P_SEP=:
5038     case "$host_cpu" in
5039     aarch64|arm64)
5040         if test "$enable_ios_simulator" = "yes"; then
5041             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
5042         fi
5043         ;;
5044     *)
5045         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5046         ;;
5047     esac
5048     CPUNAME=AARCH64
5049     RTL_ARCH=AARCH64
5050     PLATFORMID=ios_arm64
5051     ;;
5053 dragonfly*)
5054     COM=GCC
5055     OS=DRAGONFLY
5056     RTL_OS=DragonFly
5057     P_SEP=:
5059     case "$host_cpu" in
5060     i*86)
5061         CPUNAME=INTEL
5062         RTL_ARCH=x86
5063         PLATFORMID=dragonfly_x86
5064         ;;
5065     x86_64)
5066         CPUNAME=X86_64
5067         RTL_ARCH=X86_64
5068         PLATFORMID=dragonfly_x86_64
5069         ;;
5070     *)
5071         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5072         ;;
5073     esac
5074     ;;
5076 freebsd*)
5077     COM=GCC
5078     RTL_OS=FreeBSD
5079     OS=FREEBSD
5080     P_SEP=:
5082     case "$host_cpu" in
5083     aarch64)
5084         CPUNAME=AARCH64
5085         PLATFORMID=freebsd_aarch64
5086         RTL_ARCH=AARCH64
5087         ;;
5088     i*86)
5089         CPUNAME=INTEL
5090         RTL_ARCH=x86
5091         PLATFORMID=freebsd_x86
5092         ;;
5093     x86_64|amd64)
5094         CPUNAME=X86_64
5095         RTL_ARCH=X86_64
5096         PLATFORMID=freebsd_x86_64
5097         ;;
5098     powerpc64)
5099         CPUNAME=POWERPC64
5100         RTL_ARCH=PowerPC_64
5101         PLATFORMID=freebsd_powerpc64
5102         ;;
5103     powerpc|powerpcspe)
5104         CPUNAME=POWERPC
5105         RTL_ARCH=PowerPC
5106         PLATFORMID=freebsd_powerpc
5107         ;;
5108     *)
5109         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5110         ;;
5111     esac
5112     ;;
5114 haiku*)
5115     COM=GCC
5116     GUIBASE=haiku
5117     RTL_OS=Haiku
5118     OS=HAIKU
5119     P_SEP=:
5121     case "$host_cpu" in
5122     i*86)
5123         CPUNAME=INTEL
5124         RTL_ARCH=x86
5125         PLATFORMID=haiku_x86
5126         ;;
5127     x86_64|amd64)
5128         CPUNAME=X86_64
5129         RTL_ARCH=X86_64
5130         PLATFORMID=haiku_x86_64
5131         ;;
5132     *)
5133         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5134         ;;
5135     esac
5136     ;;
5138 kfreebsd*)
5139     COM=GCC
5140     OS=LINUX
5141     RTL_OS=kFreeBSD
5142     P_SEP=:
5144     case "$host_cpu" in
5146     i*86)
5147         CPUNAME=INTEL
5148         RTL_ARCH=x86
5149         PLATFORMID=kfreebsd_x86
5150         ;;
5151     x86_64)
5152         CPUNAME=X86_64
5153         RTL_ARCH=X86_64
5154         PLATFORMID=kfreebsd_x86_64
5155         ;;
5156     *)
5157         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5158         ;;
5159     esac
5160     ;;
5162 linux-gnu*|linux-musl*)
5163     COM=GCC
5164     OS=LINUX
5165     RTL_OS=Linux
5166     P_SEP=:
5168     case "$host_cpu" in
5170     aarch64)
5171         CPUNAME=AARCH64
5172         PLATFORMID=linux_aarch64
5173         RTL_ARCH=AARCH64
5174         EPM_FLAGS="-a arm64"
5175         ;;
5176     alpha)
5177         CPUNAME=AXP
5178         RTL_ARCH=ALPHA
5179         PLATFORMID=linux_alpha
5180         ;;
5181     arm*)
5182         CPUNAME=ARM
5183         EPM_FLAGS="-a arm"
5184         RTL_ARCH=ARM_EABI
5185         PLATFORMID=linux_arm_eabi
5186         case "$host_cpu" in
5187         arm*-linux)
5188             RTL_ARCH=ARM_OABI
5189             PLATFORMID=linux_arm_oabi
5190             ;;
5191         esac
5192         ;;
5193     hppa)
5194         CPUNAME=HPPA
5195         RTL_ARCH=HPPA
5196         EPM_FLAGS="-a hppa"
5197         PLATFORMID=linux_hppa
5198         ;;
5199     i*86)
5200         CPUNAME=INTEL
5201         RTL_ARCH=x86
5202         PLATFORMID=linux_x86
5203         ;;
5204     ia64)
5205         CPUNAME=IA64
5206         RTL_ARCH=IA64
5207         PLATFORMID=linux_ia64
5208         ;;
5209     mips)
5210         CPUNAME=MIPS
5211         RTL_ARCH=MIPS_EB
5212         EPM_FLAGS="-a mips"
5213         PLATFORMID=linux_mips_eb
5214         ;;
5215     mips64)
5216         CPUNAME=MIPS64
5217         RTL_ARCH=MIPS64_EB
5218         EPM_FLAGS="-a mips64"
5219         PLATFORMID=linux_mips64_eb
5220         ;;
5221     mips64el)
5222         CPUNAME=MIPS64
5223         RTL_ARCH=MIPS64_EL
5224         EPM_FLAGS="-a mips64el"
5225         PLATFORMID=linux_mips64_el
5226         ;;
5227     mipsel)
5228         CPUNAME=MIPS
5229         RTL_ARCH=MIPS_EL
5230         EPM_FLAGS="-a mipsel"
5231         PLATFORMID=linux_mips_el
5232         ;;
5233     riscv64)
5234         CPUNAME=RISCV64
5235         RTL_ARCH=RISCV64
5236         EPM_FLAGS="-a riscv64"
5237         PLATFORMID=linux_riscv64
5238         ;;
5239     m68k)
5240         CPUNAME=M68K
5241         RTL_ARCH=M68K
5242         PLATFORMID=linux_m68k
5243         ;;
5244     powerpc)
5245         CPUNAME=POWERPC
5246         RTL_ARCH=PowerPC
5247         PLATFORMID=linux_powerpc
5248         ;;
5249     powerpc64)
5250         CPUNAME=POWERPC64
5251         RTL_ARCH=PowerPC_64
5252         PLATFORMID=linux_powerpc64
5253         ;;
5254     powerpc64le)
5255         CPUNAME=POWERPC64
5256         RTL_ARCH=PowerPC_64_LE
5257         PLATFORMID=linux_powerpc64_le
5258         ;;
5259     sparc)
5260         CPUNAME=SPARC
5261         RTL_ARCH=SPARC
5262         PLATFORMID=linux_sparc
5263         ;;
5264     sparc64)
5265         CPUNAME=SPARC64
5266         RTL_ARCH=SPARC64
5267         PLATFORMID=linux_sparc64
5268         ;;
5269     s390x)
5270         CPUNAME=S390X
5271         RTL_ARCH=S390x
5272         PLATFORMID=linux_s390x
5273         ;;
5274     x86_64)
5275         CPUNAME=X86_64
5276         RTL_ARCH=X86_64
5277         PLATFORMID=linux_x86_64
5278         ;;
5279     loongarch64)
5280         CPUNAME=LOONGARCH64
5281         RTL_ARCH=LOONGARCH64
5282         PLATFORMID=linux_loongarch64
5283         ;;
5284     *)
5285         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5286         ;;
5287     esac
5288     ;;
5290 linux-android*)
5291     COM=GCC
5292     OS=ANDROID
5293     RTL_OS=Android
5294     P_SEP=:
5296     case "$host_cpu" in
5298     arm|armel)
5299         CPUNAME=ARM
5300         RTL_ARCH=ARM_EABI
5301         PLATFORMID=android_arm_eabi
5302         ;;
5303     aarch64)
5304         CPUNAME=AARCH64
5305         RTL_ARCH=AARCH64
5306         PLATFORMID=android_aarch64
5307         ;;
5308     i*86)
5309         CPUNAME=INTEL
5310         RTL_ARCH=x86
5311         PLATFORMID=android_x86
5312         ;;
5313     x86_64)
5314         CPUNAME=X86_64
5315         RTL_ARCH=X86_64
5316         PLATFORMID=android_x86_64
5317         ;;
5318     *)
5319         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5320         ;;
5321     esac
5322     ;;
5324 *netbsd*)
5325     COM=GCC
5326     OS=NETBSD
5327     RTL_OS=NetBSD
5328     P_SEP=:
5330     case "$host_cpu" in
5331     i*86)
5332         CPUNAME=INTEL
5333         RTL_ARCH=x86
5334         PLATFORMID=netbsd_x86
5335         ;;
5336     powerpc)
5337         CPUNAME=POWERPC
5338         RTL_ARCH=PowerPC
5339         PLATFORMID=netbsd_powerpc
5340         ;;
5341     sparc)
5342         CPUNAME=SPARC
5343         RTL_ARCH=SPARC
5344         PLATFORMID=netbsd_sparc
5345         ;;
5346     x86_64)
5347         CPUNAME=X86_64
5348         RTL_ARCH=X86_64
5349         PLATFORMID=netbsd_x86_64
5350         ;;
5351     *)
5352         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5353         ;;
5354     esac
5355     ;;
5357 openbsd*)
5358     COM=GCC
5359     OS=OPENBSD
5360     RTL_OS=OpenBSD
5361     P_SEP=:
5363     case "$host_cpu" in
5364     i*86)
5365         CPUNAME=INTEL
5366         RTL_ARCH=x86
5367         PLATFORMID=openbsd_x86
5368         ;;
5369     x86_64)
5370         CPUNAME=X86_64
5371         RTL_ARCH=X86_64
5372         PLATFORMID=openbsd_x86_64
5373         ;;
5374     *)
5375         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5376         ;;
5377     esac
5378     SOLARINC="$SOLARINC -I/usr/local/include"
5379     ;;
5381 solaris*)
5382     COM=GCC
5383     OS=SOLARIS
5384     RTL_OS=Solaris
5385     P_SEP=:
5387     case "$host_cpu" in
5388     i*86)
5389         CPUNAME=INTEL
5390         RTL_ARCH=x86
5391         PLATFORMID=solaris_x86
5392         ;;
5393     sparc)
5394         CPUNAME=SPARC
5395         RTL_ARCH=SPARC
5396         PLATFORMID=solaris_sparc
5397         ;;
5398     sparc64)
5399         CPUNAME=SPARC64
5400         RTL_ARCH=SPARC64
5401         PLATFORMID=solaris_sparc64
5402         ;;
5403     *)
5404         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5405         ;;
5406     esac
5407     SOLARINC="$SOLARINC -I/usr/local/include"
5408     ;;
5410 emscripten*)
5411     COM=GCC
5412     OS=EMSCRIPTEN
5413     RTL_OS=Emscripten
5414     P_SEP=:
5416     case "$host_cpu" in
5417     wasm32|wasm64)
5418         ;;
5419     *)
5420         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5421         ;;
5422     esac
5423     CPUNAME=INTEL
5424     RTL_ARCH=x86
5425     PLATFORMID=linux_x86
5426     ;;
5429     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5430     ;;
5431 esac
5433 DISABLE_GUI=""
5434 if test "$enable_gui" = "no"; then
5435     if test "$using_x11" != yes; then
5436         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5437     fi
5438     USING_X11=
5439     DISABLE_GUI=TRUE
5440     test_epoxy=no
5441 else
5442     AC_DEFINE(HAVE_FEATURE_UI)
5444 AC_SUBST(DISABLE_GUI)
5446 if test "$with_x" = "no"; then
5447     USING_X11=
5450 if test -z "$USING_X11" -a "$enable_qt5" = "yes" -a "$enable_gen" = "yes"; then
5451     AC_MSG_ERROR([Can't select gen VCL plugin, if --without-x is used!])
5454 if test "$using_x11" = yes; then
5455     if test "$USING_X11" = TRUE; then
5456         AC_DEFINE(USING_X11)
5457     else
5458         disable_x11_tests
5459         if test "$DISABLE_DYNLOADING" = TRUE; then
5460             test_qt5=yes
5461         fi
5462     fi
5463 else
5464     if test "$USING_X11" = TRUE; then
5465         AC_MSG_ERROR([Platform doesn't support X11 (\$using_x11), but \$USING_X11 is set!])
5466     fi
5469 WORKDIR="${BUILDDIR}/workdir"
5470 INSTDIR="${BUILDDIR}/instdir"
5471 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5472 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5473 AC_SUBST(COM)
5474 AC_SUBST(CPUNAME)
5475 AC_SUBST(RTL_OS)
5476 AC_SUBST(RTL_ARCH)
5477 AC_SUBST(EPM_FLAGS)
5478 AC_SUBST(USING_X11)
5479 AC_SUBST([INSTDIR])
5480 AC_SUBST([INSTROOT])
5481 AC_SUBST([INSTROOTBASE])
5482 AC_SUBST(OS)
5483 AC_SUBST(P_SEP)
5484 AC_SUBST(WORKDIR)
5485 AC_SUBST(PLATFORMID)
5486 AC_SUBST(WINDOWS_X64)
5487 AC_DEFINE_UNQUOTED(SDKDIR, "$INSTDIR/$SDKDIRNAME")
5488 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5490 if test "$OS" = WNT -a "$COM" = MSC; then
5491     case "$CPUNAME" in
5492     INTEL) CPPU_ENV=msci ;;
5493     X86_64) CPPU_ENV=mscx ;;
5494     AARCH64) CPPU_ENV=msca ;;
5495     *)
5496         AC_MSG_ERROR([Unknown \$CPUNAME '$CPUNAME' for $OS / $COM"])
5497         ;;
5498     esac
5499 else
5500     CPPU_ENV=gcc3
5502 AC_SUBST(CPPU_ENV)
5504 dnl ===================================================================
5505 dnl Test which package format to use
5506 dnl ===================================================================
5507 AC_MSG_CHECKING([which package format to use])
5508 if test -n "$with_package_format" -a "$with_package_format" != no; then
5509     for i in $with_package_format; do
5510         case "$i" in
5511         bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5512             ;;
5513         *)
5514             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5515 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5516 deb - Debian software distribution
5517 pkg - Solaris software distribution
5518 rpm - RedHat software distribution
5520 LibreOffice additionally supports:
5521 archive - .tar.gz or .zip
5522 dmg - macOS .dmg
5523 installed - installation tree
5524 msi - Windows .msi
5525         ])
5526             ;;
5527         esac
5528     done
5529     # fakeroot is needed to ensure correct file ownerships/permissions
5530     # inside deb packages and tar archives created on Linux and Solaris.
5531     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5532         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5533         if test "$FAKEROOT" = "no"; then
5534             AC_MSG_ERROR(
5535                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5536         fi
5537     fi
5538     PKGFORMAT="$with_package_format"
5539     AC_MSG_RESULT([$PKGFORMAT])
5540 else
5541     PKGFORMAT=
5542     AC_MSG_RESULT([none])
5544 AC_SUBST(PKGFORMAT)
5546 dnl ===================================================================
5547 dnl handle help related options
5549 dnl If you change help related options, please update README.help
5550 dnl ===================================================================
5552 ENABLE_HTMLHELP=
5553 HELP_OMINDEX_PAGE=
5554 HELP_ONLINE=
5555 WITH_HELPPACKS=
5557 AC_MSG_CHECKING([which help to build])
5558 if test -n "$with_help" -a "$with_help" != "no"; then
5559     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5560     BUILD_TYPE="$BUILD_TYPE HELP"
5561     case "$with_help" in
5562     "html")
5563         ENABLE_HTMLHELP=TRUE
5564         WITH_HELPPACKS=TRUE
5565         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5566         AC_MSG_RESULT([HTML (local)])
5567         ;;
5568     "online")
5569         ENABLE_HTMLHELP=TRUE
5570         HELP_ONLINE=TRUE
5571         AC_MSG_RESULT([HTML (online)])
5572         ;;
5573     yes)
5574         WITH_HELPPACKS=TRUE
5575         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5576         AC_MSG_RESULT([XML (local)])
5577         ;;
5578     *)
5579         AC_MSG_ERROR([Unknown --with-help=$with_help])
5580         ;;
5581     esac
5582 else
5583     AC_MSG_RESULT([no])
5586 AC_MSG_CHECKING([if we need to build the help index tooling])
5587 if test \( "$with_help" = yes -o "$enable_extension_integration" != no \) -a -z "$DISABLE_DYNLOADING"; then
5588     BUILD_TYPE="$BUILD_TYPE HELPTOOLS"
5589     test_clucene=yes
5590     AC_MSG_RESULT([yes])
5591 else
5592     AC_MSG_RESULT([no])
5595 AC_MSG_CHECKING([whether to enable xapian-omega support for online help])
5596 if test -n "$with_omindex" -a "$with_omindex" != "no"; then
5597     if test "$HELP_ONLINE" != TRUE; then
5598         AC_MSG_ERROR([Can't build xapian-omega index without --help=online])
5599     fi
5600     case "$with_omindex" in
5601     "server")
5602         HELP_OMINDEX_PAGE=TRUE
5603         AC_MSG_RESULT([SERVER])
5604         ;;
5605     "noxap")
5606         AC_MSG_RESULT([NOXAP])
5607         ;;
5608     *)
5609         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5610         ;;
5611     esac
5612 else
5613     AC_MSG_RESULT([no])
5616 AC_MSG_CHECKING([whether to include the XML-help support])
5617 if test "$enable_xmlhelp" = yes; then
5618     BUILD_TYPE="$BUILD_TYPE XMLHELP"
5619     test_clucene=yes
5620     AC_DEFINE(HAVE_FEATURE_XMLHELP)
5621     AC_MSG_RESULT([yes])
5622 else
5623     if test "$with_help" = yes; then
5624         add_warning "Building the XML help, but LO with disabled xmlhelp support. Generated help can't be accessed from this LO build!"
5625     fi
5626     AC_MSG_RESULT([no])
5629 dnl Test whether to integrate helppacks into the product's installer
5630 AC_MSG_CHECKING([for helppack integration])
5631 if test -z "$WITH_HELPPACKS" -o "$with_helppack_integration" = no; then
5632     AC_MSG_RESULT([no integration])
5633 else
5634     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
5635     AC_MSG_RESULT([integration])
5638 AC_SUBST([ENABLE_HTMLHELP])
5639 AC_SUBST([HELP_OMINDEX_PAGE])
5640 AC_SUBST([HELP_ONLINE])
5641 # WITH_HELPPACKS is used only in configure
5643 dnl ===================================================================
5644 dnl Set up a different compiler to produce tools to run on the build
5645 dnl machine when doing cross-compilation
5646 dnl ===================================================================
5648 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5649 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5650 if test "$cross_compiling" = "yes"; then
5651     AC_MSG_CHECKING([for BUILD platform configuration])
5652     echo
5653     rm -rf CONF-FOR-BUILD config_build.mk
5654     mkdir CONF-FOR-BUILD
5655     # Here must be listed all files needed when running the configure script. In particular, also
5656     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5657     # keep them in the same order as there.
5658     (cd $SRC_ROOT && tar cf - \
5659         config.guess \
5660         bin/get_config_variables \
5661         solenv/bin/getcompver.awk \
5662         solenv/inc/langlist.mk \
5663         download.lst \
5664         config_host.mk.in \
5665         config_host_lang.mk.in \
5666         Makefile.in \
5667         lo.xcent.in \
5668         bin/bffvalidator.sh.in \
5669         bin/odfvalidator.sh.in \
5670         bin/officeotron.sh.in \
5671         hardened_runtime.xcent.in \
5672         instsetoo_native/util/openoffice.lst.in \
5673         config_host/*.in \
5674         sysui/desktop/macosx/Info.plist.in \
5675         .vscode/vs-code-template.code-workspace.in \
5676         solenv/lockfile/autoconf.h.in \
5677         ) \
5678     | (cd CONF-FOR-BUILD && tar xf -)
5679     cp configure CONF-FOR-BUILD
5680     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5681     (
5682     unset COM USING_X11 OS CPUNAME
5683     unset CC CXX SYSBASE CFLAGS
5684     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5685     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5686     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5687     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5688     if test -n "$CC_FOR_BUILD"; then
5689         export CC="$CC_FOR_BUILD"
5690         CC_BASE=`first_arg_basename "$CC"`
5691     fi
5692     if test -n "$CXX_FOR_BUILD"; then
5693         export CXX="$CXX_FOR_BUILD"
5694         CXX_BASE=`first_arg_basename "$CXX"`
5695     fi
5696     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5697     cd CONF-FOR-BUILD
5699     # Handle host configuration, which affects the cross-toolset too
5700     sub_conf_opts=""
5701     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5702     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5703     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5704     # While we don't need scripting support, we don't have a PYTHON_FOR_BUILD Java equivalent, so must enable scripting for Java
5705     if test -n "$ENABLE_JAVA"; then
5706         case "$_os" in
5707         Android)
5708             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5709             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5710             ;;
5711         *)
5712             if test -z "$with_jdk_home"; then
5713                 AC_MSG_ERROR([Missing host JDK! This can't be detected for the build OS, so you have to specify it with --with-jdk-home.])
5714             fi
5715             ;;
5716         esac
5717     else
5718         sub_conf_opts="$sub_conf_opts --without-java"
5719     fi
5720     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5721     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no --disable-database-connectivity"
5722     test -n "$with_help" -a "$with_help" != "no" && sub_conf_opts="$sub_conf_opts --with-help=$with_help"
5723     test "$enable_extensions" = yes || sub_conf_opts="$sub_conf_opts --disable-extensions"
5724     test "${enable_ld+set}" = set -a "$build_cpu" = "$host_cpu" && sub_conf_opts="$sub_conf_opts --enable-ld=${enable_ld}"
5725     test "${enable_pch+set}" = set && sub_conf_opts="$sub_conf_opts --enable-pch=${enable_pch}"
5726     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5727     test "${with_system_lockfile+set}" = set && sub_conf_opts="$sub_conf_opts --with-system-lockfile=${with_system_lockfile}"
5728     test "${enable_fuzzers}" = yes && sub_conf_opts="$sub_conf_opts --without-system-libxml"
5729     if test "$_os" = "Emscripten"; then
5730         sub_conf_opts="$sub_conf_opts --without-system-libxml --without-system-fontconfig --without-system-freetype --without-system-zlib"
5731         if test "${with_main_module+set}" = set; then
5732             sub_conf_opts="$sub_conf_opts --with-main-module=${with_main_module}"
5733         else
5734             sub_conf_opts="$sub_conf_opts --with-main-module=writer"
5735         fi
5736     fi
5737     # windows uses full-internal python and that in turn relies on openssl, so also enable openssl
5738     # when cross-compiling for aarch64, overriding the defaults below
5739     test "${PLATFORMID}" = "windows_aarch64" && sub_conf_opts="$sub_conf_opts --enable-openssl --with-tls=openssl"
5741     # Don't bother having configure look for stuff not needed for the build platform anyway
5742     # WARNING: any option with an argument containing spaces must be handled separately (see --with-theme)
5743     sub_conf_defaults=" \
5744         --build="$build_alias" \
5745         --disable-cairo-canvas \
5746         --disable-cups \
5747         --disable-customtarget-components \
5748         --disable-firebird-sdbc \
5749         --disable-gpgmepp \
5750         --disable-gstreamer-1-0 \
5751         --disable-gtk3 \
5752         --disable-gtk4 \
5753         --disable-libcmis \
5754         --disable-mariadb-sdbc \
5755         --disable-nss \
5756         --disable-online-update \
5757         --disable-opencl \
5758         --disable-openssl \
5759         --disable-pdfimport \
5760         --disable-postgresql-sdbc \
5761         --disable-skia \
5762         --disable-xmlhelp \
5763         --enable-dynamic-loading \
5764         --enable-icecream="$enable_icecream" \
5765         --without-doxygen \
5766         --without-tls \
5767         --without-webdav \
5768         --without-x \
5770     # single quotes added for better readability in case of spaces
5771     echo "    Running CONF-FOR-BUILD/configure" \
5772         $sub_conf_defaults \
5773         --with-parallelism="'$with_parallelism'" \
5774         --with-theme="'$with_theme'" \
5775         --with-vendor="'$with_vendor'" \
5776         $sub_conf_opts \
5777         $with_build_platform_configure_options \
5778         --srcdir=$srcdir
5780     ./configure \
5781         $sub_conf_defaults \
5782         --with-parallelism="$with_parallelism" \
5783         --with-theme="$with_theme" \
5784         "--with-vendor=$with_vendor" \
5785         $sub_conf_opts \
5786         $with_build_platform_configure_options \
5787         --srcdir=$srcdir \
5788         2>&1 | sed -e 's/^/    /'
5789     if test [${PIPESTATUS[0]}] -ne 0; then
5790         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5791     fi
5793     # filter permitted build targets
5794     PERMITTED_BUILD_TARGETS="
5795         AVMEDIA
5796         BOOST
5797         CAIRO
5798         CLUCENE
5799         CURL
5800         DBCONNECTIVITY
5801         DESKTOP
5802         DRAGONBOX
5803         DYNLOADING
5804         EPOXY
5805         EXPAT
5806         FROZEN
5807         GLM
5808         GRAPHITE
5809         HARFBUZZ
5810         HELPTOOLS
5811         ICU
5812         LCMS2
5813         LIBJPEG_TURBO
5814         LIBLANGTAG
5815         LibO
5816         LIBFFI
5817         LIBPN
5818         LIBTIFF
5819         LIBWEBP
5820         LIBXML2
5821         LIBXSLT
5822         MDDS
5823         NATIVE
5824         OPENSSL
5825         ORCUS
5826         PYTHON
5827         SCRIPTING
5828         ZLIB
5830     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5831     # newlined lists, to use grep as a filter
5832     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5833     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5834     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5835     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5837     cp config_host.mk ../config_build.mk
5838     cp config_host_lang.mk ../config_build_lang.mk
5839     mv config.log ../config.Build.log
5840     mkdir -p ../config_build
5841     mv config_host/*.h ../config_build
5842     test -f "$WARNINGS_FILE" && mv "$WARNINGS_FILE" "../$WARNINGS_FILE_FOR_BUILD"
5844     # all these will get a _FOR_BUILD postfix
5845     DIRECT_FOR_BUILD_SETTINGS="
5846         CC
5847         CPPU_ENV
5848         CXX
5849         ILIB
5850         JAVA_HOME
5851         JAVAIFLAGS
5852         JDK
5853         JDK_SECURITYMANAGER_DISALLOWED
5854         LIBO_BIN_FOLDER
5855         LIBO_LIB_FOLDER
5856         LIBO_URE_LIB_FOLDER
5857         LIBO_URE_MISC_FOLDER
5858         OS
5859         SDKDIRNAME
5860         SYSTEM_LIBXML
5861         SYSTEM_LIBXSLT
5863     # these overwrite host config with build config
5864     OVERWRITING_SETTINGS="
5865         ANT
5866         ANT_HOME
5867         ANT_LIB
5868         JAVA_SOURCE_VER
5869         JAVA_TARGET_VER
5870         JAVACFLAGS
5871         JAVACOMPILER
5872         JAVADOC
5873         JAVADOCISGJDOC
5874         LOCKFILE
5875         SYSTEM_GENBRK
5876         SYSTEM_GENCCODE
5877         SYSTEM_GENCMN
5879     # these need some special handling
5880     EXTRA_HANDLED_SETTINGS="
5881         INSTDIR
5882         INSTROOT
5883         PATH
5884         WORKDIR
5886     OLD_PATH=$PATH
5887     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
5888     BUILD_PATH=$PATH
5889     PATH=$OLD_PATH
5891     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
5892     echo "$line" >>build-config
5894     for V in $DIRECT_FOR_BUILD_SETTINGS; do
5895         VV='$'$V
5896         VV=`eval "echo $VV"`
5897         if test -n "$VV"; then
5898             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
5899             echo "$line" >>build-config
5900         fi
5901     done
5903     for V in $OVERWRITING_SETTINGS; do
5904         VV='$'$V
5905         VV=`eval "echo $VV"`
5906         if test -n "$VV"; then
5907             line=${V}='${'${V}:-$VV'}'
5908             echo "$line" >>build-config
5909         fi
5910     done
5912     for V in INSTDIR INSTROOT WORKDIR; do
5913         VV='$'$V
5914         VV=`eval "echo $VV"`
5915         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
5916         if test -n "$VV"; then
5917             line="${V}_FOR_BUILD='$VV'"
5918             echo "$line" >>build-config
5919         fi
5920     done
5922     )
5923     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
5924     test -f config_build.mk || AC_MSG_ERROR([A file called config_build.mk was supposed to have been copied here, but it isn't found])
5925     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
5926              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
5928     eval `cat CONF-FOR-BUILD/build-config`
5930     AC_MSG_RESULT([checking for BUILD platform configuration... done])
5932     rm -rf CONF-FOR-BUILD
5933 else
5934     OS_FOR_BUILD="$OS"
5935     CC_FOR_BUILD="$CC"
5936     CPPU_ENV_FOR_BUILD="$CPPU_ENV"
5937     CXX_FOR_BUILD="$CXX"
5938     INSTDIR_FOR_BUILD="$INSTDIR"
5939     INSTROOT_FOR_BUILD="$INSTROOT"
5940     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
5941     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
5942     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
5943     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
5944     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
5945     WORKDIR_FOR_BUILD="$WORKDIR"
5947 AC_SUBST(OS_FOR_BUILD)
5948 AC_SUBST(INSTDIR_FOR_BUILD)
5949 AC_SUBST(INSTROOT_FOR_BUILD)
5950 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
5951 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
5952 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
5953 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
5954 AC_SUBST(SDKDIRNAME_FOR_BUILD)
5955 AC_SUBST(WORKDIR_FOR_BUILD)
5956 AC_SUBST(CC_FOR_BUILD)
5957 AC_SUBST(CXX_FOR_BUILD)
5958 AC_SUBST(CPPU_ENV_FOR_BUILD)
5960 dnl ===================================================================
5961 dnl Check for lockfile deps
5962 dnl ===================================================================
5963 if test -z "$CROSS_COMPILING"; then
5964     test -n "$LOCKFILE" -a "${with_system_lockfile+set}" != set && with_system_lockfile="$LOCKFILE"
5965     test "${with_system_lockfile+set}" = set || with_system_lockfile=no
5966     AC_MSG_CHECKING([which lockfile binary to use])
5967     case "$with_system_lockfile" in
5968     yes)
5969         AC_MSG_RESULT([external])
5970         AC_PATH_PROGS([LOCKFILE],[dotlockfile lockfile])
5971         ;;
5972     no)
5973         AC_MSG_RESULT([internal])
5974         ;;
5975     *)
5976         if test -x "$with_system_lockfile"; then
5977             LOCKFILE="$with_system_lockfile"
5978         else
5979             AC_MSG_ERROR(['$with_system_lockfile' is not executable.])
5980         fi
5981         AC_MSG_RESULT([$with_system_lockfile])
5982         ;;
5983     esac
5986 if test -n "$LOCKFILE" -a "$DISABLE_DYNLOADING" = TRUE; then
5987     add_warning "The default system lockfile has increasing poll intervals up to 60s, so linking executables may be delayed."
5990 AC_CHECK_HEADERS([getopt.h paths.h sys/param.h])
5991 AC_CHECK_FUNCS([utime utimes])
5992 AC_SUBST(LOCKFILE)
5994 dnl ===================================================================
5995 dnl Check for syslog header
5996 dnl ===================================================================
5997 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
5999 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
6000 dnl ===================================================================
6001 AC_MSG_CHECKING([whether to turn warnings to errors])
6002 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
6003     ENABLE_WERROR="TRUE"
6004     PYTHONWARNINGS="error"
6005     AC_MSG_RESULT([yes])
6006 else
6007     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
6008         ENABLE_WERROR="TRUE"
6009         PYTHONWARNINGS="error"
6010         AC_MSG_RESULT([yes])
6011     else
6012         AC_MSG_RESULT([no])
6013     fi
6015 AC_SUBST(ENABLE_WERROR)
6016 AC_SUBST(PYTHONWARNINGS)
6018 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
6019 dnl ===================================================================
6020 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
6021 if test -z "$enable_assert_always_abort"; then
6022    if test "$ENABLE_DEBUG" = TRUE; then
6023        enable_assert_always_abort=yes
6024    else
6025        enable_assert_always_abort=no
6026    fi
6028 if test "$enable_assert_always_abort" = "yes"; then
6029     ASSERT_ALWAYS_ABORT="TRUE"
6030     AC_MSG_RESULT([yes])
6031 else
6032     ASSERT_ALWAYS_ABORT="FALSE"
6033     AC_MSG_RESULT([no])
6035 AC_SUBST(ASSERT_ALWAYS_ABORT)
6037 # Determine whether to use ooenv for the instdir installation
6038 # ===================================================================
6039 if test $_os != "WINNT" -a $_os != "Darwin"; then
6040     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
6041     if test -z "$enable_ooenv"; then
6042         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
6043             enable_ooenv=yes
6044         else
6045             enable_ooenv=no
6046         fi
6047     fi
6048     if test "$enable_ooenv" = "no"; then
6049         AC_MSG_RESULT([no])
6050     else
6051         ENABLE_OOENV="TRUE"
6052         AC_MSG_RESULT([yes])
6053     fi
6055 AC_SUBST(ENABLE_OOENV)
6057 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
6058     if test "$enable_qt5" = "no"; then
6059         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
6060     else
6061         enable_qt5=yes
6062     fi
6065 if test "$test_kf6" = "yes" -a "$enable_kf6" = "yes"; then
6066     if test "$enable_qt6" = "no"; then
6067         AC_MSG_ERROR([KF6 support depends on QT6, so it conflicts with --disable-qt6])
6068     else
6069         enable_qt6=yes
6070     fi
6074 AC_MSG_CHECKING([whether to build the pagein binaries for oosplash])
6075 if test "${enable_pagein}" != no -a -z "$DISABLE_DYNLOADING"; then
6076     AC_MSG_RESULT([yes])
6077     ENABLE_PAGEIN=TRUE
6078     AC_DEFINE(HAVE_FEATURE_PAGEIN)
6079 else
6080     AC_MSG_RESULT([no])
6082 AC_SUBST(ENABLE_PAGEIN)
6084 dnl ===================================================================
6085 dnl check for cups support
6086 dnl ===================================================================
6088 AC_MSG_CHECKING([whether to enable CUPS support])
6089 if test "$test_cups" = yes -a "$enable_cups" != no; then
6090     ENABLE_CUPS=TRUE
6091     AC_MSG_RESULT([yes])
6093     AC_MSG_CHECKING([whether cups support is present])
6094     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
6095     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
6096     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
6097         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
6098     fi
6099 else
6100     AC_MSG_RESULT([no])
6103 AC_SUBST(ENABLE_CUPS)
6105 libo_CHECK_SYSTEM_MODULE([fontconfig],[FONTCONFIG],[fontconfig >= 2.12.0],,system,TRUE)
6107 dnl whether to find & fetch external tarballs?
6108 dnl ===================================================================
6109 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
6110    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6111        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
6112    else
6113        TARFILE_LOCATION="$LODE_HOME/ext_tar"
6114    fi
6116 if test -z "$TARFILE_LOCATION"; then
6117     if test -d "$SRC_ROOT/src" ; then
6118         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
6119         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
6120     fi
6121     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
6122 else
6123     AbsolutePath "$TARFILE_LOCATION"
6124     PathFormat "${absolute_path}"
6125     TARFILE_LOCATION="${formatted_path_unix}"
6127 AC_SUBST(TARFILE_LOCATION)
6129 AC_MSG_CHECKING([whether we want to fetch tarballs])
6130 if test "$enable_fetch_external" != "no"; then
6131     if test "$with_all_tarballs" = "yes"; then
6132         AC_MSG_RESULT([yes, all of them])
6133         DO_FETCH_TARBALLS="ALL"
6134     else
6135         AC_MSG_RESULT([yes, if we use them])
6136         DO_FETCH_TARBALLS="TRUE"
6137     fi
6138 else
6139     AC_MSG_RESULT([no])
6140     DO_FETCH_TARBALLS=
6142 AC_SUBST(DO_FETCH_TARBALLS)
6144 dnl Test whether to include MySpell dictionaries
6145 dnl ===================================================================
6146 AC_MSG_CHECKING([whether to include MySpell dictionaries])
6147 if test "$with_myspell_dicts" = "yes"; then
6148     AC_MSG_RESULT([yes])
6149     WITH_MYSPELL_DICTS=TRUE
6150     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
6151     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
6152 else
6153     AC_MSG_RESULT([no])
6154     WITH_MYSPELL_DICTS=
6156 AC_SUBST(WITH_MYSPELL_DICTS)
6158 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
6159 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
6160     if test "$with_system_dicts" = yes; then
6161         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
6162     fi
6163     with_system_dicts=no
6166 AC_MSG_CHECKING([whether to use dicts from external paths])
6167 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
6168     AC_MSG_RESULT([yes])
6169     SYSTEM_DICTS=TRUE
6170     AC_MSG_CHECKING([for spelling dictionary directory])
6171     if test -n "$with_external_dict_dir"; then
6172         DICT_SYSTEM_DIR=file://$with_external_dict_dir
6173     else
6174         DICT_SYSTEM_DIR=file:///usr/share/hunspell
6175         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
6176             DICT_SYSTEM_DIR=file:///usr/share/myspell
6177         fi
6178     fi
6179     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
6180     AC_MSG_CHECKING([for hyphenation patterns directory])
6181     if test -n "$with_external_hyph_dir"; then
6182         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
6183     else
6184         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
6185     fi
6186     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
6187     AC_MSG_CHECKING([for thesaurus directory])
6188     if test -n "$with_external_thes_dir"; then
6189         THES_SYSTEM_DIR=file://$with_external_thes_dir
6190     else
6191         THES_SYSTEM_DIR=file:///usr/share/mythes
6192     fi
6193     AC_MSG_RESULT([$THES_SYSTEM_DIR])
6194 else
6195     AC_MSG_RESULT([no])
6196     SYSTEM_DICTS=
6198 AC_SUBST(SYSTEM_DICTS)
6199 AC_SUBST(DICT_SYSTEM_DIR)
6200 AC_SUBST(HYPH_SYSTEM_DIR)
6201 AC_SUBST(THES_SYSTEM_DIR)
6203 dnl ===================================================================
6204 dnl Precompiled headers.
6205 ENABLE_PCH=""
6206 AC_MSG_CHECKING([whether to enable pch feature])
6207 if test -z "$enable_pch"; then
6208     if test "$_os" = "WINNT"; then
6209         # Enabled by default on Windows.
6210         enable_pch=yes
6211         # never use sccache on auto-enabled PCH builds, except if requested explicitly
6212         if test -z "$enable_ccache" -a "$SCCACHE"; then
6213             CCACHE=""
6214         fi
6215     else
6216         enable_pch=no
6217     fi
6219 if test "$enable_pch" != no -a "$_os" = Emscripten -a "$ENABLE_WASM_EXCEPTIONS" = TRUE; then
6220     AC_MSG_ERROR([PCH currently isn't supported for Emscripten with native EH (nEH) because of missing Sj/Lj support with nEH in clang.])
6222 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
6223     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
6225 if test "$enable_pch" = "system"; then
6226     ENABLE_PCH="1"
6227     AC_MSG_RESULT([yes (system headers)])
6228 elif test "$enable_pch" = "base"; then
6229     ENABLE_PCH="2"
6230     AC_MSG_RESULT([yes (system and base headers)])
6231 elif test "$enable_pch" = "normal"; then
6232     ENABLE_PCH="3"
6233     AC_MSG_RESULT([yes (normal)])
6234 elif test "$enable_pch" = "full"; then
6235     ENABLE_PCH="4"
6236     AC_MSG_RESULT([yes (full)])
6237 elif test "$enable_pch" = "yes"; then
6238     # Pick a suitable default.
6239     if test "$GCC" = "yes"; then
6240         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
6241         # while making the PCHs larger and rebuilds more likely.
6242         ENABLE_PCH="2"
6243         AC_MSG_RESULT([yes (system and base headers)])
6244     else
6245         # With MSVC the highest level makes a significant difference,
6246         # and it was the default when there used to be no PCH levels.
6247         ENABLE_PCH="4"
6248         AC_MSG_RESULT([yes (full)])
6249     fi
6250 elif test "$enable_pch" = "no"; then
6251     AC_MSG_RESULT([no])
6252 else
6253     AC_MSG_ERROR([Unknown value for --enable-pch])
6255 AC_SUBST(ENABLE_PCH)
6256 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
6257 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
6258     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
6259     if test "$CCACHE_BIN" != "not found"; then
6260         AC_MSG_CHECKING([ccache version])
6261         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
6262         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6263         AC_MSG_RESULT([$CCACHE_VERSION])
6264         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
6265         if test "$CCACHE_NUMVER" -gt "030701"; then
6266             AC_MSG_RESULT([yes])
6267         else
6268             AC_MSG_RESULT([no (not newer than 3.7.1)])
6269             CCACHE_DEPEND_MODE=
6270         fi
6271     fi
6274 PCH_INSTANTIATE_TEMPLATES=
6275 if test -n "$ENABLE_PCH"; then
6276     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
6277     save_CFLAGS=$CFLAGS
6278     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
6279     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
6280     CFLAGS=$save_CFLAGS
6281     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
6282         AC_MSG_RESULT(yes)
6283     else
6284         AC_MSG_RESULT(no)
6285     fi
6287 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
6289 BUILDING_PCH_WITH_OBJ=
6290 if test -n "$ENABLE_PCH"; then
6291     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
6292     save_CFLAGS=$CFLAGS
6293     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
6294     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
6295     CFLAGS=$save_CFLAGS
6296     if test -n "$BUILDING_PCH_WITH_OBJ"; then
6297         AC_MSG_RESULT(yes)
6298     else
6299         AC_MSG_RESULT(no)
6300     fi
6302 AC_SUBST(BUILDING_PCH_WITH_OBJ)
6304 PCH_CODEGEN=
6305 PCH_NO_CODEGEN=
6306 fpch_prefix=
6307 if test "$COM" = MSC; then
6308     fpch_prefix="-Xclang "
6310 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6311     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-codegen])
6312     save_CFLAGS=$CFLAGS
6313     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-codegen"
6314     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6315         [ PCH_CODEGEN="${fpch_prefix}-fpch-codegen" ],[])
6316     CFLAGS=$save_CFLAGS
6317     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fno-pch-codegen"
6318     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6319         [ PCH_NO_CODEGEN="${fpch_prefix}-fno-pch-codegen" ],[])
6320     CFLAGS=$save_CFLAGS
6321     if test -n "$PCH_CODEGEN"; then
6322         AC_MSG_RESULT(yes)
6323     else
6324         AC_MSG_RESULT(no)
6325     fi
6327 AC_SUBST(PCH_CODEGEN)
6328 AC_SUBST(PCH_NO_CODEGEN)
6329 PCH_DEBUGINFO=
6330 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6331     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-debuginfo])
6332     save_CFLAGS=$CFLAGS
6333     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-debuginfo"
6334     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="${fpch_prefix}-fpch-debuginfo" ],[])
6335     CFLAGS=$save_CFLAGS
6336     if test -n "$PCH_DEBUGINFO"; then
6337         AC_MSG_RESULT(yes)
6338     else
6339         AC_MSG_RESULT(no)
6340     fi
6342 AC_SUBST(PCH_DEBUGINFO)
6344 TAB=`printf '\t'`
6346 AC_MSG_CHECKING([the GNU Make version])
6347 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
6348 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6349 if test "$_make_longver" -ge "040000"; then
6350     AC_MSG_RESULT([$GNUMAKE $_make_version])
6351 else
6352     AC_MSG_ERROR([failed ($GNUMAKE version >= 4.0 needed)])
6355 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6356 STALE_MAKE=
6357 if test "$_make_ver_check" = ""; then
6358    STALE_MAKE=TRUE
6361 HAVE_LD_HASH_STYLE=FALSE
6362 WITH_LINKER_HASH_STYLE=
6363 AC_MSG_CHECKING([for --hash-style gcc linker support])
6364 if test "$GCC" = "yes"; then
6365     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6366         hash_styles="gnu sysv"
6367     elif test "$with_linker_hash_style" = "no"; then
6368         hash_styles=
6369     else
6370         hash_styles="$with_linker_hash_style"
6371     fi
6373     for hash_style in $hash_styles; do
6374         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6375         hash_style_ldflags_save=$LDFLAGS
6376         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6378         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6379             [
6380 #include <stdio.h>
6381             ],[
6382 printf ("");
6383             ])],
6384             [
6385                   HAVE_LD_HASH_STYLE=TRUE
6386                   WITH_LINKER_HASH_STYLE=$hash_style
6387             ],
6388             [HAVE_LD_HASH_STYLE=FALSE],
6389             [HAVE_LD_HASH_STYLE=FALSE])
6390         LDFLAGS=$hash_style_ldflags_save
6391     done
6393     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6394         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6395     else
6396         AC_MSG_RESULT( no )
6397     fi
6398     LDFLAGS=$hash_style_ldflags_save
6399 else
6400     AC_MSG_RESULT( no )
6402 AC_SUBST(HAVE_LD_HASH_STYLE)
6403 AC_SUBST(WITH_LINKER_HASH_STYLE)
6405 dnl ===================================================================
6406 dnl Check whether there's a Perl version available.
6407 dnl ===================================================================
6408 if test -z "$with_perl_home"; then
6409     AC_PATH_PROG(PERL, perl)
6410 else
6411     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6412     _perl_path="$with_perl_home/bin/perl"
6413     if test -x "$_perl_path"; then
6414         PERL=$_perl_path
6415     else
6416         AC_MSG_ERROR([$_perl_path not found])
6417     fi
6420 dnl ===================================================================
6421 dnl Testing for Perl version 5 or greater.
6422 dnl $] is the Perl version variable, it is returned as an integer
6423 dnl ===================================================================
6424 if test "$PERL"; then
6425     AC_MSG_CHECKING([the Perl version])
6426     ${PERL} -e "exit($]);"
6427     _perl_version=$?
6428     if test "$_perl_version" -lt 5; then
6429         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6430     fi
6431     AC_MSG_RESULT([Perl $_perl_version])
6432 else
6433     AC_MSG_ERROR([Perl not found, install Perl 5])
6436 dnl ===================================================================
6437 dnl Testing for required Perl modules
6438 dnl ===================================================================
6440 AC_MSG_CHECKING([for required Perl modules])
6441 perl_use_string="use Cwd ; use Digest::MD5"
6442 if test "$_os" = "WINNT"; then
6443     if test -n "$PKGFORMAT"; then
6444         for i in $PKGFORMAT; do
6445             case "$i" in
6446             msi)
6447                 # for getting fonts versions to use in MSI
6448                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6449                 ;;
6450             esac
6451         done
6452     fi
6454 if test "$with_system_hsqldb" = "yes"; then
6455     perl_use_string="$perl_use_string ; use Archive::Zip"
6457 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6458     # OpenSSL needs that to build
6459     perl_use_string="$perl_use_string ; use FindBin"
6461 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6462     AC_MSG_RESULT([all modules found])
6463 else
6464     AC_MSG_RESULT([failed to find some modules])
6465     # Find out which modules are missing.
6466     for i in $perl_use_string; do
6467         if test "$i" != "use" -a "$i" != ";"; then
6468             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6469                 missing_perl_modules="$missing_perl_modules $i"
6470             fi
6471         fi
6472     done
6473     AC_MSG_ERROR([
6474     The missing Perl modules are: $missing_perl_modules
6475     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6478 dnl ===================================================================
6479 dnl Check for pkg-config
6480 dnl ===================================================================
6481 if test "$_os" != "WINNT"; then
6482     PKG_PROG_PKG_CONFIG
6484 AC_SUBST(PKG_CONFIG)
6485 AC_SUBST(PKG_CONFIG_PATH)
6486 AC_SUBST(PKG_CONFIG_LIBDIR)
6488 if test "$_os" != "WINNT"; then
6490     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6491     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6492     # explicitly. Or put /path/to/compiler in PATH yourself.
6494     toolprefix=gcc
6495     if test "$COM_IS_CLANG" = "TRUE"; then
6496         toolprefix=llvm
6497     fi
6498     AC_CHECK_TOOLS(AR,$toolprefix-ar ar)
6499     AC_CHECK_TOOLS(NM,$toolprefix-nm nm)
6500     AC_CHECK_TOOLS(RANLIB,$toolprefix-ranlib ranlib)
6501     AC_CHECK_TOOLS(OBJDUMP,$toolprefix-objdump objdump)
6502     AC_CHECK_TOOLS(READELF,$toolprefix-readelf readelf)
6503     AC_CHECK_TOOLS(STRIP,$toolprefix-strip strip)
6505 AC_SUBST(AR)
6506 AC_SUBST(NM)
6507 AC_SUBST(OBJDUMP)
6508 AC_SUBST(RANLIB)
6509 AC_SUBST(READELF)
6510 AC_SUBST(STRIP)
6512 dnl ===================================================================
6513 dnl pkg-config checks on macOS
6514 dnl ===================================================================
6516 if test $_os = Darwin; then
6517     AC_MSG_CHECKING([for bogus pkg-config])
6518     if test -n "$PKG_CONFIG"; then
6519         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6520             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6521         else
6522             if test "$enable_bogus_pkg_config" = "yes"; then
6523                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6524             else
6525                 AC_MSG_ERROR([yes, from unknown origin. This *will* break the build. Please modify your PATH variable so that $PKG_CONFIG is no longer found by configure scripts.])
6526             fi
6527         fi
6528     else
6529         AC_MSG_RESULT([no, good])
6530     fi
6533 find_csc()
6535     # Return value: $csctest
6537     unset csctest
6539     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client/InstallPath"
6540     if test -n "$regvalue"; then
6541         csctest=$regvalue
6542         return
6543     fi
6546 find_al()
6548     # Return value: $altest
6550     unset altest
6552     # We need this check to detect 4.6.1 or above.
6553     for ver in 4.8.1 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6554         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools/InstallationFolder"
6555         PathFormat "$regvalue"
6556         if test -n "$regvalue" -a \( -f "$formatted_path_unix/al.exe" -o -f "$formatted_path_unix/bin/al.exe" \); then
6557             altest=$regvalue
6558             return
6559         fi
6560     done
6562     reg_list_values_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows"
6563     for x in $reglist; do
6564         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools/InstallationFolder"
6565         PathFormat "$regvalue"
6566         if test -n "$regvalue" -a \( -f "$formatted_path_unix/al.exe" -o -f "$formatted_path_unix/bin/al.exe" \); then
6567             altest=$regvalue
6568             return
6569         fi
6570     done
6573 find_dotnetsdk()
6575     unset frametest
6577     for ver in 4.8.1 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6; do
6578         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder"
6579         if test -n "$regvalue"; then
6580             frametest=$regvalue
6581             return
6582         fi
6583     done
6584     AC_MSG_ERROR([The Windows NET SDK (minimum 4.6) not found, check the installation])
6587 find_winsdk_version()
6589     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6590     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6592     unset winsdktest winsdkbinsubdir winsdklibsubdir
6594     case "$1" in
6595     8.0|8.0A)
6596         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
6597         if test -n "$regvalue"; then
6598             winsdktest=$regvalue
6599             winsdklibsubdir=win8
6600             return
6601         fi
6602         ;;
6603     8.1|8.1A)
6604         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot81"
6605         if test -n "$regvalue"; then
6606             winsdktest=$regvalue
6607             winsdklibsubdir=winv6.3
6608             return
6609         fi
6610         ;;
6611     10.0)
6612         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/InstallationFolder"
6613         if test -n "$regvalue"; then
6614             winsdktest=$regvalue
6615             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion"
6616             if test -n "$regvalue"; then
6617                 winsdkbinsubdir="$regvalue".0
6618                 winsdklibsubdir=$winsdkbinsubdir
6619                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6620                 local tmppath_unix=$(cygpath -u "$tmppath")
6621                 # test exist the SDK path
6622                 if test -d "$tmppath_unix"; then
6623                    # when path is convertible to a short path then path is okay
6624                    cygpath -d "$tmppath" >/dev/null 2>&1
6625                    if test $? -ne 0; then
6626                       AC_MSG_ERROR([Windows SDK doesn't have a 8.3 name, see NtfsDisable8dot3NameCreation])
6627                    fi
6628                 else
6629                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6630                 fi
6631             fi
6632             return
6633         fi
6634         ;;
6635     esac
6638 find_winsdk()
6640     # Return value: From find_winsdk_version
6642     unset winsdktest
6644     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6645         find_winsdk_version $ver
6646         if test -n "$winsdktest"; then
6647             return
6648         fi
6649     done
6652 find_msms()
6654     # Return value: $msmdir
6655     local version="$1"
6657     AC_MSG_CHECKING([for MSVC $version merge modules directory])
6658     local my_msm_file="Microsoft_VC${version}_CRT_x86.msm"
6659     local my_msm_dir
6661     echo "$as_me:$LINENO: searching for $my_msm_file" >&5
6663     msmdir=
6664     case "$VCVER" in
6665     16.0 | 17.0 | 17.8)
6666         for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6667             my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6668             echo "$as_me:$LINENO: looking for $my_msm_dir${my_msm_file}])" >&5
6669             if test -e "$my_msm_dir${my_msm_file}"; then
6670                 msmdir=$my_msm_dir
6671             fi
6672         done
6673         ;;
6674     esac
6676     if test -n "$msmdir"; then
6677         msmdir=`cygpath -m "$msmdir"`
6678         AC_MSG_RESULT([$msmdir])
6679     else
6680         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6681             AC_MSG_FAILURE([not found])
6682         else
6683             AC_MSG_WARN([not found (check config.log)])
6684             add_warning "MSM ${my_msm_file} not found"
6685         fi
6686     fi
6689 find_msvc_x64_dlls()
6691     # Return value: $msvcdllpath, $msvcdlls
6693     AC_MSG_CHECKING([for MSVC x64 DLL path])
6695     dnl Order crtver in increasing order. Then check the directories returned by
6696     dnl ls in an inner loop; assuming they are also ordered in increasing order,
6697     dnl the result will be the highest CRT version found in the highest directory.
6699     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6700     case "$VCVER" in
6701     16.0 | 17.0 | 17.8)
6702         for crtver in 141 142 143; do
6703             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6704                 echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT" >&5
6705                 if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"; then
6706                     msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"
6707                 fi
6708             done
6709         done
6710         ;;
6711     esac
6712     AC_MSG_RESULT([$msvcdllpath])
6713     AC_MSG_CHECKING([for MSVC x64 DLLs])
6714     msvcdlls="msvcp140.dll vcruntime140.dll"
6715     for dll in $msvcdlls; do
6716         if ! test -f "$msvcdllpath/$dll"; then
6717             AC_MSG_FAILURE([missing $dll])
6718         fi
6719     done
6720     AC_MSG_RESULT([found all ($msvcdlls)])
6723 dnl =========================================
6724 dnl Check for the Windows  SDK.
6725 dnl =========================================
6726 if test "$_os" = "WINNT"; then
6727     AC_MSG_CHECKING([for Windows SDK])
6728     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6729         find_winsdk
6730         WINDOWS_SDK_HOME=$winsdktest
6732         # normalize if found
6733         if test -n "$WINDOWS_SDK_HOME"; then
6734             WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
6735             WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
6736         fi
6738         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6739     fi
6741     if test -n "$WINDOWS_SDK_HOME"; then
6742         # Remove a possible trailing backslash
6743         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6745         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6746              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6747              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6748             have_windows_sdk_headers=yes
6749         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6750              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6751              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6752             have_windows_sdk_headers=yes
6753         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6754              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6755              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6756             have_windows_sdk_headers=yes
6757         else
6758             have_windows_sdk_headers=no
6759         fi
6761         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6762             have_windows_sdk_libs=yes
6763         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6764             have_windows_sdk_libs=yes
6765         else
6766             have_windows_sdk_libs=no
6767         fi
6769         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6770             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6771 the  Windows SDK are installed.])
6772         fi
6773     fi
6775     if test -z "$WINDOWS_SDK_HOME"; then
6776         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6777     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6778         WINDOWS_SDK_VERSION=80
6779         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6780     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6781         WINDOWS_SDK_VERSION=81
6782         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6783     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6784         WINDOWS_SDK_VERSION=10
6785         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6786     else
6787         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6788     fi
6789     PathFormat "$WINDOWS_SDK_HOME"
6790     WINDOWS_SDK_HOME="$formatted_path"
6791     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6792     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6793         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6794         if test -d "$WINDOWS_SDK_HOME/include/um"; then
6795             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6796         elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then
6797             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6798         fi
6799     fi
6801     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6802     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6803     dnl but not in v8.0), so allow this to be overridden with a
6804     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6805     dnl and configuration error if no WiLangId.vbs is found would arguably be
6806     dnl better, but I do not know under which conditions exactly it is needed by
6807     dnl msiglobal.pm:
6808     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6809         WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6810         WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6811         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6812             WINDOWS_SDK_WILANGID="${WINDOWS_SDK_HOME}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6813             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6814         fi
6815         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6816             WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6817             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6818         fi
6819         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6820             WINDOWS_SDK_WILANGID=$(cygpath -sm "C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs")
6821             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6822         fi
6823     fi
6824     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6825         if test -n "$with_package_format" -a "$with_package_format" != no; then
6826             for i in "$with_package_format"; do
6827                 if test "$i" = "msi"; then
6828                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6829                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6830                     fi
6831                 fi
6832             done
6833         fi
6834     fi
6836 AC_SUBST(WINDOWS_SDK_HOME)
6837 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6838 AC_SUBST(WINDOWS_SDK_VERSION)
6839 AC_SUBST(WINDOWS_SDK_WILANGID)
6841 if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6842     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6843     dnl dir, it also determines that dir's path w/o an arch segment if any,
6844     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6845     AC_MSG_CHECKING([for midl.exe])
6847     find_winsdk
6848     PathFormat "$winsdktest"
6849     winsdktest_unix="$formatted_path_unix"
6851     if test -n "$winsdkbinsubdir" \
6852         -a -f "$winsdktest_unix/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6853     then
6854         MIDL_PATH=$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6855         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME_unix/Bin/$winsdkbinsubdir
6856     elif test -f "$winsdktest_unix/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6857         MIDL_PATH=$winsdktest/Bin/$WIN_BUILD_ARCH
6858         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME_unix/Bin
6859     elif test -f "$winsdktest_unix/Bin/midl.exe"; then
6860         MIDL_PATH=$winsdktest/Bin
6861         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME_unix/Bin
6862     fi
6863     PathFormat "$MIDL_PATH"
6864     if test ! -f "$formatted_path_unix/midl.exe"; then
6865         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6866     else
6867         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6868     fi
6870     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6871     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6873     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6874          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6875          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6876          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6877     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6878          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6879          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6880          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
6881     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
6882          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
6883          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6884          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
6885     else
6886         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
6887     fi
6889     dnl Check csc.exe
6890     AC_MSG_CHECKING([for csc.exe])
6891     find_csc
6892     PathFormat "$csctest"
6893     csctest_unix="$formatted_path_unix"
6894     if test -f "$csctest_unix/csc.exe"; then
6895         CSC_PATH="$csctest"
6896     fi
6897     if test ! -f "$csctest_unix/csc.exe"; then
6898         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
6899     else
6900         AC_MSG_RESULT([$CSC_PATH/csc.exe])
6901     fi
6903     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
6905     dnl Check al.exe
6906     AC_MSG_CHECKING([for al.exe])
6907     if test -n "$winsdkbinsubdir" \
6908         -a -f "$winsdktest_unix/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
6909     then
6910         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
6911     elif test -f "$winsdktest_unix/Bin/$WIN_BUILD_ARCH/al.exe"; then
6912         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
6913     elif test -f "$winsdktest_unix/Bin/al.exe"; then
6914         AL_PATH="$winsdktest/Bin"
6915     fi
6917     if test -z "$AL_PATH"; then
6918         find_al
6919         PathFormat "$altest"
6920         altest_unix="$formatted_path_unix"
6921         if test -f "$altest_unix/bin/al.exe"; then
6922             AL_PATH="$altest/bin"
6923         elif test -f "$altest_unix/al.exe"; then
6924             AL_PATH="$altest"
6925         fi
6926     fi
6927     PathFormat "$AL_PATH"
6928     if test ! -f "$formatted_path_unix/al.exe"; then
6929         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
6930     else
6931         AC_MSG_RESULT([$AL_PATH/al.exe])
6932     fi
6934     AL_PATH=`win_short_path_for_make "$AL_PATH"`
6936     dnl Check mscoree.lib / .NET Framework dir
6937     AC_MSG_CHECKING(.NET Framework)
6938     find_dotnetsdk
6939     PathFormat "$frametest"
6940     frametest="$formatted_path_unix"
6941     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6942         DOTNET_FRAMEWORK_HOME="$frametest"
6943     else
6944         if test -f "$winsdktest_unix/lib/mscoree.lib" -o -f "$winsdktest_unix/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6945             DOTNET_FRAMEWORK_HOME="$winsdktest"
6946         fi
6947     fi
6948     PathFormat "$DOTNET_FRAMEWORK_HOME"
6949     if test ! -f "$formatted_path_unix/lib/mscoree.lib" -a ! -f "$formatted_path_unix/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib" -a ! -f "$formatted_path_unix/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6950         AC_MSG_ERROR([mscoree.lib not found])
6951     fi
6952     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
6954     PathFormat "$MIDL_PATH"
6955     MIDL_PATH="$formatted_path"
6957     PathFormat "$AL_PATH"
6958     AL_PATH="$formatted_path"
6960     PathFormat "$DOTNET_FRAMEWORK_HOME"
6961     DOTNET_FRAMEWORK_HOME="$formatted_path"
6963     PathFormat "$CSC_PATH"
6964     CSC_PATH="$formatted_path"
6967 dnl ===================================================================
6968 dnl Testing for C++ compiler and version...
6969 dnl ===================================================================
6971 if test "$_os" != "WINNT"; then
6972     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that
6973     save_CXXFLAGS=$CXXFLAGS
6974     AC_PROG_CXX
6975     CXXFLAGS=$save_CXXFLAGS
6976     if test -z "$CXX_BASE"; then
6977         CXX_BASE=`first_arg_basename "$CXX"`
6978     fi
6981 dnl check for GNU C++ compiler version
6982 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
6983     AC_MSG_CHECKING([the GNU C++ compiler version])
6985     _gpp_version=`$CXX -dumpversion`
6986     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
6988     if test "$_gpp_majmin" -lt "700"; then
6989         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
6990     else
6991         AC_MSG_RESULT([ok (g++ $_gpp_version)])
6992     fi
6994     dnl see https://issuetracker.google.com/issues/36962819
6995         glibcxx_threads=no
6996         AC_LANG_PUSH([C++])
6997         AC_REQUIRE_CPP
6998         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
6999         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
7000             #include <bits/c++config.h>]],[[
7001             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
7002             && !defined(_GLIBCXX__PTHREADS) \
7003             && !defined(_GLIBCXX_HAS_GTHREADS)
7004             choke me
7005             #endif
7006         ]])],[AC_MSG_RESULT([yes])
7007         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
7008         AC_LANG_POP([C++])
7009         if test $glibcxx_threads = yes; then
7010             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
7011         fi
7013 AC_SUBST(BOOST_CXXFLAGS)
7016 # prefx CXX with ccache if needed
7018 if test "$CCACHE" != ""; then
7019     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
7020     AC_LANG_PUSH([C++])
7021     save_CXXFLAGS=$CXXFLAGS
7022     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
7023     # msvc does not fail on unknown options, check stdout
7024     if test "$COM" = MSC; then
7025         CXXFLAGS="$CXXFLAGS -nologo"
7026     fi
7027     save_ac_cxx_werror_flag=$ac_cxx_werror_flag
7028     ac_cxx_werror_flag=yes
7029     dnl an empty program will do, we're checking the compiler flags
7030     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
7031                       [use_ccache=yes], [use_ccache=no])
7032     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
7033         AC_MSG_RESULT([yes])
7034     else
7035         CXX="$CCACHE $CXX"
7036         CXX_BASE="ccache $CXX_BASE"
7037         AC_MSG_RESULT([no])
7038     fi
7039     CXXFLAGS=$save_CXXFLAGS
7040     ac_cxx_werror_flag=$save_ac_cxx_werror_flag
7041     AC_LANG_POP([C++])
7044 dnl ===================================================================
7045 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
7046 dnl ===================================================================
7048 if test "$_os" != "WINNT"; then
7049     AC_PROG_CXXCPP
7051     dnl Check whether there's a C pre-processor.
7052     AC_PROG_CPP
7056 dnl ===================================================================
7057 dnl Find integral type sizes and alignments
7058 dnl ===================================================================
7060 if test "$_os" != "WINNT"; then
7062     AC_CHECK_SIZEOF(long)
7063     AC_CHECK_SIZEOF(short)
7064     AC_CHECK_SIZEOF(int)
7065     AC_CHECK_SIZEOF(long long)
7066     AC_CHECK_SIZEOF(double)
7067     AC_CHECK_SIZEOF(void*)
7068     AC_CHECK_SIZEOF(size_t)
7070     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
7071     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
7072     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
7073     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
7074     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
7075     SIZEOF_SIZE_T=$ac_cv_sizeof_size_t
7077     dnl Allow build without AC_CHECK_ALIGNOF, grrr
7078     m4_pattern_allow([AC_CHECK_ALIGNOF])
7079     m4_ifdef([AC_CHECK_ALIGNOF],
7080         [
7081             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
7082             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
7083             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
7084             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
7085         ],
7086         [
7087             case "$_os-$host_cpu" in
7088             Linux-i686)
7089                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
7090                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
7091                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
7092                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
7093                 ;;
7094             Linux-x86_64)
7095                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
7096                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
7097                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
7098                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
7099                 ;;
7100             *)
7101                 if test -z "$ac_cv_alignof_short" -o \
7102                         -z "$ac_cv_alignof_int" -o \
7103                         -z "$ac_cv_alignof_long" -o \
7104                         -z "$ac_cv_alignof_double"; then
7105                    AC_MSG_ERROR([Your Autoconf doesn't have [AC_][CHECK_ALIGNOF]. You need to set the environment variables ac_cv_alignof_short, ac_cv_alignof_int, ac_cv_alignof_long and ac_cv_alignof_double.])
7106                 fi
7107                 ;;
7108             esac
7109         ])
7111     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
7112     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
7113     if test $ac_cv_sizeof_long -eq 8; then
7114         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
7115     elif test $ac_cv_sizeof_double -eq 8; then
7116         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
7117     else
7118         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
7119     fi
7121     dnl Check for large file support
7122     AC_SYS_LARGEFILE
7123     if test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
7124         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
7125     fi
7126     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
7127         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
7128     fi
7129 else
7130     # Hardcode for MSVC
7131     SAL_TYPES_SIZEOFSHORT=2
7132     SAL_TYPES_SIZEOFINT=4
7133     SAL_TYPES_SIZEOFLONG=4
7134     SAL_TYPES_SIZEOFLONGLONG=8
7135     if test $WIN_HOST_BITS -eq 32; then
7136         SAL_TYPES_SIZEOFPOINTER=4
7137         SIZEOF_SIZE_T=4
7138     else
7139         SAL_TYPES_SIZEOFPOINTER=8
7140         SIZEOF_SIZE_T=8
7141     fi
7142     SAL_TYPES_ALIGNMENT2=2
7143     SAL_TYPES_ALIGNMENT4=4
7144     SAL_TYPES_ALIGNMENT8=8
7145     LFS_CFLAGS=''
7147 AC_SUBST(LFS_CFLAGS)
7148 AC_SUBST(SIZEOF_SIZE_T)
7150 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
7151 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
7152 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
7153 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
7154 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
7155 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
7156 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
7157 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
7159 dnl Calc jumbo sheets (1m+ rows) depend on 64 bit tools::Long .
7160 AC_MSG_CHECKING([whether jumbo sheets are supported])
7161 if test "$_os" != "WINNT"; then
7162     if test $SAL_TYPES_SIZEOFLONG -gt 4; then
7163         AC_MSG_RESULT([yes])
7164         ENABLE_JUMBO_SHEETS=TRUE
7165         AC_DEFINE(HAVE_FEATURE_JUMBO_SHEETS)
7166     else
7167         AC_MSG_RESULT([no])
7168     fi
7169 else
7170     if test $WIN_HOST_BITS -gt 32; then
7171         # 64bit windows is special-cased for tools::Long because long is 32bit
7172         AC_MSG_RESULT([yes])
7173         ENABLE_JUMBO_SHEETS=TRUE
7174         AC_DEFINE(HAVE_FEATURE_JUMBO_SHEETS)
7175     else
7176         AC_MSG_RESULT([no])
7177     fi
7179 AC_SUBST(ENABLE_JUMBO_SHEETS)
7181 dnl ===================================================================
7182 dnl Check whether to enable runtime optimizations
7183 dnl ===================================================================
7184 ENABLE_RUNTIME_OPTIMIZATIONS=
7185 AC_MSG_CHECKING([whether to enable runtime optimizations])
7186 if test -z "$enable_runtime_optimizations"; then
7187     for i in $CC; do
7188         case $i in
7189         -fsanitize=*)
7190             enable_runtime_optimizations=no
7191             break
7192             ;;
7193         esac
7194     done
7196 if test "$enable_runtime_optimizations" != no; then
7197     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
7198     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
7199     AC_MSG_RESULT([yes])
7200 else
7201     AC_MSG_RESULT([no])
7203 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
7205 dnl ===================================================================
7206 dnl Check if valgrind headers are available
7207 dnl ===================================================================
7208 ENABLE_VALGRIND=
7209 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
7210     prev_cppflags=$CPPFLAGS
7211     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
7212     # or where does it come from?
7213     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
7214     AC_CHECK_HEADER([valgrind/valgrind.h],
7215         [ENABLE_VALGRIND=TRUE])
7216     CPPFLAGS=$prev_cppflags
7218 AC_SUBST([ENABLE_VALGRIND])
7219 if test -z "$ENABLE_VALGRIND"; then
7220     if test "$with_valgrind" = yes; then
7221         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
7222     fi
7223     VALGRIND_CFLAGS=
7225 AC_SUBST([VALGRIND_CFLAGS])
7228 dnl ===================================================================
7229 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
7230 dnl ===================================================================
7232 # We need at least the sys/sdt.h include header.
7233 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
7234 if test "$SDT_H_FOUND" = "TRUE"; then
7235     # Found sys/sdt.h header, now make sure the c++ compiler works.
7236     # Old g++ versions had problems with probes in constructors/destructors.
7237     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
7238     AC_LANG_PUSH([C++])
7239     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
7240     #include <sys/sdt.h>
7241     class ProbeClass
7242     {
7243     private:
7244       int& ref;
7245       const char *name;
7247     public:
7248       ProbeClass(int& v, const char *n) : ref(v), name(n)
7249       {
7250         DTRACE_PROBE2(_test_, cons, name, ref);
7251       }
7253       void method(int min)
7254       {
7255         DTRACE_PROBE3(_test_, meth, name, ref, min);
7256         ref -= min;
7257       }
7259       ~ProbeClass()
7260       {
7261         DTRACE_PROBE2(_test_, dest, name, ref);
7262       }
7263     };
7264     ]],[[
7265     int i = 64;
7266     DTRACE_PROBE1(_test_, call, i);
7267     ProbeClass inst = ProbeClass(i, "call");
7268     inst.method(24);
7269     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
7270           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
7271     AC_LANG_POP([C++])
7273 AC_CONFIG_HEADERS([config_host/config_probes.h])
7275 dnl ===================================================================
7276 dnl GCC features
7277 dnl ===================================================================
7278 HAVE_GCC_STACK_CLASH_PROTECTION=
7279 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7280     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
7281     save_CFLAGS=$CFLAGS
7282     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
7283     AC_LINK_IFELSE(
7284         [AC_LANG_PROGRAM(, [[return 0;]])],
7285         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
7286         [AC_MSG_RESULT([no])])
7287     CFLAGS=$save_CFLAGS
7289     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
7290     save_CFLAGS=$CFLAGS
7291     CFLAGS="$CFLAGS -Werror -mno-avx"
7292     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
7293     CFLAGS=$save_CFLAGS
7294     if test "$HAVE_GCC_AVX" = "TRUE"; then
7295         AC_MSG_RESULT([yes])
7296     else
7297         AC_MSG_RESULT([no])
7298     fi
7300     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
7301     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7302     int v = 0;
7303     if (__sync_add_and_fetch(&v, 1) != 1 ||
7304         __sync_sub_and_fetch(&v, 1) != 0)
7305         return 1;
7306     __sync_synchronize();
7307     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
7308         v != 1)
7309         return 1;
7310     return 0;
7311 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
7312     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
7313         AC_MSG_RESULT([yes])
7314         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
7315     else
7316         AC_MSG_RESULT([no])
7317     fi
7319     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
7320     AC_LANG_PUSH([C++])
7321     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7322             #include <cstddef>
7323             #include <cxxabi.h>
7324             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
7325         ])], [
7326             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
7327             AC_MSG_RESULT([yes])
7328         ], [AC_MSG_RESULT([no])])
7329     AC_LANG_POP([C++])
7331     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
7332     AC_LANG_PUSH([C++])
7333     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7334             #include <cstddef>
7335             #include <cxxabi.h>
7336             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7337         ])], [
7338             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7339             AC_MSG_RESULT([yes])
7340         ], [AC_MSG_RESULT([no])])
7341     AC_LANG_POP([C++])
7343     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7344     AC_LANG_PUSH([C++])
7345     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7346             #include <cxxabi.h>
7347             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7348         ])], [
7349             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7350             AC_MSG_RESULT([yes])
7351         ], [AC_MSG_RESULT([no])])
7352     AC_LANG_POP([C++])
7354     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7355     AC_LANG_PUSH([C++])
7356     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7357             #include <cstddef>
7358             #include <cxxabi.h>
7359             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7360         ])], [
7361             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7362             AC_MSG_RESULT([yes])
7363         ], [AC_MSG_RESULT([no])])
7364     AC_LANG_POP([C++])
7366     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7367     AC_LANG_PUSH([C++])
7368     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7369             #include <cstddef>
7370             #include <cxxabi.h>
7371             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7372         ])], [
7373             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7374             AC_MSG_RESULT([yes])
7375         ], [AC_MSG_RESULT([no])])
7376     AC_LANG_POP([C++])
7378     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7379     AC_LANG_PUSH([C++])
7380     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7381             #include <cxxabi.h>
7382             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7383         ])], [
7384             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7385             AC_MSG_RESULT([yes])
7386         ], [AC_MSG_RESULT([no])])
7387     AC_LANG_POP([C++])
7389     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7390     AC_LANG_PUSH([C++])
7391     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7392             #include <cxxabi.h>
7393             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7394         ])], [
7395             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7396             AC_MSG_RESULT([yes])
7397         ], [AC_MSG_RESULT([no])])
7398     AC_LANG_POP([C++])
7400     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7401     AC_LANG_PUSH([C++])
7402     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7403             #include <cxxabi.h>
7404             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7405         ])], [
7406             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7407             AC_MSG_RESULT([yes])
7408         ], [AC_MSG_RESULT([no])])
7409     AC_LANG_POP([C++])
7411     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info in cxxabi.h])
7412     AC_LANG_PUSH([C++])
7413     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7414             #include <cstddef>
7415             #include <cxxabi.h>
7416             std::size_t f() { return sizeof(__cxxabiv1::__si_class_type_info); }
7417         ])], [
7418             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7419             AC_MSG_RESULT([yes])
7420         ], [AC_MSG_RESULT([no])])
7421     AC_LANG_POP([C++])
7423     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7424     AC_LANG_PUSH([C++])
7425     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7426             #include <cstddef>
7427             #include <cxxabi.h>
7428             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7429         ])], [
7430             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7431             AC_MSG_RESULT([yes])
7432         ], [AC_MSG_RESULT([no])])
7433     AC_LANG_POP([C++])
7436 AC_SUBST(HAVE_GCC_AVX)
7437 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7438 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7440 dnl ===================================================================
7441 dnl Identify the C++ library
7442 dnl ===================================================================
7444 AC_MSG_CHECKING([what the C++ library is])
7445 HAVE_LIBSTDCPP=
7446 HAVE_LIBCPP=
7447 AC_LANG_PUSH([C++])
7448 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7449 #include <utility>
7450 #ifndef __GLIBCXX__
7451 foo bar
7452 #endif
7453 ]])],
7454     [CPP_LIBRARY=GLIBCXX
7455      cpp_library_name="GNU libstdc++"
7456      HAVE_LIBSTDCPP=TRUE
7457     ],
7458     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7459 #include <utility>
7460 #ifndef _LIBCPP_VERSION
7461 foo bar
7462 #endif
7463 ]])],
7464     [CPP_LIBRARY=LIBCPP
7465      cpp_library_name="LLVM libc++"
7466      AC_DEFINE([HAVE_LIBCPP])
7467      HAVE_LIBCPP=TRUE
7468     ],
7469     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7470 #include <utility>
7471 #ifndef _MSC_VER
7472 foo bar
7473 #endif
7474 ]])],
7475     [CPP_LIBRARY=MSVCRT
7476      cpp_library_name="Microsoft"
7477     ],
7478     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7479 AC_MSG_RESULT([$cpp_library_name])
7480 AC_LANG_POP([C++])
7481 AC_SUBST([HAVE_LIBSTDCPP])
7482 AC_SUBST([HAVE_LIBCPP])
7484 if test -z "${LIBCPP_DEBUG+x}" -a -z "$CROSS_COMPILING" -a -n "$HAVE_LIBCPP" -a -n "$ENABLE_DBGUTIL"
7485 then
7486     # Libc++ has two levels of debug mode, assertions mode enabled with -D_LIBCPP_DEBUG=0,
7487     # and actual debug mode enabled with -D_LIBCPP_DEBUG=1 (and starting with LLVM15
7488     # assertions mode will be separate and controlled by -D_LIBCPP_ENABLE_ASSERTIONS=1,
7489     # although there will be backwards compatibility).
7490     # Debug mode is supported by libc++ only if built for it, e.g. Mac libc++ isn't,
7491     # and there would be undefined references to debug functions.
7492     # Moreover std::to_string() has a bug (https://reviews.llvm.org/D125184).
7493     # So check if debug mode can be used and disable or downgrade it to assertions
7494     # if needed.
7495     AC_MSG_CHECKING([if libc++ has a usable debug mode])
7496     AC_LANG_PUSH([C++])
7497     libcpp_debug_links=
7498     AC_LINK_IFELSE([AC_LANG_SOURCE([[
7499 #define _LIBCPP_DEBUG 0 // only assertions
7500 #include <vector>
7501 int main()
7503     std::vector<int> v;
7504     v.push_back( 1 );
7505     return v[ 3 ];
7507 ]])], [libcpp_debug_links=1])
7508     if test -n "$libcpp_debug_links"; then
7509         # we can use at least assertions, check if debug mode works
7510         AC_RUN_IFELSE([AC_LANG_SOURCE([[
7511 #define _LIBCPP_DEBUG 1 // debug mode
7512 #include <string>
7513 #include <vector>
7514 int foo(const std::vector<int>& v) { return *v.begin(); }
7515 int main()
7517     std::vector<int> v;
7518     v.push_back( 1 );
7519     std::string s = "xxxxxxxxxxxxxxxxxxxxxxxxx" + std::to_string(10);
7520     return (foo(v) + s.size()) != 0 ? 0 : 1;
7522 ]])],
7523         [AC_MSG_RESULT(yes)
7524          LIBCPP_DEBUG=-D_LIBCPP_DEBUG=1
7525         ],
7526         [AC_MSG_RESULT(no, using only assertions)
7527          LIBCPP_DEBUG=-D_LIBCPP_DEBUG=0
7528         ]
7529         )
7530     else
7531         AC_MSG_RESULT(no)
7532     fi
7533     AC_LANG_POP([C++])
7535 AC_SUBST([LIBCPP_DEBUG])
7537 dnl ===================================================================
7538 dnl Check for gperf
7539 dnl ===================================================================
7540 AC_PATH_PROG(GPERF, gperf)
7541 if test -z "$GPERF"; then
7542     AC_MSG_ERROR([gperf not found but needed. Install it.])
7544 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7545     GPERF=`cygpath -m $GPERF`
7547 AC_MSG_CHECKING([whether gperf is new enough])
7548 my_gperf_ver1=$($GPERF --version | head -n 1)
7549 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7550 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7551 if test "$my_gperf_ver3" -ge 301; then
7552     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7553 else
7554     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7556 AC_SUBST(GPERF)
7558 dnl ===================================================================
7559 dnl Check for system libcmis
7560 dnl ===================================================================
7561 libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.5 >= 0.5.2],enabled)
7563 dnl ===================================================================
7564 dnl C++11
7565 dnl ===================================================================
7567 if test -z "${CXXFLAGS_CXX11+x}"; then
7568     AC_MSG_CHECKING([whether $CXX_BASE supports C++20])
7569     if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7570         if test "$with_latest_c__" = yes; then
7571             CXXFLAGS_CXX11=-std:c++latest
7572         else
7573             CXXFLAGS_CXX11=-std:c++20
7574         fi
7575         CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus,preprocessor"
7576     elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7577         my_flags='-std=c++20 -std=c++2a'
7578         if test "$with_latest_c__" = yes; then
7579             my_flags="-std=c++26 -std=c++2c -std=c++23 -std=c++2b $my_flags"
7580         fi
7581         for flag in $my_flags; do
7582             if test "$COM" = MSC; then
7583                 flag="-Xclang $flag"
7584             fi
7585             save_CXXFLAGS=$CXXFLAGS
7586             CXXFLAGS="$CXXFLAGS $flag -Werror"
7587             if test "$SYSTEM_LIBCMIS" = TRUE; then
7588                 CXXFLAGS="$CXXFLAGS -DSYSTEM_LIBCMIS $LIBCMIS_CFLAGS"
7589             fi
7590             AC_LANG_PUSH([C++])
7591             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7592                 #include <algorithm>
7593                 #include <functional>
7594                 #include <vector>
7596                 #if defined SYSTEM_LIBCMIS
7597                 // See ucb/source/ucp/cmis/auth_provider.hxx:
7598                 #if !defined __clang__
7599                 #pragma GCC diagnostic push
7600                 #pragma GCC diagnostic ignored "-Wdeprecated"
7601                 #pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
7602                 #endif
7603                 #include <libcmis/libcmis.hxx>
7604                 #if !defined __clang__
7605                 #pragma GCC diagnostic pop
7606                 #endif
7607                 #endif
7609                 void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7610                     std::sort(v.begin(), v.end(), fn);
7611                 }
7612                 ]])],[CXXFLAGS_CXX11=$flag])
7613             AC_LANG_POP([C++])
7614             CXXFLAGS=$save_CXXFLAGS
7615             if test -n "$CXXFLAGS_CXX11"; then
7616                 break
7617             fi
7618         done
7619     fi
7620     if test -n "$CXXFLAGS_CXX11"; then
7621         AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7622     else
7623         AC_MSG_ERROR(no)
7624     fi
7626 AC_SUBST(CXXFLAGS_CXX11)
7628 if test "$GCC" = "yes"; then
7629     save_CXXFLAGS=$CXXFLAGS
7630     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7631     CHECK_L_ATOMIC
7632     CXXFLAGS=$save_CXXFLAGS
7633     AC_SUBST(ATOMIC_LIB)
7636 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7637 save_CXXFLAGS=$CXXFLAGS
7638 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7639 AC_LANG_PUSH([C++])
7641 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7642 #include <stddef.h>
7644 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7646 namespace
7648         struct b
7649         {
7650                 int i;
7651                 int j;
7652         };
7654 ]], [[
7655 struct a
7657         int i;
7658         int j;
7660 a thinga[]={{0,0}, {1,1}};
7661 b thingb[]={{0,0}, {1,1}};
7662 size_t i = sizeof(sal_n_array_size(thinga));
7663 size_t j = sizeof(sal_n_array_size(thingb));
7664 return !(i != 0 && j != 0);
7666     ], [ AC_MSG_RESULT(yes) ],
7667     [ AC_MSG_ERROR(no)])
7668 AC_LANG_POP([C++])
7669 CXXFLAGS=$save_CXXFLAGS
7671 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7672 if test "$GCC" = yes; then
7673     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7674     AC_LANG_PUSH([C++])
7675     save_CXXFLAGS=$CXXFLAGS
7676     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7677     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7678     CXXFLAGS=$save_CXXFLAGS
7679     AC_LANG_POP([C++])
7680     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7681         AC_MSG_RESULT([yes])
7682     else
7683         AC_MSG_RESULT([no])
7684     fi
7686 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7688 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7689 AC_LANG_PUSH([C++])
7690 save_CXXFLAGS=$CXXFLAGS
7691 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7692 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7693         #include <algorithm>
7694         #include <initializer_list>
7695         #include <vector>
7696         template<typename T> class S {
7697         private:
7698             std::vector<T> v_;
7699         public:
7700             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7701         };
7702         constinit S<int> s{3, 2, 1};
7703     ])], [
7704         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7705         AC_MSG_RESULT([yes])
7706     ], [AC_MSG_RESULT([no])])
7707 CXXFLAGS=$save_CXXFLAGS
7708 AC_LANG_POP([C++])
7710 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a <span> with unsigned size_type])
7711 AC_LANG_PUSH([C++])
7712 save_CXXFLAGS=$CXXFLAGS
7713 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7714 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7715         #include <span>
7716         #include <type_traits>
7717         // Don't check size_type directly, as it was called index_type before P1872R0:
7718         void f(std::span<int> s) { static_assert(std::is_unsigned_v<decltype(s.size())>); };
7719     ])], [
7720         AC_DEFINE([HAVE_CPP_SPAN],[1])
7721         AC_MSG_RESULT([yes])
7722     ], [AC_MSG_RESULT([no])])
7723 CXXFLAGS=$save_CXXFLAGS
7724 AC_LANG_POP([C++])
7726 AC_MSG_CHECKING([whether $CXX_BASE implements C++ DR P1155R3])
7727 AC_LANG_PUSH([C++])
7728 save_CXXFLAGS=$CXXFLAGS
7729 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7730 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7731         struct S1 { S1(S1 &&); };
7732         struct S2: S1 {};
7733         S1 f(S2 s) { return s; }
7734     ])], [
7735         AC_DEFINE([HAVE_P1155R3],[1])
7736         AC_MSG_RESULT([yes])
7737     ], [AC_MSG_RESULT([no])])
7738 CXXFLAGS=$save_CXXFLAGS
7739 AC_LANG_POP([C++])
7741 AC_MSG_CHECKING([whether $CXX_BASE supports C++20 std::atomic_ref])
7742 HAVE_CXX20_ATOMIC_REF=
7743 AC_LANG_PUSH([C++])
7744 save_CXXFLAGS=$CXXFLAGS
7745 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7746 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7747         #include <atomic>
7748         int x;
7749         std::atomic_ref<int> y(x);
7750     ])], [
7751         HAVE_CXX20_ATOMIC_REF=TRUE
7752         AC_MSG_RESULT([yes])
7753     ], [AC_MSG_RESULT([no])])
7754 CXXFLAGS=$save_CXXFLAGS
7755 AC_LANG_POP([C++])
7756 AC_SUBST([HAVE_CXX20_ATOMIC_REF])
7758 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7759 dnl which is included in -Wextra anyway):
7760 HAVE_WDEPRECATED_COPY_DTOR=
7761 if test "$GCC" = yes; then
7762     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7763     AC_LANG_PUSH([C++])
7764     save_CXXFLAGS=$CXXFLAGS
7765     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7766     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7767             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7768             AC_MSG_RESULT([yes])
7769         ], [AC_MSG_RESULT([no])])
7770     CXXFLAGS=$save_CXXFLAGS
7771     AC_LANG_POP([C++])
7773 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7775 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7776 dnl uninitialized warning for code like
7778 dnl   OString f();
7779 dnl   boost::optional<OString> * g(bool b) {
7780 dnl       boost::optional<OString> o;
7781 dnl       if (b) o = f();
7782 dnl       return new boost::optional<OString>(o);
7783 dnl   }
7785 dnl (as is e.g. present, in a slightly more elaborate form, in
7786 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7787 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7788 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7789 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7790     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7791     AC_LANG_PUSH([C++])
7792     save_CXXFLAGS=$CXXFLAGS
7793     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7794     if test "$ENABLE_OPTIMIZED" = TRUE; then
7795         CXXFLAGS="$CXXFLAGS -O2"
7796     else
7797         CXXFLAGS="$CXXFLAGS -O0"
7798     fi
7799     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7800             #include <new>
7801             void f1(int);
7802             struct S1 {
7803                 ~S1() { f1(n); }
7804                 int n = 0;
7805             };
7806             struct S2 {
7807                 S2() {}
7808                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7809                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7810                 void set(S1 s) {
7811                     new (stg) S1(s);
7812                     init = true;
7813                 }
7814                 bool init = false;
7815                 char stg[sizeof (S1)];
7816             } ;
7817             S1 f2();
7818             S2 * f3(bool b) {
7819                 S2 o;
7820                 if (b) o.set(f2());
7821                 return new S2(o);
7822             }
7823         ]])], [AC_MSG_RESULT([no])], [
7824             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7825             AC_MSG_RESULT([yes])
7826         ])
7827     CXXFLAGS=$save_CXXFLAGS
7828     AC_LANG_POP([C++])
7830 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7832 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7833 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7834 dnl hits us e.g. with GCC 10 and --enable-optimized at
7836 dnl   In file included from include/rtl/string.hxx:49,
7837 dnl                    from include/rtl/ustring.hxx:43,
7838 dnl                    from include/osl/file.hxx:35,
7839 dnl                    from include/codemaker/global.hxx:28,
7840 dnl                    from include/codemaker/options.hxx:23,
7841 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7842 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7843 dnl       inlined from â€˜static char* rtl::ToStringHelper<const char [N]>::addData(char*, const char*) [with long unsigned int N = 3]’ at include/rtl/stringconcat.hxx:147:85,
7844 dnl       inlined from â€˜char* rtl::OStringConcat<T1, T2>::addData(char*) const [with T1 = const char [3]; T2 = rtl::OString]’ at include/rtl/stringconcat.hxx:226:103,
7845 dnl       inlined from â€˜rtl::OStringBuffer& rtl::OStringBuffer::append(rtl::OStringConcat<T1, T2>&&) [with T1 = const char [3]; T2 = rtl::OString]’ at include/rtl/strbuf.hxx:599:30,
7846 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7847 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7848 dnl      78 |         memcpy( buffer, data, length );
7849 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7850 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7851 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7852     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7853     AC_LANG_PUSH([C++])
7854     save_CXXFLAGS=$CXXFLAGS
7855     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7856     if test "$ENABLE_OPTIMIZED" = TRUE; then
7857         CXXFLAGS="$CXXFLAGS -O2"
7858     else
7859         CXXFLAGS="$CXXFLAGS -O0"
7860     fi
7861     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7862     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7863             void fill(char const * begin, char const * end, char c);
7864             struct q {
7865                 char ids[4];
7866                 char username[6];
7867             };
7868             void test(q & c) {
7869                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
7870                 __builtin_strncpy(c.username, "root", sizeof(c.username));
7871             }
7872         ]])], [AC_MSG_RESULT([no])], [
7873             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
7874             AC_MSG_RESULT([yes])
7875         ])
7876     CXXFLAGS=$save_CXXFLAGS
7877     AC_LANG_POP([C++])
7879 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
7881 HAVE_DLLEXPORTINLINES=
7882 if test "$_os" = "WINNT"; then
7883     AC_MSG_CHECKING([whether $CXX_BASE supports -Zc:dllexportInlines-])
7884     AC_LANG_PUSH([C++])
7885     save_CXXFLAGS=$CXXFLAGS
7886     CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
7887     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7888             HAVE_DLLEXPORTINLINES=TRUE
7889             AC_MSG_RESULT([yes])
7890         ], [AC_MSG_RESULT([no])])
7891     CXXFLAGS=$save_CXXFLAGS
7892     AC_LANG_POP([C++])
7894 AC_SUBST([HAVE_DLLEXPORTINLINES])
7896 dnl ===================================================================
7897 dnl CPU Intrinsics support - SSE, AVX
7898 dnl ===================================================================
7900 CXXFLAGS_INTRINSICS_SSE2=
7901 CXXFLAGS_INTRINSICS_SSSE3=
7902 CXXFLAGS_INTRINSICS_SSE41=
7903 CXXFLAGS_INTRINSICS_SSE42=
7904 CXXFLAGS_INTRINSICS_AVX=
7905 CXXFLAGS_INTRINSICS_AVX2=
7906 CXXFLAGS_INTRINSICS_AVX512=
7907 CXXFLAGS_INTRINSICS_AVX512F=
7908 CXXFLAGS_INTRINSICS_F16C=
7909 CXXFLAGS_INTRINSICS_FMA=
7911 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7912     # GCC, Clang or Clang-cl (clang-cl + MSVC's -arch options don't work well together)
7913     flag_sse2=-msse2
7914     flag_ssse3=-mssse3
7915     flag_sse41=-msse4.1
7916     flag_sse42=-msse4.2
7917     flag_avx=-mavx
7918     flag_avx2=-mavx2
7919     flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
7920     flag_avx512f=-mavx512f
7921     flag_f16c=-mf16c
7922     flag_fma=-mfma
7923 else
7924     # With MSVC using -arch is in fact not necessary for being able
7925     # to use CPU intrinsics, code using AVX512F intrinsics will compile
7926     # even if compiled with -arch:AVX, the -arch option really only affects
7927     # instructions generated for C/C++ code.
7928     # So use the matching same (or lower) -arch options, but only in order
7929     # to generate the best matching instructions for the C++ code surrounding
7930     # the intrinsics.
7931     # SSE2 is the default for x86/x64, so no need to specify the option.
7932     flag_sse2=
7933     # No specific options for these, use the next lower.
7934     flag_ssse3="$flag_sse2"
7935     flag_sse41="$flag_sse2"
7936     flag_sse42="$flag_sse2"
7937     flag_avx=-arch:AVX
7938     flag_avx2=-arch:AVX2
7939     flag_avx512=-arch:AVX512
7940     # Using -arch:AVX512 would enable more than just AVX512F, so use only AVX2.
7941     flag_avx512f=-arch:AVX2
7942     # No MSVC options for these.
7943     flag_f16c="$flag_sse2"
7944     flag_fma="$flag_sse2"
7947 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
7948 AC_LANG_PUSH([C++])
7949 save_CXXFLAGS=$CXXFLAGS
7950 CXXFLAGS="$CXXFLAGS $flag_sse2"
7951 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7952     #include <emmintrin.h>
7953     int main () {
7954         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7955         c = _mm_xor_si128 (a, b);
7956         return 0;
7957     }
7958     ])],
7959     [can_compile_sse2=yes],
7960     [can_compile_sse2=no])
7961 AC_LANG_POP([C++])
7962 CXXFLAGS=$save_CXXFLAGS
7963 AC_MSG_RESULT([${can_compile_sse2}])
7964 if test "${can_compile_sse2}" = "yes" ; then
7965     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
7968 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
7969 AC_LANG_PUSH([C++])
7970 save_CXXFLAGS=$CXXFLAGS
7971 CXXFLAGS="$CXXFLAGS $flag_ssse3"
7972 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7973     #include <tmmintrin.h>
7974     int main () {
7975         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7976         c = _mm_maddubs_epi16 (a, b);
7977         return 0;
7978     }
7979     ])],
7980     [can_compile_ssse3=yes],
7981     [can_compile_ssse3=no])
7982 AC_LANG_POP([C++])
7983 CXXFLAGS=$save_CXXFLAGS
7984 AC_MSG_RESULT([${can_compile_ssse3}])
7985 if test "${can_compile_ssse3}" = "yes" ; then
7986     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
7989 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
7990 AC_LANG_PUSH([C++])
7991 save_CXXFLAGS=$CXXFLAGS
7992 CXXFLAGS="$CXXFLAGS $flag_sse41"
7993 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7994     #include <smmintrin.h>
7995     int main () {
7996         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7997         c = _mm_cmpeq_epi64 (a, b);
7998         return 0;
7999     }
8000     ])],
8001     [can_compile_sse41=yes],
8002     [can_compile_sse41=no])
8003 AC_LANG_POP([C++])
8004 CXXFLAGS=$save_CXXFLAGS
8005 AC_MSG_RESULT([${can_compile_sse41}])
8006 if test "${can_compile_sse41}" = "yes" ; then
8007     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
8010 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
8011 AC_LANG_PUSH([C++])
8012 save_CXXFLAGS=$CXXFLAGS
8013 CXXFLAGS="$CXXFLAGS $flag_sse42"
8014 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8015     #include <nmmintrin.h>
8016     int main () {
8017         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
8018         c = _mm_cmpgt_epi64 (a, b);
8019         return 0;
8020     }
8021     ])],
8022     [can_compile_sse42=yes],
8023     [can_compile_sse42=no])
8024 AC_LANG_POP([C++])
8025 CXXFLAGS=$save_CXXFLAGS
8026 AC_MSG_RESULT([${can_compile_sse42}])
8027 if test "${can_compile_sse42}" = "yes" ; then
8028     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
8031 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
8032 AC_LANG_PUSH([C++])
8033 save_CXXFLAGS=$CXXFLAGS
8034 CXXFLAGS="$CXXFLAGS $flag_avx"
8035 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8036     #include <immintrin.h>
8037     int main () {
8038         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
8039         c = _mm256_xor_ps(a, b);
8040         return 0;
8041     }
8042     ])],
8043     [can_compile_avx=yes],
8044     [can_compile_avx=no])
8045 AC_LANG_POP([C++])
8046 CXXFLAGS=$save_CXXFLAGS
8047 AC_MSG_RESULT([${can_compile_avx}])
8048 if test "${can_compile_avx}" = "yes" ; then
8049     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
8052 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
8053 AC_LANG_PUSH([C++])
8054 save_CXXFLAGS=$CXXFLAGS
8055 CXXFLAGS="$CXXFLAGS $flag_avx2"
8056 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8057     #include <immintrin.h>
8058     int main () {
8059         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
8060         c = _mm256_maddubs_epi16(a, b);
8061         return 0;
8062     }
8063     ])],
8064     [can_compile_avx2=yes],
8065     [can_compile_avx2=no])
8066 AC_LANG_POP([C++])
8067 CXXFLAGS=$save_CXXFLAGS
8068 AC_MSG_RESULT([${can_compile_avx2}])
8069 if test "${can_compile_avx2}" = "yes" ; then
8070     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
8073 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
8074 AC_LANG_PUSH([C++])
8075 save_CXXFLAGS=$CXXFLAGS
8076 CXXFLAGS="$CXXFLAGS $flag_avx512"
8077 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8078     #include <immintrin.h>
8079     int main () {
8080         __m512i a = _mm512_loadu_si512(0);
8081         __m512d v1 = _mm512_load_pd(0);
8082         // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
8083         __m512d v2 = _mm512_abs_pd(v1);
8084         return 0;
8085     }
8086     ])],
8087     [can_compile_avx512=yes],
8088     [can_compile_avx512=no])
8089 AC_LANG_POP([C++])
8090 CXXFLAGS=$save_CXXFLAGS
8091 AC_MSG_RESULT([${can_compile_avx512}])
8092 if test "${can_compile_avx512}" = "yes" ; then
8093     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
8094     CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
8097 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
8098 AC_LANG_PUSH([C++])
8099 save_CXXFLAGS=$CXXFLAGS
8100 CXXFLAGS="$CXXFLAGS $flag_f16c"
8101 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8102     #include <immintrin.h>
8103     int main () {
8104         __m128i a = _mm_set1_epi32 (0);
8105         __m128 c;
8106         c = _mm_cvtph_ps(a);
8107         return 0;
8108     }
8109     ])],
8110     [can_compile_f16c=yes],
8111     [can_compile_f16c=no])
8112 AC_LANG_POP([C++])
8113 CXXFLAGS=$save_CXXFLAGS
8114 AC_MSG_RESULT([${can_compile_f16c}])
8115 if test "${can_compile_f16c}" = "yes" ; then
8116     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
8119 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
8120 AC_LANG_PUSH([C++])
8121 save_CXXFLAGS=$CXXFLAGS
8122 CXXFLAGS="$CXXFLAGS $flag_fma"
8123 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8124     #include <immintrin.h>
8125     int main () {
8126         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
8127         d = _mm256_fmadd_ps(a, b, c);
8128         return 0;
8129     }
8130     ])],
8131     [can_compile_fma=yes],
8132     [can_compile_fma=no])
8133 AC_LANG_POP([C++])
8134 CXXFLAGS=$save_CXXFLAGS
8135 AC_MSG_RESULT([${can_compile_fma}])
8136 if test "${can_compile_fma}" = "yes" ; then
8137     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
8140 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
8141 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
8142 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
8143 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
8144 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
8145 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
8146 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
8147 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512F])
8148 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
8149 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
8151 dnl ===================================================================
8152 dnl system stl sanity tests
8153 dnl ===================================================================
8154 if test "$_os" != "WINNT"; then
8156     AC_LANG_PUSH([C++])
8158     save_CPPFLAGS="$CPPFLAGS"
8159     if test -n "$MACOSX_SDK_PATH"; then
8160         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
8161     fi
8163     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
8164     # only.
8165     if test "$CPP_LIBRARY" = GLIBCXX; then
8166         dnl gcc#19664, gcc#22482, rhbz#162935
8167         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
8168         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
8169         AC_MSG_RESULT([$stlvisok])
8170         if test "$stlvisok" = "no"; then
8171             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
8172         fi
8173     fi
8175     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
8176     # when we don't make any dynamic libraries?
8177     if test "$DISABLE_DYNLOADING" = ""; then
8178         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
8179         cat > conftestlib1.cc <<_ACEOF
8180 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
8181 struct S2: S1<int> { virtual ~S2(); };
8182 S2::~S2() {}
8183 _ACEOF
8184         cat > conftestlib2.cc <<_ACEOF
8185 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
8186 struct S2: S1<int> { virtual ~S2(); };
8187 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
8188 _ACEOF
8189         gccvisinlineshiddenok=yes
8190         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
8191             gccvisinlineshiddenok=no
8192         else
8193             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
8194             dnl known to not work with -z defs (unsetting which makes the test
8195             dnl moot, though):
8196             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
8197             if test "$COM_IS_CLANG" = TRUE; then
8198                 for i in $CXX $CXXFLAGS; do
8199                     case $i in
8200                     -fsanitize=*)
8201                         my_linkflagsnoundefs=
8202                         break
8203                         ;;
8204                     esac
8205                 done
8206             fi
8207             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
8208                 gccvisinlineshiddenok=no
8209             fi
8210         fi
8212         rm -fr libconftest*
8213         AC_MSG_RESULT([$gccvisinlineshiddenok])
8214         if test "$gccvisinlineshiddenok" = "no"; then
8215             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
8216         fi
8217     fi
8219    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
8220     cat >visibility.cxx <<_ACEOF
8221 #pragma GCC visibility push(hidden)
8222 struct __attribute__ ((visibility ("default"))) TestStruct {
8223   static void Init();
8225 __attribute__ ((visibility ("default"))) void TestFunc() {
8226   TestStruct::Init();
8228 _ACEOF
8229     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
8230         gccvisbroken=yes
8231     else
8232         case "$host_cpu" in
8233         i?86|x86_64)
8234             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
8235                 gccvisbroken=no
8236             else
8237                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
8238                     gccvisbroken=no
8239                 else
8240                     gccvisbroken=yes
8241                 fi
8242             fi
8243             ;;
8244         *)
8245             gccvisbroken=no
8246             ;;
8247         esac
8248     fi
8249     rm -f visibility.s visibility.cxx
8251     AC_MSG_RESULT([$gccvisbroken])
8252     if test "$gccvisbroken" = "yes"; then
8253         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
8254     fi
8256     CPPFLAGS="$save_CPPFLAGS"
8258     AC_MSG_CHECKING([if CET endbranch is recognized])
8259 cat > endbr.s <<_ACEOF
8260 endbr32
8261 _ACEOF
8262     HAVE_ASM_END_BRANCH_INS_SUPPORT=
8263     if $CXX -c endbr.s -o endbr.o >/dev/null 2>&5; then
8264         AC_MSG_RESULT([yes])
8265         HAVE_ASM_END_BRANCH_INS_SUPPORT=TRUE
8266     else
8267         AC_MSG_RESULT([no])
8268     fi
8269     rm -f endbr.s endbr.o
8270     AC_SUBST(HAVE_ASM_END_BRANCH_INS_SUPPORT)
8272     AC_LANG_POP([C++])
8275 dnl ===================================================================
8276 dnl  Clang++ tests
8277 dnl ===================================================================
8279 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
8280 if test "$GCC" = "yes"; then
8281     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
8282     AC_LANG_PUSH([C++])
8283     save_CXXFLAGS=$CXXFLAGS
8284     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
8285     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
8286     CXXFLAGS=$save_CXXFLAGS
8287     AC_LANG_POP([C++])
8288     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
8289         AC_MSG_RESULT([yes])
8290     else
8291         AC_MSG_RESULT([no])
8292     fi
8294 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
8296 dnl ===================================================================
8297 dnl Compiler plugins
8298 dnl ===================================================================
8300 COMPILER_PLUGINS=
8301 # currently only Clang
8303 if test "$COM_IS_CLANG" != "TRUE"; then
8304     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
8305         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
8306         enable_compiler_plugins=no
8307     fi
8310 COMPILER_PLUGINS_COM_IS_CLANG=
8311 if test "$COM_IS_CLANG" = "TRUE"; then
8312     if test -n "$enable_compiler_plugins"; then
8313         compiler_plugins="$enable_compiler_plugins"
8314     elif test -n "$ENABLE_DBGUTIL"; then
8315         compiler_plugins=test
8316     else
8317         compiler_plugins=no
8318     fi
8319     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
8320         if test "$CLANGVER" -lt 120001; then
8321             if test "$compiler_plugins" = yes; then
8322                 AC_MSG_ERROR(
8323                     [Clang $CLANGVER is too old to build compiler plugins; need >= 12.0.1.])
8324             else
8325                 compiler_plugins=no
8326             fi
8327         fi
8328     fi
8329     if test "$compiler_plugins" != "no"; then
8330         dnl The prefix where Clang resides, override to where Clang resides if
8331         dnl using a source build:
8332         if test -z "$CLANGDIR"; then
8333             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
8334         fi
8335         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
8336         if test -z "$COMPILER_PLUGINS_CXX"; then
8337             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
8338         fi
8339         clangbindir=$CLANGDIR/bin
8340         if test "$build_os" = "cygwin"; then
8341             clangbindir=$(cygpath -u "$clangbindir")
8342         fi
8343         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
8344         if test -n "$LLVM_CONFIG"; then
8345             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
8346             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
8347             if test -z "$CLANGLIBDIR"; then
8348                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
8349             fi
8350             # Try if clang is built from source (in which case its includes are not together with llvm includes).
8351             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
8352             if $LLVM_CONFIG --src-root >/dev/null 2>&1; then
8353                 clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
8354                 if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
8355                     COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
8356                 fi
8357             fi
8358             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
8359             clangobjdir=$($LLVM_CONFIG --obj-root)
8360             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
8361                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
8362             fi
8363         fi
8364         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
8365         AC_LANG_PUSH([C++])
8366         save_CXX=$CXX
8367         save_CXXCPP=$CXXCPP
8368         save_CPPFLAGS=$CPPFLAGS
8369         save_CXXFLAGS=$CXXFLAGS
8370         save_LDFLAGS=$LDFLAGS
8371         save_LIBS=$LIBS
8372         CXX=$COMPILER_PLUGINS_CXX
8373         CXXCPP="$COMPILER_PLUGINS_CXX -E"
8374         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8375         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8376         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
8377             [COMPILER_PLUGINS=TRUE],
8378             [
8379             if test "$compiler_plugins" = "yes"; then
8380                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
8381             else
8382                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
8383                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
8384             fi
8385             ])
8386         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8387         dnl comment in compilerplugins/Makefile-clang.mk:
8388         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8389             LDFLAGS=""
8390             AC_MSG_CHECKING([for clang libraries to use])
8391             if test -z "$CLANGTOOLLIBS"; then
8392                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8393                 AC_LINK_IFELSE([
8394                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8395                         [[ clang::FullSourceLoc().dump(); ]])
8396                 ],[CLANGTOOLLIBS="$LIBS"],[])
8397             fi
8398             dnl If the above check for the combined -lclang-cpp failed, fall back to a hand-curated
8399             dnl list of individual -lclang* (but note that that list can become outdated over time,
8400             dnl see e.g. the since-reverted 5078591de9a0e65ca560a4f1913e90dfe95f66bf "CLANGTOOLLIBS
8401             dnl needs to include -lclangSupport now"):
8402             if test -z "$CLANGTOOLLIBS"; then
8403                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8404  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8405                 AC_LINK_IFELSE([
8406                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8407                         [[ clang::FullSourceLoc().dump(); ]])
8408                 ],[CLANGTOOLLIBS="$LIBS"],[])
8409             fi
8410             AC_MSG_RESULT([$CLANGTOOLLIBS])
8411             if test -z "$CLANGTOOLLIBS"; then
8412                 if test "$compiler_plugins" = "yes"; then
8413                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8414                 else
8415                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8416                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8417                 fi
8418                 COMPILER_PLUGINS=
8419             fi
8420             if test -n "$COMPILER_PLUGINS"; then
8421                 if test -z "$CLANGSYSINCLUDE"; then
8422                     if test -n "$LLVM_CONFIG"; then
8423                         # Path to the clang system headers (no idea if there's a better way to get it).
8424                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8425                     fi
8426                 fi
8427             fi
8428         fi
8429         CXX=$save_CXX
8430         CXXCPP=$save_CXXCPP
8431         CPPFLAGS=$save_CPPFLAGS
8432         CXXFLAGS=$save_CXXFLAGS
8433         LDFLAGS=$save_LDFLAGS
8434         LIBS="$save_LIBS"
8435         AC_LANG_POP([C++])
8437         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8438         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8439             #ifndef __clang__
8440             you lose
8441             #endif
8442             int foo=42;
8443             ]])],
8444             [AC_MSG_RESULT([yes])
8445              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8446             [AC_MSG_RESULT([no])])
8447         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8448     fi
8449 else
8450     if test "$enable_compiler_plugins" = "yes"; then
8451         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8452     fi
8454 COMPILER_PLUGINS_ANALYZER_PCH=
8455 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8456     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8458 AC_SUBST(COMPILER_PLUGINS)
8459 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8460 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8461 AC_SUBST(COMPILER_PLUGINS_CXX)
8462 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8463 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8464 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8465 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8466 AC_SUBST(CLANGDIR)
8467 AC_SUBST(CLANGLIBDIR)
8468 AC_SUBST(CLANGTOOLLIBS)
8469 AC_SUBST(CLANGSYSINCLUDE)
8471 # Plugin to help linker.
8472 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8473 # This makes --enable-lto build with clang work.
8474 AC_SUBST(LD_PLUGIN)
8476 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8477 AC_SUBST(HAVE_POSIX_FALLOCATE)
8479 JITC_PROCESSOR_TYPE=""
8480 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8481     # IBMs JDK needs this...
8482     JITC_PROCESSOR_TYPE=6
8483     export JITC_PROCESSOR_TYPE
8485 AC_SUBST([JITC_PROCESSOR_TYPE])
8487 # Misc Windows Stuff
8488 AC_ARG_WITH(ucrt-dir,
8489     AS_HELP_STRING([--with-ucrt-dir],
8490         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8491         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8492         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8493             Windows6.1-KB2999226-x64.msu
8494             Windows6.1-KB2999226-x86.msu
8495             Windows8.1-KB2999226-x64.msu
8496             Windows8.1-KB2999226-x86.msu
8497             Windows8-RT-KB2999226-x64.msu
8498             Windows8-RT-KB2999226-x86.msu
8499         A zip archive including those files is available from Microsoft site:
8500         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8503 UCRT_REDISTDIR="$with_ucrt_dir"
8504 if test $_os = "WINNT"; then
8505     find_msvc_x64_dlls
8506     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8507     MSVC_DLLS="$msvcdlls"
8508     if echo "$msvcdllpath" | grep -q "VC143.CRT$"; then
8509         with_redist=143
8510     elif echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8511         with_redist=142
8512     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8513         with_redist=141
8514     fi
8515     for i in $PKGFORMAT; do
8516         if test "$i" = msi; then
8517             find_msms "$with_redist"
8518             if test -n "$msmdir"; then
8519                 MSM_PATH=`win_short_path_for_make "$msmdir"`
8520                 SCPDEFS="$SCPDEFS -DWITH_VC_REDIST=$with_redist"
8521             fi
8522             break
8523         fi
8524     done
8526     if test "$UCRT_REDISTDIR" = "no"; then
8527         dnl explicitly disabled
8528         UCRT_REDISTDIR=""
8529     else
8530         if ! test -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x64.msu" -a \
8531                   -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x86.msu" -a \
8532                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x64.msu" -a \
8533                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x86.msu" -a \
8534                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x64.msu" -a \
8535                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x86.msu"; then
8536             UCRT_REDISTDIR=""
8537             if test -n "$PKGFORMAT"; then
8538                for i in $PKGFORMAT; do
8539                    case "$i" in
8540                    msi)
8541                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8542                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8543                        ;;
8544                    esac
8545                done
8546             fi
8547         fi
8548     fi
8551 AC_SUBST(UCRT_REDISTDIR)
8552 AC_SUBST(MSVC_DLL_PATH)
8553 AC_SUBST(MSVC_DLLS)
8554 AC_SUBST(MSM_PATH)
8557 dnl ===================================================================
8558 dnl Checks for Java
8559 dnl ===================================================================
8560 if test "$ENABLE_JAVA" != ""; then
8562     # Windows-specific tests
8563     if test "$build_os" = "cygwin"; then
8564         if test -z "$with_jdk_home"; then
8565             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8566             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8567             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/CurrentVersion"
8568             if test -n "$regvalue"; then
8569                 ver=$regvalue
8570                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver/JavaHome"
8571                 with_jdk_home=$regvalue
8572             fi
8573             howfound="found automatically"
8574         else
8575             with_jdk_home=`win_short_path_for_make "$with_jdk_home"`
8576             howfound="you passed"
8577         fi
8579         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8580             AC_MSG_ERROR([No JDK found, pass the --with-jdk-home option (or fix the path) pointing to a $WIN_HOST_BITS-bit JDK >= 9])
8581         fi
8582     fi
8584     # macOS: /usr/libexec/java_home helps to set the current JDK_HOME. Actually JDK_HOME should NOT be set where java (/usr/bin/java) is located.
8585     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8586     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8587         with_jdk_home=`/usr/libexec/java_home`
8588     fi
8590     JAVA_HOME=; export JAVA_HOME
8591     if test -z "$with_jdk_home"; then
8592         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8593     else
8594         _java_path="$with_jdk_home/bin/$with_java"
8595         dnl Check if there is a Java interpreter at all.
8596         if test -x "$_java_path"; then
8597             JAVAINTERPRETER=$_java_path
8598         else
8599             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8600         fi
8601     fi
8603     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8604     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8605     dnl loaded by java to run JunitTests:
8606     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8607         shortjdkhome=`cygpath -d "$with_jdk_home"`
8608         if test $WIN_HOST_BITS -eq 64 -a -f "$with_jdk_home/bin/java.exe" -a "`$shortjdkhome/bin/java.exe -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8609             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8610             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8611         elif test $WIN_HOST_BITS -eq 32 -a -f "$with_jdk_home/bin/java.exe" -a "`$shortjdkhome/bin/java.exe -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8612             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8613             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8614         fi
8616         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8617             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8618         fi
8619         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8620     elif test "$cross_compiling" != "yes"; then
8621         case $CPUNAME in
8622             AARCH64|AXP|X86_64|IA64|POWERPC64|S390X|SPARC64|MIPS64|RISCV64|LOONGARCH64)
8623                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8624                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8625                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8626                 fi
8627                 ;;
8628             *) # assumption: everything else 32-bit
8629                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8630                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8631                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8632                 fi
8633                 ;;
8634         esac
8635     fi
8638 dnl ===================================================================
8639 dnl Checks for JDK.
8640 dnl ===================================================================
8642 # Whether all the complexity here actually is needed any more or not, no idea.
8644 JDK_SECURITYMANAGER_DISALLOWED=
8645 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8646     _gij_longver=0
8647     AC_MSG_CHECKING([the installed JDK])
8648     if test -n "$JAVAINTERPRETER"; then
8649         dnl java -version sends output to stderr!
8650         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8651             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8652         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8653             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8654         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8655             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8656         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8657             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8658         else
8659             JDK=sun
8661             dnl Sun JDK specific tests
8662             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8663             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8665             if test "$_jdk_ver" -lt 90000; then
8666                 AC_MSG_ERROR([JDK is too old, you need at least 9 ($_jdk_ver < 90000)])
8667             fi
8668             dnl TODO: Presumably, the Security Manager will not merely be disallowed, but be
8669             dnl completely removed in some Java version > 18 (see
8670             dnl <https://openjdk.java.net/jeps/411> "Deprecate the Security Manager for Removal"):
8671             if test "$_jdk_ver" -ge 180000; then
8672                 JDK_SECURITYMANAGER_DISALLOWED=TRUE
8673             fi
8675             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8676             if test "$_os" = "WINNT"; then
8677                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8678             fi
8679             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8681             # set to limit VM usage for JunitTests
8682             JAVAIFLAGS=-Xmx64M
8683             # set to limit VM usage for javac
8684             JAVACFLAGS=-J-Xmx128M
8685         fi
8686     else
8687         AC_MSG_ERROR([Java not found. You need at least JDK 9])
8688     fi
8689 else
8690     if test -z "$ENABLE_JAVA"; then
8691         dnl Java disabled
8692         JAVA_HOME=
8693         export JAVA_HOME
8694     elif test "$cross_compiling" = "yes"; then
8695         # Just assume compatibility of build and host JDK
8696         JDK=$JDK_FOR_BUILD
8697         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8698     fi
8701 dnl ===================================================================
8702 dnl Checks for javac
8703 dnl ===================================================================
8704 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8705     javacompiler="javac"
8706     : ${JAVA_SOURCE_VER=8}
8707     : ${JAVA_TARGET_VER=8}
8708     if test -z "$with_jdk_home"; then
8709         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8710     else
8711         _javac_path="$with_jdk_home/bin/$javacompiler"
8712         dnl Check if there is a Java compiler at all.
8713         if test -x "$_javac_path"; then
8714             JAVACOMPILER=$_javac_path
8715         fi
8716     fi
8717     if test -z "$JAVACOMPILER"; then
8718         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8719     fi
8720     if test "$build_os" = "cygwin"; then
8721         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8722             JAVACOMPILER="${JAVACOMPILER}.exe"
8723         fi
8724         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8725     fi
8728 dnl ===================================================================
8729 dnl Checks for javadoc
8730 dnl ===================================================================
8731 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8732     if test -z "$with_jdk_home"; then
8733         AC_PATH_PROG(JAVADOC, javadoc)
8734     else
8735         _javadoc_path="$with_jdk_home/bin/javadoc"
8736         dnl Check if there is a javadoc at all.
8737         if test -x "$_javadoc_path"; then
8738             JAVADOC=$_javadoc_path
8739         else
8740             AC_PATH_PROG(JAVADOC, javadoc)
8741         fi
8742     fi
8743     if test -z "$JAVADOC"; then
8744         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8745     fi
8746     if test "$build_os" = "cygwin"; then
8747         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8748             JAVADOC="${JAVADOC}.exe"
8749         fi
8750         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8751     fi
8753     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8754     JAVADOCISGJDOC="yes"
8755     fi
8757 AC_SUBST(JAVADOC)
8758 AC_SUBST(JAVADOCISGJDOC)
8760 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8761     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8762     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8763         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8764            # try to recover first by looking whether we have an alternative
8765            # system as in Debian or newer SuSEs where following /usr/bin/javac
8766            # over /etc/alternatives/javac leads to the right bindir where we
8767            # just need to strip a bit away to get a valid JAVA_HOME
8768            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8769         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8770             # maybe only one level of symlink (e.g. on Mac)
8771             JAVA_HOME=$(readlink $JAVACOMPILER)
8772             if test "$(dirname $JAVA_HOME)" = "."; then
8773                 # we've got no path to trim back
8774                 JAVA_HOME=""
8775             fi
8776         else
8777             # else warn
8778             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8779             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8780             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8781             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8782         fi
8783         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8784         if test "$JAVA_HOME" != "/usr"; then
8785             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8786                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8787                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8788                 dnl Tiger already returns a JDK path...
8789                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8790             else
8791                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8792                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8793                 dnl that checks which version to run
8794                 if test -f "$JAVA_HOME"; then
8795                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8796                 fi
8797             fi
8798         fi
8799     fi
8800     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8802     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8803     if test -z "$JAVA_HOME"; then
8804         if test "x$with_jdk_home" = "x"; then
8805             cat > findhome.java <<_ACEOF
8806 [import java.io.File;
8808 class findhome
8810     public static void main(String args[])
8811     {
8812         String jrelocation = System.getProperty("java.home");
8813         File jre = new File(jrelocation);
8814         System.out.println(jre.getParent());
8815     }
8817 _ACEOF
8818             AC_MSG_CHECKING([if javac works])
8819             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8820             AC_TRY_EVAL(javac_cmd)
8821             if test $? = 0 -a -f ./findhome.class; then
8822                 AC_MSG_RESULT([javac works])
8823             else
8824                 echo "configure: javac test failed" >&5
8825                 cat findhome.java >&5
8826                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8827             fi
8828             AC_MSG_CHECKING([if gij knows its java.home])
8829             JAVA_HOME=`$JAVAINTERPRETER findhome`
8830             if test $? = 0 -a "$JAVA_HOME" != ""; then
8831                 AC_MSG_RESULT([$JAVA_HOME])
8832             else
8833                 echo "configure: java test failed" >&5
8834                 cat findhome.java >&5
8835                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8836             fi
8837             # clean-up after ourselves
8838             rm -f ./findhome.java ./findhome.class
8839         else
8840             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8841         fi
8842     fi
8844     # now check if $JAVA_HOME is really valid
8845     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8846         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8847             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8848             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8849             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
8850             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
8851             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
8852             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
8853         fi
8854     fi
8855     PathFormat "$JAVA_HOME"
8856     JAVA_HOME="$formatted_path"
8859 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
8860     "$_os" != Darwin
8861 then
8862     AC_MSG_CHECKING([for JAWT lib])
8863     if test "$_os" = WINNT; then
8864         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
8865         JAWTLIB=jawt.lib
8866     else
8867         case "$host_cpu" in
8868         arm*)
8869             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
8870             JAVA_ARCH=$my_java_arch
8871             ;;
8872         i*86)
8873             my_java_arch=i386
8874             ;;
8875         m68k)
8876             my_java_arch=m68k
8877             ;;
8878         powerpc)
8879             my_java_arch=ppc
8880             ;;
8881         powerpc64)
8882             my_java_arch=ppc64
8883             ;;
8884         powerpc64le)
8885             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
8886             JAVA_ARCH=$my_java_arch
8887             ;;
8888         sparc64)
8889             my_java_arch=sparcv9
8890             ;;
8891         x86_64)
8892             my_java_arch=amd64
8893             ;;
8894         *)
8895             my_java_arch=$host_cpu
8896             ;;
8897         esac
8898         # This is where JDK9 puts the library
8899         if test -e "$JAVA_HOME/lib/libjawt.so"; then
8900             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
8901         else
8902             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
8903         fi
8904         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
8905     fi
8906     AC_MSG_RESULT([$JAWTLIB])
8908 AC_SUBST(JAWTLIB)
8910 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
8911     case "$host_os" in
8913     cygwin*|wsl*)
8914         JAVAINC="-I$JAVA_HOME/include/win32"
8915         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
8916         ;;
8918     darwin*)
8919         if test -d "$JAVA_HOME/include/darwin"; then
8920             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
8921         else
8922             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
8923         fi
8924         ;;
8926     dragonfly*)
8927         JAVAINC="-I$JAVA_HOME/include"
8928         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8929         ;;
8931     freebsd*)
8932         JAVAINC="-I$JAVA_HOME/include"
8933         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
8934         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
8935         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8936         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8937         ;;
8939     k*bsd*-gnu*)
8940         JAVAINC="-I$JAVA_HOME/include"
8941         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8942         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8943         ;;
8945     linux-gnu*)
8946         JAVAINC="-I$JAVA_HOME/include"
8947         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8948         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8949         ;;
8951     *netbsd*)
8952         JAVAINC="-I$JAVA_HOME/include"
8953         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
8954         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8955        ;;
8957     openbsd*)
8958         JAVAINC="-I$JAVA_HOME/include"
8959         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
8960         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8961         ;;
8963     solaris*)
8964         JAVAINC="-I$JAVA_HOME/include"
8965         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
8966         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8967         ;;
8968     esac
8970 SOLARINC="$SOLARINC $JAVAINC"
8972 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8973     JAVA_HOME_FOR_BUILD=$JAVA_HOME
8974     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
8975     JDK_FOR_BUILD=$JDK
8976     JDK_SECURITYMANAGER_DISALLOWED_FOR_BUILD=$JDK_SECURITYMANAGER_DISALLOWED
8979 AC_SUBST(JAVACFLAGS)
8980 AC_SUBST(JAVACOMPILER)
8981 AC_SUBST(JAVAINTERPRETER)
8982 AC_SUBST(JAVAIFLAGS)
8983 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
8984 AC_SUBST(JAVA_HOME)
8985 AC_SUBST(JAVA_HOME_FOR_BUILD)
8986 AC_SUBST(JDK)
8987 AC_SUBST(JDK_FOR_BUILD)
8988 AC_SUBST(JDK_SECURITYMANAGER_DISALLOWED_FOR_BUILD)
8989 AC_SUBST(JAVA_SOURCE_VER)
8990 AC_SUBST(JAVA_TARGET_VER)
8993 dnl ===================================================================
8994 dnl Export file validation
8995 dnl ===================================================================
8996 AC_MSG_CHECKING([whether to enable export file validation])
8997 if test "$with_export_validation" != "no"; then
8998     if test -z "$ENABLE_JAVA"; then
8999         if test "$with_export_validation" = "yes"; then
9000             AC_MSG_ERROR([requested, but Java is disabled])
9001         else
9002             AC_MSG_RESULT([no, as Java is disabled])
9003         fi
9004     elif ! test -d "${SRC_ROOT}/schema"; then
9005         if test "$with_export_validation" = "yes"; then
9006             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
9007         else
9008             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
9009         fi
9010     else
9011         AC_MSG_RESULT([yes])
9012         AC_DEFINE(HAVE_EXPORT_VALIDATION)
9014         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
9015         if test -z "$ODFVALIDATOR"; then
9016             # remember to download the ODF toolkit with validator later
9017             AC_MSG_NOTICE([no odfvalidator found, will download it])
9018             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
9019             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
9021             # and fetch name of odfvalidator jar name from download.lst
9022             ODFVALIDATOR_JAR=`$SED -n -e "s/^ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
9023             AC_SUBST(ODFVALIDATOR_JAR)
9025             if test -z "$ODFVALIDATOR_JAR"; then
9026                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
9027             fi
9028         fi
9029         if test "$build_os" = "cygwin"; then
9030             # In case of Cygwin it will be executed from Windows,
9031             # so we need to run bash and absolute path to validator
9032             # so instead of "odfvalidator" it will be
9033             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
9034             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
9035         else
9036             ODFVALIDATOR="sh $ODFVALIDATOR"
9037         fi
9038         AC_SUBST(ODFVALIDATOR)
9041         AC_PATH_PROGS(OFFICEOTRON, officeotron)
9042         if test -z "$OFFICEOTRON"; then
9043             # remember to download the officeotron with validator later
9044             AC_MSG_NOTICE([no officeotron found, will download it])
9045             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
9046             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
9048             # and fetch name of officeotron jar name from download.lst
9049             OFFICEOTRON_JAR=`$SED -n -e "s/^OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
9050             AC_SUBST(OFFICEOTRON_JAR)
9052             if test -z "$OFFICEOTRON_JAR"; then
9053                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
9054             fi
9055         else
9056             # check version of existing officeotron
9057             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
9058             if test 0"$OFFICEOTRON_VER" -lt 704; then
9059                 AC_MSG_ERROR([officeotron too old])
9060             fi
9061         fi
9062         if test "$build_os" = "cygwin"; then
9063             # In case of Cygwin it will be executed from Windows,
9064             # so we need to run bash and absolute path to validator
9065             # so instead of "odfvalidator" it will be
9066             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
9067             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
9068         else
9069             OFFICEOTRON="sh $OFFICEOTRON"
9070         fi
9071     fi
9072     AC_SUBST(OFFICEOTRON)
9073 else
9074     AC_MSG_RESULT([no])
9077 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
9078 if test "$with_bffvalidator" != "no"; then
9079     AC_DEFINE(HAVE_BFFVALIDATOR)
9081     if test "$with_export_validation" = "no"; then
9082         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
9083     fi
9085     if test "$with_bffvalidator" = "yes"; then
9086         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
9087     else
9088         BFFVALIDATOR="$with_bffvalidator"
9089     fi
9091     if test "$build_os" = "cygwin"; then
9092         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
9093             AC_MSG_RESULT($BFFVALIDATOR)
9094         else
9095             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
9096         fi
9097     elif test -n "$BFFVALIDATOR"; then
9098         # We are not in Cygwin but need to run Windows binary with wine
9099         AC_PATH_PROGS(WINE, wine)
9101         # so swap in a shell wrapper that converts paths transparently
9102         BFFVALIDATOR_EXE="$BFFVALIDATOR"
9103         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
9104         AC_SUBST(BFFVALIDATOR_EXE)
9105         AC_MSG_RESULT($BFFVALIDATOR)
9106     else
9107         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
9108     fi
9109     AC_SUBST(BFFVALIDATOR)
9110 else
9111     AC_MSG_RESULT([no])
9114 dnl ===================================================================
9115 dnl Check for epm (not needed for Windows)
9116 dnl ===================================================================
9117 AC_MSG_CHECKING([whether to enable EPM for packing])
9118 if test "$enable_epm" = "yes"; then
9119     AC_MSG_RESULT([yes])
9120     if test "$_os" != "WINNT"; then
9121         if test $_os = Darwin; then
9122             EPM=internal
9123         elif test -n "$with_epm"; then
9124             EPM=$with_epm
9125         else
9126             AC_PATH_PROG(EPM, epm, no)
9127         fi
9128         if test "$EPM" = "no" -o "$EPM" = "internal"; then
9129             AC_MSG_NOTICE([EPM will be built.])
9130             BUILD_TYPE="$BUILD_TYPE EPM"
9131             EPM=${WORKDIR}/UnpackedTarball/epm/epm
9132         else
9133             # Gentoo has some epm which is something different...
9134             AC_MSG_CHECKING([whether the found epm is the right epm])
9135             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
9136                 AC_MSG_RESULT([yes])
9137             else
9138                 AC_MSG_ERROR([no. Install ESP Package Manager (https://jimjag.github.io/epm/) and/or specify the path to the right epm])
9139             fi
9140             AC_MSG_CHECKING([epm version])
9141             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
9142             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
9143                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
9144                 AC_MSG_RESULT([OK, >= 3.7])
9145             else
9146                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
9147                 AC_MSG_ERROR([Install ESP Package Manager (https://jimjag.github.io/epm/) and/or specify the path to the right epm])
9148             fi
9149         fi
9150     fi
9152     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
9153         AC_MSG_CHECKING([for rpm])
9154         for a in "$RPM" rpmbuild rpm; do
9155             $a --usage >/dev/null 2> /dev/null
9156             if test $? -eq 0; then
9157                 RPM=$a
9158                 break
9159             else
9160                 $a --version >/dev/null 2> /dev/null
9161                 if test $? -eq 0; then
9162                     RPM=$a
9163                     break
9164                 fi
9165             fi
9166         done
9167         if test -z "$RPM"; then
9168             AC_MSG_ERROR([not found])
9169         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
9170             RPM_PATH=`which $RPM`
9171             AC_MSG_RESULT([$RPM_PATH])
9172             SCPDEFS="$SCPDEFS -DWITH_RPM"
9173         else
9174             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
9175         fi
9176     fi
9177     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
9178         AC_PATH_PROG(DPKG, dpkg, no)
9179         if test "$DPKG" = "no"; then
9180             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
9181         fi
9182     fi
9183     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
9184        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9185         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
9186             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
9187                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
9188                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
9189                     AC_MSG_RESULT([yes])
9190                 else
9191                     AC_MSG_RESULT([no])
9192                     if echo "$PKGFORMAT" | $GREP -q rpm; then
9193                         _pt="rpm"
9194                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
9195                         add_warning "the rpms will need to be installed with --nodeps"
9196                     else
9197                         _pt="pkg"
9198                     fi
9199                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
9200                     add_warning "the ${_pt}s will not be relocatable"
9201                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
9202                                  relocation will work, you need to patch your epm with the
9203                                  patch in epm/epm-3.7.patch or build with
9204                                  --with-epm=internal which will build a suitable epm])
9205                 fi
9206             fi
9207         fi
9208     fi
9209     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9210         AC_PATH_PROG(PKGMK, pkgmk, no)
9211         if test "$PKGMK" = "no"; then
9212             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
9213         fi
9214     fi
9215     AC_SUBST(RPM)
9216     AC_SUBST(DPKG)
9217     AC_SUBST(PKGMK)
9218 else
9219     for i in $PKGFORMAT; do
9220         case "$i" in
9221         bsd | deb | pkg | rpm | native | portable)
9222             AC_MSG_ERROR(
9223                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
9224             ;;
9225         esac
9226     done
9227     AC_MSG_RESULT([no])
9228     EPM=NO
9230 AC_SUBST(EPM)
9232 ENABLE_LWP=
9233 if test "$enable_lotuswordpro" = "yes"; then
9234     ENABLE_LWP="TRUE"
9236 AC_SUBST(ENABLE_LWP)
9238 dnl ===================================================================
9239 dnl Check for building ODK
9240 dnl ===================================================================
9241 AC_MSG_CHECKING([whether to build the ODK])
9242 if test "$enable_odk" = yes; then
9243     if test "$DISABLE_DYNLOADING" = TRUE; then
9244         AC_MSG_ERROR([can't build ODK for --disable-dynamic-loading builds])
9245     fi
9246     AC_MSG_RESULT([yes])
9247     BUILD_TYPE="$BUILD_TYPE ODK"
9248 else
9249     AC_MSG_RESULT([no])
9252 if test "$enable_odk" != yes; then
9253     unset DOXYGEN
9254 else
9255     if test "$with_doxygen" = no; then
9256         AC_MSG_CHECKING([for doxygen])
9257         unset DOXYGEN
9258         AC_MSG_RESULT([no])
9259     else
9260         if test "$with_doxygen" = yes; then
9261             AC_PATH_PROG([DOXYGEN], [doxygen])
9262             if test -z "$DOXYGEN"; then
9263                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
9264             fi
9265             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
9266                 if ! dot -V 2>/dev/null; then
9267                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
9268                 fi
9269             fi
9270         else
9271             AC_MSG_CHECKING([for doxygen])
9272             DOXYGEN=$with_doxygen
9273             AC_MSG_RESULT([$DOXYGEN])
9274         fi
9275         if test -n "$DOXYGEN"; then
9276             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
9277             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
9278             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
9279                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
9280             fi
9281         fi
9282     fi
9284 AC_SUBST([DOXYGEN])
9286 dnl ==================================================================
9287 dnl libfuzzer
9288 dnl ==================================================================
9289 AC_MSG_CHECKING([whether to enable fuzzers])
9290 if test "$enable_fuzzers" != yes; then
9291     AC_MSG_RESULT([no])
9292 else
9293     if test -z $LIB_FUZZING_ENGINE; then
9294       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
9295     fi
9296     AC_MSG_RESULT([yes])
9297     ENABLE_FUZZERS="TRUE"
9298     AC_DEFINE([ENABLE_FUZZERS],1)
9299     BUILD_TYPE="$BUILD_TYPE FUZZERS"
9301 AC_SUBST(LIB_FUZZING_ENGINE)
9303 dnl ===================================================================
9304 dnl Check for system zlib
9305 dnl ===================================================================
9306 if test "$with_system_zlib" = "auto"; then
9307     case "$_os" in
9308     WINNT)
9309         with_system_zlib="$with_system_libs"
9310         ;;
9311     *)
9312         if test "$enable_fuzzers" != "yes"; then
9313             with_system_zlib=yes
9314         else
9315             with_system_zlib=no
9316         fi
9317         ;;
9318     esac
9321 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
9322 dnl and has no pkg-config for it at least on some tinderboxes,
9323 dnl so leaving that out for now
9324 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
9325 AC_MSG_CHECKING([which zlib to use])
9326 if test "$with_system_zlib" = "yes"; then
9327     AC_MSG_RESULT([external])
9328     SYSTEM_ZLIB=TRUE
9329     AC_CHECK_HEADER(zlib.h, [],
9330         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
9331     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
9332         [AC_MSG_ERROR(zlib not found or functional)], [])
9333 else
9334     AC_MSG_RESULT([internal])
9335     SYSTEM_ZLIB=
9336     BUILD_TYPE="$BUILD_TYPE ZLIB"
9337     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
9338     if test "$COM" = "MSC"; then
9339         ZLIB_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/zlib.lib"
9340     else
9341         ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
9342     fi
9344 AC_SUBST(ZLIB_CFLAGS)
9345 AC_SUBST(ZLIB_LIBS)
9346 AC_SUBST(SYSTEM_ZLIB)
9348 dnl ===================================================================
9349 dnl Check for system jpeg
9350 dnl ===================================================================
9351 AC_MSG_CHECKING([which libjpeg to use])
9352 if test "$with_system_jpeg" = "yes"; then
9353     AC_MSG_RESULT([external])
9354     SYSTEM_LIBJPEG=TRUE
9355     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
9356         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
9357     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
9358         [AC_MSG_ERROR(jpeg library not found or functional)], [])
9359 else
9360     SYSTEM_LIBJPEG=
9361     AC_MSG_RESULT([internal, libjpeg-turbo])
9362     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
9364     case "$host_cpu" in
9365     x86_64 | amd64 | i*86 | x86 | ia32)
9366         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
9367         if test -z "$NASM" -a "$build_os" = "cygwin"; then
9368             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
9369                 NASM="$LODE_HOME/opt/bin/nasm"
9370             elif test -x "/opt/lo/bin/nasm"; then
9371                 NASM="/opt/lo/bin/nasm"
9372             fi
9373         fi
9375         if test -n "$NASM"; then
9376             AC_MSG_CHECKING([for object file format of host system])
9377             case "$host_os" in
9378               cygwin* | mingw* | pw32* | wsl*)
9379                 case "$host_cpu" in
9380                   x86_64)
9381                     objfmt='Win64-COFF'
9382                     ;;
9383                   *)
9384                     objfmt='Win32-COFF'
9385                     ;;
9386                 esac
9387               ;;
9388               msdosdjgpp* | go32*)
9389                 objfmt='COFF'
9390               ;;
9391               os2-emx*) # not tested
9392                 objfmt='MSOMF' # obj
9393               ;;
9394               linux*coff* | linux*oldld*)
9395                 objfmt='COFF' # ???
9396               ;;
9397               linux*aout*)
9398                 objfmt='a.out'
9399               ;;
9400               linux*)
9401                 case "$host_cpu" in
9402                   x86_64)
9403                     objfmt='ELF64'
9404                     ;;
9405                   *)
9406                     objfmt='ELF'
9407                     ;;
9408                 esac
9409               ;;
9410               kfreebsd* | freebsd* | netbsd* | openbsd*)
9411                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9412                   objfmt='BSD-a.out'
9413                 else
9414                   case "$host_cpu" in
9415                     x86_64 | amd64)
9416                       objfmt='ELF64'
9417                       ;;
9418                     *)
9419                       objfmt='ELF'
9420                       ;;
9421                   esac
9422                 fi
9423               ;;
9424               solaris* | sunos* | sysv* | sco*)
9425                 case "$host_cpu" in
9426                   x86_64)
9427                     objfmt='ELF64'
9428                     ;;
9429                   *)
9430                     objfmt='ELF'
9431                     ;;
9432                 esac
9433               ;;
9434               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9435                 case "$host_cpu" in
9436                   x86_64)
9437                     objfmt='Mach-O64'
9438                     ;;
9439                   *)
9440                     objfmt='Mach-O'
9441                     ;;
9442                 esac
9443               ;;
9444               *)
9445                 objfmt='ELF ?'
9446               ;;
9447             esac
9449             AC_MSG_RESULT([$objfmt])
9450             if test "$objfmt" = 'ELF ?'; then
9451               objfmt='ELF'
9452               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9453             fi
9455             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9456             case "$objfmt" in
9457               MSOMF)      NAFLAGS='-fobj -DOBJ32 -DPIC';;
9458               Win32-COFF) NAFLAGS='-fwin32 -DWIN32 -DPIC';;
9459               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__ -DPIC';;
9460               COFF)       NAFLAGS='-fcoff -DCOFF -DPIC';;
9461               a.out)      NAFLAGS='-faout -DAOUT -DPIC';;
9462               BSD-a.out)  NAFLAGS='-faoutb -DAOUT -DPIC';;
9463               ELF)        NAFLAGS='-felf -DELF -DPIC';;
9464               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__ -DPIC';;
9465               RDF)        NAFLAGS='-frdf -DRDF -DPIC';;
9466               Mach-O)     NAFLAGS='-fmacho -DMACHO -DPIC';;
9467               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__ -DPIC';;
9468             esac
9469             AC_MSG_RESULT([$NAFLAGS])
9471             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9472             cat > conftest.asm << EOF
9473             [%line __oline__ "configure"
9474                     section .text
9475                     global  _main,main
9476             _main:
9477             main:   xor     eax,eax
9478                     ret
9479             ]
9481             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9482             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9483               AC_MSG_RESULT(yes)
9484             else
9485               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9486               cat conftest.asm >&AS_MESSAGE_LOG_FD
9487               rm -rf conftest*
9488               AC_MSG_RESULT(no)
9489               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9490               NASM=""
9491             fi
9493         fi
9495         if test -z "$NASM"; then
9496 cat << _EOS
9497 ****************************************************************************
9498 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9499 To get one please:
9501 _EOS
9502             if test "$build_os" = "cygwin"; then
9503 cat << _EOS
9504 install a pre-compiled binary for Win32
9506 mkdir -p /opt/lo/bin
9507 cd /opt/lo/bin
9508 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9509 chmod +x nasm
9511 or get and install one from https://www.nasm.us/
9513 Then re-run autogen.sh
9515 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9516 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`which nasm\` finds it.
9518 _EOS
9519             else
9520 cat << _EOS
9521 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/main/BUILDING.md
9523 _EOS
9524             fi
9525             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9526             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9527         fi
9528       ;;
9529     esac
9532 AC_SUBST(NASM)
9533 AC_SUBST(NAFLAGS)
9534 AC_SUBST(LIBJPEG_CFLAGS)
9535 AC_SUBST(LIBJPEG_LIBS)
9536 AC_SUBST(SYSTEM_LIBJPEG)
9538 dnl ===================================================================
9539 dnl Check for system clucene
9540 dnl ===================================================================
9541 libo_CHECK_SYSTEM_MODULE([clucene],[CLUCENE],[libclucene-core])
9542 if test "$SYSTEM_CLUCENE" = TRUE; then
9543     AC_LANG_PUSH([C++])
9544     save_CXXFLAGS=$CXXFLAGS
9545     save_CPPFLAGS=$CPPFLAGS
9546     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9547     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9548     dnl https://sourceforge.net/p/clucene/bugs/200/
9549     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9550     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9551                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9552     CXXFLAGS=$save_CXXFLAGS
9553     CPPFLAGS=$save_CPPFLAGS
9554     AC_LANG_POP([C++])
9555     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9558 dnl ===================================================================
9559 dnl Check for system expat
9560 dnl ===================================================================
9561 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9563 dnl ===================================================================
9564 dnl Check for system xmlsec
9565 dnl ===================================================================
9566 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.35])
9568 AC_MSG_CHECKING([whether to enable Embedded OpenType support])
9569 if test "$enable_eot" = "yes"; then
9570     ENABLE_EOT="TRUE"
9571     AC_DEFINE([ENABLE_EOT])
9572     AC_MSG_RESULT([yes])
9574     libo_CHECK_SYSTEM_MODULE([libeot],[LIBEOT],[libeot >= 0.01])
9575 else
9576     ENABLE_EOT=
9577     AC_MSG_RESULT([no])
9579 AC_SUBST([ENABLE_EOT])
9581 dnl ===================================================================
9582 dnl Check for DLP libs
9583 dnl ===================================================================
9584 REVENGE_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/librevenge/inc"
9585 AS_IF([test "$COM" = "MSC"],
9586       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9587       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9589 REVENGE_LIBS_internal="-L${librevenge_libdir} -lrevenge-0.0"
9590 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1])
9592 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9594 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9596 WPD_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/libwpd/inc"
9597 AS_IF([test "$COM" = "MSC"],
9598       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9599       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9601 WPD_LIBS_internal="-L${libwpd_libdir} -lwpd-0.10"
9602 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10])
9604 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9606 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9607 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.14])
9609 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9611 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9613 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9615 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.21])
9616 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.21])
9618 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9619 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10])
9621 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9623 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9624 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9626 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9628 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9630 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9632 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9634 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9635 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9637 dnl ===================================================================
9638 dnl Check for system lcms2
9639 dnl ===================================================================
9640 if test "$with_system_lcms2" != "yes"; then
9641     SYSTEM_LCMS2=
9643 LCMS2_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/lcms2/include"
9644 LCMS2_LIBS_internal="-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"
9645 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2])
9646 if test "$GCC" = "yes"; then
9647     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9649 if test "$COM" = "MSC"; then # override the above
9650     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9653 dnl ===================================================================
9654 dnl Check for system cppunit
9655 dnl ===================================================================
9656 if test "$_os" != "Android" ; then
9657     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9660 dnl ===================================================================
9661 dnl Check whether freetype is available
9663 dnl FreeType has 3 different kinds of versions
9664 dnl * release, like 2.4.10
9665 dnl * libtool, like 13.0.7 (this what pkg-config returns)
9666 dnl * soname
9667 dnl FreeType's docs/VERSION.DLL provides a table mapping between the three
9669 dnl 9.9.3 is 2.2.0
9670 dnl When the minimal version is at least 2.8.1, remove Skia's check down below.
9671 dnl ===================================================================
9672 FREETYPE_CFLAGS_internal="${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"
9673 if test "x$ac_config_site_64bit_host" = xYES; then
9674     FREETYPE_LIBS_internal="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9675 else
9676     FREETYPE_LIBS_internal="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9678 libo_CHECK_SYSTEM_MODULE([freetype],[FREETYPE],[freetype2 >= 9.9.3],,system,TRUE)
9680 # ===================================================================
9681 # Check for system libxslt
9682 # to prevent incompatibilities between internal libxml2 and external libxslt,
9683 # or vice versa, use with_system_libxml here
9684 # ===================================================================
9685 if test "$with_system_libxml" = "auto"; then
9686     case "$_os" in
9687     WINNT|iOS|Android)
9688         with_system_libxml="$with_system_libs"
9689         ;;
9690     Emscripten)
9691         with_system_libxml=no
9692         ;;
9693     *)
9694         if test "$enable_fuzzers" != "yes"; then
9695             with_system_libxml=yes
9696         else
9697             with_system_libxml=no
9698         fi
9699         ;;
9700     esac
9703 AC_MSG_CHECKING([which libxslt to use])
9704 if test "$with_system_libxml" = "yes"; then
9705     AC_MSG_RESULT([external])
9706     SYSTEM_LIBXSLT=TRUE
9707     if test "$_os" = "Darwin"; then
9708         dnl make sure to use SDK path
9709         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9710         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9711         dnl omit -L/usr/lib
9712         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9713         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9714     else
9715         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9716         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9717         FilterLibs "${LIBXSLT_LIBS}"
9718         LIBXSLT_LIBS="${filteredlibs}"
9719         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9720         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9721         FilterLibs "${LIBEXSLT_LIBS}"
9722         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9723     fi
9725     dnl Check for xsltproc
9726     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9727     if test "$XSLTPROC" = "no"; then
9728         AC_MSG_ERROR([xsltproc is required])
9729     fi
9730 else
9731     AC_MSG_RESULT([internal])
9732     SYSTEM_LIBXSLT=
9733     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9735 AC_SUBST(SYSTEM_LIBXSLT)
9736 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9737     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9739 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9741 AC_SUBST(LIBEXSLT_CFLAGS)
9742 AC_SUBST(LIBEXSLT_LIBS)
9743 AC_SUBST(LIBXSLT_CFLAGS)
9744 AC_SUBST(LIBXSLT_LIBS)
9745 AC_SUBST(XSLTPROC)
9747 # ===================================================================
9748 # Check for system libxml
9749 # ===================================================================
9750 AC_MSG_CHECKING([which libxml to use])
9751 if test "$with_system_libxml" = "yes"; then
9752     AC_MSG_RESULT([external])
9753     SYSTEM_LIBXML=TRUE
9754     if test "$_os" = "Darwin"; then
9755         dnl make sure to use SDK path
9756         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9757         dnl omit -L/usr/lib
9758         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9759     elif test $_os = iOS; then
9760         dnl make sure to use SDK path
9761         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9762         LIBXML_CFLAGS="-I$usr/include/libxml2"
9763         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9764     else
9765         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9766         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9767         FilterLibs "${LIBXML_LIBS}"
9768         LIBXML_LIBS="${filteredlibs}"
9769     fi
9771     dnl Check for xmllint
9772     AC_PATH_PROG(XMLLINT, xmllint, no)
9773     if test "$XMLLINT" = "no"; then
9774         AC_MSG_ERROR([xmllint is required])
9775     fi
9776 else
9777     AC_MSG_RESULT([internal])
9778     SYSTEM_LIBXML=
9779     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9780     if test "$COM" = "MSC"; then
9781         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9782     fi
9783     if test "$COM" = "MSC"; then
9784         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9785     else
9786         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9787         if test "$DISABLE_DYNLOADING" = TRUE; then
9788             LIBXML_LIBS="$LIBXML_LIBS -lm"
9789         fi
9790     fi
9791     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9793 AC_SUBST(SYSTEM_LIBXML)
9794 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9795     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9797 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9798 AC_SUBST(LIBXML_CFLAGS)
9799 AC_SUBST(LIBXML_LIBS)
9800 AC_SUBST(XMLLINT)
9802 # =====================================================================
9803 # Checking for a Python interpreter with version >= 3.3.
9804 # Optionally user can pass an option to configure, i. e.
9805 # ./configure PYTHON=/usr/bin/python
9806 # =====================================================================
9807 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9808     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9809     # unless PYTHON is defined as above which allows 'system'
9810     enable_python=internal
9812 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9813     if test -n "$PYTHON"; then
9814         PYTHON_FOR_BUILD=$PYTHON
9815     else
9816         # This allows a lack of system python with no error, we use internal one in that case.
9817         AM_PATH_PYTHON([3.3],, [:])
9818         # Clean PYTHON_VERSION checked below if cross-compiling
9819         PYTHON_VERSION=""
9820         if test "$PYTHON" != ":"; then
9821             PYTHON_FOR_BUILD=$PYTHON
9822         fi
9823     fi
9826 # Checks for Python to use for Pyuno
9827 AC_MSG_CHECKING([which Python to use for Pyuno])
9828 case "$enable_python" in
9829 no|disable)
9830     if test -z "$PYTHON_FOR_BUILD" -a "$cross_compiling" != yes; then
9831         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9832         # requirement from the choice whether to include Python stuff in the installer, but why
9833         # bother?
9834         AC_MSG_ERROR([Python is required at build time.])
9835     fi
9836     enable_python=no
9837     AC_MSG_RESULT([none])
9838     ;;
9839 ""|yes|auto)
9840     if test "$DISABLE_SCRIPTING" = TRUE; then
9841         if test -z "$PYTHON_FOR_BUILD" -a "$cross_compiling" != yes; then
9842             AC_MSG_ERROR([Python support can't be disabled without cross-compiling or a system python.])
9843         fi
9844         AC_MSG_RESULT([none, overridden by --disable-scripting])
9845         enable_python=no
9846     elif test $build_os = cygwin -o $build_os = wsl; then
9847         dnl When building on Windows we don't attempt to use any installed
9848         dnl "system"  Python.
9849         AC_MSG_RESULT([fully internal])
9850         enable_python=internal
9851     elif test "$cross_compiling" = yes; then
9852         AC_MSG_RESULT([system])
9853         enable_python=system
9854     else
9855         # Unset variables set by the above AM_PATH_PYTHON so that
9856         # we actually do check anew.
9857         AC_MSG_RESULT([])
9858         unset PYTHON am_cv_pathless_PYTHON ac_cv_path_PYTHON am_cv_python_version am_cv_python_platform am_cv_python_pythondir am_cv_python_pyexecdir
9859         AM_PATH_PYTHON([3.3],, [:])
9860         AC_MSG_CHECKING([which Python to use for Pyuno])
9861         if test "$PYTHON" = ":"; then
9862             if test -z "$PYTHON_FOR_BUILD"; then
9863                 AC_MSG_RESULT([fully internal])
9864             else
9865                 AC_MSG_RESULT([internal])
9866             fi
9867             enable_python=internal
9868         else
9869             AC_MSG_RESULT([system])
9870             enable_python=system
9871         fi
9872     fi
9873     ;;
9874 internal)
9875     AC_MSG_RESULT([internal])
9876     ;;
9877 fully-internal)
9878     AC_MSG_RESULT([fully internal])
9879     enable_python=internal
9880     ;;
9881 system)
9882     AC_MSG_RESULT([system])
9883     if test "$_os" = Darwin -a -z "$PYTHON"; then
9884         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
9885     fi
9886     ;;
9888     AC_MSG_ERROR([Incorrect --enable-python option])
9889     ;;
9890 esac
9892 if test $enable_python != no; then
9893     BUILD_TYPE="$BUILD_TYPE PYUNO"
9896 if test $enable_python = system; then
9897     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
9898         # Fallback: Accept these in the environment, or as set above
9899         # for MacOSX.
9900         :
9901     elif test "$cross_compiling" != yes; then
9902         # Unset variables set by the above AM_PATH_PYTHON so that
9903         # we actually do check anew.
9904         unset PYTHON am_cv_pathless_PYTHON ac_cv_path_PYTHON am_cv_python_version am_cv_python_platform am_cv_python_pythondir am_cv_python_pyexecdir
9905         # This causes an error if no python command is found
9906         AM_PATH_PYTHON([3.3])
9907         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
9908         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
9909         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
9910         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
9911         if test -z "$PKG_CONFIG"; then
9912             PYTHON_CFLAGS="-I$python_include"
9913             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9914         elif $PKG_CONFIG --exists python-$python_version-embed; then
9915             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
9916             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
9917         elif $PKG_CONFIG --exists python-$python_version; then
9918             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
9919             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
9920         else
9921             PYTHON_CFLAGS="-I$python_include"
9922             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9923         fi
9924         FilterLibs "${PYTHON_LIBS}"
9925         PYTHON_LIBS="${filteredlibs}"
9926     else
9927         dnl How to find out the cross-compilation Python installation path?
9928         AC_MSG_CHECKING([for python version])
9929         AS_IF([test -n "$PYTHON_VERSION"],
9930               [AC_MSG_RESULT([$PYTHON_VERSION])],
9931               [AC_MSG_RESULT([not found])
9932                AC_MSG_ERROR([no usable python found])])
9933         test -n "$PYTHON_CFLAGS" && break
9934     fi
9936     dnl Check if the headers really work
9937     save_CPPFLAGS="$CPPFLAGS"
9938     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
9939     AC_CHECK_HEADER(Python.h)
9940     CPPFLAGS="$save_CPPFLAGS"
9942     # let the PYTHON_FOR_BUILD match the same python installation that
9943     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
9944     # better for PythonTests.
9945     PYTHON_FOR_BUILD=$PYTHON
9948 if test "$with_lxml" != no; then
9949     if test -z "$PYTHON_FOR_BUILD"; then
9950         case $build_os in
9951             cygwin)
9952                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
9953                 ;;
9954             *)
9955                 if test "$cross_compiling" != yes ; then
9956                     BUILD_TYPE="$BUILD_TYPE LXML"
9957                 fi
9958                 ;;
9959         esac
9960     else
9961         AC_MSG_CHECKING([for python lxml])
9962         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
9963             AC_MSG_RESULT([yes])
9964         else
9965             case $build_os in
9966                 cygwin)
9967                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
9968                     ;;
9969                 *)
9970                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
9971                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
9972                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
9973                         else
9974                             BUILD_TYPE="$BUILD_TYPE LXML"
9975                             AC_MSG_RESULT([no, using internal lxml])
9976                         fi
9977                     else
9978                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
9979                     fi
9980                     ;;
9981             esac
9982         fi
9983     fi
9986 if test \( "$cross_compiling" = yes -a -z "$PYTHON_FOR_BUILD" \) -o "$enable_python" = internal; then
9987     SYSTEM_PYTHON=
9988     PYTHON_VERSION_MAJOR=3
9989     PYTHON_VERSION_MINOR=8
9990     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.18
9991     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
9992         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
9993     fi
9994     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
9996     # Embedded Python dies without Home set
9997     if test "$HOME" = ""; then
9998         export HOME=""
9999     fi
10002 dnl By now enable_python should be "system", "internal" or "no"
10003 case $enable_python in
10004 system)
10005     SYSTEM_PYTHON=TRUE
10007     if test "x$ac_cv_header_Python_h" != "xyes"; then
10008        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
10009     fi
10011     AC_LANG_PUSH(C)
10012     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
10013     AC_MSG_CHECKING([for correct python library version])
10014        AC_RUN_IFELSE([AC_LANG_SOURCE([[
10015 #include <Python.h>
10017 int main(int argc, char **argv) {
10018    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
10019    else return 1;
10021        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
10022     AC_LANG_POP(C)
10024     dnl FIXME Check if the Python library can be linked with, too?
10025     ;;
10027 internal)
10028     BUILD_TYPE="$BUILD_TYPE PYTHON"
10029     if test "$OS" = LINUX -o "$OS" = WNT ; then
10030         BUILD_TYPE="$BUILD_TYPE LIBFFI"
10031     fi
10032     ;;
10034     DISABLE_PYTHON=TRUE
10035     SYSTEM_PYTHON=
10036     ;;
10038     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
10039     ;;
10040 esac
10042 AC_SUBST(DISABLE_PYTHON)
10043 AC_SUBST(SYSTEM_PYTHON)
10044 AC_SUBST(PYTHON_CFLAGS)
10045 AC_SUBST(PYTHON_FOR_BUILD)
10046 AC_SUBST(PYTHON_LIBS)
10047 AC_SUBST(PYTHON_VERSION)
10048 AC_SUBST(PYTHON_VERSION_MAJOR)
10049 AC_SUBST(PYTHON_VERSION_MINOR)
10051 AC_MSG_CHECKING([whether to build LibreLogo])
10052 case "$enable_python" in
10053 no|disable)
10054     AC_MSG_RESULT([no; Python disabled])
10055     ;;
10057     if test "${enable_librelogo}" = "no"; then
10058         AC_MSG_RESULT([no])
10059     else
10060         AC_MSG_RESULT([yes])
10061         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
10062         AC_DEFINE([ENABLE_LIBRELOGO],1)
10063     fi
10064     ;;
10065 esac
10066 AC_SUBST(ENABLE_LIBRELOGO)
10068 ENABLE_MARIADBC=
10069 MARIADBC_MAJOR=1
10070 MARIADBC_MINOR=0
10071 MARIADBC_MICRO=2
10072 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
10073 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
10074     ENABLE_MARIADBC=TRUE
10075     AC_MSG_RESULT([yes])
10076     BUILD_TYPE="$BUILD_TYPE MARIADBC"
10077 else
10078     AC_MSG_RESULT([no])
10080 AC_SUBST(ENABLE_MARIADBC)
10081 AC_SUBST(MARIADBC_MAJOR)
10082 AC_SUBST(MARIADBC_MINOR)
10083 AC_SUBST(MARIADBC_MICRO)
10085 if test "$ENABLE_MARIADBC" = "TRUE"; then
10086     dnl ===================================================================
10087     dnl Check for system MariaDB
10088     dnl ===================================================================
10089     AC_MSG_CHECKING([which MariaDB to use])
10090     if test "$with_system_mariadb" = "yes"; then
10091         AC_MSG_RESULT([external])
10092         SYSTEM_MARIADB_CONNECTOR_C=TRUE
10093         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
10094         if test -z "$MARIADBCONFIG"; then
10095             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
10096             if test -z "$MARIADBCONFIG"; then
10097                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
10098                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
10099             fi
10100         fi
10101         AC_MSG_CHECKING([MariaDB version])
10102         MARIADB_VERSION=`$MARIADBCONFIG --version`
10103         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
10104         if test "$MARIADB_MAJOR" -ge "5"; then
10105             AC_MSG_RESULT([OK])
10106         else
10107             AC_MSG_ERROR([too old, use 5.0.x or later])
10108         fi
10109         AC_MSG_CHECKING([for MariaDB Client library])
10110         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
10111         if test "$COM_IS_CLANG" = TRUE; then
10112             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
10113         fi
10114         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
10115         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
10116         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
10117         dnl linux32:
10118         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
10119             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
10120             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
10121                 | sed -e 's|/lib64/|/lib/|')
10122         fi
10123         FilterLibs "${MARIADB_LIBS}"
10124         MARIADB_LIBS="${filteredlibs}"
10125         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
10126         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
10127         if test "$enable_bundle_mariadb" = "yes"; then
10128             AC_MSG_RESULT([yes])
10129             BUNDLE_MARIADB_CONNECTOR_C=TRUE
10130             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
10132 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
10134 /g' | grep -E '(mysqlclient|mariadb)')
10135             if test "$_os" = "Darwin"; then
10136                 LIBMARIADB=${LIBMARIADB}.dylib
10137             elif test "$_os" = "WINNT"; then
10138                 LIBMARIADB=${LIBMARIADB}.dll
10139             else
10140                 LIBMARIADB=${LIBMARIADB}.so
10141             fi
10142             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
10143             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
10144             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
10145                 AC_MSG_RESULT([found.])
10146                 PathFormat "$LIBMARIADB_PATH"
10147                 LIBMARIADB_PATH="$formatted_path"
10148             else
10149                 AC_MSG_ERROR([not found.])
10150             fi
10151         else
10152             AC_MSG_RESULT([no])
10153             BUNDLE_MARIADB_CONNECTOR_C=
10154         fi
10155     else
10156         AC_MSG_RESULT([internal])
10157         SYSTEM_MARIADB_CONNECTOR_C=
10158         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
10159         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
10160         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
10161     fi
10163     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
10164     AC_SUBST(MARIADB_CFLAGS)
10165     AC_SUBST(MARIADB_LIBS)
10166     AC_SUBST(LIBMARIADB)
10167     AC_SUBST(LIBMARIADB_PATH)
10168     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
10171 dnl ===================================================================
10172 dnl Check for system hsqldb
10173 dnl ===================================================================
10174 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
10175     AC_MSG_CHECKING([which hsqldb to use])
10176     if test "$with_system_hsqldb" = "yes"; then
10177         AC_MSG_RESULT([external])
10178         SYSTEM_HSQLDB=TRUE
10179         if test -z $HSQLDB_JAR; then
10180             HSQLDB_JAR=/usr/share/java/hsqldb.jar
10181         fi
10182         if ! test -f $HSQLDB_JAR; then
10183                AC_MSG_ERROR(hsqldb.jar not found.)
10184         fi
10185         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
10186         export HSQLDB_JAR
10187         if $PERL -e \
10188            'use Archive::Zip;
10189             my $file = "$ENV{'HSQLDB_JAR'}";
10190             my $zip = Archive::Zip->new( $file );
10191             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
10192             if ( $mf =~ m/Specification-Version: 1.8.*/ )
10193             {
10194                 push @l, split(/\n/, $mf);
10195                 foreach my $line (@l)
10196                 {
10197                     if ($line =~ m/Specification-Version:/)
10198                     {
10199                         ($t, $version) = split (/:/,$line);
10200                         $version =~ s/^\s//;
10201                         ($a, $b, $c, $d) = split (/\./,$version);
10202                         if ($c == "0" && $d > "8")
10203                         {
10204                             exit 0;
10205                         }
10206                         else
10207                         {
10208                             exit 1;
10209                         }
10210                     }
10211                 }
10212             }
10213             else
10214             {
10215                 exit 1;
10216             }'; then
10217             AC_MSG_RESULT([yes])
10218         else
10219             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
10220         fi
10221     else
10222         AC_MSG_RESULT([internal])
10223         SYSTEM_HSQLDB=
10224         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10225         NEED_ANT=TRUE
10226     fi
10227 else
10228     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
10229         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10230     fi
10232 AC_SUBST(SYSTEM_HSQLDB)
10233 AC_SUBST(HSQLDB_JAR)
10235 dnl ===================================================================
10236 dnl Check for PostgreSQL stuff
10237 dnl ===================================================================
10238 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
10239 if test "x$enable_postgresql_sdbc" != "xno"; then
10240     AC_MSG_RESULT([yes])
10241     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
10243     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
10244         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
10245     fi
10246     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
10247         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
10248     fi
10250     postgres_interface=""
10251     if test "$with_system_postgresql" = "yes"; then
10252         postgres_interface="external PostgreSQL"
10253         SYSTEM_POSTGRESQL=TRUE
10254         if test "$_os" = Darwin; then
10255             supp_path=''
10256             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
10257                 pg_supp_path="$P_SEP$d$pg_supp_path"
10258             done
10259         fi
10260         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
10261         if test -n "$PGCONFIG"; then
10262             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
10263             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
10264         else
10265             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
10266               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
10267               POSTGRESQL_LIB=$POSTGRESQL_LIBS
10268             ],[
10269               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
10270             ])
10271         fi
10272         FilterLibs "${POSTGRESQL_LIB}"
10273         POSTGRESQL_LIB="${filteredlibs}"
10274     else
10275         # if/when anything else than PostgreSQL uses Kerberos,
10276         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
10277         WITH_KRB5=
10278         WITH_GSSAPI=
10279         case "$_os" in
10280         Darwin)
10281             # macOS has system MIT Kerberos 5 since 10.4
10282             if test "$with_krb5" != "no"; then
10283                 WITH_KRB5=TRUE
10284                 save_LIBS=$LIBS
10285                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
10286                 # that the libraries where these functions are located on macOS will change, is it?
10287                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10288                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10289                 KRB5_LIBS=$LIBS
10290                 LIBS=$save_LIBS
10291                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10292                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10293                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10294                 LIBS=$save_LIBS
10295             fi
10296             if test "$with_gssapi" != "no"; then
10297                 WITH_GSSAPI=TRUE
10298                 save_LIBS=$LIBS
10299                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10300                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10301                 GSSAPI_LIBS=$LIBS
10302                 LIBS=$save_LIBS
10303             fi
10304             ;;
10305         WINNT)
10306             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
10307                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
10308             fi
10309             ;;
10310         Linux|GNU|*BSD|DragonFly)
10311             if test "$with_krb5" != "no"; then
10312                 WITH_KRB5=TRUE
10313                 save_LIBS=$LIBS
10314                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10315                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10316                 KRB5_LIBS=$LIBS
10317                 LIBS=$save_LIBS
10318                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10319                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10320                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10321                 LIBS=$save_LIBS
10322             fi
10323             if test "$with_gssapi" != "no"; then
10324                 WITH_GSSAPI=TRUE
10325                 save_LIBS=$LIBS
10326                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10327                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10328                 GSSAPI_LIBS=$LIBS
10329                 LIBS=$save_LIBS
10330             fi
10331             ;;
10332         *)
10333             if test "$with_krb5" = "yes"; then
10334                 WITH_KRB5=TRUE
10335                 save_LIBS=$LIBS
10336                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10337                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10338                 KRB5_LIBS=$LIBS
10339                 LIBS=$save_LIBS
10340                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10341                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10342                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10343                 LIBS=$save_LIBS
10344             fi
10345             if test "$with_gssapi" = "yes"; then
10346                 WITH_GSSAPI=TRUE
10347                 save_LIBS=$LIBS
10348                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10349                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10350                 LIBS=$save_LIBS
10351                 GSSAPI_LIBS=$LIBS
10352             fi
10353         esac
10355         if test -n "$with_libpq_path"; then
10356             SYSTEM_POSTGRESQL=TRUE
10357             postgres_interface="external libpq"
10358             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
10359             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
10360         else
10361             SYSTEM_POSTGRESQL=
10362             postgres_interface="internal"
10363             POSTGRESQL_LIB=""
10364             POSTGRESQL_INC="%OVERRIDE_ME%"
10365             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10366         fi
10367     fi
10369     AC_MSG_CHECKING([PostgreSQL C interface])
10370     AC_MSG_RESULT([$postgres_interface])
10372     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10373         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10374         save_CFLAGS=$CFLAGS
10375         save_CPPFLAGS=$CPPFLAGS
10376         save_LIBS=$LIBS
10377         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10378         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10379         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10380         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10381             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10382         CFLAGS=$save_CFLAGS
10383         CPPFLAGS=$save_CPPFLAGS
10384         LIBS=$save_LIBS
10385     fi
10386     BUILD_POSTGRESQL_SDBC=TRUE
10387 else
10388     AC_MSG_RESULT([no])
10390 AC_SUBST(WITH_KRB5)
10391 AC_SUBST(WITH_GSSAPI)
10392 AC_SUBST(GSSAPI_LIBS)
10393 AC_SUBST(KRB5_LIBS)
10394 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10395 AC_SUBST(SYSTEM_POSTGRESQL)
10396 AC_SUBST(POSTGRESQL_INC)
10397 AC_SUBST(POSTGRESQL_LIB)
10399 dnl ===================================================================
10400 dnl Check for Firebird stuff
10401 dnl ===================================================================
10402 ENABLE_FIREBIRD_SDBC=
10403 if test "$enable_firebird_sdbc" = "yes" ; then
10404     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10406     dnl ===================================================================
10407     dnl Check for system Firebird
10408     dnl ===================================================================
10409     AC_MSG_CHECKING([which Firebird to use])
10410     if test "$with_system_firebird" = "yes"; then
10411         AC_MSG_RESULT([external])
10412         SYSTEM_FIREBIRD=TRUE
10413         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10414         if test -z "$FIREBIRDCONFIG"; then
10415             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10416             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10417                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10418             ])
10419             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10420         else
10421             AC_MSG_NOTICE([fb_config found])
10422             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10423             AC_MSG_CHECKING([for Firebird Client library])
10424             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10425             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10426             FilterLibs "${FIREBIRD_LIBS}"
10427             FIREBIRD_LIBS="${filteredlibs}"
10428         fi
10429         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10430         AC_MSG_CHECKING([Firebird version])
10431         if test -n "${FIREBIRD_VERSION}"; then
10432             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10433             if test "$FIREBIRD_MAJOR" -ge "3"; then
10434                 AC_MSG_RESULT([OK])
10435             else
10436                 AC_MSG_ERROR([Ensure firebird >= 3 is installed])
10437             fi
10438         else
10439             save_CFLAGS="${CFLAGS}"
10440             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10441             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10442 #if defined(FB_API_VER) && FB_API_VER == 30
10443 int fb_api_is_30(void) { return 0; }
10444 #else
10445 #error "Wrong Firebird API version"
10446 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10447             CFLAGS="$save_CFLAGS"
10448         fi
10449         ENABLE_FIREBIRD_SDBC=TRUE
10450         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10451     elif test "$enable_database_connectivity" = no; then
10452         AC_MSG_RESULT([none])
10453     elif test "$cross_compiling" = "yes"; then
10454         AC_MSG_RESULT([none])
10455     else
10456         dnl Embedded Firebird has version 3.0
10457         dnl We need libatomic_ops for any non X86/X64 system
10458         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10459             dnl ===================================================================
10460             dnl Check for system libatomic_ops
10461             dnl ===================================================================
10462             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10463             if test "$with_system_libatomic_ops" = "yes"; then
10464                 SYSTEM_LIBATOMIC_OPS=TRUE
10465                 AC_CHECK_HEADERS(atomic_ops.h, [],
10466                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10467             else
10468                 SYSTEM_LIBATOMIC_OPS=
10469                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10470                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10471                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10472             fi
10473         fi
10475         AC_MSG_RESULT([internal])
10476         SYSTEM_FIREBIRD=
10477         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10478         FIREBIRD_LIBS="-lfbclient"
10480         if test "$with_system_libtommath" = "yes"; then
10481             SYSTEM_LIBTOMMATH=TRUE
10482             dnl check for tommath presence
10483             save_LIBS=$LIBS
10484             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10485             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10486             LIBS=$save_LIBS
10487         else
10488             SYSTEM_LIBTOMMATH=
10489             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10490             LIBTOMMATH_LIBS="-ltommath"
10491             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10492         fi
10494         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10495         ENABLE_FIREBIRD_SDBC=TRUE
10496         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10497     fi
10499 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10500 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10501 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10502 AC_SUBST(LIBATOMIC_OPS_LIBS)
10503 AC_SUBST(SYSTEM_FIREBIRD)
10504 AC_SUBST(FIREBIRD_CFLAGS)
10505 AC_SUBST(FIREBIRD_LIBS)
10506 AC_SUBST(SYSTEM_LIBTOMMATH)
10507 AC_SUBST(LIBTOMMATH_CFLAGS)
10508 AC_SUBST(LIBTOMMATH_LIBS)
10510 dnl ===================================================================
10511 dnl Check for system curl
10512 dnl ===================================================================
10513 libo_CHECK_SYSTEM_MODULE([curl],[CURL],[libcurl >= 7.68.0],enabled)
10515 dnl ===================================================================
10516 dnl Check for system boost
10517 dnl ===================================================================
10518 AC_MSG_CHECKING([which boost to use])
10519 if test "$with_system_boost" = "yes"; then
10520     AC_MSG_RESULT([external])
10521     SYSTEM_BOOST=TRUE
10522     AX_BOOST_BASE([1.66],,[AC_MSG_ERROR([no suitable Boost found])])
10523     AX_BOOST_DATE_TIME
10524     AX_BOOST_FILESYSTEM
10525     AX_BOOST_IOSTREAMS
10526     AX_BOOST_LOCALE
10527     AC_LANG_PUSH([C++])
10528     save_CXXFLAGS=$CXXFLAGS
10529     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10530     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10531        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10532     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10533        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10534     CXXFLAGS=$save_CXXFLAGS
10535     AC_LANG_POP([C++])
10536     # this is in m4/ax_boost_base.m4
10537     FilterLibs "${BOOST_LDFLAGS}"
10538     BOOST_LDFLAGS="${filteredlibs}"
10539 else
10540     AC_MSG_RESULT([internal])
10541     BUILD_TYPE="$BUILD_TYPE BOOST"
10542     SYSTEM_BOOST=
10543     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10544         # use warning-suppressing wrapper headers
10545         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10546     else
10547         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10548     fi
10550 AC_SUBST(SYSTEM_BOOST)
10552 dnl ===================================================================
10553 dnl Check for system mdds
10554 dnl ===================================================================
10555 MDDS_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/mdds/include"
10556 libo_CHECK_SYSTEM_MODULE([mdds],[MDDS],[mdds-2.1 >= 2.1.0])
10558 dnl ===================================================================
10559 dnl Check for system dragonbox
10560 dnl ===================================================================
10561 AC_MSG_CHECKING([which dragonbox to use])
10562 if test "$with_system_dragonbox" = "yes"; then
10563     AC_MSG_RESULT([external])
10564     SYSTEM_DRAGONBOX=TRUE
10565     AC_LANG_PUSH([C++])
10566     save_CPPFLAGS=$CPPFLAGS
10567     # This is where upstream installs to, unfortunately no .pc or so...
10568     DRAGONBOX_CFLAGS=-I/usr/include/dragonbox-1.1.3
10569     CPPFLAGS="$CPPFLAGS $DRAGONBOX_CFLAGS"
10570     AC_CHECK_HEADER([dragonbox/dragonbox.h], [],
10571        [AC_MSG_ERROR([dragonbox/dragonbox.h not found. install dragonbox])], [])
10572     AC_LANG_POP([C++])
10573     CPPFLAGS=$save_CPPFLAGS
10574 else
10575     AC_MSG_RESULT([internal])
10576     BUILD_TYPE="$BUILD_TYPE DRAGONBOX"
10577     SYSTEM_DRAGONBOX=
10579 AC_SUBST([SYSTEM_DRAGONBOX])
10580 AC_SUBST([DRAGONBOX_CFLAGS])
10582 dnl ===================================================================
10583 dnl Check for system frozen
10584 dnl ===================================================================
10585 AC_MSG_CHECKING([which frozen to use])
10586 if test "$with_system_frozen" = "yes"; then
10587     AC_MSG_RESULT([external])
10588     SYSTEM_FROZEN=TRUE
10589     AC_LANG_PUSH([C++])
10590     save_CPPFLAGS=$CPPFLAGS
10591     AC_CHECK_HEADER([frozen/unordered_map.h], [],
10592        [AC_MSG_ERROR([frozen/unordered_map.h not found. install frozen headers])], [])
10593     AC_LANG_POP([C++])
10594     CPPFLAGS=$save_CPPFLAGS
10595 else
10596     AC_MSG_RESULT([internal])
10597     BUILD_TYPE="$BUILD_TYPE FROZEN"
10598     SYSTEM_FROZEN=
10600 AC_SUBST([SYSTEM_FROZEN])
10601 AC_SUBST([FROZEN_CFLAGS])
10603 dnl ===================================================================
10604 dnl Check for system libfixmath
10605 dnl ===================================================================
10606 AC_MSG_CHECKING([which libfixmath to use])
10607 if test "$with_system_libfixmath" = "yes"; then
10608     AC_MSG_RESULT([external])
10609     SYSTEM_LIBFIXMATH=TRUE
10610     AC_LANG_PUSH([C++])
10611     AC_CHECK_HEADER([libfixmath/fix16.hpp], [],
10612        [AC_MSG_ERROR([libfixmath/fix16.hpp not found. install libfixmath])], [])
10613     AC_CHECK_LIB([libfixmath], [fix16_mul], [:], [AC_MSG_ERROR(libfixmath lib not found or functional)], [])
10614     AC_LANG_POP([C++])
10615 else
10616     AC_MSG_RESULT([internal])
10617     SYSTEM_LIBFIXMATH=
10619 AC_SUBST([SYSTEM_LIBFIXMATH])
10621 dnl ===================================================================
10622 dnl Check for system glm
10623 dnl ===================================================================
10624 AC_MSG_CHECKING([which glm to use])
10625 if test "$with_system_glm" = "yes"; then
10626     AC_MSG_RESULT([external])
10627     SYSTEM_GLM=TRUE
10628     AC_LANG_PUSH([C++])
10629     AC_CHECK_HEADER([glm/glm.hpp], [],
10630        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10631     AC_LANG_POP([C++])
10632 else
10633     AC_MSG_RESULT([internal])
10634     BUILD_TYPE="$BUILD_TYPE GLM"
10635     SYSTEM_GLM=
10636     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10638 AC_SUBST([GLM_CFLAGS])
10639 AC_SUBST([SYSTEM_GLM])
10641 dnl ===================================================================
10642 dnl Check for system odbc
10643 dnl ===================================================================
10644 AC_MSG_CHECKING([which odbc headers to use])
10645 if test "$with_system_odbc" = "yes" -o '(' "$with_system_headers" = "yes" -a "$with_system_odbc" = "auto" ')' -o '(' "$_os" = "WINNT" -a  "$with_system_odbc" != "no" ')'; then
10646     AC_MSG_RESULT([external])
10647     SYSTEM_ODBC_HEADERS=TRUE
10649     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10650         save_CPPFLAGS=$CPPFLAGS
10651         find_winsdk
10652         PathFormat "$winsdktest"
10653         CPPFLAGS="$CPPFLAGS -I$formatted_path/include/um -I$formatted_path/Include/$winsdklibsubdir/um -I$formatted_path/include -I$formatted_path/include/shared -I$formatted_path/include/$winsdklibsubdir/shared"
10654         AC_CHECK_HEADER(sqlext.h, [],
10655             [AC_MSG_ERROR(odbc not found. install odbc)],
10656             [#include <windows.h>])
10657         CPPFLAGS=$save_CPPFLAGS
10658     else
10659         AC_CHECK_HEADER(sqlext.h, [],
10660             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10661     fi
10662 elif test "$enable_database_connectivity" = no; then
10663     AC_MSG_RESULT([none])
10664 else
10665     AC_MSG_RESULT([internal])
10666     SYSTEM_ODBC_HEADERS=
10668 AC_SUBST(SYSTEM_ODBC_HEADERS)
10670 dnl ===================================================================
10671 dnl Check for system NSS
10672 dnl ===================================================================
10673 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10674     libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8],,system-if-linux)
10675     AC_DEFINE(HAVE_FEATURE_NSS)
10676     ENABLE_NSS=TRUE
10677 elif test $_os != iOS -a "$enable_openssl" != "no"; then
10678     with_tls=openssl
10680 AC_SUBST(ENABLE_NSS)
10682 dnl ===================================================================
10683 dnl Enable LDAP support
10684 dnl ===================================================================
10686 if test "$test_openldap" = yes; then
10687     AC_MSG_CHECKING([whether to enable LDAP support])
10688     if test "$enable_ldap" = yes -a \( "$enable_openssl" = yes -o "$with_system_openldap" = yes \); then
10689         AC_MSG_RESULT([yes])
10690         ENABLE_LDAP=TRUE
10691     else
10692         if test "$enable_ldap" != "yes"; then
10693             AC_MSG_RESULT([no])
10694         else
10695             AC_MSG_RESULT([no (needs OPENSSL or system openldap)])
10696         fi
10697     fi
10699 dnl ===================================================================
10700 dnl Check for system openldap
10701 dnl ===================================================================
10703     if test "$ENABLE_LDAP" = TRUE; then
10704         AC_MSG_CHECKING([which openldap library to use])
10705         if test "$with_system_openldap" = yes; then
10706             AC_MSG_RESULT([external])
10707             SYSTEM_OPENLDAP=TRUE
10708             AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10709             AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10710             AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10711         else
10712             AC_MSG_RESULT([internal])
10713             BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10714         fi
10715     fi
10718 AC_SUBST(ENABLE_LDAP)
10719 AC_SUBST(SYSTEM_OPENLDAP)
10721 dnl ===================================================================
10722 dnl Check for TLS/SSL and cryptographic implementation to use
10723 dnl ===================================================================
10724 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10725 if test -n "$with_tls"; then
10726     case $with_tls in
10727     openssl)
10728         AC_DEFINE(USE_TLS_OPENSSL)
10729         TLS=OPENSSL
10730         AC_MSG_RESULT([$TLS])
10732         if test "$enable_openssl" != "yes"; then
10733             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10734         fi
10736         # warn that OpenSSL has been selected but not all TLS code has this option
10737         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS])
10738         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS"
10739         ;;
10740     nss)
10741         AC_DEFINE(USE_TLS_NSS)
10742         TLS=NSS
10743         AC_MSG_RESULT([$TLS])
10744         ;;
10745     no)
10746         AC_MSG_RESULT([none])
10747         AC_MSG_WARN([Skipping TLS/SSL])
10748         ;;
10749     *)
10750         AC_MSG_RESULT([])
10751         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10752 openssl - OpenSSL
10753 nss - Mozilla's Network Security Services (NSS)
10754     ])
10755         ;;
10756     esac
10757 else
10758     # default to using NSS, it results in smaller oox lib
10759     AC_DEFINE(USE_TLS_NSS)
10760     TLS=NSS
10761     AC_MSG_RESULT([$TLS])
10763 AC_SUBST(TLS)
10765 dnl ===================================================================
10766 dnl Check for system sane
10767 dnl ===================================================================
10768 AC_MSG_CHECKING([which sane header to use])
10769 if test "$with_system_sane" = "yes"; then
10770     AC_MSG_RESULT([external])
10771     AC_CHECK_HEADER(sane/sane.h, [],
10772       [AC_MSG_ERROR(sane not found. install sane)], [])
10773 else
10774     AC_MSG_RESULT([internal])
10775     BUILD_TYPE="$BUILD_TYPE SANE"
10778 dnl ===================================================================
10779 dnl Check for system icu
10780 dnl ===================================================================
10781 ICU_MAJOR=73
10782 ICU_MINOR=2
10783 ICU_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10784 ICU_LIBS_internal="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10785 libo_CHECK_SYSTEM_MODULE([icu],[ICU],[icu-i18n >= 66])
10786 if test "$SYSTEM_ICU" = TRUE; then
10787     AC_LANG_PUSH([C++])
10788     AC_MSG_CHECKING([for unicode/rbbi.h])
10789     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10790     AC_LANG_POP([C++])
10792     ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10793     ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10794     ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10796     if test "$CROSS_COMPILING" != TRUE; then
10797         # using the system icu tools can lead to version confusion, use the
10798         # ones from the build environment when cross-compiling
10799         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10800         if test -z "$SYSTEM_GENBRK"; then
10801             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10802         fi
10803         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10804         if test -z "$SYSTEM_GENCCODE"; then
10805             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10806         fi
10807         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10808         if test -z "$SYSTEM_GENCMN"; then
10809             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10810         fi
10811     fi
10814 AC_SUBST(SYSTEM_GENBRK)
10815 AC_SUBST(SYSTEM_GENCCODE)
10816 AC_SUBST(SYSTEM_GENCMN)
10817 AC_SUBST(ICU_MAJOR)
10818 AC_SUBST(ICU_MINOR)
10820 dnl ==================================================================
10821 dnl CURL
10822 dnl ==================================================================
10823 if test "$enable_curl" == "yes"; then
10824     AC_DEFINE([HAVE_FEATURE_CURL])
10827 dnl ==================================================================
10828 dnl Breakpad
10829 dnl ==================================================================
10830 DEFAULT_CRASHDUMP_VALUE="true"
10831 AC_MSG_CHECKING([whether to enable breakpad])
10832 if test "$enable_breakpad" != yes; then
10833     AC_MSG_RESULT([no])
10834 else
10835     if test "$enable_curl" != "yes"; then
10836         AC_MSG_ERROR([--disable-breakpad must be used when --disable-curl is used])
10837     fi
10838     AC_MSG_RESULT([yes])
10839     ENABLE_BREAKPAD="TRUE"
10840     AC_DEFINE(ENABLE_BREAKPAD)
10841     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
10842     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
10844     AC_MSG_CHECKING([for disable crash dump])
10845     if test "$enable_crashdump" = no; then
10846         DEFAULT_CRASHDUMP_VALUE="false"
10847         AC_MSG_RESULT([yes])
10848     else
10849        AC_MSG_RESULT([no])
10850     fi
10852     AC_MSG_CHECKING([for crashreport config])
10853     if test "$with_symbol_config" = "no"; then
10854         BREAKPAD_SYMBOL_CONFIG="invalid"
10855         AC_MSG_RESULT([no])
10856     else
10857         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
10858         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
10859         AC_MSG_RESULT([yes])
10860     fi
10861     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
10863 AC_SUBST(ENABLE_BREAKPAD)
10864 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
10866 dnl ==================================================================
10867 dnl libcmis
10868 dnl ==================================================================
10869 if test "$enable_libcmis" == "yes"; then
10870     if test "$enable_curl" != "yes"; then
10871         AC_MSG_ERROR([--disable-libcmis must be used when --disable-curl is used])
10872     fi
10875 dnl ===================================================================
10876 dnl Orcus
10877 dnl ===================================================================
10878 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.18 >= 0.18.0])
10879 if test "$with_system_orcus" != "yes"; then
10880     if test "$SYSTEM_BOOST" = "TRUE"; then
10881         dnl Link with Boost.System
10882         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
10883         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
10884         dnl in documentation has no effect.
10885         AX_BOOST_SYSTEM
10886     fi
10888 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
10889 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
10890 AC_SUBST([BOOST_SYSTEM_LIB])
10891 AC_SUBST(SYSTEM_LIBORCUS)
10893 dnl ===================================================================
10894 dnl HarfBuzz
10895 dnl ===================================================================
10896 harfbuzz_required_version=5.1.0
10898 GRAPHITE_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"
10899 HARFBUZZ_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/harfbuzz/src"
10900 case "$_os" in
10901     Linux)
10902         GRAPHITE_LIBS_internal="${WORKDIR}/LinkTarget/StaticLibrary/libgraphite.a"
10903         HARFBUZZ_LIBS_internal="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.a"
10904         ;;
10905     *)
10906         GRAPHITE_LIBS_internal="-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"
10907         HARFBUZZ_LIBS_internal="-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"
10908         ;;
10909 esac
10910 libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3])
10911 libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= $harfbuzz_required_version])
10913 if test "$COM" = "MSC"; then # override the above
10914     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
10915     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
10918 if test "$with_system_harfbuzz" = "yes"; then
10919     if test "$with_system_graphite" = "no"; then
10920         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
10921     fi
10922     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
10923     save_LIBS="$LIBS"
10924     save_CFLAGS="$CFLAGS"
10925     LIBS="$LIBS $HARFBUZZ_LIBS"
10926     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
10927     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
10928     LIBS="$save_LIBS"
10929     CFLAGS="$save_CFLAGS"
10930 else
10931     if test "$with_system_graphite" = "yes"; then
10932         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
10933     fi
10936 if test "$USING_X11" = TRUE; then
10937     AC_PATH_X
10938     AC_PATH_XTRA
10939     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
10941     if test -z "$x_includes"; then
10942         x_includes="default_x_includes"
10943     fi
10944     if test -z "$x_libraries"; then
10945         x_libraries="default_x_libraries"
10946     fi
10947     CFLAGS="$CFLAGS $X_CFLAGS"
10948     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
10949     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
10950 else
10951     x_includes="no_x_includes"
10952     x_libraries="no_x_libraries"
10955 if test "$USING_X11" = TRUE; then
10956     dnl ===================================================================
10957     dnl Check for extension headers
10958     dnl ===================================================================
10959     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
10960      [#include <X11/extensions/shape.h>])
10962     # vcl needs ICE and SM
10963     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
10964     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
10965         [AC_MSG_ERROR(ICE library not found)])
10966     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
10967     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
10968         [AC_MSG_ERROR(SM library not found)])
10971 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
10972     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
10973     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
10976 dnl ===================================================================
10977 dnl Check for system Xrender
10978 dnl ===================================================================
10979 AC_MSG_CHECKING([whether to use Xrender])
10980 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
10981     AC_MSG_RESULT([yes])
10982     PKG_CHECK_MODULES(XRENDER, xrender)
10983     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10984     FilterLibs "${XRENDER_LIBS}"
10985     XRENDER_LIBS="${filteredlibs}"
10986     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
10987       [AC_MSG_ERROR(libXrender not found or functional)], [])
10988     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
10989       [AC_MSG_ERROR(Xrender not found. install X)], [])
10990 else
10991     AC_MSG_RESULT([no])
10993 AC_SUBST(XRENDER_CFLAGS)
10994 AC_SUBST(XRENDER_LIBS)
10996 dnl ===================================================================
10997 dnl Check for XRandr
10998 dnl ===================================================================
10999 AC_MSG_CHECKING([whether to enable RandR support])
11000 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
11001     AC_MSG_RESULT([yes])
11002     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
11003     if test "$ENABLE_RANDR" != "TRUE"; then
11004         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
11005                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
11006         XRANDR_CFLAGS=" "
11007         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
11008           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
11009         XRANDR_LIBS="-lXrandr "
11010         ENABLE_RANDR="TRUE"
11011     fi
11012     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11013     FilterLibs "${XRANDR_LIBS}"
11014     XRANDR_LIBS="${filteredlibs}"
11015 else
11016     ENABLE_RANDR=""
11017     AC_MSG_RESULT([no])
11019 AC_SUBST(XRANDR_CFLAGS)
11020 AC_SUBST(XRANDR_LIBS)
11021 AC_SUBST(ENABLE_RANDR)
11023 if test -z "$with_webdav"; then
11024     with_webdav=$test_webdav
11027 AC_MSG_CHECKING([for WebDAV support])
11028 case "$with_webdav" in
11030     AC_MSG_RESULT([no])
11031     WITH_WEBDAV=""
11032     ;;
11034     AC_MSG_RESULT([yes])
11035     # curl is already mandatory (almost) and checked elsewhere
11036     if test "$enable_curl" = "no"; then
11037         AC_MSG_ERROR(["--without-webdav must be used when --disable-curl is used"])
11038     fi
11039     WITH_WEBDAV=TRUE
11040     ;;
11041 esac
11042 AC_SUBST(WITH_WEBDAV)
11044 dnl ===================================================================
11045 dnl Check for disabling cve_tests
11046 dnl ===================================================================
11047 AC_MSG_CHECKING([whether to execute CVE tests])
11048 # If not explicitly enabled or disabled, default
11049 if test -z "$enable_cve_tests"; then
11050     case "$OS" in
11051     WNT)
11052         # Default cves off for Windows with its wild and wonderful
11053         # variety of AV software kicking in and panicking
11054         enable_cve_tests=no
11055         ;;
11056     *)
11057         # otherwise yes
11058         enable_cve_tests=yes
11059         ;;
11060     esac
11062 if test "$enable_cve_tests" = "no"; then
11063     AC_MSG_RESULT([no])
11064     DISABLE_CVE_TESTS=TRUE
11065     AC_SUBST(DISABLE_CVE_TESTS)
11066 else
11067     AC_MSG_RESULT([yes])
11070 dnl ===================================================================
11071 dnl Check for system openssl
11072 dnl ===================================================================
11073 ENABLE_OPENSSL=
11074 AC_MSG_CHECKING([whether to disable OpenSSL usage])
11075 if test "$enable_openssl" = "yes"; then
11076     AC_MSG_RESULT([no])
11077     ENABLE_OPENSSL=TRUE
11078     if test "$_os" = Darwin ; then
11079         # OpenSSL is deprecated when building for 10.7 or later.
11080         #
11081         # https://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
11082         # https://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
11084         with_system_openssl=no
11085         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
11086     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
11087             && test "$with_system_openssl" != "no"; then
11088         with_system_openssl=yes
11089         SYSTEM_OPENSSL=TRUE
11090         OPENSSL_CFLAGS=
11091         OPENSSL_LIBS="-lssl -lcrypto"
11092     else
11093         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
11094     fi
11095     if test "$with_system_openssl" = "yes"; then
11096         AC_MSG_CHECKING([whether openssl supports SHA512])
11097         AC_LANG_PUSH([C])
11098         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
11099             SHA512_CTX context;
11100 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
11101         AC_LANG_POP(C)
11102     fi
11103 else
11104     AC_MSG_RESULT([yes])
11106     # warn that although OpenSSL is disabled, system libraries may depend on it
11107     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
11108     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
11111 AC_SUBST([ENABLE_OPENSSL])
11113 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
11114     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
11115         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
11116         enable_cipher_openssl_backend=no
11117     else
11118         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
11119     fi
11121 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
11122 ENABLE_CIPHER_OPENSSL_BACKEND=
11123 if test "$enable_cipher_openssl_backend" = yes; then
11124     AC_MSG_RESULT([yes])
11125     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
11126 else
11127     AC_MSG_RESULT([no])
11129 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
11131 dnl ===================================================================
11132 dnl Select the crypto backends used by LO
11133 dnl ===================================================================
11135 if test "$build_crypto" = yes; then
11136     if test "$OS" = WNT; then
11137         BUILD_TYPE="$BUILD_TYPE CRYPTO_MSCAPI"
11138         AC_DEFINE([USE_CRYPTO_MSCAPI])
11139     elif test "$ENABLE_NSS" = TRUE; then
11140         BUILD_TYPE="$BUILD_TYPE CRYPTO_NSS"
11141         AC_DEFINE([USE_CRYPTO_NSS])
11142     fi
11145 dnl ===================================================================
11146 dnl Check for system redland
11147 dnl ===================================================================
11148 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
11149 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
11150 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
11151 if test "$with_system_redland" = "yes"; then
11152     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
11153             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
11154 else
11155     RAPTOR_MAJOR="0"
11156     RASQAL_MAJOR="3"
11157     REDLAND_MAJOR="0"
11159 AC_SUBST(RAPTOR_MAJOR)
11160 AC_SUBST(RASQAL_MAJOR)
11161 AC_SUBST(REDLAND_MAJOR)
11163 dnl ===================================================================
11164 dnl Check for system hunspell
11165 dnl ===================================================================
11166 AC_MSG_CHECKING([which libhunspell to use])
11167 if test "$with_system_hunspell" = "yes"; then
11168     AC_MSG_RESULT([external])
11169     SYSTEM_HUNSPELL=TRUE
11170     AC_LANG_PUSH([C++])
11171     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
11172     if test "$HUNSPELL_PC" != "TRUE"; then
11173         AC_CHECK_HEADER(hunspell.hxx, [],
11174             [
11175             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
11176             [AC_MSG_ERROR(hunspell headers not found.)], [])
11177             ], [])
11178         AC_CHECK_LIB([hunspell], [main], [:],
11179            [ AC_MSG_ERROR(hunspell library not found.) ], [])
11180         HUNSPELL_LIBS=-lhunspell
11181     fi
11182     AC_LANG_POP([C++])
11183     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11184     FilterLibs "${HUNSPELL_LIBS}"
11185     HUNSPELL_LIBS="${filteredlibs}"
11186 else
11187     AC_MSG_RESULT([internal])
11188     SYSTEM_HUNSPELL=
11189     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
11190     if test "$COM" = "MSC"; then
11191         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
11192     else
11193         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
11194     fi
11195     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
11197 AC_SUBST(SYSTEM_HUNSPELL)
11198 AC_SUBST(HUNSPELL_CFLAGS)
11199 AC_SUBST(HUNSPELL_LIBS)
11201 dnl ===================================================================
11202 dnl Check for system zxing
11203 dnl ===================================================================
11204 AC_MSG_CHECKING([whether to use zxing])
11205 if test "$enable_zxing" = "no"; then
11206     AC_MSG_RESULT([no])
11207     ENABLE_ZXING=
11208     SYSTEM_ZXING=
11209 else
11210     AC_MSG_RESULT([yes])
11211     ENABLE_ZXING=TRUE
11212     AC_MSG_CHECKING([which libzxing to use])
11213     if test "$with_system_zxing" = "yes"; then
11214         AC_MSG_RESULT([external])
11215         SYSTEM_ZXING=TRUE
11216         ZXING_CFLAGS=
11217         AC_LANG_PUSH([C++])
11218         save_CXXFLAGS=$CXXFLAGS
11219         save_IFS=$IFS
11220         IFS=$P_SEP
11221         for i in $CPLUS_INCLUDE_PATH /usr/include; do
11222             dnl Reset IFS as soon as possible, to avoid unexpected side effects (and the
11223             dnl "/usr/include" fallback makes sure we get here at least once; resetting rather than
11224             dnl unsetting follows the advice at <https://git.savannah.gnu.org/gitweb/?p=autoconf.git;
11225             dnl a=commitdiff;h=e51c9919f2cf70185b7916ac040bc0bbfd0f743b> "Add recommendation on (not)
11226             dnl unsetting IFS."):
11227             IFS=$save_IFS
11228             dnl TODO: GCC and Clang treat empty paths in CPLUS_INCLUDE_PATH like ".", but we simply
11229             dnl ignore them here:
11230             if test -z "$i"; then
11231                 continue
11232             fi
11233             dnl TODO: White space in $i would cause problems:
11234             CXXFLAGS="$save_CXXFLAGS ${CXXFLAGS_CXX11} -I$i/ZXing"
11235             AC_CHECK_HEADER(MultiFormatWriter.h, [ZXING_CFLAGS=-I$i/ZXing; break],
11236                 [unset ac_cv_header_MultiFormatWriter_h], [#include <stdexcept>])
11237         done
11238         CXXFLAGS=$save_CXXFLAGS
11239         if test -z "$ZXING_CFLAGS"; then
11240             AC_MSG_ERROR(zxing headers not found.)
11241         fi
11242         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
11243             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
11244             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
11245         AC_LANG_POP([C++])
11246         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11247         FilterLibs "${ZXING_LIBS}"
11248         ZXING_LIBS="${filteredlibs}"
11249     else
11250         AC_MSG_RESULT([internal])
11251         SYSTEM_ZXING=
11252         BUILD_TYPE="$BUILD_TYPE ZXING"
11253         ZXING_CFLAGS="-I${WORKDIR}/UnpackedTarball/zxing/core/src"
11254     fi
11255     if test "$ENABLE_ZXING" = TRUE; then
11256         AC_DEFINE(ENABLE_ZXING)
11257     fi
11258     AC_MSG_CHECKING([whether zxing::tosvg function is available])
11259     AC_LANG_PUSH([C++])
11260     save_CXXFLAGS=$CXXFLAGS
11261     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 $ZXING_CFLAGS"
11262     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
11263             #include <BitMatrix.h>
11264             #include <BitMatrixIO.h>
11265             int main(){
11266                 ZXing::BitMatrix matrix(1, 1);
11267                 matrix.set(0, 0, true);
11268                 ZXing::ToSVG(matrix);
11269                 return 0;
11270             }
11271         ])], [
11272             AC_DEFINE([HAVE_ZXING_TOSVG],[1])
11273             AC_MSG_RESULT([yes])
11274         ], [AC_MSG_RESULT([no])])
11275     CXXFLAGS=$save_CXXFLAGS
11276     AC_LANG_POP([C++])
11277     AC_SUBST(HAVE_ZXING_TOSVG)
11279 AC_SUBST(SYSTEM_ZXING)
11280 AC_SUBST(ENABLE_ZXING)
11281 AC_SUBST(ZXING_CFLAGS)
11282 AC_SUBST(ZXING_LIBS)
11284 dnl ===================================================================
11285 dnl Check for system box2d
11286 dnl ===================================================================
11287 AC_MSG_CHECKING([which box2d to use])
11288 if test "$with_system_box2d" = "yes"; then
11289     AC_MSG_RESULT([external])
11290     SYSTEM_BOX2D=TRUE
11291     AC_LANG_PUSH([C++])
11292     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
11293         [BOX2D_H_FOUND='FALSE'])
11294     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
11295         _BOX2D_LIB=box2d
11296         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
11297     else
11298         # fail this. there's no other alternative to check when we are here.
11299         AC_CHECK_HEADER([Box2D/Box2D.h], [],
11300             [AC_MSG_ERROR(box2d headers not found.)])
11301         _BOX2D_LIB=Box2D
11302         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11303     fi
11304     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11305         [ AC_MSG_ERROR(box2d library not found.) ], [])
11306     BOX2D_LIBS=-l$_BOX2D_LIB
11307     AC_LANG_POP([C++])
11308     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11309     FilterLibs "${BOX2D_LIBS}"
11310     BOX2D_LIBS="${filteredlibs}"
11311 else
11312     AC_MSG_RESULT([internal])
11313     SYSTEM_BOX2D=
11314     BUILD_TYPE="$BUILD_TYPE BOX2D"
11316 AC_SUBST(SYSTEM_BOX2D)
11317 AC_SUBST(BOX2D_CFLAGS)
11318 AC_SUBST(BOX2D_LIBS)
11320 dnl ===================================================================
11321 dnl Checking for altlinuxhyph
11322 dnl ===================================================================
11323 AC_MSG_CHECKING([which altlinuxhyph to use])
11324 if test "$with_system_altlinuxhyph" = "yes"; then
11325     AC_MSG_RESULT([external])
11326     SYSTEM_HYPH=TRUE
11327     AC_CHECK_HEADER(hyphen.h, [],
11328        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11329     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11330        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11331        [#include <hyphen.h>])
11332     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11333         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11334     if test -z "$HYPHEN_LIB"; then
11335         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11336            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11337     fi
11338     if test -z "$HYPHEN_LIB"; then
11339         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11340            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11341     fi
11342 else
11343     AC_MSG_RESULT([internal])
11344     SYSTEM_HYPH=
11345     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11346     if test "$COM" = "MSC"; then
11347         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11348     else
11349         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11350     fi
11352 AC_SUBST(SYSTEM_HYPH)
11353 AC_SUBST(HYPHEN_LIB)
11355 dnl ===================================================================
11356 dnl Checking for mythes
11357 dnl ===================================================================
11358 AC_MSG_CHECKING([which mythes to use])
11359 if test "$with_system_mythes" = "yes"; then
11360     AC_MSG_RESULT([external])
11361     SYSTEM_MYTHES=TRUE
11362     AC_LANG_PUSH([C++])
11363     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11364     if test "$MYTHES_PKGCONFIG" = "no"; then
11365         AC_CHECK_HEADER(mythes.hxx, [],
11366             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11367         AC_CHECK_LIB([mythes-1.2], [main], [:],
11368             [ MYTHES_FOUND=no], [])
11369     if test "$MYTHES_FOUND" = "no"; then
11370         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11371                 [ MYTHES_FOUND=no], [])
11372     fi
11373     if test "$MYTHES_FOUND" = "no"; then
11374         AC_MSG_ERROR([mythes library not found!.])
11375     fi
11376     fi
11377     AC_LANG_POP([C++])
11378     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11379     FilterLibs "${MYTHES_LIBS}"
11380     MYTHES_LIBS="${filteredlibs}"
11381 else
11382     AC_MSG_RESULT([internal])
11383     SYSTEM_MYTHES=
11384     BUILD_TYPE="$BUILD_TYPE MYTHES"
11385     if test "$COM" = "MSC"; then
11386         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11387     else
11388         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11389     fi
11391 AC_SUBST(SYSTEM_MYTHES)
11392 AC_SUBST(MYTHES_CFLAGS)
11393 AC_SUBST(MYTHES_LIBS)
11395 dnl ===================================================================
11396 dnl How should we build the linear programming solver ?
11397 dnl ===================================================================
11399 ENABLE_COINMP=
11400 AC_MSG_CHECKING([whether to build with CoinMP])
11401 if test "$enable_coinmp" != "no"; then
11402     ENABLE_COINMP=TRUE
11403     AC_MSG_RESULT([yes])
11404     if test "$with_system_coinmp" = "yes"; then
11405         SYSTEM_COINMP=TRUE
11406         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11407         FilterLibs "${COINMP_LIBS}"
11408         COINMP_LIBS="${filteredlibs}"
11409     else
11410         BUILD_TYPE="$BUILD_TYPE COINMP"
11411     fi
11412 else
11413     AC_MSG_RESULT([no])
11415 AC_SUBST(ENABLE_COINMP)
11416 AC_SUBST(SYSTEM_COINMP)
11417 AC_SUBST(COINMP_CFLAGS)
11418 AC_SUBST(COINMP_LIBS)
11420 ENABLE_LPSOLVE=
11421 AC_MSG_CHECKING([whether to build with lpsolve])
11422 if test "$enable_lpsolve" != "no"; then
11423     ENABLE_LPSOLVE=TRUE
11424     AC_MSG_RESULT([yes])
11425 else
11426     AC_MSG_RESULT([no])
11428 AC_SUBST(ENABLE_LPSOLVE)
11430 if test "$ENABLE_LPSOLVE" = TRUE; then
11431     AC_MSG_CHECKING([which lpsolve to use])
11432     if test "$with_system_lpsolve" = "yes"; then
11433         AC_MSG_RESULT([external])
11434         SYSTEM_LPSOLVE=TRUE
11435         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11436            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11437         save_LIBS=$LIBS
11438         # some systems need this. Like Ubuntu...
11439         AC_CHECK_LIB(m, floor)
11440         AC_CHECK_LIB(dl, dlopen)
11441         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11442             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11443         LIBS=$save_LIBS
11444     else
11445         AC_MSG_RESULT([internal])
11446         SYSTEM_LPSOLVE=
11447         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11448     fi
11450 AC_SUBST(SYSTEM_LPSOLVE)
11452 dnl ===================================================================
11453 dnl Checking for libexttextcat
11454 dnl ===================================================================
11455 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11456 if test "$with_system_libexttextcat" = "yes"; then
11457     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11459 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11461 dnl ===================================================================
11462 dnl Checking for libnumbertext
11463 dnl ===================================================================
11464 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11465 if test "$with_system_libnumbertext" = "yes"; then
11466     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11467     SYSTEM_LIBNUMBERTEXT=YES
11468 else
11469     SYSTEM_LIBNUMBERTEXT=
11471 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11472 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11474 dnl ***************************************
11475 dnl testing libc version for Linux...
11476 dnl ***************************************
11477 if test "$_os" = "Linux"; then
11478     AC_MSG_CHECKING([whether the libc is recent enough])
11479     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
11480     #include <features.h>
11481     #if defined(__GNU_LIBRARY__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1))
11482     #error glibc >= 2.1 is required
11483     #endif
11484     ]])],, [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([no, upgrade libc])])
11487 dnl =========================================
11488 dnl Check for uuidgen
11489 dnl =========================================
11490 if test "$_os" = "WINNT"; then
11491     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11492     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11493     UUIDGEN=uuidgen.exe
11494     AC_SUBST(UUIDGEN)
11495 else
11496     AC_PATH_PROG([UUIDGEN], [uuidgen])
11497     if test -z "$UUIDGEN"; then
11498         AC_MSG_WARN([uuid is needed for building installation sets])
11499     fi
11502 dnl ***************************************
11503 dnl Checking for bison and flex
11504 dnl ***************************************
11505 AC_PATH_PROG(BISON, bison)
11506 if test -z "$BISON"; then
11507     AC_MSG_ERROR([no bison found in \$PATH, install it])
11508 else
11509     AC_MSG_CHECKING([the bison version])
11510     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11511     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11512     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11513     dnl cause
11514     dnl
11515     dnl   idlc/source/parser.y:222:15: error: externally available entity 'YYSTYPE' is not previously declared in an included file (if it is only used in this translation unit, put it in an unnamed namespace; otherwise, provide a declaration of it in an included file) [loplugin:external]
11516     dnl   typedef union YYSTYPE
11517     dnl           ~~~~~~^~~~~~~
11518     dnl
11519     dnl while at least 3.4.1 is know to be good:
11520     if test "$COMPILER_PLUGINS" = TRUE; then
11521         if test "$_bison_longver" -lt 2004; then
11522             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11523         fi
11524     else
11525         if test "$_bison_longver" -lt 2000; then
11526             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11527         fi
11528     fi
11530 AC_SUBST([BISON])
11532 AC_PATH_PROG(FLEX, flex)
11533 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11534     FLEX=`cygpath -m $FLEX`
11536 if test -z "$FLEX"; then
11537     AC_MSG_ERROR([no flex found in \$PATH, install it])
11538 else
11539     AC_MSG_CHECKING([the flex version])
11540     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11541     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11542         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11543     fi
11545 AC_SUBST([FLEX])
11547 AC_PATH_PROG(DIFF, diff)
11548 if test -z "$DIFF"; then
11549     AC_MSG_ERROR(["diff" not found in \$PATH, install it])
11551 AC_SUBST([DIFF])
11553 AC_PATH_PROG(UNIQ, uniq)
11554 if test -z "$UNIQ"; then
11555     AC_MSG_ERROR(["uniq" not found in \$PATH, install it])
11557 AC_SUBST([UNIQ])
11559 dnl ***************************************
11560 dnl Checking for patch
11561 dnl ***************************************
11562 AC_PATH_PROG(PATCH, patch)
11563 if test -z "$PATCH"; then
11564     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11567 dnl On Solaris or macOS, check if --with-gnu-patch was used
11568 if test "$_os" = "SunOS" -o "$_os" = "Darwin"; then
11569     if test -z "$with_gnu_patch"; then
11570         GNUPATCH=$PATCH
11571     else
11572         if test -x "$with_gnu_patch"; then
11573             GNUPATCH=$with_gnu_patch
11574         else
11575             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11576         fi
11577     fi
11579     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11580     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11581         AC_MSG_RESULT([yes])
11582     else
11583         if $GNUPATCH --version | grep "2\.0-.*-Apple" >/dev/null 2>/dev/null; then
11584             AC_MSG_RESULT([no, but accepted (Apple patch)])
11585             add_warning "patch utility is not GNU patch. Apple's patch should work OK, but it might experience issues where GNU patch doesn't."
11586         else
11587             AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11588         fi
11589     fi
11590 else
11591     GNUPATCH=$PATCH
11594 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11595     GNUPATCH=`cygpath -m $GNUPATCH`
11598 dnl We also need to check for --with-gnu-cp
11600 if test -z "$with_gnu_cp"; then
11601     # check the place where the good stuff is hidden on Solaris...
11602     if test -x /usr/gnu/bin/cp; then
11603         GNUCP=/usr/gnu/bin/cp
11604     else
11605         AC_PATH_PROGS(GNUCP, gnucp cp)
11606     fi
11607     if test -z $GNUCP; then
11608         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11609     fi
11610 else
11611     if test -x "$with_gnu_cp"; then
11612         GNUCP=$with_gnu_cp
11613     else
11614         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11615     fi
11618 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11619     GNUCP=`cygpath -m $GNUCP`
11622 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11623 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11624     AC_MSG_RESULT([yes])
11625 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11626     AC_MSG_RESULT([yes])
11627 else
11628     case "$build_os" in
11629     darwin*|netbsd*|openbsd*|freebsd*|dragonfly*)
11630         x_GNUCP=[\#]
11631         GNUCP=''
11632         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11633         ;;
11634     *)
11635         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11636         ;;
11637     esac
11640 AC_SUBST(GNUPATCH)
11641 AC_SUBST(GNUCP)
11642 AC_SUBST(x_GNUCP)
11644 dnl ***************************************
11645 dnl testing assembler path
11646 dnl ***************************************
11647 ML_EXE=""
11648 if test "$_os" = "WINNT"; then
11649     case "$WIN_HOST_ARCH" in
11650     x86) assembler=ml.exe ;;
11651     x64) assembler=ml64.exe ;;
11652     arm64) assembler=armasm64.exe ;;
11653     esac
11655     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11656     if test -f "$MSVC_HOST_PATH/$assembler"; then
11657         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11658         AC_MSG_RESULT([$ML_EXE])
11659     else
11660         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11661     fi
11664 AC_SUBST(ML_EXE)
11666 dnl ===================================================================
11667 dnl We need zip and unzip
11668 dnl ===================================================================
11669 AC_PATH_PROG(ZIP, zip)
11670 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11671 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11672     AC_MSG_ERROR([Zip version 3.0 or newer is required to build, please install it and make sure it is the one found first in PATH],,)
11675 AC_PATH_PROG(UNZIP, unzip)
11676 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11678 dnl ===================================================================
11679 dnl Zip must be a specific type for different build types.
11680 dnl ===================================================================
11681 if test $build_os = cygwin; then
11682     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11683         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11684     fi
11687 dnl ===================================================================
11688 dnl We need touch with -h option support.
11689 dnl ===================================================================
11690 AC_PATH_PROG(TOUCH, touch)
11691 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11692 touch "$WARNINGS_FILE"
11693 if ! "$TOUCH" -h "$WARNINGS_FILE" 2>/dev/null > /dev/null; then
11694     AC_MSG_ERROR([touch version with -h option support is required to build, please install it and make sure it is the one found first in PATH],,)
11697 dnl ===================================================================
11698 dnl Check for system epoxy
11699 dnl ===================================================================
11700 EPOXY_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/epoxy/include"
11701 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2])
11703 dnl ===================================================================
11704 dnl Show which vclplugs will be built.
11705 dnl ===================================================================
11706 R=""
11708 libo_ENABLE_VCLPLUG([gen])
11709 libo_ENABLE_VCLPLUG([gtk3])
11710 libo_ENABLE_VCLPLUG([gtk3_kde5])
11711 libo_ENABLE_VCLPLUG([gtk4])
11712 libo_ENABLE_VCLPLUG([kf5])
11713 libo_ENABLE_VCLPLUG([kf6])
11714 libo_ENABLE_VCLPLUG([qt5])
11715 libo_ENABLE_VCLPLUG([qt6])
11717 if test "$_os" = "WINNT"; then
11718     R="$R win"
11719 elif test "$_os" = "Darwin"; then
11720     R="$R osx"
11721 elif test "$_os" = "iOS"; then
11722     R="ios"
11723 elif test "$_os" = Android; then
11724     R="android"
11727 build_vcl_plugins="$R"
11728 if test -z "$build_vcl_plugins"; then
11729     build_vcl_plugins=" none"
11731 AC_MSG_NOTICE([VCLplugs to be built:${build_vcl_plugins}])
11732 VCL_PLUGIN_INFO=$R
11733 AC_SUBST([VCL_PLUGIN_INFO])
11735 if test "$DISABLE_DYNLOADING" = TRUE -a -z "$DISABLE_GUI" -a \( -z "$R" -o $(echo "$R" | wc -w) -ne 1 \); then
11736     AC_MSG_ERROR([Can't build --disable-dynamic-loading without --disable-gui and a single VCL plugin"])
11739 dnl ===================================================================
11740 dnl Check for GTK libraries
11741 dnl ===================================================================
11743 GTK3_CFLAGS=""
11744 GTK3_LIBS=""
11745 ENABLE_GTKTILEDVIEWER=""
11746 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11747     if test "$with_system_cairo" = no; then
11748         add_warning 'Non-system cairo combined with gtk3 is known to cause trouble (eg. broken image in the splashscreen). Use --with-system-cairo unless you know what you are doing.'
11749     fi
11750     : ${with_system_cairo:=yes}
11751     PKG_CHECK_MODULES(GTK3, gtk+-3.0 >= 3.20 gtk+-unix-print-3.0 gmodule-no-export-2.0 glib-2.0 >= 2.38 atk >= 2.28.1 cairo)
11752     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11753     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11754     FilterLibs "${GTK3_LIBS}"
11755     GTK3_LIBS="${filteredlibs}"
11757     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11758     if test "$with_system_epoxy" != "yes"; then
11759         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11760         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11761                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11762     fi
11763 elif test -n "$with_gtk3_build" -a "$OS" = "WNT"; then
11764     PathFormat "${with_gtk3_build}/lib/pkgconfig"
11765     if test "$build_os" = "cygwin"; then
11766         dnl cygwin's pkg-config does not recognize "C:/..."-style paths, only "/cygdrive/c/..."
11767         formatted_path_unix=`cygpath -au "$formatted_path_unix"`
11768     fi
11770     PKG_CONFIG_PATH="$formatted_path_unix"; export PKG_CONFIG_PATH
11771     PKG_CHECK_MODULES(GTK3, cairo gdk-3.0 gio-2.0 glib-2.0 gobject-2.0 gtk+-3.0)
11772     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11773     FilterLibs "${GTK3_LIBS}"
11774     GTK3_LIBS="${filteredlibs}"
11775     ENABLE_GTKTILEDVIEWER="yes"
11777 AC_SUBST(GTK3_LIBS)
11778 AC_SUBST(GTK3_CFLAGS)
11779 AC_SUBST(ENABLE_GTKTILEDVIEWER)
11781 GTK4_CFLAGS=""
11782 GTK4_LIBS=""
11783 if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then
11784     if test "$with_system_cairo" = no; then
11785         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11786     fi
11787     : ${with_system_cairo:=yes}
11788     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11789     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11790     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11791     FilterLibs "${GTK4_LIBS}"
11792     GTK4_LIBS="${filteredlibs}"
11794     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11795     if test "$with_system_epoxy" != "yes"; then
11796         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11797         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11798                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11799     fi
11801 AC_SUBST(GTK4_LIBS)
11802 AC_SUBST(GTK4_CFLAGS)
11804 if test "$enable_introspection" = yes; then
11805     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11806         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11807     else
11808         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
11809     fi
11812 # AT-SPI2 tests require gtk3, xvfb-run, dbus-launch and atspi-2
11813 if ! test "$ENABLE_GTK3" = TRUE; then
11814     if test "$enable_atspi_tests" = yes; then
11815         AC_MSG_ERROR([--enable-atspi-tests requires --enable-gtk3])
11816     fi
11817     enable_atspi_tests=no
11819 if ! test "$enable_atspi_tests" = no; then
11820     AC_PATH_PROGS([XVFB_RUN], [xvfb-run], no)
11821     if ! test "$XVFB_RUN" = no; then
11822         dnl make sure the found xvfb-run actually works
11823         AC_MSG_CHECKING([whether $XVFB_RUN works...])
11824         if $XVFB_RUN true >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
11825             AC_MSG_RESULT([yes])
11826         else
11827             AC_MSG_RESULT([no])
11828             XVFB_RUN=no
11829         fi
11830     fi
11831     if test "$XVFB_RUN" = no; then
11832         if test "$enable_atspi_tests" = yes; then
11833             AC_MSG_ERROR([xvfb-run required by --enable-atspi-tests not found])
11834         fi
11835         enable_atspi_tests=no
11836     fi
11838 if ! test "$enable_atspi_tests" = no; then
11839     AC_PATH_PROGS([DBUS_LAUNCH], [dbus-launch], no)
11840     if test "$DBUS_LAUNCH" = no; then
11841         if test "$enable_atspi_tests" = yes; then
11842             AC_MSG_ERROR([dbus-launch required by --enable-atspi-tests not found])
11843         fi
11844         enable_atspi_tests=no
11845     fi
11847 if ! test "$enable_atspi_tests" = no; then
11848     PKG_CHECK_MODULES([ATSPI2], [atspi-2 gobject-2.0],,
11849                       [if test "$enable_atspi_tests" = yes; then
11850                            AC_MSG_ERROR([$ATSPI2_PKG_ERRORS])
11851                        else
11852                            enable_atspi_tests=no
11853                        fi])
11855 if ! test "x$enable_atspi_tests" = xno; then
11856     PKG_CHECK_MODULES([ATSPI2_2_32], [atspi-2 >= 2.32],
11857                       [have_atspi_scroll_to=1],
11858                       [have_atspi_scroll_to=0])
11859     AC_DEFINE_UNQUOTED([HAVE_ATSPI2_SCROLL_TO], [$have_atspi_scroll_to],
11860                        [Whether AT-SPI2 has the scrollTo API])
11862 ENABLE_ATSPI_TESTS=
11863 test "$enable_atspi_tests" = no || ENABLE_ATSPI_TESTS=TRUE
11864 AC_SUBST([ENABLE_ATSPI_TESTS])
11866 dnl ===================================================================
11867 dnl check for dbus support
11868 dnl ===================================================================
11869 ENABLE_DBUS=""
11870 DBUS_CFLAGS=""
11871 DBUS_LIBS=""
11872 DBUS_GLIB_CFLAGS=""
11873 DBUS_GLIB_LIBS=""
11874 DBUS_HAVE_GLIB=""
11876 if test "$enable_dbus" = "no"; then
11877     test_dbus=no
11880 AC_MSG_CHECKING([whether to enable DBUS support])
11881 if test "$test_dbus" = "yes"; then
11882     ENABLE_DBUS="TRUE"
11883     AC_MSG_RESULT([yes])
11884     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
11885     AC_DEFINE(ENABLE_DBUS)
11886     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11887     FilterLibs "${DBUS_LIBS}"
11888     DBUS_LIBS="${filteredlibs}"
11890     # Glib is needed for BluetoothServer
11891     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
11892     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
11893         [
11894             DBUS_HAVE_GLIB="TRUE"
11895             AC_DEFINE(DBUS_HAVE_GLIB,1)
11896         ],
11897         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
11898     )
11899 else
11900     AC_MSG_RESULT([no])
11903 AC_SUBST(ENABLE_DBUS)
11904 AC_SUBST(DBUS_CFLAGS)
11905 AC_SUBST(DBUS_LIBS)
11906 AC_SUBST(DBUS_GLIB_CFLAGS)
11907 AC_SUBST(DBUS_GLIB_LIBS)
11908 AC_SUBST(DBUS_HAVE_GLIB)
11910 AC_MSG_CHECKING([whether to enable Impress remote control])
11911 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
11912     AC_MSG_RESULT([yes])
11913     ENABLE_SDREMOTE=TRUE
11914     SDREMOTE_ENTITLEMENT="      <key>com.apple.security.network.server</key>
11915         <true/>"
11916     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
11918     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
11919         # The Bluetooth code doesn't compile with macOS SDK 10.15
11920         if test "$enable_sdremote_bluetooth" = yes; then
11921             AC_MSG_ERROR([macOS SDK $macosx_sdk does not currently support --enable-sdremote-bluetooth])
11922         fi
11923         add_warning "not building the bluetooth part of the sdremote - used api was removed from macOS SDK 10.15"
11924         enable_sdremote_bluetooth=no
11925     fi
11926     # If not explicitly enabled or disabled, default
11927     if test -z "$enable_sdremote_bluetooth"; then
11928         case "$OS" in
11929         LINUX|MACOSX|WNT)
11930             # Default to yes for these
11931             enable_sdremote_bluetooth=yes
11932             ;;
11933         *)
11934             # otherwise no
11935             enable_sdremote_bluetooth=no
11936             ;;
11937         esac
11938     fi
11939     # $enable_sdremote_bluetooth is guaranteed non-empty now
11941     if test "$enable_sdremote_bluetooth" != "no"; then
11942         if test "$OS" = "LINUX"; then
11943             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
11944                 AC_MSG_RESULT([yes])
11945                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
11946                 dnl ===================================================================
11947                 dnl Check for system bluez
11948                 dnl ===================================================================
11949                 AC_MSG_CHECKING([which Bluetooth header to use])
11950                 if test "$with_system_bluez" = "yes"; then
11951                     AC_MSG_RESULT([external])
11952                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
11953                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
11954                     SYSTEM_BLUEZ=TRUE
11955                 else
11956                     AC_MSG_RESULT([internal])
11957                     SYSTEM_BLUEZ=
11958                 fi
11959             else
11960                 AC_MSG_RESULT([no, dbus disabled])
11961                 ENABLE_SDREMOTE_BLUETOOTH=
11962                 SYSTEM_BLUEZ=
11963             fi
11964         else
11965             AC_MSG_RESULT([yes])
11966             ENABLE_SDREMOTE_BLUETOOTH=TRUE
11967             SYSTEM_BLUEZ=
11968             SDREMOTE_ENTITLEMENT="$SDREMOTE_ENTITLEMENT
11969         <key>com.apple.security.device.bluetooth</key>
11970         <true/>"
11971         fi
11972     else
11973         AC_MSG_RESULT([no])
11974         ENABLE_SDREMOTE_BLUETOOTH=
11975         SYSTEM_BLUEZ=
11976     fi
11977 else
11978     ENABLE_SDREMOTE=
11979     SYSTEM_BLUEZ=
11980     AC_MSG_RESULT([no])
11982 AC_SUBST(ENABLE_SDREMOTE)
11983 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
11984 AC_SUBST(SDREMOTE_ENTITLEMENT)
11985 AC_SUBST(SYSTEM_BLUEZ)
11987 dnl ===================================================================
11988 dnl Check whether to enable GIO support
11989 dnl ===================================================================
11990 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11991     AC_MSG_CHECKING([whether to enable GIO support])
11992     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
11993         dnl Need at least 2.26 for the dbus support.
11994         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
11995                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
11996         if test "$ENABLE_GIO" = "TRUE"; then
11997             AC_DEFINE(ENABLE_GIO)
11998             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11999             FilterLibs "${GIO_LIBS}"
12000             GIO_LIBS="${filteredlibs}"
12001         fi
12002     else
12003         AC_MSG_RESULT([no])
12004     fi
12006 AC_SUBST(ENABLE_GIO)
12007 AC_SUBST(GIO_CFLAGS)
12008 AC_SUBST(GIO_LIBS)
12011 dnl ===================================================================
12013 SPLIT_APP_MODULES=""
12014 if test "$enable_split_app_modules" = "yes"; then
12015     SPLIT_APP_MODULES="TRUE"
12017 AC_SUBST(SPLIT_APP_MODULES)
12019 SPLIT_OPT_FEATURES=""
12020 if test "$enable_split_opt_features" = "yes"; then
12021     SPLIT_OPT_FEATURES="TRUE"
12023 AC_SUBST(SPLIT_OPT_FEATURES)
12025 dnl ===================================================================
12026 dnl Check whether the GStreamer libraries are available.
12027 dnl ===================================================================
12029 ENABLE_GSTREAMER_1_0=""
12031 if test "$test_gstreamer_1_0" = yes; then
12033     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
12034     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
12035         ENABLE_GSTREAMER_1_0="TRUE"
12036         AC_MSG_RESULT([yes])
12037         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
12038         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12039         FilterLibs "${GSTREAMER_1_0_LIBS}"
12040         GSTREAMER_1_0_LIBS="${filteredlibs}"
12041         AC_DEFINE(ENABLE_GSTREAMER_1_0)
12042     else
12043         AC_MSG_RESULT([no])
12044     fi
12046 AC_SUBST(GSTREAMER_1_0_CFLAGS)
12047 AC_SUBST(GSTREAMER_1_0_LIBS)
12048 AC_SUBST(ENABLE_GSTREAMER_1_0)
12050 ENABLE_OPENGL_TRANSITIONS=
12051 ENABLE_OPENGL_CANVAS=
12052 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
12053    : # disable
12054 elif test "$_os" = "Darwin"; then
12055     # We use frameworks on macOS, no need for detail checks
12056     ENABLE_OPENGL_TRANSITIONS=TRUE
12057     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
12058     ENABLE_OPENGL_CANVAS=TRUE
12059 elif test $_os = WINNT; then
12060     ENABLE_OPENGL_TRANSITIONS=TRUE
12061     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
12062     ENABLE_OPENGL_CANVAS=TRUE
12063 else
12064     if test "$USING_X11" = TRUE; then
12065         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
12066         ENABLE_OPENGL_TRANSITIONS=TRUE
12067         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
12068         ENABLE_OPENGL_CANVAS=TRUE
12069     fi
12072 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
12073 AC_SUBST(ENABLE_OPENGL_CANVAS)
12075 dnl =================================================
12076 dnl Check whether to build with OpenCL support.
12077 dnl =================================================
12079 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
12080     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
12081     # platform (optional at run-time, used through clew).
12082     BUILD_TYPE="$BUILD_TYPE OPENCL"
12083     AC_DEFINE(HAVE_FEATURE_OPENCL)
12086 dnl =================================================
12087 dnl Check whether to build with dconf support.
12088 dnl =================================================
12090 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
12091     PKG_CHECK_MODULES([DCONF], [dconf >= 0.40.0], [], [
12092         if test "$enable_dconf" = yes; then
12093             AC_MSG_ERROR([dconf not found])
12094         else
12095             enable_dconf=no
12096         fi])
12098 AC_MSG_CHECKING([whether to enable dconf])
12099 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
12100     DCONF_CFLAGS=
12101     DCONF_LIBS=
12102     ENABLE_DCONF=
12103     AC_MSG_RESULT([no])
12104 else
12105     ENABLE_DCONF=TRUE
12106     AC_DEFINE(ENABLE_DCONF)
12107     AC_MSG_RESULT([yes])
12109 AC_SUBST([DCONF_CFLAGS])
12110 AC_SUBST([DCONF_LIBS])
12111 AC_SUBST([ENABLE_DCONF])
12113 # pdf import?
12114 AC_MSG_CHECKING([whether to build the PDF import feature])
12115 ENABLE_PDFIMPORT=
12116 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
12117     AC_MSG_RESULT([yes])
12118     ENABLE_PDFIMPORT=TRUE
12119     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
12120 else
12121     AC_MSG_RESULT([no])
12124 # Pdfium?
12125 AC_MSG_CHECKING([whether to build PDFium])
12126 ENABLE_PDFIUM=
12127 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
12128     AC_MSG_RESULT([yes])
12129     ENABLE_PDFIUM=TRUE
12130     BUILD_TYPE="$BUILD_TYPE PDFIUM"
12131 else
12132     AC_MSG_RESULT([no])
12134 AC_SUBST(ENABLE_PDFIUM)
12136 if test "$ENABLE_PDFIUM" = "TRUE"; then
12137     AC_MSG_CHECKING([which OpenJPEG library to use])
12138     if test "$with_system_openjpeg" = "yes"; then
12139         SYSTEM_OPENJPEG2=TRUE
12140         AC_MSG_RESULT([external])
12141         PKG_CHECK_MODULES( OPENJPEG2, libopenjp2 )
12142         OPENJPEG2_CFLAGS=$(printf '%s' "$OPENJPEG2_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12143         FilterLibs "${OPENJPEG2_LIBS}"
12144         OPENJPEG2_LIBS="${filteredlibs}"
12145     else
12146         SYSTEM_OPENJPEG2=FALSE
12147         AC_MSG_RESULT([internal])
12148     fi
12150     AC_MSG_CHECKING([which Abseil library to use])
12151     if test "$with_system_abseil" = "yes"; then
12152         AC_MSG_RESULT([external])
12153         SYSTEM_ABSEIL=TRUE
12154         AC_LANG_PUSH([C++])
12155         AC_CHECK_HEADER(absl/types/bad_optional_access.h, [],
12156                         [AC_MSG_ERROR(abseil headers not found.)], [])
12157         AC_CHECK_HEADER(absl/types/bad_variant_access.h, [],
12158                         [AC_MSG_ERROR(abseil headers not found.)], [])
12159         AC_CHECK_LIB([absl_bad_optional_access], [main], [],
12160                      [AC_MSG_ERROR([libabsl_bad_optional_access library not found.])])
12161         AC_CHECK_LIB([absl_bad_variant_access], [main], [],
12162                      [AC_MSG_ERROR([libabsl_bad_variant_access library not found.])])
12163         ABSEIL_LIBS="-labsl_bad_optional_access -labsl_bad_variant_access"
12164         AC_LANG_POP([C++])
12165         ABSEIL_CFLAGS=$(printf '%s' "$ABSEIL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12166         FilterLibs "${ABSEIL_LIBS}"
12167         ABSEIL_LIBS="${filteredlibs}"
12168     else
12169         AC_MSG_RESULT([internal])
12170     fi
12172 AC_SUBST(SYSTEM_OPENJPEG2)
12173 AC_SUBST(SYSTEM_ABSEIL)
12174 AC_SUBST(ABSEIL_CFLAGS)
12175 AC_SUBST(ABSEIL_LIBS)
12177 dnl ===================================================================
12178 dnl Check for poppler
12179 dnl ===================================================================
12180 ENABLE_POPPLER=
12181 AC_MSG_CHECKING([whether to build Poppler])
12182 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
12183     AC_MSG_RESULT([yes])
12184     ENABLE_POPPLER=TRUE
12185     AC_DEFINE(HAVE_FEATURE_POPPLER)
12186 else
12187     AC_MSG_RESULT([no])
12189 AC_SUBST(ENABLE_POPPLER)
12191 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
12192     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
12195 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
12196     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
12199 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
12200     dnl ===================================================================
12201     dnl Check for system poppler
12202     dnl ===================================================================
12203     AC_MSG_CHECKING([which PDF import poppler to use])
12204     if test "$with_system_poppler" = "yes"; then
12205         AC_MSG_RESULT([external])
12206         SYSTEM_POPPLER=TRUE
12207         PKG_CHECK_MODULES(POPPLER,[poppler >= 0.14 poppler-cpp])
12208         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12209         FilterLibs "${POPPLER_LIBS}"
12210         POPPLER_LIBS="${filteredlibs}"
12211     else
12212         AC_MSG_RESULT([internal])
12213         SYSTEM_POPPLER=
12214         BUILD_TYPE="$BUILD_TYPE POPPLER"
12215     fi
12216     AC_DEFINE([ENABLE_PDFIMPORT],1)
12218 AC_SUBST(ENABLE_PDFIMPORT)
12219 AC_SUBST(SYSTEM_POPPLER)
12220 AC_SUBST(POPPLER_CFLAGS)
12221 AC_SUBST(POPPLER_LIBS)
12223 # Skia?
12224 ENABLE_SKIA=
12225 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
12226     # Skia now requires at least freetype2 >= 2.8.1, which is less that what LO requires as system freetype.
12227     if test "$SYSTEM_FREETYPE" = TRUE; then
12228         PKG_CHECK_EXISTS(freetype2 >= 21.0.15, # 21.0.15 = 2.8.1
12229             [skia_freetype_ok=yes],
12230             [skia_freetype_ok=no])
12231     else # internal is ok
12232         skia_freetype_ok=yes
12233     fi
12234     AC_MSG_CHECKING([whether to build Skia])
12235     if test "$skia_freetype_ok" = "yes"; then
12236         if test "$enable_skia" = "debug"; then
12237             AC_MSG_RESULT([yes (debug)])
12238             ENABLE_SKIA_DEBUG=TRUE
12239         else
12240             AC_MSG_RESULT([yes])
12241             ENABLE_SKIA_DEBUG=
12242         fi
12243         ENABLE_SKIA=TRUE
12244         if test "$ENDIANNESS" = "big" && test "$ENABLE_SKIA" = "TRUE"; then
12245                 AC_MSG_ERROR([skia doesn't work/isn't supported upstream on big-endian. Use --disable-skia])
12246         fi
12248         AC_DEFINE(HAVE_FEATURE_SKIA)
12249         BUILD_TYPE="$BUILD_TYPE SKIA"
12251         if test "$OS" = "MACOSX"; then
12252             AC_DEFINE(SK_GANESH,1)
12253             AC_DEFINE(SK_METAL,1)
12254             SKIA_GPU=METAL
12255             AC_SUBST(SKIA_GPU)
12256         else
12257             AC_DEFINE(SK_GANESH,1)
12258             AC_DEFINE(SK_VULKAN,1)
12259             SKIA_GPU=VULKAN
12260             AC_SUBST(SKIA_GPU)
12261         fi
12262     else
12263         AC_MSG_RESULT([no (freetype too old)])
12264         add_warning "freetype version is too old for Skia library, at least 2.8.1 required, Skia support disabled"
12265     fi
12267 else
12268     AC_MSG_CHECKING([whether to build Skia])
12269     AC_MSG_RESULT([no])
12271 AC_SUBST(ENABLE_SKIA)
12272 AC_SUBST(ENABLE_SKIA_DEBUG)
12274 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
12275 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
12276 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
12277 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
12278 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
12279 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
12280 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
12281 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F=
12282 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
12283 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
12284 LO_CLANG_VERSION=
12285 HAVE_LO_CLANG_DLLEXPORTINLINES=
12287 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE; then
12288     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12289         AC_MSG_CHECKING([for Clang])
12290         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
12291     else
12292         if test "$_os" = "WINNT"; then
12293             AC_MSG_CHECKING([for clang-cl])
12294             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
12295                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
12296             elif test -n "$PROGRAMFILES" -a -x "$(cygpath -u "$PROGRAMFILES/LLVM/bin/clang-cl.exe")"; then
12297                 LO_CLANG_CC=`win_short_path_for_make "$PROGRAMFILES/LLVM/bin/clang-cl.exe"`
12298             elif test -x "$(cygpath -u "c:/Program Files/LLVM/bin/clang-cl.exe")"; then
12299                 LO_CLANG_CC=`win_short_path_for_make "c:/Program Files/LLVM/bin/clang-cl.exe"`
12300             fi
12301             if test -n "$LO_CLANG_CC"; then
12302                 dnl explicitly set -m32/-m64
12303                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
12304                 LO_CLANG_CXX="$LO_CLANG_CC"
12305                 AC_MSG_RESULT([$LO_CLANG_CC])
12306             else
12307                 AC_MSG_RESULT([no])
12308             fi
12310             AC_MSG_CHECKING([the dependency generation prefix (clang.exe -showIncludes)])
12311             echo "#include <stdlib.h>" > conftest.c
12312             LO_CLANG_SHOWINCLUDES_PREFIX=`VSLANG=1033 $LO_CLANG_CC $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
12313                 grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
12314             rm -f conftest.c conftest.obj
12315             if test -z "$LO_CLANG_SHOWINCLUDES_PREFIX"; then
12316                 AC_MSG_ERROR([cannot determine the -showIncludes prefix])
12317             else
12318                 AC_MSG_RESULT(["$LO_CLANG_SHOWINCLUDES_PREFIX"])
12319             fi
12320         else
12321             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
12322             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
12323         fi
12324     fi
12325     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12326         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
12327         LO_CLANG_VERSION=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
12328         if test "$LO_CLANG_VERSION" -lt 50002; then
12329             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
12330             LO_CLANG_CC=
12331             LO_CLANG_CXX=
12332         fi
12333     fi
12334     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX" -a "$_os" = "WINNT"; then
12335         save_CXX="$CXX"
12336         CXX="$LO_CLANG_CXX"
12337         AC_MSG_CHECKING([whether $CXX supports -Zc:dllexportInlines-])
12338         AC_LANG_PUSH([C++])
12339         save_CXXFLAGS=$CXXFLAGS
12340         CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
12341         AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
12342                 HAVE_LO_CLANG_DLLEXPORTINLINES=TRUE
12343                 AC_MSG_RESULT([yes])
12344             ], [AC_MSG_RESULT([no])])
12345         CXXFLAGS=$save_CXXFLAGS
12346         AC_LANG_POP([C++])
12347         CXX="$save_CXX"
12348         if test -z "$HAVE_LO_CLANG_DLLEXPORTINLINES"; then
12349             AC_MSG_ERROR([Clang compiler does not support -Zc:dllexportInlines-. The Skia library needs to be built using a newer Clang version, or use --disable-skia.])
12350         fi
12351     fi
12352     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
12353         # Skia is the default on Windows and Mac, so hard-require Clang.
12354         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
12355         if test "$_os" = "WINNT" -o "$_os" = "Darwin"; then
12356             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang, or use --disable-skia.])
12357         else
12358             AC_MSG_WARN([Clang compiler not found.])
12359         fi
12360     else
12362         save_CXX="$CXX"
12363         CXX="$LO_CLANG_CXX"
12364         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
12365         flag_sse2=-msse2
12366         flag_ssse3=-mssse3
12367         flag_sse41=-msse4.1
12368         flag_sse42=-msse4.2
12369         flag_avx=-mavx
12370         flag_avx2=-mavx2
12371         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
12372         flag_avx512f=-mavx512f
12373         flag_f16c=-mf16c
12374         flag_fma=-mfma
12376         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
12377         AC_LANG_PUSH([C++])
12378         save_CXXFLAGS=$CXXFLAGS
12379         CXXFLAGS="$CXXFLAGS $flag_sse2"
12380         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12381             #include <emmintrin.h>
12382             int main () {
12383                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12384                 c = _mm_xor_si128 (a, b);
12385                 return 0;
12386             }
12387             ])],
12388             [can_compile_sse2=yes],
12389             [can_compile_sse2=no])
12390         AC_LANG_POP([C++])
12391         CXXFLAGS=$save_CXXFLAGS
12392         AC_MSG_RESULT([${can_compile_sse2}])
12393         if test "${can_compile_sse2}" = "yes" ; then
12394             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
12395         fi
12397         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
12398         AC_LANG_PUSH([C++])
12399         save_CXXFLAGS=$CXXFLAGS
12400         CXXFLAGS="$CXXFLAGS $flag_ssse3"
12401         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12402             #include <tmmintrin.h>
12403             int main () {
12404                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12405                 c = _mm_maddubs_epi16 (a, b);
12406                 return 0;
12407             }
12408             ])],
12409             [can_compile_ssse3=yes],
12410             [can_compile_ssse3=no])
12411         AC_LANG_POP([C++])
12412         CXXFLAGS=$save_CXXFLAGS
12413         AC_MSG_RESULT([${can_compile_ssse3}])
12414         if test "${can_compile_ssse3}" = "yes" ; then
12415             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
12416         fi
12418         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
12419         AC_LANG_PUSH([C++])
12420         save_CXXFLAGS=$CXXFLAGS
12421         CXXFLAGS="$CXXFLAGS $flag_sse41"
12422         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12423             #include <smmintrin.h>
12424             int main () {
12425                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12426                 c = _mm_cmpeq_epi64 (a, b);
12427                 return 0;
12428             }
12429             ])],
12430             [can_compile_sse41=yes],
12431             [can_compile_sse41=no])
12432         AC_LANG_POP([C++])
12433         CXXFLAGS=$save_CXXFLAGS
12434         AC_MSG_RESULT([${can_compile_sse41}])
12435         if test "${can_compile_sse41}" = "yes" ; then
12436             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12437         fi
12439         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12440         AC_LANG_PUSH([C++])
12441         save_CXXFLAGS=$CXXFLAGS
12442         CXXFLAGS="$CXXFLAGS $flag_sse42"
12443         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12444             #include <nmmintrin.h>
12445             int main () {
12446                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12447                 c = _mm_cmpgt_epi64 (a, b);
12448                 return 0;
12449             }
12450             ])],
12451             [can_compile_sse42=yes],
12452             [can_compile_sse42=no])
12453         AC_LANG_POP([C++])
12454         CXXFLAGS=$save_CXXFLAGS
12455         AC_MSG_RESULT([${can_compile_sse42}])
12456         if test "${can_compile_sse42}" = "yes" ; then
12457             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12458         fi
12460         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12461         AC_LANG_PUSH([C++])
12462         save_CXXFLAGS=$CXXFLAGS
12463         CXXFLAGS="$CXXFLAGS $flag_avx"
12464         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12465             #include <immintrin.h>
12466             int main () {
12467                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12468                 c = _mm256_xor_ps(a, b);
12469                 return 0;
12470             }
12471             ])],
12472             [can_compile_avx=yes],
12473             [can_compile_avx=no])
12474         AC_LANG_POP([C++])
12475         CXXFLAGS=$save_CXXFLAGS
12476         AC_MSG_RESULT([${can_compile_avx}])
12477         if test "${can_compile_avx}" = "yes" ; then
12478             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12479         fi
12481         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12482         AC_LANG_PUSH([C++])
12483         save_CXXFLAGS=$CXXFLAGS
12484         CXXFLAGS="$CXXFLAGS $flag_avx2"
12485         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12486             #include <immintrin.h>
12487             int main () {
12488                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12489                 c = _mm256_maddubs_epi16(a, b);
12490                 return 0;
12491             }
12492             ])],
12493             [can_compile_avx2=yes],
12494             [can_compile_avx2=no])
12495         AC_LANG_POP([C++])
12496         CXXFLAGS=$save_CXXFLAGS
12497         AC_MSG_RESULT([${can_compile_avx2}])
12498         if test "${can_compile_avx2}" = "yes" ; then
12499             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12500         fi
12502         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12503         AC_LANG_PUSH([C++])
12504         save_CXXFLAGS=$CXXFLAGS
12505         CXXFLAGS="$CXXFLAGS $flag_avx512"
12506         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12507             #include <immintrin.h>
12508             int main () {
12509                 __m512i a = _mm512_loadu_si512(0);
12510                 __m512d v1 = _mm512_load_pd(0);
12511                 // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
12512                 __m512d v2 = _mm512_abs_pd(v1);
12513                 return 0;
12514             }
12515             ])],
12516             [can_compile_avx512=yes],
12517             [can_compile_avx512=no])
12518         AC_LANG_POP([C++])
12519         CXXFLAGS=$save_CXXFLAGS
12520         AC_MSG_RESULT([${can_compile_avx512}])
12521         if test "${can_compile_avx512}" = "yes" ; then
12522             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12523             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
12524         fi
12526         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12527         AC_LANG_PUSH([C++])
12528         save_CXXFLAGS=$CXXFLAGS
12529         CXXFLAGS="$CXXFLAGS $flag_f16c"
12530         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12531             #include <immintrin.h>
12532             int main () {
12533                 __m128i a = _mm_set1_epi32 (0);
12534                 __m128 c;
12535                 c = _mm_cvtph_ps(a);
12536                 return 0;
12537             }
12538             ])],
12539             [can_compile_f16c=yes],
12540             [can_compile_f16c=no])
12541         AC_LANG_POP([C++])
12542         CXXFLAGS=$save_CXXFLAGS
12543         AC_MSG_RESULT([${can_compile_f16c}])
12544         if test "${can_compile_f16c}" = "yes" ; then
12545             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12546         fi
12548         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12549         AC_LANG_PUSH([C++])
12550         save_CXXFLAGS=$CXXFLAGS
12551         CXXFLAGS="$CXXFLAGS $flag_fma"
12552         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12553             #include <immintrin.h>
12554             int main () {
12555                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12556                 d = _mm256_fmadd_ps(a, b, c);
12557                 return 0;
12558             }
12559             ])],
12560             [can_compile_fma=yes],
12561             [can_compile_fma=no])
12562         AC_LANG_POP([C++])
12563         CXXFLAGS=$save_CXXFLAGS
12564         AC_MSG_RESULT([${can_compile_fma}])
12565         if test "${can_compile_fma}" = "yes" ; then
12566             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12567         fi
12569         CXX="$save_CXX"
12570     fi
12573 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12575 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12576     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12577     AC_LANG_PUSH([C])
12578     save_CC="$CC"
12579     CC="$LO_CLANG_CC"
12580     save_CFLAGS=$CFLAGS
12581     CFLAGS="$CFLAGS --ccache-skip -O2 -Werror"
12582     dnl an empty program will do, we're checking the compiler flags
12583     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12584                       [use_ccache=yes], [use_ccache=no])
12585     CFLAGS=$save_CFLAGS
12586     CC=$save_CC
12587     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12588         AC_MSG_RESULT([yes])
12589     else
12590         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12591         AC_MSG_RESULT([no])
12592     fi
12593     AC_LANG_POP([C])
12595     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12596     AC_LANG_PUSH([C++])
12597     save_CXX="$CXX"
12598     CXX="$LO_CLANG_CXX"
12599     save_CXXFLAGS=$CXXFLAGS
12600     CXXFLAGS="$CXXFLAGS --ccache-skip -O2 -Werror"
12601     dnl an empty program will do, we're checking the compiler flags
12602     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12603                       [use_ccache=yes], [use_ccache=no])
12604     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12605         AC_MSG_RESULT([yes])
12606     else
12607         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12608         AC_MSG_RESULT([no])
12609     fi
12610     CXXFLAGS=$save_CXXFLAGS
12611     CXX=$save_CXX
12612     AC_LANG_POP([C++])
12615 AC_SUBST(LO_CLANG_CC)
12616 AC_SUBST(LO_CLANG_CXX)
12617 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12618 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12619 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12620 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12621 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12622 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12623 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12624 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F)
12625 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12626 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12627 AC_SUBST(LO_CLANG_SHOWINCLUDES_PREFIX)
12628 AC_SUBST(LO_CLANG_VERSION)
12629 AC_SUBST(CLANG_USE_LD)
12630 AC_SUBST([HAVE_LO_CLANG_DLLEXPORTINLINES])
12632 SYSTEM_GPGMEPP=
12634 AC_MSG_CHECKING([whether to enable gpgmepp])
12635 if test "$enable_gpgmepp" = no; then
12636     AC_MSG_RESULT([no])
12637 elif test "$enable_mpl_subset" = "yes"; then
12638     AC_MSG_RESULT([no (MPL only])
12639 elif test "$enable_fuzzers" = "yes"; then
12640     AC_MSG_RESULT([no (oss-fuzz)])
12641 elif test \( \( "$_os" = "Linux" -o "$_os" = "Darwin" \) -a "$ENABLE_NSS" = TRUE \) -o "$_os" = "WINNT" ; then
12642     AC_MSG_RESULT([yes])
12643     dnl ===================================================================
12644     dnl Check for system gpgme
12645     dnl ===================================================================
12646     AC_MSG_CHECKING([which gpgmepp to use])
12647     if test "$with_system_gpgmepp" = "yes"; then
12648         AC_MSG_RESULT([external])
12649         SYSTEM_GPGMEPP=TRUE
12651         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12652         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12653             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp >= 1.14 development package])], [])
12654         AC_CHECK_HEADER(gpgme.h, [],
12655             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12656         AC_CHECK_LIB(gpgmepp, main, [],
12657             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12658         GPGMEPP_LIBS=-lgpgmepp
12659     else
12660         AC_MSG_RESULT([internal])
12661         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12663         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12664         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12665         if test "$_os" != "WINNT"; then
12666             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12667             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12668         fi
12669     fi
12670     ENABLE_GPGMEPP=TRUE
12671     AC_DEFINE([HAVE_FEATURE_GPGME])
12672     AC_PATH_PROG(GPG, gpg)
12673     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12674     # so let's exclude that manually for the moment
12675     if test -n "$GPG" -a "$_os" != "WINNT"; then
12676         # make sure we not only have a working gpgme, but a full working
12677         # gpg installation to run OpenPGP signature verification
12678         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12679     fi
12680     if test "$_os" = "Linux"; then
12681       uid=`id -u`
12682       AC_MSG_CHECKING([for /run/user/$uid])
12683       if test -d /run/user/$uid; then
12684         AC_MSG_RESULT([yes])
12685         AC_PATH_PROG(GPGCONF, gpgconf)
12687         # Older versions of gpgconf are not working as expected, since
12688         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12689         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12690         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12691         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12692         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12693         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12694         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12695           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12696           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12697           if $GPGCONF --dump-options > /dev/null ; then
12698             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12699               AC_MSG_RESULT([yes])
12700               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12701               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12702             else
12703               AC_MSG_RESULT([no])
12704             fi
12705           else
12706             AC_MSG_RESULT([no. missing or broken gpgconf?])
12707           fi
12708         else
12709           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12710         fi
12711       else
12712         AC_MSG_RESULT([no])
12713      fi
12714    fi
12715 else
12716     AC_MSG_RESULT([no (unsupported OS or missing NSS)])
12718 AC_SUBST(ENABLE_GPGMEPP)
12719 AC_SUBST(SYSTEM_GPGMEPP)
12720 AC_SUBST(GPG_ERROR_CFLAGS)
12721 AC_SUBST(GPG_ERROR_LIBS)
12722 AC_SUBST(LIBASSUAN_CFLAGS)
12723 AC_SUBST(LIBASSUAN_LIBS)
12724 AC_SUBST(GPGMEPP_CFLAGS)
12725 AC_SUBST(GPGMEPP_LIBS)
12727 AC_MSG_CHECKING([whether to build Java Websocket for the UNO remote websocket client])
12728 if test "$with_java" != "no"; then
12729     AC_MSG_RESULT([yes])
12730     ENABLE_JAVA_WEBSOCKET=TRUE
12731     BUILD_TYPE="$BUILD_TYPE JAVA_WEBSOCKET"
12732     NEED_ANT=TRUE
12733 else
12734     AC_MSG_RESULT([no])
12735     ENABLE_JAVA_WEBSOCKET=
12737 AC_SUBST(ENABLE_JAVA_WEBSOCKET)
12739 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12740 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12741     AC_MSG_RESULT([yes])
12742     ENABLE_MEDIAWIKI=TRUE
12743     BUILD_TYPE="$BUILD_TYPE XSLTML"
12744     if test  "x$with_java" = "xno"; then
12745         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12746     fi
12747 else
12748     AC_MSG_RESULT([no])
12749     ENABLE_MEDIAWIKI=
12750     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12752 AC_SUBST(ENABLE_MEDIAWIKI)
12754 AC_MSG_CHECKING([whether to build the Report Builder])
12755 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12756     AC_MSG_RESULT([yes])
12757     ENABLE_REPORTBUILDER=TRUE
12758     AC_MSG_CHECKING([which jfreereport libs to use])
12759     if test "$with_system_jfreereport" = "yes"; then
12760         SYSTEM_JFREEREPORT=TRUE
12761         AC_MSG_RESULT([external])
12762         if test -z $SAC_JAR; then
12763             SAC_JAR=/usr/share/java/sac.jar
12764         fi
12765         if ! test -f $SAC_JAR; then
12766              AC_MSG_ERROR(sac.jar not found.)
12767         fi
12769         if test -z $LIBXML_JAR; then
12770             if test -f /usr/share/java/libxml-1.0.0.jar; then
12771                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12772             elif test -f /usr/share/java/libxml.jar; then
12773                 LIBXML_JAR=/usr/share/java/libxml.jar
12774             else
12775                 AC_MSG_ERROR(libxml.jar replacement not found.)
12776             fi
12777         elif ! test -f $LIBXML_JAR; then
12778             AC_MSG_ERROR(libxml.jar not found.)
12779         fi
12781         if test -z $FLUTE_JAR; then
12782             if test -f /usr/share/java/flute-1.3.0.jar; then
12783                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12784             elif test -f /usr/share/java/flute.jar; then
12785                 FLUTE_JAR=/usr/share/java/flute.jar
12786             else
12787                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12788             fi
12789         elif ! test -f $FLUTE_JAR; then
12790             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12791         fi
12793         if test -z $JFREEREPORT_JAR; then
12794             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12795                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12796             elif test -f /usr/share/java/flow-engine.jar; then
12797                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12798             else
12799                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12800             fi
12801         elif ! test -f  $JFREEREPORT_JAR; then
12802                 AC_MSG_ERROR(jfreereport.jar not found.)
12803         fi
12805         if test -z $LIBLAYOUT_JAR; then
12806             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12807                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12808             elif test -f /usr/share/java/liblayout.jar; then
12809                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12810             else
12811                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12812             fi
12813         elif ! test -f $LIBLAYOUT_JAR; then
12814                 AC_MSG_ERROR(liblayout.jar not found.)
12815         fi
12817         if test -z $LIBLOADER_JAR; then
12818             if test -f /usr/share/java/libloader-1.0.0.jar; then
12819                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
12820             elif test -f /usr/share/java/libloader.jar; then
12821                 LIBLOADER_JAR=/usr/share/java/libloader.jar
12822             else
12823                 AC_MSG_ERROR(libloader.jar replacement not found.)
12824             fi
12825         elif ! test -f  $LIBLOADER_JAR; then
12826             AC_MSG_ERROR(libloader.jar not found.)
12827         fi
12829         if test -z $LIBFORMULA_JAR; then
12830             if test -f /usr/share/java/libformula-0.2.0.jar; then
12831                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
12832             elif test -f /usr/share/java/libformula.jar; then
12833                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
12834             else
12835                 AC_MSG_ERROR(libformula.jar replacement not found.)
12836             fi
12837         elif ! test -f $LIBFORMULA_JAR; then
12838                 AC_MSG_ERROR(libformula.jar not found.)
12839         fi
12841         if test -z $LIBREPOSITORY_JAR; then
12842             if test -f /usr/share/java/librepository-1.0.0.jar; then
12843                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
12844             elif test -f /usr/share/java/librepository.jar; then
12845                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
12846             else
12847                 AC_MSG_ERROR(librepository.jar replacement not found.)
12848             fi
12849         elif ! test -f $LIBREPOSITORY_JAR; then
12850             AC_MSG_ERROR(librepository.jar not found.)
12851         fi
12853         if test -z $LIBFONTS_JAR; then
12854             if test -f /usr/share/java/libfonts-1.0.0.jar; then
12855                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
12856             elif test -f /usr/share/java/libfonts.jar; then
12857                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
12858             else
12859                 AC_MSG_ERROR(libfonts.jar replacement not found.)
12860             fi
12861         elif ! test -f $LIBFONTS_JAR; then
12862                 AC_MSG_ERROR(libfonts.jar not found.)
12863         fi
12865         if test -z $LIBSERIALIZER_JAR; then
12866             if test -f /usr/share/java/libserializer-1.0.0.jar; then
12867                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
12868             elif test -f /usr/share/java/libserializer.jar; then
12869                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
12870             else
12871                 AC_MSG_ERROR(libserializer.jar replacement not found.)
12872             fi
12873         elif ! test -f $LIBSERIALIZER_JAR; then
12874                 AC_MSG_ERROR(libserializer.jar not found.)
12875         fi
12877         if test -z $LIBBASE_JAR; then
12878             if test -f /usr/share/java/libbase-1.0.0.jar; then
12879                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
12880             elif test -f /usr/share/java/libbase.jar; then
12881                 LIBBASE_JAR=/usr/share/java/libbase.jar
12882             else
12883                 AC_MSG_ERROR(libbase.jar replacement not found.)
12884             fi
12885         elif ! test -f $LIBBASE_JAR; then
12886             AC_MSG_ERROR(libbase.jar not found.)
12887         fi
12889     else
12890         AC_MSG_RESULT([internal])
12891         SYSTEM_JFREEREPORT=
12892         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
12893         NEED_ANT=TRUE
12894     fi
12895 else
12896     AC_MSG_RESULT([no])
12897     ENABLE_REPORTBUILDER=
12898     SYSTEM_JFREEREPORT=
12900 AC_SUBST(ENABLE_REPORTBUILDER)
12901 AC_SUBST(SYSTEM_JFREEREPORT)
12902 AC_SUBST(SAC_JAR)
12903 AC_SUBST(LIBXML_JAR)
12904 AC_SUBST(FLUTE_JAR)
12905 AC_SUBST(JFREEREPORT_JAR)
12906 AC_SUBST(LIBBASE_JAR)
12907 AC_SUBST(LIBLAYOUT_JAR)
12908 AC_SUBST(LIBLOADER_JAR)
12909 AC_SUBST(LIBFORMULA_JAR)
12910 AC_SUBST(LIBREPOSITORY_JAR)
12911 AC_SUBST(LIBFONTS_JAR)
12912 AC_SUBST(LIBSERIALIZER_JAR)
12914 # scripting provider for BeanShell?
12915 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
12916 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
12917     AC_MSG_RESULT([yes])
12918     ENABLE_SCRIPTING_BEANSHELL=TRUE
12920     dnl ===================================================================
12921     dnl Check for system beanshell
12922     dnl ===================================================================
12923     AC_MSG_CHECKING([which beanshell to use])
12924     if test "$with_system_beanshell" = "yes"; then
12925         AC_MSG_RESULT([external])
12926         SYSTEM_BSH=TRUE
12927         if test -z $BSH_JAR; then
12928             BSH_JAR=/usr/share/java/bsh.jar
12929         fi
12930         if ! test -f $BSH_JAR; then
12931             AC_MSG_ERROR(bsh.jar not found.)
12932         fi
12933     else
12934         AC_MSG_RESULT([internal])
12935         SYSTEM_BSH=
12936         BUILD_TYPE="$BUILD_TYPE BSH"
12937     fi
12938 else
12939     AC_MSG_RESULT([no])
12940     ENABLE_SCRIPTING_BEANSHELL=
12941     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
12943 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
12944 AC_SUBST(SYSTEM_BSH)
12945 AC_SUBST(BSH_JAR)
12947 # scripting provider for JavaScript?
12948 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
12949 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
12950     AC_MSG_RESULT([yes])
12951     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
12953     dnl ===================================================================
12954     dnl Check for system rhino
12955     dnl ===================================================================
12956     AC_MSG_CHECKING([which rhino to use])
12957     if test "$with_system_rhino" = "yes"; then
12958         AC_MSG_RESULT([external])
12959         SYSTEM_RHINO=TRUE
12960         if test -z $RHINO_JAR; then
12961             RHINO_JAR=/usr/share/java/js.jar
12962         fi
12963         if ! test -f $RHINO_JAR; then
12964             AC_MSG_ERROR(js.jar not found.)
12965         fi
12966     else
12967         AC_MSG_RESULT([internal])
12968         SYSTEM_RHINO=
12969         BUILD_TYPE="$BUILD_TYPE RHINO"
12970         NEED_ANT=TRUE
12971     fi
12972 else
12973     AC_MSG_RESULT([no])
12974     ENABLE_SCRIPTING_JAVASCRIPT=
12975     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
12977 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
12978 AC_SUBST(SYSTEM_RHINO)
12979 AC_SUBST(RHINO_JAR)
12981 # This is only used in Qt5/Qt6/KF5/KF6 checks to determine if /usr/lib64
12982 # paths should be added to library search path. So lets put all 64-bit
12983 # platforms there.
12984 supports_multilib=
12985 case "$host_cpu" in
12986 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el | loongarch64 | riscv64)
12987     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
12988         supports_multilib="yes"
12989     fi
12990     ;;
12992     ;;
12993 esac
12995 dnl ===================================================================
12996 dnl QT5 Integration
12997 dnl ===================================================================
12999 QT5_CFLAGS=""
13000 QT5_LIBS=""
13001 QMAKE5="qmake"
13002 MOC5="moc"
13003 QT5_GOBJECT_CFLAGS=""
13004 QT5_GOBJECT_LIBS=""
13005 QT5_HAVE_GOBJECT=""
13006 QT5_PLATFORMS_SRCDIR=""
13007 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13008         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
13009         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13010 then
13011     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
13012     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
13014     if test -n "$supports_multilib"; then
13015         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
13016     fi
13018     qt5_test_include="QtWidgets/qapplication.h"
13019     if test "$_os" = "Emscripten"; then
13020         qt5_test_library="libQt5Widgets.a"
13021     else
13022         qt5_test_library="libQt5Widgets.so"
13023     fi
13025     dnl Check for qmake5
13026     if test -n "$QT5DIR"; then
13027         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
13028     else
13029         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
13030     fi
13031     if test "$QMAKE5" = "no"; then
13032         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
13033     else
13034         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
13035         if test -z "$qmake5_test_ver"; then
13036             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
13037         fi
13038         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
13039         qt5_minimal_minor="6"
13040         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
13041             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
13042         else
13043             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
13044         fi
13045     fi
13047     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
13048     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
13049     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
13050     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
13052     AC_MSG_CHECKING([for Qt5 headers])
13053     qt5_incdir="no"
13054     for inc_dir in $qt5_incdirs; do
13055         if test -r "$inc_dir/$qt5_test_include"; then
13056             qt5_incdir="$inc_dir"
13057             break
13058         fi
13059     done
13060     AC_MSG_RESULT([$qt5_incdir])
13061     if test "x$qt5_incdir" = "xno"; then
13062         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
13063     fi
13064     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
13065     AC_LANG_PUSH([C++])
13066     save_CPPFLAGS=$CPPFLAGS
13067     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
13068     AC_CHECK_HEADER(QtCore/qconfig.h, [],
13069         [AC_MSG_ERROR(qconfig.h header not found.)], [])
13070     CPPFLAGS=$save_CPPFLAGS
13071     AC_LANG_POP([C++])
13073     AC_MSG_CHECKING([for Qt5 libraries])
13074     qt5_libdir="no"
13075     for lib_dir in $qt5_libdirs; do
13076         if test -r "$lib_dir/$qt5_test_library"; then
13077             qt5_libdir="$lib_dir"
13078             break
13079         fi
13080     done
13081     AC_MSG_RESULT([$qt5_libdir])
13082     if test "x$qt5_libdir" = "xno"; then
13083         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
13084     fi
13086     if test "$_os" = "Emscripten"; then
13087         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
13088             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
13089         fi
13090         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
13091             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
13092         fi
13094         EMSDK_LLVM_NM="$(em-config LLVM_ROOT)"/llvm-nm
13095         if ! test -x "$EMSDK_LLVM_NM"; then
13096             AC_MSG_ERROR([Missing llvm-nm expected to be found at "$EMSDK_LLVM_NM".])
13097         fi
13098         if test ! -f "${qt5_libdir}"/libQt5Gui.a; then
13099             AC_MSG_ERROR([No Qt5 WASM libQt5Gui.a in ${qt5_libdir}])
13100         fi
13101         QT5_WASM_SJLJ="`${EMSDK_LLVM_NM} "${qt5_libdir}"/libQt5Gui.a 2>/dev/null | $GREP emscripten_longjmp`"
13102         if test "$ENABLE_WASM_EXCEPTIONS" = TRUE -a -n "$QT5_WASM_SJLJ"; then
13103             AC_MSG_ERROR(['emscripten_longjmp' symbol found in libQt5Gui.a (missing '-s SUPPORT_LONGJMP=wasm'). See static/README.wasm.md.])
13104         fi
13105         if test "$ENABLE_WASM_EXCEPTIONS" != TRUE -a -z "$QT5_WASM_SJLJ"; then
13106             AC_MSG_ERROR(['emscripten_longjmp' symbol not found in libQt5Gui.a. You probably use an incompatible Qt build with '-s SUPPORT_LONGJMP=wasm'.])
13107         fi
13108     fi
13110     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13111     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13112     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13113     if test "$_os" = "Emscripten"; then
13114         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
13115     fi
13117     if test "$USING_X11" = TRUE; then
13118         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
13119         PKG_CHECK_MODULES(QT5_XCB_ICCCM,[xcb-icccm],[
13120             QT5_HAVE_XCB_ICCCM=1
13121             AC_DEFINE(QT5_HAVE_XCB_ICCCM)
13122         ],[
13123             AC_MSG_WARN([XCB ICCCM not found, which is needed for old Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)])
13124             add_warning "XCB ICCCM not found, which is needed for Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)"
13125         ])
13126         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
13127         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
13128         QT5_USING_X11=1
13129         AC_DEFINE(QT5_USING_X11)
13130     fi
13132     dnl Check for Meta Object Compiler
13134     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
13135     if test "$MOC5" = "no"; then
13136         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13137 the root of your Qt installation by exporting QT5DIR before running "configure".])
13138     fi
13140     if test "$test_gstreamer_1_0" = yes; then
13141         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
13142                 QT5_HAVE_GOBJECT=1
13143                 AC_DEFINE(QT5_HAVE_GOBJECT)
13144             ],
13145             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
13146         )
13147     fi
13149 AC_SUBST(QT5_CFLAGS)
13150 AC_SUBST(QT5_LIBS)
13151 AC_SUBST(MOC5)
13152 AC_SUBST(QT5_GOBJECT_CFLAGS)
13153 AC_SUBST(QT5_GOBJECT_LIBS)
13154 AC_SUBST(QT5_HAVE_GOBJECT)
13155 AC_SUBST(QT5_PLATFORMS_SRCDIR)
13157 dnl ===================================================================
13158 dnl QT6 Integration
13159 dnl ===================================================================
13161 QT6_CFLAGS=""
13162 QT6_LIBS=""
13163 QMAKE6="qmake"
13164 MOC6="moc"
13165 QT6_PLATFORMS_SRCDIR=""
13166 if test \( "$test_kf6" = "yes" -a "$ENABLE_KF6" = "TRUE" \) -o \
13167         \( "$test_qt6" = "yes" -a "$ENABLE_QT6" = "TRUE" \)
13168 then
13169     qt6_incdirs="$QT6INC /usr/include/qt6 /usr/include $x_includes"
13170     qt6_libdirs="$QT6LIB /usr/lib/qt6 /usr/lib $x_libraries"
13172     if test -n "$supports_multilib"; then
13173         qt6_libdirs="$qt6_libdirs /usr/lib64/qt6 /usr/lib64/qt /usr/lib64"
13174     fi
13176     qt6_test_include="QtWidgets/qapplication.h"
13177     if test "$_os" = "Emscripten"; then
13178         qt6_test_library="libQt6Widgets.a"
13179     else
13180         qt6_test_library="libQt6Widgets.so"
13181     fi
13183     dnl Check for qmake6
13184     if test -n "$QT6DIR"; then
13185         AC_PATH_PROG(QMAKE6, [qmake], no, [$QT6DIR/bin])
13186     else
13187         AC_PATH_PROGS(QMAKE6, [qmake-qt6 qmake6 qmake], no)
13188     fi
13189     if test "$QMAKE6" = "no"; then
13190         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13191     else
13192         qmake6_test_ver="`$QMAKE6 -v 2>&1 | $SED -n -e 's/^Using Qt version \(6\.[[0-9.]]\+\).*$/\1/p'`"
13193         if test -z "$qmake6_test_ver"; then
13194             AC_MSG_ERROR([Wrong qmake for Qt6 found. Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13195         fi
13196         AC_MSG_NOTICE([Detected Qt6 version: $qmake6_test_ver])
13197     fi
13199     qt6_incdirs="`$QMAKE6 -query QT_INSTALL_HEADERS` $qt6_incdirs"
13200     qt6_libdirs="`$QMAKE6 -query QT_INSTALL_LIBS` $qt6_libdirs"
13201     qt6_platformsdir="`$QMAKE6 -query QT_INSTALL_PLUGINS`/platforms"
13202     QT6_PLATFORMS_SRCDIR="$qt6_platformsdir"
13204     AC_MSG_CHECKING([for Qt6 headers])
13205     qt6_incdir="no"
13206     for inc_dir in $qt6_incdirs; do
13207         if test -r "$inc_dir/$qt6_test_include"; then
13208             qt6_incdir="$inc_dir"
13209             break
13210         fi
13211     done
13212     AC_MSG_RESULT([$qt6_incdir])
13213     if test "x$qt6_incdir" = "xno"; then
13214         AC_MSG_ERROR([Qt6 headers not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13215     fi
13216     # check for scenario: qt6-qtbase-devel-*.86_64 installed but host is i686
13217     AC_LANG_PUSH([C++])
13218     save_CPPFLAGS=$CPPFLAGS
13219     CPPFLAGS="${CPPFLAGS} -I${qt6_incdir}"
13220     AC_CHECK_HEADER(QtCore/qconfig.h, [],
13221         [AC_MSG_ERROR(qconfig.h header not found.)], [])
13222     CPPFLAGS=$save_CPPFLAGS
13223     AC_LANG_POP([C++])
13225     AC_MSG_CHECKING([for Qt6 libraries])
13226     qt6_libdir="no"
13227     for lib_dir in $qt6_libdirs; do
13228         if test -r "$lib_dir/$qt6_test_library"; then
13229             qt6_libdir="$lib_dir"
13230             break
13231         fi
13232     done
13233     AC_MSG_RESULT([$qt6_libdir])
13234     if test "x$qt6_libdir" = "xno"; then
13235         AC_MSG_ERROR([Qt6 libraries not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13236     fi
13238     if test "$_os" = "Emscripten"; then
13239         if test ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html ; then
13240             QT6_PLATFORMS_SRCDIR="${QT6_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
13241         fi
13242         if test ! -f "${qt6_platformsdir}"/libqwasm.a -o ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html; then
13243             AC_MSG_ERROR([No Qt6 WASM QPA plugin found in ${qt6_platformsdir} or ${QT6_PLATFORMS_SRCDIR}])
13244         fi
13245     fi
13247     QT6_CFLAGS="-I$qt6_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13248     QT6_CFLAGS=$(printf '%s' "$QT6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13249     QT6_LIBS="-L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
13250     if test "$_os" = "Emscripten"; then
13251         QT6_LIBS="$QT6_LIBS -lqtpcre2 -lQt6EventDispatcherSupport -lQt6FontDatabaseSupport -L${qt6_platformsdir} -lqwasm"
13252     fi
13254     if test "$USING_X11" = TRUE; then
13255         PKG_CHECK_MODULES(QT6_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for key modifier handling in X11.])])
13256         QT6_CFLAGS="$QT6_CFLAGS $QT6_XCB_CFLAGS"
13257         QT6_LIBS="$QT6_LIBS $QT6_XCB_LIBS"
13258         QT6_USING_X11=1
13259         AC_DEFINE(QT6_USING_X11)
13260     fi
13262     dnl Check for Meta Object Compiler
13264     for lib_dir in $qt6_libdirs; do
13265         if test -z "$qt6_libexec_dirs"; then
13266             qt6_libexec_dirs="$lib_dir/libexec"
13267         else
13268             qt6_libexec_dirs="$qt6_libexec_dirs:$lib_dir/libexec"
13269         fi
13270     done
13271     AC_PATH_PROGS( MOC6, [moc-qt6 moc], no, [`dirname $qt6_libdir`/libexec:$QT6DIR/libexec:$qt6_libexec_dirs:`echo $qt6_libdirs | $SED -e 's/ /:/g'`:$PATH])
13272     if test "$MOC6" = "no"; then
13273         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13274 the root of your Qt installation by exporting QT6DIR before running "configure".])
13275     else
13276         moc6_test_ver="`$MOC6 -v 2>&1 | $SED -n -e 's/^moc \(6.*\)/\1/p'`"
13277         if test -z "$moc6_test_ver"; then
13278             AC_MSG_ERROR([Wrong moc for Qt6 found.])
13279         fi
13280         AC_MSG_NOTICE([Detected moc version: $moc_test_ver])
13281     fi
13283 AC_SUBST(QT6_CFLAGS)
13284 AC_SUBST(QT6_LIBS)
13285 AC_SUBST(MOC6)
13286 AC_SUBST(QT6_PLATFORMS_SRCDIR)
13288 dnl ===================================================================
13289 dnl KF5 Integration
13290 dnl ===================================================================
13292 KF5_CFLAGS=""
13293 KF5_LIBS=""
13294 KF5_CONFIG="kf5-config"
13295 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13296         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13297 then
13298     if test "$OS" = "HAIKU"; then
13299         haiku_arch="`echo $RTL_ARCH | tr X x`"
13300         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13301         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13302     fi
13304     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
13305     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
13306     if test -n "$supports_multilib"; then
13307         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
13308     fi
13310     kf5_test_include="KF5/KIOFileWidgets/KFileWidget"
13311     kf5_test_library="libKF5KIOFileWidgets.so"
13312     kf5_libdirs="$qt5_libdir $kf5_libdirs"
13314     dnl kf5 KDE4 support compatibility installed
13315     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
13316     if test "$KF5_CONFIG" != "no"; then
13317         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
13318         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
13319     fi
13321     dnl Check for KF5 headers
13322     AC_MSG_CHECKING([for KF5 headers])
13323     kf5_incdir="no"
13324     for kf5_check in $kf5_incdirs; do
13325         if test -r "$kf5_check/$kf5_test_include"; then
13326             kf5_incdir="$kf5_check/KF5"
13327             break
13328         fi
13329     done
13330     AC_MSG_RESULT([$kf5_incdir])
13331     if test "x$kf5_incdir" = "xno"; then
13332         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13333     fi
13335     dnl Check for KF5 libraries
13336     AC_MSG_CHECKING([for KF5 libraries])
13337     kf5_libdir="no"
13338     for kf5_check in $kf5_libdirs; do
13339         if test -r "$kf5_check/$kf5_test_library"; then
13340             kf5_libdir="$kf5_check"
13341             break
13342         fi
13343     done
13345     AC_MSG_RESULT([$kf5_libdir])
13346     if test "x$kf5_libdir" = "xno"; then
13347         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13348     fi
13350     KF5_CFLAGS="-I$kf5_incdir -I$kf5_incdir/KCoreAddons -I$kf5_incdir/KI18n -I$kf5_incdir/KConfigCore -I$kf5_incdir/KWindowSystem -I$kf5_incdir/KIOCore -I$kf5_incdir/KIOWidgets -I$kf5_incdir/KIOFileWidgets -I$qt5_incdir -I$qt5_incdir/QtCore -I$qt5_incdir/QtGui -I$qt5_incdir/QtWidgets -I$qt5_incdir/QtNetwork -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13351     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13352     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13354     if test "$USING_X11" = TRUE; then
13355         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
13356     fi
13358     AC_LANG_PUSH([C++])
13359     save_CXXFLAGS=$CXXFLAGS
13360     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
13361     AC_MSG_CHECKING([whether KDE is >= 5.0])
13362        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13363 #include <kcoreaddons_version.h>
13365 int main(int argc, char **argv) {
13366        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
13367        else return 1;
13369        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13370     CXXFLAGS=$save_CXXFLAGS
13371     AC_LANG_POP([C++])
13373 AC_SUBST(KF5_CFLAGS)
13374 AC_SUBST(KF5_LIBS)
13376 dnl ===================================================================
13377 dnl KF6 Integration
13378 dnl ===================================================================
13380 KF6_CFLAGS=""
13381 KF6_LIBS=""
13382 if test \( "$test_kf6" = "yes" -a "$ENABLE_KF6" = "TRUE" \)
13383 then
13384     if test "$OS" = "HAIKU"; then
13385         haiku_arch="`echo $RTL_ARCH | tr X x`"
13386         kf6_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13387         kf6_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13388     fi
13390     kf6_incdirs="$KF6INC /usr/include $kf6_haiku_incdirs $x_includes"
13391     kf6_libdirs="$KF6LIB /usr/lib /usr/lib/kf6 /usr/lib/kf6/devel $kf6_haiku_libdirs $x_libraries"
13392     if test -n "$supports_multilib"; then
13393         kf6_libdirs="$kf6_libdirs /usr/lib64 /usr/lib64/kf6 /usr/lib64/kf6/devel"
13394     fi
13396     kf6_test_include="KF6/KIOFileWidgets/KFileWidget"
13397     kf6_test_library="libKF6KIOFileWidgets.so"
13398     kf6_libdirs="$qt6_libdir $kf6_libdirs"
13400     dnl Check for KF6 headers
13401     AC_MSG_CHECKING([for KF6 headers])
13402     kf6_incdir="no"
13403     for kf6_check in $kf6_incdirs; do
13404         if test -r "$kf6_check/$kf6_test_include"; then
13405             kf6_incdir="$kf6_check/KF6"
13406             break
13407         fi
13408     done
13409     AC_MSG_RESULT([$kf6_incdir])
13410     if test "x$kf6_incdir" = "xno"; then
13411         AC_MSG_ERROR([KF6 headers not found.  Please specify the root of your KF6 installation by exporting KF6DIR before running "configure".])
13412     fi
13414     dnl Check for KF6 libraries
13415     AC_MSG_CHECKING([for KF6 libraries])
13416     kf6_libdir="no"
13417     for kf6_check in $kf6_libdirs; do
13418         if test -r "$kf6_check/$kf6_test_library"; then
13419             kf6_libdir="$kf6_check"
13420             break
13421         fi
13422     done
13424     AC_MSG_RESULT([$kf6_libdir])
13425     if test "x$kf6_libdir" = "xno"; then
13426         AC_MSG_ERROR([KF6 libraries not found.  Please specify the root of your KF6 installation by exporting KF6DIR before running "configure".])
13427     fi
13429     KF6_CFLAGS="-I$kf6_incdir -I$kf6_incdir/KCoreAddons -I$kf6_incdir/KI18n -I$kf6_incdir/KConfigCore -I$kf6_incdir/KWindowSystem -I$kf6_incdir/KIO -I$kf6_incdir/KIOCore -I$kf6_incdir/KIOWidgets -I$kf6_incdir/KIOFileWidgets -I$qt6_incdir -I$qt6_incdir/QtCore -I$qt6_incdir/QtGui -I$qt6_incdir/QtWidgets -I$qt6_incdir/QtNetwork -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13430     KF6_LIBS="-L$kf6_libdir -lKF6CoreAddons -lKF6I18n -lKF6ConfigCore -lKF6WindowSystem -lKF6KIOCore -lKF6KIOWidgets -lKF6KIOFileWidgets -L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
13431     KF6_CFLAGS=$(printf '%s' "$KF6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13433     AC_LANG_PUSH([C++])
13434     save_CXXFLAGS=$CXXFLAGS
13435     CXXFLAGS="$CXXFLAGS $KF6_CFLAGS"
13436     dnl KF6 development version as of 2023-06 uses version number 5.240
13437     AC_MSG_CHECKING([whether KDE is >= 5.240])
13438        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13439 #include <kcoreaddons_version.h>
13441 int main(int argc, char **argv) {
13442        if (KCOREADDONS_VERSION_MAJOR == 6 || (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 240)) return 0;
13443        else return 1;
13445        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13446     CXXFLAGS=$save_CXXFLAGS
13447     AC_LANG_POP([C++])
13449 AC_SUBST(KF6_CFLAGS)
13450 AC_SUBST(KF6_LIBS)
13452 dnl ===================================================================
13453 dnl Test whether to include Evolution 2 support
13454 dnl ===================================================================
13455 AC_MSG_CHECKING([whether to enable evolution 2 support])
13456 if test "$enable_evolution2" = yes; then
13457     AC_MSG_RESULT([yes])
13458     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
13459     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13460     FilterLibs "${GOBJECT_LIBS}"
13461     GOBJECT_LIBS="${filteredlibs}"
13462     ENABLE_EVOAB2="TRUE"
13463 else
13464     AC_MSG_RESULT([no])
13466 AC_SUBST(ENABLE_EVOAB2)
13467 AC_SUBST(GOBJECT_CFLAGS)
13468 AC_SUBST(GOBJECT_LIBS)
13470 dnl ===================================================================
13471 dnl Test which themes to include
13472 dnl ===================================================================
13473 AC_MSG_CHECKING([which themes to include])
13474 # if none given use default subset of available themes
13475 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
13476     with_theme="breeze breeze_dark breeze_dark_svg breeze_svg colibre colibre_svg colibre_dark colibre_dark_svg elementary elementary_svg karasa_jaga karasa_jaga_svg sifr sifr_svg sifr_dark sifr_dark_svg sukapura sukapura_dark sukapura_dark_svg sukapura_svg"
13479 WITH_THEMES=""
13480 if test "x$with_theme" != "xno"; then
13481     for theme in $with_theme; do
13482         case $theme in
13483         breeze|breeze_dark|breeze_dark_svg|breeze_svg|colibre|colibre_svg|colibre_dark|colibre_dark_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg|sifr|sifr_svg|sifr_dark|sifr_dark_svg|sukapura|sukapura_dark|sukapura_dark_svg|sukapura_svg) real_theme="$theme" ;;
13484         default) real_theme=colibre ;;
13485         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
13486         esac
13487         WITH_THEMES=`echo "$WITH_THEMES $real_theme"|tr '\ ' '\n'|sort|uniq|tr '\n' '\ '`
13488     done
13490 AC_MSG_RESULT([$WITH_THEMES])
13491 AC_SUBST([WITH_THEMES])
13492 # FIXME: remove this, and the convenience default->colibre remapping after a grace period
13493 for theme in $with_theme; do
13494     case $theme in
13495     default) AC_MSG_WARN([--with-theme=default is deprecated and will be removed, use --with-theme=colibre]) ;;
13496     *) ;;
13497     esac
13498 done
13500 ###############################################################################
13501 # Extensions checking
13502 ###############################################################################
13503 AC_MSG_CHECKING([for extensions integration])
13504 if test "x$enable_extension_integration" != "xno"; then
13505     WITH_EXTENSION_INTEGRATION=TRUE
13506     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
13507     AC_MSG_RESULT([yes, use integration])
13508 else
13509     WITH_EXTENSION_INTEGRATION=
13510     AC_MSG_RESULT([no, do not integrate])
13512 AC_SUBST(WITH_EXTENSION_INTEGRATION)
13514 dnl Should any extra extensions be included?
13515 dnl There are standalone tests for each of these below.
13516 WITH_EXTRA_EXTENSIONS=
13517 AC_SUBST([WITH_EXTRA_EXTENSIONS])
13519 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
13520 if test "x$with_java" != "xno"; then
13521     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
13524 AC_MSG_CHECKING([whether to build opens___.ttf])
13525 if test "$enable_build_opensymbol" = "yes"; then
13526     AC_MSG_RESULT([yes])
13527     AC_PATH_PROG(FONTFORGE, fontforge)
13528     if test -z "$FONTFORGE"; then
13529         AC_MSG_ERROR([fontforge not installed])
13530     fi
13531 else
13532     AC_MSG_RESULT([no])
13533     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
13535 AC_SUBST(FONTFORGE)
13537 dnl ===================================================================
13538 dnl Test whether to include fonts
13539 dnl ===================================================================
13540 AC_MSG_CHECKING([whether to include third-party fonts])
13541 if test "$with_fonts" != "no"; then
13542     AC_MSG_RESULT([yes])
13543     WITH_FONTS=TRUE
13544     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
13545     AC_DEFINE(HAVE_MORE_FONTS)
13546 else
13547     AC_MSG_RESULT([no])
13548     WITH_FONTS=
13549     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
13551 AC_SUBST(WITH_FONTS)
13554 dnl ===================================================================
13555 dnl Test whether to enable online update service
13556 dnl ===================================================================
13557 AC_MSG_CHECKING([whether to enable online update])
13558 ENABLE_ONLINE_UPDATE=
13559 ENABLE_ONLINE_UPDATE_MAR=
13560 UPDATE_CONFIG=
13561 if test "$enable_online_update" = ""; then
13562     AC_MSG_RESULT([no])
13563 else
13564     if test "$enable_online_update" = "mar"; then
13565         AC_MSG_RESULT([yes - MAR-based online update])
13566         ENABLE_ONLINE_UPDATE_MAR="TRUE"
13567         if test "$with_update_config" = ""; then
13568             AC_MSG_ERROR([mar based online updater needs an update config specified with "with-update-config])
13569         fi
13570         UPDATE_CONFIG="$with_update_config"
13571         AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
13572     elif test "$enable_online_update" = "yes"; then
13573         AC_MSG_RESULT([yes])
13574         ENABLE_ONLINE_UPDATE="TRUE"
13575     else
13576         AC_MSG_RESULT([no])
13577     fi
13579 AC_SUBST(ENABLE_ONLINE_UPDATE)
13580 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
13581 AC_SUBST(UPDATE_CONFIG)
13584 PRIVACY_POLICY_URL="$with_privacy_policy_url"
13585 if test "$ENABLE_ONLINE_UPDATE" = TRUE -o "$ENABLE_BREAKPAD" = "TRUE"; then
13586     if test "x$with_privacy_policy_url" = "xundefined"; then
13587         AC_MSG_FAILURE([online update or breakpad/crashreporting are enabled, but no --with-privacy-policy-url=... was provided])
13588     fi
13590 AC_SUBST(PRIVACY_POLICY_URL)
13591 dnl ===================================================================
13592 dnl Test whether we need bzip2
13593 dnl ===================================================================
13594 SYSTEM_BZIP2=
13595 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE"; then
13596     AC_MSG_CHECKING([whether to use system bzip2])
13597     if test "$with_system_bzip2" = yes; then
13598         SYSTEM_BZIP2=TRUE
13599         AC_MSG_RESULT([yes])
13600         PKG_CHECK_MODULES(BZIP2, bzip2)
13601         FilterLibs "${BZIP2_LIBS}"
13602         BZIP2_LIBS="${filteredlibs}"
13603     else
13604         AC_MSG_RESULT([no])
13605         BUILD_TYPE="$BUILD_TYPE BZIP2"
13606     fi
13608 AC_SUBST(SYSTEM_BZIP2)
13609 AC_SUBST(BZIP2_CFLAGS)
13610 AC_SUBST(BZIP2_LIBS)
13612 dnl ===================================================================
13613 dnl Test whether to enable extension update
13614 dnl ===================================================================
13615 AC_MSG_CHECKING([whether to enable extension update])
13616 ENABLE_EXTENSION_UPDATE=
13617 if test "x$enable_extension_update" = "xno"; then
13618     AC_MSG_RESULT([no])
13619 else
13620     AC_MSG_RESULT([yes])
13621     ENABLE_EXTENSION_UPDATE="TRUE"
13622     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
13623     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
13625 AC_SUBST(ENABLE_EXTENSION_UPDATE)
13628 dnl ===================================================================
13629 dnl Test whether to create MSI with LIMITUI=1 (silent install)
13630 dnl ===================================================================
13631 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
13632 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
13633     AC_MSG_RESULT([no])
13634     ENABLE_SILENT_MSI=
13635 else
13636     AC_MSG_RESULT([yes])
13637     ENABLE_SILENT_MSI=TRUE
13638     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
13640 AC_SUBST(ENABLE_SILENT_MSI)
13642 dnl ===================================================================
13643 dnl Check for WiX tools.
13644 dnl ===================================================================
13645 if test "$enable_wix" = "" -o "enable_wix" = "no"; then
13646     AC_MSG_RESULT([no])
13647     ENABLE_WIX=
13648 else
13649     AC_MSG_RESULT([yes])
13650     if ! which candle  >/dev/null 2>&1; then
13651       AC_MSG_ERROR([WiX requested but WiX toolset not found.])
13652     fi
13653     ENABLE_WIX=TRUE
13655 AC_SUBST(ENABLE_SILENT_MSI)
13657 AC_MSG_CHECKING([whether and how to use Xinerama])
13658 if test "$USING_X11" = TRUE; then
13659     if test "$x_libraries" = "default_x_libraries"; then
13660         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
13661         if test "x$XINERAMALIB" = x; then
13662            XINERAMALIB="/usr/lib"
13663         fi
13664     else
13665         XINERAMALIB="$x_libraries"
13666     fi
13667     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13668         # we have both versions, let the user decide but use the dynamic one
13669         # per default
13670         USE_XINERAMA=TRUE
13671         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13672             XINERAMA_LINK=dynamic
13673         else
13674             XINERAMA_LINK=static
13675         fi
13676     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13677         # we have only the dynamic version
13678         USE_XINERAMA=TRUE
13679         XINERAMA_LINK=dynamic
13680     elif test -e "$XINERAMALIB/libXinerama.a"; then
13681         # static version
13682         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13683             USE_XINERAMA=TRUE
13684             XINERAMA_LINK=static
13685         else
13686             USE_XINERAMA=
13687             XINERAMA_LINK=none
13688         fi
13689     else
13690         # no Xinerama
13691         USE_XINERAMA=
13692         XINERAMA_LINK=none
13693     fi
13694     if test "$USE_XINERAMA" = "TRUE"; then
13695         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13696         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13697             [AC_MSG_ERROR(Xinerama header not found.)], [])
13698         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13699         if test "x$XEXTLIB" = x; then
13700            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13701         fi
13702         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13703         if test "$_os" = "FreeBSD"; then
13704             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13705         fi
13706         if test "$_os" = "Linux"; then
13707             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13708         fi
13709         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13710             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13711     else
13712         AC_MSG_ERROR([libXinerama not found or wrong architecture.])
13713     fi
13714 else
13715     USE_XINERAMA=
13716     XINERAMA_LINK=none
13717     AC_MSG_RESULT([no])
13719 AC_SUBST(XINERAMA_LINK)
13721 AC_MSG_CHECKING([whether to use non-standard RGBA32 cairo pixel order])
13722 if test -z "$enable_cairo_rgba" -a "$_os" = "Android"; then
13723     enable_cairo_rgba=yes
13725 if test "$enable_cairo_rgba" = yes; then
13726     AC_DEFINE(ENABLE_CAIRO_RGBA)
13727     ENABLE_CAIRO_RGBA=TRUE
13728     AC_MSG_RESULT([yes])
13729 else
13730     ENABLE_CAIRO_RGBA=
13731     AC_MSG_RESULT([no])
13733 AC_SUBST(ENABLE_CAIRO_RGBA)
13735 dnl ===================================================================
13736 dnl Test whether to build cairo or rely on the system version
13737 dnl ===================================================================
13739 if test "$test_cairo" = "yes"; then
13740     AC_MSG_CHECKING([whether to use the system cairo])
13742     : ${with_system_cairo:=$with_system_libs}
13743     if test "$with_system_cairo" = "yes" -a "$enable_cairo_rgba" != "yes"; then
13744         SYSTEM_CAIRO=TRUE
13745         AC_MSG_RESULT([yes])
13747         PKG_CHECK_MODULES( CAIRO, cairo >= 1.12.0 )
13748         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13749         FilterLibs "${CAIRO_LIBS}"
13750         CAIRO_LIBS="${filteredlibs}"
13752         if test "$test_xrender" = "yes"; then
13753             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13754             AC_LANG_PUSH([C])
13755             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13756 #ifdef PictStandardA8
13757 #else
13758       return fail;
13759 #endif
13760 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13762             AC_LANG_POP([C])
13763         fi
13764     else
13765         AC_MSG_RESULT([no])
13766         BUILD_TYPE="$BUILD_TYPE CAIRO"
13767     fi
13769     if test "$enable_cairo_canvas" != no; then
13770         AC_DEFINE(ENABLE_CAIRO_CANVAS)
13771         ENABLE_CAIRO_CANVAS=TRUE
13772     fi
13775 AC_SUBST(CAIRO_CFLAGS)
13776 AC_SUBST(CAIRO_LIBS)
13777 AC_SUBST(ENABLE_CAIRO_CANVAS)
13778 AC_SUBST(SYSTEM_CAIRO)
13780 dnl ===================================================================
13781 dnl Test whether to use avahi
13782 dnl ===================================================================
13783 if test "$_os" = "WINNT"; then
13784     # Windows uses bundled mDNSResponder
13785     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13786 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13787     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13788                       [ENABLE_AVAHI="TRUE"])
13789     AC_DEFINE(HAVE_FEATURE_AVAHI)
13790     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13791     FilterLibs "${AVAHI_LIBS}"
13792     AVAHI_LIBS="${filteredlibs}"
13795 AC_SUBST(ENABLE_AVAHI)
13796 AC_SUBST(AVAHI_CFLAGS)
13797 AC_SUBST(AVAHI_LIBS)
13799 dnl ===================================================================
13800 dnl Test whether to use liblangtag
13801 dnl ===================================================================
13802 SYSTEM_LIBLANGTAG=
13803 AC_MSG_CHECKING([whether to use system liblangtag])
13804 if test "$with_system_liblangtag" = yes; then
13805     SYSTEM_LIBLANGTAG=TRUE
13806     AC_MSG_RESULT([yes])
13807     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
13808     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
13809     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
13810     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13811     FilterLibs "${LIBLANGTAG_LIBS}"
13812     LIBLANGTAG_LIBS="${filteredlibs}"
13813 else
13814     SYSTEM_LIBLANGTAG=
13815     AC_MSG_RESULT([no])
13816     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
13817     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
13818     if test "$COM" = "MSC"; then
13819         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
13820     else
13821         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
13822     fi
13824 AC_SUBST(SYSTEM_LIBLANGTAG)
13825 AC_SUBST(LIBLANGTAG_CFLAGS)
13826 AC_SUBST(LIBLANGTAG_LIBS)
13828 dnl ===================================================================
13829 dnl Test whether to build libpng or rely on the system version
13830 dnl ===================================================================
13832 LIBPNG_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/libpng"
13833 LIBPNG_LIBS_internal="-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"
13834 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng])
13836 dnl ===================================================================
13837 dnl Test whether to build libtiff or rely on the system version
13838 dnl ===================================================================
13840 libo_CHECK_SYSTEM_MODULE([libtiff],[LIBTIFF],[libtiff-4])
13842 dnl ===================================================================
13843 dnl Test whether to build libwebp or rely on the system version
13844 dnl ===================================================================
13846 libo_CHECK_SYSTEM_MODULE([libwebp],[LIBWEBP],[libwebp])
13848 dnl ===================================================================
13849 dnl Check for runtime JVM search path
13850 dnl ===================================================================
13851 if test "$ENABLE_JAVA" != ""; then
13852     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
13853     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
13854         AC_MSG_RESULT([yes])
13855         if ! test -d "$with_jvm_path"; then
13856             AC_MSG_ERROR(["$with_jvm_path" not a directory])
13857         fi
13858         if ! test -d "$with_jvm_path"jvm; then
13859             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
13860         fi
13861         JVM_ONE_PATH_CHECK="$with_jvm_path"
13862         AC_SUBST(JVM_ONE_PATH_CHECK)
13863     else
13864         AC_MSG_RESULT([no])
13865     fi
13868 dnl ===================================================================
13869 dnl Test for the presence of Ant and that it works
13870 dnl ===================================================================
13872 # java takes the encoding from LC_ALL, and since autoconf forces it to C it
13873 # breaks filename decoding, so for the ant section, set it to LANG
13874 LC_ALL=$LANG
13875 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
13876     ANT_HOME=; export ANT_HOME
13877     WITH_ANT_HOME=; export WITH_ANT_HOME
13878     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
13879         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
13880             if test "$_os" = "WINNT"; then
13881                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
13882             else
13883                 with_ant_home="$LODE_HOME/opt/ant"
13884             fi
13885         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
13886             with_ant_home="$LODE_HOME/opt/ant"
13887         fi
13888     fi
13889     if test -z "$with_ant_home"; then
13890         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
13891     else
13892         if test "$_os" = "WINNT"; then
13893             # AC_PATH_PROGS needs unix path
13894             with_ant_home=`cygpath -u "$with_ant_home"`
13895         fi
13896         AbsolutePath "$with_ant_home"
13897         with_ant_home=$absolute_path
13898         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
13899         WITH_ANT_HOME=$with_ant_home
13900         ANT_HOME=$with_ant_home
13901     fi
13903     if test -z "$ANT"; then
13904         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
13905     else
13906         # resolve relative or absolute symlink
13907         while test -h "$ANT"; do
13908             a_cwd=`pwd`
13909             a_basename=`basename "$ANT"`
13910             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
13911             cd "`dirname "$ANT"`"
13912             cd "`dirname "$a_script"`"
13913             ANT="`pwd`"/"`basename "$a_script"`"
13914             cd "$a_cwd"
13915         done
13917         AC_MSG_CHECKING([if $ANT works])
13918         mkdir -p conftest.dir
13919         a_cwd=$(pwd)
13920         cd conftest.dir
13921         cat > conftest.java << EOF
13922         public class conftest {
13923             int testmethod(int a, int b) {
13924                     return a + b;
13925             }
13926         }
13929         cat > conftest.xml << EOF
13930         <project name="conftest" default="conftest">
13931         <target name="conftest">
13932             <javac srcdir="." includes="conftest.java">
13933             </javac>
13934         </target>
13935         </project>
13938         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
13939         if test $? = 0 -a -f ./conftest.class; then
13940             AC_MSG_RESULT([Ant works])
13941             if test -z "$WITH_ANT_HOME"; then
13942                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
13943                 if test -z "$ANT_HOME"; then
13944                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
13945                 fi
13946             else
13947                 ANT_HOME="$WITH_ANT_HOME"
13948             fi
13949         else
13950             echo "configure: Ant test failed" >&5
13951             cat conftest.java >&5
13952             cat conftest.xml >&5
13953             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
13954         fi
13955         cd "$a_cwd"
13956         rm -fr conftest.dir
13957     fi
13958     if test -z "$ANT_HOME"; then
13959         ANT_HOME="NO_ANT_HOME"
13960     else
13961         PathFormat "$ANT_HOME"
13962         ANT_HOME="$formatted_path"
13963         PathFormat "$ANT"
13964         ANT="$formatted_path"
13965     fi
13967     dnl Checking for ant.jar
13968     if test "$ANT_HOME" != "NO_ANT_HOME"; then
13969         AC_MSG_CHECKING([Ant lib directory])
13970         if test -f $ANT_HOME/lib/ant.jar; then
13971             ANT_LIB="$ANT_HOME/lib"
13972         else
13973             if test -f $ANT_HOME/ant.jar; then
13974                 ANT_LIB="$ANT_HOME"
13975             else
13976                 if test -f /usr/share/java/ant.jar; then
13977                     ANT_LIB=/usr/share/java
13978                 else
13979                     if test -f /usr/share/ant-core/lib/ant.jar; then
13980                         ANT_LIB=/usr/share/ant-core/lib
13981                     else
13982                         if test -f $ANT_HOME/lib/ant/ant.jar; then
13983                             ANT_LIB="$ANT_HOME/lib/ant"
13984                         else
13985                             if test -f /usr/share/lib/ant/ant.jar; then
13986                                 ANT_LIB=/usr/share/lib/ant
13987                             else
13988                                 AC_MSG_ERROR([Ant libraries not found!])
13989                             fi
13990                         fi
13991                     fi
13992                 fi
13993             fi
13994         fi
13995         PathFormat "$ANT_LIB"
13996         ANT_LIB="$formatted_path"
13997         AC_MSG_RESULT([Ant lib directory found.])
13998     fi
14000     ant_minver=1.6.0
14001     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
14003     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
14004     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
14005     ant_version_major=`echo $ant_version | cut -d. -f1`
14006     ant_version_minor=`echo $ant_version | cut -d. -f2`
14007     echo "configure: ant_version $ant_version " >&5
14008     echo "configure: ant_version_major $ant_version_major " >&5
14009     echo "configure: ant_version_minor $ant_version_minor " >&5
14010     if test "$ant_version_major" -ge "2"; then
14011         AC_MSG_RESULT([yes, $ant_version])
14012     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
14013         AC_MSG_RESULT([yes, $ant_version])
14014     else
14015         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
14016     fi
14018     rm -f conftest* core core.* *.core
14020 AC_SUBST(ANT)
14021 AC_SUBST(ANT_HOME)
14022 AC_SUBST(ANT_LIB)
14024 OOO_JUNIT_JAR=
14025 HAMCREST_JAR=
14026 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
14027     AC_MSG_CHECKING([for JUnit 4])
14028     if test "$with_junit" = "yes"; then
14029         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
14030             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
14031         elif test -e /usr/share/java/junit4.jar; then
14032             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
14033         else
14034            if test -e /usr/share/lib/java/junit.jar; then
14035               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
14036            else
14037               OOO_JUNIT_JAR=/usr/share/java/junit.jar
14038            fi
14039         fi
14040     else
14041         OOO_JUNIT_JAR=$with_junit
14042     fi
14043     if test "$_os" = "WINNT"; then
14044         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
14045     fi
14046     printf 'import org.junit.Before;' > conftest.java
14047     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
14048         AC_MSG_RESULT([$OOO_JUNIT_JAR])
14049     else
14050         AC_MSG_ERROR(
14051 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
14052  specify its pathname via --with-junit=..., or disable it via --without-junit])
14053     fi
14054     rm -f conftest.class conftest.java
14055     if test $OOO_JUNIT_JAR != ""; then
14056         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
14057     fi
14059     AC_MSG_CHECKING([for included Hamcrest])
14060     printf 'import org.hamcrest.BaseDescription;' > conftest.java
14061     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
14062         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
14063     else
14064         AC_MSG_RESULT([Not included])
14065         AC_MSG_CHECKING([for standalone hamcrest jar.])
14066         if test "$with_hamcrest" = "yes"; then
14067             if test -e /usr/share/lib/java/hamcrest.jar; then
14068                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
14069             elif test -e /usr/share/java/hamcrest/core.jar; then
14070                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
14071             elif test -e /usr/share/java/hamcrest/hamcrest.jar; then
14072                 HAMCREST_JAR=/usr/share/java/hamcrest/hamcrest.jar
14073             else
14074                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
14075             fi
14076         else
14077             HAMCREST_JAR=$with_hamcrest
14078         fi
14079         if test "$_os" = "WINNT"; then
14080             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
14081         fi
14082         if "$JAVACOMPILER" -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
14083             AC_MSG_RESULT([$HAMCREST_JAR])
14084         else
14085             AC_MSG_ERROR([junit does not contain hamcrest; please use a junit jar that includes hamcrest, install a hamcrest jar in the default location (/usr/share/java),
14086                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
14087         fi
14088     fi
14089     rm -f conftest.class conftest.java
14091 AC_SUBST(OOO_JUNIT_JAR)
14092 AC_SUBST(HAMCREST_JAR)
14093 # set back LC_ALL to C after the java related tests...
14094 LC_ALL=C
14096 AC_SUBST(SCPDEFS)
14099 # check for wget and curl
14101 WGET=
14102 CURL=
14104 if test "$enable_fetch_external" != "no"; then
14106 CURL=`which curl 2>/dev/null`
14108 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
14109     # wget new enough?
14110     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
14111     if test $? -eq 0; then
14112         WGET=$i
14113         break
14114     fi
14115 done
14117 if test -z "$WGET" -a -z "$CURL"; then
14118     AC_MSG_ERROR([neither wget nor curl found!])
14123 AC_SUBST(WGET)
14124 AC_SUBST(CURL)
14127 # check for sha256sum
14129 SHA256SUM=
14131 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
14132     eval "$i -a 256 --version" > /dev/null 2>&1
14133     ret=$?
14134     if test $ret -eq 0; then
14135         SHA256SUM="$i -a 256"
14136         break
14137     fi
14138 done
14140 if test -z "$SHA256SUM"; then
14141     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
14142         eval "$i --version" > /dev/null 2>&1
14143         ret=$?
14144         if test $ret -eq 0; then
14145             SHA256SUM=$i
14146             break
14147         fi
14148     done
14151 if test -z "$SHA256SUM"; then
14152     AC_MSG_ERROR([no sha256sum found!])
14155 AC_SUBST(SHA256SUM)
14157 dnl ===================================================================
14158 dnl Dealing with l10n options
14159 dnl ===================================================================
14160 AC_MSG_CHECKING([which languages to be built])
14161 # get list of all languages
14162 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
14163 # the sed command does the following:
14164 #   + if a line ends with a backslash, append the next line to it
14165 #   + adds " on the beginning of the value (after =)
14166 #   + adds " at the end of the value
14167 #   + removes en-US; we want to put it on the beginning
14168 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
14169 [eval $(sed -e :a -e '/\\$/N; s/\\\n//; ta' -n -e 's/=/="/;s/\([^\\]\)$/\1"/;s/en-US//;/^completelangiso/p' $SRC_ROOT/solenv/inc/langlist.mk)]
14170 ALL_LANGS="en-US $completelangiso"
14171 # check the configured localizations
14172 WITH_LANG="$with_lang"
14174 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
14175 # (Norwegian is "nb" and "nn".)
14176 if test "$WITH_LANG" = "no"; then
14177     WITH_LANG=
14180 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
14181     AC_MSG_RESULT([en-US])
14182 else
14183     AC_MSG_RESULT([$WITH_LANG])
14184     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
14185     if test -z "$MSGFMT"; then
14186         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
14187             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
14188         elif test -x "/opt/lo/bin/msgfmt"; then
14189             MSGFMT="/opt/lo/bin/msgfmt"
14190         else
14191             AC_CHECK_PROGS(MSGFMT, [msgfmt])
14192             if test -z "$MSGFMT"; then
14193                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
14194             fi
14195         fi
14196     fi
14197     if test -z "$MSGUNIQ"; then
14198         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
14199             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
14200         elif test -x "/opt/lo/bin/msguniq"; then
14201             MSGUNIQ="/opt/lo/bin/msguniq"
14202         else
14203             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
14204             if test -z "$MSGUNIQ"; then
14205                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
14206             fi
14207         fi
14208     fi
14210 AC_SUBST(MSGFMT)
14211 AC_SUBST(MSGUNIQ)
14212 # check that the list is valid
14213 for lang in $WITH_LANG; do
14214     test "$lang" = "ALL" && continue
14215     # need to check for the exact string, so add space before and after the list of all languages
14216     for vl in $ALL_LANGS; do
14217         if test "$vl" = "$lang"; then
14218            break
14219         fi
14220     done
14221     if test "$vl" != "$lang"; then
14222         # if you're reading this - you prolly quoted your languages remove the quotes ...
14223         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
14224     fi
14225 done
14226 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
14227     echo $WITH_LANG | grep -q en-US
14228     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
14230 # list with substituted ALL
14231 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
14232 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
14233 test "$WITH_LANG" = "en-US" && WITH_LANG=
14234 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
14235     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
14236     ALL_LANGS=`echo $ALL_LANGS qtz`
14238 AC_SUBST(ALL_LANGS)
14239 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
14240 AC_SUBST(WITH_LANG)
14241 AC_SUBST(WITH_LANG_LIST)
14242 AC_SUBST(GIT_NEEDED_SUBMODULES)
14244 WITH_POOR_HELP_LOCALIZATIONS=
14245 if test -d "$SRC_ROOT/translations/source"; then
14246     for l in `ls -1 $SRC_ROOT/translations/source`; do
14247         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
14248             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
14249         fi
14250     done
14252 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
14254 if test -n "$with_locales" -a "$with_locales" != ALL; then
14255     WITH_LOCALES="$with_locales"
14257     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
14258     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
14259     # config_host/config_locales.h.in
14260     for locale in $WITH_LOCALES; do
14261         lang=${locale%_*}
14263         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
14265         case $lang in
14266         hi|mr*ne)
14267             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
14268             ;;
14269         bg|ru)
14270             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
14271             ;;
14272         esac
14273     done
14274 else
14275     AC_DEFINE(WITH_LOCALE_ALL)
14277 AC_SUBST(WITH_LOCALES)
14279 dnl git submodule update --reference
14280 dnl ===================================================================
14281 if test -n "${GIT_REFERENCE_SRC}"; then
14282     for repo in ${GIT_NEEDED_SUBMODULES}; do
14283         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
14284             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
14285         fi
14286     done
14288 AC_SUBST(GIT_REFERENCE_SRC)
14290 dnl git submodules linked dirs
14291 dnl ===================================================================
14292 if test -n "${GIT_LINK_SRC}"; then
14293     for repo in ${GIT_NEEDED_SUBMODULES}; do
14294         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
14295             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
14296         fi
14297     done
14299 AC_SUBST(GIT_LINK_SRC)
14301 dnl branding
14302 dnl ===================================================================
14303 AC_MSG_CHECKING([for alternative branding images directory])
14304 # initialize mapped arrays
14305 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
14306 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
14308 if test -z "$with_branding" -o "$with_branding" = "no"; then
14309     AC_MSG_RESULT([none])
14310     DEFAULT_BRAND_IMAGES="$brand_files"
14311 else
14312     if ! test -d $with_branding ; then
14313         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
14314     else
14315         AC_MSG_RESULT([$with_branding])
14316         CUSTOM_BRAND_DIR="$with_branding"
14317         for lfile in $brand_files
14318         do
14319             if ! test -f $with_branding/$lfile ; then
14320                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
14321                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
14322             else
14323                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
14324             fi
14325         done
14326         check_for_progress="yes"
14327     fi
14329 AC_SUBST([BRAND_INTRO_IMAGES])
14330 AC_SUBST([CUSTOM_BRAND_DIR])
14331 AC_SUBST([CUSTOM_BRAND_IMAGES])
14332 AC_SUBST([DEFAULT_BRAND_IMAGES])
14335 AC_MSG_CHECKING([for 'intro' progress settings])
14336 PROGRESSBARCOLOR=
14337 PROGRESSSIZE=
14338 PROGRESSPOSITION=
14339 PROGRESSFRAMECOLOR=
14340 PROGRESSTEXTCOLOR=
14341 PROGRESSTEXTBASELINE=
14343 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
14344     source "$with_branding/progress.conf"
14345     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
14346 else
14347     AC_MSG_RESULT([none])
14350 AC_SUBST(PROGRESSBARCOLOR)
14351 AC_SUBST(PROGRESSSIZE)
14352 AC_SUBST(PROGRESSPOSITION)
14353 AC_SUBST(PROGRESSFRAMECOLOR)
14354 AC_SUBST(PROGRESSTEXTCOLOR)
14355 AC_SUBST(PROGRESSTEXTBASELINE)
14358 dnl ===================================================================
14359 dnl Custom build version
14360 dnl ===================================================================
14361 AC_MSG_CHECKING([for extra build ID])
14362 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
14363     EXTRA_BUILDID="$with_extra_buildid"
14365 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
14366 if test -n "$EXTRA_BUILDID" ; then
14367     AC_MSG_RESULT([$EXTRA_BUILDID])
14368 else
14369     AC_MSG_RESULT([not set])
14371 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
14373 OOO_VENDOR=
14374 AC_MSG_CHECKING([for vendor])
14375 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
14376     OOO_VENDOR="$USERNAME"
14378     if test -z "$OOO_VENDOR"; then
14379         OOO_VENDOR="$USER"
14380     fi
14382     if test -z "$OOO_VENDOR"; then
14383         OOO_VENDOR="`id -u -n`"
14384     fi
14386     AC_MSG_RESULT([not set, using $OOO_VENDOR])
14387 else
14388     OOO_VENDOR="$with_vendor"
14389     AC_MSG_RESULT([$OOO_VENDOR])
14391 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
14392 AC_SUBST(OOO_VENDOR)
14394 if test "$_os" = "Android" ; then
14395     ANDROID_PACKAGE_NAME=
14396     AC_MSG_CHECKING([for Android package name])
14397     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
14398         if test -n "$ENABLE_DEBUG"; then
14399             # Default to the package name that makes ndk-gdb happy.
14400             ANDROID_PACKAGE_NAME="org.libreoffice"
14401         else
14402             ANDROID_PACKAGE_NAME="org.example.libreoffice"
14403         fi
14405         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
14406     else
14407         ANDROID_PACKAGE_NAME="$with_android_package_name"
14408         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
14409     fi
14410     AC_SUBST(ANDROID_PACKAGE_NAME)
14413 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
14414 if test "$with_compat_oowrappers" = "yes"; then
14415     WITH_COMPAT_OOWRAPPERS=TRUE
14416     AC_MSG_RESULT(yes)
14417 else
14418     WITH_COMPAT_OOWRAPPERS=
14419     AC_MSG_RESULT(no)
14421 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
14423 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{print tolower($0)}'`
14424 AC_MSG_CHECKING([for install dirname])
14425 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
14426     INSTALLDIRNAME="$with_install_dirname"
14428 AC_MSG_RESULT([$INSTALLDIRNAME])
14429 AC_SUBST(INSTALLDIRNAME)
14431 AC_MSG_CHECKING([for prefix])
14432 test "x$prefix" = xNONE && prefix=$ac_default_prefix
14433 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
14434 PREFIXDIR="$prefix"
14435 AC_MSG_RESULT([$PREFIXDIR])
14436 AC_SUBST(PREFIXDIR)
14438 LIBDIR=[$(eval echo $(eval echo $libdir))]
14439 AC_SUBST(LIBDIR)
14441 DATADIR=[$(eval echo $(eval echo $datadir))]
14442 AC_SUBST(DATADIR)
14444 MANDIR=[$(eval echo $(eval echo $mandir))]
14445 AC_SUBST(MANDIR)
14447 DOCDIR=[$(eval echo $(eval echo $docdir))]
14448 AC_SUBST(DOCDIR)
14450 BINDIR=[$(eval echo $(eval echo $bindir))]
14451 AC_SUBST(BINDIR)
14453 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
14454 AC_SUBST(INSTALLDIR)
14456 TESTINSTALLDIR="${BUILDDIR}/test-install"
14457 AC_SUBST(TESTINSTALLDIR)
14460 # ===================================================================
14461 # OAuth2 id and secrets
14462 # ===================================================================
14464 AC_MSG_CHECKING([for Google Drive client id and secret])
14465 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
14466     AC_MSG_RESULT([not set])
14467     GDRIVE_CLIENT_ID="\"\""
14468     GDRIVE_CLIENT_SECRET="\"\""
14469 else
14470     AC_MSG_RESULT([set])
14471     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
14472     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
14474 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
14475 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
14477 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
14478 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
14479     AC_MSG_RESULT([not set])
14480     ALFRESCO_CLOUD_CLIENT_ID="\"\""
14481     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
14482 else
14483     AC_MSG_RESULT([set])
14484     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
14485     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
14487 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
14488 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
14490 AC_MSG_CHECKING([for OneDrive client id and secret])
14491 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
14492     AC_MSG_RESULT([not set])
14493     ONEDRIVE_CLIENT_ID="\"\""
14494     ONEDRIVE_CLIENT_SECRET="\"\""
14495 else
14496     AC_MSG_RESULT([set])
14497     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
14498     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
14500 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
14501 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
14504 dnl ===================================================================
14505 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
14506 dnl --enable-dependency-tracking configure option
14507 dnl ===================================================================
14508 AC_MSG_CHECKING([whether to enable dependency tracking])
14509 if test "$enable_dependency_tracking" = "no"; then
14510     nodep=TRUE
14511     AC_MSG_RESULT([no])
14512 else
14513     AC_MSG_RESULT([yes])
14515 AC_SUBST(nodep)
14517 dnl ===================================================================
14518 dnl Number of CPUs to use during the build
14519 dnl ===================================================================
14520 AC_MSG_CHECKING([for number of processors to use])
14521 # plain --with-parallelism is just the default
14522 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
14523     if test "$with_parallelism" = "no"; then
14524         PARALLELISM=0
14525     else
14526         PARALLELISM=$with_parallelism
14527     fi
14528 else
14529     if test "$enable_icecream" = "yes"; then
14530         PARALLELISM="40"
14531     else
14532         case `uname -s` in
14534         Darwin|FreeBSD|NetBSD|OpenBSD)
14535             PARALLELISM=`sysctl -n hw.ncpu`
14536             ;;
14538         Linux)
14539             PARALLELISM=`getconf _NPROCESSORS_ONLN`
14540         ;;
14541         # what else than above does profit here *and* has /proc?
14542         *)
14543             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
14544             ;;
14545         esac
14547         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
14548         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
14549     fi
14552 if test $PARALLELISM -eq 0; then
14553     AC_MSG_RESULT([explicit make -j option needed])
14554 else
14555     AC_MSG_RESULT([$PARALLELISM])
14557 AC_SUBST(PARALLELISM)
14560 # Set up ILIB for MSVC build
14562 ILIB1=
14563 if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
14564     ILIB="."
14565     if test -n "$JAVA_HOME"; then
14566         ILIB="$ILIB;$JAVA_HOME/lib"
14567     fi
14568     ILIB1=-link
14569     PathFormat "${COMPATH}/lib/$WIN_HOST_ARCH"
14570     ILIB="$ILIB;$formatted_path"
14571     ILIB1="$ILIB1 -LIBPATH:$formatted_path"
14572     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14573     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14574     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
14575         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14576         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14577     fi
14578     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
14579     ucrtlibpath_formatted=$formatted_path
14580     ILIB="$ILIB;$ucrtlibpath_formatted"
14581     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
14582     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
14583         PathFormat "$DOTNET_FRAMEWORK_HOME/lib"
14584         ILIB="$ILIB;$formatted_path"
14585     else
14586         PathFormat "$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
14587         ILIB="$ILIB;$formatted_path"
14588     fi
14590     if test "$cross_compiling" != "yes"; then
14591         ILIB_FOR_BUILD="$ILIB"
14592     fi
14594 AC_SUBST(ILIB)
14595 AC_SUBST(ILIB_FOR_BUILD)
14597 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
14598 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
14599 dnl from consteval constructor initializing const variable",
14600 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
14601 dnl expression' with consteval constructor", <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
14602 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
14603 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'" (which should be
14604 dnl fixed since Clang 14), <https://developercommunity.visualstudio.com/t/1581879> "Bogus error
14605 dnl C7595 with consteval constructor in ternary expression (/std:c++latest)", or
14606 dnl <https://github.com/llvm/llvm-project/issues/54612> "C++20, consteval, anonymous union:
14607 dnl llvm/lib/IR/Instructions.cpp:1491: void llvm::StoreInst::AssertOK(): Assertion
14608 dnl `cast<PointerType>(getOperand(1)->getType())->isOpaqueOrPointeeTypeMatches(getOperand(0)->getType())
14609 dnl && "Ptr must be a pointer to Val type!"' failed." (which should be fixed since Clang 17):
14610 AC_LANG_PUSH([C++])
14611 save_CXX=$CXX
14612 if test "$COM" = MSC && test "$COM_IS_CLANG" != TRUE; then
14613     CXX="env LIB=$ILIB $CXX"
14615 save_CXXFLAGS=$CXXFLAGS
14616 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
14617 AC_RUN_IFELSE([AC_LANG_PROGRAM([
14618         struct S {
14619             consteval S() { i = 1; }
14620             int i = 0;
14621         };
14622         S const s;
14624         struct S1 { consteval S1(int) {} };
14625         struct S2 {
14626             S1 x;
14627             S2(): x(0) {}
14628         };
14630         struct S3 {
14631             consteval S3() {}
14632             union {
14633                 int a;
14634                 unsigned b = 0;
14635             };
14636         };
14637         void f() { S3(); }
14639         struct S4 { consteval S4() = default; };
14640         void f4(bool b) { b ? S4() : S4(); }
14642         struct S5 {
14643             consteval S5() { c = 0; }
14644             char * f() { return &c; }
14645             union {
14646                 char c;
14647                 int i;
14648             };
14649         };
14650         auto s5 = S5().f();
14651     ], [
14652         return (s.i == 1) ? 0 : 1;
14653     ])], [
14654         AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
14655         AC_MSG_RESULT([yes])
14656     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
14657 CXX=$save_CXX
14658 CXXFLAGS=$save_CXXFLAGS
14659 AC_LANG_POP([C++])
14661 # ===================================================================
14662 # Creating bigger shared library to link against
14663 # ===================================================================
14664 AC_MSG_CHECKING([whether to create huge library])
14665 MERGELIBS=
14667 if test $_os = iOS -o $_os = Android; then
14668     # Never any point in mergelibs for these as we build just static
14669     # libraries anyway...
14670     enable_mergelibs=no
14673 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
14674     if test $_os != Linux -a $_os != WINNT; then
14675         add_warning "--enable-mergelibs is not tested for this platform"
14676     fi
14677     MERGELIBS="TRUE"
14678     AC_MSG_RESULT([yes])
14679     AC_DEFINE(ENABLE_MERGELIBS)
14680 else
14681     AC_MSG_RESULT([no])
14683 AC_SUBST([MERGELIBS])
14685 dnl ===================================================================
14686 dnl icerun is a wrapper that stops us spawning tens of processes
14687 dnl locally - for tools that can't be executed on the compile cluster
14688 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
14689 dnl ===================================================================
14690 AC_MSG_CHECKING([whether to use icerun wrapper])
14691 ICECREAM_RUN=
14692 if test "$enable_icecream" = "yes" && which icerun >/dev/null 2>&1 ; then
14693     ICECREAM_RUN=icerun
14694     AC_MSG_RESULT([yes])
14695 else
14696     AC_MSG_RESULT([no])
14698 AC_SUBST(ICECREAM_RUN)
14700 dnl ===================================================================
14701 dnl Setup the ICECC_VERSION for the build the same way it was set for
14702 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
14703 dnl ===================================================================
14704 x_ICECC_VERSION=[\#]
14705 if test -n "$ICECC_VERSION" ; then
14706     x_ICECC_VERSION=
14708 AC_SUBST(x_ICECC_VERSION)
14709 AC_SUBST(ICECC_VERSION)
14711 dnl ===================================================================
14713 AC_MSG_CHECKING([MPL subset])
14714 MPL_SUBSET=
14716 if test "$enable_mpl_subset" = "yes"; then
14717     mpl_error_string=
14718     newline=$'\n    *'
14719     warn_report=false
14720     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
14721         warn_report=true
14722     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
14723         warn_report=true
14724     fi
14725     if test "$warn_report" = "true"; then
14726         mpl_error_string="$mpl_error_string$newline Need to --disable-report-builder - extended database report builder."
14727     fi
14728     if test "x$enable_postgresql_sdbc" != "xno"; then
14729         mpl_error_string="$mpl_error_string$newline Need to --disable-postgresql-sdbc - the PostgreSQL database backend."
14730     fi
14731     if test "$enable_lotuswordpro" = "yes"; then
14732         mpl_error_string="$mpl_error_string$newline Need to --disable-lotuswordpro - a Lotus Word Pro file format import filter."
14733     fi
14734     if test -n "$ENABLE_POPPLER"; then
14735         if test "x$SYSTEM_POPPLER" = "x"; then
14736             mpl_error_string="$mpl_error_string$newline Need to disable PDF import via poppler or use system library."
14737         fi
14738     fi
14739     # cf. m4/libo_check_extension.m4
14740     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
14741         mpl_error_string="$mpl_error_string$newline Need to disable extra extensions '$WITH_EXTRA_EXTENSIONS'."
14742     fi
14743     denied_themes=
14744     for theme in $WITH_THEMES; do
14745         case $theme in
14746         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
14747             denied_themes="$denied_themes $theme" ;;
14748         *) : ;;
14749         esac
14750     done
14751     if test "x$denied_themes" != "x"; then
14752         mpl_error_string="$mpl_error_string$newline Need to disable icon themes from '$WITH_THEMES': $denied_themes present, use --with-theme=colibre."
14753     fi
14755     ENABLE_OPENGL_TRANSITIONS=
14757     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
14758         mpl_error_string="$mpl_error_string$newline Need to --disable-lpsolve - calc linear programming solver."
14759     fi
14761     if test "x$mpl_error_string" != "x"; then
14762         AC_MSG_ERROR([$mpl_error_string])
14763     fi
14765     MPL_SUBSET="TRUE"
14766     AC_DEFINE(MPL_HAVE_SUBSET)
14767     AC_MSG_RESULT([only])
14768 else
14769     AC_MSG_RESULT([no restrictions])
14771 AC_SUBST(MPL_SUBSET)
14773 dnl ===================================================================
14775 AC_MSG_CHECKING([formula logger])
14776 ENABLE_FORMULA_LOGGER=
14778 if test "x$enable_formula_logger" = "xyes"; then
14779     AC_MSG_RESULT([yes])
14780     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14781     ENABLE_FORMULA_LOGGER=TRUE
14782 elif test -n "$ENABLE_DBGUTIL" ; then
14783     AC_MSG_RESULT([yes])
14784     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14785     ENABLE_FORMULA_LOGGER=TRUE
14786 else
14787     AC_MSG_RESULT([no])
14790 AC_SUBST(ENABLE_FORMULA_LOGGER)
14792 dnl ===================================================================
14793 dnl Checking for active Antivirus software.
14794 dnl ===================================================================
14796 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
14797     AC_MSG_CHECKING([for active Antivirus software])
14798     PathFormat "$SRC_ROOT/antivirusDetection.vbs"
14799     ANTIVIRUS_LIST=`cscript.exe //Nologo ${formatted_path}`
14800     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
14801         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
14802             AC_MSG_RESULT([found])
14803             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
14804             echo $EICAR_STRING > $SRC_ROOT/eicar
14805             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
14806             rm $SRC_ROOT/eicar
14807             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14808                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14809             fi
14810             echo $EICAR_STRING > $BUILDDIR/eicar
14811             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
14812             rm $BUILDDIR/eicar
14813             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14814                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14815             fi
14816             add_warning "To speed up builds and avoid failures in unit tests, it is highly recommended that you exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST"
14817         else
14818             AC_MSG_RESULT([not found])
14819         fi
14820     else
14821         AC_MSG_RESULT([n/a])
14822     fi
14825 dnl ===================================================================
14827 AC_MSG_CHECKING([for coredumpctl support])
14828 if test -z "$with_coredumpctl" && test $_os != Linux; then
14829     with_coredumpctl=no
14831 if test "$with_coredumpctl" = no; then
14832     WITH_COREDUMPCTL=
14833 else
14834     AC_PATH_PROG(COREDUMPCTL, coredumpctl)
14835     AC_PATH_PROG(JQ, jq)
14836     AC_PATH_PROG(SYSTEMD_ESCAPE, systemd-escape)
14837     AC_PATH_PROG(SYSTEMD_RUN, systemd-run)
14838     if test -z "$COREDUMPCTL" || test -z "$JQ" || test -z "$SYSTEMD_ESCAPE" \
14839         || test -z "$SYSTEMD_RUN"
14840     then
14841         if test -z "$with_coredumpctl"; then
14842             WITH_COREDUMPCTL=
14843         else
14844             if test -z "$COREDUMPCTL"; then
14845                 AC_MSG_ERROR([coredumpctl not found])
14846             fi
14847             if test -z "$JQ"; then
14848                 AC_MSG_ERROR([jq not found])
14849             fi
14850             if test -z "$SYSTEMD_ESCAPE"; then
14851                 AC_MSG_ERROR([systemd-escape not found])
14852             fi
14853             if test -z "$SYSTEMD_RUN"; then
14854                 AC_MSG_ERROR([systemd-run not found])
14855             fi
14856         fi
14857     else
14858         WITH_COREDUMPCTL=TRUE
14859     fi
14861 if test -z "$WITH_COREDUMPCTL"; then
14862     AC_MSG_RESULT([no])
14863 else
14864     AC_MSG_RESULT([yes])
14866 AC_SUBST(COREDUMPCTL)
14867 AC_SUBST(JQ)
14868 AC_SUBST(SYSTEMD_ESCAPE)
14869 AC_SUBST(SYSTEMD_RUN)
14870 AC_SUBST(WITH_COREDUMPCTL)
14872 dnl ===================================================================
14873 dnl Setting up the environment.
14874 dnl ===================================================================
14875 AC_MSG_NOTICE([setting up the build environment variables...])
14877 AC_SUBST(COMPATH)
14879 if test "$build_os" = "cygwin" -o "$build_os" = wsl; then
14880     if test -d "$COMPATH/atlmfc/lib/spectre"; then
14881         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
14882         ATL_INCLUDE="$COMPATH/atlmfc/include"
14883     elif test -d "$COMPATH/atlmfc/lib"; then
14884         ATL_LIB="$COMPATH/atlmfc/lib"
14885         ATL_INCLUDE="$COMPATH/atlmfc/include"
14886     else
14887         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
14888         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
14889     fi
14890     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
14891     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
14892     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
14895 if test "$build_os" = "cygwin"; then
14896     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
14897     PathFormat "/usr/bin/find.exe"
14898     FIND="$formatted_path"
14899     PathFormat "/usr/bin/sort.exe"
14900     SORT="$formatted_path"
14901     PathFormat "/usr/bin/grep.exe"
14902     WIN_GREP="$formatted_path"
14903     PathFormat "/usr/bin/ls.exe"
14904     WIN_LS="$formatted_path"
14905     PathFormat "/usr/bin/touch.exe"
14906     WIN_TOUCH="$formatted_path"
14907 else
14908     FIND=find
14909     SORT=sort
14912 AC_SUBST(ATL_INCLUDE)
14913 AC_SUBST(ATL_LIB)
14914 AC_SUBST(FIND)
14915 AC_SUBST(SORT)
14916 AC_SUBST(WIN_GREP)
14917 AC_SUBST(WIN_LS)
14918 AC_SUBST(WIN_TOUCH)
14920 AC_SUBST(BUILD_TYPE)
14922 AC_SUBST(SOLARINC)
14924 PathFormat "$PERL"
14925 PERL="$formatted_path"
14926 AC_SUBST(PERL)
14928 if test -n "$TMPDIR"; then
14929     TEMP_DIRECTORY="$TMPDIR"
14930 else
14931     TEMP_DIRECTORY="/tmp"
14933 CYGWIN_BASH="C:/cygwin64/bin/bash.exe"
14934 if test "$build_os" = "cygwin"; then
14935     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
14936     CYGWIN_BASH=`cygpath -m /usr/bin/bash`
14938 AC_SUBST(TEMP_DIRECTORY)
14939 AC_SUBST(CYGWIN_BASH)
14941 # setup the PATH for the environment
14942 if test -n "$LO_PATH_FOR_BUILD"; then
14943     LO_PATH="$LO_PATH_FOR_BUILD"
14944     case "$host_os" in
14945     cygwin*|wsl*)
14946         pathmunge "$MSVC_HOST_PATH" "before"
14947         ;;
14948     esac
14949 else
14950     LO_PATH="$PATH"
14952     case "$host_os" in
14954     dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
14955         if test "$ENABLE_JAVA" != ""; then
14956             pathmunge "$JAVA_HOME/bin" "after"
14957         fi
14958         ;;
14960     cygwin*|wsl*)
14961         # Win32 make needs native paths
14962         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
14963             LO_PATH=`cygpath -p -m "$PATH"`
14964         fi
14965         if test "$WIN_BUILD_ARCH" = "x64"; then
14966             # needed for msi packaging
14967             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
14968         fi
14969         if test "$WIN_BUILD_ARCH" = "arm64"; then
14970             # needed for msi packaging - as of 10.0.22621 SDK no arm64 ones yet
14971             # the x86 ones probably would work just as well...
14972             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/arm" "before"
14973         fi
14974         # .NET 4.6 and higher don't have bin directory
14975         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
14976             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
14977         fi
14978         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
14979         pathmunge "$CSC_PATH" "before"
14980         pathmunge "$MIDL_PATH" "before"
14981         pathmunge "$AL_PATH" "before"
14982         pathmunge "$MSVC_MULTI_PATH" "before"
14983         pathmunge "$MSVC_BUILD_PATH" "before"
14984         if test -n "$MSBUILD_PATH" ; then
14985             pathmunge "$MSBUILD_PATH" "before"
14986         fi
14987         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
14988         if test "$ENABLE_JAVA" != ""; then
14989             if test -d "$JAVA_HOME/jre/bin/client"; then
14990                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
14991             fi
14992             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
14993                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
14994             fi
14995             pathmunge "$JAVA_HOME/bin" "before"
14996         fi
14997         pathmunge "$MSVC_HOST_PATH" "before"
14998         ;;
15000     solaris*)
15001         pathmunge "/usr/css/bin" "before"
15002         if test "$ENABLE_JAVA" != ""; then
15003             pathmunge "$JAVA_HOME/bin" "after"
15004         fi
15005         ;;
15006     esac
15009 AC_SUBST(LO_PATH)
15011 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
15012 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
15013     x_LO_ELFCHECK_ALLOWLIST=
15014 else
15015     x_LO_ELFCHECK_ALLOWLIST=[\#]
15017 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
15018 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
15020 libo_FUZZ_SUMMARY
15022 # Generate a configuration sha256 we can use for deps
15023 if test -f config_host.mk; then
15024     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
15026 if test -f config_host_lang.mk; then
15027     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
15030 CFLAGS=$my_original_CFLAGS
15031 CXXFLAGS=$my_original_CXXFLAGS
15032 CPPFLAGS=$my_original_CPPFLAGS
15034 AC_CONFIG_LINKS([include:include])
15036 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
15037 # BUILD platform configuration] - otherwise breaks cross building
15038 AC_CONFIG_FILES([config_host.mk
15039                  config_host_lang.mk
15040                  Makefile
15041                  lo.xcent
15042                  bin/bffvalidator.sh
15043                  bin/odfvalidator.sh
15044                  bin/officeotron.sh
15045                  hardened_runtime.xcent
15046                  instsetoo_native/util/openoffice.lst
15047                  sysui/desktop/macosx/Info.plist
15048                  vs-code.code-workspace.template:.vscode/vs-code-template.code-workspace.in])
15050 AC_CONFIG_HEADERS([config_host/config_atspi.h])
15051 AC_CONFIG_HEADERS([config_host/config_buildconfig.h])
15052 AC_CONFIG_HEADERS([config_host/config_buildid.h])
15053 AC_CONFIG_HEADERS([config_host/config_box2d.h])
15054 AC_CONFIG_HEADERS([config_host/config_clang.h])
15055 AC_CONFIG_HEADERS([config_host/config_crypto.h])
15056 AC_CONFIG_HEADERS([config_host/config_dconf.h])
15057 AC_CONFIG_HEADERS([config_host/config_eot.h])
15058 AC_CONFIG_HEADERS([config_host/config_extensions.h])
15059 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
15060 AC_CONFIG_HEADERS([config_host/config_cairo_rgba.h])
15061 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
15062 AC_CONFIG_HEADERS([config_host/config_dbus.h])
15063 AC_CONFIG_HEADERS([config_host/config_features.h])
15064 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
15065 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
15066 AC_CONFIG_HEADERS([config_host/config_firebird.h])
15067 AC_CONFIG_HEADERS([config_host/config_folders.h])
15068 AC_CONFIG_HEADERS([config_host/config_fonts.h])
15069 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
15070 AC_CONFIG_HEADERS([config_host/config_gio.h])
15071 AC_CONFIG_HEADERS([config_host/config_global.h])
15072 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
15073 AC_CONFIG_HEADERS([config_host/config_java.h])
15074 AC_CONFIG_HEADERS([config_host/config_langs.h])
15075 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
15076 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
15077 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
15078 AC_CONFIG_HEADERS([config_host/config_locales.h])
15079 AC_CONFIG_HEADERS([config_host/config_mpl.h])
15080 AC_CONFIG_HEADERS([config_host/config_oox.h])
15081 AC_CONFIG_HEADERS([config_host/config_options.h])
15082 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
15083 AC_CONFIG_HEADERS([config_host/config_zxing.h])
15084 AC_CONFIG_HEADERS([config_host/config_skia.h])
15085 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
15086 AC_CONFIG_HEADERS([config_host/config_validation.h])
15087 AC_CONFIG_HEADERS([config_host/config_vendor.h])
15088 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
15089 AC_CONFIG_HEADERS([config_host/config_version.h])
15090 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
15091 AC_CONFIG_HEADERS([config_host/config_poppler.h])
15092 AC_CONFIG_HEADERS([config_host/config_python.h])
15093 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
15094 AC_CONFIG_HEADERS([config_host/config_wasm_strip.h])
15095 AC_CONFIG_HEADERS([solenv/lockfile/autoconf.h])
15096 AC_OUTPUT
15098 if test "$CROSS_COMPILING" = TRUE; then
15099     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
15102 # touch the config timestamp file
15103 if test ! -f config_host.mk.stamp; then
15104     echo > config_host.mk.stamp
15105 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
15106     echo "Host Configuration unchanged - avoiding scp2 stamp update"
15107 else
15108     echo > config_host.mk.stamp
15111 # touch the config lang timestamp file
15112 if test ! -f config_host_lang.mk.stamp; then
15113     echo > config_host_lang.mk.stamp
15114 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
15115     echo "Language Configuration unchanged - avoiding scp2 stamp update"
15116 else
15117     echo > config_host_lang.mk.stamp
15121 if test \( "$STALE_MAKE" = "TRUE" \) \
15122         -a "$build_os" = "cygwin"; then
15124 cat << _EOS
15125 ****************************************************************************
15126 WARNING:
15127 Your make version is known to be horribly slow, and hard to debug
15128 problems with. To get a reasonably functional make please do:
15130 to install a pre-compiled binary make for Win32
15132  mkdir -p /opt/lo/bin
15133  cd /opt/lo/bin
15134  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
15135  cp make-4.2.1-msvc.exe make
15136  chmod +x make
15138 to install from source:
15139 place yourself in a working directory of you choice.
15141  git clone git://git.savannah.gnu.org/make.git
15143  [go to Start menu, open "Visual Studio 2019" or "Visual Studio 2022", and then click "x86 Native Tools Command Prompt" or "x64 Native Tools Command Prompt"]
15144  set PATH=%PATH%;C:\Cygwin\bin
15145  [or Cygwin64, if that is what you have]
15146  cd path-to-make-repo-you-cloned-above
15147  build_w32.bat --without-guile
15149 should result in a WinRel/gnumake.exe.
15150 Copy it to the Cygwin /opt/lo/bin directory as make.exe
15152 Then re-run autogen.sh
15154 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
15155 Alternatively, you can install the 'new' make where ever you want and make sure that `which make` finds it.
15157 _EOS
15161 cat << _EOF
15162 ****************************************************************************
15164 To show information on various make targets and make flags, run:
15165 $GNUMAKE help
15167 To just build, run:
15168 $GNUMAKE
15170 _EOF
15172 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
15173     cat << _EOF
15174 After the build has finished successfully, you can immediately run what you built using the command:
15175 _EOF
15177     if test $_os = Darwin; then
15178         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
15179     else
15180         echo instdir/program/soffice
15181     fi
15182     cat << _EOF
15184 If you want to run the unit tests, run:
15185 $GNUMAKE check
15187 _EOF
15190 if test -s "$WARNINGS_FILE_FOR_BUILD"; then
15191     echo "BUILD / cross-toolset config, repeated ($WARNINGS_FILE_FOR_BUILD)"
15192     cat "$WARNINGS_FILE_FOR_BUILD"
15193     echo
15196 if test -s "$WARNINGS_FILE"; then
15197     echo "HOST config ($WARNINGS_FILE)"
15198     cat "$WARNINGS_FILE"
15201 # Remove unneeded emconfigure artifacts
15202 rm -f a.out a.wasm a.out.js a.out.wasm
15204 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: