Fix a UITest on Windows
[LibreOffice.git] / configure.ac
blob79c8b20a5043e56cb1e79a0bcc56ab38513eb520
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],[7.4.0.0.alpha1+],[],[],[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     for f in $1; do
50         case "$f" in
51             # let's start with Fedora's paths for now
52             -L/lib|-L/lib/|-L/lib64|-L/lib64/|-L/usr/lib|-L/usr/lib/|-L/usr/lib64|-L/usr/lib64/)
53                 # ignore it: on UNIXoids it is searched by default anyway
54                 # but if it's given explicitly then it may override other paths
55                 # (on macOS it would be an error to use it instead of SDK)
56                 ;;
57             *)
58                 filteredlibs="$filteredlibs $f"
59                 ;;
60         esac
61     done
64 PathFormat()
66     # Args: $1: A pathname. On Cygwin and WSL, in either the Unix or the Windows format. Note that this
67     # function is called also on Unix.
68     #
69     # Return value: $formatted_path and $formatted_path_unix.
70     #
71     # $formatted_path is the argument in Windows format, but using forward slashes instead of
72     # backslashes, using 8.3 pathname components if necessary (if it otherwise would contains spaces
73     # or shell metacharacters).
74     #
75     # $formatted_path_unix is the argument in a form usable in Cygwin or WSL, using 8.3 components if
76     # necessary. On Cygwin, it is the same as $formatted_path, but on WSL it is $formatted_path as a
77     # Unix pathname.
78     #
79     # Errors out if 8.3 names are needed but aren't present for some of the path components.
81     # Examples:
82     #
83     # /home/tml/lo/master-optimised => C:/cygwin64/home/tml/lo/master-optimised
84     #
85     # C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe => C:/PROGRA~2/MICROS~3/INSTAL~1/vswhere.exe
86     #
87     # C:\Program Files (x86)\Microsoft Visual Studio\2019\Community => C:/PROGRA~2/MICROS~3/2019/COMMUN~1
88     #
89     # C:/PROGRA~2/WI3CF2~1/10/Include/10.0.18362.0/ucrt => C:/PROGRA~2/WI3CF2~1/10/Include/10.0.18362.0/ucrt
90     #
91     # /cygdrive/c/PROGRA~2/WI3CF2~1/10 => C:/PROGRA~2/WI3CF2~1/10
92     #
93     # C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\ => C:/PROGRA~2/WI3CF2~1/NETFXSDK/4.8/
94     #
95     # /usr/bin/find.exe => C:/cygwin64/bin/find.exe
97     if test -n "$UNITTEST_WSL_PATHFORMAT"; then
98         printf "PathFormat $1 ==> "
99     fi
101     formatted_path="$1"
102     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
103         if test "$build_os" = "wsl"; then
104             formatted_path=$(echo "$formatted_path" | tr -d '\r')
105         fi
107         pf_conv_to_dos=
108         # spaces,parentheses,brackets,braces are problematic in pathname
109         # so are backslashes
110         case "$formatted_path" in
111             *\ * | *\)* | *\(* | *\{* | *\}* | *\[* | *\]* | *\\* )
112                 pf_conv_to_dos="yes"
113             ;;
114         esac
115         if test "$pf_conv_to_dos" = "yes"; then
116             if test "$build_os" = "wsl"; then
117                 case "$formatted_path" in
118                     /*)
119                         formatted_path=$(wslpath -w "$formatted_path")
120                         ;;
121                 esac
122                 formatted_path=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --8.3 "$formatted_path")
123             elif test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
124                 formatted_path=`cygpath -sm "$formatted_path"`
125             else
126                 formatted_path=`cygpath -d "$formatted_path"`
127             fi
128             if test $? -ne 0;  then
129                 AC_MSG_ERROR([path conversion failed for "$1".])
130             fi
131         fi
132         fp_count_colon=`echo "$formatted_path" | $GREP -c "[:]"`
133         fp_count_slash=`echo "$formatted_path" | $GREP -c "[/]"`
134         if test "$fp_count_slash$fp_count_colon" != "00"; then
135             if test "$fp_count_colon" = "0"; then
136                 new_formatted_path=`realpath "$formatted_path"`
137                 if test $? -ne 0;  then
138                     AC_MSG_WARN([realpath failed for "$formatted_path", not necessarily a problem.])
139                 else
140                     formatted_path="$new_formatted_path"
141                 fi
142             fi
143             if test "$build_os" = "wsl"; then
144                 if test "$fp_count_colon" != "0"; then
145                     formatted_path=$(wslpath "$formatted_path")
146                     local final_slash=
147                     case "$formatted_path" in
148                         */)
149                             final_slash=/
150                             ;;
151                     esac
152                     formatted_path=$(wslpath -m $formatted_path)
153                     case "$formatted_path" in
154                         */)
155                             ;;
156                         *)
157                             formatted_path="$formatted_path"$final_slash
158                             ;;
159                     esac
160                 else
161                     formatted_path=$(wslpath -m "$formatted_path")
162                 fi
163             else
164                 formatted_path=`cygpath -m "$formatted_path"`
165             fi
166             if test $? -ne 0;  then
167                 AC_MSG_ERROR([path conversion failed for "$1".])
168             fi
169         fi
170         fp_count_space=`echo "$formatted_path" | $GREP -c "[ ]"`
171         if test "$fp_count_space" != "0"; then
172             AC_MSG_ERROR([converted path "$formatted_path" still contains spaces. Short filenames (8.3 filenames) support was disabled on this system?])
173         fi
174     fi
175     if test "$build_os" = "wsl"; then
176         # WSL can't run Windows binaries from Windows pathnames so we need a separate return value in Unix format
177         formatted_path_unix=$(wslpath "$formatted_path")
178     else
179         # But Cygwin can
180         formatted_path_unix="$formatted_path"
181     fi
184 AbsolutePath()
186     # There appears to be no simple and portable method to get an absolute and
187     # canonical path, so we try creating the directory if does not exist and
188     # utilizing the shell and pwd.
190     # Args: $1: A possibly relative pathname
191     # Return value: $absolute_path
193     local rel="$1"
194     absolute_path=""
195     test ! -e "$rel" && mkdir -p "$rel"
196     if test -d "$rel" ; then
197         cd "$rel" || AC_MSG_ERROR([absolute path resolution failed for "$rel".])
198         absolute_path="$(pwd)"
199         cd - > /dev/null
200     else
201         AC_MSG_ERROR([Failed to resolve absolute path.  "$rel" does not exist or is not a directory.])
202     fi
205 WARNINGS_FILE=config.warn
206 WARNINGS_FILE_FOR_BUILD=config.Build.warn
207 rm -f "$WARNINGS_FILE" "$WARNINGS_FILE_FOR_BUILD"
208 have_WARNINGS="no"
209 add_warning()
211     if test "$have_WARNINGS" = "no"; then
212         echo "*************************************" > "$WARNINGS_FILE"
213         have_WARNINGS="yes"
214         if which tput >/dev/null && test "`tput colors 2>/dev/null || echo 0`" -ge 8; then
215             dnl <esc> as actual byte (U+1b), [ escaped using quadrigraph @<:@
216             COLORWARN='*\e@<:@1;33;40m WARNING \e@<:@0m:'
217         else
218             COLORWARN="* WARNING :"
219         fi
220     fi
221     echo "$COLORWARN $@" >> "$WARNINGS_FILE"
224 dnl Some Mac User have the bad habit of letting a lot of crap
225 dnl accumulate in their PATH and even adding stuff in /usr/local/bin
226 dnl that confuse the build.
227 dnl For the ones that use LODE, let's be nice and protect them
228 dnl from themselves
230 mac_sanitize_path()
232     mac_path="$LODE_HOME/opt/bin:/usr/bin:/bin:/usr/sbin:/sbin"
233 dnl a common but nevertheless necessary thing that may be in a fancy
234 dnl path location is git, so make sure we have it
235     mac_git_path=`which git 2>/dev/null`
236     if test -n "$mac_git_path" -a -x "$mac_git_path" -a "$mac_git_path" != "/usr/bin/git" ; then
237         mac_path="$mac_path:`dirname $mac_git_path`"
238     fi
239 dnl a not so common but nevertheless quite helpful thing that may be in a fancy
240 dnl path location is gpg, so make sure we find it
241     mac_gpg_path=`which gpg 2>/dev/null`
242     if test -n "$mac_gpg_path" -a -x "$mac_gpg_path" -a "$mac_gpg_path" != "/usr/bin/gpg" ; then
243         mac_path="$mac_path:`dirname $mac_gpg_path`"
244     fi
245     PATH="$mac_path"
246     unset mac_path
247     unset mac_git_path
248     unset mac_gpg_path
251 dnl semantically test a three digits version
252 dnl $1 - $3 = minimal version
253 dnl $4 - $6 = current version
255 check_semantic_version_three()
257     test "$4" -gt "$1" \
258         -o \( "$4" -eq "$1" -a "$5" -gt "$2" \) \
259         -o \( "$4" -eq "$1" -a "$5" -eq "$2" -a "$6" -ge "$3" \)
260     return $?
263 dnl calls check_semantic_version_three with digits in named variables $1_MAJOR, $1_MINOR, $1_TINY
264 dnl $1 = current version prefix, e.g. EMSCRIPTEN => EMSCRIPTEN_
265 dnl $2 = postfix to $1, e.g. MIN => EMSCRIPTEN_MIN_
267 check_semantic_version_three_prefixed()
269     eval local MIN_MAJOR="\$${1}_${2}_MAJOR"
270     eval local MIN_MINOR="\$${1}_${2}_MINOR"
271     eval local MIN_TINY="\$${1}_${2}_TINY"
272     eval local CUR_MAJOR="\$${1}_MAJOR"
273     eval local CUR_MINOR="\$${1}_MINOR"
274     eval local CUR_TINY="\$${1}_TINY"
275     check_semantic_version_three $MIN_MAJOR $MIN_MINOR $MIN_TINY $CUR_MAJOR $CUR_MINOR $CUR_TINY
276     return $?
279 echo "********************************************************************"
280 echo "*"
281 echo "*   Running ${PACKAGE_NAME} build configuration."
282 echo "*"
283 echo "********************************************************************"
284 echo ""
286 dnl ===================================================================
287 dnl checks build and host OSes
288 dnl do this before argument processing to allow for platform dependent defaults
289 dnl ===================================================================
291 # Check for WSL (version 2, at least). But if --host is explicitly specified (to really do build for
292 # Linux on WSL) trust that.
293 if test -z "$host" -a -z "$build" -a "`wslsys -v 2>/dev/null`" != ""; then
294     ac_cv_host="x86_64-pc-wsl"
295     ac_cv_host_cpu="x86_64"
296     ac_cv_host_os="wsl"
297     ac_cv_build="$ac_cv_host"
298     ac_cv_build_cpu="$ac_cv_host_cpu"
299     ac_cv_build_os="$ac_cv_host_os"
301     # Emulation of Cygwin's cygpath command for WSL.
302     cygpath()
303     {
304         if test -n "$UNITTEST_WSL_CYGPATH"; then
305             echo -n cygpath "$@" "==> "
306         fi
308         # Cygwin's real cygpath has a plethora of options but we use only a few here.
309         local args="$@"
310         local opt
311         local opt_d opt_m opt_u opt_w opt_l opt_s opt_p
312         OPTIND=1
314         while getopts dmuwlsp opt; do
315             case "$opt" in
316                 \?)
317                     AC_MSG_ERROR([Unimplemented cygpath emulation option in invocation: cygpath $args])
318                     ;;
319                 ?)
320                     eval opt_$opt=yes
321                     ;;
322             esac
323         done
325         shift $((OPTIND-1))
327         if test $# -ne 1; then
328             AC_MSG_ERROR([Invalid cygpath emulation invocation: Pathname missing]);
329         fi
331         local input="$1"
333         local result
335         if test -n "$opt_d" -o -n "$opt_m" -o -n "$opt_w"; then
336             # Print Windows path, possibly in 8.3 form (-d) or with forward slashes (-m)
338             if test -n "$opt_u"; then
339                 AC_MSG_ERROR([Invalid cygpath invocation: Both Windows and Unix path output requested])
340             fi
342             case "$input" in
343                 /mnt/*)
344                     # A Windows file in WSL format
345                     input=$(wslpath -w "$input")
346                     ;;
347                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
348                     # Already in Windows format
349                     ;;
350                 /*)
351                     input=$(wslpath -w "$input")
352                     ;;
353                 *)
354                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
355                     ;;
356             esac
357             if test -n "$opt_d" -o -n "$opt_s"; then
358                 input=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --8.3 "$input")
359             fi
360             if test -n "$opt_m"; then
361                 input="${input//\\//}"
362             fi
363             echo "$input"
364         else
365             # Print Unix path
367             case "$input" in
368                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
369                     wslpath -u "$input"
370                     ;;
371                 /)
372                     echo "$input"
373                     ;;
374                 *)
375                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
376                     ;;
377             esac
378         fi
379     }
381     if test -n "$UNITTEST_WSL_CYGPATH"; then
382         BUILDDIR=.
384         # Nothing special with these file names, just arbitrary ones picked to test with
385         cygpath -d /usr/lib64/ld-linux-x86-64.so.2
386         cygpath -w /usr/lib64/ld-linux-x86-64.so.2
387         cygpath -m /usr/lib64/ld-linux-x86-64.so.2
388         cygpath -m -s /usr/lib64/ld-linux-x86-64.so.2
389         # At least on my machine for instance this file does have an 8.3 name
390         cygpath -d /mnt/c/windows/WindowsUpdate.log
391         # But for instance this one doesn't
392         cygpath -w /mnt/c/windows/system32/AboutSettingsHandlers.dll
393         cygpath -ws /mnt/c/windows/WindowsUpdate.log
394         cygpath -m /mnt/c/windows/system32/AboutSettingsHandlers.dll
395         cygpath -ms /mnt/c/windows/WindowsUpdate.log
397         cygpath -u 'c:\windows\system32\AboutSettingsHandlers.dll'
398         cygpath -u 'c:/windows/system32/AboutSettingsHandlers.dll'
400         exit 0
401     fi
404 AC_CANONICAL_HOST
405 AC_CANONICAL_BUILD
407 if test -n "$UNITTEST_WSL_PATHFORMAT"; then
408     BUILDDIR=.
409     GREP=grep
411     # Use of PathFormat must be after AC_CANONICAL_BUILD above
412     PathFormat /
413     printf "$formatted_path , $formatted_path_unix\n"
415     PathFormat $PWD
416     printf "$formatted_path , $formatted_path_unix\n"
418     PathFormat "$PROGRAMFILESX86"
419     printf "$formatted_path , $formatted_path_unix\n"
421     exit 0
424 AC_MSG_CHECKING([for product name])
425 PRODUCTNAME="AC_PACKAGE_NAME"
426 if test -n "$with_product_name" -a "$with_product_name" != no; then
427     PRODUCTNAME="$with_product_name"
429 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
430     PRODUCTNAME="${PRODUCTNAME}Dev"
432 AC_MSG_RESULT([$PRODUCTNAME])
433 AC_SUBST(PRODUCTNAME)
434 PRODUCTNAME_WITHOUT_SPACES=$(printf %s "$PRODUCTNAME" | sed 's/ //g')
435 AC_SUBST(PRODUCTNAME_WITHOUT_SPACES)
437 dnl ===================================================================
438 dnl Our version is defined by the AC_INIT() at the top of this script.
439 dnl ===================================================================
441 AC_MSG_CHECKING([for package version])
442 if test -n "$with_package_version" -a "$with_package_version" != no; then
443     PACKAGE_VERSION="$with_package_version"
445 AC_MSG_RESULT([$PACKAGE_VERSION])
447 set `echo "$PACKAGE_VERSION" | sed "s/\./ /g"`
449 LIBO_VERSION_MAJOR=$1
450 LIBO_VERSION_MINOR=$2
451 LIBO_VERSION_MICRO=$3
452 LIBO_VERSION_PATCH=$4
454 LIBO_VERSION_SUFFIX=$5
456 # Split out LIBO_VERSION_SUFFIX_SUFFIX... horrible crack. But apparently wanted separately in
457 # openoffice.lst as ABOUTBOXPRODUCTVERSIONSUFFIX. Note that the double brackets are for m4's sake,
458 # they get undoubled before actually passed to sed.
459 LIBO_VERSION_SUFFIX_SUFFIX=`echo "$LIBO_VERSION_SUFFIX" | sed -e 's/.*[[a-zA-Z0-9]]\([[^a-zA-Z0-9]]*\)$/\1/'`
460 test -n "$LIBO_VERSION_SUFFIX_SUFFIX" && LIBO_VERSION_SUFFIX="${LIBO_VERSION_SUFFIX%${LIBO_VERSION_SUFFIX_SUFFIX}}"
461 # LIBO_VERSION_SUFFIX, if non-empty, should include the period separator
462 test -n "$LIBO_VERSION_SUFFIX" && LIBO_VERSION_SUFFIX=".$LIBO_VERSION_SUFFIX"
464 # The value for key CFBundleVersion in the Info.plist file must be a period-separated list of at most
465 # three non-negative integers. Please find more information about CFBundleVersion at
466 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleversion
468 # The value for key CFBundleShortVersionString in the Info.plist file must be a period-separated list
469 # of at most three non-negative integers. Please find more information about
470 # CFBundleShortVersionString at
471 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring
473 # But that is enforced only in the App Store, and we apparently want to break the rules otherwise.
475 if test "$enable_macosx_sandbox" = yes; then
476     MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.`expr $LIBO_VERSION_MICRO '*' 1000 + $LIBO_VERSION_PATCH`
477     MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION
478 else
479     MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.$LIBO_VERSION_MICRO.$LIBO_VERSION_PATCH
480     MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION$LIBO_VERSION_SUFFIX
483 AC_SUBST(LIBO_VERSION_MAJOR)
484 AC_SUBST(LIBO_VERSION_MINOR)
485 AC_SUBST(LIBO_VERSION_MICRO)
486 AC_SUBST(LIBO_VERSION_PATCH)
487 AC_SUBST(LIBO_VERSION_SUFFIX)
488 AC_SUBST(LIBO_VERSION_SUFFIX_SUFFIX)
489 AC_SUBST(MACOSX_BUNDLE_SHORTVERSION)
490 AC_SUBST(MACOSX_BUNDLE_VERSION)
492 AC_DEFINE_UNQUOTED(LIBO_VERSION_MAJOR,$LIBO_VERSION_MAJOR)
493 AC_DEFINE_UNQUOTED(LIBO_VERSION_MINOR,$LIBO_VERSION_MINOR)
494 AC_DEFINE_UNQUOTED(LIBO_VERSION_MICRO,$LIBO_VERSION_MICRO)
495 AC_DEFINE_UNQUOTED(LIBO_VERSION_PATCH,$LIBO_VERSION_PATCH)
497 LIBO_THIS_YEAR=`date +%Y`
498 AC_DEFINE_UNQUOTED(LIBO_THIS_YEAR,$LIBO_THIS_YEAR)
500 dnl ===================================================================
501 dnl Product version
502 dnl ===================================================================
503 AC_MSG_CHECKING([for product version])
504 PRODUCTVERSION="$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR"
505 AC_MSG_RESULT([$PRODUCTVERSION])
506 AC_SUBST(PRODUCTVERSION)
508 AC_PROG_EGREP
509 # AC_PROG_EGREP doesn't set GREP on all systems as well
510 AC_PATH_PROG(GREP, grep)
512 BUILDDIR=`pwd`
513 cd $srcdir
514 SRC_ROOT=`pwd`
515 cd $BUILDDIR
516 x_Cygwin=[\#]
518 dnl ======================================
519 dnl Required GObject introspection version
520 dnl ======================================
521 INTROSPECTION_REQUIRED_VERSION=1.32.0
523 dnl ===================================================================
524 dnl Search all the common names for GNU Make
525 dnl ===================================================================
526 AC_MSG_CHECKING([for GNU Make])
528 # try to use our own make if it is available and GNUMAKE was not already defined
529 if test -z "$GNUMAKE"; then
530     if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/make" ; then
531         GNUMAKE="$LODE_HOME/opt/bin/make"
532     elif test -x "/opt/lo/bin/make"; then
533         GNUMAKE="/opt/lo/bin/make"
534     fi
537 GNUMAKE_WIN_NATIVE=
538 for a in "$MAKE" "$GNUMAKE" make gmake gnumake; do
539     if test -n "$a"; then
540         $a --version 2> /dev/null | grep GNU  2>&1 > /dev/null
541         if test $? -eq 0;  then
542             if test "$build_os" = "cygwin"; then
543                 if test -n "$($a -v | grep 'Built for Windows')" ; then
544                     GNUMAKE="$(cygpath -m "$(which "$(cygpath -u $a)")")"
545                     GNUMAKE_WIN_NATIVE="TRUE"
546                 else
547                     GNUMAKE=`which $a`
548                 fi
549             else
550                 GNUMAKE=`which $a`
551             fi
552             break
553         fi
554     fi
555 done
556 AC_MSG_RESULT($GNUMAKE)
557 if test -z "$GNUMAKE"; then
558     AC_MSG_ERROR([not found. install GNU Make.])
559 else
560     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
561         AC_MSG_NOTICE([Using a native Win32 GNU Make version.])
562     fi
565 win_short_path_for_make()
567     local short_path="$1"
568     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
569         cygpath -sm "$short_path"
570     else
571         cygpath -u "$(cygpath -d "$short_path")"
572     fi
576 if test "$build_os" = "cygwin"; then
577     PathFormat "$SRC_ROOT"
578     SRC_ROOT="$formatted_path"
579     PathFormat "$BUILDDIR"
580     BUILDDIR="$formatted_path"
581     x_Cygwin=
582     AC_MSG_CHECKING(for explicit COMSPEC)
583     if test -z "$COMSPEC"; then
584         AC_MSG_ERROR([COMSPEC not set in environment, please set it and rerun])
585     else
586         AC_MSG_RESULT([found: $COMSPEC])
587     fi
590 AC_SUBST(SRC_ROOT)
591 AC_SUBST(BUILDDIR)
592 AC_SUBST(x_Cygwin)
593 AC_DEFINE_UNQUOTED(SRCDIR,"$SRC_ROOT")
594 AC_DEFINE_UNQUOTED(SRC_ROOT,"$SRC_ROOT")
595 AC_DEFINE_UNQUOTED(BUILDDIR,"$BUILDDIR")
597 if test "z$EUID" = "z0" -a "`uname -o 2>/dev/null`" = "Cygwin"; then
598     AC_MSG_ERROR([You must build LibreOffice as a normal user - not using an administrative account])
601 # need sed in os checks...
602 AC_PATH_PROGS(SED, sed)
603 if test -z "$SED"; then
604     AC_MSG_ERROR([install sed to run this script])
607 # Set the ENABLE_LTO variable
608 # ===================================================================
609 AC_MSG_CHECKING([whether to use link-time optimization])
610 if test -n "$enable_lto" -a "$enable_lto" != "no"; then
611     ENABLE_LTO="TRUE"
612     AC_MSG_RESULT([yes])
613 else
614     ENABLE_LTO=""
615     AC_MSG_RESULT([no])
617 AC_SUBST(ENABLE_LTO)
619 AC_ARG_ENABLE(fuzz-options,
620     AS_HELP_STRING([--enable-fuzz-options],
621         [Randomly enable or disable each of those configurable options
622          that are supposed to be freely selectable without interdependencies,
623          or where bad interaction from interdependencies is automatically avoided.])
626 dnl ===================================================================
627 dnl When building for Android, --with-android-ndk,
628 dnl --with-android-ndk-toolchain-version and --with-android-sdk are
629 dnl mandatory
630 dnl ===================================================================
632 AC_ARG_WITH(android-ndk,
633     AS_HELP_STRING([--with-android-ndk],
634         [Specify location of the Android Native Development Kit. Mandatory when building for Android.]),
637 AC_ARG_WITH(android-ndk-toolchain-version,
638     AS_HELP_STRING([--with-android-ndk-toolchain-version],
639         [Specify which toolchain version to use, of those present in the
640         Android NDK you are using. The default (and only supported version currently) is "clang5.0"]),,
641         with_android_ndk_toolchain_version=clang5.0)
643 AC_ARG_WITH(android-sdk,
644     AS_HELP_STRING([--with-android-sdk],
645         [Specify location of the Android SDK. Mandatory when building for Android.]),
648 AC_ARG_WITH(android-api-level,
649     AS_HELP_STRING([--with-android-api-level],
650         [Specify the API level when building for Android. Defaults to 16 for ARM and x86 and to 21 for ARM64 and x86-64]),
653 ANDROID_NDK_DIR=
654 if test -z "$with_android_ndk" -a -e "$SRC_ROOT/external/android-ndk" -a "$build" != "$host"; then
655     with_android_ndk="$SRC_ROOT/external/android-ndk"
657 if test -n "$with_android_ndk"; then
658     eval ANDROID_NDK_DIR=$with_android_ndk
660     # Set up a lot of pre-canned defaults
662     if test ! -f $ANDROID_NDK_DIR/RELEASE.TXT; then
663         if test ! -f $ANDROID_NDK_DIR/source.properties; then
664             AC_MSG_ERROR([Unrecognized Android NDK. Missing RELEASE.TXT or source.properties file in $ANDROID_NDK_DIR.])
665         fi
666         ANDROID_NDK_VERSION=`sed -n -e 's/Pkg.Revision = //p' $ANDROID_NDK_DIR/source.properties`
667     else
668         ANDROID_NDK_VERSION=`cut -f1 -d' ' <$ANDROID_NDK_DIR/RELEASE.TXT`
669     fi
670     if test -z "$ANDROID_NDK_VERSION";  then
671         AC_MSG_ERROR([Failed to determine Android NDK version. Please check your installation.])
672     fi
673     case $ANDROID_NDK_VERSION in
674     r9*|r10*)
675         AC_MSG_ERROR([Building for Android is only supported with NDK versions above 16.x*])
676         ;;
677     11.1.*|12.1.*|13.1.*|14.1.*)
678         AC_MSG_ERROR([Building for Android is only supported with NDK versions above 16.x.*])
679         ;;
680     16.*|17.*|18.*|19.*|20.*)
681         ;;
682     *)
683         AC_MSG_WARN([Untested Android NDK version $ANDROID_NDK_VERSION, only versions 16.* til 20.* have been used successfully. Proceed at your own risk.])
684         add_warning "Untested Android NDK version $ANDROID_NDK_VERSION, only versions 16.* til 20.* have been used successfully. Proceed at your own risk."
685         ;;
686     esac
688     ANDROID_API_LEVEL=16
689     if test -n "$with_android_api_level" ; then
690         ANDROID_API_LEVEL="$with_android_api_level"
691     fi
693     android_cpu=$host_cpu
694     if test $host_cpu = arm; then
695         android_platform_prefix=arm-linux-androideabi
696         android_gnu_prefix=$android_platform_prefix
697         LLVM_TRIPLE=armv7a-linux-androideabi
698         ANDROID_APP_ABI=armeabi-v7a
699         ANDROIDCFLAGS="-mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=neon -Wl,--fix-cortex-a8"
700     elif test $host_cpu = aarch64; then
701         android_platform_prefix=aarch64-linux-android
702         android_gnu_prefix=$android_platform_prefix
703         LLVM_TRIPLE=$android_platform_prefix
704         # minimum android version that supports aarch64
705         if test "$ANDROID_API_LEVEL" -lt "21" ; then
706             ANDROID_API_LEVEL=21
707         fi
708         ANDROID_APP_ABI=arm64-v8a
709     elif test $host_cpu = x86_64; then
710         android_platform_prefix=x86_64-linux-android
711         android_gnu_prefix=$android_platform_prefix
712         LLVM_TRIPLE=$android_platform_prefix
713         # minimum android version that supports x86_64
714         ANDROID_API_LEVEL=21
715         ANDROID_APP_ABI=x86_64
716     else
717         # host_cpu is something like "i386" or "i686" I guess, NDK uses
718         # "x86" in some contexts
719         android_cpu=x86
720         android_platform_prefix=$android_cpu
721         android_gnu_prefix=i686-linux-android
722         LLVM_TRIPLE=$android_gnu_prefix
723         ANDROID_APP_ABI=x86
724     fi
726     case "$with_android_ndk_toolchain_version" in
727     clang5.0)
728         ANDROID_GCC_TOOLCHAIN_VERSION=4.9
729         ;;
730     *)
731         AC_MSG_ERROR([Unrecognized value for the --with-android-ndk-toolchain-version option. Building for Android is only supported with Clang 5.*])
732     esac
734     AC_MSG_NOTICE([using the Android API level... $ANDROID_API_LEVEL])
736     # NDK 15 or later toolchain is 64bit-only, except for Windows that we don't support. Using a 64-bit
737     # linker is required if you compile large parts of the code with -g. A 32-bit linker just won't
738     # manage to link the (app-specific) single huge .so that is built for the app in
739     # android/source/ if there is debug information in a significant part of the object files.
740     # (A 64-bit ld.gold grows too much over 10 gigabytes of virtual space when linking such a .so if
741     # all objects have been built with debug information.)
742     case $build_os in
743     linux-gnu*)
744         android_HOST_TAG=linux-x86_64
745         ;;
746     darwin*)
747         android_HOST_TAG=darwin-x86_64
748         ;;
749     *)
750         AC_MSG_ERROR([We only support building for Android from Linux or macOS])
751         # ndk would also support windows and windows-x86_64
752         ;;
753     esac
754     android_TOOLCHAIN=$ANDROID_NDK_DIR/toolchains/llvm/prebuilt/$android_HOST_TAG
755     ANDROID_COMPILER_BIN=$android_TOOLCHAIN/bin
756     dnl TODO: NSS build uses it...
757     ANDROID_BINUTILS_PREBUILT_ROOT=$ANDROID_NDK_DIR/toolchains/$android_platform_prefix-$ANDROID_GCC_TOOLCHAIN_VERSION/prebuilt/$android_HOST_TAG
758     AC_SUBST(ANDROID_BINUTILS_PREBUILT_ROOT)
760     test -z "$AR" && AR=$ANDROID_COMPILER_BIN/$android_gnu_prefix-ar
761     test -z "$NM" && NM=$ANDROID_COMPILER_BIN/$android_gnu_prefix-nm
762     test -z "$OBJDUMP" && OBJDUMP=$ANDROID_COMPILER_BIN/$android_gnu_prefix-objdump
763     test -z "$RANLIB" && RANLIB=$ANDROID_COMPILER_BIN/$android_gnu_prefix-ranlib
764     test -z "$STRIP" && STRIP=$ANDROID_COMPILER_BIN/$android_gnu_prefix-strip
766     ANDROIDCFLAGS="$ANDROIDCFLAGS -target ${LLVM_TRIPLE}${ANDROID_API_LEVEL}"
767     ANDROIDCFLAGS="$ANDROIDCFLAGS -no-canonical-prefixes -ffunction-sections -fdata-sections -Qunused-arguments"
768     if test "$ENABLE_LTO" = TRUE; then
769         # -flto comes from com_GCC_defs.mk, too, but we need to make sure it gets passed as part of
770         # $CC and $CXX when building external libraries
771         ANDROIDCFLAGS="$ANDROIDCFLAGS -flto -fuse-linker-plugin -O2"
772     fi
774     ANDROIDCXXFLAGS="$ANDROIDCFLAGS -stdlib=libc++"
776     if test -z "$CC"; then
777         CC="$ANDROID_COMPILER_BIN/clang $ANDROIDCFLAGS"
778         CC_BASE="clang"
779     fi
780     if test -z "$CXX"; then
781         CXX="$ANDROID_COMPILER_BIN/clang++ $ANDROIDCXXFLAGS"
782         CXX_BASE="clang++"
783     fi
785 AC_SUBST(ANDROID_NDK_DIR)
786 AC_SUBST(ANDROID_APP_ABI)
787 AC_SUBST(ANDROID_GCC_TOOLCHAIN_VERSION)
789 dnl ===================================================================
790 dnl --with-android-sdk
791 dnl ===================================================================
792 ANDROID_SDK_DIR=
793 if test -z "$with_android_sdk" -a -e "$SRC_ROOT/external/android-sdk-linux" -a "$build" != "$host"; then
794     with_android_sdk="$SRC_ROOT/external/android-sdk-linux"
796 if test -n "$with_android_sdk"; then
797     eval ANDROID_SDK_DIR=$with_android_sdk
798     PATH="$ANDROID_SDK_DIR/platform-tools:$ANDROID_SDK_DIR/tools:$PATH"
800 AC_SUBST(ANDROID_SDK_DIR)
802 AC_ARG_ENABLE([android-lok],
803     AS_HELP_STRING([--enable-android-lok],
804         [The Android app from the android/ subdir needs several tweaks all
805          over the place that break the LOK when used in the Online-based
806          Android app.  This switch indicates that the intent of this build is
807          actually the Online-based, non-modified LOK.])
809 ENABLE_ANDROID_LOK=
810 if test -n "$ANDROID_NDK_DIR" ; then
811     if test "$enable_android_lok" = yes; then
812         ENABLE_ANDROID_LOK=TRUE
813         AC_DEFINE(HAVE_FEATURE_ANDROID_LOK)
814         AC_MSG_NOTICE([building the Android version... for the Online-based Android app])
815     else
816         AC_MSG_NOTICE([building the Android version... for the app from the android/ subdir])
817     fi
819 AC_SUBST([ENABLE_ANDROID_LOK])
821 libo_FUZZ_ARG_ENABLE([android-editing],
822     AS_HELP_STRING([--enable-android-editing],
823         [Enable the experimental editing feature on Android.])
825 ENABLE_ANDROID_EDITING=
826 if test "$enable_android_editing" = yes; then
827     ENABLE_ANDROID_EDITING=TRUE
829 AC_SUBST([ENABLE_ANDROID_EDITING])
831 disable_database_connectivity_dependencies()
833     enable_evolution2=no
834     enable_firebird_sdbc=no
835     enable_mariadb_sdbc=no
836     enable_postgresql_sdbc=no
837     enable_report_builder=no
840 # ===================================================================
842 # Start initial platform setup
844 # The using_* variables reflect platform support and should not be
845 # changed after the "End initial platform setup" block.
846 # This is also true for most test_* variables.
847 # ===================================================================
848 build_crypto=yes
849 test_clucene=no
850 test_gdb_index=no
851 test_openldap=yes
852 test_split_debug=no
853 test_webdav=yes
854 usable_dlapi=yes
856 # There is currently just iOS not using salplug, so this explicitly enables it.
857 # must: using_freetype_fontconfig
858 #  may: using_headless_plugin defaults to $using_freetype_fontconfig
859 # must: using_x11
861 # Default values, as such probably valid just for Linux, set
862 # differently below just for Mac OSX, but at least better than
863 # hardcoding these as we used to do. Much of this is duplicated also
864 # in solenv for old build system and for gbuild, ideally we should
865 # perhaps define stuff like this only here in configure.ac?
867 LINKFLAGSSHL="-shared"
868 PICSWITCH="-fpic"
869 DLLPOST=".so"
871 LINKFLAGSNOUNDEFS="-Wl,-z,defs"
873 INSTROOTBASESUFFIX=
874 INSTROOTCONTENTSUFFIX=
875 SDKDIRNAME=sdk
877 HOST_PLATFORM="$host"
879 host_cpu_for_clang="$host_cpu"
881 case "$host_os" in
883 solaris*)
884     using_freetype_fontconfig=yes
885     using_x11=yes
886     build_skia=yes
887     _os=SunOS
889     dnl ===========================================================
890     dnl Check whether we're using Solaris 10 - SPARC or Intel.
891     dnl ===========================================================
892     AC_MSG_CHECKING([the Solaris operating system release])
893     _os_release=`echo $host_os | $SED -e s/solaris2\.//`
894     if test "$_os_release" -lt "10"; then
895         AC_MSG_ERROR([use Solaris >= 10 to build LibreOffice])
896     else
897         AC_MSG_RESULT([ok ($_os_release)])
898     fi
900     dnl Check whether we're using a SPARC or i386 processor
901     AC_MSG_CHECKING([the processor type])
902     if test "$host_cpu" = "sparc" -o "$host_cpu" = "i386"; then
903         AC_MSG_RESULT([ok ($host_cpu)])
904     else
905         AC_MSG_ERROR([only SPARC and i386 processors are supported])
906     fi
907     ;;
909 linux-gnu*|k*bsd*-gnu*|linux-musl*)
910     using_freetype_fontconfig=yes
911     using_x11=yes
912     build_skia=yes
913     test_gdb_index=yes
914     test_split_debug=yes
915     if test "$enable_fuzzers" = yes; then
916         test_system_freetype=no
917     fi
918     _os=Linux
919     ;;
921 gnu)
922     using_freetype_fontconfig=yes
923     using_x11=no
924     _os=GNU
925      ;;
927 cygwin*|wsl*)
928     # When building on Windows normally with MSVC under Cygwin,
929     # configure thinks that the host platform (the platform the
930     # built code will run on) is Cygwin, even if it obviously is
931     # Windows, which in Autoconf terminology is called
932     # "mingw32". (Which is misleading as MinGW is the name of the
933     # tool-chain, not an operating system.)
935     # Somewhat confusing, yes. But this configure script doesn't
936     # look at $host etc that much, it mostly uses its own $_os
937     # variable, set here in this case statement.
939     using_freetype_fontconfig=no
940     using_x11=no
941     test_unix_dlapi=no
942     test_openldap=no
943     test_eot=no
944     enable_pagein=no
945     build_skia=yes
946     _os=WINNT
948     DLLPOST=".dll"
949     LINKFLAGSNOUNDEFS=
951     if test "$host_cpu" = "aarch64"; then
952         build_skia=no
953         enable_gpgmepp=no
954         enable_coinmp=no
955         enable_firebird_sdbc=no
956     fi
957     ;;
959 darwin*) # macOS
960     using_freetype_fontconfig=no
961     using_x11=no
962     build_skia=yes
963     enable_pagein=no
964     test_eot=no
965     if test -n "$LODE_HOME" ; then
966         mac_sanitize_path
967         AC_MSG_NOTICE([sanitized the PATH to $PATH])
968     fi
969     _os=Darwin
970     INSTROOTBASESUFFIX=/$PRODUCTNAME_WITHOUT_SPACES.app
971     INSTROOTCONTENTSUFFIX=/Contents
972     SDKDIRNAME=${PRODUCTNAME_WITHOUT_SPACES}${PRODUCTVERSION}_SDK
973     # See "Default values, as such probably valid just for Linux" comment above the case "$host_os"
974     LINKFLAGSSHL="-dynamiclib -single_module"
976     # -fPIC is default
977     PICSWITCH=""
979     DLLPOST=".dylib"
981     # -undefined error is the default
982     LINKFLAGSNOUNDEFS=""
983     case "$host_cpu" in
984     aarch64|arm64)
985         # Apple's Clang uses "arm64"
986         host_cpu_for_clang=arm64
987     esac
990 ios*) # iOS
991     using_freetype_fontconfig=no
992     using_x11=no
993     build_crypto=no
994     test_libcmis=no
995     test_openldap=no
996     test_webdav=no
997     if test -n "$LODE_HOME" ; then
998         mac_sanitize_path
999         AC_MSG_NOTICE([sanitized the PATH to $PATH])
1000     fi
1001     enable_gpgmepp=no
1002     _os=iOS
1003     enable_mpl_subset=yes
1004     enable_lotuswordpro=no
1005     disable_database_connectivity_dependencies
1006     enable_coinmp=no
1007     enable_lpsolve=no
1008     enable_extension_integration=no
1009     enable_xmlhelp=no
1010     with_ppds=no
1011     if test "$enable_ios_simulator" = "yes"; then
1012         host=x86_64-apple-darwin
1013     fi
1014     # See "Default values, as such probably valid just for Linux" comment above the case "$host_os"
1015     LINKFLAGSSHL="-dynamiclib -single_module"
1017     # -fPIC is default
1018     PICSWITCH=""
1020     DLLPOST=".dylib"
1022     # -undefined error is the default
1023     LINKFLAGSNOUNDEFS=""
1025     # HOST_PLATFORM is used for external projects and their configury typically doesn't like the "ios"
1026     # part, so use aarch64-apple-darwin for now.
1027     HOST_PLATFORM=aarch64-apple-darwin
1029     # Apple's Clang uses "arm64"
1030     host_cpu_for_clang=arm64
1033 freebsd*)
1034     using_freetype_fontconfig=yes
1035     using_x11=yes
1036     build_skia=yes
1037     AC_MSG_CHECKING([the FreeBSD operating system release])
1038     if test -n "$with_os_version"; then
1039         OSVERSION="$with_os_version"
1040     else
1041         OSVERSION=`/sbin/sysctl -n kern.osreldate`
1042     fi
1043     AC_MSG_RESULT([found OSVERSION=$OSVERSION])
1044     AC_MSG_CHECKING([which thread library to use])
1045     if test "$OSVERSION" -lt "500016"; then
1046         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1047         PTHREAD_LIBS="-pthread"
1048     elif test "$OSVERSION" -lt "502102"; then
1049         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1050         PTHREAD_LIBS="-lc_r"
1051     else
1052         PTHREAD_CFLAGS=""
1053         PTHREAD_LIBS="-pthread"
1054     fi
1055     AC_MSG_RESULT([$PTHREAD_LIBS])
1056     _os=FreeBSD
1057     ;;
1059 *netbsd*)
1060     using_freetype_fontconfig=yes
1061     using_x11=yes
1062     test_gtk3_kde5=no
1063     build_skia=yes
1064     PTHREAD_LIBS="-pthread -lpthread"
1065     _os=NetBSD
1066     ;;
1068 aix*)
1069     using_freetype_fontconfig=yes
1070     using_x11=yes
1071     test_randr=no
1072     test_gstreamer_1_0=no
1073     PTHREAD_LIBS=-pthread
1074     _os=AIX
1075     ;;
1077 openbsd*)
1078     using_freetype_fontconfig=yes
1079     using_x11=yes
1080     PTHREAD_CFLAGS="-D_THREAD_SAFE"
1081     PTHREAD_LIBS="-pthread"
1082     _os=OpenBSD
1083     ;;
1085 dragonfly*)
1086     using_freetype_fontconfig=yes
1087     using_x11=yes
1088     build_skia=yes
1089     PTHREAD_LIBS="-pthread"
1090     _os=DragonFly
1091     ;;
1093 linux-android*)
1094     # API exists, but seems not really usable since Android 7 AFAIK
1095     usable_dlapi=no
1096     using_freetype_fontconfig=yes
1097     using_headless_plugin=no
1098     using_x11=no
1099     build_crypto=no
1100     test_openldap=no
1101     test_system_freetype=no
1102     test_webdav=no
1103     disable_database_connectivity_dependencies
1104     enable_lotuswordpro=no
1105     enable_mpl_subset=yes
1106     enable_cairo_canvas=no
1107     enable_coinmp=yes
1108     enable_lpsolve=no
1109     enable_odk=no
1110     enable_python=no
1111     enable_xmlhelp=no
1112     _os=Android
1113     ;;
1115 haiku*)
1116     using_freetype_fontconfig=yes
1117     using_x11=no
1118     test_gtk3=no
1119     test_gtk3_kde5=no
1120     test_kf5=yes
1121     enable_odk=no
1122     enable_coinmp=no
1123     enable_pdfium=no
1124     enable_sdremote=no
1125     enable_postgresql_sdbc=no
1126     enable_firebird_sdbc=no
1127     _os=Haiku
1128     ;;
1130 emscripten)
1131     # API currently just exists in headers, not code
1132     usable_dlapi=no
1133     using_freetype_fontconfig=yes
1134     using_x11=no
1135     test_openldap=no
1136     test_qt5=yes
1137     test_split_debug=yes
1138     test_system_freetype=no
1139     enable_compiler_plugins=no
1140     enable_customtarget_components=yes
1141     enable_qt5=yes
1142     enable_scripting=no
1143     enable_split_debug=yes
1144     enable_wasm_strip=yes
1145     with_system_zlib=no
1146     with_theme="colibre"
1147     _os=Emscripten
1148     ;;
1151     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
1152     ;;
1153 esac
1155 AC_SUBST(HOST_PLATFORM)
1157 if test -z "$using_x11" -o -z "$using_freetype_fontconfig"; then
1158     AC_MSG_ERROR([You must set \$using_freetype_fontconfig and \$using_x11 for your platform])
1161 # Set defaults, if not set by platform
1162 test "${test_cups+set}" = set || test_cups="$using_x11"
1163 test "${test_dbus+set}" = set || test_dbus="$using_x11"
1164 test "${test_gen+set}" = set || test_gen="$using_x11"
1165 test "${test_gstreamer_1_0+set}" = set || test_gstreamer_1_0="$using_x11"
1166 test "${test_gtk3+set}" = set || test_gtk3="$using_x11"
1167 test "${test_gtk4+set}" = set || test_gtk4="$using_x11"
1168 test "${test_kf5+set}" = set || test_kf5="$using_x11"
1169 # don't handle test_qt5, so it can disable test_kf5 later
1170 test "${test_qt6+set}" = set || test_qt6="$using_x11"
1171 test "${test_randr+set}" = set || test_randr="$using_x11"
1172 test "${test_xrender+set}" = set || test_xrender="$using_x11"
1173 test "${using_headless_plugin+set}" = set || using_headless_plugin="$using_freetype_fontconfig"
1175 test "${test_gtk3_kde5+set}" != set -a "$test_kf5" = yes -a "$test_gtk3" = yes && test_gtk3_kde5="yes"
1176 # Make sure fontconfig and freetype test both either system or not
1177 test "${test_system_fontconfig+set}" != set -a "${test_system_freetype+set}" = set && test_system_fontconfig="$test_system_freetype"
1178 test "${test_system_freetype+set}" != set -a "${test_system_fontconfig+set}" = set && test_system_freetype="$test_system_fontconfig"
1180 # convenience / platform overriding "fixes"
1181 # Don't sort!
1182 test "$test_kf5" = yes -a "$test_qt5" = no && test_kf5=no
1183 test "$test_kf5" = yes && test_qt5=yes
1184 test "$test_gtk3" != yes && enable_gtk3=no
1185 test "$test_gtk3" != yes -o "$test_kf5" != yes && test_gtk3_kde5=no
1186 test "$using_freetype_fontconfig" = no && using_headless_plugin=no
1187 test "$using_freetype_fontconfig" = yes && test_cairo=yes
1189 # Keep in sync with the above $using_x11 depending test default list
1190 disable_x11_tests()
1192     test_cups=no
1193     test_dbus=no
1194     test_gen=no
1195     test_gstreamer_1_0=no
1196     test_gtk3_kde5=no
1197     test_gtk3=no
1198     test_gtk4=no
1199     test_kf5=no
1200     test_qt5=no
1201     test_qt6=no
1202     test_randr=no
1203     test_xrender=no
1206 test "$using_x11" = yes && USING_X11=TRUE
1208 if test "$using_freetype_fontconfig" = yes; then
1209     USE_HEADLESS_CODE=TRUE
1210     if test "$using_headless_plugin" = yes; then
1211         AC_DEFINE(ENABLE_HEADLESS)
1212         ENABLE_HEADLESS=TRUE
1213     fi
1214 else
1215     test_fontconfig=no
1216     test_freetype=no
1219 AC_SUBST(ENABLE_HEADLESS)
1220 AC_SUBST(USE_HEADLESS_CODE)
1222 AC_MSG_NOTICE([VCL platform has a usable dynamic loading API: $usable_dlapi])
1223 AC_MSG_NOTICE([VCL platform uses freetype+fontconfig: $using_freetype_fontconfig])
1224 AC_MSG_NOTICE([VCL platform uses headless plugin: $using_headless_plugin])
1225 AC_MSG_NOTICE([VCL platform uses X11: $using_x11])
1227 # ===================================================================
1229 # End initial platform setup
1231 # ===================================================================
1233 if test "$_os" = "Android" ; then
1234     # Verify that the NDK and SDK options are proper
1235     if test -z "$with_android_ndk"; then
1236         AC_MSG_ERROR([the --with-android-ndk option is mandatory, unless it is available at external/android-ndk/.])
1237     elif test ! -f "$ANDROID_NDK_DIR/meta/abis.json"; then
1238         AC_MSG_ERROR([the --with-android-ndk option does not point to an Android NDK])
1239     fi
1241     if test -z "$ANDROID_SDK_DIR"; then
1242         AC_MSG_ERROR([the --with-android-sdk option is mandatory, unless it is available at external/android-sdk-linux/.])
1243     elif test ! -d "$ANDROID_SDK_DIR/platforms"; then
1244         AC_MSG_ERROR([the --with-android-sdk option does not point to an Android SDK])
1245     fi
1248 if test "$_os" = "AIX"; then
1249     AC_PATH_PROG(GAWK, gawk)
1250     if test -z "$GAWK"; then
1251         AC_MSG_ERROR([gawk not found in \$PATH])
1252     fi
1255 AC_SUBST(SDKDIRNAME)
1257 AC_SUBST(PTHREAD_CFLAGS)
1258 AC_SUBST(PTHREAD_LIBS)
1260 # Check for explicit A/C/CXX/OBJC/OBJCXX/LDFLAGS.
1261 # By default use the ones specified by our build system,
1262 # but explicit override is possible.
1263 AC_MSG_CHECKING(for explicit AFLAGS)
1264 if test -n "$AFLAGS"; then
1265     AC_MSG_RESULT([$AFLAGS])
1266     x_AFLAGS=
1267 else
1268     AC_MSG_RESULT(no)
1269     x_AFLAGS=[\#]
1271 AC_MSG_CHECKING(for explicit CFLAGS)
1272 if test -n "$CFLAGS"; then
1273     AC_MSG_RESULT([$CFLAGS])
1274     x_CFLAGS=
1275 else
1276     AC_MSG_RESULT(no)
1277     x_CFLAGS=[\#]
1279 AC_MSG_CHECKING(for explicit CXXFLAGS)
1280 if test -n "$CXXFLAGS"; then
1281     AC_MSG_RESULT([$CXXFLAGS])
1282     x_CXXFLAGS=
1283 else
1284     AC_MSG_RESULT(no)
1285     x_CXXFLAGS=[\#]
1287 AC_MSG_CHECKING(for explicit OBJCFLAGS)
1288 if test -n "$OBJCFLAGS"; then
1289     AC_MSG_RESULT([$OBJCFLAGS])
1290     x_OBJCFLAGS=
1291 else
1292     AC_MSG_RESULT(no)
1293     x_OBJCFLAGS=[\#]
1295 AC_MSG_CHECKING(for explicit OBJCXXFLAGS)
1296 if test -n "$OBJCXXFLAGS"; then
1297     AC_MSG_RESULT([$OBJCXXFLAGS])
1298     x_OBJCXXFLAGS=
1299 else
1300     AC_MSG_RESULT(no)
1301     x_OBJCXXFLAGS=[\#]
1303 AC_MSG_CHECKING(for explicit LDFLAGS)
1304 if test -n "$LDFLAGS"; then
1305     AC_MSG_RESULT([$LDFLAGS])
1306     x_LDFLAGS=
1307 else
1308     AC_MSG_RESULT(no)
1309     x_LDFLAGS=[\#]
1311 AC_SUBST(AFLAGS)
1312 AC_SUBST(CFLAGS)
1313 AC_SUBST(CXXFLAGS)
1314 AC_SUBST(OBJCFLAGS)
1315 AC_SUBST(OBJCXXFLAGS)
1316 AC_SUBST(LDFLAGS)
1317 AC_SUBST(x_AFLAGS)
1318 AC_SUBST(x_CFLAGS)
1319 AC_SUBST(x_CXXFLAGS)
1320 AC_SUBST(x_OBJCFLAGS)
1321 AC_SUBST(x_OBJCXXFLAGS)
1322 AC_SUBST(x_LDFLAGS)
1324 dnl These are potentially set for MSVC, in the code checking for UCRT below:
1325 my_original_CFLAGS=$CFLAGS
1326 my_original_CXXFLAGS=$CXXFLAGS
1327 my_original_CPPFLAGS=$CPPFLAGS
1329 dnl The following checks for gcc, cc and then cl (if it weren't guarded for win32)
1330 dnl Needs to precede the AC_C_BIGENDIAN and AC_SEARCH_LIBS calls below, which apparently call
1331 dnl AC_PROG_CC internally.
1332 if test "$_os" != "WINNT"; then
1333     # AC_PROG_CC sets CFLAGS to -g -O2 if not set, avoid that
1334     save_CFLAGS=$CFLAGS
1335     AC_PROG_CC
1336     CFLAGS=$save_CFLAGS
1337     if test -z "$CC_BASE"; then
1338         CC_BASE=`first_arg_basename "$CC"`
1339     fi
1342 if test "$_os" != "WINNT"; then
1343     AC_C_BIGENDIAN([ENDIANNESS=big], [ENDIANNESS=little])
1344 else
1345     ENDIANNESS=little
1347 AC_SUBST(ENDIANNESS)
1349 if test "$usable_dlapi" != no; then
1350     AC_DEFINE([HAVE_DLAPI])
1351     if test "$test_unix_dlapi" != no; then
1352         save_LIBS="$LIBS"
1353         AC_SEARCH_LIBS([dlsym], [dl],
1354             [case "$ac_cv_search_dlsym" in -l*) UNIX_DLAPI_LIBS="$ac_cv_search_dlsym";; esac],
1355             [AC_MSG_ERROR([dlsym not found in either libc nor libdl])])
1356         LIBS="$save_LIBS"
1357         AC_DEFINE([HAVE_UNIX_DLAPI])
1358     fi
1360 AC_SUBST(UNIX_DLAPI_LIBS)
1362 # Check for a (GNU) backtrace implementation
1363 AC_ARG_VAR([BACKTRACE_CFLAGS], [Compiler flags needed to use backtrace(3)])
1364 AC_ARG_VAR([BACKTRACE_LIBS], [Linker flags needed to use backtrace(3)])
1365 AS_IF([test "x$BACKTRACE_LIBS$BACKTRACE_CFLAGS" = x], [
1366     save_LIBS="$LIBS"
1367     AC_SEARCH_LIBS([backtrace], [libexecinfo],
1368         [case "$ac_cv_search_backtrace" in -l*) BACKTRACE_LIBS="$ac_cv_search_backtrace";; esac],
1369         [PKG_CHECK_MODULES([BACKTRACE], [libexecinfo], [ac_cv_search_backtrace=], [:])])
1370     LIBS="$save_LIBS"
1372 AS_IF([test "x$ac_cv_search_backtrace" != xno ], [
1373     AC_DEFINE([HAVE_FEATURE_BACKTRACE])
1376 dnl ===================================================================
1377 dnl Sanity checks for Emscripten SDK setup
1378 dnl ===================================================================
1380 EMSCRIPTEN_MIN_MAJOR=2
1381 EMSCRIPTEN_MIN_MINOR=0
1382 EMSCRIPTEN_MIN_TINY=31
1383 EMSCRIPTEN_MIN_VERSION="${EMSCRIPTEN_MIN_MAJOR}.${EMSCRIPTEN_MIN_MINOR}.${EMSCRIPTEN_MIN_TINY}"
1385 if test "$_os" = "Emscripten"; then
1386     AC_MSG_CHECKING([if Emscripten is at least $EMSCRIPTEN_MIN_VERSION])
1387     EMSCRIPTEN_DEFINES=$(echo | emcc -dM -E - | $GREP __EMSCRIPTEN_)
1388     EMSCRIPTEN_MAJOR=$(echo "$EMSCRIPTEN_DEFINES" | $SED -ne 's/.*__EMSCRIPTEN_major__ //p')
1389     EMSCRIPTEN_MINOR=$(echo "$EMSCRIPTEN_DEFINES" | $SED -ne 's/.*__EMSCRIPTEN_minor__ //p')
1390     EMSCRIPTEN_TINY=$(echo "$EMSCRIPTEN_DEFINES" | $SED -ne 's/.*__EMSCRIPTEN_tiny__ //p')
1391     EMSCRIPTEN_VERSION="${EMSCRIPTEN_MAJOR}.${EMSCRIPTEN_MINOR}.${EMSCRIPTEN_TINY}"
1393     check_semantic_version_three_prefixed EMSCRIPTEN MIN
1394     if test $? -eq 0; then
1395         AC_MSG_RESULT([yes ($EMSCRIPTEN_VERSION)])
1396     else
1397         AC_MSG_ERROR([no, found $EMSCRIPTEN_VERSION])
1398     fi
1400     EMSCRIPTEN_ERROR=0
1401     if ! which emconfigure >/dev/null 2>&1; then
1402         AC_MSG_WARN([emconfigure must be in your \$PATH])
1403         EMSCRIPTEN_ERROR=1
1404     fi
1405     if test -z "$EMMAKEN_JUST_CONFIGURE"; then
1406         AC_MSG_WARN(["\$EMMAKEN_JUST_CONFIGURE wasn't set by emconfigure. Prefix configure or use autogen.sh])
1407         EMSCRIPTEN_ERROR=1
1408     fi
1409     EMSDK_FILE_PACKAGER="$(em-config EMSCRIPTEN_ROOT)"/tools/file_packager
1410     if ! test -x "$EMSDK_FILE_PACKAGER"; then
1411         AC_MSG_WARN([No file_packager found in $(em-config EMSCRIPTEN_ROOT)/tools/file_packager.])
1412         EMSCRIPTEN_ERROR=1
1413     fi
1414     if test $EMSCRIPTEN_ERROR -ne 0; then
1415         AC_MSG_ERROR(["Please fix your EMSDK setup to build with Emscripten!"])
1416     fi
1418 AC_SUBST(EMSDK_FILE_PACKAGER)
1420 ###############################################################################
1421 # Extensions switches --enable/--disable
1422 ###############################################################################
1423 # By default these should be enabled unless having extra dependencies.
1424 # If there is extra dependency over configure options then the enable should
1425 # be automagic based on whether the requiring feature is enabled or not.
1426 # All this options change anything only with --enable-extension-integration.
1428 # The name of this option and its help string makes it sound as if
1429 # extensions are built anyway, just not integrated in the installer,
1430 # if you use --disable-extension-integration. Is that really the
1431 # case?
1433 AC_ARG_ENABLE(ios-simulator,
1434     AS_HELP_STRING([--enable-ios-simulator],
1435         [build for iOS simulator])
1438 libo_FUZZ_ARG_ENABLE(extension-integration,
1439     AS_HELP_STRING([--disable-extension-integration],
1440         [Disable integration of the built extensions in the installer of the
1441          product. Use this switch to disable the integration.])
1444 AC_ARG_ENABLE(avmedia,
1445     AS_HELP_STRING([--disable-avmedia],
1446         [Disable displaying and inserting AV media in documents. Work in progress, use only if you are hacking on it.]),
1447 ,test "${enable_avmedia+set}" = set || enable_avmedia=yes)
1449 AC_ARG_ENABLE(database-connectivity,
1450     AS_HELP_STRING([--disable-database-connectivity],
1451         [Disable various database connectivity. Work in progress, use only if you are hacking on it.])
1454 # This doesn't mean not building (or "integrating") extensions
1455 # (although it probably should; i.e. it should imply
1456 # --disable-extension-integration I guess), it means not supporting
1457 # any extension mechanism at all
1458 libo_FUZZ_ARG_ENABLE(extensions,
1459     AS_HELP_STRING([--disable-extensions],
1460         [Disable all add-on extension functionality. Work in progress, use only if you are hacking on it.])
1463 AC_ARG_ENABLE(scripting,
1464     AS_HELP_STRING([--disable-scripting],
1465         [Disable BASIC, Java and Python. Work in progress, use only if you are hacking on it.]),
1466 ,test "${enable_scripting+set}" = set || enable_scripting=yes)
1468 # This is mainly for Android and iOS, but could potentially be used in some
1469 # special case otherwise, too, so factored out as a separate setting
1471 AC_ARG_ENABLE(dynamic-loading,
1472     AS_HELP_STRING([--disable-dynamic-loading],
1473         [Disable any use of dynamic loading of code. Work in progress, use only if you are hacking on it.])
1476 libo_FUZZ_ARG_ENABLE(report-builder,
1477     AS_HELP_STRING([--disable-report-builder],
1478         [Disable the Report Builder.])
1481 libo_FUZZ_ARG_ENABLE(ext-wiki-publisher,
1482     AS_HELP_STRING([--enable-ext-wiki-publisher],
1483         [Enable the Wiki Publisher extension.])
1486 libo_FUZZ_ARG_ENABLE(lpsolve,
1487     AS_HELP_STRING([--disable-lpsolve],
1488         [Disable compilation of the lp solve solver ])
1490 libo_FUZZ_ARG_ENABLE(coinmp,
1491     AS_HELP_STRING([--disable-coinmp],
1492         [Disable compilation of the CoinMP solver ])
1495 libo_FUZZ_ARG_ENABLE(pdfimport,
1496     AS_HELP_STRING([--disable-pdfimport],
1497         [Disable building the PDF import feature.])
1500 libo_FUZZ_ARG_ENABLE(pdfium,
1501     AS_HELP_STRING([--disable-pdfium],
1502         [Disable building PDFium. Results in unsecure PDF signature verification.])
1505 libo_FUZZ_ARG_ENABLE(skia,
1506     AS_HELP_STRING([--disable-skia],
1507         [Disable building Skia. Use --enable-skia=debug to build without optimizations.])
1510 ###############################################################################
1512 dnl ---------- *** ----------
1514 libo_FUZZ_ARG_ENABLE(mergelibs,
1515     AS_HELP_STRING([--enable-mergelibs],
1516         [Merge several of the smaller libraries into one big, "merged", one.])
1519 libo_FUZZ_ARG_ENABLE(breakpad,
1520     AS_HELP_STRING([--enable-breakpad],
1521         [Enables breakpad for crash reporting.])
1524 libo_FUZZ_ARG_ENABLE(crashdump,
1525     AS_HELP_STRING([--disable-crashdump],
1526         [Disable dump.ini and dump-file, when --enable-breakpad])
1529 AC_ARG_ENABLE(fetch-external,
1530     AS_HELP_STRING([--disable-fetch-external],
1531         [Disables fetching external tarballs from web sources.])
1534 AC_ARG_ENABLE(fuzzers,
1535     AS_HELP_STRING([--enable-fuzzers],
1536         [Enables building libfuzzer targets for fuzz testing.])
1539 libo_FUZZ_ARG_ENABLE(pch,
1540     AS_HELP_STRING([--enable-pch=<yes/no/system/base/normal/full>],
1541         [Enables precompiled header support for C++. Forced default on Windows/VC build.
1542          Using 'system' will include only external headers, 'base' will add also headers
1543          from base modules, 'normal' will also add all headers except from the module built,
1544          'full' will use all suitable headers even from a module itself.])
1547 libo_FUZZ_ARG_ENABLE(epm,
1548     AS_HELP_STRING([--enable-epm],
1549         [LibreOffice includes self-packaging code, that requires epm, however epm is
1550          useless for large scale package building.])
1553 libo_FUZZ_ARG_ENABLE(odk,
1554     AS_HELP_STRING([--enable-odk],
1555         [Enable building the Office Development Kit, the part that extensions need to build against])
1558 AC_ARG_ENABLE(mpl-subset,
1559     AS_HELP_STRING([--enable-mpl-subset],
1560         [Don't compile any pieces which are not MPL or more liberally licensed])
1563 libo_FUZZ_ARG_ENABLE(evolution2,
1564     AS_HELP_STRING([--enable-evolution2],
1565         [Allows the built-in evolution 2 addressbook connectivity build to be
1566          enabled.])
1569 AC_ARG_ENABLE(avahi,
1570     AS_HELP_STRING([--enable-avahi],
1571         [Determines whether to use Avahi to advertise Impress to remote controls.])
1574 libo_FUZZ_ARG_ENABLE(werror,
1575     AS_HELP_STRING([--enable-werror],
1576         [Turn warnings to errors. (Has no effect in modules where the treating
1577          of warnings as errors is disabled explicitly.)]),
1580 libo_FUZZ_ARG_ENABLE(assert-always-abort,
1581     AS_HELP_STRING([--enable-assert-always-abort],
1582         [make assert() failures abort even when building without --enable-debug or --enable-dbgutil.]),
1585 libo_FUZZ_ARG_ENABLE(dbgutil,
1586     AS_HELP_STRING([--enable-dbgutil],
1587         [Provide debugging support from --enable-debug and include additional debugging
1588          utilities such as object counting or more expensive checks.
1589          This is the recommended option for developers.
1590          Note that this makes the build ABI incompatible, it is not possible to mix object
1591          files or libraries from a --enable-dbgutil and a --disable-dbgutil build.]))
1593 libo_FUZZ_ARG_ENABLE(debug,
1594     AS_HELP_STRING([--enable-debug],
1595         [Include debugging information, disable compiler optimization and inlining plus
1596          extra debugging code like assertions. Extra large build! (enables -g compiler flag).]))
1598 libo_FUZZ_ARG_ENABLE(split-debug,
1599     AS_HELP_STRING([--disable-split-debug],
1600         [Disable using split debug information (-gsplit-dwarf compile flag). Split debug information
1601          saves disk space and build time, but requires tools that support it (both build tools and debuggers).]))
1603 libo_FUZZ_ARG_ENABLE(gdb-index,
1604     AS_HELP_STRING([--disable-gdb-index],
1605         [Disables creating debug information in the gdb index format, which makes gdb start faster.
1606          The feature requires a linker that supports the --gdb-index option.]))
1608 libo_FUZZ_ARG_ENABLE(sal-log,
1609     AS_HELP_STRING([--enable-sal-log],
1610         [Make SAL_INFO and SAL_WARN calls do something even in a non-debug build.]))
1612 libo_FUZZ_ARG_ENABLE(symbols,
1613     AS_HELP_STRING([--enable-symbols],
1614         [Generate debug information.
1615          By default, enabled for --enable-debug and --enable-dbgutil, disabled
1616          otherwise. It is possible to explicitly specify gbuild build targets
1617          (where 'all' means everything, '-' prepended means to not enable, '/' appended means
1618          everything in the directory; there is no ordering, more specific overrides
1619          more general, and disabling takes precedence).
1620          Example: --enable-symbols="all -sw/ -Library_sc".]))
1622 libo_FUZZ_ARG_ENABLE(optimized,
1623     AS_HELP_STRING([--enable-optimized=<yes/no/debug>],
1624         [Whether to compile with optimization flags.
1625          By default, disabled for --enable-debug and --enable-dbgutil, enabled
1626          otherwise. Using 'debug' will try to use only optimizations that should
1627          not interfere with debugging. For Emscripten we default to optimized (-O1)
1628          debug build, as otherwise binaries become too large.]))
1630 libo_FUZZ_ARG_ENABLE(runtime-optimizations,
1631     AS_HELP_STRING([--disable-runtime-optimizations],
1632         [Statically disable certain runtime optimizations (like rtl/alloc.h or
1633          JVM JIT) that are known to interact badly with certain dynamic analysis
1634          tools (like -fsanitize=address or Valgrind).  By default, disabled iff
1635          CC contains "-fsanitize=*".  (For Valgrind, those runtime optimizations
1636          are typically disabled dynamically via RUNNING_ON_VALGRIND.)]))
1638 AC_ARG_WITH(valgrind,
1639     AS_HELP_STRING([--with-valgrind],
1640         [Make availability of Valgrind headers a hard requirement.]))
1642 libo_FUZZ_ARG_ENABLE(compiler-plugins,
1643     AS_HELP_STRING([--enable-compiler-plugins],
1644         [Enable compiler plugins that will perform additional checks during
1645          building. Enabled automatically by --enable-dbgutil.
1646          Use --enable-compiler-plugins=debug to also enable debug code in the plugins.]))
1647 COMPILER_PLUGINS_DEBUG=
1648 if test "$enable_compiler_plugins" = debug; then
1649     enable_compiler_plugins=yes
1650     COMPILER_PLUGINS_DEBUG=TRUE
1653 libo_FUZZ_ARG_ENABLE(compiler-plugins-analyzer-pch,
1654     AS_HELP_STRING([--disable-compiler-plugins-analyzer-pch],
1655         [Disable use of precompiled headers when running the Clang compiler plugin analyzer.  Not
1656          relevant in the --disable-compiler-plugins case.]))
1658 libo_FUZZ_ARG_ENABLE(ooenv,
1659     AS_HELP_STRING([--enable-ooenv],
1660         [Enable ooenv for the instdir installation.]))
1662 AC_ARG_ENABLE(lto,
1663     AS_HELP_STRING([--enable-lto],
1664         [Enable link-time optimization. Suitable for (optimised) product builds. Building might take
1665          longer but libraries and executables are optimized for speed. For GCC, best to use the 'gold'
1666          linker.)]))
1668 AC_ARG_ENABLE(python,
1669     AS_HELP_STRING([--enable-python=<no/auto/system/internal/fully-internal>],
1670         [Enables or disables Python support at run-time.
1671          Also specifies what Python to use at build-time.
1672          'fully-internal' even forces the internal version for uses of Python
1673          during the build.
1674          On macOS the only choices are
1675          'internal' (default) or 'fully-internal'. Otherwise the default is 'auto'.
1676          ]))
1678 libo_FUZZ_ARG_ENABLE(gtk3,
1679     AS_HELP_STRING([--disable-gtk3],
1680         [Determines whether to use Gtk+ 3.0 vclplug on platforms where Gtk+ 3.0 is available.]),
1681 ,test "${test_gtk3}" = no -o "${enable_gtk3+set}" = set || enable_gtk3=yes)
1683 AC_ARG_ENABLE(gtk4,
1684     AS_HELP_STRING([--enable-gtk4],
1685         [Determines whether to use Gtk+ 4.0 vclplug on platforms where Gtk+ 4.0 is available.]))
1687 AC_ARG_ENABLE(introspection,
1688     AS_HELP_STRING([--enable-introspection],
1689         [Generate files for GObject introspection.  Requires --enable-gtk3.  (Typically used by
1690          Linux distributions.)]))
1692 AC_ARG_ENABLE(split-app-modules,
1693     AS_HELP_STRING([--enable-split-app-modules],
1694         [Split file lists for app modules, e.g. base, calc.
1695          Has effect only with make distro-pack-install]),
1698 AC_ARG_ENABLE(split-opt-features,
1699     AS_HELP_STRING([--enable-split-opt-features],
1700         [Split file lists for some optional features, e.g. pyuno, testtool.
1701          Has effect only with make distro-pack-install]),
1704 libo_FUZZ_ARG_ENABLE(cairo-canvas,
1705     AS_HELP_STRING([--disable-cairo-canvas],
1706         [Determines whether to build the Cairo canvas on platforms where Cairo is available.]),
1709 libo_FUZZ_ARG_ENABLE(dbus,
1710     AS_HELP_STRING([--disable-dbus],
1711         [Determines whether to enable features that depend on dbus.
1712          e.g. Presentation mode screensaver control, bluetooth presentation control, automatic font install]),
1713 ,test "${enable_dbus+set}" = set || enable_dbus=yes)
1715 libo_FUZZ_ARG_ENABLE(sdremote,
1716     AS_HELP_STRING([--disable-sdremote],
1717         [Determines whether to enable Impress remote control (i.e. the server component).]),
1718 ,test "${enable_sdremote+set}" = set || enable_sdremote=yes)
1720 libo_FUZZ_ARG_ENABLE(sdremote-bluetooth,
1721     AS_HELP_STRING([--disable-sdremote-bluetooth],
1722         [Determines whether to build sdremote with bluetooth support.
1723          Requires dbus on Linux.]))
1725 libo_FUZZ_ARG_ENABLE(gio,
1726     AS_HELP_STRING([--disable-gio],
1727         [Determines whether to use the GIO support.]),
1728 ,test "${enable_gio+set}" = set || enable_gio=yes)
1730 AC_ARG_ENABLE(qt5,
1731     AS_HELP_STRING([--enable-qt5],
1732         [Determines whether to use Qt5 vclplug on platforms where Qt5 is
1733          available.]),
1736 AC_ARG_ENABLE(qt6,
1737     AS_HELP_STRING([--enable-qt6],
1738         [Determines whether to use Qt6 vclplug on platforms where Qt6 is
1739          available.]),
1742 AC_ARG_ENABLE(kf5,
1743     AS_HELP_STRING([--enable-kf5],
1744         [Determines whether to use Qt5/KF5 vclplug on platforms where Qt5 and
1745          KF5 are available.]),
1748 AC_ARG_ENABLE(gtk3_kde5,
1749     AS_HELP_STRING([--enable-gtk3-kde5],
1750         [Determines whether to use Gtk3 vclplug with KF5 file dialogs on
1751          platforms where Gtk3, Qt5 and Plasma is available.]),
1754 AC_ARG_ENABLE(gen,
1755     AS_HELP_STRING([--enable-gen],
1756         [To select the gen backend in case of --disable-dynamic-loading.
1757          Per default auto-enabled when X11 is used.]),
1758 ,test "${test_gen}" = no -o "${enable_gen+set}" = set || enable_gen=yes)
1760 AC_ARG_ENABLE(gui,
1761     AS_HELP_STRING([--disable-gui],
1762         [Disable use of X11 or Wayland to reduce dependencies (e.g. for building LibreOfficeKit).]),
1763 ,enable_gui=yes)
1765 libo_FUZZ_ARG_ENABLE(randr,
1766     AS_HELP_STRING([--disable-randr],
1767         [Disable RandR support in the vcl project.]),
1768 ,test "${enable_randr+set}" = set || enable_randr=yes)
1770 libo_FUZZ_ARG_ENABLE(gstreamer-1-0,
1771     AS_HELP_STRING([--disable-gstreamer-1-0],
1772         [Disable building with the gstreamer 1.0 avmedia backend.]),
1773 ,test "${enable_gstreamer_1_0+set}" = set || enable_gstreamer_1_0=yes)
1775 libo_FUZZ_ARG_ENABLE(cve-tests,
1776     AS_HELP_STRING([--disable-cve-tests],
1777         [Prevent CVE tests to be executed]),
1780 libo_FUZZ_ARG_ENABLE(chart-tests,
1781     AS_HELP_STRING([--enable-chart-tests],
1782         [Executes chart XShape tests. In a perfect world these tests would be
1783          stable and everyone could run them, in reality it is best to run them
1784          only on a few machines that are known to work and maintained by people
1785          who can judge if a test failure is a regression or not.]),
1788 AC_ARG_ENABLE(build-opensymbol,
1789     AS_HELP_STRING([--enable-build-opensymbol],
1790         [Do not use the prebuilt opens___.ttf. Build it instead. This needs
1791          fontforge installed.]),
1794 AC_ARG_ENABLE(dependency-tracking,
1795     AS_HELP_STRING([--enable-dependency-tracking],
1796         [Do not reject slow dependency extractors.])[
1797   --disable-dependency-tracking
1798                           Disables generation of dependency information.
1799                           Speed up one-time builds.],
1802 AC_ARG_ENABLE(icecream,
1803     AS_HELP_STRING([--enable-icecream],
1804         [Use the 'icecream' distributed compiling tool to speedup the compilation.
1805          It defaults to /opt/icecream for the location of the icecream gcc/g++
1806          wrappers, you can override that using --with-gcc-home=/the/path switch.]),
1809 AC_ARG_ENABLE(ld,
1810     AS_HELP_STRING([--enable-ld=<linker>],
1811         [Use the specified linker. Both 'gold' and 'lld' linkers generally use less memory and link faster.
1812          By default tries to use the best linker possible, use --disable-ld to use the default linker.
1813          If <linker> contains any ':', the part before the first ':' is used as the value of
1814          -fuse-ld, while the part after the first ':' is used as the value of --ld-path (which is
1815          needed for Clang 12).]),
1818 libo_FUZZ_ARG_ENABLE(cups,
1819     AS_HELP_STRING([--disable-cups],
1820         [Do not build cups support.])
1823 AC_ARG_ENABLE(ccache,
1824     AS_HELP_STRING([--disable-ccache],
1825         [Do not try to use ccache automatically.
1826          By default we will try to detect if ccache is available; in that case if
1827          CC/CXX are not yet set, and --enable-icecream is not given, we
1828          attempt to use ccache. --disable-ccache disables ccache completely.
1829          Additionally ccache's depend mode is enabled if possible,
1830          use --enable-ccache=nodepend to enable ccache without depend mode.
1834 AC_ARG_ENABLE(z7-debug,
1835     AS_HELP_STRING([--enable-z7-debug],
1836         [Makes the MSVC compiler use -Z7 for debugging instead of the default -Zi. Using this option takes
1837          more disk spaces but allows to use ccache. Final PDB files are created even with this option enabled.
1838          Enabled by default if ccache is detected.]))
1840 libo_FUZZ_ARG_ENABLE(online-update,
1841     AS_HELP_STRING([--enable-online-update],
1842         [Enable the online update service that will check for new versions of
1843          LibreOffice. Disabled by default. Requires --with-privacy-policy-url to be set.
1844          If the value is "mar", the experimental Mozilla-like update will be
1845          enabled instead of the traditional update mechanism.]),
1848 AC_ARG_WITH(update-config,
1849     AS_HELP_STRING([--with-update-config=/tmp/update.ini],
1850                    [Path to the update config ini file]))
1852 libo_FUZZ_ARG_ENABLE(extension-update,
1853     AS_HELP_STRING([--disable-extension-update],
1854         [Disable possibility to update installed extensions.]),
1857 libo_FUZZ_ARG_ENABLE(release-build,
1858     AS_HELP_STRING([--enable-release-build],
1859         [Enable release build. Note that the "release build" choice is orthogonal to
1860          whether symbols are present, debug info is generated, or optimization
1861          is done.
1862          See http://wiki.documentfoundation.org/Development/DevBuild]),
1865 AC_ARG_ENABLE(windows-build-signing,
1866     AS_HELP_STRING([--enable-windows-build-signing],
1867         [Enable signing of windows binaries (*.exe, *.dll)]),
1870 AC_ARG_ENABLE(silent-msi,
1871     AS_HELP_STRING([--enable-silent-msi],
1872         [Enable MSI with LIMITUI=1 (silent install).]),
1875 AC_ARG_ENABLE(macosx-code-signing,
1876     AS_HELP_STRING([--enable-macosx-code-signing=<identity>],
1877         [Sign executables, dylibs, frameworks and the app bundle. If you
1878          don't provide an identity the first suitable certificate
1879          in your keychain is used.]),
1882 AC_ARG_ENABLE(macosx-package-signing,
1883     AS_HELP_STRING([--enable-macosx-package-signing=<identity>],
1884         [Create a .pkg suitable for uploading to the Mac App Store and sign
1885          it. If you don't provide an identity the first suitable certificate
1886          in your keychain is used.]),
1889 AC_ARG_ENABLE(macosx-sandbox,
1890     AS_HELP_STRING([--enable-macosx-sandbox],
1891         [Make the app bundle run in a sandbox. Requires code signing.
1892          Is required by apps distributed in the Mac App Store, and implies
1893          adherence to App Store rules.]),
1896 AC_ARG_WITH(macosx-bundle-identifier,
1897     AS_HELP_STRING([--with-macosx-bundle-identifier=tld.mumble.orifice.TheOffice],
1898         [Define the macOS bundle identifier. Default is the somewhat weird
1899          org.libreoffice.script ("script", huh?).]),
1900 ,with_macosx_bundle_identifier=org.libreoffice.script)
1902 AC_ARG_WITH(product-name,
1903     AS_HELP_STRING([--with-product-name='My Own Office Suite'],
1904         [Define the product name. Default is AC_PACKAGE_NAME.]),
1905 ,with_product_name=$PRODUCTNAME)
1907 libo_FUZZ_ARG_ENABLE(community-flavor,
1908     AS_HELP_STRING([--disable-community-flavor],
1909         [Disable the Community branding.]),
1912 AC_ARG_WITH(package-version,
1913     AS_HELP_STRING([--with-package-version='3.1.4.5'],
1914         [Define the package version. Default is AC_PACKAGE_VERSION. Use only if you distribute an own build for macOS.]),
1917 libo_FUZZ_ARG_ENABLE(readonly-installset,
1918     AS_HELP_STRING([--enable-readonly-installset],
1919         [Prevents any attempts by LibreOffice to write into its installation. That means
1920          at least that no "system-wide" extensions can be added. Partly experimental work in
1921          progress, probably not fully implemented. Always enabled for macOS.]),
1924 libo_FUZZ_ARG_ENABLE(mariadb-sdbc,
1925     AS_HELP_STRING([--disable-mariadb-sdbc],
1926         [Disable the build of the MariaDB/MySQL-SDBC driver.])
1929 libo_FUZZ_ARG_ENABLE(postgresql-sdbc,
1930     AS_HELP_STRING([--disable-postgresql-sdbc],
1931         [Disable the build of the PostgreSQL-SDBC driver.])
1934 libo_FUZZ_ARG_ENABLE(lotuswordpro,
1935     AS_HELP_STRING([--disable-lotuswordpro],
1936         [Disable the build of the Lotus Word Pro filter.]),
1937 ,test "${enable_lotuswordpro+set}" = set || enable_lotuswordpro=yes)
1939 libo_FUZZ_ARG_ENABLE(firebird-sdbc,
1940     AS_HELP_STRING([--disable-firebird-sdbc],
1941         [Disable the build of the Firebird-SDBC driver if it doesn't compile for you.]),
1942 ,test "${enable_firebird_sdbc+set}" = set || enable_firebird_sdbc=yes)
1944 AC_ARG_ENABLE(bogus-pkg-config,
1945     AS_HELP_STRING([--enable-bogus-pkg-config],
1946         [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.]),
1949 AC_ARG_ENABLE(openssl,
1950     AS_HELP_STRING([--disable-openssl],
1951         [Disable using libssl/libcrypto from OpenSSL. If disabled,
1952          components will use NSS. Work in progress,
1953          use only if you are hacking on it.]),
1954 ,enable_openssl=yes)
1956 libo_FUZZ_ARG_ENABLE(cipher-openssl-backend,
1957     AS_HELP_STRING([--enable-cipher-openssl-backend],
1958         [Enable using OpenSSL as the actual implementation of the rtl/cipher.h functionality.
1959          Requires --enable-openssl.]))
1961 AC_ARG_ENABLE(nss,
1962     AS_HELP_STRING([--disable-nss],
1963         [Disable using NSS. If disabled,
1964          components will use openssl. Work in progress,
1965          use only if you are hacking on it.]),
1966 ,enable_nss=yes)
1968 AC_ARG_ENABLE(library-bin-tar,
1969     AS_HELP_STRING([--enable-library-bin-tar],
1970         [Enable the building and reused of tarball of binary build for some 'external' libraries.
1971         Some libraries can save their build result in a tarball
1972         stored in TARFILE_LOCATION. That binary tarball is
1973         uniquely identified by the source tarball,
1974         the content of the config_host.mk file and the content
1975         of the top-level directory in core for that library
1976         If this option is enabled, then if such a tarfile exist, it will be untarred
1977         instead of the source tarfile, and the build step will be skipped for that
1978         library.
1979         If a proper tarfile does not exist, then the normal source-based
1980         build is done for that library and a proper binary tarfile is created
1981         for the next time.]),
1984 AC_ARG_ENABLE(dconf,
1985     AS_HELP_STRING([--disable-dconf],
1986         [Disable the dconf configuration backend (enabled by default where
1987          available).]))
1989 libo_FUZZ_ARG_ENABLE(formula-logger,
1990     AS_HELP_STRING(
1991         [--enable-formula-logger],
1992         [Enable formula logger for logging formula calculation flow in Calc.]
1993     )
1996 AC_ARG_ENABLE(ldap,
1997     AS_HELP_STRING([--disable-ldap],
1998         [Disable LDAP support.]),
1999 ,enable_ldap=yes)
2001 AC_ARG_ENABLE(opencl,
2002     AS_HELP_STRING([--disable-opencl],
2003         [Disable OpenCL support.]),
2004 ,enable_opencl=yes)
2006 libo_FUZZ_ARG_ENABLE(librelogo,
2007     AS_HELP_STRING([--disable-librelogo],
2008         [Do not build LibreLogo.]),
2009 ,enable_librelogo=yes)
2011 AC_ARG_ENABLE(wasm-strip,
2012     AS_HELP_STRING([--enable-wasm-strip],
2013         [Strip the static build like for WASM/emscripten platform.]),
2016 AC_ARG_ENABLE(wasm-exceptions,
2017     AS_HELP_STRING([--enable-wasm-exceptions],
2018         [Build with native WASM exceptions (AKA -fwasm-exceptions),
2019         matter of fact, this is currently not finished by any implementation)
2020         (see https://webassembly.org/roadmap/ for the current state]),
2023 AC_ARG_ENABLE(xmlhelp,
2024     AS_HELP_STRING([--disable-xmlhelp],
2025         [Disable XML help support]),
2026 ,enable_xmlhelp=yes)
2028 AC_ARG_ENABLE(customtarget-components,
2029     AS_HELP_STRING([--enable-customtarget-components],
2030         [Generates the static UNO object constructor mapping from the build.]))
2032 dnl ===================================================================
2033 dnl Optional Packages (--with/without-)
2034 dnl ===================================================================
2036 AC_ARG_WITH(gcc-home,
2037     AS_HELP_STRING([--with-gcc-home],
2038         [Specify the location of gcc/g++ manually. This can be used in conjunction
2039          with --enable-icecream when icecream gcc/g++ wrappers are installed in a
2040          non-default path.]),
2043 AC_ARG_WITH(gnu-patch,
2044     AS_HELP_STRING([--with-gnu-patch],
2045         [Specify location of GNU patch on Solaris or FreeBSD.]),
2048 AC_ARG_WITH(build-platform-configure-options,
2049     AS_HELP_STRING([--with-build-platform-configure-options],
2050         [Specify options for the configure script run for the *build* platform in a cross-compilation]),
2053 AC_ARG_WITH(gnu-cp,
2054     AS_HELP_STRING([--with-gnu-cp],
2055         [Specify location of GNU cp on Solaris or FreeBSD.]),
2058 AC_ARG_WITH(external-tar,
2059     AS_HELP_STRING([--with-external-tar=<TARFILE_PATH>],
2060         [Specify an absolute path of where to find (and store) tarfiles.]),
2061     TARFILE_LOCATION=$withval ,
2064 AC_ARG_WITH(referenced-git,
2065     AS_HELP_STRING([--with-referenced-git=<OTHER_CHECKOUT_DIR>],
2066         [Specify another checkout directory to reference. This makes use of
2067                  git submodule update --reference, and saves a lot of diskspace
2068                  when having multiple trees side-by-side.]),
2069     GIT_REFERENCE_SRC=$withval ,
2072 AC_ARG_WITH(linked-git,
2073     AS_HELP_STRING([--with-linked-git=<submodules repo basedir>],
2074         [Specify a directory where the repositories of submodules are located.
2075          This uses a method similar to git-new-workdir to get submodules.]),
2076     GIT_LINK_SRC=$withval ,
2079 AC_ARG_WITH(galleries,
2080     AS_HELP_STRING([--with-galleries],
2081         [Specify how galleries should be built. It is possible either to
2082          build these internally from source ("build"),
2083          or to disable them ("no")]),
2086 AC_ARG_WITH(theme,
2087     AS_HELP_STRING([--with-theme="theme1 theme2..."],
2088         [Choose which themes to include. By default those themes with an '*' are included.
2089          Possible choices: *breeze, *breeze_dark, *breeze_dark_svg, *breeze_svg,
2090          *colibre, *colibre_svg, *colibre_dark, *colibre_dark_svg,
2091          *elementary, *elementary_svg,
2092          *karasa_jaga, *karasa_jaga_svg,
2093          *sifr, *sifr_dark, *sifr_dark_svg, *sifr_svg,
2094          *sukapura, *sukapura_svg.]),
2097 libo_FUZZ_ARG_WITH(helppack-integration,
2098     AS_HELP_STRING([--without-helppack-integration],
2099         [It will not integrate the helppacks to the installer
2100          of the product. Please use this switch to use the online help
2101          or separate help packages.]),
2104 libo_FUZZ_ARG_WITH(fonts,
2105     AS_HELP_STRING([--without-fonts],
2106         [LibreOffice includes some third-party fonts to provide a reliable basis for
2107          help content, templates, samples, etc. When these fonts are already
2108          known to be available on the system then you should use this option.]),
2111 AC_ARG_WITH(epm,
2112     AS_HELP_STRING([--with-epm],
2113         [Decides which epm to use. Default is to use the one from the system if
2114          one is built. When either this is not there or you say =internal epm
2115          will be built.]),
2118 AC_ARG_WITH(package-format,
2119     AS_HELP_STRING([--with-package-format],
2120         [Specify package format(s) for LibreOffice installation sets. The
2121          implicit --without-package-format leads to no installation sets being
2122          generated. Possible values: aix, archive, bsd, deb, dmg,
2123          installed, msi, pkg, and rpm.
2124          Example: --with-package-format='deb rpm']),
2127 AC_ARG_WITH(tls,
2128     AS_HELP_STRING([--with-tls],
2129         [Decides which TLS/SSL and cryptographic implementations to use for
2130          LibreOffice's code. Notice that this doesn't apply for depending
2131          libraries like "curl", for example. Default is to use NSS
2132          although OpenSSL is also possible. Notice that selecting NSS restricts
2133          the usage of OpenSSL in LO's code but selecting OpenSSL doesn't
2134          restrict by now the usage of NSS in LO's code. Possible values:
2135          openssl, nss. Example: --with-tls="nss"]),
2138 AC_ARG_WITH(system-libs,
2139     AS_HELP_STRING([--with-system-libs],
2140         [Use libraries already on system -- enables all --with-system-* flags.]),
2143 AC_ARG_WITH(system-bzip2,
2144     AS_HELP_STRING([--with-system-bzip2],
2145         [Use bzip2 already on system. Used only when --enable-online-update=mar]),,
2146     [with_system_bzip2="$with_system_libs"])
2148 AC_ARG_WITH(system-headers,
2149     AS_HELP_STRING([--with-system-headers],
2150         [Use headers already on system -- enables all --with-system-* flags for
2151          external packages whose headers are the only entities used i.e.
2152          boost/odbc/sane-header(s).]),,
2153     [with_system_headers="$with_system_libs"])
2155 AC_ARG_WITH(system-jars,
2156     AS_HELP_STRING([--without-system-jars],
2157         [When building with --with-system-libs, also the needed jars are expected
2158          on the system. Use this to disable that]),,
2159     [with_system_jars="$with_system_libs"])
2161 AC_ARG_WITH(system-cairo,
2162     AS_HELP_STRING([--with-system-cairo],
2163         [Use cairo libraries already on system.  Happens automatically for
2164          (implicit) --enable-gtk3.]))
2166 AC_ARG_WITH(system-epoxy,
2167     AS_HELP_STRING([--with-system-epoxy],
2168         [Use epoxy libraries already on system.  Happens automatically for
2169          (implicit) --enable-gtk3.]),,
2170        [with_system_epoxy="$with_system_libs"])
2172 AC_ARG_WITH(myspell-dicts,
2173     AS_HELP_STRING([--with-myspell-dicts],
2174         [Adds myspell dictionaries to the LibreOffice installation set]),
2177 AC_ARG_WITH(system-dicts,
2178     AS_HELP_STRING([--without-system-dicts],
2179         [Do not use dictionaries from system paths.]),
2182 AC_ARG_WITH(external-dict-dir,
2183     AS_HELP_STRING([--with-external-dict-dir],
2184         [Specify external dictionary dir.]),
2187 AC_ARG_WITH(external-hyph-dir,
2188     AS_HELP_STRING([--with-external-hyph-dir],
2189         [Specify external hyphenation pattern dir.]),
2192 AC_ARG_WITH(external-thes-dir,
2193     AS_HELP_STRING([--with-external-thes-dir],
2194         [Specify external thesaurus dir.]),
2197 AC_ARG_WITH(system-zlib,
2198     AS_HELP_STRING([--with-system-zlib],
2199         [Use zlib already on system.]),,
2200     [with_system_zlib=auto])
2202 AC_ARG_WITH(system-jpeg,
2203     AS_HELP_STRING([--with-system-jpeg],
2204         [Use jpeg already on system.]),,
2205     [with_system_jpeg="$with_system_libs"])
2207 AC_ARG_WITH(system-expat,
2208     AS_HELP_STRING([--with-system-expat],
2209         [Use expat already on system.]),,
2210     [with_system_expat="$with_system_libs"])
2212 AC_ARG_WITH(system-libxml,
2213     AS_HELP_STRING([--with-system-libxml],
2214         [Use libxml/libxslt already on system.]),,
2215     [with_system_libxml=auto])
2217 AC_ARG_WITH(system-ucpp,
2218     AS_HELP_STRING([--with-system-ucpp],
2219         [Use ucpp already on system.]),,
2220     [])
2222 AC_ARG_WITH(system-openldap,
2223     AS_HELP_STRING([--with-system-openldap],
2224         [Use the OpenLDAP LDAP SDK already on system.]),,
2225     [with_system_openldap="$with_system_libs"])
2227 libo_FUZZ_ARG_ENABLE(poppler,
2228     AS_HELP_STRING([--disable-poppler],
2229         [Disable building Poppler.])
2232 AC_ARG_WITH(system-poppler,
2233     AS_HELP_STRING([--with-system-poppler],
2234         [Use system poppler (only needed for PDF import).]),,
2235     [with_system_poppler="$with_system_libs"])
2237 AC_ARG_WITH(system-abseil,
2238     AS_HELP_STRING([--with-system-abseil],
2239         [Use the abseil libraries already on system.]),,
2240     [with_system_abseil="$with_system_libs"])
2242 AC_ARG_WITH(system-openjpeg,
2243     AS_HELP_STRING([--with-system-openjpeg],
2244         [Use the OpenJPEG library already on system.]),,
2245     [with_system_openjpeg="$with_system_libs"])
2247 libo_FUZZ_ARG_ENABLE(gpgmepp,
2248     AS_HELP_STRING([--disable-gpgmepp],
2249         [Disable building gpgmepp. Do not use in normal cases unless you want to fix potential problems it causes.])
2252 AC_ARG_WITH(system-gpgmepp,
2253     AS_HELP_STRING([--with-system-gpgmepp],
2254         [Use gpgmepp already on system]),,
2255     [with_system_gpgmepp="$with_system_libs"])
2257 AC_ARG_WITH(system-mariadb,
2258     AS_HELP_STRING([--with-system-mariadb],
2259         [Use MariaDB/MySQL libraries already on system.]),,
2260     [with_system_mariadb="$with_system_libs"])
2262 AC_ARG_ENABLE(bundle-mariadb,
2263     AS_HELP_STRING([--enable-bundle-mariadb],
2264         [When using MariaDB/MySQL libraries already on system, bundle them with the MariaDB Connector/LibreOffice.])
2267 AC_ARG_WITH(system-postgresql,
2268     AS_HELP_STRING([--with-system-postgresql],
2269         [Use PostgreSQL libraries already on system, for building the PostgreSQL-SDBC
2270          driver. If pg_config is not in PATH, use PGCONFIG to point to it.]),,
2271     [with_system_postgresql="$with_system_libs"])
2273 AC_ARG_WITH(libpq-path,
2274     AS_HELP_STRING([--with-libpq-path=<absolute path to your libpq installation>],
2275         [Use this PostgreSQL C interface (libpq) installation for building
2276          the PostgreSQL-SDBC extension.]),
2279 AC_ARG_WITH(system-firebird,
2280     AS_HELP_STRING([--with-system-firebird],
2281         [Use Firebird libraries already on system, for building the Firebird-SDBC
2282          driver. If fb_config is not in PATH, use FBCONFIG to point to it.]),,
2283     [with_system_firebird="$with_system_libs"])
2285 AC_ARG_WITH(system-libtommath,
2286             AS_HELP_STRING([--with-system-libtommath],
2287                            [Use libtommath already on system]),,
2288             [with_system_libtommath="$with_system_libs"])
2290 AC_ARG_WITH(system-hsqldb,
2291     AS_HELP_STRING([--with-system-hsqldb],
2292         [Use hsqldb already on system.]))
2294 AC_ARG_WITH(hsqldb-jar,
2295     AS_HELP_STRING([--with-hsqldb-jar=JARFILE],
2296         [Specify path to jarfile manually.]),
2297     HSQLDB_JAR=$withval)
2299 libo_FUZZ_ARG_ENABLE(scripting-beanshell,
2300     AS_HELP_STRING([--disable-scripting-beanshell],
2301         [Disable support for scripts in BeanShell.]),
2305 AC_ARG_WITH(system-beanshell,
2306     AS_HELP_STRING([--with-system-beanshell],
2307         [Use beanshell already on system.]),,
2308     [with_system_beanshell="$with_system_jars"])
2310 AC_ARG_WITH(beanshell-jar,
2311     AS_HELP_STRING([--with-beanshell-jar=JARFILE],
2312         [Specify path to jarfile manually.]),
2313     BSH_JAR=$withval)
2315 libo_FUZZ_ARG_ENABLE(scripting-javascript,
2316     AS_HELP_STRING([--disable-scripting-javascript],
2317         [Disable support for scripts in JavaScript.]),
2321 AC_ARG_WITH(system-rhino,
2322     AS_HELP_STRING([--with-system-rhino],
2323         [Use rhino already on system.]),,)
2324 #    [with_system_rhino="$with_system_jars"])
2325 # Above is not used as we have different debug interface
2326 # patched into internal rhino. This code needs to be fixed
2327 # before we can enable it by default.
2329 AC_ARG_WITH(rhino-jar,
2330     AS_HELP_STRING([--with-rhino-jar=JARFILE],
2331         [Specify path to jarfile manually.]),
2332     RHINO_JAR=$withval)
2334 AC_ARG_WITH(system-jfreereport,
2335     AS_HELP_STRING([--with-system-jfreereport],
2336         [Use JFreeReport already on system.]),,
2337     [with_system_jfreereport="$with_system_jars"])
2339 AC_ARG_WITH(sac-jar,
2340     AS_HELP_STRING([--with-sac-jar=JARFILE],
2341         [Specify path to jarfile manually.]),
2342     SAC_JAR=$withval)
2344 AC_ARG_WITH(libxml-jar,
2345     AS_HELP_STRING([--with-libxml-jar=JARFILE],
2346         [Specify path to jarfile manually.]),
2347     LIBXML_JAR=$withval)
2349 AC_ARG_WITH(flute-jar,
2350     AS_HELP_STRING([--with-flute-jar=JARFILE],
2351         [Specify path to jarfile manually.]),
2352     FLUTE_JAR=$withval)
2354 AC_ARG_WITH(jfreereport-jar,
2355     AS_HELP_STRING([--with-jfreereport-jar=JARFILE],
2356         [Specify path to jarfile manually.]),
2357     JFREEREPORT_JAR=$withval)
2359 AC_ARG_WITH(liblayout-jar,
2360     AS_HELP_STRING([--with-liblayout-jar=JARFILE],
2361         [Specify path to jarfile manually.]),
2362     LIBLAYOUT_JAR=$withval)
2364 AC_ARG_WITH(libloader-jar,
2365     AS_HELP_STRING([--with-libloader-jar=JARFILE],
2366         [Specify path to jarfile manually.]),
2367     LIBLOADER_JAR=$withval)
2369 AC_ARG_WITH(libformula-jar,
2370     AS_HELP_STRING([--with-libformula-jar=JARFILE],
2371         [Specify path to jarfile manually.]),
2372     LIBFORMULA_JAR=$withval)
2374 AC_ARG_WITH(librepository-jar,
2375     AS_HELP_STRING([--with-librepository-jar=JARFILE],
2376         [Specify path to jarfile manually.]),
2377     LIBREPOSITORY_JAR=$withval)
2379 AC_ARG_WITH(libfonts-jar,
2380     AS_HELP_STRING([--with-libfonts-jar=JARFILE],
2381         [Specify path to jarfile manually.]),
2382     LIBFONTS_JAR=$withval)
2384 AC_ARG_WITH(libserializer-jar,
2385     AS_HELP_STRING([--with-libserializer-jar=JARFILE],
2386         [Specify path to jarfile manually.]),
2387     LIBSERIALIZER_JAR=$withval)
2389 AC_ARG_WITH(libbase-jar,
2390     AS_HELP_STRING([--with-libbase-jar=JARFILE],
2391         [Specify path to jarfile manually.]),
2392     LIBBASE_JAR=$withval)
2394 AC_ARG_WITH(system-odbc,
2395     AS_HELP_STRING([--with-system-odbc],
2396         [Use the odbc headers already on system.]),,
2397     [with_system_odbc="auto"])
2399 AC_ARG_WITH(system-sane,
2400     AS_HELP_STRING([--with-system-sane],
2401         [Use sane.h already on system.]),,
2402     [with_system_sane="$with_system_headers"])
2404 AC_ARG_WITH(system-bluez,
2405     AS_HELP_STRING([--with-system-bluez],
2406         [Use bluetooth.h already on system.]),,
2407     [with_system_bluez="$with_system_headers"])
2409 AC_ARG_WITH(system-boost,
2410     AS_HELP_STRING([--with-system-boost],
2411         [Use boost already on system.]),,
2412     [with_system_boost="$with_system_headers"])
2414 AC_ARG_WITH(system-cuckoo,
2415     AS_HELP_STRING([--with-system-cuckoo],
2416         [Use libcuckoo already on system.]),,
2417     [with_system_cuckoo="$with_system_headers"])
2419 AC_ARG_WITH(system-dragonbox,
2420     AS_HELP_STRING([--with-system-dragonbox],
2421         [Use dragonbox already on system.]),,
2422     [with_system_dragonbox="$with_system_headers"])
2424 AC_ARG_WITH(system-libfixmath,
2425     AS_HELP_STRING([--with-system-libfixmath],
2426         [Use libfixmath already on system.]),,
2427     [with_system_libfixmath="$with_system_libs"])
2429 AC_ARG_WITH(system-glm,
2430     AS_HELP_STRING([--with-system-glm],
2431         [Use glm already on system.]),,
2432     [with_system_glm="$with_system_headers"])
2434 AC_ARG_WITH(system-hunspell,
2435     AS_HELP_STRING([--with-system-hunspell],
2436         [Use libhunspell already on system.]),,
2437     [with_system_hunspell="$with_system_libs"])
2439 libo_FUZZ_ARG_ENABLE(zxing,
2440     AS_HELP_STRING([--disable-zxing],
2441        [Disable use of zxing external library.]))
2443 AC_ARG_WITH(system-zxing,
2444     AS_HELP_STRING([--with-system-zxing],
2445         [Use libzxing already on system.]),,
2446     [with_system_zxing="$with_system_libs"])
2448 AC_ARG_WITH(system-box2d,
2449     AS_HELP_STRING([--with-system-box2d],
2450         [Use box2d already on system.]),,
2451     [with_system_box2d="$with_system_libs"])
2453 AC_ARG_WITH(system-mythes,
2454     AS_HELP_STRING([--with-system-mythes],
2455         [Use mythes already on system.]),,
2456     [with_system_mythes="$with_system_libs"])
2458 AC_ARG_WITH(system-altlinuxhyph,
2459     AS_HELP_STRING([--with-system-altlinuxhyph],
2460         [Use ALTLinuxhyph already on system.]),,
2461     [with_system_altlinuxhyph="$with_system_libs"])
2463 AC_ARG_WITH(system-lpsolve,
2464     AS_HELP_STRING([--with-system-lpsolve],
2465         [Use lpsolve already on system.]),,
2466     [with_system_lpsolve="$with_system_libs"])
2468 AC_ARG_WITH(system-coinmp,
2469     AS_HELP_STRING([--with-system-coinmp],
2470         [Use CoinMP already on system.]),,
2471     [with_system_coinmp="$with_system_libs"])
2473 AC_ARG_WITH(system-liblangtag,
2474     AS_HELP_STRING([--with-system-liblangtag],
2475         [Use liblangtag library already on system.]),,
2476     [with_system_liblangtag="$with_system_libs"])
2478 AC_ARG_WITH(system-lockfile,
2479     AS_HELP_STRING([--with-system-lockfile[=file]],
2480         [Detect a system lockfile program or use the \$file argument.]))
2482 AC_ARG_WITH(webdav,
2483     AS_HELP_STRING([--without-webdav],
2484         [Disable WebDAV support in the UCB.]))
2486 AC_ARG_WITH(linker-hash-style,
2487     AS_HELP_STRING([--with-linker-hash-style],
2488         [Use linker with --hash-style=<style> when linking shared objects.
2489          Possible values: "sysv", "gnu", "both". The default value is "gnu"
2490          if supported on the build system, and "sysv" otherwise.]))
2492 AC_ARG_WITH(jdk-home,
2493     AS_HELP_STRING([--with-jdk-home=<absolute path to JDK home>],
2494         [If you have installed JDK 9 or later on your system please supply the
2495          path here. Note that this is not the location of the java command but the
2496          location of the entire distribution. In case of cross-compiling, this
2497          is the JDK of the host os. Use --with-build-platform-configure-options
2498          to point to a different build platform JDK.]),
2501 AC_ARG_WITH(help,
2502     AS_HELP_STRING([--with-help],
2503         [Enable the build of help. There is a special parameter "common" that
2504          can be used to bundle only the common part, .e.g help-specific icons.
2505          This is useful when you build the helpcontent separately.])
2506     [
2507                           Usage:     --with-help    build the old local help
2508                                  --without-help     no local help (default)
2509                                  --with-help=html   build the new HTML local help
2510                                  --with-help=online build the new HTML online help
2511     ],
2514 AC_ARG_WITH(omindex,
2515    AS_HELP_STRING([--with-omindex],
2516         [Enable the support of xapian-omega index for online help.])
2517    [
2518                          Usage: --with-omindex=server prepare the pages for omindex
2519                                 but let xapian-omega be built in server.
2520                                 --with-omindex=noxap do not prepare online pages
2521                                 for xapian-omega
2522   ],
2525 libo_FUZZ_ARG_WITH(java,
2526     AS_HELP_STRING([--with-java=<java command>],
2527         [Specify the name of the Java interpreter command. Typically "java"
2528          which is the default.
2530          To build without support for Java components, applets, accessibility
2531          or the XML filters written in Java, use --without-java or --with-java=no.]),
2532     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ],
2533     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ]
2536 AC_ARG_WITH(jvm-path,
2537     AS_HELP_STRING([--with-jvm-path=<absolute path to parent of jvm home>],
2538         [Use a specific JVM search path at runtime.
2539          e.g. use --with-jvm-path=/usr/lib/ to find JRE/JDK in /usr/lib/jvm/]),
2542 AC_ARG_WITH(ant-home,
2543     AS_HELP_STRING([--with-ant-home=<absolute path to Ant home>],
2544         [If you have installed Apache Ant on your system, please supply the path here.
2545          Note that this is not the location of the Ant binary but the location
2546          of the entire distribution.]),
2549 AC_ARG_WITH(symbol-config,
2550     AS_HELP_STRING([--with-symbol-config],
2551         [Configuration for the crashreport symbol upload]),
2552         [],
2553         [with_symbol_config=no])
2555 AC_ARG_WITH(export-validation,
2556     AS_HELP_STRING([--without-export-validation],
2557         [Disable validating OOXML and ODF files as exported from in-tree tests.]),
2558 ,with_export_validation=auto)
2560 AC_ARG_WITH(bffvalidator,
2561     AS_HELP_STRING([--with-bffvalidator=<absolute path to BFFValidator>],
2562         [Enables export validation for Microsoft Binary formats (doc, xls, ppt).
2563          Requires installed Microsoft Office Binary File Format Validator.
2564          Note: export-validation (--with-export-validation) is required to be turned on.
2565          See https://www.microsoft.com/en-us/download/details.aspx?id=26794]),
2566 ,with_bffvalidator=no)
2568 libo_FUZZ_ARG_WITH(junit,
2569     AS_HELP_STRING([--with-junit=<absolute path to JUnit 4 jar>],
2570         [Specifies the JUnit 4 jar file to use for JUnit-based tests.
2571          --without-junit disables those tests. Not relevant in the --without-java case.]),
2572 ,with_junit=yes)
2574 AC_ARG_WITH(hamcrest,
2575     AS_HELP_STRING([--with-hamcrest=<absolute path to hamcrest jar>],
2576         [Specifies the hamcrest jar file to use for JUnit-based tests.
2577          --without-junit disables those tests. Not relevant in the --without-java case.]),
2578 ,with_hamcrest=yes)
2580 AC_ARG_WITH(perl-home,
2581     AS_HELP_STRING([--with-perl-home=<abs. path to Perl 5 home>],
2582         [If you have installed Perl 5 Distribution, on your system, please
2583          supply the path here. Note that this is not the location of the Perl
2584          binary but the location of the entire distribution.]),
2587 libo_FUZZ_ARG_WITH(doxygen,
2588     AS_HELP_STRING(
2589         [--with-doxygen=<absolute path to doxygen executable>],
2590         [Specifies the doxygen executable to use when generating ODK C/C++
2591          documentation. --without-doxygen disables generation of ODK C/C++
2592          documentation. Not relevant in the --disable-odk case.]),
2593 ,with_doxygen=yes)
2595 AC_ARG_WITH(visual-studio,
2596     AS_HELP_STRING([--with-visual-studio=<2019/2022>],
2597         [Specify which Visual Studio version to use in case several are
2598          installed. Currently 2019 (default) and 2022 are supported.]),
2601 AC_ARG_WITH(windows-sdk,
2602     AS_HELP_STRING([--with-windows-sdk=<8.0(A)/8.1(A)/10.0>],
2603         [Specify which Windows SDK, or "Windows Kit", version to use
2604          in case the one that came with the selected Visual Studio
2605          is not what you want for some reason. Note that not all compiler/SDK
2606          combinations are supported. The intent is that this option should not
2607          be needed.]),
2610 AC_ARG_WITH(lang,
2611     AS_HELP_STRING([--with-lang="es sw tu cs sk"],
2612         [Use this option to build LibreOffice with additional UI language support.
2613          English (US) is always included by default.
2614          Separate multiple languages with space.
2615          For all languages, use --with-lang=ALL.]),
2618 AC_ARG_WITH(locales,
2619     AS_HELP_STRING([--with-locales="en es pt fr zh kr ja"],
2620         [Use this option to limit the locale information built in.
2621          Separate multiple locales with space.
2622          Very experimental and might well break stuff.
2623          Just a desperate measure to shrink code and data size.
2624          By default all the locales available is included.
2625          Just works with --disable-dynloading. Defaults to "ALL".
2626          This option is completely unrelated to --with-lang.])
2627     [
2628                           Affects also our character encoding conversion
2629                           tables for encodings mainly targeted for a
2630                           particular locale, like EUC-CN and EUC-TW for
2631                           zh, ISO-2022-JP for ja.
2633                           Affects also our add-on break iterator data for
2634                           some languages.
2636                           For the default, all locales, don't use this switch at all.
2637                           Specifying just the language part of a locale means all matching
2638                           locales will be included.
2639     ],
2642 # Kerberos and GSSAPI used only by PostgreSQL as of LibO 3.5
2643 libo_FUZZ_ARG_WITH(krb5,
2644     AS_HELP_STRING([--with-krb5],
2645         [Enable MIT Kerberos 5 support in modules that support it.
2646          By default automatically enabled on platforms
2647          where a good system Kerberos 5 is available.]),
2650 libo_FUZZ_ARG_WITH(gssapi,
2651     AS_HELP_STRING([--with-gssapi],
2652         [Enable GSSAPI support in modules that support it.
2653          By default automatically enabled on platforms
2654          where a good system GSSAPI is available.]),
2657 libo_FUZZ_ARG_WITH(lxml,
2658     AS_HELP_STRING([--without-lxml],
2659         [gla11y will use python lxml when available, potentially building a local copy if necessary.
2660          --without-lxml tells it to not use python lxml at all, which means that gla11y will only
2661          report widget classes and ids.]),
2664 libo_FUZZ_ARG_WITH(latest-c++,
2665     AS_HELP_STRING([--with-latest-c++],
2666         [Try to enable the latest features of the C++ compiler, even if they are not yet part of a
2667          published standard.]),,
2668         [with_latest_c__=no])
2670 dnl ===================================================================
2671 dnl Branding
2672 dnl ===================================================================
2674 AC_ARG_WITH(branding,
2675     AS_HELP_STRING([--with-branding=/path/to/images],
2676         [Use given path to retrieve branding images set.])
2677     [
2678                           Search for intro.png about.svg and logo.svg.
2679                           If any is missing, default ones will be used instead.
2681                           Search also progress.conf for progress
2682                           settings on intro screen :
2684                           PROGRESSBARCOLOR="255,255,255" Set color of
2685                           progress bar. Comma separated RGB decimal values.
2686                           PROGRESSSIZE="407,6" Set size of progress bar.
2687                           Comma separated decimal values (width, height).
2688                           PROGRESSPOSITION="61,317" Set position of progress
2689                           bar from left,top. Comma separated decimal values.
2690                           PROGRESSFRAMECOLOR="20,136,3" Set color of progress
2691                           bar frame. Comma separated RGB decimal values.
2692                           PROGRESSTEXTCOLOR="0,0,0" Set color of progress
2693                           bar text. Comma separated RGB decimal values.
2694                           PROGRESSTEXTBASELINE="287" Set vertical position of
2695                           progress bar text from top. Decimal value.
2697                           Default values will be used if not found.
2698     ],
2702 AC_ARG_WITH(extra-buildid,
2703     AS_HELP_STRING([--with-extra-buildid="Tinderbox: Win-x86@6, Branch:master, Date:2012-11-26_00.29.34"],
2704         [Show addition build identification in about dialog.]),
2708 AC_ARG_WITH(vendor,
2709     AS_HELP_STRING([--with-vendor="John the Builder"],
2710         [Set vendor of the build.]),
2713 AC_ARG_WITH(privacy-policy-url,
2714     AS_HELP_STRING([--with-privacy-policy-url="https://yourdomain/privacy-policy"],
2715         [The URL to your privacy policy (needed when
2716          enabling online-update or crashreporting via breakpad)]),
2717         [if test "x$with_privacy_policy_url" = "xyes"; then
2718             AC_MSG_FAILURE([you need to specify an argument when using --with-privacy-policy-url])
2719          elif test "x$with_privacy_policy_url" = "xno"; then
2720             with_privacy_policy_url="undefined"
2721          fi]
2722 ,[with_privacy_policy_url="undefined"])
2724 AC_ARG_WITH(android-package-name,
2725     AS_HELP_STRING([--with-android-package-name="org.libreoffice"],
2726         [Set Android package name of the build.]),
2729 AC_ARG_WITH(compat-oowrappers,
2730     AS_HELP_STRING([--with-compat-oowrappers],
2731         [Install oo* wrappers in parallel with
2732          lo* ones to keep backward compatibility.
2733          Has effect only with make distro-pack-install]),
2736 AC_ARG_WITH(os-version,
2737     AS_HELP_STRING([--with-os-version=<OSVERSION>],
2738         [For FreeBSD users, use this option to override the detected OSVERSION.]),
2741 AC_ARG_WITH(idlc-cpp,
2742     AS_HELP_STRING([--with-idlc-cpp=<cpp/ucpp>],
2743         [Specify the C Preprocessor to use for idlc. Default is ucpp.]),
2746 AC_ARG_WITH(parallelism,
2747     AS_HELP_STRING([--with-parallelism],
2748         [Number of jobs to run simultaneously during build. Parallel builds can
2749         save a lot of time on multi-cpu machines. Defaults to the number of
2750         CPUs on the machine, unless you configure --enable-icecream - then to
2751         40.]),
2754 AC_ARG_WITH(all-tarballs,
2755     AS_HELP_STRING([--with-all-tarballs],
2756         [Download all external tarballs unconditionally]))
2758 AC_ARG_WITH(gdrive-client-id,
2759     AS_HELP_STRING([--with-gdrive-client-id],
2760         [Provides the client id of the application for OAuth2 authentication
2761         on Google Drive. If either this or --with-gdrive-client-secret is
2762         empty, the feature will be disabled]),
2765 AC_ARG_WITH(gdrive-client-secret,
2766     AS_HELP_STRING([--with-gdrive-client-secret],
2767         [Provides the client secret of the application for OAuth2
2768         authentication on Google Drive. If either this or
2769         --with-gdrive-client-id is empty, the feature will be disabled]),
2772 AC_ARG_WITH(alfresco-cloud-client-id,
2773     AS_HELP_STRING([--with-alfresco-cloud-client-id],
2774         [Provides the client id of the application for OAuth2 authentication
2775         on Alfresco Cloud. If either this or --with-alfresco-cloud-client-secret is
2776         empty, the feature will be disabled]),
2779 AC_ARG_WITH(alfresco-cloud-client-secret,
2780     AS_HELP_STRING([--with-alfresco-cloud-client-secret],
2781         [Provides the client secret of the application for OAuth2
2782         authentication on Alfresco Cloud. If either this or
2783         --with-alfresco-cloud-client-id is empty, the feature will be disabled]),
2786 AC_ARG_WITH(onedrive-client-id,
2787     AS_HELP_STRING([--with-onedrive-client-id],
2788         [Provides the client id of the application for OAuth2 authentication
2789         on OneDrive. If either this or --with-onedrive-client-secret is
2790         empty, the feature will be disabled]),
2793 AC_ARG_WITH(onedrive-client-secret,
2794     AS_HELP_STRING([--with-onedrive-client-secret],
2795         [Provides the client secret of the application for OAuth2
2796         authentication on OneDrive. If either this or
2797         --with-onedrive-client-id is empty, the feature will be disabled]),
2799 dnl ===================================================================
2800 dnl Do we want to use pre-build binary tarball for recompile
2801 dnl ===================================================================
2803 if test "$enable_library_bin_tar" = "yes" ; then
2804     USE_LIBRARY_BIN_TAR=TRUE
2805 else
2806     USE_LIBRARY_BIN_TAR=
2808 AC_SUBST(USE_LIBRARY_BIN_TAR)
2810 dnl ===================================================================
2811 dnl Test whether build target is Release Build
2812 dnl ===================================================================
2813 AC_MSG_CHECKING([whether build target is Release Build])
2814 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
2815     AC_MSG_RESULT([no])
2816     ENABLE_RELEASE_BUILD=
2817     GET_TASK_ALLOW_ENTITLEMENT='
2818         <!-- We want to be able to debug a hardened process when not building for release -->
2819         <key>com.apple.security.get-task-allow</key>
2820         <true/>'
2821 else
2822     AC_MSG_RESULT([yes])
2823     ENABLE_RELEASE_BUILD=TRUE
2824     GET_TASK_ALLOW_ENTITLEMENT=''
2826 AC_SUBST(ENABLE_RELEASE_BUILD)
2827 AC_SUBST(GET_TASK_ALLOW_ENTITLEMENT)
2829 AC_MSG_CHECKING([whether to build a Community flavor])
2830 if test -z "$enable_community_flavor" -o "$enable_community_flavor" = "yes"; then
2831     AC_DEFINE(HAVE_FEATURE_COMMUNITY_FLAVOR)
2832     AC_MSG_RESULT([yes])
2833 else
2834     AC_MSG_RESULT([no])
2837 dnl ===================================================================
2838 dnl Test whether to sign Windows Build
2839 dnl ===================================================================
2840 AC_MSG_CHECKING([whether to sign windows build])
2841 if test "$enable_windows_build_signing" = "yes" -a "$_os" = "WINNT"; then
2842     AC_MSG_RESULT([yes])
2843     WINDOWS_BUILD_SIGNING="TRUE"
2844 else
2845     AC_MSG_RESULT([no])
2846     WINDOWS_BUILD_SIGNING="FALSE"
2848 AC_SUBST(WINDOWS_BUILD_SIGNING)
2850 dnl ===================================================================
2851 dnl MacOSX build and runtime environment options
2852 dnl ===================================================================
2854 AC_ARG_WITH(macosx-version-min-required,
2855     AS_HELP_STRING([--with-macosx-version-min-required=<version>],
2856         [set the minimum OS version needed to run the built LibreOffice])
2857     [
2858                           e. g.: --with-macosx-version-min-required=10.13
2859     ],
2862 dnl ===================================================================
2863 dnl Check for incompatible options set by fuzzing, and reset those
2864 dnl automatically to working combinations
2865 dnl ===================================================================
2867 if test "$libo_fuzzed_enable_dbus" = yes -a "$libo_fuzzed_enable_avahi" -a \
2868         "$enable_dbus" != "$enable_avahi"; then
2869     AC_MSG_NOTICE([Resetting --enable-avahi=$enable_dbus])
2870     enable_avahi=$enable_dbus
2873 add_lopath_after ()
2875     if ! echo "$LO_PATH" | $EGREP -q "(^|${P_SEP})$1($|${P_SEP})"; then
2876         LO_PATH="${LO_PATH:+$LO_PATH$P_SEP}$1"
2877     fi
2880 add_lopath_before ()
2882     local IFS=${P_SEP}
2883     local path_cleanup
2884     local dir
2885     for dir in $LO_PATH ; do
2886         if test "$dir" != "$1" ; then
2887             path_cleanup=${path_cleanup:+$path_cleanup$P_SEP}$dir
2888         fi
2889     done
2890     LO_PATH="$1${path_cleanup:+$P_SEP$path_cleanup}"
2893 dnl ===================================================================
2894 dnl check for required programs (grep, awk, sed, bash)
2895 dnl ===================================================================
2897 pathmunge ()
2899     local new_path
2900     if test -n "$1"; then
2901         if test "$build_os" = "cygwin"; then
2902             if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
2903                 PathFormat "$1"
2904                 new_path=`cygpath -sm "$formatted_path"`
2905             else
2906                 PathFormat "$1"
2907                 new_path=`cygpath -u "$formatted_path"`
2908             fi
2909         else
2910             new_path="$1"
2911         fi
2912         if test "$2" = "after"; then
2913             add_lopath_after "$new_path"
2914         else
2915             add_lopath_before "$new_path"
2916         fi
2917     fi
2920 AC_PROG_AWK
2921 AC_PATH_PROG( AWK, $AWK)
2922 if test -z "$AWK"; then
2923     AC_MSG_ERROR([install awk to run this script])
2926 AC_PATH_PROG(BASH, bash)
2927 if test -z "$BASH"; then
2928     AC_MSG_ERROR([bash not found in \$PATH])
2930 AC_SUBST(BASH)
2932 # prefer parallel compression tools, if available
2933 AC_PATH_PROG(COMPRESSIONTOOL, pigz)
2934 if test -z "$COMPRESSIONTOOL"; then
2935     AC_PATH_PROG(COMPRESSIONTOOL, gzip)
2936     if test -z "$COMPRESSIONTOOL"; then
2937         AC_MSG_ERROR([gzip not found in \$PATH])
2938     fi
2940 AC_SUBST(COMPRESSIONTOOL)
2942 AC_MSG_CHECKING([for GNU or BSD tar])
2943 for a in $GNUTAR gtar gnutar tar bsdtar /usr/sfw/bin/gtar; do
2944     $a --version 2> /dev/null | egrep "GNU|bsdtar"  2>&1 > /dev/null
2945     if test $? -eq 0;  then
2946         GNUTAR=$a
2947         break
2948     fi
2949 done
2950 AC_MSG_RESULT($GNUTAR)
2951 if test -z "$GNUTAR"; then
2952     AC_MSG_ERROR([not found. install GNU or BSD tar.])
2954 AC_SUBST(GNUTAR)
2956 AC_MSG_CHECKING([for tar's option to strip components])
2957 $GNUTAR --help 2> /dev/null | egrep "bsdtar|strip-components" 2>&1 >/dev/null
2958 if test $? -eq 0; then
2959     STRIP_COMPONENTS="--strip-components"
2960 else
2961     $GNUTAR --help 2> /dev/null | egrep "strip-path" 2>&1 >/dev/null
2962     if test $? -eq 0; then
2963         STRIP_COMPONENTS="--strip-path"
2964     else
2965         STRIP_COMPONENTS="unsupported"
2966     fi
2968 AC_MSG_RESULT($STRIP_COMPONENTS)
2969 if test x$STRIP_COMPONENTS = xunsupported; then
2970     AC_MSG_ERROR([you need a tar that is able to strip components.])
2972 AC_SUBST(STRIP_COMPONENTS)
2974 dnl It is useful to have a BUILD_TYPE keyword to distinguish "normal"
2975 dnl desktop OSes from "mobile" ones.
2977 dnl We assume that a non-DESKTOP build type is also a non-NATIVE one.
2978 dnl In other words, that when building for an OS that is not a
2979 dnl "desktop" one but a "mobile" one, we are always cross-compiling.
2981 dnl Note the direction of the implication; there is no assumption that
2982 dnl cross-compiling would imply a non-desktop OS.
2984 if test $_os != iOS -a $_os != Android -a "$enable_fuzzers" != "yes"; then
2985     BUILD_TYPE="$BUILD_TYPE DESKTOP"
2986     AC_DEFINE(HAVE_FEATURE_DESKTOP)
2987     if test "$_os" != Emscripten; then
2988         AC_DEFINE(HAVE_FEATURE_MULTIUSER_ENVIRONMENT)
2989     fi
2992 # explicitly doesn't include enable_gtk3=no and enable_qt5=yes, so it should
2993 # also work with the default gtk3 plugin.
2994 if test "$enable_wasm_strip" = "yes"; then
2995     enable_avmedia=no
2996     enable_cmis=no
2997     enable_coinmp=no
2998     enable_cups=no
2999     test "$_os" = Emscripten && enable_curl=no
3000     enable_database_connectivity=no
3001     enable_dbus=no
3002     enable_dconf=no
3003     test "${enable_dynamic_loading+set}" = set -o "$_os" != Emscripten || enable_dynamic_loading=no
3004     enable_extension_integration=no
3005     enable_extensions=no
3006     enable_extension_update=no
3007     enable_gio=no
3008     enable_gpgmepp=no
3009     enable_ldap=no
3010     enable_lotuswordpro=no
3011     enable_lpsolve=no
3012     enable_nss=no
3013     enable_odk=no
3014     enable_online_update=no
3015     enable_opencl=no
3016     enable_pdfimport=no
3017     enable_randr=no
3018     enable_report_builder=no
3019     enable_scripting=no
3020     enable_sdremote_bluetooth=no
3021     enable_skia=no
3022     enable_xmlhelp=no
3023     enable_zxing=no
3024     test_libepubgen=no
3025     test_libcdr=no
3026     test_libcmis=no
3027     test_libetonyek=no
3028     test_libfreehand=no
3029     test_libmspub=no
3030     test_libpagemaker=no
3031     test_libqxp=no
3032     test_libvisio=no
3033     test_libzmf=no
3034     test_webdav=no
3035     with_galleries=no
3036     with_webdav=no
3037     with_x=no
3039     test "${with_fonts+set}" = set || with_fonts=yes
3040     test "${with_locales+set}" = set || with_locales=en
3042     AC_DEFINE(ENABLE_WASM_STRIP_ACCESSIBILITY)
3043     AC_DEFINE(ENABLE_WASM_STRIP_CANVAS)
3044 #    AC_DEFINE(ENABLE_WASM_STRIP_CHART)
3045     AC_DEFINE(ENABLE_WASM_STRIP_DBACCESS)
3046     AC_DEFINE(ENABLE_WASM_STRIP_EPUB)
3047     AC_DEFINE(ENABLE_WASM_STRIP_EXTRA)
3048     AC_DEFINE(ENABLE_WASM_STRIP_GUESSLANG)
3049 #    AC_DEFINE(ENABLE_WASM_STRIP_HUNSPELL)
3050     AC_DEFINE(ENABLE_WASM_STRIP_PINGUSER)
3051     AC_DEFINE(ENABLE_WASM_STRIP_PREMULTIPLY)
3052     AC_DEFINE(ENABLE_WASM_STRIP_RECENT)
3053     AC_DEFINE(ENABLE_WASM_STRIP_RECOVERYUI)
3054     AC_DEFINE(ENABLE_WASM_STRIP_SPLASH)
3055     AC_DEFINE(ENABLE_WASM_STRIP_SWEXPORTS)
3058 EMSCRIPTEN_NEH_MAJOR=3
3059 EMSCRIPTEN_NEH_MINOR=1
3060 EMSCRIPTEN_NEH_TINY=3
3061 EMSCRIPTEN_NEH_VERSION="${EMSCRIPTEN_NEH_MAJOR}.${EMSCRIPTEN_NEH_MINOR}.${EMSCRIPTEN_NEH_TINY}"
3063 if test "$enable_wasm_exceptions" = yes; then
3064     AC_MSG_CHECKING([if Emscripten version is at least $EMSCRIPTEN_NEH_VERSION for SjLj + native EH])
3065     check_semantic_version_three_prefixed EMSCRIPTEN NEH
3066     if test $? -ne 0; then
3067         AC_MSG_ERROR([no, found $EMSCRIPTEN_VERSION])
3068     else
3069         AC_MSG_RESULT([yes ($EMSCRIPTEN_VERSION)])
3070     fi
3071     ENABLE_WASM_EXCEPTIONS=TRUE
3073 AC_SUBST(ENABLE_WASM_EXCEPTIONS)
3075 # Whether to build "avmedia" functionality or not.
3077 if test "$enable_avmedia" = yes; then
3078     BUILD_TYPE="$BUILD_TYPE AVMEDIA"
3079     AC_DEFINE(HAVE_FEATURE_AVMEDIA)
3080 else
3081     test_gstreamer_1_0=no
3084 # Decide whether to build database connectivity stuff (including Base) or not.
3085 if test "$enable_database_connectivity" != no; then
3086     BUILD_TYPE="$BUILD_TYPE DBCONNECTIVITY"
3087     AC_DEFINE(HAVE_FEATURE_DBCONNECTIVITY)
3088 else
3089     if test "$_os" = iOS; then
3090         AC_MSG_ERROR([Presumly can't disable DB connectivity on iOS.])
3091     fi
3092     disable_database_connectivity_dependencies
3095 if test -z "$enable_extensions"; then
3096     # For iOS and Android Viewer, disable extensions unless specifically overridden with --enable-extensions.
3097     if test $_os != iOS && test $_os != Android -o "$ENABLE_ANDROID_LOK" = TRUE ; then
3098         enable_extensions=yes
3099     fi
3102 DISABLE_SCRIPTING=''
3103 if test "$enable_scripting" = yes; then
3104     BUILD_TYPE="$BUILD_TYPE SCRIPTING"
3105     AC_DEFINE(HAVE_FEATURE_SCRIPTING)
3106 else
3107     DISABLE_SCRIPTING='TRUE'
3108     SCPDEFS="$SCPDEFS -DDISABLE_SCRIPTING"
3111 if test $_os = iOS -o $_os = Android -o $_os = Emscripten; then
3112     # Disable dynamic_loading always for iOS and Android
3113     enable_dynamic_loading=no
3114 elif test -z "$enable_dynamic_loading"; then
3115     # Otherwise enable it unless specifically disabled
3116     enable_dynamic_loading=yes
3119 DISABLE_DYNLOADING=''
3120 if test "$enable_dynamic_loading" = yes; then
3121     BUILD_TYPE="$BUILD_TYPE DYNLOADING"
3122 else
3123     DISABLE_DYNLOADING='TRUE'
3124     if test $_os != iOS -a $_os != Android; then
3125         enable_database_connectivity=no
3126         enable_nss=no
3127         enable_odk=no
3128         enable_python=no
3129         enable_skia=no
3130         with_java=no
3131     fi
3133 AC_SUBST(DISABLE_DYNLOADING)
3135 ENABLE_CUSTOMTARGET_COMPONENTS=
3136 if test "$enable_customtarget_components" = yes -a "$DISABLE_DYNLOADING" = TRUE; then
3137     ENABLE_CUSTOMTARGET_COMPONENTS=TRUE
3138     if test -n "$with_locales" -a "$with_locales" != en -a "$with_locales" != ALL; then
3139         AC_MSG_ERROR([Currently just --with-locales=all or en is supported with --enable-customtarget-components])
3140     fi
3142 AC_SUBST(ENABLE_CUSTOMTARGET_COMPONENTS)
3144 if test "$enable_extensions" = yes; then
3145     BUILD_TYPE="$BUILD_TYPE EXTENSIONS"
3146     AC_DEFINE(HAVE_FEATURE_EXTENSIONS)
3147 else
3148     enable_extension_integration=no
3149     enable_extension_update=no
3152 # remember SYSBASE value
3153 AC_SUBST(SYSBASE)
3155 dnl ===================================================================
3156 dnl  Sort out various gallery compilation options
3157 dnl ===================================================================
3158 WITH_GALLERY_BUILD=TRUE
3159 AC_MSG_CHECKING([how to build and package galleries])
3160 if test -n "${with_galleries}"; then
3161     if test "$with_galleries" = "build"; then
3162         if test "$enable_database_connectivity" = no; then
3163             AC_MSG_ERROR([DB connectivity is needed for gengal / svx])
3164         fi
3165         AC_MSG_RESULT([build from source images internally])
3166     elif test "$with_galleries" = "no"; then
3167         WITH_GALLERY_BUILD=
3168         AC_MSG_RESULT([disable non-internal gallery build])
3169     else
3170         AC_MSG_ERROR([unknown value --with-galleries=$with_galleries])
3171     fi
3172 else
3173     if test $_os != iOS -a $_os != Android; then
3174         AC_MSG_RESULT([internal src images for desktop])
3175     else
3176         WITH_GALLERY_BUILD=
3177         AC_MSG_RESULT([disable src image build])
3178     fi
3180 AC_SUBST(WITH_GALLERY_BUILD)
3182 dnl ===================================================================
3183 dnl  Checks if ccache is available
3184 dnl ===================================================================
3185 CCACHE_DEPEND_MODE=
3186 if test "$enable_ccache" = "no"; then
3187     CCACHE=""
3188 elif test -n "$enable_ccache" -o \( "$enable_ccache" = "" -a "$enable_icecream" != "yes" \); then
3189     case "%$CC%$CXX%" in
3190     # If $CC and/or $CXX already contain "ccache" (possibly suffixed with some version number etc),
3191     # assume that's good then
3192     *%ccache[[-_' ']]*|*/ccache[[-_' ']]*)
3193         AC_MSG_NOTICE([ccache seems to be included in a pre-defined CC and/or CXX])
3194         CCACHE_DEPEND_MODE=1
3195         ;;
3196     *)
3197         # try to use our own ccache if it is available and CCACHE was not already defined
3198         if test -z "$CCACHE"; then
3199             if test "$_os" = "WINNT"; then
3200                 ccache_ext=.exe # e.g. openssl build needs ccache.exe, not just ccache
3201             fi
3202             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/ccache$ccache_ext" ; then
3203                 CCACHE="$LODE_HOME/opt/bin/ccache$ccache_ext"
3204             elif test -x "/opt/lo/bin/ccache$ccache_ext"; then
3205                 CCACHE="/opt/lo/bin/ccache$ccache_ext"
3206             fi
3207         fi
3208         AC_PATH_PROG([CCACHE],[ccache],[not found])
3209         if test "$CCACHE" != "not found" -a "$_os" = "WINNT"; then
3210             CCACHE=`win_short_path_for_make "$CCACHE"`
3211             # check that it has MSVC support (it should recognize it in CCACHE_COMPILERTYPE)
3212             rm -f conftest.txt
3213             AC_MSG_CHECKING([whether $CCACHE has MSVC support])
3214             CCACHE_COMPILERTYPE=cl CCACHE_LOGFILE=conftest.txt $CCACHE echo >/dev/null 2>/dev/null
3215             if grep -q 'Config: (environment) compiler_type = cl' conftest.txt; then
3216                 AC_MSG_RESULT(yes)
3217             else
3218                 AC_MSG_RESULT(no)
3219                 CCACHE="not found"
3220             fi
3221             rm -f conftest.txt
3222         fi
3223         if test "$CCACHE" = "not found" -a "$_os" = "WINNT"; then
3224             # on windows/VC perhaps sccache is around?
3225             case "%$CC%$CXX%" in
3226             # If $CC and/or $CXX already contain "sccache" (possibly suffixed with some version number etc),
3227             # assume that's good then
3228             *%sccache[[-_' ']]*|*/sccache[[-_' ']]*)
3229                 AC_MSG_NOTICE([sccache seems to be included in a pre-defined CC and/or CXX])
3230                 CCACHE_DEPEND_MODE=1
3231                 SCCACHE=1
3232                 ;;
3233             *)
3234                 # for sharing code below, reuse CCACHE env var
3235                 AC_PATH_PROG([CCACHE],[sccache],[not found])
3236                 if test "$CCACHE" != "not found"; then
3237                     CCACHE=`win_short_path_for_make "$CCACHE"`
3238                     SCCACHE=1
3239                     CCACHE_DEPEND_MODE=1
3240                 fi
3241                 ;;
3242             esac
3243         fi
3244         if test "$CCACHE" = "not found"; then
3245             CCACHE=""
3246         fi
3247         if test -n "$CCACHE" -a -z "$SCCACHE"; then
3248             CCACHE_DEPEND_MODE=1
3249             # Need to check for ccache version: otherwise prevents
3250             # caching of the results (like "-x objective-c++" for Mac)
3251             if test $_os = Darwin -o $_os = iOS; then
3252                 # Check ccache version
3253                 AC_MSG_CHECKING([whether version of ccache is suitable])
3254                 CCACHE_VERSION=`"$CCACHE" -V | "$AWK" '/^ccache version/{print $3}'`
3255                 CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
3256                 if test "$CCACHE_VERSION" = "2.4_OOo" -o "$CCACHE_NUMVER" -ge "030100"; then
3257                     AC_MSG_RESULT([yes, $CCACHE_VERSION])
3258                 else
3259                     AC_MSG_RESULT([no, $CCACHE_VERSION])
3260                     CCACHE=""
3261                     CCACHE_DEPEND_MODE=
3262                 fi
3263             fi
3264         fi
3265         ;;
3266     esac
3267 else
3268     CCACHE=""
3270 if test "$enable_ccache" = "nodepend"; then
3271     CCACHE_DEPEND_MODE=""
3273 AC_SUBST(CCACHE_DEPEND_MODE)
3275 # sccache defaults are good enough
3276 if test "$CCACHE" != "" -a -z "$SCCACHE"; then
3277     # e.g. (/home/rene/.config/ccache/ccache.conf) max_size = 20.0G
3278     # -p works with both 4.2 and 4.4
3279     ccache_size_msg=$([$CCACHE -p | $AWK /max_size/'{ print $4 }' | sed -e 's/\.[0-9]*//'])
3280     ccache_size=$(echo "$ccache_size_msg" | grep "G" | sed -e 's/G.*$//')
3281     if test "$ccache_size" = ""; then
3282         ccache_size=$(echo "$ccache_size_msg" | grep "M" | sed -e 's/\ M.*$//')
3283         if test "$ccache_size" = ""; then
3284             ccache_size=0
3285         fi
3286         # we could not determine the size or it was less than 1GB -> disable auto-ccache
3287         if test $ccache_size -lt 1024; then
3288             CCACHE=""
3289             AC_MSG_WARN([ccache's cache size is less than 1GB using it is counter-productive: Disabling auto-ccache detection])
3290             add_warning "ccache's cache size is less than 1GB using it is counter-productive: auto-ccache detection disabled"
3291         else
3292             # warn that ccache may be too small for debug build
3293             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3294             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3295         fi
3296     else
3297         if test $ccache_size -lt 5; then
3298             #warn that ccache may be too small for debug build
3299             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3300             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3301         fi
3302     fi
3305 ENABLE_Z7_DEBUG=
3306 if test "$enable_z7_debug" != no; then
3307     if test "$enable_z7_debug" = yes -o -n "$CCACHE"; then
3308         ENABLE_Z7_DEBUG=TRUE
3309     fi
3310 else
3311     AC_MSG_WARN([ccache will not work with --disable-z7-debug])
3312     add_warning "ccache will not work with --disable-z7-debug"
3314 AC_SUBST(ENABLE_Z7_DEBUG)
3316 dnl ===================================================================
3317 dnl  Checks for C compiler,
3318 dnl  The check for the C++ compiler is later on.
3319 dnl ===================================================================
3320 if test "$_os" != "WINNT"; then
3321     GCC_HOME_SET="true"
3322     AC_MSG_CHECKING([gcc home])
3323     if test -z "$with_gcc_home"; then
3324         if test "$enable_icecream" = "yes"; then
3325             if test -d "/usr/lib/icecc/bin"; then
3326                 GCC_HOME="/usr/lib/icecc/"
3327             elif test -d "/usr/libexec/icecc/bin"; then
3328                 GCC_HOME="/usr/libexec/icecc/"
3329             elif test -d "/opt/icecream/bin"; then
3330                 GCC_HOME="/opt/icecream/"
3331             else
3332                 AC_MSG_ERROR([Could not figure out the location of icecream GCC wrappers, manually use --with-gcc-home])
3334             fi
3335         else
3336             GCC_HOME=`which gcc | $SED -e s,/bin/gcc,,`
3337             GCC_HOME_SET="false"
3338         fi
3339     else
3340         GCC_HOME="$with_gcc_home"
3341     fi
3342     AC_MSG_RESULT($GCC_HOME)
3343     AC_SUBST(GCC_HOME)
3345     if test "$GCC_HOME_SET" = "true"; then
3346         if test -z "$CC"; then
3347             CC="$GCC_HOME/bin/gcc"
3348             CC_BASE="gcc"
3349         fi
3350         if test -z "$CXX"; then
3351             CXX="$GCC_HOME/bin/g++"
3352             CXX_BASE="g++"
3353         fi
3354     fi
3357 COMPATH=`dirname "$CC"`
3358 if test "$COMPATH" = "."; then
3359     AC_PATH_PROGS(COMPATH, $CC)
3360     dnl double square bracket to get single because of M4 quote...
3361     COMPATH=`echo $COMPATH | $SED "s@/[[^/:]]*\\\$@@"`
3363 COMPATH=`echo $COMPATH | $SED "s@/[[Bb]][[Ii]][[Nn]]\\\$@@"`
3365 dnl ===================================================================
3366 dnl Java support
3367 dnl ===================================================================
3368 AC_MSG_CHECKING([whether to build with Java support])
3369 if test "$with_java" != "no"; then
3370     if test "$DISABLE_SCRIPTING" = TRUE; then
3371         AC_MSG_RESULT([no, overridden by --disable-scripting])
3372         ENABLE_JAVA=""
3373         with_java=no
3374     else
3375         AC_MSG_RESULT([yes])
3376         ENABLE_JAVA="TRUE"
3377         AC_DEFINE(HAVE_FEATURE_JAVA)
3378     fi
3379 else
3380     AC_MSG_RESULT([no])
3381     ENABLE_JAVA=""
3384 AC_SUBST(ENABLE_JAVA)
3386 dnl ENABLE_JAVA="TRUE" if we want there to be *run-time* (and build-time) support for Java
3388 dnl ENABLE_JAVA="" indicate no Java support at all
3390 dnl ===================================================================
3391 dnl Check macOS SDK and compiler
3392 dnl ===================================================================
3394 if test $_os = Darwin; then
3396     # The SDK in the currently selected Xcode should be found.
3398     AC_MSG_CHECKING([what macOS SDK to use])
3399     for macosx_sdk in 12.3 12.1 12.0 11.3 11.1 11.0 10.15 10.14 10.13; do
3400         MACOSX_SDK_PATH=`xcrun --sdk macosx${macosx_sdk} --show-sdk-path 2> /dev/null`
3401         if test -d "$MACOSX_SDK_PATH"; then
3402             break
3403         else
3404             MACOSX_SDK_PATH="`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${macosx_sdk}.sdk"
3405             if test -d "$MACOSX_SDK_PATH"; then
3406                 break
3407             fi
3408         fi
3409     done
3410     if test ! -d "$MACOSX_SDK_PATH"; then
3411         AC_MSG_ERROR([Could not find an appropriate macOS SDK])
3412     fi
3414     AC_MSG_RESULT([macOS SDK $macosx_sdk at $MACOSX_SDK_PATH])
3416     case $macosx_sdk in
3417     10.13)
3418         MACOSX_SDK_VERSION=101300
3419         ;;
3420     10.14)
3421         MACOSX_SDK_VERSION=101400
3422         ;;
3423     10.15)
3424         MACOSX_SDK_VERSION=101500
3425         ;;
3426     11.0)
3427         MACOSX_SDK_VERSION=110000
3428         ;;
3429     11.1)
3430         MACOSX_SDK_VERSION=110100
3431         ;;
3432     11.3)
3433         MACOSX_SDK_VERSION=110300
3434         ;;
3435     12.0)
3436         MACOSX_SDK_VERSION=120000
3437         ;;
3438     12.1)
3439         MACOSX_SDK_VERSION=120100
3440         ;;
3441     12.3)
3442         MACOSX_SDK_VERSION=120300
3443         ;;
3444     *)
3445         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported])
3446         ;;
3447     esac
3449     if test "$host_cpu" = arm64 -a $MACOSX_SDK_VERSION -lt 110000; then
3450         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported for Apple Silicon])
3451     fi
3453     if test "$with_macosx_version_min_required" = "" ; then
3454         if test "$host_cpu" = x86_64; then
3455             with_macosx_version_min_required="10.13";
3456         else
3457             with_macosx_version_min_required="11.0";
3458         fi
3459     fi
3461     # export this so that "xcrun" invocations later return matching values
3462     DEVELOPER_DIR="${MACOSX_SDK_PATH%/SDKs*}"
3463     DEVELOPER_DIR="${DEVELOPER_DIR%/Platforms*}"
3464     export DEVELOPER_DIR
3465     FRAMEWORKSHOME="$MACOSX_SDK_PATH/System/Library/Frameworks"
3466     MACOSX_DEPLOYMENT_TARGET="$with_macosx_version_min_required"
3468     AC_MSG_CHECKING([whether Xcode is new enough])
3469     my_xcode_ver1=$(xcrun xcodebuild -version | head -n 1)
3470     my_xcode_ver2=${my_xcode_ver1#Xcode }
3471     my_xcode_ver3=$(printf %s "$my_xcode_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
3472     if test "$my_xcode_ver3" -ge 1205; then
3473         AC_MSG_RESULT([yes ($my_xcode_ver2)])
3474     else
3475         AC_MSG_ERROR(["$my_xcode_ver1" is too old or unrecognized, must be at least Xcode 12.5])
3476     fi
3478     case "$with_macosx_version_min_required" in
3479     10.13)
3480         MAC_OS_X_VERSION_MIN_REQUIRED="101300"
3481         ;;
3482     10.14)
3483         MAC_OS_X_VERSION_MIN_REQUIRED="101400"
3484         ;;
3485     10.15)
3486         MAC_OS_X_VERSION_MIN_REQUIRED="101500"
3487         ;;
3488     10.16)
3489         MAC_OS_X_VERSION_MIN_REQUIRED="101600"
3490         ;;
3491     11.0)
3492         MAC_OS_X_VERSION_MIN_REQUIRED="110000"
3493         ;;
3494     11.1)
3495         MAC_OS_X_VERSION_MIN_REQUIRED="110100"
3496         ;;
3497     11.3)
3498         MAC_OS_X_VERSION_MIN_REQUIRED="110300"
3499         ;;
3500     12.0)
3501         MAC_OS_X_VERSION_MIN_REQUIRED="120000"
3502         ;;
3503     12.1)
3504         MAC_OS_X_VERSION_MIN_REQUIRED="120100"
3505         ;;
3506     12.3)
3507         MAC_OS_X_VERSION_MIN_REQUIRED="120300"
3508         ;;
3509     *)
3510         AC_MSG_ERROR([with-macosx-version-min-required $with_macosx_version_min_required is not a supported value, supported values are 10.13--12.3])
3511         ;;
3512     esac
3514     LIBTOOL=/usr/bin/libtool
3515     INSTALL_NAME_TOOL=install_name_tool
3516     if test -z "$save_CC"; then
3517         stdlib=-stdlib=libc++
3519         AC_MSG_CHECKING([what C compiler to use])
3520         CC="`xcrun -find clang`"
3521         CC_BASE=`first_arg_basename "$CC"`
3522         if test "$host_cpu" = x86_64; then
3523             CC+=" -target x86_64-apple-macos"
3524         else
3525             CC+=" -target arm64-apple-macos"
3526         fi
3527         CC+=" -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3528         AC_MSG_RESULT([$CC])
3530         AC_MSG_CHECKING([what C++ compiler to use])
3531         CXX="`xcrun -find clang++`"
3532         CXX_BASE=`first_arg_basename "$CXX"`
3533         if test "$host_cpu" = x86_64; then
3534             CXX+=" -target x86_64-apple-macos"
3535         else
3536             CXX+=" -target arm64-apple-macos"
3537         fi
3538         CXX+=" $stdlib -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3539         AC_MSG_RESULT([$CXX])
3541         INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3542         AR=`xcrun -find ar`
3543         NM=`xcrun -find nm`
3544         STRIP=`xcrun -find strip`
3545         LIBTOOL=`xcrun -find libtool`
3546         RANLIB=`xcrun -find ranlib`
3547     fi
3549     AC_MSG_CHECKING([that macosx-version-min-required is coherent with macos-with-sdk])
3550     if test $MAC_OS_X_VERSION_MIN_REQUIRED -gt $MACOSX_SDK_VERSION; then
3551         AC_MSG_ERROR([the version minimum required cannot be greater than the sdk level])
3552     else
3553         AC_MSG_RESULT([ok])
3554     fi
3555     AC_MSG_NOTICE([MAC_OS_X_VERSION_MIN_REQUIRED=$MAC_OS_X_VERSION_MIN_REQUIRED])
3557     AC_MSG_CHECKING([whether to do code signing])
3559     if test "$enable_macosx_code_signing" = yes; then
3560         # By default use the first suitable certificate (?).
3562         # http://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3563         # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3564         # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3565         # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3566         # "Developer ID Application" one.
3568         identity=`security find-identity -p codesigning -v 2>/dev/null | grep 'Developer ID Application:' | $AWK '{print $2}' |head -1`
3569         if test -n "$identity"; then
3570             MACOSX_CODESIGNING_IDENTITY=$identity
3571             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3572             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3573         else
3574             AC_MSG_ERROR([cannot determine identity to use])
3575         fi
3576     elif test -n "$enable_macosx_code_signing" -a "$enable_macosx_code_signing" != no ; then
3577         MACOSX_CODESIGNING_IDENTITY=$enable_macosx_code_signing
3578         pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3579         AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3580     else
3581         AC_MSG_RESULT([no])
3582     fi
3584     AC_MSG_CHECKING([whether to create a Mac App Store package])
3586     if test -z "$enable_macosx_package_signing" || test "$enable_macosx_package_signing" == no; then
3587         AC_MSG_RESULT([no])
3588     elif test -z "$MACOSX_CODESIGNING_IDENTITY"; then
3589         AC_MSG_ERROR([You forgot --enable-macosx-code-signing])
3590     elif test "$enable_macosx_package_signing" = yes; then
3591         # By default use the first suitable certificate.
3592         # It should be a "3rd Party Mac Developer Installer" one
3594         identity=`security find-identity -v 2>/dev/null | grep '3rd Party Mac Developer Installer:' | awk '{print $2}' |head -1`
3595         if test -n "$identity"; then
3596             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3597             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3598             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3599         else
3600             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3601         fi
3602     else
3603         MACOSX_PACKAGE_SIGNING_IDENTITY=$enable_macosx_package_signing
3604         pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3605         AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3606     fi
3608     if test -n "$MACOSX_CODESIGNING_IDENTITY" -a -n "$MACOSX_PACKAGE_SIGNING_IDENTITY" -a "$MACOSX_CODESIGNING_IDENTITY" = "$MACOSX_PACKAGE_SIGNING_IDENTITY"; then
3609         AC_MSG_ERROR([You should not use the same identity for code and package signing])
3610     fi
3612     AC_MSG_CHECKING([whether to sandbox the application])
3614     if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then
3615         AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java])
3616     elif test "$enable_macosx_sandbox" = yes; then
3617         ENABLE_MACOSX_SANDBOX=TRUE
3618         AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX)
3619         AC_MSG_RESULT([yes])
3620     else
3621         AC_MSG_RESULT([no])
3622     fi
3624     AC_MSG_CHECKING([what macOS app bundle identifier to use])
3625     MACOSX_BUNDLE_IDENTIFIER=$with_macosx_bundle_identifier
3626     AC_MSG_RESULT([$MACOSX_BUNDLE_IDENTIFIER])
3628 AC_SUBST(MACOSX_SDK_PATH)
3629 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3630 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3631 AC_SUBST(INSTALL_NAME_TOOL)
3632 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3633 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3634 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3635 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3636 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3638 dnl ===================================================================
3639 dnl Check iOS SDK and compiler
3640 dnl ===================================================================
3642 if test $_os = iOS; then
3643     AC_MSG_CHECKING([what iOS SDK to use])
3644     current_sdk_ver=15.4
3645     older_sdk_vers="15.2 15.0 14.5"
3646     if test "$enable_ios_simulator" = "yes"; then
3647         platform=iPhoneSimulator
3648         versionmin=-mios-simulator-version-min=13.6
3649     else
3650         platform=iPhoneOS
3651         versionmin=-miphoneos-version-min=13.6
3652     fi
3653     xcode_developer=`xcode-select -print-path`
3655     for sdkver in $current_sdk_ver $older_sdk_vers; do
3656         t=$xcode_developer/Platforms/$platform.platform/Developer/SDKs/$platform$sdkver.sdk
3657         if test -d $t; then
3658             sysroot=$t
3659             break
3660         fi
3661     done
3663     if test -z "$sysroot"; then
3664         AC_MSG_ERROR([Could not find iOS SDK, expected something like $xcode_developer/Platforms/$platform.platform/Developer/SDKs/${platform}${current_sdk_ver}.sdk])
3665     fi
3667     AC_MSG_RESULT($sysroot)
3669     stdlib="-stdlib=libc++"
3671     AC_MSG_CHECKING([what C compiler to use])
3672     CC="`xcrun -find clang`"
3673     CC_BASE=`first_arg_basename "$CC"`
3674     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3675     AC_MSG_RESULT([$CC])
3677     AC_MSG_CHECKING([what C++ compiler to use])
3678     CXX="`xcrun -find clang++`"
3679     CXX_BASE=`first_arg_basename "$CXX"`
3680     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3681     AC_MSG_RESULT([$CXX])
3683     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3684     AR=`xcrun -find ar`
3685     NM=`xcrun -find nm`
3686     STRIP=`xcrun -find strip`
3687     LIBTOOL=`xcrun -find libtool`
3688     RANLIB=`xcrun -find ranlib`
3691 AC_MSG_CHECKING([whether to treat the installation as read-only])
3693 if test $_os = Darwin; then
3694     enable_readonly_installset=yes
3695 elif test "$enable_extensions" != yes; then
3696     enable_readonly_installset=yes
3698 if test "$enable_readonly_installset" = yes; then
3699     AC_MSG_RESULT([yes])
3700     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3701 else
3702     AC_MSG_RESULT([no])
3705 dnl ===================================================================
3706 dnl Structure of install set
3707 dnl ===================================================================
3709 if test $_os = Darwin; then
3710     LIBO_BIN_FOLDER=MacOS
3711     LIBO_ETC_FOLDER=Resources
3712     LIBO_LIBEXEC_FOLDER=MacOS
3713     LIBO_LIB_FOLDER=Frameworks
3714     LIBO_LIB_PYUNO_FOLDER=Resources
3715     LIBO_SHARE_FOLDER=Resources
3716     LIBO_SHARE_HELP_FOLDER=Resources/help
3717     LIBO_SHARE_JAVA_FOLDER=Resources/java
3718     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3719     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3720     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3721     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3722     LIBO_URE_BIN_FOLDER=MacOS
3723     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3724     LIBO_URE_LIB_FOLDER=Frameworks
3725     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3726     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3727 elif test $_os = WINNT; then
3728     LIBO_BIN_FOLDER=program
3729     LIBO_ETC_FOLDER=program
3730     LIBO_LIBEXEC_FOLDER=program
3731     LIBO_LIB_FOLDER=program
3732     LIBO_LIB_PYUNO_FOLDER=program
3733     LIBO_SHARE_FOLDER=share
3734     LIBO_SHARE_HELP_FOLDER=help
3735     LIBO_SHARE_JAVA_FOLDER=program/classes
3736     LIBO_SHARE_PRESETS_FOLDER=presets
3737     LIBO_SHARE_READMES_FOLDER=readmes
3738     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3739     LIBO_SHARE_SHELL_FOLDER=program/shell
3740     LIBO_URE_BIN_FOLDER=program
3741     LIBO_URE_ETC_FOLDER=program
3742     LIBO_URE_LIB_FOLDER=program
3743     LIBO_URE_MISC_FOLDER=program
3744     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3745 else
3746     LIBO_BIN_FOLDER=program
3747     LIBO_ETC_FOLDER=program
3748     LIBO_LIBEXEC_FOLDER=program
3749     LIBO_LIB_FOLDER=program
3750     LIBO_LIB_PYUNO_FOLDER=program
3751     LIBO_SHARE_FOLDER=share
3752     LIBO_SHARE_HELP_FOLDER=help
3753     LIBO_SHARE_JAVA_FOLDER=program/classes
3754     LIBO_SHARE_PRESETS_FOLDER=presets
3755     LIBO_SHARE_READMES_FOLDER=readmes
3756     if test "$enable_fuzzers" != yes; then
3757         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3758     else
3759         LIBO_SHARE_RESOURCE_FOLDER=resource
3760     fi
3761     LIBO_SHARE_SHELL_FOLDER=program/shell
3762     LIBO_URE_BIN_FOLDER=program
3763     LIBO_URE_ETC_FOLDER=program
3764     LIBO_URE_LIB_FOLDER=program
3765     LIBO_URE_MISC_FOLDER=program
3766     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3768 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3769 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3770 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3771 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3772 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3773 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3774 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3775 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3776 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3777 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3778 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3779 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3780 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3781 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3782 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3783 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3785 # Not all of them needed in config_host.mk, add more if need arises
3786 AC_SUBST(LIBO_BIN_FOLDER)
3787 AC_SUBST(LIBO_ETC_FOLDER)
3788 AC_SUBST(LIBO_LIB_FOLDER)
3789 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3790 AC_SUBST(LIBO_SHARE_FOLDER)
3791 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3792 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3793 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3794 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3795 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3796 AC_SUBST(LIBO_URE_BIN_FOLDER)
3797 AC_SUBST(LIBO_URE_ETC_FOLDER)
3798 AC_SUBST(LIBO_URE_LIB_FOLDER)
3799 AC_SUBST(LIBO_URE_MISC_FOLDER)
3800 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3802 dnl ===================================================================
3803 dnl Windows specific tests and stuff
3804 dnl ===================================================================
3806 reg_get_value()
3808     # Return value: $regvalue
3809     unset regvalue
3811     if test "$build_os" = "wsl"; then
3812         regvalue=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --read-registry $1 "$2" 2>/dev/null)
3813         return
3814     fi
3816     local _regentry="/proc/registry${1}/${2}"
3817     if test -f "$_regentry"; then
3818         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3819         # Registry keys read via /proc/registry* are always \0 terminated!
3820         local _regvalue=$(tr -d '\0' < "$_regentry")
3821         if test $? -eq 0; then
3822             regvalue=$_regvalue
3823         fi
3824     fi
3827 # Get a value from the 32-bit side of the Registry
3828 reg_get_value_32()
3830     reg_get_value "32" "$1"
3833 # Get a value from the 64-bit side of the Registry
3834 reg_get_value_64()
3836     reg_get_value "64" "$1"
3839 case "$host_os" in
3840 cygwin*|wsl*)
3841     COM=MSC
3842     OS=WNT
3843     RTL_OS=Windows
3844     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3845         P_SEP=";"
3846     else
3847         P_SEP=:
3848     fi
3849     case "$host_cpu" in
3850     x86_64)
3851         CPUNAME=X86_64
3852         RTL_ARCH=X86_64
3853         PLATFORMID=windows_x86_64
3854         WINDOWS_X64=1
3855         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
3856         WIN_HOST_ARCH="x64"
3857         WIN_MULTI_ARCH="x86"
3858         WIN_HOST_BITS=64
3859         ;;
3860     i*86)
3861         CPUNAME=INTEL
3862         RTL_ARCH=x86
3863         PLATFORMID=windows_x86
3864         WIN_HOST_ARCH="x86"
3865         WIN_HOST_BITS=32
3866         WIN_OTHER_ARCH="x64"
3867         ;;
3868     aarch64)
3869         CPUNAME=AARCH64
3870         RTL_ARCH=AARCH64
3871         PLATFORMID=windows_aarch64
3872         WINDOWS_X64=1
3873         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
3874         WIN_HOST_ARCH="arm64"
3875         WIN_HOST_BITS=64
3876         with_ucrt_dir=no
3877         ;;
3878     *)
3879         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
3880         ;;
3881     esac
3883     case "$build_cpu" in
3884     x86_64) WIN_BUILD_ARCH="x64" ;;
3885     i*86) WIN_BUILD_ARCH="x86" ;;
3886     aarch64) WIN_BUILD_ARCH="arm64" ;;
3887     *)
3888         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
3889         ;;
3890     esac
3892     SCPDEFS="$SCPDEFS -D_MSC_VER"
3893     ;;
3894 esac
3896 # multi-arch is an arch, which can execute on the host (x86 on x64), while
3897 # other-arch won't, but wouldn't break the build (x64 on x86).
3898 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
3899     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
3903 if test "$build_cpu" != "$host_cpu" -o "$DISABLE_DYNLOADING" = TRUE; then
3904     # To allow building Windows multi-arch releases without cross-tooling
3905     if test "$DISABLE_DYNLOADING" = TRUE -o \( -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH" \); then
3906         cross_compiling="yes"
3907     fi
3910 if test "$cross_compiling" = "yes"; then
3911     export CROSS_COMPILING=TRUE
3912     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
3913         ENABLE_WASM_STRIP=TRUE
3914     fi
3915 else
3916     CROSS_COMPILING=
3917     BUILD_TYPE="$BUILD_TYPE NATIVE"
3919 AC_SUBST(CROSS_COMPILING)
3920 AC_SUBST(ENABLE_WASM_STRIP)
3922 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
3923 # NOTE: must _not_ be used for bundled external libraries!
3924 ISYSTEM=
3925 if test "$GCC" = "yes"; then
3926     AC_MSG_CHECKING( for -isystem )
3927     save_CFLAGS=$CFLAGS
3928     CFLAGS="$CFLAGS -isystem /usr/include -Werror"
3929     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
3930     CFLAGS=$save_CFLAGS
3931     if test -n "$ISYSTEM"; then
3932         AC_MSG_RESULT(yes)
3933     else
3934         AC_MSG_RESULT(no)
3935     fi
3937 if test -z "$ISYSTEM"; then
3938     # fall back to using -I
3939     ISYSTEM=-I
3941 AC_SUBST(ISYSTEM)
3943 dnl ===================================================================
3944 dnl  Check which Visual Studio compiler is used
3945 dnl ===================================================================
3947 map_vs_year_to_version()
3949     # Return value: $vsversion
3951     unset vsversion
3953     case $1 in
3954     2019)
3955         vsversion=16;;
3956     2022)
3957         vsversion=17;;
3958     *)
3959         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
3960     esac
3963 vs_versions_to_check()
3965     # Args: $1 (optional) : versions to check, in the order of preference
3966     # Return value: $vsversions
3968     unset vsversions
3970     if test -n "$1"; then
3971         map_vs_year_to_version "$1"
3972         vsversions=$vsversion
3973     else
3974         # Default version is 2019
3975         vsversions="16"
3976     fi
3979 win_get_env_from_vsvars32bat()
3981     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
3982     # Also seems to be located in another directory under the same name: vsvars32.bat
3983     # https://github.com/bazelbuild/bazel/blob/master/src/main/native/build_windows_jni.sh#L56-L57
3984     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$(cygpath -w $VC_PRODUCT_DIR)" > $WRAPPERBATCHFILEPATH
3985     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
3986     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
3987     local result
3988     if test "$build_os" = "wsl"; then
3989         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
3990     else
3991         chmod +x $WRAPPERBATCHFILEPATH
3992         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
3993     fi
3994     rm -f $WRAPPERBATCHFILEPATH
3995     printf '%s' "$result"
3998 find_ucrt()
4000     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/InstallationFolder"
4001     if test -n "$regvalue"; then
4002         PathFormat "$regvalue"
4003         UCRTSDKDIR=$formatted_path_unix
4004         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion"
4005         UCRTVERSION=$regvalue
4006         # Rest if not exist
4007         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
4008           UCRTSDKDIR=
4009         fi
4010     fi
4011     if test -z "$UCRTSDKDIR"; then
4012         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
4013         ide_env_file="${ide_env_dir}VsDevCmd.bat"
4014         if test -f "$ide_env_file"; then
4015             PathFormat "$(win_get_env_from_vsvars32bat UniversalCRTSdkDir)"
4016             UCRTSDKDIR=$formatted_path
4017             UCRTVERSION=$(win_get_env_from_vsvars32bat UCRTVersion)
4018             dnl Hack needed at least by tml:
4019             if test "$UCRTVERSION" = 10.0.15063.0 \
4020                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
4021                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
4022             then
4023                 UCRTVERSION=10.0.14393.0
4024             fi
4025         else
4026           AC_MSG_ERROR([No UCRT found])
4027         fi
4028     fi
4031 find_msvc()
4033     # Find Visual C++
4034     # Args: $1 (optional) : The VS version year
4035     # Return values: $vctest, $vcyear, $vctoolset, $vcnumwithdot, $vcbuildnumber
4037     unset vctest vctoolset vcnumwithdot vcbuildnumber
4039     vs_versions_to_check "$1"
4040     if test "$build_os" = wsl; then
4041         vswhere="$PROGRAMFILESX86"
4042     else
4043         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
4044     fi
4045     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
4046     PathFormat "$vswhere"
4047     vswhere=$formatted_path_unix
4048     for ver in $vsversions; do
4049         vswhereoutput=`$vswhere -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4050         if test -z "$vswhereoutput"; then
4051             vswhereoutput=`$vswhere -prerelease -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4052         fi
4053         # Fall back to all MS products (this includes VC++ Build Tools)
4054         if ! test -n "$vswhereoutput"; then
4055             AC_MSG_CHECKING([VC++ Build Tools and similar])
4056             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4057         fi
4058         if test -n "$vswhereoutput"; then
4059             PathFormat "$vswhereoutput"
4060             vctest=$formatted_path_unix
4061             break
4062         fi
4063     done
4065     if test -n "$vctest"; then
4066         vcnumwithdot="$ver.0"
4067         case "$vcnumwithdot" in
4068         16.0)
4069             vcyear=2019
4070             vctoolset=v142
4071             ;;
4072         17.0)
4073             vcyear=2022
4074             vctoolset=v143
4075             ;;
4076         esac
4077         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
4079     fi
4082 test_cl_exe()
4084     AC_MSG_CHECKING([$1 compiler])
4086     CL_EXE_PATH="$2/cl.exe"
4088     if test ! -f "$CL_EXE_PATH"; then
4089         if test "$1" = "multi-arch"; then
4090             AC_MSG_WARN([no compiler (cl.exe) in $2])
4091             return 1
4092         else
4093             AC_MSG_ERROR([no compiler (cl.exe) in $2])
4094         fi
4095     fi
4097     dnl ===========================================================
4098     dnl  Check for the corresponding mspdb*.dll
4099     dnl ===========================================================
4101     # MSVC 15.0 has libraries from 14.0?
4102     mspdbnum="140"
4104     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
4105         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
4106     fi
4108     # The compiles has to find its shared libraries
4109     OLD_PATH="$PATH"
4110     TEMP_PATH=`cygpath -d "$2"`
4111     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
4113     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
4114         AC_MSG_ERROR([no compiler (cl.exe) in $2])
4115     fi
4117     PATH="$OLD_PATH"
4119     AC_MSG_RESULT([$CL_EXE_PATH])
4122 SOLARINC=
4123 MSBUILD_PATH=
4124 DEVENV=
4125 if test "$_os" = "WINNT"; then
4126     AC_MSG_CHECKING([Visual C++])
4127     find_msvc "$with_visual_studio"
4128     if test -z "$vctest"; then
4129         if test -n "$with_visual_studio"; then
4130             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
4131         else
4132             AC_MSG_ERROR([no Visual Studio installation found])
4133         fi
4134     fi
4135     AC_MSG_RESULT([])
4137     VC_PRODUCT_DIR="$vctest/VC"
4138     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
4140     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
4141     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
4142         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
4143         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
4144         if test $? -ne 0; then
4145             WIN_MULTI_ARCH=""
4146             WIN_OTHER_ARCH=""
4147         fi
4148     fi
4150     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
4151         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
4152         test_cl_exe "build" "$MSVC_BUILD_PATH"
4153     fi
4155     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
4156         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
4157         test_cl_exe "host" "$MSVC_HOST_PATH"
4158     else
4159         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
4160     fi
4162     AC_MSG_CHECKING([for short pathname of VC product directory])
4163     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
4164     AC_MSG_RESULT([$VC_PRODUCT_DIR])
4166     UCRTSDKDIR=
4167     UCRTVERSION=
4169     AC_MSG_CHECKING([for UCRT location])
4170     find_ucrt
4171     # find_ucrt errors out if it doesn't find it
4172     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
4173     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
4174     ucrtincpath_formatted=$formatted_path
4175     # SOLARINC is used for external modules and must be set too.
4176     # And no, it's not sufficient to set SOLARINC only, as configure
4177     # itself doesn't honour it.
4178     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
4179     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
4180     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
4181     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4183     AC_SUBST(UCRTSDKDIR)
4184     AC_SUBST(UCRTVERSION)
4186     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4187     # Find the proper version of MSBuild.exe to use based on the VS version
4188     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath
4189     if test -z "$regvalue" ; then
4190         if test "$WIN_BUILD_ARCH" != "x64"; then
4191             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4192         else
4193             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4194         fi
4195     fi
4196     if test -d "$regvalue" ; then
4197         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4198         AC_MSG_RESULT([$regvalue])
4199     else
4200         AC_MSG_ERROR([MSBuild.exe location not found])
4201     fi
4203     # Find the version of devenv.exe
4204     # MSVC 2017 devenv does not start properly from a DOS 8.3 path
4205     DEVENV=$(cygpath -lm "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe")
4206     DEVENV_unix=$(cygpath -u "$DEVENV")
4207     if test ! -e "$DEVENV_unix"; then
4208         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4209     fi
4211     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4212     dnl needed when building CLR code:
4213     if test -z "$MSVC_CXX"; then
4214         # This gives us a posix path with 8.3 filename restrictions
4215         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4216     fi
4218     if test -z "$CC"; then
4219         CC=$MSVC_CXX
4220         CC_BASE=`first_arg_basename "$CC"`
4221     fi
4222     if test -z "$CXX"; then
4223         CXX=$MSVC_CXX
4224         CXX_BASE=`first_arg_basename "$CXX"`
4225     fi
4227     if test -n "$CC"; then
4228         # Remove /cl.exe from CC case insensitive
4229         AC_MSG_NOTICE([found Visual C++ $vcyear])
4231         main_include_dir=`cygpath -d -m "$COMPATH/Include"`
4232         CPPFLAGS="$CPPFLAGS -I$main_include_dir"
4234         PathFormat "$COMPATH"
4235         COMPATH=`win_short_path_for_make "$formatted_path"`
4237         VCVER=$vcnumwithdot
4238         VCTOOLSET=$vctoolset
4240         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4241         # are always "better", we list them in reverse chronological order.
4243         case "$vcnumwithdot" in
4244         16.0 | 17.0)
4245             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4246             ;;
4247         esac
4249         # The expectation is that --with-windows-sdk should not need to be used
4250         if test -n "$with_windows_sdk"; then
4251             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4252             *" "$with_windows_sdk" "*)
4253                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4254                 ;;
4255             *)
4256                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4257                 ;;
4258             esac
4259         fi
4261         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4262         ac_objext=obj
4263         ac_exeext=exe
4265     else
4266         AC_MSG_ERROR([Visual C++ not found after all, huh])
4267     fi
4269     # ERROR if VS version < 16.5
4270     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4271     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4272         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4273         // between Visual Studio versions and _MSC_VER:
4274         #if _MSC_VER < 1925
4275         #error
4276         #endif
4277     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4279     # WARN if VS version < 16.10
4280     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.10])
4281     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4282         #if _MSC_VER < 1929
4283         #error
4284         #endif
4285     ]])],[vs2019_recommended_version=yes],[vs2019_recommended_version=no])
4287     if test $vs2019_recommended_version = yes; then
4288         AC_MSG_RESULT([yes])
4289     else
4290         AC_MSG_WARN([no])
4291         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."
4292     fi
4294     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4295     # version of the Explorer extension (and maybe other small
4296     # bits, too) needed when installing a 32-bit LibreOffice on a
4297     # 64-bit OS. The 64-bit Explorer extension is a feature that
4298     # has been present since long in OOo. Don't confuse it with
4299     # building LibreOffice itself as 64-bit code.
4301     BUILD_X64=
4302     CXX_X64_BINARY=
4304     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4305         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4306         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4307              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4308         then
4309             BUILD_X64=TRUE
4310             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4311             AC_MSG_RESULT([found])
4312         else
4313             AC_MSG_RESULT([not found])
4314             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4315         fi
4316     elif test "$WIN_HOST_ARCH" = "x64"; then
4317         CXX_X64_BINARY=$CXX
4318     fi
4319     AC_SUBST(BUILD_X64)
4321     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4322     AC_SUBST(CXX_X64_BINARY)
4324     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4325     # needed to support TWAIN scan on both 32- and 64-bit systems
4327     case "$WIN_HOST_ARCH" in
4328     x64)
4329         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4330         if test -n "$CXX_X86_BINARY"; then
4331             BUILD_X86=TRUE
4332             AC_MSG_RESULT([preset])
4333         elif test -n "$WIN_MULTI_ARCH"; then
4334             BUILD_X86=TRUE
4335             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4336             AC_MSG_RESULT([found])
4337         else
4338             AC_MSG_RESULT([not found])
4339             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4340         fi
4341         ;;
4342     x86)
4343         BUILD_X86=TRUE
4344         CXX_X86_BINARY=$MSVC_CXX
4345         ;;
4346     esac
4347     AC_SUBST(BUILD_X86)
4348     AC_SUBST(CXX_X86_BINARY)
4350 AC_SUBST(VCVER)
4351 AC_SUBST(VCTOOLSET)
4352 AC_SUBST(DEVENV)
4353 AC_SUBST(MSVC_CXX)
4355 COM_IS_CLANG=
4356 AC_MSG_CHECKING([whether the compiler is actually Clang])
4357 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4358     #ifndef __clang__
4359     you lose
4360     #endif
4361     int foo=42;
4362     ]])],
4363     [AC_MSG_RESULT([yes])
4364      COM_IS_CLANG=TRUE],
4365     [AC_MSG_RESULT([no])])
4366 AC_SUBST(COM_IS_CLANG)
4368 CLANGVER=
4369 if test "$COM_IS_CLANG" = TRUE; then
4370     AC_MSG_CHECKING([whether Clang is new enough])
4371     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4372         #if !defined __apple_build_version__
4373         #error
4374         #endif
4375         ]])],
4376         [my_apple_clang=yes],[my_apple_clang=])
4377     if test "$my_apple_clang" = yes; then
4378         AC_MSG_RESULT([assumed yes (Apple Clang)])
4379     elif test "$_os" = Emscripten; then
4380         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4381     else
4382         if test "$_os" = WINNT; then
4383             dnl In which case, assume clang-cl:
4384             my_args="/EP /TC"
4385         else
4386             my_args="-E -P"
4387         fi
4388         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC $my_args - | sed 's/ //g'`
4389         CLANG_FULL_VERSION=`echo __clang_version__ | $CC $my_args -`
4390         CLANGVER=`echo $clang_version \
4391             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4392         if test "$CLANGVER" -ge 80001; then
4393             AC_MSG_RESULT([yes ($clang_version)])
4394         else
4395             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 8.0.1])
4396         fi
4397         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4398         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4399     fi
4402 SHOWINCLUDES_PREFIX=
4403 if test "$_os" = WINNT; then
4404     dnl We need to guess the prefix of the -showIncludes output, it can be
4405     dnl localized
4406     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4407     echo "#include <stdlib.h>" > conftest.c
4408     SHOWINCLUDES_PREFIX=`$CC $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4409         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4410     rm -f conftest.c conftest.obj
4411     if test -z "$SHOWINCLUDES_PREFIX"; then
4412         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4413     else
4414         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4415     fi
4417 AC_SUBST(SHOWINCLUDES_PREFIX)
4420 # prefix C with ccache if needed
4422 if test "$CCACHE" != ""; then
4423     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4425     AC_LANG_PUSH([C])
4426     save_CFLAGS=$CFLAGS
4427     CFLAGS="$CFLAGS --ccache-skip -O2"
4428     # msvc does not fail on unknown options, check stdout
4429     if test "$COM" = MSC; then
4430         CFLAGS="$CFLAGS -nologo"
4431     fi
4432     save_ac_c_werror_flag=$ac_c_werror_flag
4433     ac_c_werror_flag=yes
4434     dnl an empty program will do, we're checking the compiler flags
4435     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4436                       [use_ccache=yes], [use_ccache=no])
4437     CFLAGS=$save_CFLAGS
4438     ac_c_werror_flag=$save_ac_c_werror_flag
4439     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4440         AC_MSG_RESULT([yes])
4441     else
4442         CC="$CCACHE $CC"
4443         CC_BASE="ccache $CC_BASE"
4444         AC_MSG_RESULT([no])
4445     fi
4446     AC_LANG_POP([C])
4449 # ===================================================================
4450 # check various GCC options that Clang does not support now but maybe
4451 # will somewhen in the future, check them even for GCC, so that the
4452 # flags are set
4453 # ===================================================================
4455 HAVE_GCC_GGDB2=
4456 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4457     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4458     save_CFLAGS=$CFLAGS
4459     CFLAGS="$CFLAGS -Werror -ggdb2"
4460     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4461     CFLAGS=$save_CFLAGS
4462     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4463         AC_MSG_RESULT([yes])
4464     else
4465         AC_MSG_RESULT([no])
4466     fi
4468     if test "$host_cpu" = "m68k"; then
4469         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4470         save_CFLAGS=$CFLAGS
4471         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4472         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4473         CFLAGS=$save_CFLAGS
4474         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4475             AC_MSG_RESULT([yes])
4476         else
4477             AC_MSG_ERROR([no])
4478         fi
4479     fi
4481 AC_SUBST(HAVE_GCC_GGDB2)
4483 dnl ===================================================================
4484 dnl  Test the gcc version
4485 dnl ===================================================================
4486 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4487     AC_MSG_CHECKING([the GCC version])
4488     _gcc_version=`$CC -dumpfullversion`
4489     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4490         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4491     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4493     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4495     if test "$gcc_full_version" -lt 70000; then
4496         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 7.0.0])
4497     fi
4498 else
4499     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4500     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4501     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4502     # (which reports itself as GCC 4.2.1).
4503     GCC_VERSION=
4505 AC_SUBST(GCC_VERSION)
4507 dnl Set the ENABLE_DBGUTIL variable
4508 dnl ===================================================================
4509 AC_MSG_CHECKING([whether to build with additional debug utilities])
4510 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4511     ENABLE_DBGUTIL="TRUE"
4512     # this is an extra var so it can have different default on different MSVC
4513     # versions (in case there are version specific problems with it)
4514     MSVC_USE_DEBUG_RUNTIME="TRUE"
4516     AC_MSG_RESULT([yes])
4517     # cppunit and graphite expose STL in public headers
4518     if test "$with_system_cppunit" = "yes"; then
4519         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4520     else
4521         with_system_cppunit=no
4522     fi
4523     if test "$with_system_graphite" = "yes"; then
4524         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4525     else
4526         with_system_graphite=no
4527     fi
4528     if test "$with_system_orcus" = "yes"; then
4529         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4530     else
4531         with_system_orcus=no
4532     fi
4533     if test "$with_system_libcmis" = "yes"; then
4534         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4535     else
4536         with_system_libcmis=no
4537     fi
4538     if test "$with_system_hunspell" = "yes"; then
4539         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4540     else
4541         with_system_hunspell=no
4542     fi
4543     if test "$with_system_gpgmepp" = "yes"; then
4544         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4545     else
4546         with_system_gpgmepp=no
4547     fi
4548     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4549     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4550     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4551     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4552     # of those two is using the system variant:
4553     if test "$with_system_libnumbertext" = "yes"; then
4554         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4555     else
4556         with_system_libnumbertext=no
4557     fi
4558     if test "$with_system_libwps" = "yes"; then
4559         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4560     else
4561         with_system_libwps=no
4562     fi
4563 else
4564     ENABLE_DBGUTIL=""
4565     MSVC_USE_DEBUG_RUNTIME=""
4566     AC_MSG_RESULT([no])
4568 AC_SUBST(ENABLE_DBGUTIL)
4569 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4571 dnl Set the ENABLE_DEBUG variable.
4572 dnl ===================================================================
4573 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4574     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4576 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4577     if test -z "$libo_fuzzed_enable_debug"; then
4578         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4579     else
4580         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4581         enable_debug=yes
4582     fi
4585 AC_MSG_CHECKING([whether to do a debug build])
4586 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4587     ENABLE_DEBUG="TRUE"
4588     if test -n "$ENABLE_DBGUTIL" ; then
4589         AC_MSG_RESULT([yes (dbgutil)])
4590     else
4591         AC_MSG_RESULT([yes])
4592     fi
4593 else
4594     ENABLE_DEBUG=""
4595     AC_MSG_RESULT([no])
4597 AC_SUBST(ENABLE_DEBUG)
4599 dnl ===================================================================
4600 dnl Select the linker to use (gold/lld/ld.bfd/mold).
4601 dnl This is done only after compiler checks (need to know if Clang is
4602 dnl used, for different defaults) and after checking if a debug build
4603 dnl is wanted (non-debug builds get the default linker if not explicitly
4604 dnl specified otherwise).
4605 dnl All checks for linker features/options should come after this.
4606 dnl ===================================================================
4607 check_use_ld()
4609     use_ld=-fuse-ld=${1%%:*}
4610     use_ld_path=${1#*:}
4611     if test "$use_ld_path" != "$1"; then
4612         if test "$COM_IS_CLANG" = TRUE; then
4613             if test "$CLANGVER" -ge 120000; then
4614                 use_ld="${use_ld} --ld-path=${use_ld_path}"
4615             else
4616                 use_ld="-fuse-ld=${use_ld_path}"
4617             fi
4618         else
4619             # I tried to use gcc's '-B<path>' and a directory + symlink setup in
4620             # $BUILDDIR, but libtool always filtered-out that option, so gcc wouldn't
4621             # pickup the alternative linker, when called by libtool for linking.
4622             # For mold, one can use LD_PRELOAD=/usr/lib/mold/mold-wrapper.so instead.
4623             AC_MSG_ERROR([A linker path is just supported with clang, because of libtool's -B filtering!])
4624         fi
4625     fi
4626     use_ld_fail_if_error=$2
4627     use_ld_ok=
4628     AC_MSG_CHECKING([for $use_ld linker support])
4629     use_ld_ldflags_save="$LDFLAGS"
4630     LDFLAGS="$LDFLAGS $use_ld"
4631     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4632 #include <stdio.h>
4633         ],[
4634 printf ("hello world\n");
4635         ])], USE_LD=$use_ld, [])
4636     if test -n "$USE_LD"; then
4637         AC_MSG_RESULT( yes )
4638         use_ld_ok=yes
4639     else
4640         if test -n "$use_ld_fail_if_error"; then
4641             AC_MSG_ERROR( no )
4642         else
4643             AC_MSG_RESULT( no )
4644         fi
4645     fi
4646     if test -n "$use_ld_ok"; then
4647         dnl keep the value of LDFLAGS
4648         return 0
4649     fi
4650     LDFLAGS="$use_ld_ldflags_save"
4651     return 1
4653 USE_LD=
4654 if test "$enable_ld" != "no"; then
4655     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4656         if test -n "$enable_ld"; then
4657             check_use_ld "$enable_ld" fail_if_error
4658         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4659             dnl non-debug builds default to the default linker
4660             true
4661         elif test -n "$COM_IS_CLANG"; then
4662             check_use_ld lld
4663             if test $? -ne 0; then
4664                 check_use_ld gold
4665                 if test $? -ne 0; then
4666                     check_use_ld mold
4667                 fi
4668             fi
4669         else
4670             # For gcc first try gold, new versions also support lld/mold.
4671             check_use_ld gold
4672             if test $? -ne 0; then
4673                 check_use_ld lld
4674                 if test $? -ne 0; then
4675                     check_use_ld mold
4676                 fi
4677             fi
4678         fi
4679         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4680         rm conftest.out
4681         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD|^mold)')
4682         if test -z "$ld_used"; then
4683             ld_used="unknown"
4684         fi
4685         AC_MSG_CHECKING([for linker that is used])
4686         AC_MSG_RESULT([$ld_used])
4687         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4688             if echo "$ld_used" | grep -q "^GNU ld"; then
4689                 AC_MSG_WARN([The default GNU linker is slow, consider using LLD, mold or the GNU gold linker.])
4690                 add_warning "The default GNU linker is slow, consider using LLD, mold or the GNU gold linker."
4691             fi
4692         fi
4693     else
4694         if test "$enable_ld" = "yes"; then
4695             AC_MSG_ERROR([--enable-ld not supported])
4696         fi
4697     fi
4699 AC_SUBST(USE_LD)
4700 AC_SUBST(LD)
4702 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4703 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4704     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4705     bsymbolic_functions_ldflags_save=$LDFLAGS
4706     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4707     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4708 #include <stdio.h>
4709         ],[
4710 printf ("hello world\n");
4711         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4712     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4713         AC_MSG_RESULT( found )
4714     else
4715         AC_MSG_RESULT( not found )
4716     fi
4717     LDFLAGS=$bsymbolic_functions_ldflags_save
4719 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4721 LD_GC_SECTIONS=
4722 if test "$GCC" = "yes"; then
4723     for flag in "--gc-sections" "-dead_strip"; do
4724         AC_MSG_CHECKING([for $flag linker support])
4725         ldflags_save=$LDFLAGS
4726         LDFLAGS="$LDFLAGS -Wl,$flag"
4727         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4728 #include <stdio.h>
4729             ],[
4730 printf ("hello world\n");
4731             ])],[
4732             LD_GC_SECTIONS="-Wl,$flag"
4733             AC_MSG_RESULT( found )
4734             ], [
4735             AC_MSG_RESULT( not found )
4736             ])
4737         LDFLAGS=$ldflags_save
4738         if test -n "$LD_GC_SECTIONS"; then
4739             break
4740         fi
4741     done
4743 AC_SUBST(LD_GC_SECTIONS)
4745 HAVE_EXTERNAL_DWARF=
4746 if test "$enable_split_debug" != no; then
4747     use_split_debug=
4748     if test -n "$ENABLE_LTO"; then
4749         : # Inherently incompatible, since no debug info is created while compiling, GCC complains.
4750     elif test "$enable_split_debug" = yes; then
4751         use_split_debug=1
4752     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4753     elif test "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4754         use_split_debug=1
4755     fi
4756     if test -n "$use_split_debug"; then
4757         if test "$_os" = "Emscripten"; then
4758             TEST_CC_FLAG=-gseparate-dwarf
4759         else
4760             TEST_CC_FLAG=-gsplit-dwarf
4761         fi
4762         AC_MSG_CHECKING([whether $CC_BASE supports $TEST_CC_FLAG])
4763         save_CFLAGS=$CFLAGS
4764         CFLAGS="$CFLAGS -Werror $TEST_CC_FLAG"
4765         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_EXTERNAL_DWARF=TRUE ],[])
4766         CFLAGS=$save_CFLAGS
4767         if test "$HAVE_EXTERNAL_DWARF" = "TRUE"; then
4768             AC_MSG_RESULT([yes])
4769         else
4770             if test "$enable_split_debug" = yes; then
4771                 AC_MSG_ERROR([no])
4772             else
4773                 AC_MSG_RESULT([no])
4774             fi
4775         fi
4776     fi
4777     if test -z "$HAVE_EXTERNAL_DWARF" -a "$test_split_debug" = "yes" -a -n "$use_split_debug"; then
4778         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4779         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4780     fi
4782 AC_SUBST(HAVE_EXTERNAL_DWARF)
4784 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4785 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4786 save_CFLAGS=$CFLAGS
4787 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4788 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4789 CFLAGS=$save_CFLAGS
4790 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4791     AC_MSG_RESULT([yes])
4792 else
4793     AC_MSG_RESULT([no])
4795 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4797 ENABLE_GDB_INDEX=
4798 if test "$enable_gdb_index" != "no"; then
4799     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4800     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4801         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4802         save_CFLAGS=$CFLAGS
4803         CFLAGS="$CFLAGS -Werror -g -ggnu-pubnames"
4804         have_ggnu_pubnames=
4805         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4806         if test "$have_ggnu_pubnames" != "TRUE"; then
4807             if test "$enable_gdb_index" = "yes"; then
4808                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4809             else
4810                 AC_MSG_RESULT( no )
4811             fi
4812         else
4813             AC_MSG_RESULT( yes )
4814             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4815             ldflags_save=$LDFLAGS
4816             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4817             AC_LINK_IFELSE([AC_LANG_PROGRAM([
4818 #include <stdio.h>
4819                 ],[
4820 printf ("hello world\n");
4821                 ])], ENABLE_GDB_INDEX=TRUE, [])
4822             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
4823                 AC_MSG_RESULT( yes )
4824             else
4825                 if test "$enable_gdb_index" = "yes"; then
4826                     AC_MSG_ERROR( no )
4827                 else
4828                     AC_MSG_RESULT( no )
4829                 fi
4830             fi
4831             LDFLAGS=$ldflags_save
4832         fi
4833         CFLAGS=$save_CFLAGS
4834         fi
4835     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4836         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
4837         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
4838     fi
4840 AC_SUBST(ENABLE_GDB_INDEX)
4842 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
4843     enable_sal_log=yes
4845 if test "$enable_sal_log" = yes; then
4846     ENABLE_SAL_LOG=TRUE
4848 AC_SUBST(ENABLE_SAL_LOG)
4850 dnl Check for enable symbols option
4851 dnl ===================================================================
4852 AC_MSG_CHECKING([whether to generate debug information])
4853 if test -z "$enable_symbols"; then
4854     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4855         enable_symbols=yes
4856     else
4857         enable_symbols=no
4858     fi
4860 if test "$enable_symbols" = yes; then
4861     ENABLE_SYMBOLS_FOR=all
4862     AC_MSG_RESULT([yes])
4863 elif test "$enable_symbols" = no; then
4864     ENABLE_SYMBOLS_FOR=
4865     AC_MSG_RESULT([no])
4866 else
4867     # Selective debuginfo.
4868     ENABLE_SYMBOLS_FOR="$enable_symbols"
4869     AC_MSG_RESULT([for "$enable_symbols"])
4871 AC_SUBST(ENABLE_SYMBOLS_FOR)
4873 if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then
4874     # Building on Android with full symbols: without enough memory the linker never finishes currently.
4875     AC_MSG_CHECKING([whether enough memory is available for linking])
4876     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
4877     # Check for 15GB, as Linux reports a bit less than the physical memory size.
4878     if test -n "$mem_size" -a $mem_size -lt 15728640; then
4879         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
4880     else
4881         AC_MSG_RESULT([yes])
4882     fi
4885 ENABLE_OPTIMIZED=
4886 ENABLE_OPTIMIZED_DEBUG=
4887 AC_MSG_CHECKING([whether to compile with optimization flags])
4888 if test -z "$enable_optimized"; then
4889     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4890         enable_optimized=no
4891     else
4892         enable_optimized=yes
4893     fi
4895 if test "$enable_optimized" = yes; then
4896     ENABLE_OPTIMIZED=TRUE
4897     AC_MSG_RESULT([yes])
4898 elif test "$enable_optimized" = debug; then
4899     ENABLE_OPTIMIZED_DEBUG=TRUE
4900     AC_MSG_RESULT([yes (debug)])
4901     HAVE_GCC_OG=
4902     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4903         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
4904         save_CFLAGS=$CFLAGS
4905         CFLAGS="$CFLAGS -Werror -Og"
4906         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
4907         CFLAGS=$save_CFLAGS
4908         if test "$HAVE_GCC_OG" = "TRUE"; then
4909             AC_MSG_RESULT([yes])
4910         else
4911             AC_MSG_RESULT([no])
4912         fi
4913     fi
4914     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
4915         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
4916     fi
4917 else
4918     AC_MSG_RESULT([no])
4920 AC_SUBST(ENABLE_OPTIMIZED)
4921 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
4924 # determine CPUNAME, OS, ...
4926 case "$host_os" in
4928 aix*)
4929     COM=GCC
4930     CPUNAME=POWERPC
4931     OS=AIX
4932     RTL_OS=AIX
4933     RTL_ARCH=PowerPC
4934     PLATFORMID=aix_powerpc
4935     P_SEP=:
4936     ;;
4938 cygwin*|wsl*)
4939     # Already handled
4940     ;;
4942 darwin*)
4943     COM=GCC
4944     OS=MACOSX
4945     RTL_OS=MacOSX
4946     P_SEP=:
4948     case "$host_cpu" in
4949     aarch64|arm64)
4950         if test "$enable_ios_simulator" = "yes"; then
4951             OS=iOS
4952         else
4953             CPUNAME=AARCH64
4954             RTL_ARCH=AARCH64
4955             PLATFORMID=macosx_aarch64
4956         fi
4957         ;;
4958     x86_64)
4959         if test "$enable_ios_simulator" = "yes"; then
4960             OS=iOS
4961         fi
4962         CPUNAME=X86_64
4963         RTL_ARCH=X86_64
4964         PLATFORMID=macosx_x86_64
4965         ;;
4966     *)
4967         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4968         ;;
4969     esac
4970     ;;
4972 ios*)
4973     COM=GCC
4974     OS=iOS
4975     RTL_OS=iOS
4976     P_SEP=:
4978     case "$host_cpu" in
4979     aarch64|arm64)
4980         if test "$enable_ios_simulator" = "yes"; then
4981             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
4982         fi
4983         ;;
4984     *)
4985         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4986         ;;
4987     esac
4988     CPUNAME=AARCH64
4989     RTL_ARCH=AARCH64
4990     PLATFORMID=ios_arm64
4991     ;;
4993 dragonfly*)
4994     COM=GCC
4995     OS=DRAGONFLY
4996     RTL_OS=DragonFly
4997     P_SEP=:
4999     case "$host_cpu" in
5000     i*86)
5001         CPUNAME=INTEL
5002         RTL_ARCH=x86
5003         PLATFORMID=dragonfly_x86
5004         ;;
5005     x86_64)
5006         CPUNAME=X86_64
5007         RTL_ARCH=X86_64
5008         PLATFORMID=dragonfly_x86_64
5009         ;;
5010     *)
5011         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5012         ;;
5013     esac
5014     ;;
5016 freebsd*)
5017     COM=GCC
5018     RTL_OS=FreeBSD
5019     OS=FREEBSD
5020     P_SEP=:
5022     case "$host_cpu" in
5023     aarch64)
5024         CPUNAME=AARCH64
5025         PLATFORMID=freebsd_aarch64
5026         RTL_ARCH=AARCH64
5027         ;;
5028     i*86)
5029         CPUNAME=INTEL
5030         RTL_ARCH=x86
5031         PLATFORMID=freebsd_x86
5032         ;;
5033     x86_64|amd64)
5034         CPUNAME=X86_64
5035         RTL_ARCH=X86_64
5036         PLATFORMID=freebsd_x86_64
5037         ;;
5038     powerpc64)
5039         CPUNAME=POWERPC64
5040         RTL_ARCH=PowerPC_64
5041         PLATFORMID=freebsd_powerpc64
5042         ;;
5043     powerpc|powerpcspe)
5044         CPUNAME=POWERPC
5045         RTL_ARCH=PowerPC
5046         PLATFORMID=freebsd_powerpc
5047         ;;
5048     *)
5049         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5050         ;;
5051     esac
5052     ;;
5054 haiku*)
5055     COM=GCC
5056     GUIBASE=haiku
5057     RTL_OS=Haiku
5058     OS=HAIKU
5059     P_SEP=:
5061     case "$host_cpu" in
5062     i*86)
5063         CPUNAME=INTEL
5064         RTL_ARCH=x86
5065         PLATFORMID=haiku_x86
5066         ;;
5067     x86_64|amd64)
5068         CPUNAME=X86_64
5069         RTL_ARCH=X86_64
5070         PLATFORMID=haiku_x86_64
5071         ;;
5072     *)
5073         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5074         ;;
5075     esac
5076     ;;
5078 kfreebsd*)
5079     COM=GCC
5080     OS=LINUX
5081     RTL_OS=kFreeBSD
5082     P_SEP=:
5084     case "$host_cpu" in
5086     i*86)
5087         CPUNAME=INTEL
5088         RTL_ARCH=x86
5089         PLATFORMID=kfreebsd_x86
5090         ;;
5091     x86_64)
5092         CPUNAME=X86_64
5093         RTL_ARCH=X86_64
5094         PLATFORMID=kfreebsd_x86_64
5095         ;;
5096     *)
5097         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5098         ;;
5099     esac
5100     ;;
5102 linux-gnu*|linux-musl*)
5103     COM=GCC
5104     OS=LINUX
5105     RTL_OS=Linux
5106     P_SEP=:
5108     case "$host_cpu" in
5110     aarch64)
5111         CPUNAME=AARCH64
5112         PLATFORMID=linux_aarch64
5113         RTL_ARCH=AARCH64
5114         EPM_FLAGS="-a arm64"
5115         ;;
5116     alpha)
5117         CPUNAME=AXP
5118         RTL_ARCH=ALPHA
5119         PLATFORMID=linux_alpha
5120         ;;
5121     arm*)
5122         CPUNAME=ARM
5123         EPM_FLAGS="-a arm"
5124         RTL_ARCH=ARM_EABI
5125         PLATFORMID=linux_arm_eabi
5126         case "$host_cpu" in
5127         arm*-linux)
5128             RTL_ARCH=ARM_OABI
5129             PLATFORMID=linux_arm_oabi
5130             ;;
5131         esac
5132         ;;
5133     hppa)
5134         CPUNAME=HPPA
5135         RTL_ARCH=HPPA
5136         EPM_FLAGS="-a hppa"
5137         PLATFORMID=linux_hppa
5138         ;;
5139     i*86)
5140         CPUNAME=INTEL
5141         RTL_ARCH=x86
5142         PLATFORMID=linux_x86
5143         ;;
5144     ia64)
5145         CPUNAME=IA64
5146         RTL_ARCH=IA64
5147         PLATFORMID=linux_ia64
5148         ;;
5149     mips)
5150         CPUNAME=GODSON
5151         RTL_ARCH=MIPS_EB
5152         EPM_FLAGS="-a mips"
5153         PLATFORMID=linux_mips_eb
5154         ;;
5155     mips64)
5156         CPUNAME=GODSON64
5157         RTL_ARCH=MIPS64_EB
5158         EPM_FLAGS="-a mips64"
5159         PLATFORMID=linux_mips64_eb
5160         ;;
5161     mips64el)
5162         CPUNAME=GODSON64
5163         RTL_ARCH=MIPS64_EL
5164         EPM_FLAGS="-a mips64el"
5165         PLATFORMID=linux_mips64_el
5166         ;;
5167     mipsel)
5168         CPUNAME=GODSON
5169         RTL_ARCH=MIPS_EL
5170         EPM_FLAGS="-a mipsel"
5171         PLATFORMID=linux_mips_el
5172         ;;
5173     m68k)
5174         CPUNAME=M68K
5175         RTL_ARCH=M68K
5176         PLATFORMID=linux_m68k
5177         ;;
5178     powerpc)
5179         CPUNAME=POWERPC
5180         RTL_ARCH=PowerPC
5181         PLATFORMID=linux_powerpc
5182         ;;
5183     powerpc64)
5184         CPUNAME=POWERPC64
5185         RTL_ARCH=PowerPC_64
5186         PLATFORMID=linux_powerpc64
5187         ;;
5188     powerpc64le)
5189         CPUNAME=POWERPC64
5190         RTL_ARCH=PowerPC_64_LE
5191         PLATFORMID=linux_powerpc64_le
5192         ;;
5193     sparc)
5194         CPUNAME=SPARC
5195         RTL_ARCH=SPARC
5196         PLATFORMID=linux_sparc
5197         ;;
5198     sparc64)
5199         CPUNAME=SPARC64
5200         RTL_ARCH=SPARC64
5201         PLATFORMID=linux_sparc64
5202         ;;
5203     s390)
5204         CPUNAME=S390
5205         RTL_ARCH=S390
5206         PLATFORMID=linux_s390
5207         ;;
5208     s390x)
5209         CPUNAME=S390X
5210         RTL_ARCH=S390x
5211         PLATFORMID=linux_s390x
5212         ;;
5213     x86_64)
5214         CPUNAME=X86_64
5215         RTL_ARCH=X86_64
5216         PLATFORMID=linux_x86_64
5217         ;;
5218     *)
5219         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5220         ;;
5221     esac
5222     ;;
5224 linux-android*)
5225     COM=GCC
5226     OS=ANDROID
5227     RTL_OS=Android
5228     P_SEP=:
5230     case "$host_cpu" in
5232     arm|armel)
5233         CPUNAME=ARM
5234         RTL_ARCH=ARM_EABI
5235         PLATFORMID=android_arm_eabi
5236         ;;
5237     aarch64)
5238         CPUNAME=AARCH64
5239         RTL_ARCH=AARCH64
5240         PLATFORMID=android_aarch64
5241         ;;
5242     i*86)
5243         CPUNAME=INTEL
5244         RTL_ARCH=x86
5245         PLATFORMID=android_x86
5246         ;;
5247     x86_64)
5248         CPUNAME=X86_64
5249         RTL_ARCH=X86_64
5250         PLATFORMID=android_x86_64
5251         ;;
5252     *)
5253         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5254         ;;
5255     esac
5256     ;;
5258 *netbsd*)
5259     COM=GCC
5260     OS=NETBSD
5261     RTL_OS=NetBSD
5262     P_SEP=:
5264     case "$host_cpu" in
5265     i*86)
5266         CPUNAME=INTEL
5267         RTL_ARCH=x86
5268         PLATFORMID=netbsd_x86
5269         ;;
5270     powerpc)
5271         CPUNAME=POWERPC
5272         RTL_ARCH=PowerPC
5273         PLATFORMID=netbsd_powerpc
5274         ;;
5275     sparc)
5276         CPUNAME=SPARC
5277         RTL_ARCH=SPARC
5278         PLATFORMID=netbsd_sparc
5279         ;;
5280     x86_64)
5281         CPUNAME=X86_64
5282         RTL_ARCH=X86_64
5283         PLATFORMID=netbsd_x86_64
5284         ;;
5285     *)
5286         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5287         ;;
5288     esac
5289     ;;
5291 openbsd*)
5292     COM=GCC
5293     OS=OPENBSD
5294     RTL_OS=OpenBSD
5295     P_SEP=:
5297     case "$host_cpu" in
5298     i*86)
5299         CPUNAME=INTEL
5300         RTL_ARCH=x86
5301         PLATFORMID=openbsd_x86
5302         ;;
5303     x86_64)
5304         CPUNAME=X86_64
5305         RTL_ARCH=X86_64
5306         PLATFORMID=openbsd_x86_64
5307         ;;
5308     *)
5309         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5310         ;;
5311     esac
5312     SOLARINC="$SOLARINC -I/usr/local/include"
5313     ;;
5315 solaris*)
5316     COM=GCC
5317     OS=SOLARIS
5318     RTL_OS=Solaris
5319     P_SEP=:
5321     case "$host_cpu" in
5322     i*86)
5323         CPUNAME=INTEL
5324         RTL_ARCH=x86
5325         PLATFORMID=solaris_x86
5326         ;;
5327     sparc)
5328         CPUNAME=SPARC
5329         RTL_ARCH=SPARC
5330         PLATFORMID=solaris_sparc
5331         ;;
5332     sparc64)
5333         CPUNAME=SPARC64
5334         RTL_ARCH=SPARC64
5335         PLATFORMID=solaris_sparc64
5336         ;;
5337     *)
5338         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5339         ;;
5340     esac
5341     SOLARINC="$SOLARINC -I/usr/local/include"
5342     ;;
5344 emscripten*)
5345     COM=GCC
5346     OS=EMSCRIPTEN
5347     RTL_OS=Emscripten
5348     P_SEP=:
5350     case "$host_cpu" in
5351     wasm32|wasm64)
5352         ;;
5353     *)
5354         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5355         ;;
5356     esac
5357     CPUNAME=INTEL
5358     RTL_ARCH=x86
5359     PLATFORMID=linux_x86
5360     ;;
5363     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5364     ;;
5365 esac
5367 DISABLE_GUI=""
5368 if test "$enable_gui" = "no"; then
5369     if test "$using_x11" != yes; then
5370         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5371     fi
5372     USING_X11=
5373     DISABLE_GUI=TRUE
5374     test_epoxy=no
5375 else
5376     AC_DEFINE(HAVE_FEATURE_UI)
5378 AC_SUBST(DISABLE_GUI)
5380 if test "$with_x" = "no"; then
5381     USING_X11=
5384 if test -z "$USING_X11" -a "$DISABLE_DYNLOADING" = TRUE -a "$enable_gen" = "yes"; then
5385     AC_MSG_ERROR([Can't select gen VCL plugin, if --without-x is used!])
5388 if test "$using_x11" = yes; then
5389     if test "$USING_X11" = TRUE; then
5390         AC_DEFINE(USING_X11)
5391     else
5392         disable_x11_tests
5393         if test "$DISABLE_DYNLOADING" = TRUE; then
5394             test_qt5=yes
5395         fi
5396     fi
5397 else
5398     if test "$USING_X11" = TRUE; then
5399         AC_MSG_ERROR([Platform doesn't support X11 (\$using_x11), but \$USING_X11 is set!])
5400     fi
5403 WORKDIR="${BUILDDIR}/workdir"
5404 INSTDIR="${BUILDDIR}/instdir"
5405 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5406 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5407 AC_SUBST(COM)
5408 AC_SUBST(CPUNAME)
5409 AC_SUBST(RTL_OS)
5410 AC_SUBST(RTL_ARCH)
5411 AC_SUBST(EPM_FLAGS)
5412 AC_SUBST(USING_X11)
5413 AC_SUBST([INSTDIR])
5414 AC_SUBST([INSTROOT])
5415 AC_SUBST([INSTROOTBASE])
5416 AC_SUBST(OS)
5417 AC_SUBST(P_SEP)
5418 AC_SUBST(WORKDIR)
5419 AC_SUBST(PLATFORMID)
5420 AC_SUBST(WINDOWS_X64)
5421 AC_DEFINE_UNQUOTED(SDKDIR, "$INSTDIR/$SDKDIRNAME")
5422 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5424 if test "$OS" = WNT -a "$COM" = MSC; then
5425     case "$CPUNAME" in
5426     INTEL) CPPU_ENV=msci ;;
5427     X86_64) CPPU_ENV=mscx ;;
5428     AARCH64) CPPU_ENV=msca ;;
5429     *)
5430         AC_MSG_ERROR([Unknown \$CPUNAME '$CPUNAME' for $OS / $COM"])
5431         ;;
5432     esac
5433 else
5434     CPPU_ENV=gcc3
5436 AC_SUBST(CPPU_ENV)
5438 dnl ===================================================================
5439 dnl Test which package format to use
5440 dnl ===================================================================
5441 AC_MSG_CHECKING([which package format to use])
5442 if test -n "$with_package_format" -a "$with_package_format" != no; then
5443     for i in $with_package_format; do
5444         case "$i" in
5445         aix | bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5446             ;;
5447         *)
5448             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5449 aix - AIX software distribution
5450 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5451 deb - Debian software distribution
5452 pkg - Solaris software distribution
5453 rpm - RedHat software distribution
5455 LibreOffice additionally supports:
5456 archive - .tar.gz or .zip
5457 dmg - macOS .dmg
5458 installed - installation tree
5459 msi - Windows .msi
5460         ])
5461             ;;
5462         esac
5463     done
5464     # fakeroot is needed to ensure correct file ownerships/permissions
5465     # inside deb packages and tar archives created on Linux and Solaris.
5466     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5467         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5468         if test "$FAKEROOT" = "no"; then
5469             AC_MSG_ERROR(
5470                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5471         fi
5472     fi
5473     PKGFORMAT="$with_package_format"
5474     AC_MSG_RESULT([$PKGFORMAT])
5475 else
5476     PKGFORMAT=
5477     AC_MSG_RESULT([none])
5479 AC_SUBST(PKGFORMAT)
5481 dnl ===================================================================
5482 dnl handle help related options
5484 dnl If you change help related options, please update README.help
5485 dnl ===================================================================
5487 ENABLE_HTMLHELP=
5488 HELP_OMINDEX_PAGE=
5489 HELP_ONLINE=
5490 WITH_HELPPACKS=
5492 AC_MSG_CHECKING([which help to build])
5493 if test -n "$with_help" -a "$with_help" != "no"; then
5494     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5495     BUILD_TYPE="$BUILD_TYPE HELP"
5496     case "$with_help" in
5497     "html")
5498         ENABLE_HTMLHELP=TRUE
5499         WITH_HELPPACKS=TRUE
5500         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5501         AC_MSG_RESULT([HTML (local)])
5502         ;;
5503     "online")
5504         ENABLE_HTMLHELP=TRUE
5505         HELP_ONLINE=TRUE
5506         AC_MSG_RESULT([HTML (online)])
5507         ;;
5508     yes)
5509         WITH_HELPPACKS=TRUE
5510         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5511         AC_MSG_RESULT([XML (local)])
5512         ;;
5513     *)
5514         AC_MSG_ERROR([Unknown --with-help=$with_help])
5515         ;;
5516     esac
5517 else
5518     AC_MSG_RESULT([no])
5521 AC_MSG_CHECKING([if we need to build the help index tooling])
5522 if test \( "$with_help" = yes -o "$enable_extension_integration" != no \) -a -z "$DISABLE_DYNLOADING"; then
5523     BUILD_TYPE="$BUILD_TYPE HELPTOOLS"
5524     test_clucene=yes
5525     AC_MSG_RESULT([yes])
5526 else
5527     AC_MSG_RESULT([no])
5530 AC_MSG_CHECKING([whether to enable xapian-omega support for online help])
5531 if test -n "$with_omindex" -a "$with_omindex" != "no"; then
5532     if test "$HELP_ONLINE" != TRUE; then
5533         AC_MSG_ERROR([Can't build xapian-omega index without --help=online])
5534     fi
5535     case "$with_omindex" in
5536     "server")
5537         HELP_OMINDEX_PAGE=TRUE
5538         AC_MSG_RESULT([SERVER])
5539         ;;
5540     "noxap")
5541         AC_MSG_RESULT([NOXAP])
5542         ;;
5543     *)
5544         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5545         ;;
5546     esac
5547 else
5548     AC_MSG_RESULT([no])
5551 AC_MSG_CHECKING([whether to include the XML-help support])
5552 if test "$enable_xmlhelp" = yes; then
5553     BUILD_TYPE="$BUILD_TYPE XMLHELP"
5554     test_clucene=yes
5555     AC_DEFINE(HAVE_FEATURE_XMLHELP)
5556     AC_MSG_RESULT([yes])
5557 else
5558     if test "$with_help" = yes; then
5559         add_warning "Building the XML help, but LO with disabled xmlhelp support. Generated help can't be accessed from this LO build!"
5560     fi
5561     AC_MSG_RESULT([no])
5564 dnl Test whether to integrate helppacks into the product's installer
5565 AC_MSG_CHECKING([for helppack integration])
5566 if test -z "$WITH_HELPPACKS" -o "$with_helppack_integration" = no; then
5567     AC_MSG_RESULT([no integration])
5568 else
5569     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
5570     AC_MSG_RESULT([integration])
5573 AC_SUBST([ENABLE_HTMLHELP])
5574 AC_SUBST([HELP_OMINDEX_PAGE])
5575 AC_SUBST([HELP_ONLINE])
5576 # WITH_HELPPACKS is used only in configure
5578 dnl ===================================================================
5579 dnl Set up a different compiler to produce tools to run on the build
5580 dnl machine when doing cross-compilation
5581 dnl ===================================================================
5583 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5584 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5585 if test "$cross_compiling" = "yes"; then
5586     AC_MSG_CHECKING([for BUILD platform configuration])
5587     echo
5588     rm -rf CONF-FOR-BUILD config_build.mk
5589     mkdir CONF-FOR-BUILD
5590     # Here must be listed all files needed when running the configure script. In particular, also
5591     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5592     # keep them in the same order as there.
5593     (cd $SRC_ROOT && tar cf - \
5594         config.guess \
5595         bin/get_config_variables \
5596         solenv/bin/getcompver.awk \
5597         solenv/inc/langlist.mk \
5598         download.lst \
5599         config_host.mk.in \
5600         config_host_lang.mk.in \
5601         Makefile.in \
5602         bin/bffvalidator.sh.in \
5603         bin/odfvalidator.sh.in \
5604         bin/officeotron.sh.in \
5605         hardened_runtime.xcent.in \
5606         instsetoo_native/util/openoffice.lst.in \
5607         config_host/*.in \
5608         sysui/desktop/macosx/Info.plist.in \
5609         .vscode/vs-code-template.code-workspace.in \
5610         solenv/lockfile/autoconf.h.in \
5611         ) \
5612     | (cd CONF-FOR-BUILD && tar xf -)
5613     cp configure CONF-FOR-BUILD
5614     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5615     (
5616     unset COM USING_X11 OS CPUNAME
5617     unset CC CXX SYSBASE CFLAGS
5618     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5619     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5620     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5621     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5622     if test -n "$CC_FOR_BUILD"; then
5623         export CC="$CC_FOR_BUILD"
5624         CC_BASE=`first_arg_basename "$CC"`
5625     fi
5626     if test -n "$CXX_FOR_BUILD"; then
5627         export CXX="$CXX_FOR_BUILD"
5628         CXX_BASE=`first_arg_basename "$CXX"`
5629     fi
5630     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5631     cd CONF-FOR-BUILD
5633     # Handle host configuration, which affects the cross-toolset too
5634     sub_conf_opts=""
5635     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5636     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5637     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5638     # While we don't need scripting support, we don't have a PYTHON_FOR_BUILD Java equivalent, so must enable scripting for Java
5639     if test -n "$ENABLE_JAVA"; then
5640         case "$_os" in
5641         Android)
5642             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5643             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5644             ;;
5645         *)
5646             if test -z "$with_jdk_home"; then
5647                 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.])
5648             fi
5649             ;;
5650         esac
5651     else
5652         sub_conf_opts="$sub_conf_opts --disable-scripting"
5653     fi
5654     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5655     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no --disable-database-connectivity"
5656     test -n "$with_help" -a "$with_help" != "no" && sub_conf_opts="$sub_conf_opts --with-help=$with_help"
5657     test "$enable_extensions" = yes || sub_conf_opts="$sub_conf_opts --disable-extensions"
5658     test "${enable_ld+set}" = set -a "$build_cpu" = "$host_cpu" && sub_conf_opts="$sub_conf_opts --enable-ld=${enable_ld}"
5659     test "${enable_pch+set}" = set && sub_conf_opts="$sub_conf_opts --enable-pch=${enable_pch}"
5660     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5661     test "${with_system_lockfile+set}" = set && sub_conf_opts="$sub_conf_opts --with-system-lockfile=${with_system_lockfile}"
5662     test "${enable_fuzzers}" = yes && sub_conf_opts="$sub_conf_opts --without-system-libxml"
5663     if test "$_os" = "Emscripten"; then
5664         sub_conf_opts="$sub_conf_opts --without-system-libxml --without-system-fontconfig --without-system-freetype --without-system-zlib"
5665     fi
5667     # Don't bother having configure look for stuff not needed for the build platform anyway
5668     # WARNING: any option with an argument containing spaces must be handled separately (see --with-theme)
5669     sub_conf_defaults=" \
5670         --build="$build_alias" \
5671         --disable-cairo-canvas \
5672         --disable-cups \
5673         --disable-customtarget-components \
5674         --disable-firebird-sdbc \
5675         --disable-gpgmepp \
5676         --disable-gstreamer-1-0 \
5677         --disable-gtk3 \
5678         --disable-gtk4 \
5679         --disable-libcmis \
5680         --disable-mariadb-sdbc \
5681         --disable-nss \
5682         --disable-online-update \
5683         --disable-opencl \
5684         --disable-pdfimport \
5685         --disable-postgresql-sdbc \
5686         --disable-skia \
5687         --disable-xmlhelp \
5688         --enable-dynamic-loading \
5689         --enable-icecream="$enable_icecream" \
5690         --without-doxygen \
5691         --without-webdav \
5692         --without-x \
5693         --with-tls=openssl \
5695     # single quotes added for better readability in case of spaces
5696     echo "    Running CONF-FOR-BUILD/configure" \
5697         $sub_conf_defaults \
5698         --with-parallelism="'$with_parallelism'" \
5699         --with-theme="'$with_theme'" \
5700         $sub_conf_opts \
5701         $with_build_platform_configure_options \
5702         --srcdir=$srcdir
5704     ./configure \
5705         $sub_conf_defaults \
5706         --with-parallelism="$with_parallelism" \
5707         --with-theme="$with_theme" \
5708         $sub_conf_opts \
5709         $with_build_platform_configure_options \
5710         --srcdir=$srcdir \
5711         2>&1 | sed -e 's/^/    /'
5712     if test [${PIPESTATUS[0]}] -ne 0; then
5713         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5714     fi
5716     # filter permitted build targets
5717     PERMITTED_BUILD_TARGETS="
5718         AVMEDIA
5719         BOOST
5720         CAIRO
5721         CLUCENE
5722         CUCKOO
5723         CURL
5724         DBCONNECTIVITY
5725         DESKTOP
5726         DRAGONBOX
5727         DYNLOADING
5728         EPOXY
5729         EXPAT
5730         GLM
5731         GRAPHITE
5732         HARFBUZZ
5733         HELPTOOLS
5734         ICU
5735         LCMS2
5736         LIBJPEG_TURBO
5737         LIBLANGTAG
5738         LibO
5739         LIBFFI
5740         LIBPN
5741         LIBWEBP
5742         LIBXML2
5743         LIBXSLT
5744         MDDS
5745         NATIVE
5746         OPENSSL
5747         ORCUS
5748         PYTHON
5749         SCRIPTING
5750         ZLIB
5752     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5753     # newlined lists, to use grep as a filter
5754     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5755     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5756     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5757     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5759     cp config_host.mk ../config_build.mk
5760     cp config_host_lang.mk ../config_build_lang.mk
5761     mv config.log ../config.Build.log
5762     mkdir -p ../config_build
5763     mv config_host/*.h ../config_build
5764     test -f "$WARNINGS_FILE" && mv "$WARNINGS_FILE" "../$WARNINGS_FILE_FOR_BUILD"
5766     # all these will get a _FOR_BUILD postfix
5767     DIRECT_FOR_BUILD_SETTINGS="
5768         CC
5769         CPPU_ENV
5770         CXX
5771         ILIB
5772         JAVA_HOME
5773         JAVAIFLAGS
5774         JDK
5775         JDK_SECURITYMANAGER_DISALLOWED
5776         LIBO_BIN_FOLDER
5777         LIBO_LIB_FOLDER
5778         LIBO_URE_LIB_FOLDER
5779         LIBO_URE_MISC_FOLDER
5780         OS
5781         SDKDIRNAME
5782         SYSTEM_LIBXML
5783         SYSTEM_LIBXSLT
5785     # these overwrite host config with build config
5786     OVERWRITING_SETTINGS="
5787         ANT
5788         ANT_HOME
5789         ANT_LIB
5790         JAVA_CLASSPATH_NOT_SET
5791         JAVA_SOURCE_VER
5792         JAVA_TARGET_VER
5793         JAVACFLAGS
5794         JAVACOMPILER
5795         JAVADOC
5796         JAVADOCISGJDOC
5797         LOCKFILE
5798         SYSTEM_GENBRK
5799         SYSTEM_GENCCODE
5800         SYSTEM_GENCMN
5802     # these need some special handling
5803     EXTRA_HANDLED_SETTINGS="
5804         INSTDIR
5805         INSTROOT
5806         PATH
5807         WORKDIR
5809     OLD_PATH=$PATH
5810     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
5811     BUILD_PATH=$PATH
5812     PATH=$OLD_PATH
5814     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
5815     echo "$line" >>build-config
5817     for V in $DIRECT_FOR_BUILD_SETTINGS; do
5818         VV='$'$V
5819         VV=`eval "echo $VV"`
5820         if test -n "$VV"; then
5821             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
5822             echo "$line" >>build-config
5823         fi
5824     done
5826     for V in $OVERWRITING_SETTINGS; do
5827         VV='$'$V
5828         VV=`eval "echo $VV"`
5829         if test -n "$VV"; then
5830             line=${V}='${'${V}:-$VV'}'
5831             echo "$line" >>build-config
5832         fi
5833     done
5835     for V in INSTDIR INSTROOT WORKDIR; do
5836         VV='$'$V
5837         VV=`eval "echo $VV"`
5838         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
5839         if test -n "$VV"; then
5840             line="${V}_FOR_BUILD='$VV'"
5841             echo "$line" >>build-config
5842         fi
5843     done
5845     )
5846     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
5847     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])
5848     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
5849              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
5851     eval `cat CONF-FOR-BUILD/build-config`
5853     AC_MSG_RESULT([checking for BUILD platform configuration... done])
5855     rm -rf CONF-FOR-BUILD
5856 else
5857     OS_FOR_BUILD="$OS"
5858     CC_FOR_BUILD="$CC"
5859     CPPU_ENV_FOR_BUILD="$CPPU_ENV"
5860     CXX_FOR_BUILD="$CXX"
5861     INSTDIR_FOR_BUILD="$INSTDIR"
5862     INSTROOT_FOR_BUILD="$INSTROOT"
5863     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
5864     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
5865     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
5866     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
5867     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
5868     WORKDIR_FOR_BUILD="$WORKDIR"
5870 AC_SUBST(OS_FOR_BUILD)
5871 AC_SUBST(INSTDIR_FOR_BUILD)
5872 AC_SUBST(INSTROOT_FOR_BUILD)
5873 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
5874 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
5875 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
5876 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
5877 AC_SUBST(SDKDIRNAME_FOR_BUILD)
5878 AC_SUBST(WORKDIR_FOR_BUILD)
5879 AC_SUBST(CC_FOR_BUILD)
5880 AC_SUBST(CXX_FOR_BUILD)
5881 AC_SUBST(CPPU_ENV_FOR_BUILD)
5883 dnl ===================================================================
5884 dnl Check for lockfile deps
5885 dnl ===================================================================
5886 if test -z "$CROSS_COMPILING"; then
5887     test -n "$LOCKFILE" -a "${with_system_lockfile+set}" != set && with_system_lockfile="$LOCKFILE"
5888     test "${with_system_lockfile+set}" = set || with_system_lockfile=no
5889     AC_MSG_CHECKING([which lockfile binary to use])
5890     case "$with_system_lockfile" in
5891     yes)
5892         AC_MSG_RESULT([external])
5893         AC_PATH_PROGS([LOCKFILE],[dotlockfile lockfile])
5894         ;;
5895     no)
5896         AC_MSG_RESULT([internal])
5897         ;;
5898     *)
5899         if test -x "$with_system_lockfile"; then
5900             LOCKFILE="$with_system_lockfile"
5901         else
5902             AC_MSG_ERROR(['$with_system_lockfile' is not executable.])
5903         fi
5904         AC_MSG_RESULT([$with_system_lockfile])
5905         ;;
5906     esac
5909 if test -n "$LOCKFILE" -a "$DISABLE_DYNLOADING" = TRUE; then
5910     add_warning "The default system lockfile has increasing poll intervals up to 60s, so linking executables may be delayed."
5913 AC_CHECK_HEADERS([getopt.h paths.h sys/param.h])
5914 AC_CHECK_FUNCS([utime utimes])
5915 AC_SUBST(LOCKFILE)
5917 dnl ===================================================================
5918 dnl Check for syslog header
5919 dnl ===================================================================
5920 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
5922 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
5923 dnl ===================================================================
5924 AC_MSG_CHECKING([whether to turn warnings to errors])
5925 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
5926     ENABLE_WERROR="TRUE"
5927     PYTHONWARNINGS="error"
5928     AC_MSG_RESULT([yes])
5929 else
5930     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
5931         ENABLE_WERROR="TRUE"
5932         PYTHONWARNINGS="error"
5933         AC_MSG_RESULT([yes])
5934     else
5935         AC_MSG_RESULT([no])
5936     fi
5938 AC_SUBST(ENABLE_WERROR)
5939 AC_SUBST(PYTHONWARNINGS)
5941 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
5942 dnl ===================================================================
5943 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
5944 if test -z "$enable_assert_always_abort"; then
5945    if test "$ENABLE_DEBUG" = TRUE; then
5946        enable_assert_always_abort=yes
5947    else
5948        enable_assert_always_abort=no
5949    fi
5951 if test "$enable_assert_always_abort" = "yes"; then
5952     ASSERT_ALWAYS_ABORT="TRUE"
5953     AC_MSG_RESULT([yes])
5954 else
5955     ASSERT_ALWAYS_ABORT="FALSE"
5956     AC_MSG_RESULT([no])
5958 AC_SUBST(ASSERT_ALWAYS_ABORT)
5960 # Determine whether to use ooenv for the instdir installation
5961 # ===================================================================
5962 if test $_os != "WINNT" -a $_os != "Darwin"; then
5963     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
5964     if test -z "$enable_ooenv"; then
5965         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5966             enable_ooenv=yes
5967         else
5968             enable_ooenv=no
5969         fi
5970     fi
5971     if test "$enable_ooenv" = "no"; then
5972         AC_MSG_RESULT([no])
5973     else
5974         ENABLE_OOENV="TRUE"
5975         AC_MSG_RESULT([yes])
5976     fi
5978 AC_SUBST(ENABLE_OOENV)
5980 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
5981     if test "$enable_qt5" = "no"; then
5982         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
5983     else
5984         enable_qt5=yes
5985     fi
5988 AC_MSG_CHECKING([whether to build the pagein binaries for oosplash])
5989 if test "${enable_pagein}" != no -a -z "$DISABLE_DYNLOADING"; then
5990     AC_MSG_RESULT([yes])
5991     ENABLE_PAGEIN=TRUE
5992     AC_DEFINE(HAVE_FEATURE_PAGEIN)
5993 else
5994     AC_MSG_RESULT([no])
5996 AC_SUBST(ENABLE_PAGEIN)
5998 dnl ===================================================================
5999 dnl check for cups support
6000 dnl ===================================================================
6002 AC_MSG_CHECKING([whether to enable CUPS support])
6003 if test "$test_cups" = yes -a "$enable_cups" != no; then
6004     ENABLE_CUPS=TRUE
6005     AC_MSG_RESULT([yes])
6007     AC_MSG_CHECKING([whether cups support is present])
6008     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
6009     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
6010     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
6011         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
6012     fi
6013 else
6014     AC_MSG_RESULT([no])
6017 AC_SUBST(ENABLE_CUPS)
6019 libo_CHECK_SYSTEM_MODULE([fontconfig],[FONTCONFIG],[fontconfig >= 2.4.1],,system,TRUE)
6021 dnl whether to find & fetch external tarballs?
6022 dnl ===================================================================
6023 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
6024    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6025        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
6026    else
6027        TARFILE_LOCATION="$LODE_HOME/ext_tar"
6028    fi
6030 if test -z "$TARFILE_LOCATION"; then
6031     if test -d "$SRC_ROOT/src" ; then
6032         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
6033         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
6034     fi
6035     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
6036 else
6037     AbsolutePath "$TARFILE_LOCATION"
6038     PathFormat "${absolute_path}"
6039     TARFILE_LOCATION="${formatted_path}"
6041 AC_SUBST(TARFILE_LOCATION)
6043 AC_MSG_CHECKING([whether we want to fetch tarballs])
6044 if test "$enable_fetch_external" != "no"; then
6045     if test "$with_all_tarballs" = "yes"; then
6046         AC_MSG_RESULT([yes, all of them])
6047         DO_FETCH_TARBALLS="ALL"
6048     else
6049         AC_MSG_RESULT([yes, if we use them])
6050         DO_FETCH_TARBALLS="TRUE"
6051     fi
6052 else
6053     AC_MSG_RESULT([no])
6054     DO_FETCH_TARBALLS=
6056 AC_SUBST(DO_FETCH_TARBALLS)
6058 dnl Test whether to include MySpell dictionaries
6059 dnl ===================================================================
6060 AC_MSG_CHECKING([whether to include MySpell dictionaries])
6061 if test "$with_myspell_dicts" = "yes"; then
6062     AC_MSG_RESULT([yes])
6063     WITH_MYSPELL_DICTS=TRUE
6064     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
6065     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
6066 else
6067     AC_MSG_RESULT([no])
6068     WITH_MYSPELL_DICTS=
6070 AC_SUBST(WITH_MYSPELL_DICTS)
6072 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
6073 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
6074     if test "$with_system_dicts" = yes; then
6075         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
6076     fi
6077     with_system_dicts=no
6080 AC_MSG_CHECKING([whether to use dicts from external paths])
6081 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
6082     AC_MSG_RESULT([yes])
6083     SYSTEM_DICTS=TRUE
6084     AC_MSG_CHECKING([for spelling dictionary directory])
6085     if test -n "$with_external_dict_dir"; then
6086         DICT_SYSTEM_DIR=file://$with_external_dict_dir
6087     else
6088         DICT_SYSTEM_DIR=file:///usr/share/hunspell
6089         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
6090             DICT_SYSTEM_DIR=file:///usr/share/myspell
6091         fi
6092     fi
6093     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
6094     AC_MSG_CHECKING([for hyphenation patterns directory])
6095     if test -n "$with_external_hyph_dir"; then
6096         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
6097     else
6098         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
6099     fi
6100     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
6101     AC_MSG_CHECKING([for thesaurus directory])
6102     if test -n "$with_external_thes_dir"; then
6103         THES_SYSTEM_DIR=file://$with_external_thes_dir
6104     else
6105         THES_SYSTEM_DIR=file:///usr/share/mythes
6106     fi
6107     AC_MSG_RESULT([$THES_SYSTEM_DIR])
6108 else
6109     AC_MSG_RESULT([no])
6110     SYSTEM_DICTS=
6112 AC_SUBST(SYSTEM_DICTS)
6113 AC_SUBST(DICT_SYSTEM_DIR)
6114 AC_SUBST(HYPH_SYSTEM_DIR)
6115 AC_SUBST(THES_SYSTEM_DIR)
6117 dnl ===================================================================
6118 dnl Precompiled headers.
6119 ENABLE_PCH=""
6120 AC_MSG_CHECKING([whether to enable pch feature])
6121 if test -z "$enable_pch"; then
6122     if test "$_os" = "WINNT"; then
6123         # Enabled by default on Windows.
6124         enable_pch=yes
6125         # never use sccache on auto-enabled PCH builds, except if requested explicitly
6126         if test -z "$enable_ccache" -a "$SCCACHE"; then
6127             CCACHE=""
6128         fi
6129     else
6130         enable_pch=no
6131     fi
6133 if test "$enable_pch" != no -a "$_os" = Emscripten -a "$ENABLE_WASM_EXCEPTIONS" = TRUE; then
6134     AC_MSG_ERROR([PCH currently isn't supported for Emscripten with native EH (nEH) because of missing Sj/Lj support with nEH in clang.])
6136 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
6137     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
6139 if test "$enable_pch" = "system"; then
6140     ENABLE_PCH="1"
6141     AC_MSG_RESULT([yes (system headers)])
6142 elif test "$enable_pch" = "base"; then
6143     ENABLE_PCH="2"
6144     AC_MSG_RESULT([yes (system and base headers)])
6145 elif test "$enable_pch" = "normal"; then
6146     ENABLE_PCH="3"
6147     AC_MSG_RESULT([yes (normal)])
6148 elif test "$enable_pch" = "full"; then
6149     ENABLE_PCH="4"
6150     AC_MSG_RESULT([yes (full)])
6151 elif test "$enable_pch" = "yes"; then
6152     # Pick a suitable default.
6153     if test "$GCC" = "yes"; then
6154         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
6155         # while making the PCHs larger and rebuilds more likely.
6156         ENABLE_PCH="2"
6157         AC_MSG_RESULT([yes (system and base headers)])
6158     else
6159         # With MSVC the highest level makes a significant difference,
6160         # and it was the default when there used to be no PCH levels.
6161         ENABLE_PCH="4"
6162         AC_MSG_RESULT([yes (full)])
6163     fi
6164 elif test "$enable_pch" = "no"; then
6165     AC_MSG_RESULT([no])
6166 else
6167     AC_MSG_ERROR([Unknown value for --enable-pch])
6169 AC_SUBST(ENABLE_PCH)
6170 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
6171 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
6172     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
6173     if test "$CCACHE_BIN" != "not found"; then
6174         AC_MSG_CHECKING([ccache version])
6175         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
6176         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6177         AC_MSG_RESULT([$CCACHE_VERSION])
6178         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
6179         if test "$CCACHE_NUMVER" -gt "030701"; then
6180             AC_MSG_RESULT([yes])
6181         else
6182             AC_MSG_RESULT([no (not newer than 3.7.1)])
6183             CCACHE_DEPEND_MODE=
6184         fi
6185     fi
6188 PCH_INSTANTIATE_TEMPLATES=
6189 if test -n "$ENABLE_PCH"; then
6190     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
6191     save_CFLAGS=$CFLAGS
6192     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
6193     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
6194     CFLAGS=$save_CFLAGS
6195     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
6196         AC_MSG_RESULT(yes)
6197     else
6198         AC_MSG_RESULT(no)
6199     fi
6201 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
6203 BUILDING_PCH_WITH_OBJ=
6204 if test -n "$ENABLE_PCH"; then
6205     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
6206     save_CFLAGS=$CFLAGS
6207     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
6208     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
6209     CFLAGS=$save_CFLAGS
6210     if test -n "$BUILDING_PCH_WITH_OBJ"; then
6211         AC_MSG_RESULT(yes)
6212     else
6213         AC_MSG_RESULT(no)
6214     fi
6216 AC_SUBST(BUILDING_PCH_WITH_OBJ)
6218 PCH_CODEGEN=
6219 PCH_NO_CODEGEN=
6220 fpch_prefix=
6221 if test "$COM" = MSC; then
6222     fpch_prefix="-Xclang "
6224 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6225     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-codegen])
6226     save_CFLAGS=$CFLAGS
6227     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-codegen"
6228     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6229         [ PCH_CODEGEN="${fpch_prefix}-fpch-codegen" ],[])
6230     CFLAGS=$save_CFLAGS
6231     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fno-pch-codegen"
6232     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6233         [ PCH_NO_CODEGEN="${fpch_prefix}-fno-pch-codegen" ],[])
6234     CFLAGS=$save_CFLAGS
6235     if test -n "$PCH_CODEGEN"; then
6236         AC_MSG_RESULT(yes)
6237     else
6238         AC_MSG_RESULT(no)
6239     fi
6241 AC_SUBST(PCH_CODEGEN)
6242 AC_SUBST(PCH_NO_CODEGEN)
6243 PCH_DEBUGINFO=
6244 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6245     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-debuginfo])
6246     save_CFLAGS=$CFLAGS
6247     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-debuginfo"
6248     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="${fpch_prefix}-fpch-debuginfo" ],[])
6249     CFLAGS=$save_CFLAGS
6250     if test -n "$PCH_DEBUGINFO"; then
6251         AC_MSG_RESULT(yes)
6252     else
6253         AC_MSG_RESULT(no)
6254     fi
6256 AC_SUBST(PCH_DEBUGINFO)
6258 TAB=`printf '\t'`
6260 AC_MSG_CHECKING([the GNU Make version])
6261 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
6262 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6263 if test "$_make_longver" -ge "038200"; then
6264     AC_MSG_RESULT([$GNUMAKE $_make_version])
6265 else
6266     AC_MSG_ERROR([failed ($GNUMAKE version >= 3.82 needed])
6269 # find if gnumake support file function
6270 AC_MSG_CHECKING([whether GNU Make supports the 'file' function])
6271 TESTGMAKEFILEFUNC="`mktemp -d -t tst.XXXXXX`"
6272 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6273     TESTGMAKEFILEFUNC=`cygpath -m $TESTGMAKEFILEFUNC`
6275 $SED -e "s/<TAB>/$TAB/" > $TESTGMAKEFILEFUNC/Makefile << EOF
6276 \$(file >test.txt,Success )
6278 .PHONY: all
6279 all:
6280 <TAB>@cat test.txt
6283 $GNUMAKE -C $TESTGMAKEFILEFUNC 2>/dev/null 1>&2
6284 if test -f $TESTGMAKEFILEFUNC/test.txt; then
6285     HAVE_GNUMAKE_FILE_FUNC=TRUE
6286     AC_MSG_RESULT([yes])
6287 else
6288     AC_MSG_RESULT([no])
6290 rm -rf $TESTGMAKEFILEFUNC
6291 AC_SUBST(HAVE_GNUMAKE_FILE_FUNC)
6293 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6294 STALE_MAKE=
6295 if test "$_make_ver_check" = ""; then
6296    STALE_MAKE=TRUE
6299 HAVE_LD_HASH_STYLE=FALSE
6300 WITH_LINKER_HASH_STYLE=
6301 AC_MSG_CHECKING([for --hash-style gcc linker support])
6302 if test "$GCC" = "yes"; then
6303     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6304         hash_styles="gnu sysv"
6305     elif test "$with_linker_hash_style" = "no"; then
6306         hash_styles=
6307     else
6308         hash_styles="$with_linker_hash_style"
6309     fi
6311     for hash_style in $hash_styles; do
6312         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6313         hash_style_ldflags_save=$LDFLAGS
6314         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6316         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6317             [
6318 #include <stdio.h>
6319             ],[
6320 printf ("");
6321             ])],
6322             [
6323                   HAVE_LD_HASH_STYLE=TRUE
6324                   WITH_LINKER_HASH_STYLE=$hash_style
6325             ],
6326             [HAVE_LD_HASH_STYLE=FALSE],
6327             [HAVE_LD_HASH_STYLE=FALSE])
6328         LDFLAGS=$hash_style_ldflags_save
6329     done
6331     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6332         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6333     else
6334         AC_MSG_RESULT( no )
6335     fi
6336     LDFLAGS=$hash_style_ldflags_save
6337 else
6338     AC_MSG_RESULT( no )
6340 AC_SUBST(HAVE_LD_HASH_STYLE)
6341 AC_SUBST(WITH_LINKER_HASH_STYLE)
6343 dnl ===================================================================
6344 dnl Check whether there's a Perl version available.
6345 dnl ===================================================================
6346 if test -z "$with_perl_home"; then
6347     AC_PATH_PROG(PERL, perl)
6348 else
6349     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6350     _perl_path="$with_perl_home/bin/perl"
6351     if test -x "$_perl_path"; then
6352         PERL=$_perl_path
6353     else
6354         AC_MSG_ERROR([$_perl_path not found])
6355     fi
6358 dnl ===================================================================
6359 dnl Testing for Perl version 5 or greater.
6360 dnl $] is the Perl version variable, it is returned as an integer
6361 dnl ===================================================================
6362 if test "$PERL"; then
6363     AC_MSG_CHECKING([the Perl version])
6364     ${PERL} -e "exit($]);"
6365     _perl_version=$?
6366     if test "$_perl_version" -lt 5; then
6367         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6368     fi
6369     AC_MSG_RESULT([Perl $_perl_version])
6370 else
6371     AC_MSG_ERROR([Perl not found, install Perl 5])
6374 dnl ===================================================================
6375 dnl Testing for required Perl modules
6376 dnl ===================================================================
6378 AC_MSG_CHECKING([for required Perl modules])
6379 perl_use_string="use Cwd ; use Digest::MD5"
6380 if test "$_os" = "WINNT"; then
6381     if test -n "$PKGFORMAT"; then
6382         for i in $PKGFORMAT; do
6383             case "$i" in
6384             msi)
6385                 # for getting fonts versions to use in MSI
6386                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6387                 ;;
6388             esac
6389         done
6390     fi
6392 if test "$with_system_hsqldb" = "yes"; then
6393     perl_use_string="$perl_use_string ; use Archive::Zip"
6395 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6396     # OpenSSL needs that to build
6397     perl_use_string="$perl_use_string ; use FindBin"
6399 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6400     AC_MSG_RESULT([all modules found])
6401 else
6402     AC_MSG_RESULT([failed to find some modules])
6403     # Find out which modules are missing.
6404     for i in $perl_use_string; do
6405         if test "$i" != "use" -a "$i" != ";"; then
6406             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6407                 missing_perl_modules="$missing_perl_modules $i"
6408             fi
6409         fi
6410     done
6411     AC_MSG_ERROR([
6412     The missing Perl modules are: $missing_perl_modules
6413     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6416 dnl ===================================================================
6417 dnl Check for pkg-config
6418 dnl ===================================================================
6419 if test "$_os" != "WINNT"; then
6420     PKG_PROG_PKG_CONFIG
6422 AC_SUBST(PKG_CONFIG)
6423 AC_SUBST(PKG_CONFIG_PATH)
6424 AC_SUBST(PKG_CONFIG_LIBDIR)
6426 if test "$_os" != "WINNT"; then
6428     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6429     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6430     # explicitly. Or put /path/to/compiler in PATH yourself.
6432     toolprefix=gcc
6433     if test "$COM_IS_CLANG" = "TRUE"; then
6434         toolprefix=llvm
6435     fi
6436     AC_CHECK_TOOLS(AR,$toolprefix-ar ar)
6437     AC_CHECK_TOOLS(NM,$toolprefix-nm nm)
6438     AC_CHECK_TOOLS(RANLIB,$toolprefix-ranlib ranlib)
6439     AC_CHECK_TOOLS(OBJDUMP,$toolprefix-objdump objdump)
6440     AC_CHECK_TOOLS(READELF,$toolprefix-readelf readelf)
6441     AC_CHECK_TOOLS(STRIP,$toolprefix-strip strip)
6443 AC_SUBST(AR)
6444 AC_SUBST(NM)
6445 AC_SUBST(OBJDUMP)
6446 AC_SUBST(RANLIB)
6447 AC_SUBST(READELF)
6448 AC_SUBST(STRIP)
6450 dnl ===================================================================
6451 dnl pkg-config checks on macOS
6452 dnl ===================================================================
6454 if test $_os = Darwin; then
6455     AC_MSG_CHECKING([for bogus pkg-config])
6456     if test -n "$PKG_CONFIG"; then
6457         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6458             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6459         else
6460             if test "$enable_bogus_pkg_config" = "yes"; then
6461                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6462             else
6463                 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.])
6464             fi
6465         fi
6466     else
6467         AC_MSG_RESULT([no, good])
6468     fi
6471 find_csc()
6473     # Return value: $csctest
6475     unset csctest
6477     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client/InstallPath"
6478     if test -n "$regvalue"; then
6479         csctest=$regvalue
6480         return
6481     fi
6484 find_al()
6486     # Return value: $altest
6488     unset altest
6490     # We need this check to detect 4.6.1 or above.
6491     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6492         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools/InstallationFolder"
6493         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6494             altest=$regvalue
6495             return
6496         fi
6497     done
6499     for x in `ls /proc/registry32/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft\ SDKs/Windows`; do
6500         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools/InstallationFolder"
6501         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6502             altest=$regvalue
6503             return
6504         fi
6505     done
6508 find_dotnetsdk46()
6510     unset frametest
6512     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6; do
6513         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder"
6514         if test -n "$regvalue"; then
6515             frametest=$regvalue
6516             return
6517         fi
6518     done
6521 find_winsdk_version()
6523     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6524     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6526     unset winsdktest winsdkbinsubdir winsdklibsubdir
6528     case "$1" in
6529     8.0|8.0A)
6530         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
6531         if test -n "$regvalue"; then
6532             winsdktest=$regvalue
6533             winsdklibsubdir=win8
6534             return
6535         fi
6536         ;;
6537     8.1|8.1A)
6538         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot81"
6539         if test -n "$regvalue"; then
6540             winsdktest=$regvalue
6541             winsdklibsubdir=winv6.3
6542             return
6543         fi
6544         ;;
6545     10.0)
6546         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/InstallationFolder"
6547         if test -n "$regvalue"; then
6548             winsdktest=$regvalue
6549             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion"
6550             if test -n "$regvalue"; then
6551                 winsdkbinsubdir="$regvalue".0
6552                 winsdklibsubdir=$winsdkbinsubdir
6553                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6554                 local tmppath_unix=$(cygpath -u "$tmppath")
6555                 # test exist the SDK path
6556                 if test -d "$tmppath_unix"; then
6557                    # when path is convertible to a short path then path is okay
6558                    cygpath -d "$tmppath" >/dev/null 2>&1
6559                    if test $? -ne 0; then
6560                       AC_MSG_ERROR([Windows SDK doesn't have a 8.3 name, see NtfsDisable8dot3NameCreation])
6561                    fi
6562                 else
6563                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6564                 fi
6565             fi
6566             return
6567         fi
6568         ;;
6569     esac
6572 find_winsdk()
6574     # Return value: From find_winsdk_version
6576     unset winsdktest
6578     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6579         find_winsdk_version $ver
6580         if test -n "$winsdktest"; then
6581             return
6582         fi
6583     done
6586 find_msms()
6588     # Return value: $msmdir
6590     AC_MSG_CHECKING([for MSVC merge modules directory])
6591     local my_msm_files
6592     local my_msm_dir
6594     dnl Order my_msm_files in increasing order. Then check the directories returned
6595     dnl by ls in an inner loop; assuming they are also ordered in increasing order,
6596     dnl the result will be the highest MSM version found in the highest directory.
6598     case "$VCVER" in
6599         16.0 | 17.0)
6600         my_msm_files="Microsoft_VC141_CRT_x86.msm Microsoft_VC142_CRT_x86.msm Microsoft_VC143_CRT_x86.msm ${my_msm_files}"
6601         ;;
6602     esac
6603     for f in $my_msm_files; do
6604         echo "$as_me:$LINENO: searching for $f" >&5
6605     done
6607     msmdir=
6608     case "$VCVER" in
6609     16.0 | 17.0)
6610         for f in ${my_msm_files}; do
6611             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6612                 my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6613                 echo "$as_me:$LINENO: looking for $my_msm_dir${f}])" >&5
6614                 if test -e "$my_msm_dir${f}"; then
6615                     msmdir=$my_msm_dir
6616                 fi
6617             done
6618         done
6619         ;;
6620     esac
6622     if test -n "$msmdir"; then
6623         msmdir=`cygpath -m "$msmdir"`
6624         AC_MSG_RESULT([$msmdir])
6625     else
6626         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6627             AC_MSG_FAILURE([not found])
6628         else
6629             AC_MSG_WARN([not found (check config.log)])
6630             add_warning "MSM none of ${my_msm_files} found"
6631         fi
6632     fi
6635 find_msvc_x64_dlls()
6637     # Return value: $msvcdllpath, $msvcdlls
6639     AC_MSG_CHECKING([for MSVC x64 DLL path])
6641     dnl Order crtver in increasing order. Then check the directories returned by
6642     dnl ls in an inner loop; assuming they are also ordered in increasing order,
6643     dnl the result will be the highest CRT version found in the highest directory.
6645     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6646     case "$VCVER" in
6647     16.0 | 17.0)
6648         for crtver in 141 142 143; do
6649             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6650                 echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT" >&5
6651                 if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"; then
6652                     msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"
6653                 fi
6654             done
6655         done
6656         ;;
6657     esac
6658     AC_MSG_RESULT([$msvcdllpath])
6659     AC_MSG_CHECKING([for MSVC x64 DLLs])
6660     msvcdlls="msvcp140.dll vcruntime140.dll"
6661     for dll in $msvcdlls; do
6662         if ! test -f "$msvcdllpath/$dll"; then
6663             AC_MSG_FAILURE([missing $dll])
6664         fi
6665     done
6666     AC_MSG_RESULT([found all ($msvcdlls)])
6669 dnl =========================================
6670 dnl Check for the Windows  SDK.
6671 dnl =========================================
6672 if test "$_os" = "WINNT"; then
6673     AC_MSG_CHECKING([for Windows SDK])
6674     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6675         find_winsdk
6676         WINDOWS_SDK_HOME=$winsdktest
6678         # normalize if found
6679         if test -n "$WINDOWS_SDK_HOME"; then
6680             WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
6681             WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
6682         fi
6684         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6685     fi
6687     if test -n "$WINDOWS_SDK_HOME"; then
6688         # Remove a possible trailing backslash
6689         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6691         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6692              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6693              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6694             have_windows_sdk_headers=yes
6695         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6696              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6697              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6698             have_windows_sdk_headers=yes
6699         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6700              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6701              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6702             have_windows_sdk_headers=yes
6703         else
6704             have_windows_sdk_headers=no
6705         fi
6707         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6708             have_windows_sdk_libs=yes
6709         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6710             have_windows_sdk_libs=yes
6711         else
6712             have_windows_sdk_libs=no
6713         fi
6715         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6716             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6717 the  Windows SDK are installed.])
6718         fi
6719     fi
6721     if test -z "$WINDOWS_SDK_HOME"; then
6722         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6723     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6724         WINDOWS_SDK_VERSION=80
6725         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6726     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6727         WINDOWS_SDK_VERSION=81
6728         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6729     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6730         WINDOWS_SDK_VERSION=10
6731         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6732     else
6733         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6734     fi
6735     PathFormat "$WINDOWS_SDK_HOME"
6736     WINDOWS_SDK_HOME="$formatted_path"
6737     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6738     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6739         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6740         if test -d "$WINDOWS_SDK_HOME/include/um"; then
6741             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6742         elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then
6743             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6744         fi
6745     fi
6747     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6748     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6749     dnl but not in v8.0), so allow this to be overridden with a
6750     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6751     dnl and configuration error if no WiLangId.vbs is found would arguably be
6752     dnl better, but I do not know under which conditions exactly it is needed by
6753     dnl msiglobal.pm:
6754     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6755         WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6756         WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6757         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6758             WINDOWS_SDK_WILANGID="${WINDOWS_SDK_HOME}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6759             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6760         fi
6761         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6762             WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6763             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6764         fi
6765         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6766             WINDOWS_SDK_WILANGID=$(cygpath -sm "C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs")
6767             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6768         fi
6769     fi
6770     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6771         if test -n "$with_package_format" -a "$with_package_format" != no; then
6772             for i in "$with_package_format"; do
6773                 if test "$i" = "msi"; then
6774                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6775                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6776                     fi
6777                 fi
6778             done
6779         fi
6780     fi
6782 AC_SUBST(WINDOWS_SDK_HOME)
6783 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6784 AC_SUBST(WINDOWS_SDK_VERSION)
6785 AC_SUBST(WINDOWS_SDK_WILANGID)
6787 if test "$build_os" = "cygwin"; then
6788     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6789     dnl dir, it also determines that dir's path w/o an arch segment if any,
6790     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6791     AC_MSG_CHECKING([for midl.exe])
6793     find_winsdk
6794     if test -n "$winsdkbinsubdir" \
6795         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6796     then
6797         MIDL_PATH=$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6798         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin/$winsdkbinsubdir
6799     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6800         MIDL_PATH=$winsdktest/Bin/$WIN_BUILD_ARCH
6801         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6802     elif test -f "$winsdktest/Bin/midl.exe"; then
6803         MIDL_PATH=$winsdktest/Bin
6804         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6805     fi
6806     if test ! -f "$MIDL_PATH/midl.exe"; then
6807         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6808     else
6809         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6810     fi
6812     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6813     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6815     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6816          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6817          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6818          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6819     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6820          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6821          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6822          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
6823     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
6824          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
6825          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6826          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
6827     else
6828         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
6829     fi
6831     dnl Check csc.exe
6832     AC_MSG_CHECKING([for csc.exe])
6833     find_csc
6834     if test -f "$csctest/csc.exe"; then
6835         CSC_PATH="$csctest"
6836     fi
6837     if test ! -f "$CSC_PATH/csc.exe"; then
6838         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
6839     else
6840         AC_MSG_RESULT([$CSC_PATH/csc.exe])
6841     fi
6843     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
6845     dnl Check al.exe
6846     AC_MSG_CHECKING([for al.exe])
6847     find_winsdk
6848     if test -n "$winsdkbinsubdir" \
6849         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
6850     then
6851         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
6852     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/al.exe"; then
6853         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
6854     elif test -f "$winsdktest/Bin/al.exe"; then
6855         AL_PATH="$winsdktest/Bin"
6856     fi
6858     if test -z "$AL_PATH"; then
6859         find_al
6860         if test -f "$altest/bin/al.exe"; then
6861             AL_PATH="$altest/bin"
6862         elif test -f "$altest/al.exe"; then
6863             AL_PATH="$altest"
6864         fi
6865     fi
6866     if test ! -f "$AL_PATH/al.exe"; then
6867         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
6868     else
6869         AC_MSG_RESULT([$AL_PATH/al.exe])
6870     fi
6872     AL_PATH=`win_short_path_for_make "$AL_PATH"`
6874     dnl Check mscoree.lib / .NET Framework dir
6875     AC_MSG_CHECKING(.NET Framework)
6876     find_dotnetsdk46
6877     PathFormat "$frametest"
6878     frametest="$formatted_path"
6879     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6880         DOTNET_FRAMEWORK_HOME="$frametest"
6881     else
6882         find_winsdk
6883         if test -f "$winsdktest/lib/mscoree.lib" -o -f "$winsdktest/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6884             DOTNET_FRAMEWORK_HOME="$winsdktest"
6885         fi
6886     fi
6887     if test ! -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib" -a ! -f "$DOTNET_FRAMEWORK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib" -a ! -f "$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6888         AC_MSG_ERROR([mscoree.lib not found])
6889     fi
6890     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
6892     PathFormat "$MIDL_PATH"
6893     MIDL_PATH="$formatted_path"
6895     PathFormat "$AL_PATH"
6896     AL_PATH="$formatted_path"
6898     PathFormat "$DOTNET_FRAMEWORK_HOME"
6899     DOTNET_FRAMEWORK_HOME="$formatted_path"
6901     PathFormat "$CSC_PATH"
6902     CSC_PATH="$formatted_path"
6905 dnl ===================================================================
6906 dnl Testing for C++ compiler and version...
6907 dnl ===================================================================
6909 if test "$_os" != "WINNT"; then
6910     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that
6911     save_CXXFLAGS=$CXXFLAGS
6912     AC_PROG_CXX
6913     CXXFLAGS=$save_CXXFLAGS
6914     if test -z "$CXX_BASE"; then
6915         CXX_BASE=`first_arg_basename "$CXX"`
6916     fi
6919 dnl check for GNU C++ compiler version
6920 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
6921     AC_MSG_CHECKING([the GNU C++ compiler version])
6923     _gpp_version=`$CXX -dumpversion`
6924     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
6926     if test "$_gpp_majmin" -lt "700"; then
6927         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
6928     else
6929         AC_MSG_RESULT([ok (g++ $_gpp_version)])
6930     fi
6932     dnl see https://code.google.com/p/android/issues/detail?id=41770
6933         glibcxx_threads=no
6934         AC_LANG_PUSH([C++])
6935         AC_REQUIRE_CPP
6936         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
6937         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
6938             #include <bits/c++config.h>]],[[
6939             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
6940             && !defined(_GLIBCXX__PTHREADS) \
6941             && !defined(_GLIBCXX_HAS_GTHREADS)
6942             choke me
6943             #endif
6944         ]])],[AC_MSG_RESULT([yes])
6945         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
6946         AC_LANG_POP([C++])
6947         if test $glibcxx_threads = yes; then
6948             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
6949         fi
6951 AC_SUBST(BOOST_CXXFLAGS)
6954 # prefx CXX with ccache if needed
6956 if test "$CCACHE" != ""; then
6957     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
6958     AC_LANG_PUSH([C++])
6959     save_CXXFLAGS=$CXXFLAGS
6960     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
6961     # msvc does not fail on unknown options, check stdout
6962     if test "$COM" = MSC; then
6963         CXXFLAGS="$CXXFLAGS -nologo"
6964     fi
6965     save_ac_cxx_werror_flag=$ac_cxx_werror_flag
6966     ac_cxx_werror_flag=yes
6967     dnl an empty program will do, we're checking the compiler flags
6968     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
6969                       [use_ccache=yes], [use_ccache=no])
6970     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
6971         AC_MSG_RESULT([yes])
6972     else
6973         CXX="$CCACHE $CXX"
6974         CXX_BASE="ccache $CXX_BASE"
6975         AC_MSG_RESULT([no])
6976     fi
6977     CXXFLAGS=$save_CXXFLAGS
6978     ac_cxx_werror_flag=$save_ac_cxx_werror_flag
6979     AC_LANG_POP([C++])
6982 dnl ===================================================================
6983 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
6984 dnl ===================================================================
6986 if test "$_os" != "WINNT"; then
6987     AC_PROG_CXXCPP
6989     dnl Check whether there's a C pre-processor.
6990     AC_PROG_CPP
6994 dnl ===================================================================
6995 dnl Find integral type sizes and alignments
6996 dnl ===================================================================
6998 if test "$_os" != "WINNT"; then
7000     AC_CHECK_SIZEOF(long)
7001     AC_CHECK_SIZEOF(short)
7002     AC_CHECK_SIZEOF(int)
7003     AC_CHECK_SIZEOF(long long)
7004     AC_CHECK_SIZEOF(double)
7005     AC_CHECK_SIZEOF(void*)
7006     AC_CHECK_SIZEOF(size_t)
7008     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
7009     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
7010     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
7011     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
7012     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
7013     SIZEOF_SIZE_T=$ac_cv_sizeof_size_t
7015     dnl Allow build without AC_CHECK_ALIGNOF, grrr
7016     m4_pattern_allow([AC_CHECK_ALIGNOF])
7017     m4_ifdef([AC_CHECK_ALIGNOF],
7018         [
7019             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
7020             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
7021             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
7022             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
7023         ],
7024         [
7025             case "$_os-$host_cpu" in
7026             Linux-i686)
7027                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
7028                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
7029                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
7030                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
7031                 ;;
7032             Linux-x86_64)
7033                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
7034                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
7035                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
7036                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
7037                 ;;
7038             *)
7039                 if test -z "$ac_cv_alignof_short" -o \
7040                         -z "$ac_cv_alignof_int" -o \
7041                         -z "$ac_cv_alignof_long" -o \
7042                         -z "$ac_cv_alignof_double"; then
7043                    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.])
7044                 fi
7045                 ;;
7046             esac
7047         ])
7049     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
7050     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
7051     if test $ac_cv_sizeof_long -eq 8; then
7052         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
7053     elif test $ac_cv_sizeof_double -eq 8; then
7054         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
7055     else
7056         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
7057     fi
7059     dnl Check for large file support
7060     AC_SYS_LARGEFILE
7061     if test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
7062         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
7063     fi
7064     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
7065         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
7066     fi
7067 else
7068     # Hardcode for MSVC
7069     SAL_TYPES_SIZEOFSHORT=2
7070     SAL_TYPES_SIZEOFINT=4
7071     SAL_TYPES_SIZEOFLONG=4
7072     SAL_TYPES_SIZEOFLONGLONG=8
7073     if test $WIN_HOST_BITS -eq 32; then
7074         SAL_TYPES_SIZEOFPOINTER=4
7075         SIZEOF_SIZE_T=4
7076     else
7077         SAL_TYPES_SIZEOFPOINTER=8
7078         SIZEOF_SIZE_T=8
7079     fi
7080     SAL_TYPES_ALIGNMENT2=2
7081     SAL_TYPES_ALIGNMENT4=4
7082     SAL_TYPES_ALIGNMENT8=8
7083     LFS_CFLAGS=''
7085 AC_SUBST(LFS_CFLAGS)
7086 AC_SUBST(SIZEOF_SIZE_T)
7088 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
7089 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
7090 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
7091 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
7092 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
7093 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
7094 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
7095 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
7097 dnl Calc jumbo sheets (1m+ rows) depend on 64 bit tools::Long .
7098 AC_MSG_CHECKING([whether jumbo sheets are supported])
7099 if test "$_os" != "WINNT"; then
7100     if test $SAL_TYPES_SIZEOFLONG -gt 4; then
7101         AC_MSG_RESULT([yes])
7102         ENABLE_JUMBO_SHEETS=TRUE
7103         AC_DEFINE(HAVE_FEATURE_JUMBO_SHEETS)
7104     else
7105         AC_MSG_RESULT([no])
7106     fi
7107 else
7108     if test $WIN_HOST_BITS -gt 32; then
7109         # 64bit windows is special-cased for tools::Long because long is 32bit
7110         AC_MSG_RESULT([yes])
7111         ENABLE_JUMBO_SHEETS=TRUE
7112         AC_DEFINE(HAVE_FEATURE_JUMBO_SHEETS)
7113     else
7114         AC_MSG_RESULT([no])
7115     fi
7117 AC_SUBST(ENABLE_JUMBO_SHEETS)
7119 dnl ===================================================================
7120 dnl Check whether to enable runtime optimizations
7121 dnl ===================================================================
7122 ENABLE_RUNTIME_OPTIMIZATIONS=
7123 AC_MSG_CHECKING([whether to enable runtime optimizations])
7124 if test -z "$enable_runtime_optimizations"; then
7125     for i in $CC; do
7126         case $i in
7127         -fsanitize=*)
7128             enable_runtime_optimizations=no
7129             break
7130             ;;
7131         esac
7132     done
7134 if test "$enable_runtime_optimizations" != no; then
7135     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
7136     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
7137     AC_MSG_RESULT([yes])
7138 else
7139     AC_MSG_RESULT([no])
7141 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
7143 dnl ===================================================================
7144 dnl Check if valgrind headers are available
7145 dnl ===================================================================
7146 ENABLE_VALGRIND=
7147 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
7148     prev_cppflags=$CPPFLAGS
7149     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
7150     # or where does it come from?
7151     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
7152     AC_CHECK_HEADER([valgrind/valgrind.h],
7153         [ENABLE_VALGRIND=TRUE])
7154     CPPFLAGS=$prev_cppflags
7156 AC_SUBST([ENABLE_VALGRIND])
7157 if test -z "$ENABLE_VALGRIND"; then
7158     if test "$with_valgrind" = yes; then
7159         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
7160     fi
7161     VALGRIND_CFLAGS=
7163 AC_SUBST([VALGRIND_CFLAGS])
7166 dnl ===================================================================
7167 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
7168 dnl ===================================================================
7170 # We need at least the sys/sdt.h include header.
7171 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
7172 if test "$SDT_H_FOUND" = "TRUE"; then
7173     # Found sys/sdt.h header, now make sure the c++ compiler works.
7174     # Old g++ versions had problems with probes in constructors/destructors.
7175     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
7176     AC_LANG_PUSH([C++])
7177     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
7178     #include <sys/sdt.h>
7179     class ProbeClass
7180     {
7181     private:
7182       int& ref;
7183       const char *name;
7185     public:
7186       ProbeClass(int& v, const char *n) : ref(v), name(n)
7187       {
7188         DTRACE_PROBE2(_test_, cons, name, ref);
7189       }
7191       void method(int min)
7192       {
7193         DTRACE_PROBE3(_test_, meth, name, ref, min);
7194         ref -= min;
7195       }
7197       ~ProbeClass()
7198       {
7199         DTRACE_PROBE2(_test_, dest, name, ref);
7200       }
7201     };
7202     ]],[[
7203     int i = 64;
7204     DTRACE_PROBE1(_test_, call, i);
7205     ProbeClass inst = ProbeClass(i, "call");
7206     inst.method(24);
7207     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
7208           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
7209     AC_LANG_POP([C++])
7211 AC_CONFIG_HEADERS([config_host/config_probes.h])
7213 dnl ===================================================================
7214 dnl GCC features
7215 dnl ===================================================================
7216 HAVE_GCC_STACK_CLASH_PROTECTION=
7217 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7218     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
7219     save_CFLAGS=$CFLAGS
7220     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
7221     AC_LINK_IFELSE(
7222         [AC_LANG_PROGRAM(, [[return 0;]])],
7223         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
7224         [AC_MSG_RESULT([no])])
7225     CFLAGS=$save_CFLAGS
7227     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
7228     save_CFLAGS=$CFLAGS
7229     CFLAGS="$CFLAGS -Werror -mno-avx"
7230     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
7231     CFLAGS=$save_CFLAGS
7232     if test "$HAVE_GCC_AVX" = "TRUE"; then
7233         AC_MSG_RESULT([yes])
7234     else
7235         AC_MSG_RESULT([no])
7236     fi
7238     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
7239     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7240     int v = 0;
7241     if (__sync_add_and_fetch(&v, 1) != 1 ||
7242         __sync_sub_and_fetch(&v, 1) != 0)
7243         return 1;
7244     __sync_synchronize();
7245     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
7246         v != 1)
7247         return 1;
7248     return 0;
7249 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
7250     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
7251         AC_MSG_RESULT([yes])
7252         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
7253     else
7254         AC_MSG_RESULT([no])
7255     fi
7257     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
7258     AC_LANG_PUSH([C++])
7259     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7260             #include <cstddef>
7261             #include <cxxabi.h>
7262             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
7263         ])], [
7264             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
7265             AC_MSG_RESULT([yes])
7266         ], [AC_MSG_RESULT([no])])
7267     AC_LANG_POP([C++])
7269     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
7270     AC_LANG_PUSH([C++])
7271     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7272             #include <cstddef>
7273             #include <cxxabi.h>
7274             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7275         ])], [
7276             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7277             AC_MSG_RESULT([yes])
7278         ], [AC_MSG_RESULT([no])])
7279     AC_LANG_POP([C++])
7281     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7282     AC_LANG_PUSH([C++])
7283     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7284             #include <cxxabi.h>
7285             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7286         ])], [
7287             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7288             AC_MSG_RESULT([yes])
7289         ], [AC_MSG_RESULT([no])])
7290     AC_LANG_POP([C++])
7292     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7293     AC_LANG_PUSH([C++])
7294     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7295             #include <cstddef>
7296             #include <cxxabi.h>
7297             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7298         ])], [
7299             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7300             AC_MSG_RESULT([yes])
7301         ], [AC_MSG_RESULT([no])])
7302     AC_LANG_POP([C++])
7304     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7305     AC_LANG_PUSH([C++])
7306     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7307             #include <cstddef>
7308             #include <cxxabi.h>
7309             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7310         ])], [
7311             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7312             AC_MSG_RESULT([yes])
7313         ], [AC_MSG_RESULT([no])])
7314     AC_LANG_POP([C++])
7316     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7317     AC_LANG_PUSH([C++])
7318     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7319             #include <cxxabi.h>
7320             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7321         ])], [
7322             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7323             AC_MSG_RESULT([yes])
7324         ], [AC_MSG_RESULT([no])])
7325     AC_LANG_POP([C++])
7327     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7328     AC_LANG_PUSH([C++])
7329     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7330             #include <cxxabi.h>
7331             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7332         ])], [
7333             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7334             AC_MSG_RESULT([yes])
7335         ], [AC_MSG_RESULT([no])])
7336     AC_LANG_POP([C++])
7338     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7339     AC_LANG_PUSH([C++])
7340     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7341             #include <cxxabi.h>
7342             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7343         ])], [
7344             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7345             AC_MSG_RESULT([yes])
7346         ], [AC_MSG_RESULT([no])])
7347     AC_LANG_POP([C++])
7349     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info in cxxabi.h])
7350     AC_LANG_PUSH([C++])
7351     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7352             #include <cstddef>
7353             #include <cxxabi.h>
7354             std::size_t f() { return sizeof(__cxxabiv1::__si_class_type_info); }
7355         ])], [
7356             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7357             AC_MSG_RESULT([yes])
7358         ], [AC_MSG_RESULT([no])])
7359     AC_LANG_POP([C++])
7361     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7362     AC_LANG_PUSH([C++])
7363     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7364             #include <cstddef>
7365             #include <cxxabi.h>
7366             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7367         ])], [
7368             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7369             AC_MSG_RESULT([yes])
7370         ], [AC_MSG_RESULT([no])])
7371     AC_LANG_POP([C++])
7374 AC_SUBST(HAVE_GCC_AVX)
7375 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7376 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7378 dnl ===================================================================
7379 dnl Identify the C++ library
7380 dnl ===================================================================
7382 AC_MSG_CHECKING([what the C++ library is])
7383 HAVE_LIBSTDCPP=
7384 HAVE_LIBCPP=
7385 AC_LANG_PUSH([C++])
7386 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7387 #include <utility>
7388 #ifndef __GLIBCXX__
7389 foo bar
7390 #endif
7391 ]])],
7392     [CPP_LIBRARY=GLIBCXX
7393      cpp_library_name="GNU libstdc++"
7394      HAVE_LIBSTDCPP=TRUE
7395     ],
7396     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7397 #include <utility>
7398 #ifndef _LIBCPP_VERSION
7399 foo bar
7400 #endif
7401 ]])],
7402     [CPP_LIBRARY=LIBCPP
7403      cpp_library_name="LLVM libc++"
7404      AC_DEFINE([HAVE_LIBCPP])
7405      HAVE_LIBCPP=TRUE
7406     ],
7407     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7408 #include <utility>
7409 #ifndef _MSC_VER
7410 foo bar
7411 #endif
7412 ]])],
7413     [CPP_LIBRARY=MSVCRT
7414      cpp_library_name="Microsoft"
7415     ],
7416     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7417 AC_MSG_RESULT([$cpp_library_name])
7418 AC_LANG_POP([C++])
7419 AC_SUBST([HAVE_LIBSTDCPP])
7420 AC_SUBST([HAVE_LIBCPP])
7422 HAVE_LIBCPP_DEBUG=
7423 if test -n "$HAVE_LIBCPP" -a -n "$ENABLE_DBGUTIL"; then
7424     # Libc++ supports debug mode only if built for it, Mac libc++ isn't,
7425     # and there would be undefined references to debug functions.
7426     # Moreover std::to_string() has a bug (https://reviews.llvm.org/D125184).
7427     AC_MSG_CHECKING([if libc++ has a usable debug mode])
7428     AC_LANG_PUSH([C++])
7429     AC_RUN_IFELSE([AC_LANG_SOURCE([[
7430 #define _LIBCPP_DEBUG 1
7431 #include <string>
7432 #include <vector>
7433 int foo(const std::vector<int>& v) { return *v.begin(); }
7434 int main()
7436     std::vector<int> v{ 1, 2 };
7437     std::string s = "xxxxxxxxxxxxxxxxxxxxxxxxx" + std::to_string(10);
7438     return (foo(v) + s.size()) != 0 ? 0 : 1;
7440 ]])],
7441     [AC_MSG_RESULT(yes)
7442      HAVE_LIBCPP_DEBUG=1
7443     ],
7444     [AC_MSG_RESULT(no)]
7445     )
7446     AC_LANG_POP([C++])
7448 AC_SUBST([HAVE_LIBCPP_DEBUG])
7450 dnl ===================================================================
7451 dnl Check for gperf
7452 dnl ===================================================================
7453 AC_PATH_PROG(GPERF, gperf)
7454 if test -z "$GPERF"; then
7455     AC_MSG_ERROR([gperf not found but needed. Install it.])
7457 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7458     GPERF=`cygpath -m $GPERF`
7460 AC_MSG_CHECKING([whether gperf is new enough])
7461 my_gperf_ver1=$($GPERF --version | head -n 1)
7462 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7463 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7464 if test "$my_gperf_ver3" -ge 301; then
7465     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7466 else
7467     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7469 AC_SUBST(GPERF)
7471 dnl ===================================================================
7472 dnl Check for system libcmis
7473 dnl ===================================================================
7474 libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.5 >= 0.5.2],enabled)
7476 dnl ===================================================================
7477 dnl C++11
7478 dnl ===================================================================
7480 AC_MSG_CHECKING([whether $CXX_BASE supports C++17])
7481 CXXFLAGS_CXX11=
7482 if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7483     if test "$with_latest_c__" = yes; then
7484         CXXFLAGS_CXX11=-std:c++latest
7485     else
7486         CXXFLAGS_CXX11=-std:c++17
7487     fi
7488     CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus"
7489 elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7490     my_flags='-std=c++17 -std=c++1z'
7491     if test "$with_latest_c__" = yes; then
7492         my_flags="-std=c++23 -std=c++2b -std=c++20 -std=c++2a $my_flags"
7493     fi
7494     for flag in $my_flags; do
7495         if test "$COM" = MSC; then
7496             flag="-Xclang $flag"
7497         fi
7498         save_CXXFLAGS=$CXXFLAGS
7499         CXXFLAGS="$CXXFLAGS $flag -Werror"
7500         if test "$SYSTEM_LIBCMIS" = TRUE; then
7501             CXXFLAGS="$CXXFLAGS -DSYSTEM_LIBCMIS $LIBCMIS_CFLAGS"
7502         fi
7503         AC_LANG_PUSH([C++])
7504         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7505             #include <algorithm>
7506             #include <functional>
7507             #include <vector>
7509             #if defined SYSTEM_LIBCMIS
7510             // See ucb/source/ucp/cmis/auth_provider.hxx:
7511             #if !defined __clang__
7512             #pragma GCC diagnostic push
7513             #pragma GCC diagnostic ignored "-Wdeprecated"
7514             #pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
7515             #endif
7516             #include <libcmis/libcmis.hxx>
7517             #if !defined __clang__
7518             #pragma GCC diagnostic pop
7519             #endif
7520             #endif
7522             void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7523                 std::sort(v.begin(), v.end(), fn);
7524             }
7525             ]])],[CXXFLAGS_CXX11=$flag])
7526         AC_LANG_POP([C++])
7527         CXXFLAGS=$save_CXXFLAGS
7528         if test -n "$CXXFLAGS_CXX11"; then
7529             break
7530         fi
7531     done
7533 if test -n "$CXXFLAGS_CXX11"; then
7534     AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7535 else
7536     AC_MSG_ERROR(no)
7538 AC_SUBST(CXXFLAGS_CXX11)
7540 if test "$GCC" = "yes"; then
7541     save_CXXFLAGS=$CXXFLAGS
7542     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7543     CHECK_L_ATOMIC
7544     CXXFLAGS=$save_CXXFLAGS
7545     AC_SUBST(ATOMIC_LIB)
7548 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7549 save_CXXFLAGS=$CXXFLAGS
7550 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7551 AC_LANG_PUSH([C++])
7553 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7554 #include <stddef.h>
7556 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7558 namespace
7560         struct b
7561         {
7562                 int i;
7563                 int j;
7564         };
7566 ]], [[
7567 struct a
7569         int i;
7570         int j;
7572 a thinga[]={{0,0}, {1,1}};
7573 b thingb[]={{0,0}, {1,1}};
7574 size_t i = sizeof(sal_n_array_size(thinga));
7575 size_t j = sizeof(sal_n_array_size(thingb));
7576 return !(i != 0 && j != 0);
7578     ], [ AC_MSG_RESULT(yes) ],
7579     [ AC_MSG_ERROR(no)])
7580 AC_LANG_POP([C++])
7581 CXXFLAGS=$save_CXXFLAGS
7583 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7584 if test "$GCC" = yes; then
7585     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7586     AC_LANG_PUSH([C++])
7587     save_CXXFLAGS=$CXXFLAGS
7588     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7589     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7590     CXXFLAGS=$save_CXXFLAGS
7591     AC_LANG_POP([C++])
7592     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7593         AC_MSG_RESULT([yes])
7594     else
7595         AC_MSG_RESULT([no])
7596     fi
7598 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7600 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7601 AC_LANG_PUSH([C++])
7602 save_CXXFLAGS=$CXXFLAGS
7603 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7604 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7605         #include <algorithm>
7606         #include <initializer_list>
7607         #include <vector>
7608         template<typename T> class S {
7609         private:
7610             std::vector<T> v_;
7611         public:
7612             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7613         };
7614         constinit S<int> s{3, 2, 1};
7615     ])], [
7616         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7617         AC_MSG_RESULT([yes])
7618     ], [AC_MSG_RESULT([no])])
7619 CXXFLAGS=$save_CXXFLAGS
7620 AC_LANG_POP([C++])
7622 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a <span> with unsigned size_type])
7623 AC_LANG_PUSH([C++])
7624 save_CXXFLAGS=$CXXFLAGS
7625 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7626 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7627         #include <span>
7628         #include <type_traits>
7629         // Don't check size_type directly, as it was called index_type before P1872R0:
7630         void f(std::span<int> s) { static_assert(std::is_unsigned_v<decltype(s.size())>); };
7631     ])], [
7632         AC_DEFINE([HAVE_CPP_SPAN],[1])
7633         AC_MSG_RESULT([yes])
7634     ], [AC_MSG_RESULT([no])])
7635 CXXFLAGS=$save_CXXFLAGS
7636 AC_LANG_POP([C++])
7638 AC_MSG_CHECKING([whether $CXX_BASE implements C++ DR P1155R3])
7639 AC_LANG_PUSH([C++])
7640 save_CXXFLAGS=$CXXFLAGS
7641 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7642 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7643         struct S1 { S1(S1 &&); };
7644         struct S2: S1 {};
7645         S1 f(S2 s) { return s; }
7646     ])], [
7647         AC_DEFINE([HAVE_P1155R3],[1])
7648         AC_MSG_RESULT([yes])
7649     ], [AC_MSG_RESULT([no])])
7650 CXXFLAGS=$save_CXXFLAGS
7651 AC_LANG_POP([C++])
7653 AC_MSG_CHECKING([whether $CXX_BASE supports C++20 std::atomic_ref])
7654 HAVE_CXX20_ATOMIC_REF=
7655 AC_LANG_PUSH([C++])
7656 save_CXXFLAGS=$CXXFLAGS
7657 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7658 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7659         #include <atomic>
7660         int x;
7661         std::atomic_ref<int> y(x);
7662     ])], [
7663         HAVE_CXX20_ATOMIC_REF=TRUE
7664         AC_MSG_RESULT([yes])
7665     ], [AC_MSG_RESULT([no])])
7666 CXXFLAGS=$save_CXXFLAGS
7667 AC_LANG_POP([C++])
7668 AC_SUBST([HAVE_CXX20_ATOMIC_REF])
7670 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7671 dnl which is included in -Wextra anyway):
7672 HAVE_WDEPRECATED_COPY_DTOR=
7673 if test "$GCC" = yes; then
7674     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7675     AC_LANG_PUSH([C++])
7676     save_CXXFLAGS=$CXXFLAGS
7677     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7678     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7679             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7680             AC_MSG_RESULT([yes])
7681         ], [AC_MSG_RESULT([no])])
7682     CXXFLAGS=$save_CXXFLAGS
7683     AC_LANG_POP([C++])
7685 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7687 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7688 dnl uninitialized warning for code like
7690 dnl   OString f();
7691 dnl   boost::optional<OString> * g(bool b) {
7692 dnl       boost::optional<OString> o;
7693 dnl       if (b) o = f();
7694 dnl       return new boost::optional<OString>(o);
7695 dnl   }
7697 dnl (as is e.g. present, in a slightly more elaborate form, in
7698 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7699 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7700 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7701 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7702     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7703     AC_LANG_PUSH([C++])
7704     save_CXXFLAGS=$CXXFLAGS
7705     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7706     if test "$ENABLE_OPTIMIZED" = TRUE; then
7707         CXXFLAGS="$CXXFLAGS -O2"
7708     else
7709         CXXFLAGS="$CXXFLAGS -O0"
7710     fi
7711     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7712             #include <new>
7713             void f1(int);
7714             struct S1 {
7715                 ~S1() { f1(n); }
7716                 int n = 0;
7717             };
7718             struct S2 {
7719                 S2() {}
7720                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7721                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7722                 void set(S1 s) {
7723                     new (stg) S1(s);
7724                     init = true;
7725                 }
7726                 bool init = false;
7727                 char stg[sizeof (S1)];
7728             } ;
7729             S1 f2();
7730             S2 * f3(bool b) {
7731                 S2 o;
7732                 if (b) o.set(f2());
7733                 return new S2(o);
7734             }
7735         ]])], [AC_MSG_RESULT([no])], [
7736             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7737             AC_MSG_RESULT([yes])
7738         ])
7739     CXXFLAGS=$save_CXXFLAGS
7740     AC_LANG_POP([C++])
7742 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7744 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7745 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7746 dnl hits us e.g. with GCC 10 and --enable-optimized at
7748 dnl   In file included from include/rtl/string.hxx:49,
7749 dnl                    from include/rtl/ustring.hxx:43,
7750 dnl                    from include/osl/file.hxx:35,
7751 dnl                    from include/codemaker/global.hxx:28,
7752 dnl                    from include/codemaker/options.hxx:23,
7753 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7754 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7755 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,
7756 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,
7757 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,
7758 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7759 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7760 dnl      78 |         memcpy( buffer, data, length );
7761 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7762 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7763 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7764     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7765     AC_LANG_PUSH([C++])
7766     save_CXXFLAGS=$CXXFLAGS
7767     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7768     if test "$ENABLE_OPTIMIZED" = TRUE; then
7769         CXXFLAGS="$CXXFLAGS -O2"
7770     else
7771         CXXFLAGS="$CXXFLAGS -O0"
7772     fi
7773     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7774     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7775             void fill(char const * begin, char const * end, char c);
7776             struct q {
7777                 char ids[4];
7778                 char username[6];
7779             };
7780             void test(q & c) {
7781                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
7782                 __builtin_strncpy(c.username, "root", sizeof(c.username));
7783             }
7784         ]])], [AC_MSG_RESULT([no])], [
7785             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
7786             AC_MSG_RESULT([yes])
7787         ])
7788     CXXFLAGS=$save_CXXFLAGS
7789     AC_LANG_POP([C++])
7791 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
7793 HAVE_DLLEXPORTINLINES=
7794 if test "$_os" = "WINNT"; then
7795     AC_MSG_CHECKING([whether $CXX_BASE supports -Zc:dllexportInlines-])
7796     AC_LANG_PUSH([C++])
7797     save_CXXFLAGS=$CXXFLAGS
7798     CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
7799     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7800             HAVE_DLLEXPORTINLINES=TRUE
7801             AC_MSG_RESULT([yes])
7802         ], [AC_MSG_RESULT([no])])
7803     CXXFLAGS=$save_CXXFLAGS
7804     AC_LANG_POP([C++])
7806 AC_SUBST([HAVE_DLLEXPORTINLINES])
7808 dnl ===================================================================
7809 dnl CPU Intrinsics support - SSE, AVX
7810 dnl ===================================================================
7812 CXXFLAGS_INTRINSICS_SSE2=
7813 CXXFLAGS_INTRINSICS_SSSE3=
7814 CXXFLAGS_INTRINSICS_SSE41=
7815 CXXFLAGS_INTRINSICS_SSE42=
7816 CXXFLAGS_INTRINSICS_AVX=
7817 CXXFLAGS_INTRINSICS_AVX2=
7818 CXXFLAGS_INTRINSICS_AVX512=
7819 CXXFLAGS_INTRINSICS_AVX512F=
7820 CXXFLAGS_INTRINSICS_F16C=
7821 CXXFLAGS_INTRINSICS_FMA=
7823 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7824     # GCC, Clang or Clang-cl (clang-cl + MSVC's -arch options don't work well together)
7825     flag_sse2=-msse2
7826     flag_ssse3=-mssse3
7827     flag_sse41=-msse4.1
7828     flag_sse42=-msse4.2
7829     flag_avx=-mavx
7830     flag_avx2=-mavx2
7831     flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
7832     flag_avx512f=-mavx512f
7833     flag_f16c=-mf16c
7834     flag_fma=-mfma
7835 else
7836     # With MSVC using -arch is in fact not necessary for being able
7837     # to use CPU intrinsics, code using AVX512F intrinsics will compile
7838     # even if compiled with -arch:AVX, the -arch option really only affects
7839     # instructions generated for C/C++ code.
7840     # So use the matching same (or lower) -arch options, but only in order
7841     # to generate the best matching instructions for the C++ code surrounding
7842     # the intrinsics.
7843     # SSE2 is the default for x86/x64, so no need to specify the option.
7844     flag_sse2=
7845     # No specific options for these, use the next lower.
7846     flag_ssse3="$flag_sse2"
7847     flag_sse41="$flag_sse2"
7848     flag_sse42="$flag_sse2"
7849     flag_avx=-arch:AVX
7850     flag_avx2=-arch:AVX2
7851     flag_avx512=-arch:AVX512
7852     # Using -arch:AVX512 would enable more than just AVX512F, so use only AVX2.
7853     flag_avx512f=-arch:AVX2
7854     # No MSVC options for these.
7855     flag_f16c="$flag_sse2"
7856     flag_fma="$flag_sse2"
7859 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
7860 AC_LANG_PUSH([C++])
7861 save_CXXFLAGS=$CXXFLAGS
7862 CXXFLAGS="$CXXFLAGS $flag_sse2"
7863 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7864     #include <emmintrin.h>
7865     int main () {
7866         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7867         c = _mm_xor_si128 (a, b);
7868         return 0;
7869     }
7870     ])],
7871     [can_compile_sse2=yes],
7872     [can_compile_sse2=no])
7873 AC_LANG_POP([C++])
7874 CXXFLAGS=$save_CXXFLAGS
7875 AC_MSG_RESULT([${can_compile_sse2}])
7876 if test "${can_compile_sse2}" = "yes" ; then
7877     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
7880 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
7881 AC_LANG_PUSH([C++])
7882 save_CXXFLAGS=$CXXFLAGS
7883 CXXFLAGS="$CXXFLAGS $flag_ssse3"
7884 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7885     #include <tmmintrin.h>
7886     int main () {
7887         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7888         c = _mm_maddubs_epi16 (a, b);
7889         return 0;
7890     }
7891     ])],
7892     [can_compile_ssse3=yes],
7893     [can_compile_ssse3=no])
7894 AC_LANG_POP([C++])
7895 CXXFLAGS=$save_CXXFLAGS
7896 AC_MSG_RESULT([${can_compile_ssse3}])
7897 if test "${can_compile_ssse3}" = "yes" ; then
7898     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
7901 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
7902 AC_LANG_PUSH([C++])
7903 save_CXXFLAGS=$CXXFLAGS
7904 CXXFLAGS="$CXXFLAGS $flag_sse41"
7905 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7906     #include <smmintrin.h>
7907     int main () {
7908         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7909         c = _mm_cmpeq_epi64 (a, b);
7910         return 0;
7911     }
7912     ])],
7913     [can_compile_sse41=yes],
7914     [can_compile_sse41=no])
7915 AC_LANG_POP([C++])
7916 CXXFLAGS=$save_CXXFLAGS
7917 AC_MSG_RESULT([${can_compile_sse41}])
7918 if test "${can_compile_sse41}" = "yes" ; then
7919     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
7922 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
7923 AC_LANG_PUSH([C++])
7924 save_CXXFLAGS=$CXXFLAGS
7925 CXXFLAGS="$CXXFLAGS $flag_sse42"
7926 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7927     #include <nmmintrin.h>
7928     int main () {
7929         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7930         c = _mm_cmpgt_epi64 (a, b);
7931         return 0;
7932     }
7933     ])],
7934     [can_compile_sse42=yes],
7935     [can_compile_sse42=no])
7936 AC_LANG_POP([C++])
7937 CXXFLAGS=$save_CXXFLAGS
7938 AC_MSG_RESULT([${can_compile_sse42}])
7939 if test "${can_compile_sse42}" = "yes" ; then
7940     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
7943 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
7944 AC_LANG_PUSH([C++])
7945 save_CXXFLAGS=$CXXFLAGS
7946 CXXFLAGS="$CXXFLAGS $flag_avx"
7947 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7948     #include <immintrin.h>
7949     int main () {
7950         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
7951         c = _mm256_xor_ps(a, b);
7952         return 0;
7953     }
7954     ])],
7955     [can_compile_avx=yes],
7956     [can_compile_avx=no])
7957 AC_LANG_POP([C++])
7958 CXXFLAGS=$save_CXXFLAGS
7959 AC_MSG_RESULT([${can_compile_avx}])
7960 if test "${can_compile_avx}" = "yes" ; then
7961     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
7964 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
7965 AC_LANG_PUSH([C++])
7966 save_CXXFLAGS=$CXXFLAGS
7967 CXXFLAGS="$CXXFLAGS $flag_avx2"
7968 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7969     #include <immintrin.h>
7970     int main () {
7971         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
7972         c = _mm256_maddubs_epi16(a, b);
7973         return 0;
7974     }
7975     ])],
7976     [can_compile_avx2=yes],
7977     [can_compile_avx2=no])
7978 AC_LANG_POP([C++])
7979 CXXFLAGS=$save_CXXFLAGS
7980 AC_MSG_RESULT([${can_compile_avx2}])
7981 if test "${can_compile_avx2}" = "yes" ; then
7982     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
7985 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
7986 AC_LANG_PUSH([C++])
7987 save_CXXFLAGS=$CXXFLAGS
7988 CXXFLAGS="$CXXFLAGS $flag_avx512"
7989 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7990     #include <immintrin.h>
7991     int main () {
7992         __m512i a = _mm512_loadu_si512(0);
7993         __m512d v1 = _mm512_load_pd(0);
7994         // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
7995         __m512d v2 = _mm512_abs_pd(v1);
7996         return 0;
7997     }
7998     ])],
7999     [can_compile_avx512=yes],
8000     [can_compile_avx512=no])
8001 AC_LANG_POP([C++])
8002 CXXFLAGS=$save_CXXFLAGS
8003 AC_MSG_RESULT([${can_compile_avx512}])
8004 if test "${can_compile_avx512}" = "yes" ; then
8005     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
8006     CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
8009 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
8010 AC_LANG_PUSH([C++])
8011 save_CXXFLAGS=$CXXFLAGS
8012 CXXFLAGS="$CXXFLAGS $flag_f16c"
8013 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8014     #include <immintrin.h>
8015     int main () {
8016         __m128i a = _mm_set1_epi32 (0);
8017         __m128 c;
8018         c = _mm_cvtph_ps(a);
8019         return 0;
8020     }
8021     ])],
8022     [can_compile_f16c=yes],
8023     [can_compile_f16c=no])
8024 AC_LANG_POP([C++])
8025 CXXFLAGS=$save_CXXFLAGS
8026 AC_MSG_RESULT([${can_compile_f16c}])
8027 if test "${can_compile_f16c}" = "yes" ; then
8028     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
8031 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
8032 AC_LANG_PUSH([C++])
8033 save_CXXFLAGS=$CXXFLAGS
8034 CXXFLAGS="$CXXFLAGS $flag_fma"
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 = _mm256_set1_ps (0.0f), d;
8039         d = _mm256_fmadd_ps(a, b, c);
8040         return 0;
8041     }
8042     ])],
8043     [can_compile_fma=yes],
8044     [can_compile_fma=no])
8045 AC_LANG_POP([C++])
8046 CXXFLAGS=$save_CXXFLAGS
8047 AC_MSG_RESULT([${can_compile_fma}])
8048 if test "${can_compile_fma}" = "yes" ; then
8049     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
8052 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
8053 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
8054 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
8055 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
8056 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
8057 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
8058 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
8059 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512F])
8060 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
8061 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
8063 dnl ===================================================================
8064 dnl system stl sanity tests
8065 dnl ===================================================================
8066 if test "$_os" != "WINNT"; then
8068     AC_LANG_PUSH([C++])
8070     save_CPPFLAGS="$CPPFLAGS"
8071     if test -n "$MACOSX_SDK_PATH"; then
8072         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
8073     fi
8075     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
8076     # only.
8077     if test "$CPP_LIBRARY" = GLIBCXX; then
8078         dnl gcc#19664, gcc#22482, rhbz#162935
8079         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
8080         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
8081         AC_MSG_RESULT([$stlvisok])
8082         if test "$stlvisok" = "no"; then
8083             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
8084         fi
8085     fi
8087     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
8088     # when we don't make any dynamic libraries?
8089     if test "$DISABLE_DYNLOADING" = ""; then
8090         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
8091         cat > conftestlib1.cc <<_ACEOF
8092 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
8093 struct S2: S1<int> { virtual ~S2(); };
8094 S2::~S2() {}
8095 _ACEOF
8096         cat > conftestlib2.cc <<_ACEOF
8097 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
8098 struct S2: S1<int> { virtual ~S2(); };
8099 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
8100 _ACEOF
8101         gccvisinlineshiddenok=yes
8102         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
8103             gccvisinlineshiddenok=no
8104         else
8105             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
8106             dnl known to not work with -z defs (unsetting which makes the test
8107             dnl moot, though):
8108             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
8109             if test "$COM_IS_CLANG" = TRUE; then
8110                 for i in $CXX $CXXFLAGS; do
8111                     case $i in
8112                     -fsanitize=*)
8113                         my_linkflagsnoundefs=
8114                         break
8115                         ;;
8116                     esac
8117                 done
8118             fi
8119             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
8120                 gccvisinlineshiddenok=no
8121             fi
8122         fi
8124         rm -fr libconftest*
8125         AC_MSG_RESULT([$gccvisinlineshiddenok])
8126         if test "$gccvisinlineshiddenok" = "no"; then
8127             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
8128         fi
8129     fi
8131    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
8132     cat >visibility.cxx <<_ACEOF
8133 #pragma GCC visibility push(hidden)
8134 struct __attribute__ ((visibility ("default"))) TestStruct {
8135   static void Init();
8137 __attribute__ ((visibility ("default"))) void TestFunc() {
8138   TestStruct::Init();
8140 _ACEOF
8141     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
8142         gccvisbroken=yes
8143     else
8144         case "$host_cpu" in
8145         i?86|x86_64)
8146             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
8147                 gccvisbroken=no
8148             else
8149                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
8150                     gccvisbroken=no
8151                 else
8152                     gccvisbroken=yes
8153                 fi
8154             fi
8155             ;;
8156         *)
8157             gccvisbroken=no
8158             ;;
8159         esac
8160     fi
8161     rm -f visibility.s visibility.cxx
8163     AC_MSG_RESULT([$gccvisbroken])
8164     if test "$gccvisbroken" = "yes"; then
8165         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
8166     fi
8168     CPPFLAGS="$save_CPPFLAGS"
8170     AC_MSG_CHECKING([if CET endbranch is recognized])
8171 cat > endbr.s <<_ACEOF
8172 endbr32
8173 _ACEOF
8174     HAVE_ASM_END_BRANCH_INS_SUPPORT=
8175     if $CXX -c endbr.s -o endbr.o >/dev/null 2>&5; then
8176         AC_MSG_RESULT([yes])
8177         HAVE_ASM_END_BRANCH_INS_SUPPORT=TRUE
8178     else
8179         AC_MSG_RESULT([no])
8180     fi
8181     rm -f endbr.s endbr.o
8182     AC_SUBST(HAVE_ASM_END_BRANCH_INS_SUPPORT)
8184     AC_LANG_POP([C++])
8187 dnl ===================================================================
8188 dnl  Clang++ tests
8189 dnl ===================================================================
8191 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
8192 if test "$GCC" = "yes"; then
8193     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
8194     AC_LANG_PUSH([C++])
8195     save_CXXFLAGS=$CXXFLAGS
8196     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
8197     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
8198     CXXFLAGS=$save_CXXFLAGS
8199     AC_LANG_POP([C++])
8200     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
8201         AC_MSG_RESULT([yes])
8202     else
8203         AC_MSG_RESULT([no])
8204     fi
8206 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
8208 dnl ===================================================================
8209 dnl Compiler plugins
8210 dnl ===================================================================
8212 COMPILER_PLUGINS=
8213 # currently only Clang
8215 if test "$COM_IS_CLANG" != "TRUE"; then
8216     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
8217         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
8218         enable_compiler_plugins=no
8219     fi
8222 COMPILER_PLUGINS_COM_IS_CLANG=
8223 if test "$COM_IS_CLANG" = "TRUE"; then
8224     if test -n "$enable_compiler_plugins"; then
8225         compiler_plugins="$enable_compiler_plugins"
8226     elif test -n "$ENABLE_DBGUTIL"; then
8227         compiler_plugins=test
8228     else
8229         compiler_plugins=no
8230     fi
8231     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
8232         if test "$CLANGVER" -lt 120001; then
8233             if test "$compiler_plugins" = yes; then
8234                 AC_MSG_ERROR(
8235                     [Clang $CLANGVER is too old to build compiler plugins; need >= 12.0.1.])
8236             else
8237                 compiler_plugins=no
8238             fi
8239         fi
8240     fi
8241     if test "$compiler_plugins" != "no"; then
8242         dnl The prefix where Clang resides, override to where Clang resides if
8243         dnl using a source build:
8244         if test -z "$CLANGDIR"; then
8245             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
8246         fi
8247         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
8248         if test -z "$COMPILER_PLUGINS_CXX"; then
8249             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
8250         fi
8251         clangbindir=$CLANGDIR/bin
8252         if test "$build_os" = "cygwin"; then
8253             clangbindir=$(cygpath -u "$clangbindir")
8254         fi
8255         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
8256         if test -n "$LLVM_CONFIG"; then
8257             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
8258             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
8259             if test -z "$CLANGLIBDIR"; then
8260                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
8261             fi
8262             # Try if clang is built from source (in which case its includes are not together with llvm includes).
8263             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
8264             clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
8265             if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
8266                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
8267             fi
8268             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
8269             clangobjdir=$($LLVM_CONFIG --obj-root)
8270             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
8271                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
8272             fi
8273         fi
8274         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
8275         AC_LANG_PUSH([C++])
8276         save_CXX=$CXX
8277         save_CXXCPP=$CXXCPP
8278         save_CPPFLAGS=$CPPFLAGS
8279         save_CXXFLAGS=$CXXFLAGS
8280         save_LDFLAGS=$LDFLAGS
8281         save_LIBS=$LIBS
8282         CXX=$COMPILER_PLUGINS_CXX
8283         CXXCPP="$COMPILER_PLUGINS_CXX -E"
8284         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8285         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8286         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
8287             [COMPILER_PLUGINS=TRUE],
8288             [
8289             if test "$compiler_plugins" = "yes"; then
8290                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
8291             else
8292                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
8293                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
8294             fi
8295             ])
8296         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8297         dnl comment in compilerplugins/Makefile-clang.mk:
8298         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8299             LDFLAGS=""
8300             AC_MSG_CHECKING([for clang libraries to use])
8301             if test -z "$CLANGTOOLLIBS"; then
8302                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8303  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8304                 AC_LINK_IFELSE([
8305                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8306                         [[ clang::FullSourceLoc().dump(); ]])
8307                 ],[CLANGTOOLLIBS="$LIBS"],[])
8308             fi
8309             if test -z "$CLANGTOOLLIBS"; then
8310                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8311                 AC_LINK_IFELSE([
8312                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8313                         [[ clang::FullSourceLoc().dump(); ]])
8314                 ],[CLANGTOOLLIBS="$LIBS"],[])
8315             fi
8316             AC_MSG_RESULT([$CLANGTOOLLIBS])
8317             if test -z "$CLANGTOOLLIBS"; then
8318                 if test "$compiler_plugins" = "yes"; then
8319                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8320                 else
8321                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8322                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8323                 fi
8324                 COMPILER_PLUGINS=
8325             fi
8326             if test -n "$COMPILER_PLUGINS"; then
8327                 if test -z "$CLANGSYSINCLUDE"; then
8328                     if test -n "$LLVM_CONFIG"; then
8329                         # Path to the clang system headers (no idea if there's a better way to get it).
8330                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8331                     fi
8332                 fi
8333             fi
8334         fi
8335         CXX=$save_CXX
8336         CXXCPP=$save_CXXCPP
8337         CPPFLAGS=$save_CPPFLAGS
8338         CXXFLAGS=$save_CXXFLAGS
8339         LDFLAGS=$save_LDFLAGS
8340         LIBS="$save_LIBS"
8341         AC_LANG_POP([C++])
8343         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8344         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8345             #ifndef __clang__
8346             you lose
8347             #endif
8348             int foo=42;
8349             ]])],
8350             [AC_MSG_RESULT([yes])
8351              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8352             [AC_MSG_RESULT([no])])
8353         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8354     fi
8355 else
8356     if test "$enable_compiler_plugins" = "yes"; then
8357         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8358     fi
8360 COMPILER_PLUGINS_ANALYZER_PCH=
8361 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8362     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8364 AC_SUBST(COMPILER_PLUGINS)
8365 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8366 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8367 AC_SUBST(COMPILER_PLUGINS_CXX)
8368 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8369 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8370 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8371 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8372 AC_SUBST(CLANGDIR)
8373 AC_SUBST(CLANGLIBDIR)
8374 AC_SUBST(CLANGTOOLLIBS)
8375 AC_SUBST(CLANGSYSINCLUDE)
8377 # Plugin to help linker.
8378 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8379 # This makes --enable-lto build with clang work.
8380 AC_SUBST(LD_PLUGIN)
8382 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8383 AC_SUBST(HAVE_POSIX_FALLOCATE)
8385 JITC_PROCESSOR_TYPE=""
8386 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8387     # IBMs JDK needs this...
8388     JITC_PROCESSOR_TYPE=6
8389     export JITC_PROCESSOR_TYPE
8391 AC_SUBST([JITC_PROCESSOR_TYPE])
8393 # Misc Windows Stuff
8394 AC_ARG_WITH(ucrt-dir,
8395     AS_HELP_STRING([--with-ucrt-dir],
8396         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8397         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8398         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8399             Windows6.1-KB2999226-x64.msu
8400             Windows6.1-KB2999226-x86.msu
8401             Windows8.1-KB2999226-x64.msu
8402             Windows8.1-KB2999226-x86.msu
8403             Windows8-RT-KB2999226-x64.msu
8404             Windows8-RT-KB2999226-x86.msu
8405         A zip archive including those files is available from Microsoft site:
8406         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8409 UCRT_REDISTDIR="$with_ucrt_dir"
8410 if test $_os = "WINNT"; then
8411     find_msvc_x64_dlls
8412     for i in $PKGFORMAT; do
8413         if test "$i" = msi; then
8414             find_msms
8415             break
8416         fi
8417     done
8418     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8419     MSVC_DLLS="$msvcdlls"
8420     test -n "$msmdir" && MSM_PATH=`win_short_path_for_make "$msmdir"`
8421     # MSVC 15.3 changed it to VC141
8422     if echo "$msvcdllpath" | grep -q "VC143.CRT$"; then
8423         SCPDEFS="$SCPDEFS -DWITH_VC143_REDIST"
8424     elif echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8425         SCPDEFS="$SCPDEFS -DWITH_VC142_REDIST"
8426     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8427         SCPDEFS="$SCPDEFS -DWITH_VC141_REDIST"
8428     else
8429         SCPDEFS="$SCPDEFS -DWITH_VC${VCVER}_REDIST"
8430     fi
8432     if test "$UCRT_REDISTDIR" = "no"; then
8433         dnl explicitly disabled
8434         UCRT_REDISTDIR=""
8435     else
8436         if ! test -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x64.msu" -a \
8437                   -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x86.msu" -a \
8438                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x64.msu" -a \
8439                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x86.msu" -a \
8440                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x64.msu" -a \
8441                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x86.msu"; then
8442             UCRT_REDISTDIR=""
8443             if test -n "$PKGFORMAT"; then
8444                for i in $PKGFORMAT; do
8445                    case "$i" in
8446                    msi)
8447                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8448                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8449                        ;;
8450                    esac
8451                done
8452             fi
8453         fi
8454     fi
8457 AC_SUBST(UCRT_REDISTDIR)
8458 AC_SUBST(MSVC_DLL_PATH)
8459 AC_SUBST(MSVC_DLLS)
8460 AC_SUBST(MSM_PATH)
8463 dnl ===================================================================
8464 dnl Checks for Java
8465 dnl ===================================================================
8466 if test "$ENABLE_JAVA" != ""; then
8468     # Windows-specific tests
8469     if test "$build_os" = "cygwin"; then
8470         if test -z "$with_jdk_home"; then
8471             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8472             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8473             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/CurrentVersion"
8474             if test -n "$regvalue"; then
8475                 ver=$regvalue
8476                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver/JavaHome"
8477                 with_jdk_home=$regvalue
8478             fi
8479             howfound="found automatically"
8480         else
8481             with_jdk_home=`win_short_path_for_make "$with_jdk_home"`
8482             howfound="you passed"
8483         fi
8485         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8486             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])
8487         fi
8488     fi
8490     # 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.
8491     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8492     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8493         with_jdk_home=`/usr/libexec/java_home`
8494     fi
8496     JAVA_HOME=; export JAVA_HOME
8497     if test -z "$with_jdk_home"; then
8498         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8499     else
8500         _java_path="$with_jdk_home/bin/$with_java"
8501         dnl Check if there is a Java interpreter at all.
8502         if test -x "$_java_path"; then
8503             JAVAINTERPRETER=$_java_path
8504         else
8505             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8506         fi
8507     fi
8509     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8510     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8511     dnl loaded by java to run JunitTests:
8512     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8513         shortjdkhome=`cygpath -d "$with_jdk_home"`
8514         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
8515             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8516             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8517         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
8518             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8519             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8520         fi
8522         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8523             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8524         fi
8525         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8526     elif test "$cross_compiling" != "yes"; then
8527         case $CPUNAME in
8528             AARCH64|AXP|X86_64|HPPA|IA64|POWERPC64|S390X|SPARC64|GODSON64)
8529                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8530                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8531                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8532                 fi
8533                 ;;
8534             *) # assumption: everything else 32-bit
8535                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8536                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8537                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8538                 fi
8539                 ;;
8540         esac
8541     fi
8544 dnl ===================================================================
8545 dnl Checks for JDK.
8546 dnl ===================================================================
8548 # Whether all the complexity here actually is needed any more or not, no idea.
8550 JDK_SECURITYMANAGER_DISALLOWED=
8551 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8552     _gij_longver=0
8553     AC_MSG_CHECKING([the installed JDK])
8554     if test -n "$JAVAINTERPRETER"; then
8555         dnl java -version sends output to stderr!
8556         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8557             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8558         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8559             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8560         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8561             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8562         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8563             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8564         else
8565             JDK=sun
8567             dnl Sun JDK specific tests
8568             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8569             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8571             if test "$_jdk_ver" -lt 10900; then
8572                 AC_MSG_ERROR([JDK is too old, you need at least 9 ($_jdk_ver < 10900)])
8573             fi
8574             if test "$_jdk_ver" -gt 10900; then
8575                 JAVA_CLASSPATH_NOT_SET=TRUE
8576             fi
8577             dnl TODO: Presumably, the Security Manager will not merely be disallowed, but be
8578             dnl completely removed in some Java version > 18 (see
8579             dnl <https://openjdk.java.net/jeps/411> "Deprecate the Security Manager for Removal"):
8580             if test "$_jdk_ver" -ge 180000; then
8581                 JDK_SECURITYMANAGER_DISALLOWED=TRUE
8582             fi
8584             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8585             if test "$_os" = "WINNT"; then
8586                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8587             fi
8588             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8590             # set to limit VM usage for JunitTests
8591             JAVAIFLAGS=-Xmx64M
8592             # set to limit VM usage for javac
8593             JAVACFLAGS=-J-Xmx128M
8594         fi
8595     else
8596         AC_MSG_ERROR([Java not found. You need at least JDK 9])
8597     fi
8598 else
8599     if test -z "$ENABLE_JAVA"; then
8600         dnl Java disabled
8601         JAVA_HOME=
8602         export JAVA_HOME
8603     elif test "$cross_compiling" = "yes"; then
8604         # Just assume compatibility of build and host JDK
8605         JDK=$JDK_FOR_BUILD
8606         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8607     fi
8610 dnl ===================================================================
8611 dnl Checks for javac
8612 dnl ===================================================================
8613 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8614     javacompiler="javac"
8615     : ${JAVA_SOURCE_VER=8}
8616     : ${JAVA_TARGET_VER=8}
8617     if test -z "$with_jdk_home"; then
8618         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8619     else
8620         _javac_path="$with_jdk_home/bin/$javacompiler"
8621         dnl Check if there is a Java compiler at all.
8622         if test -x "$_javac_path"; then
8623             JAVACOMPILER=$_javac_path
8624         fi
8625     fi
8626     if test -z "$JAVACOMPILER"; then
8627         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8628     fi
8629     if test "$build_os" = "cygwin"; then
8630         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8631             JAVACOMPILER="${JAVACOMPILER}.exe"
8632         fi
8633         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8634     fi
8637 dnl ===================================================================
8638 dnl Checks for javadoc
8639 dnl ===================================================================
8640 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8641     if test -z "$with_jdk_home"; then
8642         AC_PATH_PROG(JAVADOC, javadoc)
8643     else
8644         _javadoc_path="$with_jdk_home/bin/javadoc"
8645         dnl Check if there is a javadoc at all.
8646         if test -x "$_javadoc_path"; then
8647             JAVADOC=$_javadoc_path
8648         else
8649             AC_PATH_PROG(JAVADOC, javadoc)
8650         fi
8651     fi
8652     if test -z "$JAVADOC"; then
8653         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8654     fi
8655     if test "$build_os" = "cygwin"; then
8656         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8657             JAVADOC="${JAVADOC}.exe"
8658         fi
8659         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8660     fi
8662     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8663     JAVADOCISGJDOC="yes"
8664     fi
8666 AC_SUBST(JAVADOC)
8667 AC_SUBST(JAVADOCISGJDOC)
8669 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8670     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8671     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8672         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8673            # try to recover first by looking whether we have an alternative
8674            # system as in Debian or newer SuSEs where following /usr/bin/javac
8675            # over /etc/alternatives/javac leads to the right bindir where we
8676            # just need to strip a bit away to get a valid JAVA_HOME
8677            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8678         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8679             # maybe only one level of symlink (e.g. on Mac)
8680             JAVA_HOME=$(readlink $JAVACOMPILER)
8681             if test "$(dirname $JAVA_HOME)" = "."; then
8682                 # we've got no path to trim back
8683                 JAVA_HOME=""
8684             fi
8685         else
8686             # else warn
8687             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8688             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8689             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8690             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8691         fi
8692         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8693         if test "$JAVA_HOME" != "/usr"; then
8694             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8695                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8696                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8697                 dnl Tiger already returns a JDK path...
8698                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8699             else
8700                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8701                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8702                 dnl that checks which version to run
8703                 if test -f "$JAVA_HOME"; then
8704                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8705                 fi
8706             fi
8707         fi
8708     fi
8709     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8711     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8712     if test -z "$JAVA_HOME"; then
8713         if test "x$with_jdk_home" = "x"; then
8714             cat > findhome.java <<_ACEOF
8715 [import java.io.File;
8717 class findhome
8719     public static void main(String args[])
8720     {
8721         String jrelocation = System.getProperty("java.home");
8722         File jre = new File(jrelocation);
8723         System.out.println(jre.getParent());
8724     }
8726 _ACEOF
8727             AC_MSG_CHECKING([if javac works])
8728             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8729             AC_TRY_EVAL(javac_cmd)
8730             if test $? = 0 -a -f ./findhome.class; then
8731                 AC_MSG_RESULT([javac works])
8732             else
8733                 echo "configure: javac test failed" >&5
8734                 cat findhome.java >&5
8735                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8736             fi
8737             AC_MSG_CHECKING([if gij knows its java.home])
8738             JAVA_HOME=`$JAVAINTERPRETER findhome`
8739             if test $? = 0 -a "$JAVA_HOME" != ""; then
8740                 AC_MSG_RESULT([$JAVA_HOME])
8741             else
8742                 echo "configure: java test failed" >&5
8743                 cat findhome.java >&5
8744                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8745             fi
8746             # clean-up after ourselves
8747             rm -f ./findhome.java ./findhome.class
8748         else
8749             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8750         fi
8751     fi
8753     # now check if $JAVA_HOME is really valid
8754     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8755         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8756             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8757             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8758             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
8759             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
8760             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
8761             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
8762         fi
8763     fi
8764     PathFormat "$JAVA_HOME"
8765     JAVA_HOME="$formatted_path"
8768 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
8769     "$_os" != Darwin
8770 then
8771     AC_MSG_CHECKING([for JAWT lib])
8772     if test "$_os" = WINNT; then
8773         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
8774         JAWTLIB=jawt.lib
8775     else
8776         case "$host_cpu" in
8777         arm*)
8778             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
8779             JAVA_ARCH=$my_java_arch
8780             ;;
8781         i*86)
8782             my_java_arch=i386
8783             ;;
8784         m68k)
8785             my_java_arch=m68k
8786             ;;
8787         powerpc)
8788             my_java_arch=ppc
8789             ;;
8790         powerpc64)
8791             my_java_arch=ppc64
8792             ;;
8793         powerpc64le)
8794             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
8795             JAVA_ARCH=$my_java_arch
8796             ;;
8797         sparc64)
8798             my_java_arch=sparcv9
8799             ;;
8800         x86_64)
8801             my_java_arch=amd64
8802             ;;
8803         *)
8804             my_java_arch=$host_cpu
8805             ;;
8806         esac
8807         # This is where JDK9 puts the library
8808         if test -e "$JAVA_HOME/lib/libjawt.so"; then
8809             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
8810         else
8811             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
8812         fi
8813         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
8814     fi
8815     AC_MSG_RESULT([$JAWTLIB])
8817 AC_SUBST(JAWTLIB)
8819 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
8820     case "$host_os" in
8822     aix*)
8823         JAVAINC="-I$JAVA_HOME/include"
8824         JAVAINC="$JAVAINC -I$JAVA_HOME/include/aix"
8825         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8826         ;;
8828     cygwin*|wsl*)
8829         JAVAINC="-I$JAVA_HOME/include/win32"
8830         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
8831         ;;
8833     darwin*)
8834         if test -d "$JAVA_HOME/include/darwin"; then
8835             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
8836         else
8837             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
8838         fi
8839         ;;
8841     dragonfly*)
8842         JAVAINC="-I$JAVA_HOME/include"
8843         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8844         ;;
8846     freebsd*)
8847         JAVAINC="-I$JAVA_HOME/include"
8848         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
8849         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
8850         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8851         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8852         ;;
8854     k*bsd*-gnu*)
8855         JAVAINC="-I$JAVA_HOME/include"
8856         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8857         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8858         ;;
8860     linux-gnu*)
8861         JAVAINC="-I$JAVA_HOME/include"
8862         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8863         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8864         ;;
8866     *netbsd*)
8867         JAVAINC="-I$JAVA_HOME/include"
8868         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
8869         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8870        ;;
8872     openbsd*)
8873         JAVAINC="-I$JAVA_HOME/include"
8874         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
8875         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8876         ;;
8878     solaris*)
8879         JAVAINC="-I$JAVA_HOME/include"
8880         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
8881         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8882         ;;
8883     esac
8885 SOLARINC="$SOLARINC $JAVAINC"
8887 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8888     JAVA_HOME_FOR_BUILD=$JAVA_HOME
8889     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
8890     JDK_FOR_BUILD=$JDK
8891     JDK_SECURITYMANAGER_DISALLOWED_FOR_BUILD=$JDK_SECURITYMANAGER_DISALLOWED
8894 AC_SUBST(JAVACFLAGS)
8895 AC_SUBST(JAVACOMPILER)
8896 AC_SUBST(JAVAINTERPRETER)
8897 AC_SUBST(JAVAIFLAGS)
8898 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
8899 AC_SUBST(JAVA_CLASSPATH_NOT_SET)
8900 AC_SUBST(JAVA_HOME)
8901 AC_SUBST(JAVA_HOME_FOR_BUILD)
8902 AC_SUBST(JDK)
8903 AC_SUBST(JDK_FOR_BUILD)
8904 AC_SUBST(JDK_SECURITYMANAGER_DISALLOWED_FOR_BUILD)
8905 AC_SUBST(JAVA_SOURCE_VER)
8906 AC_SUBST(JAVA_TARGET_VER)
8909 dnl ===================================================================
8910 dnl Export file validation
8911 dnl ===================================================================
8912 AC_MSG_CHECKING([whether to enable export file validation])
8913 if test "$with_export_validation" != "no"; then
8914     if test -z "$ENABLE_JAVA"; then
8915         if test "$with_export_validation" = "yes"; then
8916             AC_MSG_ERROR([requested, but Java is disabled])
8917         else
8918             AC_MSG_RESULT([no, as Java is disabled])
8919         fi
8920     elif ! test -d "${SRC_ROOT}/schema"; then
8921         if test "$with_export_validation" = "yes"; then
8922             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
8923         else
8924             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
8925         fi
8926     else
8927         AC_MSG_RESULT([yes])
8928         AC_DEFINE(HAVE_EXPORT_VALIDATION)
8930         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
8931         if test -z "$ODFVALIDATOR"; then
8932             # remember to download the ODF toolkit with validator later
8933             AC_MSG_NOTICE([no odfvalidator found, will download it])
8934             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
8935             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
8937             # and fetch name of odfvalidator jar name from download.lst
8938             ODFVALIDATOR_JAR=`$SED -n -e "s/export *ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8939             AC_SUBST(ODFVALIDATOR_JAR)
8941             if test -z "$ODFVALIDATOR_JAR"; then
8942                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
8943             fi
8944         fi
8945         if test "$build_os" = "cygwin"; then
8946             # In case of Cygwin it will be executed from Windows,
8947             # so we need to run bash and absolute path to validator
8948             # so instead of "odfvalidator" it will be
8949             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8950             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
8951         else
8952             ODFVALIDATOR="sh $ODFVALIDATOR"
8953         fi
8954         AC_SUBST(ODFVALIDATOR)
8957         AC_PATH_PROGS(OFFICEOTRON, officeotron)
8958         if test -z "$OFFICEOTRON"; then
8959             # remember to download the officeotron with validator later
8960             AC_MSG_NOTICE([no officeotron found, will download it])
8961             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
8962             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
8964             # and fetch name of officeotron jar name from download.lst
8965             OFFICEOTRON_JAR=`$SED -n -e "s/export *OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8966             AC_SUBST(OFFICEOTRON_JAR)
8968             if test -z "$OFFICEOTRON_JAR"; then
8969                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
8970             fi
8971         else
8972             # check version of existing officeotron
8973             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
8974             if test 0"$OFFICEOTRON_VER" -lt 704; then
8975                 AC_MSG_ERROR([officeotron too old])
8976             fi
8977         fi
8978         if test "$build_os" = "cygwin"; then
8979             # In case of Cygwin it will be executed from Windows,
8980             # so we need to run bash and absolute path to validator
8981             # so instead of "odfvalidator" it will be
8982             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8983             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
8984         else
8985             OFFICEOTRON="sh $OFFICEOTRON"
8986         fi
8987     fi
8988     AC_SUBST(OFFICEOTRON)
8989 else
8990     AC_MSG_RESULT([no])
8993 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
8994 if test "$with_bffvalidator" != "no"; then
8995     AC_DEFINE(HAVE_BFFVALIDATOR)
8997     if test "$with_export_validation" = "no"; then
8998         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
8999     fi
9001     if test "$with_bffvalidator" = "yes"; then
9002         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
9003     else
9004         BFFVALIDATOR="$with_bffvalidator"
9005     fi
9007     if test "$build_os" = "cygwin"; then
9008         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
9009             AC_MSG_RESULT($BFFVALIDATOR)
9010         else
9011             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
9012         fi
9013     elif test -n "$BFFVALIDATOR"; then
9014         # We are not in Cygwin but need to run Windows binary with wine
9015         AC_PATH_PROGS(WINE, wine)
9017         # so swap in a shell wrapper that converts paths transparently
9018         BFFVALIDATOR_EXE="$BFFVALIDATOR"
9019         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
9020         AC_SUBST(BFFVALIDATOR_EXE)
9021         AC_MSG_RESULT($BFFVALIDATOR)
9022     else
9023         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
9024     fi
9025     AC_SUBST(BFFVALIDATOR)
9026 else
9027     AC_MSG_RESULT([no])
9030 dnl ===================================================================
9031 dnl Check for C preprocessor to use
9032 dnl ===================================================================
9033 AC_MSG_CHECKING([which C preprocessor to use in idlc])
9034 SYSTEM_UCPP_IS_GCC=
9035 if test -n "$with_idlc_cpp"; then
9036     AC_MSG_RESULT([$with_idlc_cpp])
9037     AC_PATH_PROG(SYSTEM_UCPP, $with_idlc_cpp)
9038     AC_MSG_CHECKING([if $with_idlc_cpp is GCC CPP])
9039     # ucpp will accept -v (to output version), warn about the others as unknown
9040     # and return 1 (due to -v)
9041     # gcc will accept -v (as verbose), --version (to output version) and -nostdinc
9042     # and return 0 (due to --version ) if all options are supported
9043     $SYSTEM_UCPP -v --version -nostdinc >/dev/null 2>/dev/null
9044     if test $? -eq 0;  then
9045         SYSTEM_UCPP_IS_GCC=TRUE
9046         AC_MSG_RESULT([yes])
9047     else
9048         AC_MSG_RESULT([no])
9049     fi
9050 else
9051     AC_MSG_RESULT([ucpp])
9052     AC_MSG_CHECKING([which ucpp to use])
9053     if test -n "$with_system_ucpp" -a "$with_system_ucpp" != "no"; then
9054         AC_MSG_RESULT([external])
9055         AC_PATH_PROG(SYSTEM_UCPP, ucpp)
9056     else
9057         AC_MSG_RESULT([internal])
9058         BUILD_TYPE="$BUILD_TYPE UCPP"
9059     fi
9061 AC_SUBST(SYSTEM_UCPP)
9062 AC_SUBST(SYSTEM_UCPP_IS_GCC)
9064 dnl ===================================================================
9065 dnl Check for epm (not needed for Windows)
9066 dnl ===================================================================
9067 AC_MSG_CHECKING([whether to enable EPM for packing])
9068 if test "$enable_epm" = "yes"; then
9069     AC_MSG_RESULT([yes])
9070     if test "$_os" != "WINNT"; then
9071         if test $_os = Darwin; then
9072             EPM=internal
9073         elif test -n "$with_epm"; then
9074             EPM=$with_epm
9075         else
9076             AC_PATH_PROG(EPM, epm, no)
9077         fi
9078         if test "$EPM" = "no" -o "$EPM" = "internal"; then
9079             AC_MSG_NOTICE([EPM will be built.])
9080             BUILD_TYPE="$BUILD_TYPE EPM"
9081             EPM=${WORKDIR}/UnpackedTarball/epm/epm
9082         else
9083             # Gentoo has some epm which is something different...
9084             AC_MSG_CHECKING([whether the found epm is the right epm])
9085             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
9086                 AC_MSG_RESULT([yes])
9087             else
9088                 AC_MSG_ERROR([no. Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
9089             fi
9090             AC_MSG_CHECKING([epm version])
9091             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
9092             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
9093                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
9094                 AC_MSG_RESULT([OK, >= 3.7])
9095             else
9096                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
9097                 AC_MSG_ERROR([Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
9098             fi
9099         fi
9100     fi
9102     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
9103         AC_MSG_CHECKING([for rpm])
9104         for a in "$RPM" rpmbuild rpm; do
9105             $a --usage >/dev/null 2> /dev/null
9106             if test $? -eq 0; then
9107                 RPM=$a
9108                 break
9109             else
9110                 $a --version >/dev/null 2> /dev/null
9111                 if test $? -eq 0; then
9112                     RPM=$a
9113                     break
9114                 fi
9115             fi
9116         done
9117         if test -z "$RPM"; then
9118             AC_MSG_ERROR([not found])
9119         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
9120             RPM_PATH=`which $RPM`
9121             AC_MSG_RESULT([$RPM_PATH])
9122             SCPDEFS="$SCPDEFS -DWITH_RPM"
9123         else
9124             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
9125         fi
9126     fi
9127     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
9128         AC_PATH_PROG(DPKG, dpkg, no)
9129         if test "$DPKG" = "no"; then
9130             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
9131         fi
9132     fi
9133     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
9134        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9135         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
9136             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
9137                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
9138                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
9139                     AC_MSG_RESULT([yes])
9140                 else
9141                     AC_MSG_RESULT([no])
9142                     if echo "$PKGFORMAT" | $GREP -q rpm; then
9143                         _pt="rpm"
9144                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
9145                         add_warning "the rpms will need to be installed with --nodeps"
9146                     else
9147                         _pt="pkg"
9148                     fi
9149                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
9150                     add_warning "the ${_pt}s will not be relocatable"
9151                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
9152                                  relocation will work, you need to patch your epm with the
9153                                  patch in epm/epm-3.7.patch or build with
9154                                  --with-epm=internal which will build a suitable epm])
9155                 fi
9156             fi
9157         fi
9158     fi
9159     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9160         AC_PATH_PROG(PKGMK, pkgmk, no)
9161         if test "$PKGMK" = "no"; then
9162             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
9163         fi
9164     fi
9165     AC_SUBST(RPM)
9166     AC_SUBST(DPKG)
9167     AC_SUBST(PKGMK)
9168 else
9169     for i in $PKGFORMAT; do
9170         case "$i" in
9171         aix | bsd | deb | pkg | rpm | native | portable)
9172             AC_MSG_ERROR(
9173                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
9174             ;;
9175         esac
9176     done
9177     AC_MSG_RESULT([no])
9178     EPM=NO
9180 AC_SUBST(EPM)
9182 ENABLE_LWP=
9183 if test "$enable_lotuswordpro" = "yes"; then
9184     ENABLE_LWP="TRUE"
9186 AC_SUBST(ENABLE_LWP)
9188 dnl ===================================================================
9189 dnl Check for building ODK
9190 dnl ===================================================================
9191 AC_MSG_CHECKING([whether to build the ODK])
9192 if test "$enable_odk" = yes; then
9193     if test "$DISABLE_DYNLOADING" = TRUE; then
9194         AC_MSG_ERROR([can't build ODK for --disable-dynamic-loading builds])
9195     fi
9196     AC_MSG_RESULT([yes])
9197     BUILD_TYPE="$BUILD_TYPE ODK"
9198 else
9199     AC_MSG_RESULT([no])
9202 if test "$enable_odk" != yes; then
9203     unset DOXYGEN
9204 else
9205     if test "$with_doxygen" = no; then
9206         AC_MSG_CHECKING([for doxygen])
9207         unset DOXYGEN
9208         AC_MSG_RESULT([no])
9209     else
9210         if test "$with_doxygen" = yes; then
9211             AC_PATH_PROG([DOXYGEN], [doxygen])
9212             if test -z "$DOXYGEN"; then
9213                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
9214             fi
9215             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
9216                 if ! dot -V 2>/dev/null; then
9217                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
9218                 fi
9219             fi
9220         else
9221             AC_MSG_CHECKING([for doxygen])
9222             DOXYGEN=$with_doxygen
9223             AC_MSG_RESULT([$DOXYGEN])
9224         fi
9225         if test -n "$DOXYGEN"; then
9226             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
9227             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
9228             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
9229                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
9230             fi
9231         fi
9232     fi
9234 AC_SUBST([DOXYGEN])
9236 dnl ==================================================================
9237 dnl libfuzzer
9238 dnl ==================================================================
9239 AC_MSG_CHECKING([whether to enable fuzzers])
9240 if test "$enable_fuzzers" != yes; then
9241     AC_MSG_RESULT([no])
9242 else
9243     if test -z $LIB_FUZZING_ENGINE; then
9244       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
9245     fi
9246     AC_MSG_RESULT([yes])
9247     ENABLE_FUZZERS="TRUE"
9248     AC_DEFINE([ENABLE_FUZZERS],1)
9249     AC_DEFINE([VCL_FLOAT_DEVICE_PIXEL],1)
9250     BUILD_TYPE="$BUILD_TYPE FUZZERS"
9252 AC_SUBST(LIB_FUZZING_ENGINE)
9254 dnl ===================================================================
9255 dnl Check for system zlib
9256 dnl ===================================================================
9257 if test "$with_system_zlib" = "auto"; then
9258     case "$_os" in
9259     WINNT)
9260         with_system_zlib="$with_system_libs"
9261         ;;
9262     *)
9263         if test "$enable_fuzzers" != "yes"; then
9264             with_system_zlib=yes
9265         else
9266             with_system_zlib=no
9267         fi
9268         ;;
9269     esac
9272 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
9273 dnl and has no pkg-config for it at least on some tinderboxes,
9274 dnl so leaving that out for now
9275 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
9276 AC_MSG_CHECKING([which zlib to use])
9277 if test "$with_system_zlib" = "yes"; then
9278     AC_MSG_RESULT([external])
9279     SYSTEM_ZLIB=TRUE
9280     AC_CHECK_HEADER(zlib.h, [],
9281         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
9282     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
9283         [AC_MSG_ERROR(zlib not found or functional)], [])
9284 else
9285     AC_MSG_RESULT([internal])
9286     SYSTEM_ZLIB=
9287     BUILD_TYPE="$BUILD_TYPE ZLIB"
9288     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
9289     if test "$COM" = "MSC"; then
9290         ZLIB_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/zlib.lib"
9291     else
9292         ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
9293     fi
9295 AC_SUBST(ZLIB_CFLAGS)
9296 AC_SUBST(ZLIB_LIBS)
9297 AC_SUBST(SYSTEM_ZLIB)
9299 dnl ===================================================================
9300 dnl Check for system jpeg
9301 dnl ===================================================================
9302 AC_MSG_CHECKING([which libjpeg to use])
9303 if test "$with_system_jpeg" = "yes"; then
9304     AC_MSG_RESULT([external])
9305     SYSTEM_LIBJPEG=TRUE
9306     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
9307         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
9308     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
9309         [AC_MSG_ERROR(jpeg library not found or functional)], [])
9310 else
9311     SYSTEM_LIBJPEG=
9312     AC_MSG_RESULT([internal, libjpeg-turbo])
9313     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
9315     case "$host_cpu" in
9316     x86_64 | amd64 | i*86 | x86 | ia32)
9317         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
9318         if test -z "$NASM" -a "$build_os" = "cygwin"; then
9319             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
9320                 NASM="$LODE_HOME/opt/bin/nasm"
9321             elif test -x "/opt/lo/bin/nasm"; then
9322                 NASM="/opt/lo/bin/nasm"
9323             fi
9324         fi
9326         if test -n "$NASM"; then
9327             AC_MSG_CHECKING([for object file format of host system])
9328             case "$host_os" in
9329               cygwin* | mingw* | pw32* | wsl*)
9330                 case "$host_cpu" in
9331                   x86_64)
9332                     objfmt='Win64-COFF'
9333                     ;;
9334                   *)
9335                     objfmt='Win32-COFF'
9336                     ;;
9337                 esac
9338               ;;
9339               msdosdjgpp* | go32*)
9340                 objfmt='COFF'
9341               ;;
9342               os2-emx*) # not tested
9343                 objfmt='MSOMF' # obj
9344               ;;
9345               linux*coff* | linux*oldld*)
9346                 objfmt='COFF' # ???
9347               ;;
9348               linux*aout*)
9349                 objfmt='a.out'
9350               ;;
9351               linux*)
9352                 case "$host_cpu" in
9353                   x86_64)
9354                     objfmt='ELF64'
9355                     ;;
9356                   *)
9357                     objfmt='ELF'
9358                     ;;
9359                 esac
9360               ;;
9361               kfreebsd* | freebsd* | netbsd* | openbsd*)
9362                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9363                   objfmt='BSD-a.out'
9364                 else
9365                   case "$host_cpu" in
9366                     x86_64 | amd64)
9367                       objfmt='ELF64'
9368                       ;;
9369                     *)
9370                       objfmt='ELF'
9371                       ;;
9372                   esac
9373                 fi
9374               ;;
9375               solaris* | sunos* | sysv* | sco*)
9376                 case "$host_cpu" in
9377                   x86_64)
9378                     objfmt='ELF64'
9379                     ;;
9380                   *)
9381                     objfmt='ELF'
9382                     ;;
9383                 esac
9384               ;;
9385               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9386                 case "$host_cpu" in
9387                   x86_64)
9388                     objfmt='Mach-O64'
9389                     ;;
9390                   *)
9391                     objfmt='Mach-O'
9392                     ;;
9393                 esac
9394               ;;
9395               *)
9396                 objfmt='ELF ?'
9397               ;;
9398             esac
9400             AC_MSG_RESULT([$objfmt])
9401             if test "$objfmt" = 'ELF ?'; then
9402               objfmt='ELF'
9403               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9404             fi
9406             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9407             case "$objfmt" in
9408               MSOMF)      NAFLAGS='-fobj -DOBJ32 -DPIC';;
9409               Win32-COFF) NAFLAGS='-fwin32 -DWIN32 -DPIC';;
9410               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__ -DPIC';;
9411               COFF)       NAFLAGS='-fcoff -DCOFF -DPIC';;
9412               a.out)      NAFLAGS='-faout -DAOUT -DPIC';;
9413               BSD-a.out)  NAFLAGS='-faoutb -DAOUT -DPIC';;
9414               ELF)        NAFLAGS='-felf -DELF -DPIC';;
9415               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__ -DPIC';;
9416               RDF)        NAFLAGS='-frdf -DRDF -DPIC';;
9417               Mach-O)     NAFLAGS='-fmacho -DMACHO -DPIC';;
9418               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__ -DPIC';;
9419             esac
9420             AC_MSG_RESULT([$NAFLAGS])
9422             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9423             cat > conftest.asm << EOF
9424             [%line __oline__ "configure"
9425                     section .text
9426                     global  _main,main
9427             _main:
9428             main:   xor     eax,eax
9429                     ret
9430             ]
9432             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9433             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9434               AC_MSG_RESULT(yes)
9435             else
9436               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9437               cat conftest.asm >&AS_MESSAGE_LOG_FD
9438               rm -rf conftest*
9439               AC_MSG_RESULT(no)
9440               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9441               NASM=""
9442             fi
9444         fi
9446         if test -z "$NASM"; then
9447 cat << _EOS
9448 ****************************************************************************
9449 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9450 To get one please:
9452 _EOS
9453             if test "$build_os" = "cygwin"; then
9454 cat << _EOS
9455 install a pre-compiled binary for Win32
9457 mkdir -p /opt/lo/bin
9458 cd /opt/lo/bin
9459 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9460 chmod +x nasm
9462 or get and install one from http://www.nasm.us/
9464 Then re-run autogen.sh
9466 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9467 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`which nasm\` finds it.
9469 _EOS
9470             else
9471 cat << _EOS
9472 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md
9474 _EOS
9475             fi
9476             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9477             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9478         fi
9479       ;;
9480     esac
9483 AC_SUBST(NASM)
9484 AC_SUBST(NAFLAGS)
9485 AC_SUBST(LIBJPEG_CFLAGS)
9486 AC_SUBST(LIBJPEG_LIBS)
9487 AC_SUBST(SYSTEM_LIBJPEG)
9489 dnl ===================================================================
9490 dnl Check for system clucene
9491 dnl ===================================================================
9492 libo_CHECK_SYSTEM_MODULE([clucene],[CLUCENE],[libclucene-core])
9493 if test "$SYSTEM_CLUCENE" = TRUE; then
9494     AC_LANG_PUSH([C++])
9495     save_CXXFLAGS=$CXXFLAGS
9496     save_CPPFLAGS=$CPPFLAGS
9497     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9498     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9499     dnl http://sourceforge.net/tracker/index.php?func=detail&aid=3392466&group_id=80013&atid=558446
9500     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9501     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9502                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9503     CXXFLAGS=$save_CXXFLAGS
9504     CPPFLAGS=$save_CPPFLAGS
9505     AC_LANG_POP([C++])
9506     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9509 dnl ===================================================================
9510 dnl Check for system expat
9511 dnl ===================================================================
9512 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9514 dnl ===================================================================
9515 dnl Check for system xmlsec
9516 dnl ===================================================================
9517 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.28])
9519 libo_CHECK_SYSTEM_MODULE([eot],[LIBEOT],[libeot >= 0.01],disabled)
9521 dnl ===================================================================
9522 dnl Check for DLP libs
9523 dnl ===================================================================
9524 REVENGE_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/librevenge/inc"
9525 AS_IF([test "$COM" = "MSC"],
9526       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9527       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9529 REVENGE_LIBS_internal="-L${librevenge_libdir} -lrevenge-0.0"
9530 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1])
9532 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9534 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9536 WPD_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/libwpd/inc"
9537 AS_IF([test "$COM" = "MSC"],
9538       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9539       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9541 WPD_LIBS_internal="-L${libwpd_libdir} -lwpd-0.10"
9542 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10])
9544 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9546 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9547 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.12])
9549 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9551 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9553 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9555 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.21])
9556 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.21])
9558 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9559 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10])
9561 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9563 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9564 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9566 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9568 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9570 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9572 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9574 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9575 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9577 dnl ===================================================================
9578 dnl Check for system lcms2
9579 dnl ===================================================================
9580 if test "$with_system_lcms2" != "yes"; then
9581     SYSTEM_LCMS2=
9583 LCMS2_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/lcms2/include"
9584 LCMS2_LIBS_internal="-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"
9585 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2])
9586 if test "$GCC" = "yes"; then
9587     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9589 if test "$COM" = "MSC"; then # override the above
9590     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9593 dnl ===================================================================
9594 dnl Check for system cppunit
9595 dnl ===================================================================
9596 if test "$_os" != "Android" ; then
9597     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9600 dnl ===================================================================
9601 dnl Check whether freetype is available
9603 dnl FreeType has 3 different kinds of versions
9604 dnl * release, like 2.4.10
9605 dnl * libtool, like 13.0.7 (this what pkg-config returns)
9606 dnl * soname
9607 dnl FreeType's docs/VERSION.DLL provides a table mapping between the three
9609 dnl 9.9.3 is 2.2.0
9610 dnl When the minimal version is at least 2.8.1, remove Skia's check down below.
9611 dnl ===================================================================
9612 FREETYPE_CFLAGS_internal="${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"
9613 if test "x$ac_config_site_64bit_host" = xYES; then
9614     FREETYPE_LIBS_internal="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9615 else
9616     FREETYPE_LIBS_internal="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9618 libo_CHECK_SYSTEM_MODULE([freetype],[FREETYPE],[freetype2 >= 9.9.3],,system,TRUE)
9620 # ===================================================================
9621 # Check for system libxslt
9622 # to prevent incompatibilities between internal libxml2 and external libxslt,
9623 # or vice versa, use with_system_libxml here
9624 # ===================================================================
9625 if test "$with_system_libxml" = "auto"; then
9626     case "$_os" in
9627     WINNT|iOS|Android)
9628         with_system_libxml="$with_system_libs"
9629         ;;
9630     Emscripten)
9631         with_system_libxml=no
9632         ;;
9633     *)
9634         if test "$enable_fuzzers" != "yes"; then
9635             with_system_libxml=yes
9636         else
9637             with_system_libxml=no
9638         fi
9639         ;;
9640     esac
9643 AC_MSG_CHECKING([which libxslt to use])
9644 if test "$with_system_libxml" = "yes"; then
9645     AC_MSG_RESULT([external])
9646     SYSTEM_LIBXSLT=TRUE
9647     if test "$_os" = "Darwin"; then
9648         dnl make sure to use SDK path
9649         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9650         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9651         dnl omit -L/usr/lib
9652         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9653         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9654     else
9655         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9656         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9657         FilterLibs "${LIBXSLT_LIBS}"
9658         LIBXSLT_LIBS="${filteredlibs}"
9659         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9660         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9661         FilterLibs "${LIBEXSLT_LIBS}"
9662         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9663     fi
9665     dnl Check for xsltproc
9666     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9667     if test "$XSLTPROC" = "no"; then
9668         AC_MSG_ERROR([xsltproc is required])
9669     fi
9670 else
9671     AC_MSG_RESULT([internal])
9672     SYSTEM_LIBXSLT=
9673     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9675 AC_SUBST(SYSTEM_LIBXSLT)
9676 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9677     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9679 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9681 AC_SUBST(LIBEXSLT_CFLAGS)
9682 AC_SUBST(LIBEXSLT_LIBS)
9683 AC_SUBST(LIBXSLT_CFLAGS)
9684 AC_SUBST(LIBXSLT_LIBS)
9685 AC_SUBST(XSLTPROC)
9687 # ===================================================================
9688 # Check for system libxml
9689 # ===================================================================
9690 AC_MSG_CHECKING([which libxml to use])
9691 if test "$with_system_libxml" = "yes"; then
9692     AC_MSG_RESULT([external])
9693     SYSTEM_LIBXML=TRUE
9694     if test "$_os" = "Darwin"; then
9695         dnl make sure to use SDK path
9696         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9697         dnl omit -L/usr/lib
9698         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9699     elif test $_os = iOS; then
9700         dnl make sure to use SDK path
9701         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9702         LIBXML_CFLAGS="-I$usr/include/libxml2"
9703         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9704     else
9705         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9706         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9707         FilterLibs "${LIBXML_LIBS}"
9708         LIBXML_LIBS="${filteredlibs}"
9709     fi
9711     dnl Check for xmllint
9712     AC_PATH_PROG(XMLLINT, xmllint, no)
9713     if test "$XMLLINT" = "no"; then
9714         AC_MSG_ERROR([xmllint is required])
9715     fi
9716 else
9717     AC_MSG_RESULT([internal])
9718     SYSTEM_LIBXML=
9719     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9720     if test "$COM" = "MSC"; then
9721         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9722     fi
9723     if test "$COM" = "MSC"; then
9724         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9725     else
9726         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9727         if test "$DISABLE_DYNLOADING" = TRUE; then
9728             LIBXML_LIBS="$LIBXML_LIBS -lm"
9729         fi
9730     fi
9731     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9733 AC_SUBST(SYSTEM_LIBXML)
9734 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9735     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9737 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9738 AC_SUBST(LIBXML_CFLAGS)
9739 AC_SUBST(LIBXML_LIBS)
9740 AC_SUBST(XMLLINT)
9742 # =====================================================================
9743 # Checking for a Python interpreter with version >= 3.3.
9744 # Optionally user can pass an option to configure, i. e.
9745 # ./configure PYTHON=/usr/bin/python
9746 # =====================================================================
9747 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9748     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9749     # unless PYTHON is defined as above which allows 'system'
9750     enable_python=internal
9752 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9753     if test -n "$PYTHON"; then
9754         PYTHON_FOR_BUILD=$PYTHON
9755     else
9756         # This allows a lack of system python with no error, we use internal one in that case.
9757         AM_PATH_PYTHON([3.3],, [:])
9758         # Clean PYTHON_VERSION checked below if cross-compiling
9759         PYTHON_VERSION=""
9760         if test "$PYTHON" != ":"; then
9761             PYTHON_FOR_BUILD=$PYTHON
9762         fi
9763     fi
9766 # Checks for Python to use for Pyuno
9767 AC_MSG_CHECKING([which Python to use for Pyuno])
9768 case "$enable_python" in
9769 no|disable)
9770     if test -z "$PYTHON_FOR_BUILD" -a "$cross_compiling" != yes; then
9771         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9772         # requirement from the choice whether to include Python stuff in the installer, but why
9773         # bother?
9774         AC_MSG_ERROR([Python is required at build time.])
9775     fi
9776     enable_python=no
9777     AC_MSG_RESULT([none])
9778     ;;
9779 ""|yes|auto)
9780     if test "$DISABLE_SCRIPTING" = TRUE; then
9781         if test -z "$PYTHON_FOR_BUILD" -a "$cross_compiling" != yes; then
9782             AC_MSG_ERROR([Python support can't be disabled without cross-compiling or a system python.])
9783         fi
9784         AC_MSG_RESULT([none, overridden by --disable-scripting])
9785         enable_python=no
9786     elif test $build_os = cygwin; then
9787         dnl When building on Windows we don't attempt to use any installed
9788         dnl "system"  Python.
9789         AC_MSG_RESULT([fully internal])
9790         enable_python=internal
9791     elif test "$cross_compiling" = yes; then
9792         AC_MSG_RESULT([system])
9793         enable_python=system
9794     else
9795         # Unset variables set by the above AM_PATH_PYTHON so that
9796         # we actually do check anew.
9797         AC_MSG_RESULT([])
9798         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
9799         AM_PATH_PYTHON([3.3],, [:])
9800         AC_MSG_CHECKING([which Python to use for Pyuno])
9801         if test "$PYTHON" = ":"; then
9802             if test -z "$PYTHON_FOR_BUILD"; then
9803                 AC_MSG_RESULT([fully internal])
9804             else
9805                 AC_MSG_RESULT([internal])
9806             fi
9807             enable_python=internal
9808         else
9809             AC_MSG_RESULT([system])
9810             enable_python=system
9811         fi
9812     fi
9813     ;;
9814 internal)
9815     AC_MSG_RESULT([internal])
9816     ;;
9817 fully-internal)
9818     AC_MSG_RESULT([fully internal])
9819     enable_python=internal
9820     ;;
9821 system)
9822     AC_MSG_RESULT([system])
9823     if test "$_os" = Darwin -a -z "$PYTHON"; then
9824         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
9825     fi
9826     ;;
9828     AC_MSG_ERROR([Incorrect --enable-python option])
9829     ;;
9830 esac
9832 if test $enable_python != no; then
9833     BUILD_TYPE="$BUILD_TYPE PYUNO"
9836 if test $enable_python = system; then
9837     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
9838         # Fallback: Accept these in the environment, or as set above
9839         # for MacOSX.
9840         :
9841     elif test "$cross_compiling" != yes; then
9842         # Unset variables set by the above AM_PATH_PYTHON so that
9843         # we actually do check anew.
9844         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
9845         # This causes an error if no python command is found
9846         AM_PATH_PYTHON([3.3])
9847         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
9848         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
9849         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
9850         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
9851         if test -z "$PKG_CONFIG"; then
9852             PYTHON_CFLAGS="-I$python_include"
9853             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9854         elif $PKG_CONFIG --exists python-$python_version-embed; then
9855             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
9856             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
9857         elif $PKG_CONFIG --exists python-$python_version; then
9858             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
9859             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
9860         else
9861             PYTHON_CFLAGS="-I$python_include"
9862             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9863         fi
9864         FilterLibs "${PYTHON_LIBS}"
9865         PYTHON_LIBS="${filteredlibs}"
9866     else
9867         dnl How to find out the cross-compilation Python installation path?
9868         AC_MSG_CHECKING([for python version])
9869         AS_IF([test -n "$PYTHON_VERSION"],
9870               [AC_MSG_RESULT([$PYTHON_VERSION])],
9871               [AC_MSG_RESULT([not found])
9872                AC_MSG_ERROR([no usable python found])])
9873         test -n "$PYTHON_CFLAGS" && break
9874     fi
9876     dnl Check if the headers really work
9877     save_CPPFLAGS="$CPPFLAGS"
9878     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
9879     AC_CHECK_HEADER(Python.h)
9880     CPPFLAGS="$save_CPPFLAGS"
9882     # let the PYTHON_FOR_BUILD match the same python installation that
9883     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
9884     # better for PythonTests.
9885     PYTHON_FOR_BUILD=$PYTHON
9888 if test "$with_lxml" != no; then
9889     if test -z "$PYTHON_FOR_BUILD"; then
9890         case $build_os in
9891             cygwin)
9892                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
9893                 ;;
9894             *)
9895                 if test "$cross_compiling" != yes ; then
9896                     BUILD_TYPE="$BUILD_TYPE LXML"
9897                 fi
9898                 ;;
9899         esac
9900     else
9901         AC_MSG_CHECKING([for python lxml])
9902         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
9903             AC_MSG_RESULT([yes])
9904         else
9905             case $build_os in
9906                 cygwin)
9907                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
9908                     ;;
9909                 *)
9910                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
9911                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
9912                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
9913                         else
9914                             BUILD_TYPE="$BUILD_TYPE LXML"
9915                             AC_MSG_RESULT([no, using internal lxml])
9916                         fi
9917                     else
9918                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
9919                     fi
9920                     ;;
9921             esac
9922         fi
9923     fi
9926 if test \( "$cross_compiling" = yes -a -z "$PYTHON_FOR_BUILD" \) -o "$enable_python" = internal; then
9927     SYSTEM_PYTHON=
9928     PYTHON_VERSION_MAJOR=3
9929     PYTHON_VERSION_MINOR=8
9930     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.12
9931     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
9932         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
9933     fi
9934     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
9936     # Embedded Python dies without Home set
9937     if test "$HOME" = ""; then
9938         export HOME=""
9939     fi
9942 dnl By now enable_python should be "system", "internal" or "no"
9943 case $enable_python in
9944 system)
9945     SYSTEM_PYTHON=TRUE
9947     if test "x$ac_cv_header_Python_h" != "xyes"; then
9948        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
9949     fi
9951     AC_LANG_PUSH(C)
9952     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
9953     AC_MSG_CHECKING([for correct python library version])
9954        AC_RUN_IFELSE([AC_LANG_SOURCE([[
9955 #include <Python.h>
9957 int main(int argc, char **argv) {
9958    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
9959    else return 1;
9961        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
9962     AC_LANG_POP(C)
9964     dnl FIXME Check if the Python library can be linked with, too?
9965     ;;
9967 internal)
9968     BUILD_TYPE="$BUILD_TYPE PYTHON"
9969     if test "$OS" = LINUX -o "$OS" = WNT ; then
9970         BUILD_TYPE="$BUILD_TYPE LIBFFI"
9971     fi
9972     ;;
9974     DISABLE_PYTHON=TRUE
9975     SYSTEM_PYTHON=
9976     ;;
9978     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
9979     ;;
9980 esac
9982 AC_SUBST(DISABLE_PYTHON)
9983 AC_SUBST(SYSTEM_PYTHON)
9984 AC_SUBST(PYTHON_CFLAGS)
9985 AC_SUBST(PYTHON_FOR_BUILD)
9986 AC_SUBST(PYTHON_LIBS)
9987 AC_SUBST(PYTHON_VERSION)
9988 AC_SUBST(PYTHON_VERSION_MAJOR)
9989 AC_SUBST(PYTHON_VERSION_MINOR)
9991 AC_MSG_CHECKING([whether to build LibreLogo])
9992 case "$enable_python" in
9993 no|disable)
9994     AC_MSG_RESULT([no; Python disabled])
9995     ;;
9997     if test "${enable_librelogo}" = "no"; then
9998         AC_MSG_RESULT([no])
9999     else
10000         AC_MSG_RESULT([yes])
10001         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
10002         AC_DEFINE([ENABLE_LIBRELOGO],1)
10003     fi
10004     ;;
10005 esac
10006 AC_SUBST(ENABLE_LIBRELOGO)
10008 ENABLE_MARIADBC=
10009 MARIADBC_MAJOR=1
10010 MARIADBC_MINOR=0
10011 MARIADBC_MICRO=2
10012 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
10013 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
10014     ENABLE_MARIADBC=TRUE
10015     AC_MSG_RESULT([yes])
10016     BUILD_TYPE="$BUILD_TYPE MARIADBC"
10017 else
10018     AC_MSG_RESULT([no])
10020 AC_SUBST(ENABLE_MARIADBC)
10021 AC_SUBST(MARIADBC_MAJOR)
10022 AC_SUBST(MARIADBC_MINOR)
10023 AC_SUBST(MARIADBC_MICRO)
10025 if test "$ENABLE_MARIADBC" = "TRUE"; then
10026     dnl ===================================================================
10027     dnl Check for system MariaDB
10028     dnl ===================================================================
10029     AC_MSG_CHECKING([which MariaDB to use])
10030     if test "$with_system_mariadb" = "yes"; then
10031         AC_MSG_RESULT([external])
10032         SYSTEM_MARIADB_CONNECTOR_C=TRUE
10033         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
10034         if test -z "$MARIADBCONFIG"; then
10035             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
10036             if test -z "$MARIADBCONFIG"; then
10037                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
10038                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
10039             fi
10040         fi
10041         AC_MSG_CHECKING([MariaDB version])
10042         MARIADB_VERSION=`$MARIADBCONFIG --version`
10043         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
10044         if test "$MARIADB_MAJOR" -ge "5"; then
10045             AC_MSG_RESULT([OK])
10046         else
10047             AC_MSG_ERROR([too old, use 5.0.x or later])
10048         fi
10049         AC_MSG_CHECKING([for MariaDB Client library])
10050         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
10051         if test "$COM_IS_CLANG" = TRUE; then
10052             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
10053         fi
10054         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
10055         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
10056         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
10057         dnl linux32:
10058         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
10059             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
10060             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
10061                 | sed -e 's|/lib64/|/lib/|')
10062         fi
10063         FilterLibs "${MARIADB_LIBS}"
10064         MARIADB_LIBS="${filteredlibs}"
10065         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
10066         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
10067         if test "$enable_bundle_mariadb" = "yes"; then
10068             AC_MSG_RESULT([yes])
10069             BUNDLE_MARIADB_CONNECTOR_C=TRUE
10070             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
10072 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
10074 /g' | grep -E '(mysqlclient|mariadb)')
10075             if test "$_os" = "Darwin"; then
10076                 LIBMARIADB=${LIBMARIADB}.dylib
10077             elif test "$_os" = "WINNT"; then
10078                 LIBMARIADB=${LIBMARIADB}.dll
10079             else
10080                 LIBMARIADB=${LIBMARIADB}.so
10081             fi
10082             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
10083             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
10084             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
10085                 AC_MSG_RESULT([found.])
10086                 PathFormat "$LIBMARIADB_PATH"
10087                 LIBMARIADB_PATH="$formatted_path"
10088             else
10089                 AC_MSG_ERROR([not found.])
10090             fi
10091         else
10092             AC_MSG_RESULT([no])
10093             BUNDLE_MARIADB_CONNECTOR_C=
10094         fi
10095     else
10096         AC_MSG_RESULT([internal])
10097         SYSTEM_MARIADB_CONNECTOR_C=
10098         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
10099         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
10100         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
10101     fi
10103     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
10104     AC_SUBST(MARIADB_CFLAGS)
10105     AC_SUBST(MARIADB_LIBS)
10106     AC_SUBST(LIBMARIADB)
10107     AC_SUBST(LIBMARIADB_PATH)
10108     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
10111 dnl ===================================================================
10112 dnl Check for system hsqldb
10113 dnl ===================================================================
10114 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
10115     AC_MSG_CHECKING([which hsqldb to use])
10116     if test "$with_system_hsqldb" = "yes"; then
10117         AC_MSG_RESULT([external])
10118         SYSTEM_HSQLDB=TRUE
10119         if test -z $HSQLDB_JAR; then
10120             HSQLDB_JAR=/usr/share/java/hsqldb.jar
10121         fi
10122         if ! test -f $HSQLDB_JAR; then
10123                AC_MSG_ERROR(hsqldb.jar not found.)
10124         fi
10125         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
10126         export HSQLDB_JAR
10127         if $PERL -e \
10128            'use Archive::Zip;
10129             my $file = "$ENV{'HSQLDB_JAR'}";
10130             my $zip = Archive::Zip->new( $file );
10131             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
10132             if ( $mf =~ m/Specification-Version: 1.8.*/ )
10133             {
10134                 push @l, split(/\n/, $mf);
10135                 foreach my $line (@l)
10136                 {
10137                     if ($line =~ m/Specification-Version:/)
10138                     {
10139                         ($t, $version) = split (/:/,$line);
10140                         $version =~ s/^\s//;
10141                         ($a, $b, $c, $d) = split (/\./,$version);
10142                         if ($c == "0" && $d > "8")
10143                         {
10144                             exit 0;
10145                         }
10146                         else
10147                         {
10148                             exit 1;
10149                         }
10150                     }
10151                 }
10152             }
10153             else
10154             {
10155                 exit 1;
10156             }'; then
10157             AC_MSG_RESULT([yes])
10158         else
10159             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
10160         fi
10161     else
10162         AC_MSG_RESULT([internal])
10163         SYSTEM_HSQLDB=
10164         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10165         NEED_ANT=TRUE
10166     fi
10167 else
10168     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
10169         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10170     fi
10172 AC_SUBST(SYSTEM_HSQLDB)
10173 AC_SUBST(HSQLDB_JAR)
10175 dnl ===================================================================
10176 dnl Check for PostgreSQL stuff
10177 dnl ===================================================================
10178 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
10179 if test "x$enable_postgresql_sdbc" != "xno"; then
10180     AC_MSG_RESULT([yes])
10181     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
10183     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
10184         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
10185     fi
10186     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
10187         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
10188     fi
10190     postgres_interface=""
10191     if test "$with_system_postgresql" = "yes"; then
10192         postgres_interface="external PostgreSQL"
10193         SYSTEM_POSTGRESQL=TRUE
10194         if test "$_os" = Darwin; then
10195             supp_path=''
10196             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
10197                 pg_supp_path="$P_SEP$d$pg_supp_path"
10198             done
10199         fi
10200         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
10201         if test -n "$PGCONFIG"; then
10202             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
10203             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
10204         else
10205             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
10206               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
10207               POSTGRESQL_LIB=$POSTGRESQL_LIBS
10208             ],[
10209               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
10210             ])
10211         fi
10212         FilterLibs "${POSTGRESQL_LIB}"
10213         POSTGRESQL_LIB="${filteredlibs}"
10214     else
10215         # if/when anything else than PostgreSQL uses Kerberos,
10216         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
10217         WITH_KRB5=
10218         WITH_GSSAPI=
10219         case "$_os" in
10220         Darwin)
10221             # macOS has system MIT Kerberos 5 since 10.4
10222             if test "$with_krb5" != "no"; then
10223                 WITH_KRB5=TRUE
10224                 save_LIBS=$LIBS
10225                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
10226                 # that the libraries where these functions are located on macOS will change, is it?
10227                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10228                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10229                 KRB5_LIBS=$LIBS
10230                 LIBS=$save_LIBS
10231                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10232                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10233                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10234                 LIBS=$save_LIBS
10235             fi
10236             if test "$with_gssapi" != "no"; then
10237                 WITH_GSSAPI=TRUE
10238                 save_LIBS=$LIBS
10239                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10240                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10241                 GSSAPI_LIBS=$LIBS
10242                 LIBS=$save_LIBS
10243             fi
10244             ;;
10245         WINNT)
10246             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
10247                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
10248             fi
10249             ;;
10250         Linux|GNU|*BSD|DragonFly)
10251             if test "$with_krb5" != "no"; then
10252                 WITH_KRB5=TRUE
10253                 save_LIBS=$LIBS
10254                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10255                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10256                 KRB5_LIBS=$LIBS
10257                 LIBS=$save_LIBS
10258                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10259                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10260                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10261                 LIBS=$save_LIBS
10262             fi
10263             if test "$with_gssapi" != "no"; then
10264                 WITH_GSSAPI=TRUE
10265                 save_LIBS=$LIBS
10266                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10267                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10268                 GSSAPI_LIBS=$LIBS
10269                 LIBS=$save_LIBS
10270             fi
10271             ;;
10272         *)
10273             if test "$with_krb5" = "yes"; then
10274                 WITH_KRB5=TRUE
10275                 save_LIBS=$LIBS
10276                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10277                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10278                 KRB5_LIBS=$LIBS
10279                 LIBS=$save_LIBS
10280                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10281                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10282                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10283                 LIBS=$save_LIBS
10284             fi
10285             if test "$with_gssapi" = "yes"; then
10286                 WITH_GSSAPI=TRUE
10287                 save_LIBS=$LIBS
10288                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10289                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10290                 LIBS=$save_LIBS
10291                 GSSAPI_LIBS=$LIBS
10292             fi
10293         esac
10295         if test -n "$with_libpq_path"; then
10296             SYSTEM_POSTGRESQL=TRUE
10297             postgres_interface="external libpq"
10298             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
10299             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
10300         else
10301             SYSTEM_POSTGRESQL=
10302             postgres_interface="internal"
10303             POSTGRESQL_LIB=""
10304             POSTGRESQL_INC="%OVERRIDE_ME%"
10305             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10306         fi
10307     fi
10309     AC_MSG_CHECKING([PostgreSQL C interface])
10310     AC_MSG_RESULT([$postgres_interface])
10312     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10313         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10314         save_CFLAGS=$CFLAGS
10315         save_CPPFLAGS=$CPPFLAGS
10316         save_LIBS=$LIBS
10317         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10318         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10319         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10320         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10321             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10322         CFLAGS=$save_CFLAGS
10323         CPPFLAGS=$save_CPPFLAGS
10324         LIBS=$save_LIBS
10325     fi
10326     BUILD_POSTGRESQL_SDBC=TRUE
10327 else
10328     AC_MSG_RESULT([no])
10330 AC_SUBST(WITH_KRB5)
10331 AC_SUBST(WITH_GSSAPI)
10332 AC_SUBST(GSSAPI_LIBS)
10333 AC_SUBST(KRB5_LIBS)
10334 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10335 AC_SUBST(SYSTEM_POSTGRESQL)
10336 AC_SUBST(POSTGRESQL_INC)
10337 AC_SUBST(POSTGRESQL_LIB)
10339 dnl ===================================================================
10340 dnl Check for Firebird stuff
10341 dnl ===================================================================
10342 ENABLE_FIREBIRD_SDBC=
10343 if test "$enable_firebird_sdbc" = "yes" ; then
10344     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10346     dnl ===================================================================
10347     dnl Check for system Firebird
10348     dnl ===================================================================
10349     AC_MSG_CHECKING([which Firebird to use])
10350     if test "$with_system_firebird" = "yes"; then
10351         AC_MSG_RESULT([external])
10352         SYSTEM_FIREBIRD=TRUE
10353         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10354         if test -z "$FIREBIRDCONFIG"; then
10355             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10356             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10357                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10358             ])
10359             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10360         else
10361             AC_MSG_NOTICE([fb_config found])
10362             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10363             AC_MSG_CHECKING([for Firebird Client library])
10364             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10365             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10366             FilterLibs "${FIREBIRD_LIBS}"
10367             FIREBIRD_LIBS="${filteredlibs}"
10368         fi
10369         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10370         AC_MSG_CHECKING([Firebird version])
10371         if test -n "${FIREBIRD_VERSION}"; then
10372             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10373             if test "$FIREBIRD_MAJOR" -ge "3"; then
10374                 AC_MSG_RESULT([OK])
10375             else
10376                 AC_MSG_ERROR([Ensure firebird >= 3 is installed])
10377             fi
10378         else
10379             save_CFLAGS="${CFLAGS}"
10380             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10381             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10382 #if defined(FB_API_VER) && FB_API_VER == 30
10383 int fb_api_is_30(void) { return 0; }
10384 #else
10385 #error "Wrong Firebird API version"
10386 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10387             CFLAGS="$save_CFLAGS"
10388         fi
10389         ENABLE_FIREBIRD_SDBC=TRUE
10390         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10391     elif test "$enable_database_connectivity" = no; then
10392         AC_MSG_RESULT([none])
10393     elif test "$cross_compiling" = "yes"; then
10394         AC_MSG_RESULT([none])
10395     else
10396         dnl Embedded Firebird has version 3.0
10397         dnl We need libatomic_ops for any non X86/X64 system
10398         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10399             dnl ===================================================================
10400             dnl Check for system libatomic_ops
10401             dnl ===================================================================
10402             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10403             if test "$with_system_libatomic_ops" = "yes"; then
10404                 SYSTEM_LIBATOMIC_OPS=TRUE
10405                 AC_CHECK_HEADERS(atomic_ops.h, [],
10406                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10407             else
10408                 SYSTEM_LIBATOMIC_OPS=
10409                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10410                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10411                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10412             fi
10413         fi
10415         AC_MSG_RESULT([internal])
10416         SYSTEM_FIREBIRD=
10417         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10418         FIREBIRD_LIBS="-lfbclient"
10420         if test "$with_system_libtommath" = "yes"; then
10421             SYSTEM_LIBTOMMATH=TRUE
10422             dnl check for tommath presence
10423             save_LIBS=$LIBS
10424             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10425             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10426             LIBS=$save_LIBS
10427         else
10428             SYSTEM_LIBTOMMATH=
10429             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10430             LIBTOMMATH_LIBS="-ltommath"
10431             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10432         fi
10434         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10435         ENABLE_FIREBIRD_SDBC=TRUE
10436         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10437     fi
10439 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10440 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10441 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10442 AC_SUBST(LIBATOMIC_OPS_LIBS)
10443 AC_SUBST(SYSTEM_FIREBIRD)
10444 AC_SUBST(FIREBIRD_CFLAGS)
10445 AC_SUBST(FIREBIRD_LIBS)
10446 AC_SUBST(SYSTEM_LIBTOMMATH)
10447 AC_SUBST(LIBTOMMATH_CFLAGS)
10448 AC_SUBST(LIBTOMMATH_LIBS)
10450 dnl ===================================================================
10451 dnl Check for system curl
10452 dnl ===================================================================
10453 libo_CHECK_SYSTEM_MODULE([curl],[CURL],[libcurl >= 7.68.0],enabled)
10455 dnl ===================================================================
10456 dnl Check for system boost
10457 dnl ===================================================================
10458 AC_MSG_CHECKING([which boost to use])
10459 if test "$with_system_boost" = "yes"; then
10460     AC_MSG_RESULT([external])
10461     SYSTEM_BOOST=TRUE
10462     AX_BOOST_BASE([1.66],,[AC_MSG_ERROR([no suitable Boost found])])
10463     AX_BOOST_DATE_TIME
10464     AX_BOOST_FILESYSTEM
10465     AX_BOOST_IOSTREAMS
10466     AX_BOOST_LOCALE
10467     AC_LANG_PUSH([C++])
10468     save_CXXFLAGS=$CXXFLAGS
10469     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10470     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10471        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10472     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10473        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10474     CXXFLAGS=$save_CXXFLAGS
10475     AC_LANG_POP([C++])
10476     # this is in m4/ax_boost_base.m4
10477     FilterLibs "${BOOST_LDFLAGS}"
10478     BOOST_LDFLAGS="${filteredlibs}"
10479 else
10480     AC_MSG_RESULT([internal])
10481     BUILD_TYPE="$BUILD_TYPE BOOST"
10482     SYSTEM_BOOST=
10483     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10484         # use warning-suppressing wrapper headers
10485         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10486     else
10487         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10488     fi
10490 AC_SUBST(SYSTEM_BOOST)
10492 dnl ===================================================================
10493 dnl Check for system mdds
10494 dnl ===================================================================
10495 MDDS_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/mdds/include"
10496 libo_CHECK_SYSTEM_MODULE([mdds],[MDDS],[mdds-2.0 >= 2.0.0])
10498 dnl ===================================================================
10499 dnl Check for system cuckoo
10500 dnl ===================================================================
10501 AC_MSG_CHECKING([which cuckoo to use])
10502 if test "$with_system_cuckoo" = "yes"; then
10503     AC_MSG_RESULT([external])
10504     SYSTEM_CUCKOO=TRUE
10505     AC_LANG_PUSH([C++])
10506     AC_CHECK_HEADER([libcuckoo/cuckoohash_map.hh], [],
10507        [AC_MSG_ERROR([libcuckoo/cuckoohash_map.hh not found. install cuckoo])], [])
10508     AC_LANG_POP([C++])
10509 else
10510     AC_MSG_RESULT([internal])
10511     BUILD_TYPE="$BUILD_TYPE CUCKOO"
10512     SYSTEM_CUCKOO=
10514 AC_SUBST([SYSTEM_CUCKOO])
10516 dnl ===================================================================
10517 dnl Check for system dragonbox
10518 dnl ===================================================================
10519 AC_MSG_CHECKING([which dragonbox to use])
10520 if test "$with_system_dragonbox" = "yes"; then
10521     AC_MSG_RESULT([external])
10522     SYSTEM_DRAGONBOX=TRUE
10523     AC_LANG_PUSH([C++])
10524     save_CPPFLAGS=$CPPFLAGS
10525     # This is where upstream installs to, unfortunately no .pc or so...
10526     DRAGONBOX_CFLAGS=-I/usr/include/dragonbox-1.0.0
10527     CPPFLAGS="$CPPFLAGS $DRAGONBOX_CFLAGS"
10528     AC_CHECK_HEADER([dragonbox/dragonbox.h], [],
10529        [AC_MSG_ERROR([dragonbox/dragonbox.h not found. install dragonbox])], [])
10530     AC_LANG_POP([C++])
10531     CPPFLAGS=$save_CPPFLAGS
10532 else
10533     AC_MSG_RESULT([internal])
10534     BUILD_TYPE="$BUILD_TYPE DRAGONBOX"
10535     SYSTEM_DRAGONBOX=
10537 AC_SUBST([SYSTEM_DRAGONBOX])
10538 AC_SUBST([DRAGONBOX_CFLAGS])
10540 dnl ===================================================================
10541 dnl Check for system libfixmath
10542 dnl ===================================================================
10543 AC_MSG_CHECKING([which libfixmath to use])
10544 if test "$with_system_libfixmath" = "yes"; then
10545     AC_MSG_RESULT([external])
10546     SYSTEM_LIBFIXMATH=TRUE
10547     AC_LANG_PUSH([C++])
10548     AC_CHECK_HEADER([libfixmath/fix16.hpp], [],
10549        [AC_MSG_ERROR([libfixmath/fix16.hpp not found. install libfixmath])], [])
10550     AC_CHECK_LIB([libfixmath], [fix16_mul], [:], [AC_MSG_ERROR(libfixmath lib not found or functional)], [])
10551     AC_LANG_POP([C++])
10552 else
10553     AC_MSG_RESULT([internal])
10554     SYSTEM_LIBFIXMATH=
10556 AC_SUBST([SYSTEM_LIBFIXMATH])
10558 dnl ===================================================================
10559 dnl Check for system glm
10560 dnl ===================================================================
10561 AC_MSG_CHECKING([which glm to use])
10562 if test "$with_system_glm" = "yes"; then
10563     AC_MSG_RESULT([external])
10564     SYSTEM_GLM=TRUE
10565     AC_LANG_PUSH([C++])
10566     AC_CHECK_HEADER([glm/glm.hpp], [],
10567        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10568     AC_LANG_POP([C++])
10569 else
10570     AC_MSG_RESULT([internal])
10571     BUILD_TYPE="$BUILD_TYPE GLM"
10572     SYSTEM_GLM=
10573     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10575 AC_SUBST([GLM_CFLAGS])
10576 AC_SUBST([SYSTEM_GLM])
10578 dnl ===================================================================
10579 dnl Check for system odbc
10580 dnl ===================================================================
10581 AC_MSG_CHECKING([which odbc headers to use])
10582 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
10583     AC_MSG_RESULT([external])
10584     SYSTEM_ODBC_HEADERS=TRUE
10586     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10587         save_CPPFLAGS=$CPPFLAGS
10588         find_winsdk
10589         PathFormat "$winsdktest"
10590         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"
10591         AC_CHECK_HEADER(sqlext.h, [],
10592             [AC_MSG_ERROR(odbc not found. install odbc)],
10593             [#include <windows.h>])
10594         CPPFLAGS=$save_CPPFLAGS
10595     else
10596         AC_CHECK_HEADER(sqlext.h, [],
10597             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10598     fi
10599 elif test "$enable_database_connectivity" = no; then
10600     AC_MSG_RESULT([none])
10601 else
10602     AC_MSG_RESULT([internal])
10603     SYSTEM_ODBC_HEADERS=
10605 AC_SUBST(SYSTEM_ODBC_HEADERS)
10607 dnl ===================================================================
10608 dnl Check for system NSS
10609 dnl ===================================================================
10610 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10611     libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8],,system-if-linux)
10612     AC_DEFINE(HAVE_FEATURE_NSS)
10613     ENABLE_NSS=TRUE
10614 elif test $_os != iOS ; then
10615     with_tls=openssl
10617 AC_SUBST(ENABLE_NSS)
10619 dnl ===================================================================
10620 dnl Enable LDAP support
10621 dnl ===================================================================
10623 if test "$test_openldap" = yes; then
10624     AC_MSG_CHECKING([whether to enable LDAP support])
10625     if test "$enable_ldap" = yes -a \( "$ENABLE_NSS" = TRUE -o "$with_system_openldap" = yes \); then
10626         AC_MSG_RESULT([yes])
10627         ENABLE_LDAP=TRUE
10628     else
10629         if test "$enable_ldap" != "yes"; then
10630             AC_MSG_RESULT([no])
10631         else
10632             AC_MSG_RESULT([no (needs NSS or system openldap)])
10633         fi
10634     fi
10636 dnl ===================================================================
10637 dnl Check for system openldap
10638 dnl ===================================================================
10640     if test "$ENABLE_LDAP" = TRUE; then
10641         AC_MSG_CHECKING([which openldap library to use])
10642         if test "$with_system_openldap" = yes; then
10643             AC_MSG_RESULT([external])
10644             SYSTEM_OPENLDAP=TRUE
10645             AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10646             AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10647             AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10648         else
10649             AC_MSG_RESULT([internal])
10650             BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10651         fi
10652     fi
10655 AC_SUBST(ENABLE_LDAP)
10656 AC_SUBST(SYSTEM_OPENLDAP)
10658 dnl ===================================================================
10659 dnl Check for TLS/SSL and cryptographic implementation to use
10660 dnl ===================================================================
10661 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10662 if test -n "$with_tls"; then
10663     case $with_tls in
10664     openssl)
10665         AC_DEFINE(USE_TLS_OPENSSL)
10666         TLS=OPENSSL
10667         AC_MSG_RESULT([$TLS])
10669         if test "$enable_openssl" != "yes"; then
10670             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10671         fi
10673         # warn that OpenSSL has been selected but not all TLS code has this option
10674         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS])
10675         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS"
10676         ;;
10677     nss)
10678         AC_DEFINE(USE_TLS_NSS)
10679         TLS=NSS
10680         AC_MSG_RESULT([$TLS])
10681         ;;
10682     no)
10683         AC_MSG_RESULT([none])
10684         AC_MSG_WARN([Skipping TLS/SSL])
10685         ;;
10686     *)
10687         AC_MSG_RESULT([])
10688         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10689 openssl - OpenSSL
10690 nss - Mozilla's Network Security Services (NSS)
10691     ])
10692         ;;
10693     esac
10694 else
10695     # default to using NSS, it results in smaller oox lib
10696     AC_DEFINE(USE_TLS_NSS)
10697     TLS=NSS
10698     AC_MSG_RESULT([$TLS])
10700 AC_SUBST(TLS)
10702 dnl ===================================================================
10703 dnl Check for system sane
10704 dnl ===================================================================
10705 AC_MSG_CHECKING([which sane header to use])
10706 if test "$with_system_sane" = "yes"; then
10707     AC_MSG_RESULT([external])
10708     AC_CHECK_HEADER(sane/sane.h, [],
10709       [AC_MSG_ERROR(sane not found. install sane)], [])
10710 else
10711     AC_MSG_RESULT([internal])
10712     BUILD_TYPE="$BUILD_TYPE SANE"
10715 dnl ===================================================================
10716 dnl Check for system icu
10717 dnl ===================================================================
10718 ICU_MAJOR=71
10719 ICU_MINOR=1
10720 ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10721 ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10722 ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10723 ICU_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10724 ICU_LIBS_internal="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10725 libo_CHECK_SYSTEM_MODULE([icu],[ICU],[icu-i18n >= 4.6])
10726 if test "$SYSTEM_ICU" = TRUE; then
10727     AC_LANG_PUSH([C++])
10728     AC_MSG_CHECKING([for unicode/rbbi.h])
10729     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10730     AC_LANG_POP([C++])
10732     ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10733     ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10734     ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10736     if test "$ICU_MAJOR" -ge 50; then
10737         AC_MSG_NOTICE([Ignore ICU_MINOR as obviously the libraries don't include the minor version in their names any more])
10738         ICU_MINOR=
10739     fi
10741     if test "$CROSS_COMPILING" != TRUE; then
10742         # using the system icu tools can lead to version confusion, use the
10743         # ones from the build environment when cross-compiling
10744         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10745         if test -z "$SYSTEM_GENBRK"; then
10746             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10747         fi
10748         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10749         if test -z "$SYSTEM_GENCCODE"; then
10750             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10751         fi
10752         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10753         if test -z "$SYSTEM_GENCMN"; then
10754             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10755         fi
10756         if test "$ICU_MAJOR" -lt 49; then
10757             ICU_RECLASSIFIED_PREPEND_SET_EMPTY=
10758             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER=
10759             ICU_RECLASSIFIED_HEBREW_LETTER=
10760         fi
10761     fi
10763 if test "$ICU_MAJOR" -ge "59"; then
10764     # As of ICU 59 it defaults to typedef char16_t UChar; which is available
10765     # with -std=c++11 but not all external libraries can be built with that,
10766     # for those use a bit-compatible typedef uint16_t UChar; see
10767     # icu/source/common/unicode/umachine.h
10768     ICU_UCHAR_TYPE="-DUCHAR_TYPE=uint16_t"
10769 else
10770     ICU_UCHAR_TYPE=""
10772 AC_SUBST(SYSTEM_GENBRK)
10773 AC_SUBST(SYSTEM_GENCCODE)
10774 AC_SUBST(SYSTEM_GENCMN)
10775 AC_SUBST(ICU_MAJOR)
10776 AC_SUBST(ICU_MINOR)
10777 AC_SUBST(ICU_RECLASSIFIED_PREPEND_SET_EMPTY)
10778 AC_SUBST(ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER)
10779 AC_SUBST(ICU_RECLASSIFIED_HEBREW_LETTER)
10780 AC_SUBST(ICU_UCHAR_TYPE)
10782 dnl ==================================================================
10783 dnl Breakpad
10784 dnl ==================================================================
10785 DEFAULT_CRASHDUMP_VALUE="true"
10786 AC_MSG_CHECKING([whether to enable breakpad])
10787 if test "$enable_breakpad" != yes; then
10788     AC_MSG_RESULT([no])
10789 else
10790     AC_MSG_RESULT([yes])
10791     ENABLE_BREAKPAD="TRUE"
10792     AC_DEFINE(ENABLE_BREAKPAD)
10793     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
10794     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
10796     AC_MSG_CHECKING([for disable crash dump])
10797     if test "$enable_crashdump" = no; then
10798         DEFAULT_CRASHDUMP_VALUE="false"
10799         AC_MSG_RESULT([yes])
10800     else
10801        AC_MSG_RESULT([no])
10802     fi
10804     AC_MSG_CHECKING([for crashreport config])
10805     if test "$with_symbol_config" = "no"; then
10806         BREAKPAD_SYMBOL_CONFIG="invalid"
10807         AC_MSG_RESULT([no])
10808     else
10809         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
10810         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
10811         AC_MSG_RESULT([yes])
10812     fi
10813     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
10815 AC_SUBST(ENABLE_BREAKPAD)
10816 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
10818 dnl ===================================================================
10819 dnl Orcus
10820 dnl ===================================================================
10821 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.17 >= 0.17.2])
10822 if test "$with_system_orcus" != "yes"; then
10823     if test "$SYSTEM_BOOST" = "TRUE"; then
10824         dnl Link with Boost.System
10825         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
10826         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
10827         dnl in documentation has no effect.
10828         AX_BOOST_SYSTEM
10829     fi
10831 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
10832 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
10833 AC_SUBST([BOOST_SYSTEM_LIB])
10834 AC_SUBST(SYSTEM_LIBORCUS)
10836 dnl ===================================================================
10837 dnl HarfBuzz
10838 dnl ===================================================================
10840 GRAPHITE_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"
10841 GRAPHITE_LIBS_internal="-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"
10842 libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3])
10844 HARFBUZZ_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/harfbuzz/src"
10845 HARFBUZZ_LIBS_internal="-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"
10846 libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 0.9.42])
10848 if test "$COM" = "MSC"; then # override the above
10849     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
10850     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
10853 if test "$with_system_harfbuzz" = "yes"; then
10854     if test "$with_system_graphite" = "no"; then
10855         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
10856     fi
10857     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
10858     save_LIBS="$LIBS"
10859     save_CFLAGS="$CFLAGS"
10860     LIBS="$LIBS $HARFBUZZ_LIBS"
10861     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
10862     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
10863     LIBS="$save_LIBS"
10864     CFLAGS="$save_CFLAGS"
10865 else
10866     if test "$with_system_graphite" = "yes"; then
10867         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
10868     fi
10871 if test "$USING_X11" = TRUE; then
10872     AC_PATH_X
10873     AC_PATH_XTRA
10874     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
10876     if test -z "$x_includes"; then
10877         x_includes="default_x_includes"
10878     fi
10879     if test -z "$x_libraries"; then
10880         x_libraries="default_x_libraries"
10881     fi
10882     CFLAGS="$CFLAGS $X_CFLAGS"
10883     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
10884     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
10885 else
10886     x_includes="no_x_includes"
10887     x_libraries="no_x_libraries"
10890 if test "$USING_X11" = TRUE; then
10891     dnl ===================================================================
10892     dnl Check for extension headers
10893     dnl ===================================================================
10894     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
10895      [#include <X11/extensions/shape.h>])
10897     # vcl needs ICE and SM
10898     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
10899     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
10900         [AC_MSG_ERROR(ICE library not found)])
10901     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
10902     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
10903         [AC_MSG_ERROR(SM library not found)])
10906 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
10907     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
10908     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
10911 dnl ===================================================================
10912 dnl Check for system Xrender
10913 dnl ===================================================================
10914 AC_MSG_CHECKING([whether to use Xrender])
10915 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
10916     AC_MSG_RESULT([yes])
10917     PKG_CHECK_MODULES(XRENDER, xrender)
10918     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10919     FilterLibs "${XRENDER_LIBS}"
10920     XRENDER_LIBS="${filteredlibs}"
10921     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
10922       [AC_MSG_ERROR(libXrender not found or functional)], [])
10923     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
10924       [AC_MSG_ERROR(Xrender not found. install X)], [])
10925 else
10926     AC_MSG_RESULT([no])
10928 AC_SUBST(XRENDER_CFLAGS)
10929 AC_SUBST(XRENDER_LIBS)
10931 dnl ===================================================================
10932 dnl Check for XRandr
10933 dnl ===================================================================
10934 AC_MSG_CHECKING([whether to enable RandR support])
10935 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
10936     AC_MSG_RESULT([yes])
10937     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
10938     if test "$ENABLE_RANDR" != "TRUE"; then
10939         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
10940                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
10941         XRANDR_CFLAGS=" "
10942         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
10943           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
10944         XRANDR_LIBS="-lXrandr "
10945         ENABLE_RANDR="TRUE"
10946     fi
10947     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10948     FilterLibs "${XRANDR_LIBS}"
10949     XRANDR_LIBS="${filteredlibs}"
10950 else
10951     ENABLE_RANDR=""
10952     AC_MSG_RESULT([no])
10954 AC_SUBST(XRANDR_CFLAGS)
10955 AC_SUBST(XRANDR_LIBS)
10956 AC_SUBST(ENABLE_RANDR)
10958 if test -z "$with_webdav"; then
10959     with_webdav=$test_webdav
10962 AC_MSG_CHECKING([for WebDAV support])
10963 case "$with_webdav" in
10965     AC_MSG_RESULT([no])
10966     WITH_WEBDAV=""
10967     ;;
10969     AC_MSG_RESULT([yes])
10970     # curl is already mandatory (almost) and checked elsewhere
10971     if test "$enable_curl" = "no"; then
10972         AC_MSG_ERROR(["--with-webdav conflicts with --disable-curl"])
10973     fi
10974     WITH_WEBDAV=TRUE
10975     ;;
10976 esac
10977 AC_SUBST(WITH_WEBDAV)
10979 dnl ===================================================================
10980 dnl Check for disabling cve_tests
10981 dnl ===================================================================
10982 AC_MSG_CHECKING([whether to execute CVE tests])
10983 # If not explicitly enabled or disabled, default
10984 if test -z "$enable_cve_tests"; then
10985     case "$OS" in
10986     WNT)
10987         # Default cves off for Windows with its wild and wonderful
10988         # variety of AV software kicking in and panicking
10989         enable_cve_tests=no
10990         ;;
10991     *)
10992         # otherwise yes
10993         enable_cve_tests=yes
10994         ;;
10995     esac
10997 if test "$enable_cve_tests" = "no"; then
10998     AC_MSG_RESULT([no])
10999     DISABLE_CVE_TESTS=TRUE
11000     AC_SUBST(DISABLE_CVE_TESTS)
11001 else
11002     AC_MSG_RESULT([yes])
11005 dnl ===================================================================
11006 dnl Check for enabling chart XShape tests
11007 dnl ===================================================================
11008 AC_MSG_CHECKING([whether to execute chart XShape tests])
11009 if test "$enable_chart_tests" = "yes" -o '(' "$_os" = "WINNT" -a "$enable_chart_tests" != "no" ')'; then
11010     AC_MSG_RESULT([yes])
11011     ENABLE_CHART_TESTS=TRUE
11012     AC_SUBST(ENABLE_CHART_TESTS)
11013 else
11014     AC_MSG_RESULT([no])
11017 dnl ===================================================================
11018 dnl Check for system openssl
11019 dnl ===================================================================
11020 ENABLE_OPENSSL=
11021 AC_MSG_CHECKING([whether to disable OpenSSL usage])
11022 if test "$enable_openssl" = "yes"; then
11023     AC_MSG_RESULT([no])
11024     ENABLE_OPENSSL=TRUE
11025     if test "$_os" = Darwin ; then
11026         # OpenSSL is deprecated when building for 10.7 or later.
11027         #
11028         # http://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
11029         # http://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
11031         with_system_openssl=no
11032         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
11033     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
11034             && test "$with_system_openssl" != "no"; then
11035         with_system_openssl=yes
11036         SYSTEM_OPENSSL=TRUE
11037         OPENSSL_CFLAGS=
11038         OPENSSL_LIBS="-lssl -lcrypto"
11039     else
11040         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
11041     fi
11042     if test "$with_system_openssl" = "yes"; then
11043         AC_MSG_CHECKING([whether openssl supports SHA512])
11044         AC_LANG_PUSH([C])
11045         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
11046             SHA512_CTX context;
11047 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
11048         AC_LANG_POP(C)
11049     fi
11050 else
11051     AC_MSG_RESULT([yes])
11053     # warn that although OpenSSL is disabled, system libraries may depend on it
11054     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
11055     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
11058 AC_SUBST([ENABLE_OPENSSL])
11060 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
11061     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
11062         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
11063         enable_cipher_openssl_backend=no
11064     else
11065         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
11066     fi
11068 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
11069 ENABLE_CIPHER_OPENSSL_BACKEND=
11070 if test "$enable_cipher_openssl_backend" = yes; then
11071     AC_MSG_RESULT([yes])
11072     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
11073 else
11074     AC_MSG_RESULT([no])
11076 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
11078 dnl ===================================================================
11079 dnl Select the crypto backends used by LO
11080 dnl ===================================================================
11082 if test "$build_crypto" = yes; then
11083     if test "$OS" = WNT; then
11084         BUILD_TYPE="$BUILD_TYPE CRYPTO_MSCAPI"
11085         AC_DEFINE([USE_CRYPTO_MSCAPI])
11086     elif test "$ENABLE_NSS" = TRUE; then
11087         BUILD_TYPE="$BUILD_TYPE CRYPTO_NSS"
11088         AC_DEFINE([USE_CRYPTO_NSS])
11089     fi
11092 dnl ===================================================================
11093 dnl Check for system redland
11094 dnl ===================================================================
11095 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
11096 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
11097 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
11098 if test "$with_system_redland" = "yes"; then
11099     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
11100             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
11101 else
11102     RAPTOR_MAJOR="0"
11103     RASQAL_MAJOR="3"
11104     REDLAND_MAJOR="0"
11106 AC_SUBST(RAPTOR_MAJOR)
11107 AC_SUBST(RASQAL_MAJOR)
11108 AC_SUBST(REDLAND_MAJOR)
11110 dnl ===================================================================
11111 dnl Check for system hunspell
11112 dnl ===================================================================
11113 AC_MSG_CHECKING([which libhunspell to use])
11114 if test "$with_system_hunspell" = "yes"; then
11115     AC_MSG_RESULT([external])
11116     SYSTEM_HUNSPELL=TRUE
11117     AC_LANG_PUSH([C++])
11118     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
11119     if test "$HUNSPELL_PC" != "TRUE"; then
11120         AC_CHECK_HEADER(hunspell.hxx, [],
11121             [
11122             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
11123             [AC_MSG_ERROR(hunspell headers not found.)], [])
11124             ], [])
11125         AC_CHECK_LIB([hunspell], [main], [:],
11126            [ AC_MSG_ERROR(hunspell library not found.) ], [])
11127         HUNSPELL_LIBS=-lhunspell
11128     fi
11129     AC_LANG_POP([C++])
11130     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11131     FilterLibs "${HUNSPELL_LIBS}"
11132     HUNSPELL_LIBS="${filteredlibs}"
11133 else
11134     AC_MSG_RESULT([internal])
11135     SYSTEM_HUNSPELL=
11136     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
11137     if test "$COM" = "MSC"; then
11138         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
11139     else
11140         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
11141     fi
11142     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
11144 AC_SUBST(SYSTEM_HUNSPELL)
11145 AC_SUBST(HUNSPELL_CFLAGS)
11146 AC_SUBST(HUNSPELL_LIBS)
11148 dnl ===================================================================
11149 dnl Check for system zxing
11150 dnl ===================================================================
11151 AC_MSG_CHECKING([whether to use zxing])
11152 if test "$enable_zxing" = "no"; then
11153     AC_MSG_RESULT([no])
11154     ENABLE_ZXING=
11155     SYSTEM_ZXING=
11156 else
11157     AC_MSG_RESULT([yes])
11158     ENABLE_ZXING=TRUE
11159     AC_MSG_CHECKING([which libzxing to use])
11160     if test "$with_system_zxing" = "yes"; then
11161         AC_MSG_RESULT([external])
11162         SYSTEM_ZXING=TRUE
11163         ZXING_CFLAGS=
11164         AC_LANG_PUSH([C++])
11165         save_CXXFLAGS=$CXXFLAGS
11166         save_IFS=$IFS
11167         IFS=$P_SEP
11168         for i in $CPLUS_INCLUDE_PATH /usr/include; do
11169             dnl Reset IFS as soon as possible, to avoid unexpected side effects (and the
11170             dnl "/usr/include" fallback makes sure we get here at least once; resetting rather than
11171             dnl unsetting follows the advice at <http://git.savannah.gnu.org/gitweb/?p=autoconf.git;
11172             dnl a=commit;h=e51c9919f2cf70185b7916ac040bc0bbfd0f743b> "Add recommendation on (not)
11173             dnl unsetting IFS."):
11174             IFS=$save_IFS
11175             dnl TODO: GCC and Clang treat empty paths in CPLUS_INCLUDE_PATH like ".", but we simply
11176             dnl ignore them here:
11177             if test -z "$i"; then
11178                 continue
11179             fi
11180             dnl TODO: White space in $i would cause problems:
11181             CXXFLAGS="$save_CXXFLAGS -I$i/ZXing"
11182             AC_CHECK_HEADER(MultiFormatWriter.h, [ZXING_CFLAGS=-I$i/ZXing; break],
11183                 [unset ac_cv_header_MultiFormatWriter_h], [#include <stdexcept>])
11184         done
11185         CXXFLAGS=$save_CXXFLAGS
11186         if test -z "$ZXING_CFLAGS"; then
11187             AC_MSG_ERROR(zxing headers not found.)
11188         fi
11189         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
11190             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
11191             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
11192         AC_LANG_POP([C++])
11193         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11194         FilterLibs "${ZXING_LIBS}"
11195         ZXING_LIBS="${filteredlibs}"
11196     else
11197         AC_MSG_RESULT([internal])
11198         SYSTEM_ZXING=
11199         BUILD_TYPE="$BUILD_TYPE ZXING"
11200     fi
11201     if test "$ENABLE_ZXING" = TRUE; then
11202         AC_DEFINE(ENABLE_ZXING)
11203     fi
11205 AC_SUBST(SYSTEM_ZXING)
11206 AC_SUBST(ENABLE_ZXING)
11207 AC_SUBST(ZXING_CFLAGS)
11208 AC_SUBST(ZXING_LIBS)
11210 dnl ===================================================================
11211 dnl Check for system box2d
11212 dnl ===================================================================
11213 AC_MSG_CHECKING([which box2d to use])
11214 if test "$with_system_box2d" = "yes"; then
11215     AC_MSG_RESULT([external])
11216     SYSTEM_BOX2D=TRUE
11217     AC_LANG_PUSH([C++])
11218     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
11219         [BOX2D_H_FOUND='FALSE'])
11220     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
11221         _BOX2D_LIB=box2d
11222         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
11223     else
11224         # fail this. there's no other alternative to check when we are here.
11225         AC_CHECK_HEADER([Box2D/Box2D.h], [],
11226             [AC_MSG_ERROR(box2d headers not found.)])
11227         _BOX2D_LIB=Box2D
11228         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11229     fi
11230     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11231         [ AC_MSG_ERROR(box2d library not found.) ], [])
11232     BOX2D_LIBS=-l$_BOX2D_LIB
11233     AC_LANG_POP([C++])
11234     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11235     FilterLibs "${BOX2D_LIBS}"
11236     BOX2D_LIBS="${filteredlibs}"
11237 else
11238     AC_MSG_RESULT([internal])
11239     SYSTEM_BOX2D=
11240     BUILD_TYPE="$BUILD_TYPE BOX2D"
11242 AC_SUBST(SYSTEM_BOX2D)
11243 AC_SUBST(BOX2D_CFLAGS)
11244 AC_SUBST(BOX2D_LIBS)
11246 dnl ===================================================================
11247 dnl Checking for altlinuxhyph
11248 dnl ===================================================================
11249 AC_MSG_CHECKING([which altlinuxhyph to use])
11250 if test "$with_system_altlinuxhyph" = "yes"; then
11251     AC_MSG_RESULT([external])
11252     SYSTEM_HYPH=TRUE
11253     AC_CHECK_HEADER(hyphen.h, [],
11254        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11255     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11256        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11257        [#include <hyphen.h>])
11258     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11259         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11260     if test -z "$HYPHEN_LIB"; then
11261         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11262            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11263     fi
11264     if test -z "$HYPHEN_LIB"; then
11265         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11266            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11267     fi
11268 else
11269     AC_MSG_RESULT([internal])
11270     SYSTEM_HYPH=
11271     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11272     if test "$COM" = "MSC"; then
11273         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11274     else
11275         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11276     fi
11278 AC_SUBST(SYSTEM_HYPH)
11279 AC_SUBST(HYPHEN_LIB)
11281 dnl ===================================================================
11282 dnl Checking for mythes
11283 dnl ===================================================================
11284 AC_MSG_CHECKING([which mythes to use])
11285 if test "$with_system_mythes" = "yes"; then
11286     AC_MSG_RESULT([external])
11287     SYSTEM_MYTHES=TRUE
11288     AC_LANG_PUSH([C++])
11289     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11290     if test "$MYTHES_PKGCONFIG" = "no"; then
11291         AC_CHECK_HEADER(mythes.hxx, [],
11292             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11293         AC_CHECK_LIB([mythes-1.2], [main], [:],
11294             [ MYTHES_FOUND=no], [])
11295     if test "$MYTHES_FOUND" = "no"; then
11296         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11297                 [ MYTHES_FOUND=no], [])
11298     fi
11299     if test "$MYTHES_FOUND" = "no"; then
11300         AC_MSG_ERROR([mythes library not found!.])
11301     fi
11302     fi
11303     AC_LANG_POP([C++])
11304     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11305     FilterLibs "${MYTHES_LIBS}"
11306     MYTHES_LIBS="${filteredlibs}"
11307 else
11308     AC_MSG_RESULT([internal])
11309     SYSTEM_MYTHES=
11310     BUILD_TYPE="$BUILD_TYPE MYTHES"
11311     if test "$COM" = "MSC"; then
11312         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11313     else
11314         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11315     fi
11317 AC_SUBST(SYSTEM_MYTHES)
11318 AC_SUBST(MYTHES_CFLAGS)
11319 AC_SUBST(MYTHES_LIBS)
11321 dnl ===================================================================
11322 dnl How should we build the linear programming solver ?
11323 dnl ===================================================================
11325 ENABLE_COINMP=
11326 AC_MSG_CHECKING([whether to build with CoinMP])
11327 if test "$enable_coinmp" != "no"; then
11328     ENABLE_COINMP=TRUE
11329     AC_MSG_RESULT([yes])
11330     if test "$with_system_coinmp" = "yes"; then
11331         SYSTEM_COINMP=TRUE
11332         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11333         FilterLibs "${COINMP_LIBS}"
11334         COINMP_LIBS="${filteredlibs}"
11335     else
11336         BUILD_TYPE="$BUILD_TYPE COINMP"
11337     fi
11338 else
11339     AC_MSG_RESULT([no])
11341 AC_SUBST(ENABLE_COINMP)
11342 AC_SUBST(SYSTEM_COINMP)
11343 AC_SUBST(COINMP_CFLAGS)
11344 AC_SUBST(COINMP_LIBS)
11346 ENABLE_LPSOLVE=
11347 AC_MSG_CHECKING([whether to build with lpsolve])
11348 if test "$enable_lpsolve" != "no"; then
11349     ENABLE_LPSOLVE=TRUE
11350     AC_MSG_RESULT([yes])
11351 else
11352     AC_MSG_RESULT([no])
11354 AC_SUBST(ENABLE_LPSOLVE)
11356 if test "$ENABLE_LPSOLVE" = TRUE; then
11357     AC_MSG_CHECKING([which lpsolve to use])
11358     if test "$with_system_lpsolve" = "yes"; then
11359         AC_MSG_RESULT([external])
11360         SYSTEM_LPSOLVE=TRUE
11361         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11362            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11363         save_LIBS=$LIBS
11364         # some systems need this. Like Ubuntu...
11365         AC_CHECK_LIB(m, floor)
11366         AC_CHECK_LIB(dl, dlopen)
11367         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11368             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11369         LIBS=$save_LIBS
11370     else
11371         AC_MSG_RESULT([internal])
11372         SYSTEM_LPSOLVE=
11373         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11374     fi
11376 AC_SUBST(SYSTEM_LPSOLVE)
11378 dnl ===================================================================
11379 dnl Checking for libexttextcat
11380 dnl ===================================================================
11381 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11382 if test "$with_system_libexttextcat" = "yes"; then
11383     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11385 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11387 dnl ===================================================================
11388 dnl Checking for libnumbertext
11389 dnl ===================================================================
11390 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11391 if test "$with_system_libnumbertext" = "yes"; then
11392     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11393     SYSTEM_LIBNUMBERTEXT=YES
11394 else
11395     SYSTEM_LIBNUMBERTEXT=
11397 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11398 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11400 dnl ***************************************
11401 dnl testing libc version for Linux...
11402 dnl ***************************************
11403 if test "$_os" = "Linux"; then
11404     AC_MSG_CHECKING([whether the libc is recent enough])
11405     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
11406     #include <features.h>
11407     #if defined(__GNU_LIBRARY__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1))
11408     #error glibc >= 2.1 is required
11409     #endif
11410     ]])],, [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([no, upgrade libc])])
11413 dnl =========================================
11414 dnl Check for uuidgen
11415 dnl =========================================
11416 if test "$_os" = "WINNT"; then
11417     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11418     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11419     UUIDGEN=uuidgen.exe
11420     AC_SUBST(UUIDGEN)
11421 else
11422     AC_PATH_PROG([UUIDGEN], [uuidgen])
11423     if test -z "$UUIDGEN"; then
11424         AC_MSG_WARN([uuid is needed for building installation sets])
11425     fi
11428 dnl ***************************************
11429 dnl Checking for bison and flex
11430 dnl ***************************************
11431 AC_PATH_PROG(BISON, bison)
11432 if test -z "$BISON"; then
11433     AC_MSG_ERROR([no bison found in \$PATH, install it])
11434 else
11435     AC_MSG_CHECKING([the bison version])
11436     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11437     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11438     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11439     dnl cause
11440     dnl
11441     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]
11442     dnl   typedef union YYSTYPE
11443     dnl           ~~~~~~^~~~~~~
11444     dnl
11445     dnl while at least 3.4.1 is know to be good:
11446     if test "$COMPILER_PLUGINS" = TRUE; then
11447         if test "$_bison_longver" -lt 2004; then
11448             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11449         fi
11450     else
11451         if test "$_bison_longver" -lt 2000; then
11452             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11453         fi
11454     fi
11456 AC_SUBST([BISON])
11458 AC_PATH_PROG(FLEX, flex)
11459 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11460     FLEX=`cygpath -m $FLEX`
11462 if test -z "$FLEX"; then
11463     AC_MSG_ERROR([no flex found in \$PATH, install it])
11464 else
11465     AC_MSG_CHECKING([the flex version])
11466     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11467     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11468         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11469     fi
11471 AC_SUBST([FLEX])
11473 AC_PATH_PROG(DIFF, diff)
11474 if test -z "$DIFF"; then
11475     AC_MSG_ERROR(["diff" not found in \$PATH, install it])
11477 AC_SUBST([DIFF])
11479 AC_PATH_PROG(UNIQ, uniq)
11480 if test -z "$UNIQ"; then
11481     AC_MSG_ERROR(["uniq" not found in \$PATH, install it])
11483 AC_SUBST([UNIQ])
11485 dnl ***************************************
11486 dnl Checking for patch
11487 dnl ***************************************
11488 AC_PATH_PROG(PATCH, patch)
11489 if test -z "$PATCH"; then
11490     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11493 dnl On Solaris or macOS, check if --with-gnu-patch was used
11494 if test "$_os" = "SunOS" -o "$_os" = "Darwin"; then
11495     if test -z "$with_gnu_patch"; then
11496         GNUPATCH=$PATCH
11497     else
11498         if test -x "$with_gnu_patch"; then
11499             GNUPATCH=$with_gnu_patch
11500         else
11501             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11502         fi
11503     fi
11505     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11506     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11507         AC_MSG_RESULT([yes])
11508     else
11509         AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11510     fi
11511 else
11512     GNUPATCH=$PATCH
11515 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11516     GNUPATCH=`cygpath -m $GNUPATCH`
11519 dnl We also need to check for --with-gnu-cp
11521 if test -z "$with_gnu_cp"; then
11522     # check the place where the good stuff is hidden on Solaris...
11523     if test -x /usr/gnu/bin/cp; then
11524         GNUCP=/usr/gnu/bin/cp
11525     else
11526         AC_PATH_PROGS(GNUCP, gnucp cp)
11527     fi
11528     if test -z $GNUCP; then
11529         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11530     fi
11531 else
11532     if test -x "$with_gnu_cp"; then
11533         GNUCP=$with_gnu_cp
11534     else
11535         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11536     fi
11539 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11540     GNUCP=`cygpath -m $GNUCP`
11543 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11544 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11545     AC_MSG_RESULT([yes])
11546 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11547     AC_MSG_RESULT([yes])
11548 else
11549     case "$build_os" in
11550     darwin*|netbsd*|openbsd*|freebsd*|dragonfly*|aix*)
11551         x_GNUCP=[\#]
11552         GNUCP=''
11553         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11554         ;;
11555     *)
11556         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11557         ;;
11558     esac
11561 AC_SUBST(GNUPATCH)
11562 AC_SUBST(GNUCP)
11563 AC_SUBST(x_GNUCP)
11565 dnl ***************************************
11566 dnl testing assembler path
11567 dnl ***************************************
11568 ML_EXE=""
11569 if test "$_os" = "WINNT"; then
11570     case "$WIN_HOST_ARCH" in
11571     x86) assembler=ml.exe ;;
11572     x64) assembler=ml64.exe ;;
11573     arm64) assembler=armasm64.exe ;;
11574     esac
11576     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11577     if test -f "$MSVC_HOST_PATH/$assembler"; then
11578         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11579         AC_MSG_RESULT([$ML_EXE])
11580     else
11581         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11582     fi
11585 AC_SUBST(ML_EXE)
11587 dnl ===================================================================
11588 dnl We need zip and unzip
11589 dnl ===================================================================
11590 AC_PATH_PROG(ZIP, zip)
11591 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11592 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11593     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],,)
11596 AC_PATH_PROG(UNZIP, unzip)
11597 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11599 dnl ===================================================================
11600 dnl Zip must be a specific type for different build types.
11601 dnl ===================================================================
11602 if test $build_os = cygwin; then
11603     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11604         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11605     fi
11608 dnl ===================================================================
11609 dnl We need touch with -h option support.
11610 dnl ===================================================================
11611 AC_PATH_PROG(TOUCH, touch)
11612 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11613 touch "$WARNINGS_FILE"
11614 if ! "$TOUCH" -h "$WARNINGS_FILE" 2>/dev/null > /dev/null; then
11615     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],,)
11618 dnl ===================================================================
11619 dnl Check for system epoxy
11620 dnl ===================================================================
11621 EPOXY_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/epoxy/include"
11622 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2])
11624 dnl ===================================================================
11625 dnl Set vcl option: coordinate device in double or sal_Int32
11626 dnl ===================================================================
11628 dnl disabled for now, we don't want subtle differences between OSs
11629 dnl AC_MSG_CHECKING([Type to use for Device Pixel coordinates])
11630 dnl if test "$_os" = "Darwin" -o  $_os = iOS ; then
11631 dnl     AC_DEFINE(VCL_FLOAT_DEVICE_PIXEL)
11632 dnl     AC_MSG_RESULT([double])
11633 dnl else
11634 dnl     AC_MSG_RESULT([sal_Int32])
11635 dnl fi
11637 dnl ===================================================================
11638 dnl Show which vclplugs will be built.
11639 dnl ===================================================================
11640 R=""
11642 libo_ENABLE_VCLPLUG([gen])
11643 libo_ENABLE_VCLPLUG([gtk3])
11644 libo_ENABLE_VCLPLUG([gtk3_kde5])
11645 libo_ENABLE_VCLPLUG([gtk4])
11646 libo_ENABLE_VCLPLUG([kf5])
11647 libo_ENABLE_VCLPLUG([qt5])
11648 libo_ENABLE_VCLPLUG([qt6])
11650 if test "$_os" = "WINNT"; then
11651     R="$R win"
11652 elif test "$_os" = "Darwin"; then
11653     R="$R osx"
11654 elif test "$_os" = "iOS"; then
11655     R="ios"
11656 elif test "$_os" = Android; then
11657     R="android"
11660 build_vcl_plugins="$R"
11661 if test -z "$build_vcl_plugins"; then
11662     build_vcl_plugins=" none"
11664 AC_MSG_NOTICE([VCLplugs to be built:${build_vcl_plugins}])
11665 VCL_PLUGIN_INFO=$R
11666 AC_SUBST([VCL_PLUGIN_INFO])
11668 if test "$DISABLE_DYNLOADING" = TRUE -a -z "$DISABLE_GUI" -a \( -z "$R" -o $(echo "$R" | wc -w) -ne 1 \); then
11669     AC_MSG_ERROR([Can't build --disable-dynamic-loading without --disable-gui and a single VCL plugin"])
11672 dnl ===================================================================
11673 dnl Check for GTK libraries
11674 dnl ===================================================================
11676 GTK3_CFLAGS=""
11677 GTK3_LIBS=""
11678 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11679     if test "$with_system_cairo" = no; then
11680         add_warning 'Non-system cairo combined with gtk3 is assumed to cause trouble; proceed at your own risk.'
11681     fi
11682     : ${with_system_cairo:=yes}
11683     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)
11684     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11685     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11686     FilterLibs "${GTK3_LIBS}"
11687     GTK3_LIBS="${filteredlibs}"
11689     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11690     if test "$with_system_epoxy" != "yes"; then
11691         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11692         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11693                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11694     fi
11696 AC_SUBST(GTK3_LIBS)
11697 AC_SUBST(GTK3_CFLAGS)
11699 GTK4_CFLAGS=""
11700 GTK4_LIBS=""
11701 if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then
11702     if test "$with_system_cairo" = no; then
11703         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11704     fi
11705     : ${with_system_cairo:=yes}
11706     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11707     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11708     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11709     FilterLibs "${GTK4_LIBS}"
11710     GTK4_LIBS="${filteredlibs}"
11712     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11713     if test "$with_system_epoxy" != "yes"; then
11714         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11715         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11716                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11717     fi
11719 AC_SUBST(GTK4_LIBS)
11720 AC_SUBST(GTK4_CFLAGS)
11722 if test "$enable_introspection" = yes; then
11723     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11724         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11725     else
11726         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
11727     fi
11730 dnl ===================================================================
11731 dnl check for dbus support
11732 dnl ===================================================================
11733 ENABLE_DBUS=""
11734 DBUS_CFLAGS=""
11735 DBUS_LIBS=""
11736 DBUS_GLIB_CFLAGS=""
11737 DBUS_GLIB_LIBS=""
11738 DBUS_HAVE_GLIB=""
11740 if test "$enable_dbus" = "no"; then
11741     test_dbus=no
11744 AC_MSG_CHECKING([whether to enable DBUS support])
11745 if test "$test_dbus" = "yes"; then
11746     ENABLE_DBUS="TRUE"
11747     AC_MSG_RESULT([yes])
11748     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
11749     AC_DEFINE(ENABLE_DBUS)
11750     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11751     FilterLibs "${DBUS_LIBS}"
11752     DBUS_LIBS="${filteredlibs}"
11754     # Glib is needed for BluetoothServer
11755     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
11756     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
11757         [
11758             DBUS_HAVE_GLIB="TRUE"
11759             AC_DEFINE(DBUS_HAVE_GLIB,1)
11760         ],
11761         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
11762     )
11763 else
11764     AC_MSG_RESULT([no])
11767 AC_SUBST(ENABLE_DBUS)
11768 AC_SUBST(DBUS_CFLAGS)
11769 AC_SUBST(DBUS_LIBS)
11770 AC_SUBST(DBUS_GLIB_CFLAGS)
11771 AC_SUBST(DBUS_GLIB_LIBS)
11772 AC_SUBST(DBUS_HAVE_GLIB)
11774 AC_MSG_CHECKING([whether to enable Impress remote control])
11775 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
11776     AC_MSG_RESULT([yes])
11777     ENABLE_SDREMOTE=TRUE
11778     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
11780     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
11781         # The Bluetooth code doesn't compile with macOS SDK 10.15
11782         if test "$enable_sdremote_bluetooth" = yes; then
11783             AC_MSG_ERROR([macOS SDK $macosx_sdk does not currently support --enable-sdremote-bluetooth])
11784         fi
11785         enable_sdremote_bluetooth=no
11786     fi
11787     # If not explicitly enabled or disabled, default
11788     if test -z "$enable_sdremote_bluetooth"; then
11789         case "$OS" in
11790         LINUX|MACOSX|WNT)
11791             # Default to yes for these
11792             enable_sdremote_bluetooth=yes
11793             ;;
11794         *)
11795             # otherwise no
11796             enable_sdremote_bluetooth=no
11797             ;;
11798         esac
11799     fi
11800     # $enable_sdremote_bluetooth is guaranteed non-empty now
11802     if test "$enable_sdremote_bluetooth" != "no"; then
11803         if test "$OS" = "LINUX"; then
11804             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
11805                 AC_MSG_RESULT([yes])
11806                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
11807                 dnl ===================================================================
11808                 dnl Check for system bluez
11809                 dnl ===================================================================
11810                 AC_MSG_CHECKING([which Bluetooth header to use])
11811                 if test "$with_system_bluez" = "yes"; then
11812                     AC_MSG_RESULT([external])
11813                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
11814                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
11815                     SYSTEM_BLUEZ=TRUE
11816                 else
11817                     AC_MSG_RESULT([internal])
11818                     SYSTEM_BLUEZ=
11819                 fi
11820             else
11821                 AC_MSG_RESULT([no, dbus disabled])
11822                 ENABLE_SDREMOTE_BLUETOOTH=
11823                 SYSTEM_BLUEZ=
11824             fi
11825         else
11826             AC_MSG_RESULT([yes])
11827             ENABLE_SDREMOTE_BLUETOOTH=TRUE
11828             SYSTEM_BLUEZ=
11829         fi
11830     else
11831         AC_MSG_RESULT([no])
11832         ENABLE_SDREMOTE_BLUETOOTH=
11833         SYSTEM_BLUEZ=
11834     fi
11835 else
11836     ENABLE_SDREMOTE=
11837     SYSTEM_BLUEZ=
11838     AC_MSG_RESULT([no])
11840 AC_SUBST(ENABLE_SDREMOTE)
11841 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
11842 AC_SUBST(SYSTEM_BLUEZ)
11844 dnl ===================================================================
11845 dnl Check whether to enable GIO support
11846 dnl ===================================================================
11847 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11848     AC_MSG_CHECKING([whether to enable GIO support])
11849     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
11850         dnl Need at least 2.26 for the dbus support.
11851         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
11852                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
11853         if test "$ENABLE_GIO" = "TRUE"; then
11854             AC_DEFINE(ENABLE_GIO)
11855             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11856             FilterLibs "${GIO_LIBS}"
11857             GIO_LIBS="${filteredlibs}"
11858         fi
11859     else
11860         AC_MSG_RESULT([no])
11861     fi
11863 AC_SUBST(ENABLE_GIO)
11864 AC_SUBST(GIO_CFLAGS)
11865 AC_SUBST(GIO_LIBS)
11868 dnl ===================================================================
11870 SPLIT_APP_MODULES=""
11871 if test "$enable_split_app_modules" = "yes"; then
11872     SPLIT_APP_MODULES="TRUE"
11874 AC_SUBST(SPLIT_APP_MODULES)
11876 SPLIT_OPT_FEATURES=""
11877 if test "$enable_split_opt_features" = "yes"; then
11878     SPLIT_OPT_FEATURES="TRUE"
11880 AC_SUBST(SPLIT_OPT_FEATURES)
11882 dnl ===================================================================
11883 dnl Check whether the GStreamer libraries are available.
11884 dnl ===================================================================
11886 ENABLE_GSTREAMER_1_0=""
11888 if test "$test_gstreamer_1_0" = yes; then
11890     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
11891     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
11892         ENABLE_GSTREAMER_1_0="TRUE"
11893         AC_MSG_RESULT([yes])
11894         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
11895         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11896         FilterLibs "${GSTREAMER_1_0_LIBS}"
11897         GSTREAMER_1_0_LIBS="${filteredlibs}"
11898         AC_DEFINE(ENABLE_GSTREAMER_1_0)
11899     else
11900         AC_MSG_RESULT([no])
11901     fi
11903 AC_SUBST(GSTREAMER_1_0_CFLAGS)
11904 AC_SUBST(GSTREAMER_1_0_LIBS)
11905 AC_SUBST(ENABLE_GSTREAMER_1_0)
11907 ENABLE_OPENGL_TRANSITIONS=
11908 ENABLE_OPENGL_CANVAS=
11909 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
11910    : # disable
11911 elif test "$_os" = "Darwin"; then
11912     # We use frameworks on macOS, no need for detail checks
11913     ENABLE_OPENGL_TRANSITIONS=TRUE
11914     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11915     ENABLE_OPENGL_CANVAS=TRUE
11916 elif test $_os = WINNT; then
11917     ENABLE_OPENGL_TRANSITIONS=TRUE
11918     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11919     ENABLE_OPENGL_CANVAS=TRUE
11920 else
11921     if test "$USING_X11" = TRUE; then
11922         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
11923         ENABLE_OPENGL_TRANSITIONS=TRUE
11924         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11925         ENABLE_OPENGL_CANVAS=TRUE
11926     fi
11929 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
11930 AC_SUBST(ENABLE_OPENGL_CANVAS)
11932 dnl =================================================
11933 dnl Check whether to build with OpenCL support.
11934 dnl =================================================
11936 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
11937     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
11938     # platform (optional at run-time, used through clew).
11939     BUILD_TYPE="$BUILD_TYPE OPENCL"
11940     AC_DEFINE(HAVE_FEATURE_OPENCL)
11943 dnl =================================================
11944 dnl Check whether to build with dconf support.
11945 dnl =================================================
11947 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
11948     PKG_CHECK_MODULES([DCONF], [dconf >= 0.15.2], [], [
11949         if test "$enable_dconf" = yes; then
11950             AC_MSG_ERROR([dconf not found])
11951         else
11952             enable_dconf=no
11953         fi])
11955 AC_MSG_CHECKING([whether to enable dconf])
11956 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
11957     DCONF_CFLAGS=
11958     DCONF_LIBS=
11959     ENABLE_DCONF=
11960     AC_MSG_RESULT([no])
11961 else
11962     ENABLE_DCONF=TRUE
11963     AC_DEFINE(ENABLE_DCONF)
11964     AC_MSG_RESULT([yes])
11966 AC_SUBST([DCONF_CFLAGS])
11967 AC_SUBST([DCONF_LIBS])
11968 AC_SUBST([ENABLE_DCONF])
11970 # pdf import?
11971 AC_MSG_CHECKING([whether to build the PDF import feature])
11972 ENABLE_PDFIMPORT=
11973 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
11974     AC_MSG_RESULT([yes])
11975     ENABLE_PDFIMPORT=TRUE
11976     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
11977 else
11978     AC_MSG_RESULT([no])
11981 # Pdfium?
11982 AC_MSG_CHECKING([whether to build PDFium])
11983 ENABLE_PDFIUM=
11984 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
11985     AC_MSG_RESULT([yes])
11986     ENABLE_PDFIUM=TRUE
11987     BUILD_TYPE="$BUILD_TYPE PDFIUM"
11988 else
11989     AC_MSG_RESULT([no])
11991 AC_SUBST(ENABLE_PDFIUM)
11993 if test "$ENABLE_PDFIUM" = "TRUE"; then
11994     AC_MSG_CHECKING([which OpenJPEG library to use])
11995     if test "$with_system_openjpeg" = "yes"; then
11996         SYSTEM_OPENJPEG2=TRUE
11997         AC_MSG_RESULT([external])
11998         PKG_CHECK_MODULES( OPENJPEG2, libopenjp2 )
11999         OPENJPEG2_CFLAGS=$(printf '%s' "$OPENJPEG2_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12000         FilterLibs "${OPENJPEG2_LIBS}"
12001         OPENJPEG2_LIBS="${filteredlibs}"
12002     else
12003         SYSTEM_OPENJPEG2=FALSE
12004         AC_MSG_RESULT([internal])
12005     fi
12007     AC_MSG_CHECKING([which Abseil library to use])
12008     if test "$with_system_abseil" = "yes"; then
12009         AC_MSG_RESULT([external])
12010         SYSTEM_ABSEIL=TRUE
12011         AC_LANG_PUSH([C++])
12012         AC_CHECK_HEADER(absl/types/bad_optional_access.h, [],
12013                         [AC_MSG_ERROR(abseil headers not found.)], [])
12014         AC_CHECK_LIB([absl_bad_optional_access], [main], [ABSEIL_LIBS=-labsl_bad_optional_access],
12015                      [AC_MSG_ERROR([libabsl_bad_optional_access library not found.])])
12016         AC_LANG_POP([C++])
12017         ABSEIL_CFLAGS=$(printf '%s' "$ABSEIL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12018         FilterLibs "${ABSEIL_LIBS}"
12019         ABSEIL_LIBS="${filteredlibs}"
12020     else
12021         AC_MSG_RESULT([internal])
12022     fi
12024 AC_SUBST(SYSTEM_OPENJPEG2)
12025 AC_SUBST(SYSTEM_ABSEIL)
12026 AC_SUBST(ABSEIL_CFLAGS)
12027 AC_SUBST(ABSEIL_LIBS)
12029 dnl ===================================================================
12030 dnl Check for poppler
12031 dnl ===================================================================
12032 ENABLE_POPPLER=
12033 AC_MSG_CHECKING([whether to build Poppler])
12034 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
12035     AC_MSG_RESULT([yes])
12036     ENABLE_POPPLER=TRUE
12037     AC_DEFINE(HAVE_FEATURE_POPPLER)
12038 else
12039     AC_MSG_RESULT([no])
12041 AC_SUBST(ENABLE_POPPLER)
12043 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
12044     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
12047 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
12048     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
12051 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
12052     dnl ===================================================================
12053     dnl Check for system poppler
12054     dnl ===================================================================
12055     AC_MSG_CHECKING([which PDF import poppler to use])
12056     if test "$with_system_poppler" = "yes"; then
12057         AC_MSG_RESULT([external])
12058         SYSTEM_POPPLER=TRUE
12059         PKG_CHECK_MODULES(POPPLER,[poppler >= 0.14 poppler-cpp])
12060         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12061         FilterLibs "${POPPLER_LIBS}"
12062         POPPLER_LIBS="${filteredlibs}"
12063     else
12064         AC_MSG_RESULT([internal])
12065         SYSTEM_POPPLER=
12066         BUILD_TYPE="$BUILD_TYPE POPPLER"
12067     fi
12068     AC_DEFINE([ENABLE_PDFIMPORT],1)
12070 AC_SUBST(ENABLE_PDFIMPORT)
12071 AC_SUBST(SYSTEM_POPPLER)
12072 AC_SUBST(POPPLER_CFLAGS)
12073 AC_SUBST(POPPLER_LIBS)
12075 # Skia?
12076 ENABLE_SKIA=
12077 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
12078     # Skia now requires at least freetype2 >= 2.8.1, which is less that what LO requires as system freetype.
12079     if test "$SYSTEM_FREETYPE" = TRUE; then
12080         PKG_CHECK_EXISTS(freetype2 >= 21.0.15, # 21.0.15 = 2.8.1
12081             [skia_freetype_ok=yes],
12082             [skia_freetype_ok=no])
12083     else # internal is ok
12084         skia_freetype_ok=yes
12085     fi
12086     AC_MSG_CHECKING([whether to build Skia])
12087     if test "$skia_freetype_ok" = "yes"; then
12088         if test "$enable_skia" = "debug"; then
12089             AC_MSG_RESULT([yes (debug)])
12090             ENABLE_SKIA_DEBUG=TRUE
12091         else
12092             AC_MSG_RESULT([yes])
12093             ENABLE_SKIA_DEBUG=
12094         fi
12095         ENABLE_SKIA=TRUE
12096         AC_DEFINE(HAVE_FEATURE_SKIA)
12097         BUILD_TYPE="$BUILD_TYPE SKIA"
12099         if test "$OS" = "MACOSX"; then
12100             AC_DEFINE(SK_SUPPORT_GPU,1)
12101             AC_DEFINE(SK_METAL,1)
12102             SKIA_GPU=METAL
12103             AC_SUBST(SKIA_GPU)
12104         else
12105             AC_DEFINE(SK_SUPPORT_GPU,1)
12106             AC_DEFINE(SK_VULKAN,1)
12107             SKIA_GPU=VULKAN
12108             AC_SUBST(SKIA_GPU)
12109         fi
12111         if test -n "$MAC_OS_X_VERSION_MIN_REQUIRED" && test "$MAC_OS_X_VERSION_MIN_REQUIRED" -lt "101200"; then
12112             SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX=1
12113             AC_SUBST(SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX)
12114         fi
12115     else
12116         AC_MSG_RESULT([no (freetype too old)])
12117         add_warning "freetype version is too old for Skia library, at least 2.8.1 required, Skia support disabled"
12118     fi
12120 else
12121     AC_MSG_CHECKING([whether to build Skia])
12122     AC_MSG_RESULT([no])
12124 AC_SUBST(ENABLE_SKIA)
12125 AC_SUBST(ENABLE_SKIA_DEBUG)
12127 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
12128 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
12129 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
12130 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
12131 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
12132 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
12133 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
12134 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F=
12135 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
12136 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
12137 HAVE_LO_CLANG_DLLEXPORTINLINES=
12139 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE; then
12140     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12141         AC_MSG_CHECKING([for Clang])
12142         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
12143     else
12144         if test "$_os" = "WINNT"; then
12145             AC_MSG_CHECKING([for clang-cl])
12146             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
12147                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
12148             elif test -n "$PROGRAMFILES" -a -x "$PROGRAMFILES/LLVM/bin/clang-cl.exe"; then
12149                 LO_CLANG_CC=`win_short_path_for_make "$PROGRAMFILES/LLVM/bin/clang-cl.exe"`
12150             elif test -x "c:/Program Files/LLVM/bin/clang-cl.exe"; then
12151                 LO_CLANG_CC=`win_short_path_for_make "c:/Program Files/LLVM/bin/clang-cl.exe"`
12152             fi
12153             if test -n "$LO_CLANG_CC"; then
12154                 dnl explicitly set -m32/-m64
12155                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
12156                 LO_CLANG_CXX="$LO_CLANG_CC"
12157                 AC_MSG_RESULT([$LO_CLANG_CC])
12158             else
12159                 AC_MSG_RESULT([no])
12160             fi
12162             AC_MSG_CHECKING([the dependency generation prefix (clang.exe -showIncludes)])
12163             echo "#include <stdlib.h>" > conftest.c
12164             LO_CLANG_SHOWINCLUDES_PREFIX=`$LO_CLANG_CC $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
12165                 grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
12166             rm -f conftest.c conftest.obj
12167             if test -z "$LO_CLANG_SHOWINCLUDES_PREFIX"; then
12168                 AC_MSG_ERROR([cannot determine the -showIncludes prefix])
12169             else
12170                 AC_MSG_RESULT(["$LO_CLANG_SHOWINCLUDES_PREFIX"])
12171             fi
12172         else
12173             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
12174             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
12175         fi
12176     fi
12177     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12178         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
12179         clang2_ver=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
12180         if test "$clang2_ver" -lt 50002; then
12181             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
12182             LO_CLANG_CC=
12183             LO_CLANG_CXX=
12184         fi
12185     fi
12186     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX" -a "$_os" = "WINNT"; then
12187         save_CXX="$CXX"
12188         CXX="$LO_CLANG_CXX"
12189         AC_MSG_CHECKING([whether $CXX supports -Zc:dllexportInlines-])
12190         AC_LANG_PUSH([C++])
12191         save_CXXFLAGS=$CXXFLAGS
12192         CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
12193         AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
12194                 HAVE_LO_CLANG_DLLEXPORTINLINES=TRUE
12195                 AC_MSG_RESULT([yes])
12196             ], [AC_MSG_RESULT([no])])
12197         CXXFLAGS=$save_CXXFLAGS
12198         AC_LANG_POP([C++])
12199         CXX="$save_CXX"
12200         if test -z "$HAVE_LO_CLANG_DLLEXPORTINLINES"; then
12201             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.])
12202         fi
12203     fi
12204     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
12205         # Skia is the default on Windows and Mac, so hard-require Clang.
12206         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
12207         if test "$_os" = "WINNT" -o "$_os" = "Darwin"; then
12208             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang, or use --disable-skia.])
12209         else
12210             AC_MSG_WARN([Clang compiler not found.])
12211         fi
12212     else
12214         save_CXX="$CXX"
12215         CXX="$LO_CLANG_CXX"
12216         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
12217         flag_sse2=-msse2
12218         flag_ssse3=-mssse3
12219         flag_sse41=-msse4.1
12220         flag_sse42=-msse4.2
12221         flag_avx=-mavx
12222         flag_avx2=-mavx2
12223         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
12224         flag_avx512f=-mavx512f
12225         flag_f16c=-mf16c
12226         flag_fma=-mfma
12228         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
12229         AC_LANG_PUSH([C++])
12230         save_CXXFLAGS=$CXXFLAGS
12231         CXXFLAGS="$CXXFLAGS $flag_sse2"
12232         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12233             #include <emmintrin.h>
12234             int main () {
12235                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12236                 c = _mm_xor_si128 (a, b);
12237                 return 0;
12238             }
12239             ])],
12240             [can_compile_sse2=yes],
12241             [can_compile_sse2=no])
12242         AC_LANG_POP([C++])
12243         CXXFLAGS=$save_CXXFLAGS
12244         AC_MSG_RESULT([${can_compile_sse2}])
12245         if test "${can_compile_sse2}" = "yes" ; then
12246             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
12247         fi
12249         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
12250         AC_LANG_PUSH([C++])
12251         save_CXXFLAGS=$CXXFLAGS
12252         CXXFLAGS="$CXXFLAGS $flag_ssse3"
12253         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12254             #include <tmmintrin.h>
12255             int main () {
12256                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12257                 c = _mm_maddubs_epi16 (a, b);
12258                 return 0;
12259             }
12260             ])],
12261             [can_compile_ssse3=yes],
12262             [can_compile_ssse3=no])
12263         AC_LANG_POP([C++])
12264         CXXFLAGS=$save_CXXFLAGS
12265         AC_MSG_RESULT([${can_compile_ssse3}])
12266         if test "${can_compile_ssse3}" = "yes" ; then
12267             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
12268         fi
12270         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
12271         AC_LANG_PUSH([C++])
12272         save_CXXFLAGS=$CXXFLAGS
12273         CXXFLAGS="$CXXFLAGS $flag_sse41"
12274         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12275             #include <smmintrin.h>
12276             int main () {
12277                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12278                 c = _mm_cmpeq_epi64 (a, b);
12279                 return 0;
12280             }
12281             ])],
12282             [can_compile_sse41=yes],
12283             [can_compile_sse41=no])
12284         AC_LANG_POP([C++])
12285         CXXFLAGS=$save_CXXFLAGS
12286         AC_MSG_RESULT([${can_compile_sse41}])
12287         if test "${can_compile_sse41}" = "yes" ; then
12288             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12289         fi
12291         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12292         AC_LANG_PUSH([C++])
12293         save_CXXFLAGS=$CXXFLAGS
12294         CXXFLAGS="$CXXFLAGS $flag_sse42"
12295         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12296             #include <nmmintrin.h>
12297             int main () {
12298                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12299                 c = _mm_cmpgt_epi64 (a, b);
12300                 return 0;
12301             }
12302             ])],
12303             [can_compile_sse42=yes],
12304             [can_compile_sse42=no])
12305         AC_LANG_POP([C++])
12306         CXXFLAGS=$save_CXXFLAGS
12307         AC_MSG_RESULT([${can_compile_sse42}])
12308         if test "${can_compile_sse42}" = "yes" ; then
12309             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12310         fi
12312         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12313         AC_LANG_PUSH([C++])
12314         save_CXXFLAGS=$CXXFLAGS
12315         CXXFLAGS="$CXXFLAGS $flag_avx"
12316         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12317             #include <immintrin.h>
12318             int main () {
12319                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12320                 c = _mm256_xor_ps(a, b);
12321                 return 0;
12322             }
12323             ])],
12324             [can_compile_avx=yes],
12325             [can_compile_avx=no])
12326         AC_LANG_POP([C++])
12327         CXXFLAGS=$save_CXXFLAGS
12328         AC_MSG_RESULT([${can_compile_avx}])
12329         if test "${can_compile_avx}" = "yes" ; then
12330             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12331         fi
12333         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12334         AC_LANG_PUSH([C++])
12335         save_CXXFLAGS=$CXXFLAGS
12336         CXXFLAGS="$CXXFLAGS $flag_avx2"
12337         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12338             #include <immintrin.h>
12339             int main () {
12340                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12341                 c = _mm256_maddubs_epi16(a, b);
12342                 return 0;
12343             }
12344             ])],
12345             [can_compile_avx2=yes],
12346             [can_compile_avx2=no])
12347         AC_LANG_POP([C++])
12348         CXXFLAGS=$save_CXXFLAGS
12349         AC_MSG_RESULT([${can_compile_avx2}])
12350         if test "${can_compile_avx2}" = "yes" ; then
12351             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12352         fi
12354         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12355         AC_LANG_PUSH([C++])
12356         save_CXXFLAGS=$CXXFLAGS
12357         CXXFLAGS="$CXXFLAGS $flag_avx512"
12358         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12359             #include <immintrin.h>
12360             int main () {
12361                 __m512i a = _mm512_loadu_si512(0);
12362                 __m512d v1 = _mm512_load_pd(0);
12363                 // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
12364                 __m512d v2 = _mm512_abs_pd(v1);
12365                 return 0;
12366             }
12367             ])],
12368             [can_compile_avx512=yes],
12369             [can_compile_avx512=no])
12370         AC_LANG_POP([C++])
12371         CXXFLAGS=$save_CXXFLAGS
12372         AC_MSG_RESULT([${can_compile_avx512}])
12373         if test "${can_compile_avx512}" = "yes" ; then
12374             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12375             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
12376         fi
12378         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12379         AC_LANG_PUSH([C++])
12380         save_CXXFLAGS=$CXXFLAGS
12381         CXXFLAGS="$CXXFLAGS $flag_f16c"
12382         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12383             #include <immintrin.h>
12384             int main () {
12385                 __m128i a = _mm_set1_epi32 (0);
12386                 __m128 c;
12387                 c = _mm_cvtph_ps(a);
12388                 return 0;
12389             }
12390             ])],
12391             [can_compile_f16c=yes],
12392             [can_compile_f16c=no])
12393         AC_LANG_POP([C++])
12394         CXXFLAGS=$save_CXXFLAGS
12395         AC_MSG_RESULT([${can_compile_f16c}])
12396         if test "${can_compile_f16c}" = "yes" ; then
12397             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12398         fi
12400         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12401         AC_LANG_PUSH([C++])
12402         save_CXXFLAGS=$CXXFLAGS
12403         CXXFLAGS="$CXXFLAGS $flag_fma"
12404         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12405             #include <immintrin.h>
12406             int main () {
12407                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12408                 d = _mm256_fmadd_ps(a, b, c);
12409                 return 0;
12410             }
12411             ])],
12412             [can_compile_fma=yes],
12413             [can_compile_fma=no])
12414         AC_LANG_POP([C++])
12415         CXXFLAGS=$save_CXXFLAGS
12416         AC_MSG_RESULT([${can_compile_fma}])
12417         if test "${can_compile_fma}" = "yes" ; then
12418             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12419         fi
12421         CXX="$save_CXX"
12422     fi
12425 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12427 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12428     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12429     AC_LANG_PUSH([C])
12430     save_CC="$CC"
12431     CC="$LO_CLANG_CC"
12432     save_CFLAGS=$CFLAGS
12433     CFLAGS="$CFLAGS --ccache-skip -O2 -Werror"
12434     dnl an empty program will do, we're checking the compiler flags
12435     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12436                       [use_ccache=yes], [use_ccache=no])
12437     CFLAGS=$save_CFLAGS
12438     CC=$save_CC
12439     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12440         AC_MSG_RESULT([yes])
12441     else
12442         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12443         AC_MSG_RESULT([no])
12444     fi
12445     AC_LANG_POP([C])
12447     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12448     AC_LANG_PUSH([C++])
12449     save_CXX="$CXX"
12450     CXX="$LO_CLANG_CXX"
12451     save_CXXFLAGS=$CXXFLAGS
12452     CXXFLAGS="$CXXFLAGS --ccache-skip -O2 -Werror"
12453     dnl an empty program will do, we're checking the compiler flags
12454     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12455                       [use_ccache=yes], [use_ccache=no])
12456     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12457         AC_MSG_RESULT([yes])
12458     else
12459         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12460         AC_MSG_RESULT([no])
12461     fi
12462     CXXFLAGS=$save_CXXFLAGS
12463     CXX=$save_CXX
12464     AC_LANG_POP([C++])
12467 AC_SUBST(LO_CLANG_CC)
12468 AC_SUBST(LO_CLANG_CXX)
12469 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12470 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12471 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12472 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12473 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12474 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12475 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12476 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F)
12477 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12478 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12479 AC_SUBST(LO_CLANG_SHOWINCLUDES_PREFIX)
12480 AC_SUBST(CLANG_USE_LD)
12481 AC_SUBST([HAVE_LO_CLANG_DLLEXPORTINLINES])
12483 SYSTEM_GPGMEPP=
12485 AC_MSG_CHECKING([whether to enable gpgmepp])
12486 if test "$enable_gpgmepp" = no; then
12487     AC_MSG_RESULT([no])
12488 elif test "$enable_mpl_subset" = "yes"; then
12489     AC_MSG_RESULT([no (MPL only])
12490 elif test "$enable_fuzzers" = "yes"; then
12491     AC_MSG_RESULT([no (oss-fuzz)])
12492 elif test \( \( "$_os" = "Linux" -o "$_os" = "Darwin" \) -a "$ENABLE_NSS" = TRUE \) -o "$_os" = "WINNT" ; then
12493     AC_MSG_RESULT([yes])
12494     dnl ===================================================================
12495     dnl Check for system gpgme
12496     dnl ===================================================================
12497     AC_MSG_CHECKING([which gpgmepp to use])
12498     if test "$with_system_gpgmepp" = "yes"; then
12499         AC_MSG_RESULT([external])
12500         SYSTEM_GPGMEPP=TRUE
12502         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12503         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12504             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp >= 1.14 development package])], [])
12505         # progress_callback is the only func with plain C linkage
12506         # checking for it also filters out older, KDE-dependent libgpgmepp versions
12507         AC_CHECK_LIB(gpgmepp, progress_callback, [ GPGMEPP_LIBS=-lgpgmepp ],
12508             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12509         AC_CHECK_HEADER(gpgme.h, [],
12510             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12511     else
12512         AC_MSG_RESULT([internal])
12513         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12515         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12516         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12517         if test "$_os" != "WINNT"; then
12518             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12519             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12520         fi
12521     fi
12522     ENABLE_GPGMEPP=TRUE
12523     AC_DEFINE([HAVE_FEATURE_GPGME])
12524     AC_PATH_PROG(GPG, gpg)
12525     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12526     # so let's exclude that manually for the moment
12527     if test -n "$GPG" -a "$_os" != "WINNT"; then
12528         # make sure we not only have a working gpgme, but a full working
12529         # gpg installation to run OpenPGP signature verification
12530         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12531     fi
12532     if test "$_os" = "Linux"; then
12533       uid=`id -u`
12534       AC_MSG_CHECKING([for /run/user/$uid])
12535       if test -d /run/user/$uid; then
12536         AC_MSG_RESULT([yes])
12537         AC_PATH_PROG(GPGCONF, gpgconf)
12539         # Older versions of gpgconf are not working as expected, since
12540         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12541         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12542         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12543         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12544         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12545         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12546         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12547           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12548           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12549           if $GPGCONF --dump-options > /dev/null ; then
12550             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12551               AC_MSG_RESULT([yes])
12552               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12553               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12554             else
12555               AC_MSG_RESULT([no])
12556             fi
12557           else
12558             AC_MSG_RESULT([no. missing or broken gpgconf?])
12559           fi
12560         else
12561           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12562         fi
12563       else
12564         AC_MSG_RESULT([no])
12565      fi
12566    fi
12567 else
12568     AC_MSG_RESULT([no (unsupported OS or missing NSS)])
12570 AC_SUBST(ENABLE_GPGMEPP)
12571 AC_SUBST(SYSTEM_GPGMEPP)
12572 AC_SUBST(GPG_ERROR_CFLAGS)
12573 AC_SUBST(GPG_ERROR_LIBS)
12574 AC_SUBST(LIBASSUAN_CFLAGS)
12575 AC_SUBST(LIBASSUAN_LIBS)
12576 AC_SUBST(GPGMEPP_CFLAGS)
12577 AC_SUBST(GPGMEPP_LIBS)
12579 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12580 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12581     AC_MSG_RESULT([yes])
12582     ENABLE_MEDIAWIKI=TRUE
12583     BUILD_TYPE="$BUILD_TYPE XSLTML"
12584     if test  "x$with_java" = "xno"; then
12585         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12586     fi
12587 else
12588     AC_MSG_RESULT([no])
12589     ENABLE_MEDIAWIKI=
12590     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12592 AC_SUBST(ENABLE_MEDIAWIKI)
12594 AC_MSG_CHECKING([whether to build the Report Builder])
12595 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12596     AC_MSG_RESULT([yes])
12597     ENABLE_REPORTBUILDER=TRUE
12598     AC_MSG_CHECKING([which jfreereport libs to use])
12599     if test "$with_system_jfreereport" = "yes"; then
12600         SYSTEM_JFREEREPORT=TRUE
12601         AC_MSG_RESULT([external])
12602         if test -z $SAC_JAR; then
12603             SAC_JAR=/usr/share/java/sac.jar
12604         fi
12605         if ! test -f $SAC_JAR; then
12606              AC_MSG_ERROR(sac.jar not found.)
12607         fi
12609         if test -z $LIBXML_JAR; then
12610             if test -f /usr/share/java/libxml-1.0.0.jar; then
12611                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12612             elif test -f /usr/share/java/libxml.jar; then
12613                 LIBXML_JAR=/usr/share/java/libxml.jar
12614             else
12615                 AC_MSG_ERROR(libxml.jar replacement not found.)
12616             fi
12617         elif ! test -f $LIBXML_JAR; then
12618             AC_MSG_ERROR(libxml.jar not found.)
12619         fi
12621         if test -z $FLUTE_JAR; then
12622             if test -f /usr/share/java/flute-1.3.0.jar; then
12623                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12624             elif test -f /usr/share/java/flute.jar; then
12625                 FLUTE_JAR=/usr/share/java/flute.jar
12626             else
12627                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12628             fi
12629         elif ! test -f $FLUTE_JAR; then
12630             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12631         fi
12633         if test -z $JFREEREPORT_JAR; then
12634             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12635                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12636             elif test -f /usr/share/java/flow-engine.jar; then
12637                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12638             else
12639                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12640             fi
12641         elif ! test -f  $JFREEREPORT_JAR; then
12642                 AC_MSG_ERROR(jfreereport.jar not found.)
12643         fi
12645         if test -z $LIBLAYOUT_JAR; then
12646             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12647                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12648             elif test -f /usr/share/java/liblayout.jar; then
12649                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12650             else
12651                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12652             fi
12653         elif ! test -f $LIBLAYOUT_JAR; then
12654                 AC_MSG_ERROR(liblayout.jar not found.)
12655         fi
12657         if test -z $LIBLOADER_JAR; then
12658             if test -f /usr/share/java/libloader-1.0.0.jar; then
12659                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
12660             elif test -f /usr/share/java/libloader.jar; then
12661                 LIBLOADER_JAR=/usr/share/java/libloader.jar
12662             else
12663                 AC_MSG_ERROR(libloader.jar replacement not found.)
12664             fi
12665         elif ! test -f  $LIBLOADER_JAR; then
12666             AC_MSG_ERROR(libloader.jar not found.)
12667         fi
12669         if test -z $LIBFORMULA_JAR; then
12670             if test -f /usr/share/java/libformula-0.2.0.jar; then
12671                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
12672             elif test -f /usr/share/java/libformula.jar; then
12673                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
12674             else
12675                 AC_MSG_ERROR(libformula.jar replacement not found.)
12676             fi
12677         elif ! test -f $LIBFORMULA_JAR; then
12678                 AC_MSG_ERROR(libformula.jar not found.)
12679         fi
12681         if test -z $LIBREPOSITORY_JAR; then
12682             if test -f /usr/share/java/librepository-1.0.0.jar; then
12683                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
12684             elif test -f /usr/share/java/librepository.jar; then
12685                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
12686             else
12687                 AC_MSG_ERROR(librepository.jar replacement not found.)
12688             fi
12689         elif ! test -f $LIBREPOSITORY_JAR; then
12690             AC_MSG_ERROR(librepository.jar not found.)
12691         fi
12693         if test -z $LIBFONTS_JAR; then
12694             if test -f /usr/share/java/libfonts-1.0.0.jar; then
12695                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
12696             elif test -f /usr/share/java/libfonts.jar; then
12697                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
12698             else
12699                 AC_MSG_ERROR(libfonts.jar replacement not found.)
12700             fi
12701         elif ! test -f $LIBFONTS_JAR; then
12702                 AC_MSG_ERROR(libfonts.jar not found.)
12703         fi
12705         if test -z $LIBSERIALIZER_JAR; then
12706             if test -f /usr/share/java/libserializer-1.0.0.jar; then
12707                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
12708             elif test -f /usr/share/java/libserializer.jar; then
12709                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
12710             else
12711                 AC_MSG_ERROR(libserializer.jar replacement not found.)
12712             fi
12713         elif ! test -f $LIBSERIALIZER_JAR; then
12714                 AC_MSG_ERROR(libserializer.jar not found.)
12715         fi
12717         if test -z $LIBBASE_JAR; then
12718             if test -f /usr/share/java/libbase-1.0.0.jar; then
12719                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
12720             elif test -f /usr/share/java/libbase.jar; then
12721                 LIBBASE_JAR=/usr/share/java/libbase.jar
12722             else
12723                 AC_MSG_ERROR(libbase.jar replacement not found.)
12724             fi
12725         elif ! test -f $LIBBASE_JAR; then
12726             AC_MSG_ERROR(libbase.jar not found.)
12727         fi
12729     else
12730         AC_MSG_RESULT([internal])
12731         SYSTEM_JFREEREPORT=
12732         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
12733         NEED_ANT=TRUE
12734     fi
12735 else
12736     AC_MSG_RESULT([no])
12737     ENABLE_REPORTBUILDER=
12738     SYSTEM_JFREEREPORT=
12740 AC_SUBST(ENABLE_REPORTBUILDER)
12741 AC_SUBST(SYSTEM_JFREEREPORT)
12742 AC_SUBST(SAC_JAR)
12743 AC_SUBST(LIBXML_JAR)
12744 AC_SUBST(FLUTE_JAR)
12745 AC_SUBST(JFREEREPORT_JAR)
12746 AC_SUBST(LIBBASE_JAR)
12747 AC_SUBST(LIBLAYOUT_JAR)
12748 AC_SUBST(LIBLOADER_JAR)
12749 AC_SUBST(LIBFORMULA_JAR)
12750 AC_SUBST(LIBREPOSITORY_JAR)
12751 AC_SUBST(LIBFONTS_JAR)
12752 AC_SUBST(LIBSERIALIZER_JAR)
12754 # scripting provider for BeanShell?
12755 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
12756 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
12757     AC_MSG_RESULT([yes])
12758     ENABLE_SCRIPTING_BEANSHELL=TRUE
12760     dnl ===================================================================
12761     dnl Check for system beanshell
12762     dnl ===================================================================
12763     AC_MSG_CHECKING([which beanshell to use])
12764     if test "$with_system_beanshell" = "yes"; then
12765         AC_MSG_RESULT([external])
12766         SYSTEM_BSH=TRUE
12767         if test -z $BSH_JAR; then
12768             BSH_JAR=/usr/share/java/bsh.jar
12769         fi
12770         if ! test -f $BSH_JAR; then
12771             AC_MSG_ERROR(bsh.jar not found.)
12772         fi
12773     else
12774         AC_MSG_RESULT([internal])
12775         SYSTEM_BSH=
12776         BUILD_TYPE="$BUILD_TYPE BSH"
12777     fi
12778 else
12779     AC_MSG_RESULT([no])
12780     ENABLE_SCRIPTING_BEANSHELL=
12781     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
12783 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
12784 AC_SUBST(SYSTEM_BSH)
12785 AC_SUBST(BSH_JAR)
12787 # scripting provider for JavaScript?
12788 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
12789 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
12790     AC_MSG_RESULT([yes])
12791     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
12793     dnl ===================================================================
12794     dnl Check for system rhino
12795     dnl ===================================================================
12796     AC_MSG_CHECKING([which rhino to use])
12797     if test "$with_system_rhino" = "yes"; then
12798         AC_MSG_RESULT([external])
12799         SYSTEM_RHINO=TRUE
12800         if test -z $RHINO_JAR; then
12801             RHINO_JAR=/usr/share/java/js.jar
12802         fi
12803         if ! test -f $RHINO_JAR; then
12804             AC_MSG_ERROR(js.jar not found.)
12805         fi
12806     else
12807         AC_MSG_RESULT([internal])
12808         SYSTEM_RHINO=
12809         BUILD_TYPE="$BUILD_TYPE RHINO"
12810         NEED_ANT=TRUE
12811     fi
12812 else
12813     AC_MSG_RESULT([no])
12814     ENABLE_SCRIPTING_JAVASCRIPT=
12815     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
12817 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
12818 AC_SUBST(SYSTEM_RHINO)
12819 AC_SUBST(RHINO_JAR)
12821 # This is only used in Qt5/Qt6/KF5 checks to determine if /usr/lib64
12822 # paths should be added to library search path. So lets put all 64-bit
12823 # platforms there.
12824 supports_multilib=
12825 case "$host_cpu" in
12826 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el)
12827     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
12828         supports_multilib="yes"
12829     fi
12830     ;;
12832     ;;
12833 esac
12835 dnl ===================================================================
12836 dnl QT5 Integration
12837 dnl ===================================================================
12839 QT5_CFLAGS=""
12840 QT5_LIBS=""
12841 QMAKE5="qmake"
12842 MOC5="moc"
12843 QT5_GOBJECT_CFLAGS=""
12844 QT5_GOBJECT_LIBS=""
12845 QT5_HAVE_GOBJECT=""
12846 QT5_PLATFORMS_SRCDIR=""
12847 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12848         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
12849         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12850 then
12851     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
12852     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
12854     if test -n "$supports_multilib"; then
12855         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
12856     fi
12858     qt5_test_include="QtWidgets/qapplication.h"
12859     if test "$_os" = "Emscripten"; then
12860         qt5_test_library="libQt5Widgets.a"
12861     else
12862         qt5_test_library="libQt5Widgets.so"
12863     fi
12865     dnl Check for qmake5
12866     if test -n "$QT5DIR"; then
12867         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
12868     else
12869         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
12870     fi
12871     if test "$QMAKE5" = "no"; then
12872         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12873     else
12874         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
12875         if test -z "$qmake5_test_ver"; then
12876             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12877         fi
12878         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
12879         qt5_minimal_minor="6"
12880         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
12881             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
12882         else
12883             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
12884         fi
12885     fi
12887     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
12888     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
12889     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
12890     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
12892     AC_MSG_CHECKING([for Qt5 headers])
12893     qt5_incdir="no"
12894     for inc_dir in $qt5_incdirs; do
12895         if test -r "$inc_dir/$qt5_test_include"; then
12896             qt5_incdir="$inc_dir"
12897             break
12898         fi
12899     done
12900     AC_MSG_RESULT([$qt5_incdir])
12901     if test "x$qt5_incdir" = "xno"; then
12902         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12903     fi
12904     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
12905     AC_LANG_PUSH([C++])
12906     save_CPPFLAGS=$CPPFLAGS
12907     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
12908     AC_CHECK_HEADER(QtCore/qconfig.h, [],
12909         [AC_MSG_ERROR(qconfig.h header not found.)], [])
12910     CPPFLAGS=$save_CPPFLAGS
12911     AC_LANG_POP([C++])
12913     AC_MSG_CHECKING([for Qt5 libraries])
12914     qt5_libdir="no"
12915     for lib_dir in $qt5_libdirs; do
12916         if test -r "$lib_dir/$qt5_test_library"; then
12917             qt5_libdir="$lib_dir"
12918             break
12919         fi
12920     done
12921     AC_MSG_RESULT([$qt5_libdir])
12922     if test "x$qt5_libdir" = "xno"; then
12923         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12924     fi
12926     if test "$_os" = "Emscripten"; then
12927         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
12928             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
12929         fi
12930         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
12931             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
12932         fi
12934         EMSDK_LLVM_NM="$(em-config EMSCRIPTEN_ROOT)"/../bin/llvm-nm
12935         if ! test -x "$EMSDK_LLVM_NM"; then
12936             AC_MSG_ERROR([Missing llvm-nm expected to be found at "$EMSDK_LLVM_NM".])
12937         fi
12938         if test ! -f "${qt5_libdir}"/libQt5Gui.a; then
12939             AC_MSG_ERROR([No Qt5 WASM libQt5Gui.a in ${qt5_libdir}])
12940         fi
12941         QT5_WASM_SJLJ="`${EMSDK_LLVM_NM} "${qt5_libdir}"/libQt5Gui.a 2>/dev/null | $GREP emscripten_longjmp`"
12942         if test "$ENABLE_WASM_EXCEPTIONS" = TRUE -a -n "$QT5_WASM_SJLJ"; then
12943             AC_MSG_ERROR(['emscripten_longjmp' symbol found in libQt5Gui.a (missing '-s SUPPORT_LONGJMP=wasm'). See static/README.wasm.md.])
12944         fi
12945         if test "$ENABLE_WASM_EXCEPTIONS" != TRUE -a -z "$QT5_WASM_SJLJ"; then
12946             AC_MSG_ERROR(['emscripten_longjmp' symbol not found in libQt5Gui.a. You probably use an incompatible Qt build with '-s SUPPORT_LONGJMP=wasm'.])
12947         fi
12948     fi
12950     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
12951     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12952     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
12953     if test "$_os" = "Emscripten"; then
12954         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
12955     fi
12957     if test "$USING_X11" = TRUE; then
12958         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
12959         PKG_CHECK_MODULES(QT5_XCB_ICCCM,[xcb-icccm],[
12960             QT5_HAVE_XCB_ICCCM=1
12961             AC_DEFINE(QT5_HAVE_XCB_ICCCM)
12962         ],[
12963             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)])
12964             add_warning "XCB ICCCM not found, which is needed for Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)"
12965         ])
12966         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
12967         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
12968         QT5_USING_X11=1
12969         AC_DEFINE(QT5_USING_X11)
12970     fi
12972     dnl Check for Meta Object Compiler
12974     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
12975     if test "$MOC5" = "no"; then
12976         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
12977 the root of your Qt installation by exporting QT5DIR before running "configure".])
12978     fi
12980     if test "$test_gstreamer_1_0" = yes; then
12981         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
12982                 QT5_HAVE_GOBJECT=1
12983                 AC_DEFINE(QT5_HAVE_GOBJECT)
12984             ],
12985             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
12986         )
12987     fi
12989 AC_SUBST(QT5_CFLAGS)
12990 AC_SUBST(QT5_LIBS)
12991 AC_SUBST(MOC5)
12992 AC_SUBST(QT5_GOBJECT_CFLAGS)
12993 AC_SUBST(QT5_GOBJECT_LIBS)
12994 AC_SUBST(QT5_HAVE_GOBJECT)
12995 AC_SUBST(QT5_PLATFORMS_SRCDIR)
12997 dnl ===================================================================
12998 dnl QT6 Integration
12999 dnl ===================================================================
13001 QT6_CFLAGS=""
13002 QT6_LIBS=""
13003 QMAKE6="qmake"
13004 MOC6="moc"
13005 QT6_PLATFORMS_SRCDIR=""
13006 if test \( "$test_qt6" = "yes" -a "$ENABLE_QT6" = "TRUE" \)
13007 then
13008     qt6_incdirs="$QT6INC /usr/include/qt6 /usr/include $x_includes"
13009     qt6_libdirs="$QT6LIB /usr/lib/qt6 /usr/lib $x_libraries"
13011     if test -n "$supports_multilib"; then
13012         qt6_libdirs="$qt6_libdirs /usr/lib64/qt6 /usr/lib64/qt /usr/lib64"
13013     fi
13015     qt6_test_include="QtWidgets/qapplication.h"
13016     if test "$_os" = "Emscripten"; then
13017         qt6_test_library="libQt6Widgets.a"
13018     else
13019         qt6_test_library="libQt6Widgets.so"
13020     fi
13022     dnl Check for qmake6
13023     if test -n "$QT6DIR"; then
13024         AC_PATH_PROG(QMAKE6, [qmake], no, [$QT6DIR/bin])
13025     else
13026         AC_PATH_PROGS(QMAKE6, [qmake-qt6 qmake], no)
13027     fi
13028     if test "$QMAKE6" = "no"; then
13029         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13030     else
13031         qmake6_test_ver="`$QMAKE6 -v 2>&1 | $SED -n -e 's/^Using Qt version \(6\.[[0-9.]]\+\).*$/\1/p'`"
13032         if test -z "$qmake6_test_ver"; then
13033             AC_MSG_ERROR([Wrong qmake for Qt6 found. Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13034         fi
13035         AC_MSG_NOTICE([Detected Qt6 version: $qmake6_test_ver])
13036     fi
13038     qt6_incdirs="`$QMAKE6 -query QT_INSTALL_HEADERS` $qt6_incdirs"
13039     qt6_libdirs="`$QMAKE6 -query QT_INSTALL_LIBS` $qt6_libdirs"
13040     qt6_platformsdir="`$QMAKE6 -query QT_INSTALL_PLUGINS`/platforms"
13041     QT6_PLATFORMS_SRCDIR="$qt6_platformsdir"
13043     AC_MSG_CHECKING([for Qt6 headers])
13044     qt6_incdir="no"
13045     for inc_dir in $qt6_incdirs; do
13046         if test -r "$inc_dir/$qt6_test_include"; then
13047             qt6_incdir="$inc_dir"
13048             break
13049         fi
13050     done
13051     AC_MSG_RESULT([$qt6_incdir])
13052     if test "x$qt6_incdir" = "xno"; then
13053         AC_MSG_ERROR([Qt6 headers not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13054     fi
13055     # check for scenario: qt6-qtbase-devel-*.86_64 installed but host is i686
13056     AC_LANG_PUSH([C++])
13057     save_CPPFLAGS=$CPPFLAGS
13058     CPPFLAGS="${CPPFLAGS} -I${qt6_incdir}"
13059     AC_CHECK_HEADER(QtCore/qconfig.h, [],
13060         [AC_MSG_ERROR(qconfig.h header not found.)], [])
13061     CPPFLAGS=$save_CPPFLAGS
13062     AC_LANG_POP([C++])
13064     AC_MSG_CHECKING([for Qt6 libraries])
13065     qt6_libdir="no"
13066     for lib_dir in $qt6_libdirs; do
13067         if test -r "$lib_dir/$qt6_test_library"; then
13068             qt6_libdir="$lib_dir"
13069             break
13070         fi
13071     done
13072     AC_MSG_RESULT([$qt6_libdir])
13073     if test "x$qt6_libdir" = "xno"; then
13074         AC_MSG_ERROR([Qt6 libraries not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13075     fi
13077     if test "$_os" = "Emscripten"; then
13078         if test ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html ; then
13079             QT6_PLATFORMS_SRCDIR="${QT6_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
13080         fi
13081         if test ! -f "${qt6_platformsdir}"/libqwasm.a -o ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html; then
13082             AC_MSG_ERROR([No Qt6 WASM QPA plugin found in ${qt6_platformsdir} or ${QT6_PLATFORMS_SRCDIR}])
13083         fi
13084     fi
13086     QT6_CFLAGS="-I$qt6_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13087     QT6_CFLAGS=$(printf '%s' "$QT6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13088     QT6_LIBS="-L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
13089     if test "$_os" = "Emscripten"; then
13090         QT6_LIBS="$QT6_LIBS -lqtpcre2 -lQt6EventDispatcherSupport -lQt6FontDatabaseSupport -L${qt6_platformsdir} -lqwasm"
13091     fi
13093     if test "$USING_X11" = TRUE; then
13094         PKG_CHECK_MODULES(QT6_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for key modifier handling in X11.])])
13095         QT6_CFLAGS="$QT6_CFLAGS $QT6_XCB_CFLAGS"
13096         QT6_LIBS="$QT6_LIBS $QT6_XCB_LIBS"
13097         QT6_USING_X11=1
13098         AC_DEFINE(QT6_USING_X11)
13099     fi
13101     dnl Check for Meta Object Compiler
13103     AC_PATH_PROGS( MOC6, [moc-qt6 moc], no, [`dirname $qt6_libdir`/libexec:$QT6DIR/libexec:$PATH])
13104     if test "$MOC6" = "no"; then
13105         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13106 the root of your Qt installation by exporting QT6DIR before running "configure".])
13107     fi
13109 AC_SUBST(QT6_CFLAGS)
13110 AC_SUBST(QT6_LIBS)
13111 AC_SUBST(MOC6)
13112 AC_SUBST(QT6_PLATFORMS_SRCDIR)
13114 dnl ===================================================================
13115 dnl KF5 Integration
13116 dnl ===================================================================
13118 KF5_CFLAGS=""
13119 KF5_LIBS=""
13120 KF5_CONFIG="kf5-config"
13121 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13122         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13123 then
13124     if test "$OS" = "HAIKU"; then
13125         haiku_arch="`echo $RTL_ARCH | tr X x`"
13126         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13127         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13128     fi
13130     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
13131     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
13132     if test -n "$supports_multilib"; then
13133         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
13134     fi
13136     kf5_test_include="KF5/KIOFileWidgets/KFileWidget"
13137     kf5_test_library="libKF5KIOFileWidgets.so"
13138     kf5_libdirs="$qt5_libdir $kf5_libdirs"
13140     dnl kf5 KDE4 support compatibility installed
13141     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
13142     if test "$KF5_CONFIG" != "no"; then
13143         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
13144         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
13145     fi
13147     dnl Check for KF5 headers
13148     AC_MSG_CHECKING([for KF5 headers])
13149     kf5_incdir="no"
13150     for kf5_check in $kf5_incdirs; do
13151         if test -r "$kf5_check/$kf5_test_include"; then
13152             kf5_incdir="$kf5_check/KF5"
13153             break
13154         fi
13155     done
13156     AC_MSG_RESULT([$kf5_incdir])
13157     if test "x$kf5_incdir" = "xno"; then
13158         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13159     fi
13161     dnl Check for KF5 libraries
13162     AC_MSG_CHECKING([for KF5 libraries])
13163     kf5_libdir="no"
13164     for kf5_check in $kf5_libdirs; do
13165         if test -r "$kf5_check/$kf5_test_library"; then
13166             kf5_libdir="$kf5_check"
13167             break
13168         fi
13169     done
13171     AC_MSG_RESULT([$kf5_libdir])
13172     if test "x$kf5_libdir" = "xno"; then
13173         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13174     fi
13176     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"
13177     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13178     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13180     if test "$USING_X11" = TRUE; then
13181         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
13182     fi
13184     AC_LANG_PUSH([C++])
13185     save_CXXFLAGS=$CXXFLAGS
13186     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
13187     AC_MSG_CHECKING([whether KDE is >= 5.0])
13188        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13189 #include <kcoreaddons_version.h>
13191 int main(int argc, char **argv) {
13192        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
13193        else return 1;
13195        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13196     CXXFLAGS=$save_CXXFLAGS
13197     AC_LANG_POP([C++])
13199 AC_SUBST(KF5_CFLAGS)
13200 AC_SUBST(KF5_LIBS)
13202 dnl ===================================================================
13203 dnl Test whether to include Evolution 2 support
13204 dnl ===================================================================
13205 AC_MSG_CHECKING([whether to enable evolution 2 support])
13206 if test "$enable_evolution2" = yes; then
13207     AC_MSG_RESULT([yes])
13208     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
13209     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13210     FilterLibs "${GOBJECT_LIBS}"
13211     GOBJECT_LIBS="${filteredlibs}"
13212     ENABLE_EVOAB2="TRUE"
13213 else
13214     AC_MSG_RESULT([no])
13216 AC_SUBST(ENABLE_EVOAB2)
13217 AC_SUBST(GOBJECT_CFLAGS)
13218 AC_SUBST(GOBJECT_LIBS)
13220 dnl ===================================================================
13221 dnl Test which themes to include
13222 dnl ===================================================================
13223 AC_MSG_CHECKING([which themes to include])
13224 # if none given use default subset of available themes
13225 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
13226     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_svg"
13229 WITH_THEMES=""
13230 if test "x$with_theme" != "xno"; then
13231     for theme in $with_theme; do
13232         case $theme in
13233         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_svg) real_theme="$theme" ;;
13234         default) real_theme=colibre ;;
13235         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
13236         esac
13237         WITH_THEMES=`echo "$WITH_THEMES $real_theme"|tr '\ ' '\n'|sort|uniq|tr '\n' '\ '`
13238     done
13240 AC_MSG_RESULT([$WITH_THEMES])
13241 AC_SUBST([WITH_THEMES])
13242 # FIXME: remove this, and the convenience default->colibre remapping after a grace period
13243 for theme in $with_theme; do
13244     case $theme in
13245     default) AC_MSG_WARN([--with-theme=default is deprecated and will be removed, use --with-theme=colibre]) ;;
13246     *) ;;
13247     esac
13248 done
13250 ###############################################################################
13251 # Extensions checking
13252 ###############################################################################
13253 AC_MSG_CHECKING([for extensions integration])
13254 if test "x$enable_extension_integration" != "xno"; then
13255     WITH_EXTENSION_INTEGRATION=TRUE
13256     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
13257     AC_MSG_RESULT([yes, use integration])
13258 else
13259     WITH_EXTENSION_INTEGRATION=
13260     AC_MSG_RESULT([no, do not integrate])
13262 AC_SUBST(WITH_EXTENSION_INTEGRATION)
13264 dnl Should any extra extensions be included?
13265 dnl There are standalone tests for each of these below.
13266 WITH_EXTRA_EXTENSIONS=
13267 AC_SUBST([WITH_EXTRA_EXTENSIONS])
13269 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
13270 if test "x$with_java" != "xno"; then
13271     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
13274 AC_MSG_CHECKING([whether to build opens___.ttf])
13275 if test "$enable_build_opensymbol" = "yes"; then
13276     AC_MSG_RESULT([yes])
13277     AC_PATH_PROG(FONTFORGE, fontforge)
13278     if test -z "$FONTFORGE"; then
13279         AC_MSG_ERROR([fontforge not installed])
13280     fi
13281 else
13282     AC_MSG_RESULT([no])
13283     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
13285 AC_SUBST(FONTFORGE)
13287 dnl ===================================================================
13288 dnl Test whether to include fonts
13289 dnl ===================================================================
13290 AC_MSG_CHECKING([whether to include third-party fonts])
13291 if test "$with_fonts" != "no"; then
13292     AC_MSG_RESULT([yes])
13293     WITH_FONTS=TRUE
13294     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
13295     AC_DEFINE(HAVE_MORE_FONTS)
13296 else
13297     AC_MSG_RESULT([no])
13298     WITH_FONTS=
13299     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
13301 AC_SUBST(WITH_FONTS)
13304 dnl ===================================================================
13305 dnl Test whether to enable online update service
13306 dnl ===================================================================
13307 AC_MSG_CHECKING([whether to enable online update])
13308 ENABLE_ONLINE_UPDATE=
13309 ENABLE_ONLINE_UPDATE_MAR=
13310 UPDATE_CONFIG=
13311 if test "$enable_online_update" = ""; then
13312     AC_MSG_RESULT([no])
13313 else
13314     if test "$enable_online_update" = "mar"; then
13315         AC_MSG_RESULT([yes - MAR-based online update])
13316         ENABLE_ONLINE_UPDATE_MAR="TRUE"
13317         if test "$with_update_config" = ""; then
13318             AC_MSG_ERROR([mar based online updater needs an update config specified with "with-update-config])
13319         fi
13320         UPDATE_CONFIG="$with_update_config"
13321         AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
13322     elif test "$enable_online_update" = "yes"; then
13323         AC_MSG_RESULT([yes])
13324         ENABLE_ONLINE_UPDATE="TRUE"
13325     else
13326         AC_MSG_RESULT([no])
13327     fi
13329 AC_SUBST(ENABLE_ONLINE_UPDATE)
13330 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
13331 AC_SUBST(UPDATE_CONFIG)
13334 PRIVACY_POLICY_URL="$with_privacy_policy_url"
13335 if test "$ENABLE_ONLINE_UPDATE" = TRUE -o "$ENABLE_BREAKPAD" = "TRUE"; then
13336     if test "x$with_privacy_policy_url" = "xundefined"; then
13337         AC_MSG_FAILURE([online update or breakpad/crashreporting are enabled, but no --with-privacy-policy-url=... was provided])
13338     fi
13340 AC_SUBST(PRIVACY_POLICY_URL)
13341 dnl ===================================================================
13342 dnl Test whether we need bzip2
13343 dnl ===================================================================
13344 SYSTEM_BZIP2=
13345 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE"; then
13346     AC_MSG_CHECKING([whether to use system bzip2])
13347     if test "$with_system_bzip2" = yes; then
13348         SYSTEM_BZIP2=TRUE
13349         AC_MSG_RESULT([yes])
13350         PKG_CHECK_MODULES(BZIP2, bzip2)
13351         FilterLibs "${BZIP2_LIBS}"
13352         BZIP2_LIBS="${filteredlibs}"
13353     else
13354         AC_MSG_RESULT([no])
13355         BUILD_TYPE="$BUILD_TYPE BZIP2"
13356     fi
13358 AC_SUBST(SYSTEM_BZIP2)
13359 AC_SUBST(BZIP2_CFLAGS)
13360 AC_SUBST(BZIP2_LIBS)
13362 dnl ===================================================================
13363 dnl Test whether to enable extension update
13364 dnl ===================================================================
13365 AC_MSG_CHECKING([whether to enable extension update])
13366 ENABLE_EXTENSION_UPDATE=
13367 if test "x$enable_extension_update" = "xno"; then
13368     AC_MSG_RESULT([no])
13369 else
13370     AC_MSG_RESULT([yes])
13371     ENABLE_EXTENSION_UPDATE="TRUE"
13372     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
13373     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
13375 AC_SUBST(ENABLE_EXTENSION_UPDATE)
13378 dnl ===================================================================
13379 dnl Test whether to create MSI with LIMITUI=1 (silent install)
13380 dnl ===================================================================
13381 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
13382 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
13383     AC_MSG_RESULT([no])
13384     ENABLE_SILENT_MSI=
13385 else
13386     AC_MSG_RESULT([yes])
13387     ENABLE_SILENT_MSI=TRUE
13388     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
13390 AC_SUBST(ENABLE_SILENT_MSI)
13392 AC_MSG_CHECKING([whether and how to use Xinerama])
13393 if test "$_os" = "Linux" -o "$_os" = "FreeBSD"; then
13394     if test "$x_libraries" = "default_x_libraries"; then
13395         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
13396         if test "x$XINERAMALIB" = x; then
13397            XINERAMALIB="/usr/lib"
13398         fi
13399     else
13400         XINERAMALIB="$x_libraries"
13401     fi
13402     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13403         # we have both versions, let the user decide but use the dynamic one
13404         # per default
13405         USE_XINERAMA=TRUE
13406         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13407             XINERAMA_LINK=dynamic
13408         else
13409             XINERAMA_LINK=static
13410         fi
13411     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13412         # we have only the dynamic version
13413         USE_XINERAMA=TRUE
13414         XINERAMA_LINK=dynamic
13415     elif test -e "$XINERAMALIB/libXinerama.a"; then
13416         # static version
13417         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13418             USE_XINERAMA=TRUE
13419             XINERAMA_LINK=static
13420         else
13421             USE_XINERAMA=
13422             XINERAMA_LINK=none
13423         fi
13424     else
13425         # no Xinerama
13426         USE_XINERAMA=
13427         XINERAMA_LINK=none
13428     fi
13429     if test "$USE_XINERAMA" = "TRUE"; then
13430         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13431         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13432             [AC_MSG_ERROR(Xinerama header not found.)], [])
13433         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13434         if test "x$XEXTLIB" = x; then
13435            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13436         fi
13437         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13438         if test "$_os" = "FreeBSD"; then
13439             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13440         fi
13441         if test "$_os" = "Linux"; then
13442             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13443         fi
13444         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13445             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13446     else
13447         AC_MSG_RESULT([no, libXinerama not found or wrong architecture.])
13448     fi
13449 else
13450     USE_XINERAMA=
13451     XINERAMA_LINK=none
13452     AC_MSG_RESULT([no])
13454 AC_SUBST(USE_XINERAMA)
13455 AC_SUBST(XINERAMA_LINK)
13457 dnl ===================================================================
13458 dnl Test whether to build cairo or rely on the system version
13459 dnl ===================================================================
13461 if test "$test_cairo" = "yes"; then
13462     AC_MSG_CHECKING([whether to use the system cairo])
13464     : ${with_system_cairo:=$with_system_libs}
13465     if test "$with_system_cairo" = "yes"; then
13466         SYSTEM_CAIRO=TRUE
13467         AC_MSG_RESULT([yes])
13469         PKG_CHECK_MODULES( CAIRO, cairo >= 1.8.0 )
13470         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13471         FilterLibs "${CAIRO_LIBS}"
13472         CAIRO_LIBS="${filteredlibs}"
13474         if test "$test_xrender" = "yes"; then
13475             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13476             AC_LANG_PUSH([C])
13477             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13478 #ifdef PictStandardA8
13479 #else
13480       return fail;
13481 #endif
13482 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13484             AC_LANG_POP([C])
13485         fi
13486     else
13487         AC_MSG_RESULT([no])
13488         BUILD_TYPE="$BUILD_TYPE CAIRO"
13489     fi
13491     if test "$enable_cairo_canvas" != no; then
13492         AC_DEFINE(ENABLE_CAIRO_CANVAS)
13493         ENABLE_CAIRO_CANVAS=TRUE
13494     fi
13497 AC_SUBST(CAIRO_CFLAGS)
13498 AC_SUBST(CAIRO_LIBS)
13499 AC_SUBST(ENABLE_CAIRO_CANVAS)
13500 AC_SUBST(SYSTEM_CAIRO)
13502 dnl ===================================================================
13503 dnl Test whether to use avahi
13504 dnl ===================================================================
13505 if test "$_os" = "WINNT"; then
13506     # Windows uses bundled mDNSResponder
13507     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13508 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13509     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13510                       [ENABLE_AVAHI="TRUE"])
13511     AC_DEFINE(HAVE_FEATURE_AVAHI)
13512     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13513     FilterLibs "${AVAHI_LIBS}"
13514     AVAHI_LIBS="${filteredlibs}"
13517 AC_SUBST(ENABLE_AVAHI)
13518 AC_SUBST(AVAHI_CFLAGS)
13519 AC_SUBST(AVAHI_LIBS)
13521 dnl ===================================================================
13522 dnl Test whether to use liblangtag
13523 dnl ===================================================================
13524 SYSTEM_LIBLANGTAG=
13525 AC_MSG_CHECKING([whether to use system liblangtag])
13526 if test "$with_system_liblangtag" = yes; then
13527     SYSTEM_LIBLANGTAG=TRUE
13528     AC_MSG_RESULT([yes])
13529     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
13530     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
13531     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
13532     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13533     FilterLibs "${LIBLANGTAG_LIBS}"
13534     LIBLANGTAG_LIBS="${filteredlibs}"
13535 else
13536     SYSTEM_LIBLANGTAG=
13537     AC_MSG_RESULT([no])
13538     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
13539     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
13540     if test "$COM" = "MSC"; then
13541         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
13542     else
13543         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
13544     fi
13546 AC_SUBST(SYSTEM_LIBLANGTAG)
13547 AC_SUBST(LIBLANGTAG_CFLAGS)
13548 AC_SUBST(LIBLANGTAG_LIBS)
13550 dnl ===================================================================
13551 dnl Test whether to build libpng or rely on the system version
13552 dnl ===================================================================
13554 LIBPNG_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/libpng"
13555 LIBPNG_LIBS_internal="-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"
13556 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng])
13558 dnl ===================================================================
13559 dnl Test whether to build libwebp or rely on the system version
13560 dnl ===================================================================
13562 libo_CHECK_SYSTEM_MODULE([libwebp],[LIBWEBP],[libwebp])
13564 dnl ===================================================================
13565 dnl Check for runtime JVM search path
13566 dnl ===================================================================
13567 if test "$ENABLE_JAVA" != ""; then
13568     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
13569     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
13570         AC_MSG_RESULT([yes])
13571         if ! test -d "$with_jvm_path"; then
13572             AC_MSG_ERROR(["$with_jvm_path" not a directory])
13573         fi
13574         if ! test -d "$with_jvm_path"jvm; then
13575             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
13576         fi
13577         JVM_ONE_PATH_CHECK="$with_jvm_path"
13578         AC_SUBST(JVM_ONE_PATH_CHECK)
13579     else
13580         AC_MSG_RESULT([no])
13581     fi
13584 dnl ===================================================================
13585 dnl Test for the presence of Ant and that it works
13586 dnl ===================================================================
13588 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
13589     ANT_HOME=; export ANT_HOME
13590     WITH_ANT_HOME=; export WITH_ANT_HOME
13591     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
13592         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
13593             if test "$_os" = "WINNT"; then
13594                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
13595             else
13596                 with_ant_home="$LODE_HOME/opt/ant"
13597             fi
13598         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
13599             with_ant_home="$LODE_HOME/opt/ant"
13600         fi
13601     fi
13602     if test -z "$with_ant_home"; then
13603         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
13604     else
13605         if test "$_os" = "WINNT"; then
13606             # AC_PATH_PROGS needs unix path
13607             with_ant_home=`cygpath -u "$with_ant_home"`
13608         fi
13609         AbsolutePath "$with_ant_home"
13610         with_ant_home=$absolute_path
13611         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
13612         WITH_ANT_HOME=$with_ant_home
13613         ANT_HOME=$with_ant_home
13614     fi
13616     if test -z "$ANT"; then
13617         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
13618     else
13619         # resolve relative or absolute symlink
13620         while test -h "$ANT"; do
13621             a_cwd=`pwd`
13622             a_basename=`basename "$ANT"`
13623             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
13624             cd "`dirname "$ANT"`"
13625             cd "`dirname "$a_script"`"
13626             ANT="`pwd`"/"`basename "$a_script"`"
13627             cd "$a_cwd"
13628         done
13630         AC_MSG_CHECKING([if $ANT works])
13631         mkdir -p conftest.dir
13632         a_cwd=$(pwd)
13633         cd conftest.dir
13634         cat > conftest.java << EOF
13635         public class conftest {
13636             int testmethod(int a, int b) {
13637                     return a + b;
13638             }
13639         }
13642         cat > conftest.xml << EOF
13643         <project name="conftest" default="conftest">
13644         <target name="conftest">
13645             <javac srcdir="." includes="conftest.java">
13646             </javac>
13647         </target>
13648         </project>
13651         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
13652         if test $? = 0 -a -f ./conftest.class; then
13653             AC_MSG_RESULT([Ant works])
13654             if test -z "$WITH_ANT_HOME"; then
13655                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
13656                 if test -z "$ANT_HOME"; then
13657                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
13658                 fi
13659             else
13660                 ANT_HOME="$WITH_ANT_HOME"
13661             fi
13662         else
13663             echo "configure: Ant test failed" >&5
13664             cat conftest.java >&5
13665             cat conftest.xml >&5
13666             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
13667         fi
13668         cd "$a_cwd"
13669         rm -fr conftest.dir
13670     fi
13671     if test -z "$ANT_HOME"; then
13672         ANT_HOME="NO_ANT_HOME"
13673     else
13674         PathFormat "$ANT_HOME"
13675         ANT_HOME="$formatted_path"
13676         PathFormat "$ANT"
13677         ANT="$formatted_path"
13678     fi
13680     dnl Checking for ant.jar
13681     if test "$ANT_HOME" != "NO_ANT_HOME"; then
13682         AC_MSG_CHECKING([Ant lib directory])
13683         if test -f $ANT_HOME/lib/ant.jar; then
13684             ANT_LIB="$ANT_HOME/lib"
13685         else
13686             if test -f $ANT_HOME/ant.jar; then
13687                 ANT_LIB="$ANT_HOME"
13688             else
13689                 if test -f /usr/share/java/ant.jar; then
13690                     ANT_LIB=/usr/share/java
13691                 else
13692                     if test -f /usr/share/ant-core/lib/ant.jar; then
13693                         ANT_LIB=/usr/share/ant-core/lib
13694                     else
13695                         if test -f $ANT_HOME/lib/ant/ant.jar; then
13696                             ANT_LIB="$ANT_HOME/lib/ant"
13697                         else
13698                             if test -f /usr/share/lib/ant/ant.jar; then
13699                                 ANT_LIB=/usr/share/lib/ant
13700                             else
13701                                 AC_MSG_ERROR([Ant libraries not found!])
13702                             fi
13703                         fi
13704                     fi
13705                 fi
13706             fi
13707         fi
13708         PathFormat "$ANT_LIB"
13709         ANT_LIB="$formatted_path"
13710         AC_MSG_RESULT([Ant lib directory found.])
13711     fi
13713     ant_minver=1.6.0
13714     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
13716     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
13717     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
13718     ant_version_major=`echo $ant_version | cut -d. -f1`
13719     ant_version_minor=`echo $ant_version | cut -d. -f2`
13720     echo "configure: ant_version $ant_version " >&5
13721     echo "configure: ant_version_major $ant_version_major " >&5
13722     echo "configure: ant_version_minor $ant_version_minor " >&5
13723     if test "$ant_version_major" -ge "2"; then
13724         AC_MSG_RESULT([yes, $ant_version])
13725     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
13726         AC_MSG_RESULT([yes, $ant_version])
13727     else
13728         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
13729     fi
13731     rm -f conftest* core core.* *.core
13733 AC_SUBST(ANT)
13734 AC_SUBST(ANT_HOME)
13735 AC_SUBST(ANT_LIB)
13737 OOO_JUNIT_JAR=
13738 HAMCREST_JAR=
13739 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
13740     AC_MSG_CHECKING([for JUnit 4])
13741     if test "$with_junit" = "yes"; then
13742         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
13743             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
13744         elif test -e /usr/share/java/junit4.jar; then
13745             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
13746         else
13747            if test -e /usr/share/lib/java/junit.jar; then
13748               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
13749            else
13750               OOO_JUNIT_JAR=/usr/share/java/junit.jar
13751            fi
13752         fi
13753     else
13754         OOO_JUNIT_JAR=$with_junit
13755     fi
13756     if test "$_os" = "WINNT"; then
13757         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
13758     fi
13759     printf 'import org.junit.Before;' > conftest.java
13760     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13761         AC_MSG_RESULT([$OOO_JUNIT_JAR])
13762     else
13763         AC_MSG_ERROR(
13764 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
13765  specify its pathname via --with-junit=..., or disable it via --without-junit])
13766     fi
13767     rm -f conftest.class conftest.java
13768     if test $OOO_JUNIT_JAR != ""; then
13769         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
13770     fi
13772     AC_MSG_CHECKING([for included Hamcrest])
13773     printf 'import org.hamcrest.BaseDescription;' > conftest.java
13774     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13775         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
13776     else
13777         AC_MSG_RESULT([Not included])
13778         AC_MSG_CHECKING([for standalone hamcrest jar.])
13779         if test "$with_hamcrest" = "yes"; then
13780             if test -e /usr/share/lib/java/hamcrest.jar; then
13781                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
13782             elif test -e /usr/share/java/hamcrest/core.jar; then
13783                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
13784             elif test -e /usr/share/java/hamcrest/hamcrest.jar; then
13785                 HAMCREST_JAR=/usr/share/java/hamcrest/hamcrest.jar
13786             else
13787                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
13788             fi
13789         else
13790             HAMCREST_JAR=$with_hamcrest
13791         fi
13792         if test "$_os" = "WINNT"; then
13793             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
13794         fi
13795         if "$JAVACOMPILER" -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
13796             AC_MSG_RESULT([$HAMCREST_JAR])
13797         else
13798             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),
13799                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
13800         fi
13801     fi
13802     rm -f conftest.class conftest.java
13804 AC_SUBST(OOO_JUNIT_JAR)
13805 AC_SUBST(HAMCREST_JAR)
13808 AC_SUBST(SCPDEFS)
13811 # check for wget and curl
13813 WGET=
13814 CURL=
13816 if test "$enable_fetch_external" != "no"; then
13818 CURL=`which curl 2>/dev/null`
13820 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
13821     # wget new enough?
13822     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
13823     if test $? -eq 0; then
13824         WGET=$i
13825         break
13826     fi
13827 done
13829 if test -z "$WGET" -a -z "$CURL"; then
13830     AC_MSG_ERROR([neither wget nor curl found!])
13835 AC_SUBST(WGET)
13836 AC_SUBST(CURL)
13839 # check for sha256sum
13841 SHA256SUM=
13843 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
13844     eval "$i -a 256 --version" > /dev/null 2>&1
13845     ret=$?
13846     if test $ret -eq 0; then
13847         SHA256SUM="$i -a 256"
13848         break
13849     fi
13850 done
13852 if test -z "$SHA256SUM"; then
13853     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
13854         eval "$i --version" > /dev/null 2>&1
13855         ret=$?
13856         if test $ret -eq 0; then
13857             SHA256SUM=$i
13858             break
13859         fi
13860     done
13863 if test -z "$SHA256SUM"; then
13864     AC_MSG_ERROR([no sha256sum found!])
13867 AC_SUBST(SHA256SUM)
13869 dnl ===================================================================
13870 dnl Dealing with l10n options
13871 dnl ===================================================================
13872 AC_MSG_CHECKING([which languages to be built])
13873 # get list of all languages
13874 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
13875 # the sed command does the following:
13876 #   + if a line ends with a backslash, append the next line to it
13877 #   + adds " on the beginning of the value (after =)
13878 #   + adds " at the end of the value
13879 #   + removes en-US; we want to put it on the beginning
13880 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
13881 [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)]
13882 ALL_LANGS="en-US $completelangiso"
13883 # check the configured localizations
13884 WITH_LANG="$with_lang"
13886 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
13887 # (Norwegian is "nb" and "nn".)
13888 if test "$WITH_LANG" = "no"; then
13889     WITH_LANG=
13892 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
13893     AC_MSG_RESULT([en-US])
13894 else
13895     AC_MSG_RESULT([$WITH_LANG])
13896     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
13897     if test -z "$MSGFMT"; then
13898         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
13899             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
13900         elif test -x "/opt/lo/bin/msgfmt"; then
13901             MSGFMT="/opt/lo/bin/msgfmt"
13902         else
13903             AC_CHECK_PROGS(MSGFMT, [msgfmt])
13904             if test -z "$MSGFMT"; then
13905                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
13906             fi
13907         fi
13908     fi
13909     if test -z "$MSGUNIQ"; then
13910         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
13911             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
13912         elif test -x "/opt/lo/bin/msguniq"; then
13913             MSGUNIQ="/opt/lo/bin/msguniq"
13914         else
13915             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
13916             if test -z "$MSGUNIQ"; then
13917                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
13918             fi
13919         fi
13920     fi
13922 AC_SUBST(MSGFMT)
13923 AC_SUBST(MSGUNIQ)
13924 # check that the list is valid
13925 for lang in $WITH_LANG; do
13926     test "$lang" = "ALL" && continue
13927     # need to check for the exact string, so add space before and after the list of all languages
13928     for vl in $ALL_LANGS; do
13929         if test "$vl" = "$lang"; then
13930            break
13931         fi
13932     done
13933     if test "$vl" != "$lang"; then
13934         # if you're reading this - you prolly quoted your languages remove the quotes ...
13935         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
13936     fi
13937 done
13938 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
13939     echo $WITH_LANG | grep -q en-US
13940     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
13942 # list with substituted ALL
13943 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
13944 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
13945 test "$WITH_LANG" = "en-US" && WITH_LANG=
13946 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
13947     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
13948     ALL_LANGS=`echo $ALL_LANGS qtz`
13950 AC_SUBST(ALL_LANGS)
13951 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
13952 AC_SUBST(WITH_LANG)
13953 AC_SUBST(WITH_LANG_LIST)
13954 AC_SUBST(GIT_NEEDED_SUBMODULES)
13956 WITH_POOR_HELP_LOCALIZATIONS=
13957 if test -d "$SRC_ROOT/translations/source"; then
13958     for l in `ls -1 $SRC_ROOT/translations/source`; do
13959         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
13960             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
13961         fi
13962     done
13964 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
13966 if test -n "$with_locales" -a "$with_locales" != ALL; then
13967     WITH_LOCALES="$with_locales"
13969     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
13970     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
13971     # config_host/config_locales.h.in
13972     for locale in $WITH_LOCALES; do
13973         lang=${locale%_*}
13975         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
13977         case $lang in
13978         hi|mr*ne)
13979             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
13980             ;;
13981         bg|ru)
13982             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
13983             ;;
13984         esac
13985     done
13986 else
13987     AC_DEFINE(WITH_LOCALE_ALL)
13989 AC_SUBST(WITH_LOCALES)
13991 dnl git submodule update --reference
13992 dnl ===================================================================
13993 if test -n "${GIT_REFERENCE_SRC}"; then
13994     for repo in ${GIT_NEEDED_SUBMODULES}; do
13995         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
13996             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
13997         fi
13998     done
14000 AC_SUBST(GIT_REFERENCE_SRC)
14002 dnl git submodules linked dirs
14003 dnl ===================================================================
14004 if test -n "${GIT_LINK_SRC}"; then
14005     for repo in ${GIT_NEEDED_SUBMODULES}; do
14006         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
14007             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
14008         fi
14009     done
14011 AC_SUBST(GIT_LINK_SRC)
14013 dnl branding
14014 dnl ===================================================================
14015 AC_MSG_CHECKING([for alternative branding images directory])
14016 # initialize mapped arrays
14017 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
14018 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
14020 if test -z "$with_branding" -o "$with_branding" = "no"; then
14021     AC_MSG_RESULT([none])
14022     DEFAULT_BRAND_IMAGES="$brand_files"
14023 else
14024     if ! test -d $with_branding ; then
14025         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
14026     else
14027         AC_MSG_RESULT([$with_branding])
14028         CUSTOM_BRAND_DIR="$with_branding"
14029         for lfile in $brand_files
14030         do
14031             if ! test -f $with_branding/$lfile ; then
14032                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
14033                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
14034             else
14035                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
14036             fi
14037         done
14038         check_for_progress="yes"
14039     fi
14041 AC_SUBST([BRAND_INTRO_IMAGES])
14042 AC_SUBST([CUSTOM_BRAND_DIR])
14043 AC_SUBST([CUSTOM_BRAND_IMAGES])
14044 AC_SUBST([DEFAULT_BRAND_IMAGES])
14047 AC_MSG_CHECKING([for 'intro' progress settings])
14048 PROGRESSBARCOLOR=
14049 PROGRESSSIZE=
14050 PROGRESSPOSITION=
14051 PROGRESSFRAMECOLOR=
14052 PROGRESSTEXTCOLOR=
14053 PROGRESSTEXTBASELINE=
14055 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
14056     source "$with_branding/progress.conf"
14057     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
14058 else
14059     AC_MSG_RESULT([none])
14062 AC_SUBST(PROGRESSBARCOLOR)
14063 AC_SUBST(PROGRESSSIZE)
14064 AC_SUBST(PROGRESSPOSITION)
14065 AC_SUBST(PROGRESSFRAMECOLOR)
14066 AC_SUBST(PROGRESSTEXTCOLOR)
14067 AC_SUBST(PROGRESSTEXTBASELINE)
14070 dnl ===================================================================
14071 dnl Custom build version
14072 dnl ===================================================================
14073 AC_MSG_CHECKING([for extra build ID])
14074 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
14075     EXTRA_BUILDID="$with_extra_buildid"
14077 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
14078 if test -n "$EXTRA_BUILDID" ; then
14079     AC_MSG_RESULT([$EXTRA_BUILDID])
14080 else
14081     AC_MSG_RESULT([not set])
14083 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
14085 OOO_VENDOR=
14086 AC_MSG_CHECKING([for vendor])
14087 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
14088     OOO_VENDOR="$USERNAME"
14090     if test -z "$OOO_VENDOR"; then
14091         OOO_VENDOR="$USER"
14092     fi
14094     if test -z "$OOO_VENDOR"; then
14095         OOO_VENDOR="`id -u -n`"
14096     fi
14098     AC_MSG_RESULT([not set, using $OOO_VENDOR])
14099 else
14100     OOO_VENDOR="$with_vendor"
14101     AC_MSG_RESULT([$OOO_VENDOR])
14103 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
14104 AC_SUBST(OOO_VENDOR)
14106 if test "$_os" = "Android" ; then
14107     ANDROID_PACKAGE_NAME=
14108     AC_MSG_CHECKING([for Android package name])
14109     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
14110         if test -n "$ENABLE_DEBUG"; then
14111             # Default to the package name that makes ndk-gdb happy.
14112             ANDROID_PACKAGE_NAME="org.libreoffice"
14113         else
14114             ANDROID_PACKAGE_NAME="org.example.libreoffice"
14115         fi
14117         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
14118     else
14119         ANDROID_PACKAGE_NAME="$with_android_package_name"
14120         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
14121     fi
14122     AC_SUBST(ANDROID_PACKAGE_NAME)
14125 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
14126 if test "$with_compat_oowrappers" = "yes"; then
14127     WITH_COMPAT_OOWRAPPERS=TRUE
14128     AC_MSG_RESULT(yes)
14129 else
14130     WITH_COMPAT_OOWRAPPERS=
14131     AC_MSG_RESULT(no)
14133 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
14135 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{print tolower($0)}'`
14136 AC_MSG_CHECKING([for install dirname])
14137 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
14138     INSTALLDIRNAME="$with_install_dirname"
14140 AC_MSG_RESULT([$INSTALLDIRNAME])
14141 AC_SUBST(INSTALLDIRNAME)
14143 AC_MSG_CHECKING([for prefix])
14144 test "x$prefix" = xNONE && prefix=$ac_default_prefix
14145 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
14146 PREFIXDIR="$prefix"
14147 AC_MSG_RESULT([$PREFIXDIR])
14148 AC_SUBST(PREFIXDIR)
14150 LIBDIR=[$(eval echo $(eval echo $libdir))]
14151 AC_SUBST(LIBDIR)
14153 DATADIR=[$(eval echo $(eval echo $datadir))]
14154 AC_SUBST(DATADIR)
14156 MANDIR=[$(eval echo $(eval echo $mandir))]
14157 AC_SUBST(MANDIR)
14159 DOCDIR=[$(eval echo $(eval echo $docdir))]
14160 AC_SUBST(DOCDIR)
14162 BINDIR=[$(eval echo $(eval echo $bindir))]
14163 AC_SUBST(BINDIR)
14165 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
14166 AC_SUBST(INSTALLDIR)
14168 TESTINSTALLDIR="${BUILDDIR}/test-install"
14169 AC_SUBST(TESTINSTALLDIR)
14172 # ===================================================================
14173 # OAuth2 id and secrets
14174 # ===================================================================
14176 AC_MSG_CHECKING([for Google Drive client id and secret])
14177 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
14178     AC_MSG_RESULT([not set])
14179     GDRIVE_CLIENT_ID="\"\""
14180     GDRIVE_CLIENT_SECRET="\"\""
14181 else
14182     AC_MSG_RESULT([set])
14183     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
14184     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
14186 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
14187 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
14189 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
14190 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
14191     AC_MSG_RESULT([not set])
14192     ALFRESCO_CLOUD_CLIENT_ID="\"\""
14193     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
14194 else
14195     AC_MSG_RESULT([set])
14196     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
14197     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
14199 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
14200 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
14202 AC_MSG_CHECKING([for OneDrive client id and secret])
14203 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
14204     AC_MSG_RESULT([not set])
14205     ONEDRIVE_CLIENT_ID="\"\""
14206     ONEDRIVE_CLIENT_SECRET="\"\""
14207 else
14208     AC_MSG_RESULT([set])
14209     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
14210     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
14212 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
14213 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
14216 dnl ===================================================================
14217 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
14218 dnl --enable-dependency-tracking configure option
14219 dnl ===================================================================
14220 AC_MSG_CHECKING([whether to enable dependency tracking])
14221 if test "$enable_dependency_tracking" = "no"; then
14222     nodep=TRUE
14223     AC_MSG_RESULT([no])
14224 else
14225     AC_MSG_RESULT([yes])
14227 AC_SUBST(nodep)
14229 dnl ===================================================================
14230 dnl Number of CPUs to use during the build
14231 dnl ===================================================================
14232 AC_MSG_CHECKING([for number of processors to use])
14233 # plain --with-parallelism is just the default
14234 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
14235     if test "$with_parallelism" = "no"; then
14236         PARALLELISM=0
14237     else
14238         PARALLELISM=$with_parallelism
14239     fi
14240 else
14241     if test "$enable_icecream" = "yes"; then
14242         PARALLELISM="40"
14243     else
14244         case `uname -s` in
14246         Darwin|FreeBSD|NetBSD|OpenBSD)
14247             PARALLELISM=`sysctl -n hw.ncpu`
14248             ;;
14250         Linux)
14251             PARALLELISM=`getconf _NPROCESSORS_ONLN`
14252         ;;
14253         # what else than above does profit here *and* has /proc?
14254         *)
14255             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
14256             ;;
14257         esac
14259         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
14260         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
14261     fi
14264 if test $PARALLELISM -eq 0; then
14265     AC_MSG_RESULT([explicit make -j option needed])
14266 else
14267     AC_MSG_RESULT([$PARALLELISM])
14269 AC_SUBST(PARALLELISM)
14272 # Set up ILIB for MSVC build
14274 ILIB1=
14275 if test "$build_os" = "cygwin"; then
14276     ILIB="."
14277     if test -n "$JAVA_HOME"; then
14278         ILIB="$ILIB;$JAVA_HOME/lib"
14279     fi
14280     ILIB1=-link
14281     ILIB="$ILIB;$COMPATH/lib/$WIN_HOST_ARCH"
14282     ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/$WIN_HOST_ARCH"
14283     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14284     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14285     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
14286         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14287         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14288     fi
14289     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
14290     ucrtlibpath_formatted=$formatted_path
14291     ILIB="$ILIB;$ucrtlibpath_formatted"
14292     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
14293     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
14294         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/lib"
14295     else
14296         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
14297     fi
14299     if test "$cross_compiling" != "yes"; then
14300         ILIB_FOR_BUILD="$ILIB"
14301     fi
14303 AC_SUBST(ILIB)
14304 AC_SUBST(ILIB_FOR_BUILD)
14306 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
14307 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
14308 dnl from consteval constructor initializing const variable",
14309 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
14310 dnl expression' with consteval constructor", <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
14311 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
14312 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'",
14313 dnl <https://developercommunity.visualstudio.com/t/1581879> "Bogus error C7595 with consteval
14314 dnl constructor in ternary expression (/std:c++latest)", or
14315 dnl <https://github.com/llvm/llvm-project/issues/54612> "C++20, consteval, anonymous union:
14316 dnl llvm/lib/IR/Instructions.cpp:1491: void llvm::StoreInst::AssertOK(): Assertion
14317 dnl `cast<PointerType>(getOperand(1)->getType())->isOpaqueOrPointeeTypeMatches(getOperand(0)->getType())
14318 dnl && "Ptr must be a pointer to Val type!"' failed.":
14319 AC_LANG_PUSH([C++])
14320 save_CXX=$CXX
14321 if test "$COM" = MSC && test "$COM_IS_CLANG" != TRUE; then
14322     CXX="env LIB=$ILIB $CXX"
14324 save_CXXFLAGS=$CXXFLAGS
14325 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
14326 AC_RUN_IFELSE([AC_LANG_PROGRAM([
14327         struct S {
14328             consteval S() { i = 1; }
14329             int i = 0;
14330         };
14331         S const s;
14333         struct S1 { consteval S1(int) {} };
14334         struct S2 {
14335             S1 x;
14336             S2(): x(0) {}
14337         };
14339         struct S3 {
14340             consteval S3() {}
14341             union {
14342                 int a;
14343                 unsigned b = 0;
14344             };
14345         };
14346         void f() { S3(); }
14348         struct S4 { consteval S4() = default; };
14349         void f4(bool b) { b ? S4() : S4(); }
14351         struct S5 {
14352             consteval S5() { c = 0; }
14353             char * f() { return &c; }
14354             union {
14355                 char c;
14356                 int i;
14357             };
14358         };
14359         auto s5 = S5().f();
14360     ], [
14361         return (s.i == 1) ? 0 : 1;
14362     ])], [
14363         AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
14364         AC_MSG_RESULT([yes])
14365     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
14366 CXX=$save_CXX
14367 CXXFLAGS=$save_CXXFLAGS
14368 AC_LANG_POP([C++])
14370 # ===================================================================
14371 # Creating bigger shared library to link against
14372 # ===================================================================
14373 AC_MSG_CHECKING([whether to create huge library])
14374 MERGELIBS=
14376 if test $_os = iOS -o $_os = Android; then
14377     # Never any point in mergelibs for these as we build just static
14378     # libraries anyway...
14379     enable_mergelibs=no
14382 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
14383     if test $_os != Linux -a $_os != WINNT; then
14384         add_warning "--enable-mergelibs is not tested for this platform"
14385     fi
14386     MERGELIBS="TRUE"
14387     AC_MSG_RESULT([yes])
14388     AC_DEFINE(ENABLE_MERGELIBS)
14389 else
14390     AC_MSG_RESULT([no])
14392 AC_SUBST([MERGELIBS])
14394 dnl ===================================================================
14395 dnl icerun is a wrapper that stops us spawning tens of processes
14396 dnl locally - for tools that can't be executed on the compile cluster
14397 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
14398 dnl ===================================================================
14399 AC_MSG_CHECKING([whether to use icerun wrapper])
14400 ICECREAM_RUN=
14401 if test "$enable_icecream" = "yes" && which icerun >/dev/null 2>&1 ; then
14402     ICECREAM_RUN=icerun
14403     AC_MSG_RESULT([yes])
14404 else
14405     AC_MSG_RESULT([no])
14407 AC_SUBST(ICECREAM_RUN)
14409 dnl ===================================================================
14410 dnl Setup the ICECC_VERSION for the build the same way it was set for
14411 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
14412 dnl ===================================================================
14413 x_ICECC_VERSION=[\#]
14414 if test -n "$ICECC_VERSION" ; then
14415     x_ICECC_VERSION=
14417 AC_SUBST(x_ICECC_VERSION)
14418 AC_SUBST(ICECC_VERSION)
14420 dnl ===================================================================
14422 AC_MSG_CHECKING([MPL subset])
14423 MPL_SUBSET=
14425 if test "$enable_mpl_subset" = "yes"; then
14426     warn_report=false
14427     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
14428         warn_report=true
14429     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
14430         warn_report=true
14431     fi
14432     if test "$warn_report" = "true"; then
14433         AC_MSG_ERROR([need to --disable-report-builder - extended database report builder.])
14434     fi
14435     if test "x$enable_postgresql_sdbc" != "xno"; then
14436         AC_MSG_ERROR([need to --disable-postgresql-sdbc - the PostgreSQL database backend.])
14437     fi
14438     if test "$enable_lotuswordpro" = "yes"; then
14439         AC_MSG_ERROR([need to --disable-lotuswordpro - a Lotus Word Pro file format import filter.])
14440     fi
14441     if test -n "$ENABLE_POPPLER"; then
14442         if test "x$SYSTEM_POPPLER" = "x"; then
14443             AC_MSG_ERROR([need to disable PDF import via poppler or use system library])
14444         fi
14445     fi
14446     # cf. m4/libo_check_extension.m4
14447     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
14448         AC_MSG_ERROR([need to disable extra extensions '$WITH_EXTRA_EXTENSIONS'])
14449     fi
14450     for theme in $WITH_THEMES; do
14451         case $theme in
14452         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
14453             AC_MSG_ERROR([need to disable icon themes from '$WITH_THEMES': $theme present, use --with-theme=colibre]) ;;
14454         *) : ;;
14455         esac
14456     done
14458     ENABLE_OPENGL_TRANSITIONS=
14460     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
14461         AC_MSG_ERROR([need to --disable-lpsolve - calc linear programming solver.])
14462     fi
14464     MPL_SUBSET="TRUE"
14465     AC_DEFINE(MPL_HAVE_SUBSET)
14466     AC_MSG_RESULT([only])
14467 else
14468     AC_MSG_RESULT([no restrictions])
14470 AC_SUBST(MPL_SUBSET)
14472 dnl ===================================================================
14474 AC_MSG_CHECKING([formula logger])
14475 ENABLE_FORMULA_LOGGER=
14477 if test "x$enable_formula_logger" = "xyes"; then
14478     AC_MSG_RESULT([yes])
14479     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14480     ENABLE_FORMULA_LOGGER=TRUE
14481 elif test -n "$ENABLE_DBGUTIL" ; then
14482     AC_MSG_RESULT([yes])
14483     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14484     ENABLE_FORMULA_LOGGER=TRUE
14485 else
14486     AC_MSG_RESULT([no])
14489 AC_SUBST(ENABLE_FORMULA_LOGGER)
14491 dnl ===================================================================
14492 dnl Checking for active Antivirus software.
14493 dnl ===================================================================
14495 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
14496     AC_MSG_CHECKING([for active Antivirus software])
14497     ANTIVIRUS_LIST=`cscript.exe //Nologo $SRC_ROOT/antivirusDetection.vbs`
14498     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
14499         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
14500             AC_MSG_RESULT([found])
14501             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
14502             echo $EICAR_STRING > $SRC_ROOT/eicar
14503             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
14504             rm $SRC_ROOT/eicar
14505             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14506                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14507             fi
14508             echo $EICAR_STRING > $BUILDDIR/eicar
14509             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
14510             rm $BUILDDIR/eicar
14511             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14512                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14513             fi
14514             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"
14515         else
14516             AC_MSG_RESULT([not found])
14517         fi
14518     else
14519         AC_MSG_RESULT([n/a])
14520     fi
14523 dnl ===================================================================
14524 dnl Setting up the environment.
14525 dnl ===================================================================
14526 AC_MSG_NOTICE([setting up the build environment variables...])
14528 AC_SUBST(COMPATH)
14530 if test "$build_os" = "cygwin"; then
14531     if test -d "$COMPATH/atlmfc/lib/spectre"; then
14532         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
14533         ATL_INCLUDE="$COMPATH/atlmfc/include"
14534     elif test -d "$COMPATH/atlmfc/lib"; then
14535         ATL_LIB="$COMPATH/atlmfc/lib"
14536         ATL_INCLUDE="$COMPATH/atlmfc/include"
14537     else
14538         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
14539         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
14540     fi
14541     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
14542     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
14543     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
14545     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
14546     PathFormat "/usr/bin/find.exe"
14547     FIND="$formatted_path"
14548     PathFormat "/usr/bin/sort.exe"
14549     SORT="$formatted_path"
14550     PathFormat "/usr/bin/grep.exe"
14551     WIN_GREP="$formatted_path"
14552     PathFormat "/usr/bin/ls.exe"
14553     WIN_LS="$formatted_path"
14554     PathFormat "/usr/bin/touch.exe"
14555     WIN_TOUCH="$formatted_path"
14556 else
14557     FIND=find
14558     SORT=sort
14561 AC_SUBST(ATL_INCLUDE)
14562 AC_SUBST(ATL_LIB)
14563 AC_SUBST(FIND)
14564 AC_SUBST(SORT)
14565 AC_SUBST(WIN_GREP)
14566 AC_SUBST(WIN_LS)
14567 AC_SUBST(WIN_TOUCH)
14569 AC_SUBST(BUILD_TYPE)
14571 AC_SUBST(SOLARINC)
14573 PathFormat "$PERL"
14574 PERL="$formatted_path"
14575 AC_SUBST(PERL)
14577 if test -n "$TMPDIR"; then
14578     TEMP_DIRECTORY="$TMPDIR"
14579 else
14580     TEMP_DIRECTORY="/tmp"
14582 if test "$build_os" = "cygwin"; then
14583     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
14585 AC_SUBST(TEMP_DIRECTORY)
14587 # setup the PATH for the environment
14588 if test -n "$LO_PATH_FOR_BUILD"; then
14589     LO_PATH="$LO_PATH_FOR_BUILD"
14590     case "$host_os" in
14591     cygwin*|wsl*)
14592         pathmunge "$MSVC_HOST_PATH" "before"
14593         ;;
14594     esac
14595 else
14596     LO_PATH="$PATH"
14598     case "$host_os" in
14600     aix*|dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
14601         if test "$ENABLE_JAVA" != ""; then
14602             pathmunge "$JAVA_HOME/bin" "after"
14603         fi
14604         ;;
14606     cygwin*|wsl*)
14607         # Win32 make needs native paths
14608         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
14609             LO_PATH=`cygpath -p -m "$PATH"`
14610         fi
14611         if test "$WIN_BUILD_ARCH" = "x64"; then
14612             # needed for msi packaging
14613             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
14614         fi
14615         # .NET 4.6 and higher don't have bin directory
14616         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
14617             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
14618         fi
14619         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
14620         pathmunge "$CSC_PATH" "before"
14621         pathmunge "$MIDL_PATH" "before"
14622         pathmunge "$AL_PATH" "before"
14623         pathmunge "$MSVC_MULTI_PATH" "before"
14624         pathmunge "$MSVC_BUILD_PATH" "before"
14625         if test -n "$MSBUILD_PATH" ; then
14626             pathmunge "$MSBUILD_PATH" "before"
14627         fi
14628         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
14629         if test "$ENABLE_JAVA" != ""; then
14630             if test -d "$JAVA_HOME/jre/bin/client"; then
14631                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
14632             fi
14633             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
14634                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
14635             fi
14636             pathmunge "$JAVA_HOME/bin" "before"
14637         fi
14638         pathmunge "$MSVC_HOST_PATH" "before"
14639         ;;
14641     solaris*)
14642         pathmunge "/usr/css/bin" "before"
14643         if test "$ENABLE_JAVA" != ""; then
14644             pathmunge "$JAVA_HOME/bin" "after"
14645         fi
14646         ;;
14647     esac
14650 AC_SUBST(LO_PATH)
14652 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
14653 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
14654     x_LO_ELFCHECK_ALLOWLIST=
14655 else
14656     x_LO_ELFCHECK_ALLOWLIST=[\#]
14658 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
14659 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
14661 libo_FUZZ_SUMMARY
14663 # Generate a configuration sha256 we can use for deps
14664 if test -f config_host.mk; then
14665     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
14667 if test -f config_host_lang.mk; then
14668     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
14671 CFLAGS=$my_original_CFLAGS
14672 CXXFLAGS=$my_original_CXXFLAGS
14673 CPPFLAGS=$my_original_CPPFLAGS
14675 AC_CONFIG_LINKS([include:include])
14677 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
14678 # BUILD platform configuration] - otherwise breaks cross building
14679 AC_CONFIG_FILES([config_host.mk
14680                  config_host_lang.mk
14681                  Makefile
14682                  bin/bffvalidator.sh
14683                  bin/odfvalidator.sh
14684                  bin/officeotron.sh
14685                  hardened_runtime.xcent
14686                  instsetoo_native/util/openoffice.lst
14687                  sysui/desktop/macosx/Info.plist
14688                  vs-code.code-workspace.template:.vscode/vs-code-template.code-workspace.in])
14689 AC_CONFIG_HEADERS([config_host/config_buildid.h])
14690 AC_CONFIG_HEADERS([config_host/config_box2d.h])
14691 AC_CONFIG_HEADERS([config_host/config_clang.h])
14692 AC_CONFIG_HEADERS([config_host/config_crypto.h])
14693 AC_CONFIG_HEADERS([config_host/config_dconf.h])
14694 AC_CONFIG_HEADERS([config_host/config_eot.h])
14695 AC_CONFIG_HEADERS([config_host/config_extensions.h])
14696 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
14697 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
14698 AC_CONFIG_HEADERS([config_host/config_dbus.h])
14699 AC_CONFIG_HEADERS([config_host/config_features.h])
14700 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
14701 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
14702 AC_CONFIG_HEADERS([config_host/config_firebird.h])
14703 AC_CONFIG_HEADERS([config_host/config_folders.h])
14704 AC_CONFIG_HEADERS([config_host/config_fonts.h])
14705 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
14706 AC_CONFIG_HEADERS([config_host/config_gio.h])
14707 AC_CONFIG_HEADERS([config_host/config_global.h])
14708 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
14709 AC_CONFIG_HEADERS([config_host/config_java.h])
14710 AC_CONFIG_HEADERS([config_host/config_langs.h])
14711 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
14712 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
14713 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
14714 AC_CONFIG_HEADERS([config_host/config_locales.h])
14715 AC_CONFIG_HEADERS([config_host/config_mpl.h])
14716 AC_CONFIG_HEADERS([config_host/config_oox.h])
14717 AC_CONFIG_HEADERS([config_host/config_options.h])
14718 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
14719 AC_CONFIG_HEADERS([config_host/config_zxing.h])
14720 AC_CONFIG_HEADERS([config_host/config_skia.h])
14721 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
14722 AC_CONFIG_HEADERS([config_host/config_validation.h])
14723 AC_CONFIG_HEADERS([config_host/config_vendor.h])
14724 AC_CONFIG_HEADERS([config_host/config_vcl.h])
14725 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
14726 AC_CONFIG_HEADERS([config_host/config_version.h])
14727 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
14728 AC_CONFIG_HEADERS([config_host/config_poppler.h])
14729 AC_CONFIG_HEADERS([config_host/config_python.h])
14730 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
14731 AC_CONFIG_HEADERS([config_host/config_wasm_strip.h])
14732 AC_CONFIG_HEADERS([solenv/lockfile/autoconf.h])
14733 AC_OUTPUT
14735 if test "$CROSS_COMPILING" = TRUE; then
14736     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
14739 # touch the config timestamp file
14740 if test ! -f config_host.mk.stamp; then
14741     echo > config_host.mk.stamp
14742 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
14743     echo "Host Configuration unchanged - avoiding scp2 stamp update"
14744 else
14745     echo > config_host.mk.stamp
14748 # touch the config lang timestamp file
14749 if test ! -f config_host_lang.mk.stamp; then
14750     echo > config_host_lang.mk.stamp
14751 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
14752     echo "Language Configuration unchanged - avoiding scp2 stamp update"
14753 else
14754     echo > config_host_lang.mk.stamp
14758 if test \( "$STALE_MAKE" = "TRUE" -o "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE" \) \
14759         -a "$build_os" = "cygwin"; then
14761 cat << _EOS
14762 ****************************************************************************
14763 WARNING:
14764 Your make version is known to be horribly slow, and hard to debug
14765 problems with. To get a reasonably functional make please do:
14767 to install a pre-compiled binary make for Win32
14769  mkdir -p /opt/lo/bin
14770  cd /opt/lo/bin
14771  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
14772  cp make-4.2.1-msvc.exe make
14773  chmod +x make
14775 to install from source:
14776 place yourself in a working directory of you choice.
14778  git clone git://git.savannah.gnu.org/make.git
14780  [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"]
14781  set PATH=%PATH%;C:\Cygwin\bin
14782  [or Cygwin64, if that is what you have]
14783  cd path-to-make-repo-you-cloned-above
14784  build_w32.bat --without-guile
14786 should result in a WinRel/gnumake.exe.
14787 Copy it to the Cygwin /opt/lo/bin directory as make.exe
14789 Then re-run autogen.sh
14791 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
14792 Alternatively, you can install the 'new' make where ever you want and make sure that `which make` finds it.
14794 _EOS
14795 if test "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE"; then
14796     AC_MSG_ERROR([no file function found; the build will fail without it; use GNU make 4.0 or later])
14801 cat << _EOF
14802 ****************************************************************************
14804 To show information on various make targets and make flags, run:
14805 $GNUMAKE help
14807 To just build, run:
14808 $GNUMAKE
14810 _EOF
14812 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
14813     cat << _EOF
14814 After the build has finished successfully, you can immediately run what you built using the command:
14815 _EOF
14817     if test $_os = Darwin; then
14818         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
14819     else
14820         echo instdir/program/soffice
14821     fi
14822     cat << _EOF
14824 If you want to run the unit tests, run:
14825 $GNUMAKE check
14827 _EOF
14830 if test -s "$WARNINGS_FILE_FOR_BUILD"; then
14831     echo "BUILD / cross-toolset config, repeated ($WARNINGS_FILE_FOR_BUILD)"
14832     cat "$WARNINGS_FILE_FOR_BUILD"
14833     echo
14836 if test -s "$WARNINGS_FILE"; then
14837     echo "HOST config ($WARNINGS_FILE)"
14838     cat "$WARNINGS_FILE"
14841 # Remove unneeded emconfigure artifacts
14842 rm -f a.out a.wasm a.out.js a.out.wasm
14844 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: