Fix system-nss: add hasht.h header back
[LibreOffice.git] / configure.ac
bloba43d6bddd344bbe92f6b87ea86faa8ba8ee7b0c7
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.alpha0+],[],[],[http://documentfoundation.org/])
14 dnl libnumbertext needs autoconf 2.68, but that can pick up autoconf268 just fine if it is installed
15 dnl whereas aclocal (as run by autogen.sh) insists on using autoconf and fails hard
16 dnl so check for the version of autoconf that is actually used to create the configure script
17 AC_PREREQ([2.59])
18 m4_if(m4_version_compare(m4_defn([AC_AUTOCONF_VERSION]), [2.68]), -1,
19     [AC_MSG_ERROR([at least autoconf version 2.68 is needed (you can use AUTOCONF environment variable to point to a suitable one)])])
21 if test -n "$BUILD_TYPE"; then
22     AC_MSG_ERROR([You have sourced config_host.mk in this shell.  This may lead to trouble, please run in a fresh (login) shell.])
25 save_CC=$CC
26 save_CXX=$CXX
28 first_arg_basename()
30     for i in $1; do
31         basename "$i"
32         break
33     done
36 CC_BASE=`first_arg_basename "$CC"`
37 CXX_BASE=`first_arg_basename "$CXX"`
39 BUILD_TYPE="LibO"
40 SCPDEFS=""
41 GIT_NEEDED_SUBMODULES=""
42 LO_PATH= # used by path_munge to construct a PATH variable
44 FilterLibs()
46     # Return value: $filteredlibs
48     filteredlibs=
49     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 AC_ARG_WITH(iwyu,
2658     AS_HELP_STRING([--with-iwyu],
2659         [Use given IWYU binary path to check unneeded includes instead of building.
2660          Use only if you are hacking on it.]),
2663 libo_FUZZ_ARG_WITH(lxml,
2664     AS_HELP_STRING([--without-lxml],
2665         [gla11y will use python lxml when available, potentially building a local copy if necessary.
2666          --without-lxml tells it to not use python lxml at all, which means that gla11y will only
2667          report widget classes and ids.]),
2670 libo_FUZZ_ARG_WITH(latest-c++,
2671     AS_HELP_STRING([--with-latest-c++],
2672         [Try to enable the latest features of the C++ compiler, even if they are not yet part of a
2673          published standard.]),,
2674         [with_latest_c__=no])
2676 dnl ===================================================================
2677 dnl Branding
2678 dnl ===================================================================
2680 AC_ARG_WITH(branding,
2681     AS_HELP_STRING([--with-branding=/path/to/images],
2682         [Use given path to retrieve branding images set.])
2683     [
2684                           Search for intro.png about.svg and logo.svg.
2685                           If any is missing, default ones will be used instead.
2687                           Search also progress.conf for progress
2688                           settings on intro screen :
2690                           PROGRESSBARCOLOR="255,255,255" Set color of
2691                           progress bar. Comma separated RGB decimal values.
2692                           PROGRESSSIZE="407,6" Set size of progress bar.
2693                           Comma separated decimal values (width, height).
2694                           PROGRESSPOSITION="61,317" Set position of progress
2695                           bar from left,top. Comma separated decimal values.
2696                           PROGRESSFRAMECOLOR="20,136,3" Set color of progress
2697                           bar frame. Comma separated RGB decimal values.
2698                           PROGRESSTEXTCOLOR="0,0,0" Set color of progress
2699                           bar text. Comma separated RGB decimal values.
2700                           PROGRESSTEXTBASELINE="287" Set vertical position of
2701                           progress bar text from top. Decimal value.
2703                           Default values will be used if not found.
2704     ],
2708 AC_ARG_WITH(extra-buildid,
2709     AS_HELP_STRING([--with-extra-buildid="Tinderbox: Win-x86@6, Branch:master, Date:2012-11-26_00.29.34"],
2710         [Show addition build identification in about dialog.]),
2714 AC_ARG_WITH(vendor,
2715     AS_HELP_STRING([--with-vendor="John the Builder"],
2716         [Set vendor of the build.]),
2719 AC_ARG_WITH(privacy-policy-url,
2720     AS_HELP_STRING([--with-privacy-policy-url="https://yourdomain/privacy-policy"],
2721         [The URL to your privacy policy (needed when
2722          enabling online-update or crashreporting via breakpad)]),
2723         [if test "x$with_privacy_policy_url" = "xyes"; then
2724             AC_MSG_FAILURE([you need to specify an argument when using --with-privacy-policy-url])
2725          elif test "x$with_privacy_policy_url" = "xno"; then
2726             with_privacy_policy_url="undefined"
2727          fi]
2728 ,[with_privacy_policy_url="undefined"])
2730 AC_ARG_WITH(android-package-name,
2731     AS_HELP_STRING([--with-android-package-name="org.libreoffice"],
2732         [Set Android package name of the build.]),
2735 AC_ARG_WITH(compat-oowrappers,
2736     AS_HELP_STRING([--with-compat-oowrappers],
2737         [Install oo* wrappers in parallel with
2738          lo* ones to keep backward compatibility.
2739          Has effect only with make distro-pack-install]),
2742 AC_ARG_WITH(os-version,
2743     AS_HELP_STRING([--with-os-version=<OSVERSION>],
2744         [For FreeBSD users, use this option to override the detected OSVERSION.]),
2747 AC_ARG_WITH(idlc-cpp,
2748     AS_HELP_STRING([--with-idlc-cpp=<cpp/ucpp>],
2749         [Specify the C Preprocessor to use for idlc. Default is ucpp.]),
2752 AC_ARG_WITH(parallelism,
2753     AS_HELP_STRING([--with-parallelism],
2754         [Number of jobs to run simultaneously during build. Parallel builds can
2755         save a lot of time on multi-cpu machines. Defaults to the number of
2756         CPUs on the machine, unless you configure --enable-icecream - then to
2757         40.]),
2760 AC_ARG_WITH(all-tarballs,
2761     AS_HELP_STRING([--with-all-tarballs],
2762         [Download all external tarballs unconditionally]))
2764 AC_ARG_WITH(gdrive-client-id,
2765     AS_HELP_STRING([--with-gdrive-client-id],
2766         [Provides the client id of the application for OAuth2 authentication
2767         on Google Drive. If either this or --with-gdrive-client-secret is
2768         empty, the feature will be disabled]),
2771 AC_ARG_WITH(gdrive-client-secret,
2772     AS_HELP_STRING([--with-gdrive-client-secret],
2773         [Provides the client secret of the application for OAuth2
2774         authentication on Google Drive. If either this or
2775         --with-gdrive-client-id is empty, the feature will be disabled]),
2778 AC_ARG_WITH(alfresco-cloud-client-id,
2779     AS_HELP_STRING([--with-alfresco-cloud-client-id],
2780         [Provides the client id of the application for OAuth2 authentication
2781         on Alfresco Cloud. If either this or --with-alfresco-cloud-client-secret is
2782         empty, the feature will be disabled]),
2785 AC_ARG_WITH(alfresco-cloud-client-secret,
2786     AS_HELP_STRING([--with-alfresco-cloud-client-secret],
2787         [Provides the client secret of the application for OAuth2
2788         authentication on Alfresco Cloud. If either this or
2789         --with-alfresco-cloud-client-id is empty, the feature will be disabled]),
2792 AC_ARG_WITH(onedrive-client-id,
2793     AS_HELP_STRING([--with-onedrive-client-id],
2794         [Provides the client id of the application for OAuth2 authentication
2795         on OneDrive. If either this or --with-onedrive-client-secret is
2796         empty, the feature will be disabled]),
2799 AC_ARG_WITH(onedrive-client-secret,
2800     AS_HELP_STRING([--with-onedrive-client-secret],
2801         [Provides the client secret of the application for OAuth2
2802         authentication on OneDrive. If either this or
2803         --with-onedrive-client-id is empty, the feature will be disabled]),
2805 dnl ===================================================================
2806 dnl Do we want to use pre-build binary tarball for recompile
2807 dnl ===================================================================
2809 if test "$enable_library_bin_tar" = "yes" ; then
2810     USE_LIBRARY_BIN_TAR=TRUE
2811 else
2812     USE_LIBRARY_BIN_TAR=
2814 AC_SUBST(USE_LIBRARY_BIN_TAR)
2816 dnl ===================================================================
2817 dnl Test whether build target is Release Build
2818 dnl ===================================================================
2819 AC_MSG_CHECKING([whether build target is Release Build])
2820 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
2821     AC_MSG_RESULT([no])
2822     ENABLE_RELEASE_BUILD=
2823     GET_TASK_ALLOW_ENTITLEMENT='
2824         <!-- We want to be able to debug a hardened process when not building for release -->
2825         <key>com.apple.security.get-task-allow</key>
2826         <true/>'
2827 else
2828     AC_MSG_RESULT([yes])
2829     ENABLE_RELEASE_BUILD=TRUE
2830     GET_TASK_ALLOW_ENTITLEMENT=''
2832 AC_SUBST(ENABLE_RELEASE_BUILD)
2833 AC_SUBST(GET_TASK_ALLOW_ENTITLEMENT)
2835 AC_MSG_CHECKING([whether to build a Community flavor])
2836 if test -z "$enable_community_flavor" -o "$enable_community_flavor" = "yes"; then
2837     AC_DEFINE(HAVE_FEATURE_COMMUNITY_FLAVOR)
2838     AC_MSG_RESULT([yes])
2839 else
2840     AC_MSG_RESULT([no])
2843 dnl ===================================================================
2844 dnl Test whether to sign Windows Build
2845 dnl ===================================================================
2846 AC_MSG_CHECKING([whether to sign windows build])
2847 if test "$enable_windows_build_signing" = "yes" -a "$_os" = "WINNT"; then
2848     AC_MSG_RESULT([yes])
2849     WINDOWS_BUILD_SIGNING="TRUE"
2850 else
2851     AC_MSG_RESULT([no])
2852     WINDOWS_BUILD_SIGNING="FALSE"
2854 AC_SUBST(WINDOWS_BUILD_SIGNING)
2856 dnl ===================================================================
2857 dnl MacOSX build and runtime environment options
2858 dnl ===================================================================
2860 AC_ARG_WITH(macosx-version-min-required,
2861     AS_HELP_STRING([--with-macosx-version-min-required=<version>],
2862         [set the minimum OS version needed to run the built LibreOffice])
2863     [
2864                           e. g.: --with-macosx-version-min-required=10.13
2865     ],
2868 dnl ===================================================================
2869 dnl Check for incompatible options set by fuzzing, and reset those
2870 dnl automatically to working combinations
2871 dnl ===================================================================
2873 if test "$libo_fuzzed_enable_dbus" = yes -a "$libo_fuzzed_enable_avahi" -a \
2874         "$enable_dbus" != "$enable_avahi"; then
2875     AC_MSG_NOTICE([Resetting --enable-avahi=$enable_dbus])
2876     enable_avahi=$enable_dbus
2879 add_lopath_after ()
2881     if ! echo "$LO_PATH" | $EGREP -q "(^|${P_SEP})$1($|${P_SEP})"; then
2882         LO_PATH="${LO_PATH:+$LO_PATH$P_SEP}$1"
2883     fi
2886 add_lopath_before ()
2888     local IFS=${P_SEP}
2889     local path_cleanup
2890     local dir
2891     for dir in $LO_PATH ; do
2892         if test "$dir" != "$1" ; then
2893             path_cleanup=${path_cleanup:+$path_cleanup$P_SEP}$dir
2894         fi
2895     done
2896     LO_PATH="$1${path_cleanup:+$P_SEP$path_cleanup}"
2899 dnl ===================================================================
2900 dnl check for required programs (grep, awk, sed, bash)
2901 dnl ===================================================================
2903 pathmunge ()
2905     local new_path
2906     if test -n "$1"; then
2907         if test "$build_os" = "cygwin"; then
2908             if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
2909                 PathFormat "$1"
2910                 new_path=`cygpath -sm "$formatted_path"`
2911             else
2912                 PathFormat "$1"
2913                 new_path=`cygpath -u "$formatted_path"`
2914             fi
2915         else
2916             new_path="$1"
2917         fi
2918         if test "$2" = "after"; then
2919             add_lopath_after "$new_path"
2920         else
2921             add_lopath_before "$new_path"
2922         fi
2923     fi
2926 AC_PROG_AWK
2927 AC_PATH_PROG( AWK, $AWK)
2928 if test -z "$AWK"; then
2929     AC_MSG_ERROR([install awk to run this script])
2932 AC_PATH_PROG(BASH, bash)
2933 if test -z "$BASH"; then
2934     AC_MSG_ERROR([bash not found in \$PATH])
2936 AC_SUBST(BASH)
2938 # prefer parallel compression tools, if available
2939 AC_PATH_PROG(COMPRESSIONTOOL, pigz)
2940 if test -z "$COMPRESSIONTOOL"; then
2941     AC_PATH_PROG(COMPRESSIONTOOL, gzip)
2942     if test -z "$COMPRESSIONTOOL"; then
2943         AC_MSG_ERROR([gzip not found in \$PATH])
2944     fi
2946 AC_SUBST(COMPRESSIONTOOL)
2948 AC_MSG_CHECKING([for GNU or BSD tar])
2949 for a in $GNUTAR gtar gnutar tar bsdtar /usr/sfw/bin/gtar; do
2950     $a --version 2> /dev/null | egrep "GNU|bsdtar"  2>&1 > /dev/null
2951     if test $? -eq 0;  then
2952         GNUTAR=$a
2953         break
2954     fi
2955 done
2956 AC_MSG_RESULT($GNUTAR)
2957 if test -z "$GNUTAR"; then
2958     AC_MSG_ERROR([not found. install GNU or BSD tar.])
2960 AC_SUBST(GNUTAR)
2962 AC_MSG_CHECKING([for tar's option to strip components])
2963 $GNUTAR --help 2> /dev/null | egrep "bsdtar|strip-components" 2>&1 >/dev/null
2964 if test $? -eq 0; then
2965     STRIP_COMPONENTS="--strip-components"
2966 else
2967     $GNUTAR --help 2> /dev/null | egrep "strip-path" 2>&1 >/dev/null
2968     if test $? -eq 0; then
2969         STRIP_COMPONENTS="--strip-path"
2970     else
2971         STRIP_COMPONENTS="unsupported"
2972     fi
2974 AC_MSG_RESULT($STRIP_COMPONENTS)
2975 if test x$STRIP_COMPONENTS = xunsupported; then
2976     AC_MSG_ERROR([you need a tar that is able to strip components.])
2978 AC_SUBST(STRIP_COMPONENTS)
2980 dnl It is useful to have a BUILD_TYPE keyword to distinguish "normal"
2981 dnl desktop OSes from "mobile" ones.
2983 dnl We assume that a non-DESKTOP build type is also a non-NATIVE one.
2984 dnl In other words, that when building for an OS that is not a
2985 dnl "desktop" one but a "mobile" one, we are always cross-compiling.
2987 dnl Note the direction of the implication; there is no assumption that
2988 dnl cross-compiling would imply a non-desktop OS.
2990 if test $_os != iOS -a $_os != Android -a "$enable_fuzzers" != "yes"; then
2991     BUILD_TYPE="$BUILD_TYPE DESKTOP"
2992     AC_DEFINE(HAVE_FEATURE_DESKTOP)
2993     if test "$_os" != Emscripten; then
2994         AC_DEFINE(HAVE_FEATURE_MULTIUSER_ENVIRONMENT)
2995     fi
2998 # explicitly doesn't include enable_gtk3=no and enable_qt5=yes, so it should
2999 # also work with the default gtk3 plugin.
3000 if test "$enable_wasm_strip" = "yes"; then
3001     enable_avmedia=no
3002     enable_cmis=no
3003     enable_coinmp=no
3004     enable_cups=no
3005     test "$_os" = Emscripten && enable_curl=no
3006     enable_database_connectivity=no
3007     enable_dbus=no
3008     enable_dconf=no
3009     test "${enable_dynamic_loading+set}" = set -o "$_os" != Emscripten || enable_dynamic_loading=no
3010     enable_extension_integration=no
3011     enable_extensions=no
3012     enable_extension_update=no
3013     enable_gio=no
3014     enable_gpgmepp=no
3015     enable_ldap=no
3016     enable_lotuswordpro=no
3017     enable_lpsolve=no
3018     enable_nss=no
3019     enable_odk=no
3020     enable_online_update=no
3021     enable_opencl=no
3022     enable_pdfimport=no
3023     enable_randr=no
3024     enable_report_builder=no
3025     enable_scripting=no
3026     enable_sdremote_bluetooth=no
3027     enable_skia=no
3028     enable_xmlhelp=no
3029     enable_zxing=no
3030     test_libepubgen=no
3031     test_libcdr=no
3032     test_libcmis=no
3033     test_libetonyek=no
3034     test_libfreehand=no
3035     test_libmspub=no
3036     test_libpagemaker=no
3037     test_libqxp=no
3038     test_libvisio=no
3039     test_libzmf=no
3040     test_webdav=no
3041     with_galleries=no
3042     with_webdav=no
3043     with_x=no
3045     test "${with_fonts+set}" = set || with_fonts=yes
3046     test "${with_locales+set}" = set || with_locales=en
3048     AC_DEFINE(ENABLE_WASM_STRIP_ACCESSIBILITY)
3049     AC_DEFINE(ENABLE_WASM_STRIP_CANVAS)
3050 #    AC_DEFINE(ENABLE_WASM_STRIP_CHART)
3051     AC_DEFINE(ENABLE_WASM_STRIP_DBACCESS)
3052     AC_DEFINE(ENABLE_WASM_STRIP_EPUB)
3053     AC_DEFINE(ENABLE_WASM_STRIP_EXTRA)
3054     AC_DEFINE(ENABLE_WASM_STRIP_GUESSLANG)
3055 #    AC_DEFINE(ENABLE_WASM_STRIP_HUNSPELL)
3056     AC_DEFINE(ENABLE_WASM_STRIP_PINGUSER)
3057     AC_DEFINE(ENABLE_WASM_STRIP_PREMULTIPLY)
3058     AC_DEFINE(ENABLE_WASM_STRIP_RECENT)
3059     AC_DEFINE(ENABLE_WASM_STRIP_RECOVERYUI)
3060     AC_DEFINE(ENABLE_WASM_STRIP_SPLASH)
3061     AC_DEFINE(ENABLE_WASM_STRIP_SWEXPORTS)
3064 EMSCRIPTEN_NEH_MAJOR=3
3065 EMSCRIPTEN_NEH_MINOR=1
3066 EMSCRIPTEN_NEH_TINY=3
3067 EMSCRIPTEN_NEH_VERSION="${EMSCRIPTEN_NEH_MAJOR}.${EMSCRIPTEN_NEH_MINOR}.${EMSCRIPTEN_NEH_TINY}"
3069 if test "$enable_wasm_exceptions" = yes; then
3070     AC_MSG_CHECKING([if Emscripten version is at least $EMSCRIPTEN_NEH_VERSION for SjLj + native EH])
3071     check_semantic_version_three_prefixed EMSCRIPTEN NEH
3072     if test $? -ne 0; then
3073         AC_MSG_ERROR([no, found $EMSCRIPTEN_VERSION])
3074     else
3075         AC_MSG_RESULT([yes ($EMSCRIPTEN_VERSION)])
3076     fi
3077     ENABLE_WASM_EXCEPTIONS=TRUE
3079 AC_SUBST(ENABLE_WASM_EXCEPTIONS)
3081 # Whether to build "avmedia" functionality or not.
3083 if test "$enable_avmedia" = yes; then
3084     BUILD_TYPE="$BUILD_TYPE AVMEDIA"
3085     AC_DEFINE(HAVE_FEATURE_AVMEDIA)
3086 else
3087     test_gstreamer_1_0=no
3090 # Decide whether to build database connectivity stuff (including Base) or not.
3091 if test "$enable_database_connectivity" != no; then
3092     BUILD_TYPE="$BUILD_TYPE DBCONNECTIVITY"
3093     AC_DEFINE(HAVE_FEATURE_DBCONNECTIVITY)
3094 else
3095     if test "$_os" = iOS; then
3096         AC_MSG_ERROR([Presumly can't disable DB connectivity on iOS.])
3097     fi
3098     disable_database_connectivity_dependencies
3101 if test -z "$enable_extensions"; then
3102     # For iOS and Android Viewer, disable extensions unless specifically overridden with --enable-extensions.
3103     if test $_os != iOS && test $_os != Android -o "$ENABLE_ANDROID_LOK" = TRUE ; then
3104         enable_extensions=yes
3105     fi
3108 DISABLE_SCRIPTING=''
3109 if test "$enable_scripting" = yes; then
3110     BUILD_TYPE="$BUILD_TYPE SCRIPTING"
3111     AC_DEFINE(HAVE_FEATURE_SCRIPTING)
3112 else
3113     DISABLE_SCRIPTING='TRUE'
3114     SCPDEFS="$SCPDEFS -DDISABLE_SCRIPTING"
3117 if test $_os = iOS -o $_os = Android -o $_os = Emscripten; then
3118     # Disable dynamic_loading always for iOS and Android
3119     enable_dynamic_loading=no
3120 elif test -z "$enable_dynamic_loading"; then
3121     # Otherwise enable it unless specifically disabled
3122     enable_dynamic_loading=yes
3125 DISABLE_DYNLOADING=''
3126 if test "$enable_dynamic_loading" = yes; then
3127     BUILD_TYPE="$BUILD_TYPE DYNLOADING"
3128 else
3129     DISABLE_DYNLOADING='TRUE'
3130     if test $_os != iOS -a $_os != Android; then
3131         enable_database_connectivity=no
3132         enable_nss=no
3133         enable_odk=no
3134         enable_python=no
3135         enable_skia=no
3136         with_java=no
3137     fi
3139 AC_SUBST(DISABLE_DYNLOADING)
3141 ENABLE_CUSTOMTARGET_COMPONENTS=
3142 if test "$enable_customtarget_components" = yes -a "$DISABLE_DYNLOADING" = TRUE; then
3143     ENABLE_CUSTOMTARGET_COMPONENTS=TRUE
3144     if test -n "$with_locales" -a "$with_locales" != en -a "$with_locales" != ALL; then
3145         AC_MSG_ERROR([Currently just --with-locales=all or en is supported with --enable-customtarget-components])
3146     fi
3148 AC_SUBST(ENABLE_CUSTOMTARGET_COMPONENTS)
3150 if test "$enable_extensions" = yes; then
3151     BUILD_TYPE="$BUILD_TYPE EXTENSIONS"
3152     AC_DEFINE(HAVE_FEATURE_EXTENSIONS)
3153 else
3154     enable_extension_integration=no
3155     enable_extension_update=no
3158 # remember SYSBASE value
3159 AC_SUBST(SYSBASE)
3161 dnl ===================================================================
3162 dnl  Sort out various gallery compilation options
3163 dnl ===================================================================
3164 WITH_GALLERY_BUILD=TRUE
3165 AC_MSG_CHECKING([how to build and package galleries])
3166 if test -n "${with_galleries}"; then
3167     if test "$with_galleries" = "build"; then
3168         if test "$enable_database_connectivity" = no; then
3169             AC_MSG_ERROR([DB connectivity is needed for gengal / svx])
3170         fi
3171         AC_MSG_RESULT([build from source images internally])
3172     elif test "$with_galleries" = "no"; then
3173         WITH_GALLERY_BUILD=
3174         AC_MSG_RESULT([disable non-internal gallery build])
3175     else
3176         AC_MSG_ERROR([unknown value --with-galleries=$with_galleries])
3177     fi
3178 else
3179     if test $_os != iOS -a $_os != Android; then
3180         AC_MSG_RESULT([internal src images for desktop])
3181     else
3182         WITH_GALLERY_BUILD=
3183         AC_MSG_RESULT([disable src image build])
3184     fi
3186 AC_SUBST(WITH_GALLERY_BUILD)
3188 dnl ===================================================================
3189 dnl  Checks if ccache is available
3190 dnl ===================================================================
3191 CCACHE_DEPEND_MODE=
3192 if test "$enable_ccache" = "no"; then
3193     CCACHE=""
3194 elif test -n "$enable_ccache" -o \( "$enable_ccache" = "" -a "$enable_icecream" != "yes" \); then
3195     case "%$CC%$CXX%" in
3196     # If $CC and/or $CXX already contain "ccache" (possibly suffixed with some version number etc),
3197     # assume that's good then
3198     *%ccache[[-_' ']]*|*/ccache[[-_' ']]*)
3199         AC_MSG_NOTICE([ccache seems to be included in a pre-defined CC and/or CXX])
3200         CCACHE_DEPEND_MODE=1
3201         ;;
3202     *)
3203         # try to use our own ccache if it is available and CCACHE was not already defined
3204         if test -z "$CCACHE"; then
3205             if test "$_os" = "WINNT"; then
3206                 ccache_ext=.exe # e.g. openssl build needs ccache.exe, not just ccache
3207             fi
3208             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/ccache$ccache_ext" ; then
3209                 CCACHE="$LODE_HOME/opt/bin/ccache$ccache_ext"
3210             elif test -x "/opt/lo/bin/ccache$ccache_ext"; then
3211                 CCACHE="/opt/lo/bin/ccache$ccache_ext"
3212             fi
3213         fi
3214         AC_PATH_PROG([CCACHE],[ccache],[not found])
3215         if test "$CCACHE" != "not found" -a "$_os" = "WINNT"; then
3216             CCACHE=`win_short_path_for_make "$CCACHE"`
3217             # check that it has MSVC support (it should recognize it in CCACHE_COMPILERTYPE)
3218             rm -f conftest.txt
3219             AC_MSG_CHECKING([whether $CCACHE has MSVC support])
3220             CCACHE_COMPILERTYPE=cl CCACHE_LOGFILE=conftest.txt $CCACHE echo >/dev/null 2>/dev/null
3221             if grep -q 'Config: (environment) compiler_type = cl' conftest.txt; then
3222                 AC_MSG_RESULT(yes)
3223             else
3224                 AC_MSG_RESULT(no)
3225                 CCACHE="not found"
3226             fi
3227             rm -f conftest.txt
3228         fi
3229         if test "$CCACHE" = "not found" -a "$_os" = "WINNT"; then
3230             # on windows/VC perhaps sccache is around?
3231             case "%$CC%$CXX%" in
3232             # If $CC and/or $CXX already contain "sccache" (possibly suffixed with some version number etc),
3233             # assume that's good then
3234             *%sccache[[-_' ']]*|*/sccache[[-_' ']]*)
3235                 AC_MSG_NOTICE([sccache seems to be included in a pre-defined CC and/or CXX])
3236                 CCACHE_DEPEND_MODE=1
3237                 SCCACHE=1
3238                 ;;
3239             *)
3240                 # for sharing code below, reuse CCACHE env var
3241                 AC_PATH_PROG([CCACHE],[sccache],[not found])
3242                 if test "$CCACHE" != "not found"; then
3243                     CCACHE=`win_short_path_for_make "$CCACHE"`
3244                     SCCACHE=1
3245                     CCACHE_DEPEND_MODE=1
3246                 fi
3247                 ;;
3248             esac
3249         fi
3250         if test "$CCACHE" = "not found"; then
3251             CCACHE=""
3252         fi
3253         if test -n "$CCACHE" -a -z "$SCCACHE"; then
3254             CCACHE_DEPEND_MODE=1
3255             # Need to check for ccache version: otherwise prevents
3256             # caching of the results (like "-x objective-c++" for Mac)
3257             if test $_os = Darwin -o $_os = iOS; then
3258                 # Check ccache version
3259                 AC_MSG_CHECKING([whether version of ccache is suitable])
3260                 CCACHE_VERSION=`"$CCACHE" -V | "$AWK" '/^ccache version/{print $3}'`
3261                 CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
3262                 if test "$CCACHE_VERSION" = "2.4_OOo" -o "$CCACHE_NUMVER" -ge "030100"; then
3263                     AC_MSG_RESULT([yes, $CCACHE_VERSION])
3264                 else
3265                     AC_MSG_RESULT([no, $CCACHE_VERSION])
3266                     CCACHE=""
3267                     CCACHE_DEPEND_MODE=
3268                 fi
3269             fi
3270         fi
3271         ;;
3272     esac
3273 else
3274     CCACHE=""
3276 if test "$enable_ccache" = "nodepend"; then
3277     CCACHE_DEPEND_MODE=""
3279 AC_SUBST(CCACHE_DEPEND_MODE)
3281 # sccache defaults are good enough
3282 if test "$CCACHE" != "" -a -z "$SCCACHE"; then
3283     # e.g. (/home/rene/.config/ccache/ccache.conf) max_size = 20.0G
3284     # -p works with both 4.2 and 4.4
3285     ccache_size_msg=$([$CCACHE -p | $AWK /max_size/'{ print $4 }' | sed -e 's/\.[0-9]*//'])
3286     ccache_size=$(echo "$ccache_size_msg" | grep "G" | sed -e 's/G.*$//')
3287     if test "$ccache_size" = ""; then
3288         ccache_size=$(echo "$ccache_size_msg" | grep "M" | sed -e 's/\ M.*$//')
3289         if test "$ccache_size" = ""; then
3290             ccache_size=0
3291         fi
3292         # we could not determine the size or it was less than 1GB -> disable auto-ccache
3293         if test $ccache_size -lt 1024; then
3294             CCACHE=""
3295             AC_MSG_WARN([ccache's cache size is less than 1GB using it is counter-productive: Disabling auto-ccache detection])
3296             add_warning "ccache's cache size is less than 1GB using it is counter-productive: auto-ccache detection disabled"
3297         else
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     else
3303         if test $ccache_size -lt 5; then
3304             #warn that ccache may be too small for debug build
3305             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3306             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3307         fi
3308     fi
3311 ENABLE_Z7_DEBUG=
3312 if test "$enable_z7_debug" != no; then
3313     if test "$enable_z7_debug" = yes -o -n "$CCACHE"; then
3314         ENABLE_Z7_DEBUG=TRUE
3315     fi
3316 else
3317     AC_MSG_WARN([ccache will not work with --disable-z7-debug])
3318     add_warning "ccache will not work with --disable-z7-debug"
3320 AC_SUBST(ENABLE_Z7_DEBUG)
3322 dnl ===================================================================
3323 dnl  Checks for C compiler,
3324 dnl  The check for the C++ compiler is later on.
3325 dnl ===================================================================
3326 if test "$_os" != "WINNT"; then
3327     GCC_HOME_SET="true"
3328     AC_MSG_CHECKING([gcc home])
3329     if test -z "$with_gcc_home"; then
3330         if test "$enable_icecream" = "yes"; then
3331             if test -d "/usr/lib/icecc/bin"; then
3332                 GCC_HOME="/usr/lib/icecc/"
3333             elif test -d "/usr/libexec/icecc/bin"; then
3334                 GCC_HOME="/usr/libexec/icecc/"
3335             elif test -d "/opt/icecream/bin"; then
3336                 GCC_HOME="/opt/icecream/"
3337             else
3338                 AC_MSG_ERROR([Could not figure out the location of icecream GCC wrappers, manually use --with-gcc-home])
3340             fi
3341         else
3342             GCC_HOME=`which gcc | $SED -e s,/bin/gcc,,`
3343             GCC_HOME_SET="false"
3344         fi
3345     else
3346         GCC_HOME="$with_gcc_home"
3347     fi
3348     AC_MSG_RESULT($GCC_HOME)
3349     AC_SUBST(GCC_HOME)
3351     if test "$GCC_HOME_SET" = "true"; then
3352         if test -z "$CC"; then
3353             CC="$GCC_HOME/bin/gcc"
3354             CC_BASE="gcc"
3355         fi
3356         if test -z "$CXX"; then
3357             CXX="$GCC_HOME/bin/g++"
3358             CXX_BASE="g++"
3359         fi
3360     fi
3363 COMPATH=`dirname "$CC"`
3364 if test "$COMPATH" = "."; then
3365     AC_PATH_PROGS(COMPATH, $CC)
3366     dnl double square bracket to get single because of M4 quote...
3367     COMPATH=`echo $COMPATH | $SED "s@/[[^/:]]*\\\$@@"`
3369 COMPATH=`echo $COMPATH | $SED "s@/[[Bb]][[Ii]][[Nn]]\\\$@@"`
3371 dnl ===================================================================
3372 dnl Java support
3373 dnl ===================================================================
3374 AC_MSG_CHECKING([whether to build with Java support])
3375 if test "$with_java" != "no"; then
3376     if test "$DISABLE_SCRIPTING" = TRUE; then
3377         AC_MSG_RESULT([no, overridden by --disable-scripting])
3378         ENABLE_JAVA=""
3379         with_java=no
3380     else
3381         AC_MSG_RESULT([yes])
3382         ENABLE_JAVA="TRUE"
3383         AC_DEFINE(HAVE_FEATURE_JAVA)
3384     fi
3385 else
3386     AC_MSG_RESULT([no])
3387     ENABLE_JAVA=""
3390 AC_SUBST(ENABLE_JAVA)
3392 dnl ENABLE_JAVA="TRUE" if we want there to be *run-time* (and build-time) support for Java
3394 dnl ENABLE_JAVA="" indicate no Java support at all
3396 dnl ===================================================================
3397 dnl Check macOS SDK and compiler
3398 dnl ===================================================================
3400 if test $_os = Darwin; then
3402     # The SDK in the currently selected Xcode should be found.
3404     AC_MSG_CHECKING([what macOS SDK to use])
3405     for macosx_sdk in 12.3 12.1 12.0 11.3 11.1 11.0 10.15 10.14 10.13; do
3406         MACOSX_SDK_PATH=`xcrun --sdk macosx${macosx_sdk} --show-sdk-path 2> /dev/null`
3407         if test -d "$MACOSX_SDK_PATH"; then
3408             break
3409         else
3410             MACOSX_SDK_PATH="`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${macosx_sdk}.sdk"
3411             if test -d "$MACOSX_SDK_PATH"; then
3412                 break
3413             fi
3414         fi
3415     done
3416     if test ! -d "$MACOSX_SDK_PATH"; then
3417         AC_MSG_ERROR([Could not find an appropriate macOS SDK])
3418     fi
3420     AC_MSG_RESULT([macOS SDK $macosx_sdk at $MACOSX_SDK_PATH])
3422     case $macosx_sdk in
3423     10.13)
3424         MACOSX_SDK_VERSION=101300
3425         ;;
3426     10.14)
3427         MACOSX_SDK_VERSION=101400
3428         ;;
3429     10.15)
3430         MACOSX_SDK_VERSION=101500
3431         ;;
3432     11.0)
3433         MACOSX_SDK_VERSION=110000
3434         ;;
3435     11.1)
3436         MACOSX_SDK_VERSION=110100
3437         ;;
3438     11.3)
3439         MACOSX_SDK_VERSION=110300
3440         ;;
3441     12.0)
3442         MACOSX_SDK_VERSION=120000
3443         ;;
3444     12.1)
3445         MACOSX_SDK_VERSION=120100
3446         ;;
3447     12.3)
3448         MACOSX_SDK_VERSION=120300
3449         ;;
3450     *)
3451         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported])
3452         ;;
3453     esac
3455     if test "$host_cpu" = arm64 -a $MACOSX_SDK_VERSION -lt 110000; then
3456         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported for Apple Silicon])
3457     fi
3459     if test "$with_macosx_version_min_required" = "" ; then
3460         if test "$host_cpu" = x86_64; then
3461             with_macosx_version_min_required="10.13";
3462         else
3463             with_macosx_version_min_required="11.0";
3464         fi
3465     fi
3467     # export this so that "xcrun" invocations later return matching values
3468     DEVELOPER_DIR="${MACOSX_SDK_PATH%/SDKs*}"
3469     DEVELOPER_DIR="${DEVELOPER_DIR%/Platforms*}"
3470     export DEVELOPER_DIR
3471     FRAMEWORKSHOME="$MACOSX_SDK_PATH/System/Library/Frameworks"
3472     MACOSX_DEPLOYMENT_TARGET="$with_macosx_version_min_required"
3474     AC_MSG_CHECKING([whether Xcode is new enough])
3475     my_xcode_ver1=$(xcrun xcodebuild -version | head -n 1)
3476     my_xcode_ver2=${my_xcode_ver1#Xcode }
3477     my_xcode_ver3=$(printf %s "$my_xcode_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
3478     if test "$my_xcode_ver3" -ge 1205; then
3479         AC_MSG_RESULT([yes ($my_xcode_ver2)])
3480     else
3481         AC_MSG_ERROR(["$my_xcode_ver1" is too old or unrecognized, must be at least Xcode 12.5])
3482     fi
3484     case "$with_macosx_version_min_required" in
3485     10.13)
3486         MAC_OS_X_VERSION_MIN_REQUIRED="101300"
3487         ;;
3488     10.14)
3489         MAC_OS_X_VERSION_MIN_REQUIRED="101400"
3490         ;;
3491     10.15)
3492         MAC_OS_X_VERSION_MIN_REQUIRED="101500"
3493         ;;
3494     10.16)
3495         MAC_OS_X_VERSION_MIN_REQUIRED="101600"
3496         ;;
3497     11.0)
3498         MAC_OS_X_VERSION_MIN_REQUIRED="110000"
3499         ;;
3500     11.1)
3501         MAC_OS_X_VERSION_MIN_REQUIRED="110100"
3502         ;;
3503     11.3)
3504         MAC_OS_X_VERSION_MIN_REQUIRED="110300"
3505         ;;
3506     12.0)
3507         MAC_OS_X_VERSION_MIN_REQUIRED="120000"
3508         ;;
3509     12.1)
3510         MAC_OS_X_VERSION_MIN_REQUIRED="120100"
3511         ;;
3512     12.3)
3513         MAC_OS_X_VERSION_MIN_REQUIRED="120300"
3514         ;;
3515     *)
3516         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])
3517         ;;
3518     esac
3520     LIBTOOL=/usr/bin/libtool
3521     INSTALL_NAME_TOOL=install_name_tool
3522     if test -z "$save_CC"; then
3523         stdlib=-stdlib=libc++
3525         AC_MSG_CHECKING([what C compiler to use])
3526         CC="`xcrun -find clang`"
3527         CC_BASE=`first_arg_basename "$CC"`
3528         if test "$host_cpu" = x86_64; then
3529             CC+=" -target x86_64-apple-macos"
3530         else
3531             CC+=" -target arm64-apple-macos"
3532         fi
3533         CC+=" -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3534         AC_MSG_RESULT([$CC])
3536         AC_MSG_CHECKING([what C++ compiler to use])
3537         CXX="`xcrun -find clang++`"
3538         CXX_BASE=`first_arg_basename "$CXX"`
3539         if test "$host_cpu" = x86_64; then
3540             CXX+=" -target x86_64-apple-macos"
3541         else
3542             CXX+=" -target arm64-apple-macos"
3543         fi
3544         CXX+=" $stdlib -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3545         AC_MSG_RESULT([$CXX])
3547         INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3548         AR=`xcrun -find ar`
3549         NM=`xcrun -find nm`
3550         STRIP=`xcrun -find strip`
3551         LIBTOOL=`xcrun -find libtool`
3552         RANLIB=`xcrun -find ranlib`
3553     fi
3555     AC_MSG_CHECKING([that macosx-version-min-required is coherent with macos-with-sdk])
3556     if test $MAC_OS_X_VERSION_MIN_REQUIRED -gt $MACOSX_SDK_VERSION; then
3557         AC_MSG_ERROR([the version minimum required cannot be greater than the sdk level])
3558     else
3559         AC_MSG_RESULT([ok])
3560     fi
3561     AC_MSG_NOTICE([MAC_OS_X_VERSION_MIN_REQUIRED=$MAC_OS_X_VERSION_MIN_REQUIRED])
3563     AC_MSG_CHECKING([whether to do code signing])
3565     if test "$enable_macosx_code_signing" = yes; then
3566         # By default use the first suitable certificate (?).
3568         # http://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3569         # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3570         # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3571         # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3572         # "Developer ID Application" one.
3574         identity=`security find-identity -p codesigning -v 2>/dev/null | grep 'Developer ID Application:' | $AWK '{print $2}' |head -1`
3575         if test -n "$identity"; then
3576             MACOSX_CODESIGNING_IDENTITY=$identity
3577             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3578             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3579         else
3580             AC_MSG_ERROR([cannot determine identity to use])
3581         fi
3582     elif test -n "$enable_macosx_code_signing" -a "$enable_macosx_code_signing" != no ; then
3583         MACOSX_CODESIGNING_IDENTITY=$enable_macosx_code_signing
3584         pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3585         AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3586     else
3587         AC_MSG_RESULT([no])
3588     fi
3590     AC_MSG_CHECKING([whether to create a Mac App Store package])
3592     if test -z "$enable_macosx_package_signing" || test "$enable_macosx_package_signing" == no; then
3593         AC_MSG_RESULT([no])
3594     elif test -z "$MACOSX_CODESIGNING_IDENTITY"; then
3595         AC_MSG_ERROR([You forgot --enable-macosx-code-signing])
3596     elif test "$enable_macosx_package_signing" = yes; then
3597         # By default use the first suitable certificate.
3598         # It should be a "3rd Party Mac Developer Installer" one
3600         identity=`security find-identity -v 2>/dev/null | grep '3rd Party Mac Developer Installer:' | awk '{print $2}' |head -1`
3601         if test -n "$identity"; then
3602             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3603             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3604             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3605         else
3606             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3607         fi
3608     else
3609         MACOSX_PACKAGE_SIGNING_IDENTITY=$enable_macosx_package_signing
3610         pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3611         AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3612     fi
3614     if test -n "$MACOSX_CODESIGNING_IDENTITY" -a -n "$MACOSX_PACKAGE_SIGNING_IDENTITY" -a "$MACOSX_CODESIGNING_IDENTITY" = "$MACOSX_PACKAGE_SIGNING_IDENTITY"; then
3615         AC_MSG_ERROR([You should not use the same identity for code and package signing])
3616     fi
3618     AC_MSG_CHECKING([whether to sandbox the application])
3620     if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then
3621         AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java])
3622     elif test "$enable_macosx_sandbox" = yes; then
3623         ENABLE_MACOSX_SANDBOX=TRUE
3624         AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX)
3625         AC_MSG_RESULT([yes])
3626     else
3627         AC_MSG_RESULT([no])
3628     fi
3630     AC_MSG_CHECKING([what macOS app bundle identifier to use])
3631     MACOSX_BUNDLE_IDENTIFIER=$with_macosx_bundle_identifier
3632     AC_MSG_RESULT([$MACOSX_BUNDLE_IDENTIFIER])
3634 AC_SUBST(MACOSX_SDK_PATH)
3635 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3636 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3637 AC_SUBST(INSTALL_NAME_TOOL)
3638 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3639 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3640 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3641 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3642 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3644 dnl ===================================================================
3645 dnl Check iOS SDK and compiler
3646 dnl ===================================================================
3648 if test $_os = iOS; then
3649     AC_MSG_CHECKING([what iOS SDK to use])
3650     current_sdk_ver=15.4
3651     older_sdk_vers="15.2 15.0 14.5"
3652     if test "$enable_ios_simulator" = "yes"; then
3653         platform=iPhoneSimulator
3654         versionmin=-mios-simulator-version-min=13.6
3655     else
3656         platform=iPhoneOS
3657         versionmin=-miphoneos-version-min=13.6
3658     fi
3659     xcode_developer=`xcode-select -print-path`
3661     for sdkver in $current_sdk_ver $older_sdk_vers; do
3662         t=$xcode_developer/Platforms/$platform.platform/Developer/SDKs/$platform$sdkver.sdk
3663         if test -d $t; then
3664             sysroot=$t
3665             break
3666         fi
3667     done
3669     if test -z "$sysroot"; then
3670         AC_MSG_ERROR([Could not find iOS SDK, expected something like $xcode_developer/Platforms/$platform.platform/Developer/SDKs/${platform}${current_sdk_ver}.sdk])
3671     fi
3673     AC_MSG_RESULT($sysroot)
3675     stdlib="-stdlib=libc++"
3677     AC_MSG_CHECKING([what C compiler to use])
3678     CC="`xcrun -find clang`"
3679     CC_BASE=`first_arg_basename "$CC"`
3680     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3681     AC_MSG_RESULT([$CC])
3683     AC_MSG_CHECKING([what C++ compiler to use])
3684     CXX="`xcrun -find clang++`"
3685     CXX_BASE=`first_arg_basename "$CXX"`
3686     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3687     AC_MSG_RESULT([$CXX])
3689     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3690     AR=`xcrun -find ar`
3691     NM=`xcrun -find nm`
3692     STRIP=`xcrun -find strip`
3693     LIBTOOL=`xcrun -find libtool`
3694     RANLIB=`xcrun -find ranlib`
3697 AC_MSG_CHECKING([whether to treat the installation as read-only])
3699 if test $_os = Darwin; then
3700     enable_readonly_installset=yes
3701 elif test "$enable_extensions" != yes; then
3702     enable_readonly_installset=yes
3704 if test "$enable_readonly_installset" = yes; then
3705     AC_MSG_RESULT([yes])
3706     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3707 else
3708     AC_MSG_RESULT([no])
3711 dnl ===================================================================
3712 dnl Structure of install set
3713 dnl ===================================================================
3715 if test $_os = Darwin; then
3716     LIBO_BIN_FOLDER=MacOS
3717     LIBO_ETC_FOLDER=Resources
3718     LIBO_LIBEXEC_FOLDER=MacOS
3719     LIBO_LIB_FOLDER=Frameworks
3720     LIBO_LIB_PYUNO_FOLDER=Resources
3721     LIBO_SHARE_FOLDER=Resources
3722     LIBO_SHARE_HELP_FOLDER=Resources/help
3723     LIBO_SHARE_JAVA_FOLDER=Resources/java
3724     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3725     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3726     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3727     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3728     LIBO_URE_BIN_FOLDER=MacOS
3729     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3730     LIBO_URE_LIB_FOLDER=Frameworks
3731     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3732     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3733 elif test $_os = WINNT; then
3734     LIBO_BIN_FOLDER=program
3735     LIBO_ETC_FOLDER=program
3736     LIBO_LIBEXEC_FOLDER=program
3737     LIBO_LIB_FOLDER=program
3738     LIBO_LIB_PYUNO_FOLDER=program
3739     LIBO_SHARE_FOLDER=share
3740     LIBO_SHARE_HELP_FOLDER=help
3741     LIBO_SHARE_JAVA_FOLDER=program/classes
3742     LIBO_SHARE_PRESETS_FOLDER=presets
3743     LIBO_SHARE_READMES_FOLDER=readmes
3744     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3745     LIBO_SHARE_SHELL_FOLDER=program/shell
3746     LIBO_URE_BIN_FOLDER=program
3747     LIBO_URE_ETC_FOLDER=program
3748     LIBO_URE_LIB_FOLDER=program
3749     LIBO_URE_MISC_FOLDER=program
3750     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3751 else
3752     LIBO_BIN_FOLDER=program
3753     LIBO_ETC_FOLDER=program
3754     LIBO_LIBEXEC_FOLDER=program
3755     LIBO_LIB_FOLDER=program
3756     LIBO_LIB_PYUNO_FOLDER=program
3757     LIBO_SHARE_FOLDER=share
3758     LIBO_SHARE_HELP_FOLDER=help
3759     LIBO_SHARE_JAVA_FOLDER=program/classes
3760     LIBO_SHARE_PRESETS_FOLDER=presets
3761     LIBO_SHARE_READMES_FOLDER=readmes
3762     if test "$enable_fuzzers" != yes; then
3763         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3764     else
3765         LIBO_SHARE_RESOURCE_FOLDER=resource
3766     fi
3767     LIBO_SHARE_SHELL_FOLDER=program/shell
3768     LIBO_URE_BIN_FOLDER=program
3769     LIBO_URE_ETC_FOLDER=program
3770     LIBO_URE_LIB_FOLDER=program
3771     LIBO_URE_MISC_FOLDER=program
3772     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3774 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3775 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3776 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3777 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3778 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3779 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3780 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3781 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3782 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3783 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3784 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3785 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3786 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3787 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3788 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3789 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3791 # Not all of them needed in config_host.mk, add more if need arises
3792 AC_SUBST(LIBO_BIN_FOLDER)
3793 AC_SUBST(LIBO_ETC_FOLDER)
3794 AC_SUBST(LIBO_LIB_FOLDER)
3795 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3796 AC_SUBST(LIBO_SHARE_FOLDER)
3797 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3798 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3799 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3800 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3801 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3802 AC_SUBST(LIBO_URE_BIN_FOLDER)
3803 AC_SUBST(LIBO_URE_ETC_FOLDER)
3804 AC_SUBST(LIBO_URE_LIB_FOLDER)
3805 AC_SUBST(LIBO_URE_MISC_FOLDER)
3806 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3808 dnl ===================================================================
3809 dnl Windows specific tests and stuff
3810 dnl ===================================================================
3812 reg_get_value()
3814     # Return value: $regvalue
3815     unset regvalue
3817     if test "$build_os" = "wsl"; then
3818         regvalue=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --read-registry $1 "$2" 2>/dev/null)
3819         return
3820     fi
3822     local _regentry="/proc/registry${1}/${2}"
3823     if test -f "$_regentry"; then
3824         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3825         # Registry keys read via /proc/registry* are always \0 terminated!
3826         local _regvalue=$(tr -d '\0' < "$_regentry")
3827         if test $? -eq 0; then
3828             regvalue=$_regvalue
3829         fi
3830     fi
3833 # Get a value from the 32-bit side of the Registry
3834 reg_get_value_32()
3836     reg_get_value "32" "$1"
3839 # Get a value from the 64-bit side of the Registry
3840 reg_get_value_64()
3842     reg_get_value "64" "$1"
3845 case "$host_os" in
3846 cygwin*|wsl*)
3847     COM=MSC
3848     OS=WNT
3849     RTL_OS=Windows
3850     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3851         P_SEP=";"
3852     else
3853         P_SEP=:
3854     fi
3855     case "$host_cpu" in
3856     x86_64)
3857         CPUNAME=X86_64
3858         RTL_ARCH=X86_64
3859         PLATFORMID=windows_x86_64
3860         WINDOWS_X64=1
3861         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
3862         WIN_HOST_ARCH="x64"
3863         WIN_MULTI_ARCH="x86"
3864         WIN_HOST_BITS=64
3865         ;;
3866     i*86)
3867         CPUNAME=INTEL
3868         RTL_ARCH=x86
3869         PLATFORMID=windows_x86
3870         WIN_HOST_ARCH="x86"
3871         WIN_HOST_BITS=32
3872         WIN_OTHER_ARCH="x64"
3873         ;;
3874     aarch64)
3875         CPUNAME=AARCH64
3876         RTL_ARCH=AARCH64
3877         PLATFORMID=windows_aarch64
3878         WINDOWS_X64=1
3879         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
3880         WIN_HOST_ARCH="arm64"
3881         WIN_HOST_BITS=64
3882         with_ucrt_dir=no
3883         ;;
3884     *)
3885         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
3886         ;;
3887     esac
3889     case "$build_cpu" in
3890     x86_64) WIN_BUILD_ARCH="x64" ;;
3891     i*86) WIN_BUILD_ARCH="x86" ;;
3892     aarch64) WIN_BUILD_ARCH="arm64" ;;
3893     *)
3894         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
3895         ;;
3896     esac
3898     SCPDEFS="$SCPDEFS -D_MSC_VER"
3899     ;;
3900 esac
3902 # multi-arch is an arch, which can execute on the host (x86 on x64), while
3903 # other-arch won't, but wouldn't break the build (x64 on x86).
3904 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
3905     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
3909 if test "$build_cpu" != "$host_cpu" -o "$DISABLE_DYNLOADING" = TRUE; then
3910     # To allow building Windows multi-arch releases without cross-tooling
3911     if test "$DISABLE_DYNLOADING" = TRUE -o \( -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH" \); then
3912         cross_compiling="yes"
3913     fi
3916 if test "$cross_compiling" = "yes"; then
3917     export CROSS_COMPILING=TRUE
3918     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
3919         ENABLE_WASM_STRIP=TRUE
3920     fi
3921 else
3922     CROSS_COMPILING=
3923     BUILD_TYPE="$BUILD_TYPE NATIVE"
3925 AC_SUBST(CROSS_COMPILING)
3926 AC_SUBST(ENABLE_WASM_STRIP)
3928 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
3929 # NOTE: must _not_ be used for bundled external libraries!
3930 ISYSTEM=
3931 if test "$GCC" = "yes"; then
3932     AC_MSG_CHECKING( for -isystem )
3933     save_CFLAGS=$CFLAGS
3934     CFLAGS="$CFLAGS -isystem /usr/include -Werror"
3935     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
3936     CFLAGS=$save_CFLAGS
3937     if test -n "$ISYSTEM"; then
3938         AC_MSG_RESULT(yes)
3939     else
3940         AC_MSG_RESULT(no)
3941     fi
3943 if test -z "$ISYSTEM"; then
3944     # fall back to using -I
3945     ISYSTEM=-I
3947 AC_SUBST(ISYSTEM)
3949 dnl ===================================================================
3950 dnl  Check which Visual Studio compiler is used
3951 dnl ===================================================================
3953 map_vs_year_to_version()
3955     # Return value: $vsversion
3957     unset vsversion
3959     case $1 in
3960     2019)
3961         vsversion=16;;
3962     2022)
3963         vsversion=17;;
3964     *)
3965         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
3966     esac
3969 vs_versions_to_check()
3971     # Args: $1 (optional) : versions to check, in the order of preference
3972     # Return value: $vsversions
3974     unset vsversions
3976     if test -n "$1"; then
3977         map_vs_year_to_version "$1"
3978         vsversions=$vsversion
3979     else
3980         # Default version is 2019
3981         vsversions="16"
3982     fi
3985 win_get_env_from_vsvars32bat()
3987     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
3988     # Also seems to be located in another directory under the same name: vsvars32.bat
3989     # https://github.com/bazelbuild/bazel/blob/master/src/main/native/build_windows_jni.sh#L56-L57
3990     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$(cygpath -w $VC_PRODUCT_DIR)" > $WRAPPERBATCHFILEPATH
3991     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
3992     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
3993     local result
3994     if test "$build_os" = "wsl"; then
3995         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
3996     else
3997         chmod +x $WRAPPERBATCHFILEPATH
3998         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
3999     fi
4000     rm -f $WRAPPERBATCHFILEPATH
4001     printf '%s' "$result"
4004 find_ucrt()
4006     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/InstallationFolder"
4007     if test -n "$regvalue"; then
4008         PathFormat "$regvalue"
4009         UCRTSDKDIR=$formatted_path_unix
4010         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion"
4011         UCRTVERSION=$regvalue
4012         # Rest if not exist
4013         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
4014           UCRTSDKDIR=
4015         fi
4016     fi
4017     if test -z "$UCRTSDKDIR"; then
4018         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
4019         ide_env_file="${ide_env_dir}VsDevCmd.bat"
4020         if test -f "$ide_env_file"; then
4021             PathFormat "$(win_get_env_from_vsvars32bat UniversalCRTSdkDir)"
4022             UCRTSDKDIR=$formatted_path
4023             UCRTVERSION=$(win_get_env_from_vsvars32bat UCRTVersion)
4024             dnl Hack needed at least by tml:
4025             if test "$UCRTVERSION" = 10.0.15063.0 \
4026                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
4027                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
4028             then
4029                 UCRTVERSION=10.0.14393.0
4030             fi
4031         else
4032           AC_MSG_ERROR([No UCRT found])
4033         fi
4034     fi
4037 find_msvc()
4039     # Find Visual C++
4040     # Args: $1 (optional) : The VS version year
4041     # Return values: $vctest, $vcyear, $vctoolset, $vcnumwithdot, $vcbuildnumber
4043     unset vctest vctoolset vcnumwithdot vcbuildnumber
4045     vs_versions_to_check "$1"
4046     if test "$build_os" = wsl; then
4047         vswhere="$PROGRAMFILESX86"
4048     else
4049         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
4050     fi
4051     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
4052     PathFormat "$vswhere"
4053     vswhere=$formatted_path_unix
4054     for ver in $vsversions; do
4055         vswhereoutput=`$vswhere -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4056         if test -z "$vswhereoutput"; then
4057             vswhereoutput=`$vswhere -prerelease -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4058         fi
4059         # Fall back to all MS products (this includes VC++ Build Tools)
4060         if ! test -n "$vswhereoutput"; then
4061             AC_MSG_CHECKING([VC++ Build Tools and similar])
4062             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4063         fi
4064         if test -n "$vswhereoutput"; then
4065             PathFormat "$vswhereoutput"
4066             vctest=$formatted_path_unix
4067             break
4068         fi
4069     done
4071     if test -n "$vctest"; then
4072         vcnumwithdot="$ver.0"
4073         case "$vcnumwithdot" in
4074         16.0)
4075             vcyear=2019
4076             vctoolset=v142
4077             ;;
4078         17.0)
4079             vcyear=2022
4080             vctoolset=v143
4081             ;;
4082         esac
4083         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
4085     fi
4088 test_cl_exe()
4090     AC_MSG_CHECKING([$1 compiler])
4092     CL_EXE_PATH="$2/cl.exe"
4094     if test ! -f "$CL_EXE_PATH"; then
4095         if test "$1" = "multi-arch"; then
4096             AC_MSG_WARN([no compiler (cl.exe) in $2])
4097             return 1
4098         else
4099             AC_MSG_ERROR([no compiler (cl.exe) in $2])
4100         fi
4101     fi
4103     dnl ===========================================================
4104     dnl  Check for the corresponding mspdb*.dll
4105     dnl ===========================================================
4107     # MSVC 15.0 has libraries from 14.0?
4108     mspdbnum="140"
4110     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
4111         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
4112     fi
4114     # The compiles has to find its shared libraries
4115     OLD_PATH="$PATH"
4116     TEMP_PATH=`cygpath -d "$2"`
4117     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
4119     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
4120         AC_MSG_ERROR([no compiler (cl.exe) in $2])
4121     fi
4123     PATH="$OLD_PATH"
4125     AC_MSG_RESULT([$CL_EXE_PATH])
4128 SOLARINC=
4129 MSBUILD_PATH=
4130 DEVENV=
4131 if test "$_os" = "WINNT"; then
4132     AC_MSG_CHECKING([Visual C++])
4133     find_msvc "$with_visual_studio"
4134     if test -z "$vctest"; then
4135         if test -n "$with_visual_studio"; then
4136             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
4137         else
4138             AC_MSG_ERROR([no Visual Studio installation found])
4139         fi
4140     fi
4141     AC_MSG_RESULT([])
4143     VC_PRODUCT_DIR="$vctest/VC"
4144     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
4146     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
4147     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
4148         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
4149         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
4150         if test $? -ne 0; then
4151             WIN_MULTI_ARCH=""
4152             WIN_OTHER_ARCH=""
4153         fi
4154     fi
4156     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
4157         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
4158         test_cl_exe "build" "$MSVC_BUILD_PATH"
4159     fi
4161     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
4162         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
4163         test_cl_exe "host" "$MSVC_HOST_PATH"
4164     else
4165         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
4166     fi
4168     AC_MSG_CHECKING([for short pathname of VC product directory])
4169     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
4170     AC_MSG_RESULT([$VC_PRODUCT_DIR])
4172     UCRTSDKDIR=
4173     UCRTVERSION=
4175     AC_MSG_CHECKING([for UCRT location])
4176     find_ucrt
4177     # find_ucrt errors out if it doesn't find it
4178     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
4179     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
4180     ucrtincpath_formatted=$formatted_path
4181     # SOLARINC is used for external modules and must be set too.
4182     # And no, it's not sufficient to set SOLARINC only, as configure
4183     # itself doesn't honour it.
4184     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
4185     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
4186     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
4187     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4189     AC_SUBST(UCRTSDKDIR)
4190     AC_SUBST(UCRTVERSION)
4192     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4193     # Find the proper version of MSBuild.exe to use based on the VS version
4194     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath
4195     if test -z "$regvalue" ; then
4196         if test "$WIN_BUILD_ARCH" != "x64"; then
4197             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4198         else
4199             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4200         fi
4201     fi
4202     if test -d "$regvalue" ; then
4203         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4204         AC_MSG_RESULT([$regvalue])
4205     else
4206         AC_MSG_ERROR([MSBuild.exe location not found])
4207     fi
4209     # Find the version of devenv.exe
4210     # MSVC 2017 devenv does not start properly from a DOS 8.3 path
4211     DEVENV=$(cygpath -lm "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe")
4212     DEVENV_unix=$(cygpath -u "$DEVENV")
4213     if test ! -e "$DEVENV_unix"; then
4214         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4215     fi
4217     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4218     dnl needed when building CLR code:
4219     if test -z "$MSVC_CXX"; then
4220         # This gives us a posix path with 8.3 filename restrictions
4221         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4222     fi
4224     if test -z "$CC"; then
4225         CC=$MSVC_CXX
4226         CC_BASE=`first_arg_basename "$CC"`
4227     fi
4228     if test -z "$CXX"; then
4229         CXX=$MSVC_CXX
4230         CXX_BASE=`first_arg_basename "$CXX"`
4231     fi
4233     if test -n "$CC"; then
4234         # Remove /cl.exe from CC case insensitive
4235         AC_MSG_NOTICE([found Visual C++ $vcyear])
4237         main_include_dir=`cygpath -d -m "$COMPATH/Include"`
4238         CPPFLAGS="$CPPFLAGS -I$main_include_dir"
4240         PathFormat "$COMPATH"
4241         COMPATH=`win_short_path_for_make "$formatted_path"`
4243         VCVER=$vcnumwithdot
4244         VCTOOLSET=$vctoolset
4246         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4247         # are always "better", we list them in reverse chronological order.
4249         case "$vcnumwithdot" in
4250         16.0 | 17.0)
4251             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4252             ;;
4253         esac
4255         # The expectation is that --with-windows-sdk should not need to be used
4256         if test -n "$with_windows_sdk"; then
4257             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4258             *" "$with_windows_sdk" "*)
4259                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4260                 ;;
4261             *)
4262                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4263                 ;;
4264             esac
4265         fi
4267         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4268         ac_objext=obj
4269         ac_exeext=exe
4271     else
4272         AC_MSG_ERROR([Visual C++ not found after all, huh])
4273     fi
4275     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4276     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4277         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4278         // between Visual Studio versions and _MSC_VER:
4279         #if _MSC_VER < 1925
4280         #error
4281         #endif
4282     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4284     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4285     # version of the Explorer extension (and maybe other small
4286     # bits, too) needed when installing a 32-bit LibreOffice on a
4287     # 64-bit OS. The 64-bit Explorer extension is a feature that
4288     # has been present since long in OOo. Don't confuse it with
4289     # building LibreOffice itself as 64-bit code.
4291     BUILD_X64=
4292     CXX_X64_BINARY=
4294     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4295         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4296         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4297              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4298         then
4299             BUILD_X64=TRUE
4300             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4301             AC_MSG_RESULT([found])
4302         else
4303             AC_MSG_RESULT([not found])
4304             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4305         fi
4306     elif test "$WIN_HOST_ARCH" = "x64"; then
4307         CXX_X64_BINARY=$CXX
4308     fi
4309     AC_SUBST(BUILD_X64)
4311     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4312     AC_SUBST(CXX_X64_BINARY)
4314     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4315     # needed to support TWAIN scan on both 32- and 64-bit systems
4317     case "$WIN_HOST_ARCH" in
4318     x64)
4319         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4320         if test -n "$CXX_X86_BINARY"; then
4321             BUILD_X86=TRUE
4322             AC_MSG_RESULT([preset])
4323         elif test -n "$WIN_MULTI_ARCH"; then
4324             BUILD_X86=TRUE
4325             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4326             AC_MSG_RESULT([found])
4327         else
4328             AC_MSG_RESULT([not found])
4329             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4330         fi
4331         ;;
4332     x86)
4333         BUILD_X86=TRUE
4334         CXX_X86_BINARY=$MSVC_CXX
4335         ;;
4336     esac
4337     AC_SUBST(BUILD_X86)
4338     AC_SUBST(CXX_X86_BINARY)
4340 AC_SUBST(VCVER)
4341 AC_SUBST(VCTOOLSET)
4342 AC_SUBST(DEVENV)
4343 AC_SUBST(MSVC_CXX)
4345 COM_IS_CLANG=
4346 AC_MSG_CHECKING([whether the compiler is actually Clang])
4347 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4348     #ifndef __clang__
4349     you lose
4350     #endif
4351     int foo=42;
4352     ]])],
4353     [AC_MSG_RESULT([yes])
4354      COM_IS_CLANG=TRUE],
4355     [AC_MSG_RESULT([no])])
4356 AC_SUBST(COM_IS_CLANG)
4358 CLANGVER=
4359 if test "$COM_IS_CLANG" = TRUE; then
4360     AC_MSG_CHECKING([whether Clang is new enough])
4361     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4362         #if !defined __apple_build_version__
4363         #error
4364         #endif
4365         ]])],
4366         [my_apple_clang=yes],[my_apple_clang=])
4367     if test "$my_apple_clang" = yes; then
4368         AC_MSG_RESULT([assumed yes (Apple Clang)])
4369     elif test "$_os" = Emscripten; then
4370         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4371     else
4372         if test "$_os" = WINNT; then
4373             dnl In which case, assume clang-cl:
4374             my_args="/EP /TC"
4375         else
4376             my_args="-E -P"
4377         fi
4378         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC $my_args - | sed 's/ //g'`
4379         CLANG_FULL_VERSION=`echo __clang_version__ | $CC $my_args -`
4380         CLANGVER=`echo $clang_version \
4381             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4382         if test "$CLANGVER" -ge 80001; then
4383             AC_MSG_RESULT([yes ($clang_version)])
4384         else
4385             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 8.0.1])
4386         fi
4387         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4388         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4389     fi
4392 SHOWINCLUDES_PREFIX=
4393 if test "$_os" = WINNT; then
4394     dnl We need to guess the prefix of the -showIncludes output, it can be
4395     dnl localized
4396     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4397     echo "#include <stdlib.h>" > conftest.c
4398     SHOWINCLUDES_PREFIX=`$CC $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4399         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4400     rm -f conftest.c conftest.obj
4401     if test -z "$SHOWINCLUDES_PREFIX"; then
4402         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4403     else
4404         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4405     fi
4407 AC_SUBST(SHOWINCLUDES_PREFIX)
4410 # prefix C with ccache if needed
4412 if test "$CCACHE" != ""; then
4413     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4415     AC_LANG_PUSH([C])
4416     save_CFLAGS=$CFLAGS
4417     CFLAGS="$CFLAGS --ccache-skip -O2"
4418     # msvc does not fail on unknown options, check stdout
4419     if test "$COM" = MSC; then
4420         CFLAGS="$CFLAGS -nologo"
4421     fi
4422     save_ac_c_werror_flag=$ac_c_werror_flag
4423     ac_c_werror_flag=yes
4424     dnl an empty program will do, we're checking the compiler flags
4425     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4426                       [use_ccache=yes], [use_ccache=no])
4427     CFLAGS=$save_CFLAGS
4428     ac_c_werror_flag=$save_ac_c_werror_flag
4429     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4430         AC_MSG_RESULT([yes])
4431     else
4432         CC="$CCACHE $CC"
4433         CC_BASE="ccache $CC_BASE"
4434         AC_MSG_RESULT([no])
4435     fi
4436     AC_LANG_POP([C])
4439 # ===================================================================
4440 # check various GCC options that Clang does not support now but maybe
4441 # will somewhen in the future, check them even for GCC, so that the
4442 # flags are set
4443 # ===================================================================
4445 HAVE_GCC_GGDB2=
4446 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4447     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4448     save_CFLAGS=$CFLAGS
4449     CFLAGS="$CFLAGS -Werror -ggdb2"
4450     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4451     CFLAGS=$save_CFLAGS
4452     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4453         AC_MSG_RESULT([yes])
4454     else
4455         AC_MSG_RESULT([no])
4456     fi
4458     if test "$host_cpu" = "m68k"; then
4459         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4460         save_CFLAGS=$CFLAGS
4461         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4462         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4463         CFLAGS=$save_CFLAGS
4464         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4465             AC_MSG_RESULT([yes])
4466         else
4467             AC_MSG_ERROR([no])
4468         fi
4469     fi
4471 AC_SUBST(HAVE_GCC_GGDB2)
4473 dnl ===================================================================
4474 dnl  Test the gcc version
4475 dnl ===================================================================
4476 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4477     AC_MSG_CHECKING([the GCC version])
4478     _gcc_version=`$CC -dumpfullversion`
4479     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4480         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4481     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4483     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4485     if test "$gcc_full_version" -lt 70000; then
4486         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 7.0.0])
4487     fi
4488 else
4489     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4490     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4491     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4492     # (which reports itself as GCC 4.2.1).
4493     GCC_VERSION=
4495 AC_SUBST(GCC_VERSION)
4497 dnl Set the ENABLE_DBGUTIL variable
4498 dnl ===================================================================
4499 AC_MSG_CHECKING([whether to build with additional debug utilities])
4500 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4501     ENABLE_DBGUTIL="TRUE"
4502     # this is an extra var so it can have different default on different MSVC
4503     # versions (in case there are version specific problems with it)
4504     MSVC_USE_DEBUG_RUNTIME="TRUE"
4506     AC_MSG_RESULT([yes])
4507     # cppunit and graphite expose STL in public headers
4508     if test "$with_system_cppunit" = "yes"; then
4509         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4510     else
4511         with_system_cppunit=no
4512     fi
4513     if test "$with_system_graphite" = "yes"; then
4514         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4515     else
4516         with_system_graphite=no
4517     fi
4518     if test "$with_system_orcus" = "yes"; then
4519         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4520     else
4521         with_system_orcus=no
4522     fi
4523     if test "$with_system_libcmis" = "yes"; then
4524         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4525     else
4526         with_system_libcmis=no
4527     fi
4528     if test "$with_system_hunspell" = "yes"; then
4529         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4530     else
4531         with_system_hunspell=no
4532     fi
4533     if test "$with_system_gpgmepp" = "yes"; then
4534         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4535     else
4536         with_system_gpgmepp=no
4537     fi
4538     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4539     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4540     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4541     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4542     # of those two is using the system variant:
4543     if test "$with_system_libnumbertext" = "yes"; then
4544         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4545     else
4546         with_system_libnumbertext=no
4547     fi
4548     if test "$with_system_libwps" = "yes"; then
4549         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4550     else
4551         with_system_libwps=no
4552     fi
4553 else
4554     ENABLE_DBGUTIL=""
4555     MSVC_USE_DEBUG_RUNTIME=""
4556     AC_MSG_RESULT([no])
4558 AC_SUBST(ENABLE_DBGUTIL)
4559 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4561 dnl Set the ENABLE_DEBUG variable.
4562 dnl ===================================================================
4563 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4564     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4566 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4567     if test -z "$libo_fuzzed_enable_debug"; then
4568         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4569     else
4570         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4571         enable_debug=yes
4572     fi
4575 AC_MSG_CHECKING([whether to do a debug build])
4576 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4577     ENABLE_DEBUG="TRUE"
4578     if test -n "$ENABLE_DBGUTIL" ; then
4579         AC_MSG_RESULT([yes (dbgutil)])
4580     else
4581         AC_MSG_RESULT([yes])
4582     fi
4583 else
4584     ENABLE_DEBUG=""
4585     AC_MSG_RESULT([no])
4587 AC_SUBST(ENABLE_DEBUG)
4589 dnl ===================================================================
4590 dnl Select the linker to use (gold/lld/ld.bfd/mold).
4591 dnl This is done only after compiler checks (need to know if Clang is
4592 dnl used, for different defaults) and after checking if a debug build
4593 dnl is wanted (non-debug builds get the default linker if not explicitly
4594 dnl specified otherwise).
4595 dnl All checks for linker features/options should come after this.
4596 dnl ===================================================================
4597 check_use_ld()
4599     use_ld=-fuse-ld=${1%%:*}
4600     use_ld_path=${1#*:}
4601     if test "$use_ld_path" != "$1"; then
4602         if test "$COM_IS_CLANG" = TRUE; then
4603             if test "$CLANGVER" -ge 120000; then
4604                 use_ld="${use_ld} --ld-path=${use_ld_path}"
4605             else
4606                 use_ld="-fuse-ld=${use_ld_path}"
4607             fi
4608         else
4609             # I tried to use gcc's '-B<path>' and a directory + symlink setup in
4610             # $BUILDDIR, but libtool always filtered-out that option, so gcc wouldn't
4611             # pickup the alternative linker, when called by libtool for linking.
4612             # For mold, one can use LD_PRELOAD=/usr/lib/mold/mold-wrapper.so instead.
4613             AC_MSG_ERROR([A linker path is just supported with clang, because of libtool's -B filtering!])
4614         fi
4615     fi
4616     use_ld_fail_if_error=$2
4617     use_ld_ok=
4618     AC_MSG_CHECKING([for $use_ld linker support])
4619     use_ld_ldflags_save="$LDFLAGS"
4620     LDFLAGS="$LDFLAGS $use_ld"
4621     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4622 #include <stdio.h>
4623         ],[
4624 printf ("hello world\n");
4625         ])], USE_LD=$use_ld, [])
4626     if test -n "$USE_LD"; then
4627         AC_MSG_RESULT( yes )
4628         use_ld_ok=yes
4629     else
4630         if test -n "$use_ld_fail_if_error"; then
4631             AC_MSG_ERROR( no )
4632         else
4633             AC_MSG_RESULT( no )
4634         fi
4635     fi
4636     if test -n "$use_ld_ok"; then
4637         dnl keep the value of LDFLAGS
4638         return 0
4639     fi
4640     LDFLAGS="$use_ld_ldflags_save"
4641     return 1
4643 USE_LD=
4644 if test "$enable_ld" != "no"; then
4645     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4646         if test -n "$enable_ld"; then
4647             check_use_ld "$enable_ld" fail_if_error
4648         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4649             dnl non-debug builds default to the default linker
4650             true
4651         elif test -n "$COM_IS_CLANG"; then
4652             check_use_ld lld
4653             if test $? -ne 0; then
4654                 check_use_ld gold
4655                 if test $? -ne 0; then
4656                     check_use_ld mold
4657                 fi
4658             fi
4659         else
4660             # For gcc first try gold, new versions also support lld/mold.
4661             check_use_ld gold
4662             if test $? -ne 0; then
4663                 check_use_ld lld
4664                 if test $? -ne 0; then
4665                     check_use_ld mold
4666                 fi
4667             fi
4668         fi
4669         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4670         rm conftest.out
4671         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD|^mold)')
4672         if test -z "$ld_used"; then
4673             ld_used="unknown"
4674         fi
4675         AC_MSG_CHECKING([for linker that is used])
4676         AC_MSG_RESULT([$ld_used])
4677         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4678             if echo "$ld_used" | grep -q "^GNU ld"; then
4679                 AC_MSG_WARN([The default GNU linker is slow, consider using LLD, mold or the GNU gold linker.])
4680                 add_warning "The default GNU linker is slow, consider using LLD, mold or the GNU gold linker."
4681             fi
4682         fi
4683     else
4684         if test "$enable_ld" = "yes"; then
4685             AC_MSG_ERROR([--enable-ld not supported])
4686         fi
4687     fi
4689 AC_SUBST(USE_LD)
4690 AC_SUBST(LD)
4692 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4693 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4694     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4695     bsymbolic_functions_ldflags_save=$LDFLAGS
4696     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4697     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4698 #include <stdio.h>
4699         ],[
4700 printf ("hello world\n");
4701         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4702     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4703         AC_MSG_RESULT( found )
4704     else
4705         AC_MSG_RESULT( not found )
4706     fi
4707     LDFLAGS=$bsymbolic_functions_ldflags_save
4709 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4711 LD_GC_SECTIONS=
4712 if test "$GCC" = "yes"; then
4713     for flag in "--gc-sections" "-dead_strip"; do
4714         AC_MSG_CHECKING([for $flag linker support])
4715         ldflags_save=$LDFLAGS
4716         LDFLAGS="$LDFLAGS -Wl,$flag"
4717         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4718 #include <stdio.h>
4719             ],[
4720 printf ("hello world\n");
4721             ])],[
4722             LD_GC_SECTIONS="-Wl,$flag"
4723             AC_MSG_RESULT( found )
4724             ], [
4725             AC_MSG_RESULT( not found )
4726             ])
4727         LDFLAGS=$ldflags_save
4728         if test -n "$LD_GC_SECTIONS"; then
4729             break
4730         fi
4731     done
4733 AC_SUBST(LD_GC_SECTIONS)
4735 HAVE_EXTERNAL_DWARF=
4736 if test "$enable_split_debug" != no; then
4737     use_split_debug=
4738     if test -n "$ENABLE_LTO"; then
4739         : # Inherently incompatible, since no debug info is created while compiling, GCC complains.
4740     elif test "$enable_split_debug" = yes; then
4741         use_split_debug=1
4742     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4743     elif test "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4744         use_split_debug=1
4745     fi
4746     if test -n "$use_split_debug"; then
4747         if test "$_os" = "Emscripten"; then
4748             TEST_CC_FLAG=-gseparate-dwarf
4749         else
4750             TEST_CC_FLAG=-gsplit-dwarf
4751         fi
4752         AC_MSG_CHECKING([whether $CC_BASE supports $TEST_CC_FLAG])
4753         save_CFLAGS=$CFLAGS
4754         CFLAGS="$CFLAGS -Werror $TEST_CC_FLAG"
4755         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_EXTERNAL_DWARF=TRUE ],[])
4756         CFLAGS=$save_CFLAGS
4757         if test "$HAVE_EXTERNAL_DWARF" = "TRUE"; then
4758             AC_MSG_RESULT([yes])
4759         else
4760             if test "$enable_split_debug" = yes; then
4761                 AC_MSG_ERROR([no])
4762             else
4763                 AC_MSG_RESULT([no])
4764             fi
4765         fi
4766     fi
4767     if test -z "$HAVE_EXTERNAL_DWARF" -a "$test_split_debug" = "yes" -a -n "$use_split_debug"; then
4768         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4769         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4770     fi
4772 AC_SUBST(HAVE_EXTERNAL_DWARF)
4774 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4775 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4776 save_CFLAGS=$CFLAGS
4777 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4778 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4779 CFLAGS=$save_CFLAGS
4780 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4781     AC_MSG_RESULT([yes])
4782 else
4783     AC_MSG_RESULT([no])
4785 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4787 ENABLE_GDB_INDEX=
4788 if test "$enable_gdb_index" != "no"; then
4789     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4790     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4791         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4792         save_CFLAGS=$CFLAGS
4793         CFLAGS="$CFLAGS -Werror -ggnu-pubnames"
4794         have_ggnu_pubnames=
4795         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4796         if test "$have_ggnu_pubnames" != "TRUE"; then
4797             if test "$enable_gdb_index" = "yes"; then
4798                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4799             else
4800                 AC_MSG_RESULT( no )
4801             fi
4802         else
4803             AC_MSG_RESULT( yes )
4804             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4805             ldflags_save=$LDFLAGS
4806             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4807             AC_LINK_IFELSE([AC_LANG_PROGRAM([
4808 #include <stdio.h>
4809                 ],[
4810 printf ("hello world\n");
4811                 ])], ENABLE_GDB_INDEX=TRUE, [])
4812             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
4813                 AC_MSG_RESULT( yes )
4814             else
4815                 if test "$enable_gdb_index" = "yes"; then
4816                     AC_MSG_ERROR( no )
4817                 else
4818                     AC_MSG_RESULT( no )
4819                 fi
4820             fi
4821             LDFLAGS=$ldflags_save
4822         fi
4823         CFLAGS=$save_CFLAGS
4824         fi
4825     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4826         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
4827         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
4828     fi
4830 AC_SUBST(ENABLE_GDB_INDEX)
4832 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
4833     enable_sal_log=yes
4835 if test "$enable_sal_log" = yes; then
4836     ENABLE_SAL_LOG=TRUE
4838 AC_SUBST(ENABLE_SAL_LOG)
4840 dnl Check for enable symbols option
4841 dnl ===================================================================
4842 AC_MSG_CHECKING([whether to generate debug information])
4843 if test -z "$enable_symbols"; then
4844     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4845         enable_symbols=yes
4846     else
4847         enable_symbols=no
4848     fi
4850 if test "$enable_symbols" = yes; then
4851     ENABLE_SYMBOLS_FOR=all
4852     AC_MSG_RESULT([yes])
4853 elif test "$enable_symbols" = no; then
4854     ENABLE_SYMBOLS_FOR=
4855     AC_MSG_RESULT([no])
4856 else
4857     # Selective debuginfo.
4858     ENABLE_SYMBOLS_FOR="$enable_symbols"
4859     AC_MSG_RESULT([for "$enable_symbols"])
4861 AC_SUBST(ENABLE_SYMBOLS_FOR)
4863 if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then
4864     # Building on Android with full symbols: without enough memory the linker never finishes currently.
4865     AC_MSG_CHECKING([whether enough memory is available for linking])
4866     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
4867     # Check for 15GB, as Linux reports a bit less than the physical memory size.
4868     if test -n "$mem_size" -a $mem_size -lt 15728640; then
4869         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
4870     else
4871         AC_MSG_RESULT([yes])
4872     fi
4875 ENABLE_OPTIMIZED=
4876 ENABLE_OPTIMIZED_DEBUG=
4877 AC_MSG_CHECKING([whether to compile with optimization flags])
4878 if test -z "$enable_optimized"; then
4879     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4880         enable_optimized=no
4881     else
4882         enable_optimized=yes
4883     fi
4885 if test "$enable_optimized" = yes; then
4886     ENABLE_OPTIMIZED=TRUE
4887     AC_MSG_RESULT([yes])
4888 elif test "$enable_optimized" = debug; then
4889     ENABLE_OPTIMIZED_DEBUG=TRUE
4890     AC_MSG_RESULT([yes (debug)])
4891     HAVE_GCC_OG=
4892     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4893         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
4894         save_CFLAGS=$CFLAGS
4895         CFLAGS="$CFLAGS -Werror -Og"
4896         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
4897         CFLAGS=$save_CFLAGS
4898         if test "$HAVE_GCC_OG" = "TRUE"; then
4899             AC_MSG_RESULT([yes])
4900         else
4901             AC_MSG_RESULT([no])
4902         fi
4903     fi
4904     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
4905         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
4906     fi
4907 else
4908     AC_MSG_RESULT([no])
4910 AC_SUBST(ENABLE_OPTIMIZED)
4911 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
4914 # determine CPUNAME, OS, ...
4916 case "$host_os" in
4918 aix*)
4919     COM=GCC
4920     CPUNAME=POWERPC
4921     OS=AIX
4922     RTL_OS=AIX
4923     RTL_ARCH=PowerPC
4924     PLATFORMID=aix_powerpc
4925     P_SEP=:
4926     ;;
4928 cygwin*|wsl*)
4929     # Already handled
4930     ;;
4932 darwin*)
4933     COM=GCC
4934     OS=MACOSX
4935     RTL_OS=MacOSX
4936     P_SEP=:
4938     case "$host_cpu" in
4939     aarch64|arm64)
4940         if test "$enable_ios_simulator" = "yes"; then
4941             OS=iOS
4942         else
4943             CPUNAME=AARCH64
4944             RTL_ARCH=AARCH64
4945             PLATFORMID=macosx_aarch64
4946         fi
4947         ;;
4948     x86_64)
4949         if test "$enable_ios_simulator" = "yes"; then
4950             OS=iOS
4951         fi
4952         CPUNAME=X86_64
4953         RTL_ARCH=X86_64
4954         PLATFORMID=macosx_x86_64
4955         ;;
4956     *)
4957         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4958         ;;
4959     esac
4960     ;;
4962 ios*)
4963     COM=GCC
4964     OS=iOS
4965     RTL_OS=iOS
4966     P_SEP=:
4968     case "$host_cpu" in
4969     aarch64|arm64)
4970         if test "$enable_ios_simulator" = "yes"; then
4971             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
4972         fi
4973         ;;
4974     *)
4975         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4976         ;;
4977     esac
4978     CPUNAME=AARCH64
4979     RTL_ARCH=AARCH64
4980     PLATFORMID=ios_arm64
4981     ;;
4983 dragonfly*)
4984     COM=GCC
4985     OS=DRAGONFLY
4986     RTL_OS=DragonFly
4987     P_SEP=:
4989     case "$host_cpu" in
4990     i*86)
4991         CPUNAME=INTEL
4992         RTL_ARCH=x86
4993         PLATFORMID=dragonfly_x86
4994         ;;
4995     x86_64)
4996         CPUNAME=X86_64
4997         RTL_ARCH=X86_64
4998         PLATFORMID=dragonfly_x86_64
4999         ;;
5000     *)
5001         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5002         ;;
5003     esac
5004     ;;
5006 freebsd*)
5007     COM=GCC
5008     RTL_OS=FreeBSD
5009     OS=FREEBSD
5010     P_SEP=:
5012     case "$host_cpu" in
5013     aarch64)
5014         CPUNAME=AARCH64
5015         PLATFORMID=freebsd_aarch64
5016         RTL_ARCH=AARCH64
5017         ;;
5018     i*86)
5019         CPUNAME=INTEL
5020         RTL_ARCH=x86
5021         PLATFORMID=freebsd_x86
5022         ;;
5023     x86_64|amd64)
5024         CPUNAME=X86_64
5025         RTL_ARCH=X86_64
5026         PLATFORMID=freebsd_x86_64
5027         ;;
5028     powerpc64)
5029         CPUNAME=POWERPC64
5030         RTL_ARCH=PowerPC_64
5031         PLATFORMID=freebsd_powerpc64
5032         ;;
5033     powerpc|powerpcspe)
5034         CPUNAME=POWERPC
5035         RTL_ARCH=PowerPC
5036         PLATFORMID=freebsd_powerpc
5037         ;;
5038     *)
5039         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5040         ;;
5041     esac
5042     ;;
5044 haiku*)
5045     COM=GCC
5046     GUIBASE=haiku
5047     RTL_OS=Haiku
5048     OS=HAIKU
5049     P_SEP=:
5051     case "$host_cpu" in
5052     i*86)
5053         CPUNAME=INTEL
5054         RTL_ARCH=x86
5055         PLATFORMID=haiku_x86
5056         ;;
5057     x86_64|amd64)
5058         CPUNAME=X86_64
5059         RTL_ARCH=X86_64
5060         PLATFORMID=haiku_x86_64
5061         ;;
5062     *)
5063         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5064         ;;
5065     esac
5066     ;;
5068 kfreebsd*)
5069     COM=GCC
5070     OS=LINUX
5071     RTL_OS=kFreeBSD
5072     P_SEP=:
5074     case "$host_cpu" in
5076     i*86)
5077         CPUNAME=INTEL
5078         RTL_ARCH=x86
5079         PLATFORMID=kfreebsd_x86
5080         ;;
5081     x86_64)
5082         CPUNAME=X86_64
5083         RTL_ARCH=X86_64
5084         PLATFORMID=kfreebsd_x86_64
5085         ;;
5086     *)
5087         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5088         ;;
5089     esac
5090     ;;
5092 linux-gnu*|linux-musl*)
5093     COM=GCC
5094     OS=LINUX
5095     RTL_OS=Linux
5096     P_SEP=:
5098     case "$host_cpu" in
5100     aarch64)
5101         CPUNAME=AARCH64
5102         PLATFORMID=linux_aarch64
5103         RTL_ARCH=AARCH64
5104         EPM_FLAGS="-a arm64"
5105         ;;
5106     alpha)
5107         CPUNAME=AXP
5108         RTL_ARCH=ALPHA
5109         PLATFORMID=linux_alpha
5110         ;;
5111     arm*)
5112         CPUNAME=ARM
5113         EPM_FLAGS="-a arm"
5114         RTL_ARCH=ARM_EABI
5115         PLATFORMID=linux_arm_eabi
5116         case "$host_cpu" in
5117         arm*-linux)
5118             RTL_ARCH=ARM_OABI
5119             PLATFORMID=linux_arm_oabi
5120             ;;
5121         esac
5122         ;;
5123     hppa)
5124         CPUNAME=HPPA
5125         RTL_ARCH=HPPA
5126         EPM_FLAGS="-a hppa"
5127         PLATFORMID=linux_hppa
5128         ;;
5129     i*86)
5130         CPUNAME=INTEL
5131         RTL_ARCH=x86
5132         PLATFORMID=linux_x86
5133         ;;
5134     ia64)
5135         CPUNAME=IA64
5136         RTL_ARCH=IA64
5137         PLATFORMID=linux_ia64
5138         ;;
5139     mips)
5140         CPUNAME=GODSON
5141         RTL_ARCH=MIPS_EB
5142         EPM_FLAGS="-a mips"
5143         PLATFORMID=linux_mips_eb
5144         ;;
5145     mips64)
5146         CPUNAME=GODSON64
5147         RTL_ARCH=MIPS64_EB
5148         EPM_FLAGS="-a mips64"
5149         PLATFORMID=linux_mips64_eb
5150         ;;
5151     mips64el)
5152         CPUNAME=GODSON64
5153         RTL_ARCH=MIPS64_EL
5154         EPM_FLAGS="-a mips64el"
5155         PLATFORMID=linux_mips64_el
5156         ;;
5157     mipsel)
5158         CPUNAME=GODSON
5159         RTL_ARCH=MIPS_EL
5160         EPM_FLAGS="-a mipsel"
5161         PLATFORMID=linux_mips_el
5162         ;;
5163     m68k)
5164         CPUNAME=M68K
5165         RTL_ARCH=M68K
5166         PLATFORMID=linux_m68k
5167         ;;
5168     powerpc)
5169         CPUNAME=POWERPC
5170         RTL_ARCH=PowerPC
5171         PLATFORMID=linux_powerpc
5172         ;;
5173     powerpc64)
5174         CPUNAME=POWERPC64
5175         RTL_ARCH=PowerPC_64
5176         PLATFORMID=linux_powerpc64
5177         ;;
5178     powerpc64le)
5179         CPUNAME=POWERPC64
5180         RTL_ARCH=PowerPC_64_LE
5181         PLATFORMID=linux_powerpc64_le
5182         ;;
5183     sparc)
5184         CPUNAME=SPARC
5185         RTL_ARCH=SPARC
5186         PLATFORMID=linux_sparc
5187         ;;
5188     sparc64)
5189         CPUNAME=SPARC64
5190         RTL_ARCH=SPARC64
5191         PLATFORMID=linux_sparc64
5192         ;;
5193     s390)
5194         CPUNAME=S390
5195         RTL_ARCH=S390
5196         PLATFORMID=linux_s390
5197         ;;
5198     s390x)
5199         CPUNAME=S390X
5200         RTL_ARCH=S390x
5201         PLATFORMID=linux_s390x
5202         ;;
5203     x86_64)
5204         CPUNAME=X86_64
5205         RTL_ARCH=X86_64
5206         PLATFORMID=linux_x86_64
5207         ;;
5208     *)
5209         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5210         ;;
5211     esac
5212     ;;
5214 linux-android*)
5215     COM=GCC
5216     OS=ANDROID
5217     RTL_OS=Android
5218     P_SEP=:
5220     case "$host_cpu" in
5222     arm|armel)
5223         CPUNAME=ARM
5224         RTL_ARCH=ARM_EABI
5225         PLATFORMID=android_arm_eabi
5226         ;;
5227     aarch64)
5228         CPUNAME=AARCH64
5229         RTL_ARCH=AARCH64
5230         PLATFORMID=android_aarch64
5231         ;;
5232     i*86)
5233         CPUNAME=INTEL
5234         RTL_ARCH=x86
5235         PLATFORMID=android_x86
5236         ;;
5237     x86_64)
5238         CPUNAME=X86_64
5239         RTL_ARCH=X86_64
5240         PLATFORMID=android_x86_64
5241         ;;
5242     *)
5243         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5244         ;;
5245     esac
5246     ;;
5248 *netbsd*)
5249     COM=GCC
5250     OS=NETBSD
5251     RTL_OS=NetBSD
5252     P_SEP=:
5254     case "$host_cpu" in
5255     i*86)
5256         CPUNAME=INTEL
5257         RTL_ARCH=x86
5258         PLATFORMID=netbsd_x86
5259         ;;
5260     powerpc)
5261         CPUNAME=POWERPC
5262         RTL_ARCH=PowerPC
5263         PLATFORMID=netbsd_powerpc
5264         ;;
5265     sparc)
5266         CPUNAME=SPARC
5267         RTL_ARCH=SPARC
5268         PLATFORMID=netbsd_sparc
5269         ;;
5270     x86_64)
5271         CPUNAME=X86_64
5272         RTL_ARCH=X86_64
5273         PLATFORMID=netbsd_x86_64
5274         ;;
5275     *)
5276         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5277         ;;
5278     esac
5279     ;;
5281 openbsd*)
5282     COM=GCC
5283     OS=OPENBSD
5284     RTL_OS=OpenBSD
5285     P_SEP=:
5287     case "$host_cpu" in
5288     i*86)
5289         CPUNAME=INTEL
5290         RTL_ARCH=x86
5291         PLATFORMID=openbsd_x86
5292         ;;
5293     x86_64)
5294         CPUNAME=X86_64
5295         RTL_ARCH=X86_64
5296         PLATFORMID=openbsd_x86_64
5297         ;;
5298     *)
5299         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5300         ;;
5301     esac
5302     SOLARINC="$SOLARINC -I/usr/local/include"
5303     ;;
5305 solaris*)
5306     COM=GCC
5307     OS=SOLARIS
5308     RTL_OS=Solaris
5309     P_SEP=:
5311     case "$host_cpu" in
5312     i*86)
5313         CPUNAME=INTEL
5314         RTL_ARCH=x86
5315         PLATFORMID=solaris_x86
5316         ;;
5317     sparc)
5318         CPUNAME=SPARC
5319         RTL_ARCH=SPARC
5320         PLATFORMID=solaris_sparc
5321         ;;
5322     sparc64)
5323         CPUNAME=SPARC64
5324         RTL_ARCH=SPARC64
5325         PLATFORMID=solaris_sparc64
5326         ;;
5327     *)
5328         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5329         ;;
5330     esac
5331     SOLARINC="$SOLARINC -I/usr/local/include"
5332     ;;
5334 emscripten*)
5335     COM=GCC
5336     OS=EMSCRIPTEN
5337     RTL_OS=Emscripten
5338     P_SEP=:
5340     case "$host_cpu" in
5341     wasm32|wasm64)
5342         ;;
5343     *)
5344         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5345         ;;
5346     esac
5347     CPUNAME=INTEL
5348     RTL_ARCH=x86
5349     PLATFORMID=linux_x86
5350     ;;
5353     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5354     ;;
5355 esac
5357 DISABLE_GUI=""
5358 if test "$enable_gui" = "no"; then
5359     if test "$using_x11" != yes; then
5360         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5361     fi
5362     USING_X11=
5363     DISABLE_GUI=TRUE
5364     test_epoxy=no
5365 else
5366     AC_DEFINE(HAVE_FEATURE_UI)
5368 AC_SUBST(DISABLE_GUI)
5370 if test "$with_x" = "no"; then
5371     USING_X11=
5374 if test -z "$USING_X11" -a "$DISABLE_DYNLOADING" = TRUE -a "$enable_gen" = "yes"; then
5375     AC_MSG_ERROR([Can't select gen VCL plugin, if --without-x is used!])
5378 if test "$using_x11" = yes; then
5379     if test "$USING_X11" = TRUE; then
5380         AC_DEFINE(USING_X11)
5381     else
5382         disable_x11_tests
5383         if test "$DISABLE_DYNLOADING" = TRUE; then
5384             test_qt5=yes
5385         fi
5386     fi
5387 else
5388     if test "$USING_X11" = TRUE; then
5389         AC_MSG_ERROR([Platform doesn't support X11 (\$using_x11), but \$USING_X11 is set!])
5390     fi
5393 WORKDIR="${BUILDDIR}/workdir"
5394 INSTDIR="${BUILDDIR}/instdir"
5395 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5396 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5397 AC_SUBST(COM)
5398 AC_SUBST(CPUNAME)
5399 AC_SUBST(RTL_OS)
5400 AC_SUBST(RTL_ARCH)
5401 AC_SUBST(EPM_FLAGS)
5402 AC_SUBST(USING_X11)
5403 AC_SUBST([INSTDIR])
5404 AC_SUBST([INSTROOT])
5405 AC_SUBST([INSTROOTBASE])
5406 AC_SUBST(OS)
5407 AC_SUBST(P_SEP)
5408 AC_SUBST(WORKDIR)
5409 AC_SUBST(PLATFORMID)
5410 AC_SUBST(WINDOWS_X64)
5411 AC_DEFINE_UNQUOTED(SDKDIR, "$INSTDIR/$SDKDIRNAME")
5412 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5414 if test "$OS" = WNT -a "$COM" = MSC; then
5415     case "$CPUNAME" in
5416     INTEL) CPPU_ENV=msci ;;
5417     X86_64) CPPU_ENV=mscx ;;
5418     AARCH64) CPPU_ENV=msca ;;
5419     *)
5420         AC_MSG_ERROR([Unknown \$CPUNAME '$CPUNAME' for $OS / $COM"])
5421         ;;
5422     esac
5423 else
5424     CPPU_ENV=gcc3
5426 AC_SUBST(CPPU_ENV)
5428 dnl ===================================================================
5429 dnl Test which package format to use
5430 dnl ===================================================================
5431 AC_MSG_CHECKING([which package format to use])
5432 if test -n "$with_package_format" -a "$with_package_format" != no; then
5433     for i in $with_package_format; do
5434         case "$i" in
5435         aix | bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5436             ;;
5437         *)
5438             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5439 aix - AIX software distribution
5440 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5441 deb - Debian software distribution
5442 pkg - Solaris software distribution
5443 rpm - RedHat software distribution
5445 LibreOffice additionally supports:
5446 archive - .tar.gz or .zip
5447 dmg - macOS .dmg
5448 installed - installation tree
5449 msi - Windows .msi
5450         ])
5451             ;;
5452         esac
5453     done
5454     # fakeroot is needed to ensure correct file ownerships/permissions
5455     # inside deb packages and tar archives created on Linux and Solaris.
5456     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5457         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5458         if test "$FAKEROOT" = "no"; then
5459             AC_MSG_ERROR(
5460                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5461         fi
5462     fi
5463     PKGFORMAT="$with_package_format"
5464     AC_MSG_RESULT([$PKGFORMAT])
5465 else
5466     PKGFORMAT=
5467     AC_MSG_RESULT([none])
5469 AC_SUBST(PKGFORMAT)
5471 dnl ===================================================================
5472 dnl handle help related options
5474 dnl If you change help related options, please update README.help
5475 dnl ===================================================================
5477 ENABLE_HTMLHELP=
5478 HELP_OMINDEX_PAGE=
5479 HELP_ONLINE=
5480 WITH_HELPPACKS=
5482 AC_MSG_CHECKING([which help to build])
5483 if test -n "$with_help" -a "$with_help" != "no"; then
5484     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5485     BUILD_TYPE="$BUILD_TYPE HELP"
5486     case "$with_help" in
5487     "html")
5488         ENABLE_HTMLHELP=TRUE
5489         WITH_HELPPACKS=TRUE
5490         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5491         AC_MSG_RESULT([HTML (local)])
5492         ;;
5493     "online")
5494         ENABLE_HTMLHELP=TRUE
5495         HELP_ONLINE=TRUE
5496         AC_MSG_RESULT([HTML (online)])
5497         ;;
5498     yes)
5499         WITH_HELPPACKS=TRUE
5500         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5501         AC_MSG_RESULT([XML (local)])
5502         ;;
5503     *)
5504         AC_MSG_ERROR([Unknown --with-help=$with_help])
5505         ;;
5506     esac
5507 else
5508     AC_MSG_RESULT([no])
5511 AC_MSG_CHECKING([if we need to build the help index tooling])
5512 if test \( "$with_help" = yes -o "$enable_extension_integration" != no \) -a -z "$DISABLE_DYNLOADING"; then
5513     BUILD_TYPE="$BUILD_TYPE HELPTOOLS"
5514     test_clucene=yes
5515     AC_MSG_RESULT([yes])
5516 else
5517     AC_MSG_RESULT([no])
5520 AC_MSG_CHECKING([whether to enable xapian-omega support for online help])
5521 if test -n "$with_omindex" -a "$with_omindex" != "no"; then
5522     if test "$HELP_ONLINE" != TRUE; then
5523         AC_MSG_ERROR([Can't build xapian-omega index without --help=online])
5524     fi
5525     case "$with_omindex" in
5526     "server")
5527         HELP_OMINDEX_PAGE=TRUE
5528         AC_MSG_RESULT([SERVER])
5529         ;;
5530     "noxap")
5531         AC_MSG_RESULT([NOXAP])
5532         ;;
5533     *)
5534         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5535         ;;
5536     esac
5537 else
5538     AC_MSG_RESULT([no])
5541 AC_MSG_CHECKING([whether to include the XML-help support])
5542 if test "$enable_xmlhelp" = yes; then
5543     BUILD_TYPE="$BUILD_TYPE XMLHELP"
5544     test_clucene=yes
5545     AC_DEFINE(HAVE_FEATURE_XMLHELP)
5546     AC_MSG_RESULT([yes])
5547 else
5548     if test "$with_help" = yes; then
5549         add_warning "Building the XML help, but LO with disabled xmlhelp support. Generated help can't be accessed from this LO build!"
5550     fi
5551     AC_MSG_RESULT([no])
5554 dnl Test whether to integrate helppacks into the product's installer
5555 AC_MSG_CHECKING([for helppack integration])
5556 if test -z "$WITH_HELPPACKS" -o "$with_helppack_integration" = no; then
5557     AC_MSG_RESULT([no integration])
5558 else
5559     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
5560     AC_MSG_RESULT([integration])
5563 AC_SUBST([ENABLE_HTMLHELP])
5564 AC_SUBST([HELP_OMINDEX_PAGE])
5565 AC_SUBST([HELP_ONLINE])
5566 # WITH_HELPPACKS is used only in configure
5568 dnl ===================================================================
5569 dnl Set up a different compiler to produce tools to run on the build
5570 dnl machine when doing cross-compilation
5571 dnl ===================================================================
5573 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5574 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5575 if test "$cross_compiling" = "yes"; then
5576     AC_MSG_CHECKING([for BUILD platform configuration])
5577     echo
5578     rm -rf CONF-FOR-BUILD config_build.mk
5579     mkdir CONF-FOR-BUILD
5580     # Here must be listed all files needed when running the configure script. In particular, also
5581     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5582     # keep them in the same order as there.
5583     (cd $SRC_ROOT && tar cf - \
5584         config.guess \
5585         bin/get_config_variables \
5586         solenv/bin/getcompver.awk \
5587         solenv/inc/langlist.mk \
5588         download.lst \
5589         config_host.mk.in \
5590         config_host_lang.mk.in \
5591         Makefile.in \
5592         bin/bffvalidator.sh.in \
5593         bin/odfvalidator.sh.in \
5594         bin/officeotron.sh.in \
5595         hardened_runtime.xcent.in \
5596         instsetoo_native/util/openoffice.lst.in \
5597         config_host/*.in \
5598         sysui/desktop/macosx/Info.plist.in \
5599         .vscode/vs-code-template.code-workspace.in \
5600         solenv/lockfile/autoconf.h.in \
5601         ) \
5602     | (cd CONF-FOR-BUILD && tar xf -)
5603     cp configure CONF-FOR-BUILD
5604     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5605     (
5606     unset COM USING_X11 OS CPUNAME
5607     unset CC CXX SYSBASE CFLAGS
5608     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5609     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5610     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5611     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5612     if test -n "$CC_FOR_BUILD"; then
5613         export CC="$CC_FOR_BUILD"
5614         CC_BASE=`first_arg_basename "$CC"`
5615     fi
5616     if test -n "$CXX_FOR_BUILD"; then
5617         export CXX="$CXX_FOR_BUILD"
5618         CXX_BASE=`first_arg_basename "$CXX"`
5619     fi
5620     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5621     cd CONF-FOR-BUILD
5623     # Handle host configuration, which affects the cross-toolset too
5624     sub_conf_opts=""
5625     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5626     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5627     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5628     # While we don't need scripting support, we don't have a PYTHON_FOR_BUILD Java equivalent, so must enable scripting for Java
5629     if test -n "$ENABLE_JAVA"; then
5630         case "$_os" in
5631         Android)
5632             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5633             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5634             ;;
5635         *)
5636             if test -z "$with_jdk_home"; then
5637                 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.])
5638             fi
5639             ;;
5640         esac
5641     else
5642         sub_conf_opts="$sub_conf_opts --disable-scripting"
5643     fi
5644     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5645     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no --disable-database-connectivity"
5646     test -n "$with_help" -a "$with_help" != "no" && sub_conf_opts="$sub_conf_opts --with-help=$with_help"
5647     test "$enable_extensions" = yes || sub_conf_opts="$sub_conf_opts --disable-extensions"
5648     test "${enable_ld+set}" = set -a "$build_cpu" = "$host_cpu" && sub_conf_opts="$sub_conf_opts --enable-ld=${enable_ld}"
5649     test "${enable_pch+set}" = set && sub_conf_opts="$sub_conf_opts --enable-pch=${enable_pch}"
5650     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5651     test "${with_system_lockfile+set}" = set && sub_conf_opts="$sub_conf_opts --with-system-lockfile=${with_system_lockfile}"
5652     test "${enable_fuzzers}" = yes && sub_conf_opts="$sub_conf_opts --without-system-libxml"
5653     if test "$_os" = "Emscripten"; then
5654         sub_conf_opts="$sub_conf_opts --without-system-libxml --without-system-fontconfig --without-system-freetype --without-system-zlib"
5655     fi
5657     # Don't bother having configure look for stuff not needed for the build platform anyway
5658     # WARNING: any option with an argument containing spaces must be handled separately (see --with-theme)
5659     sub_conf_defaults=" \
5660         --build="$build_alias" \
5661         --disable-cairo-canvas \
5662         --disable-cups \
5663         --disable-customtarget-components \
5664         --disable-firebird-sdbc \
5665         --disable-gpgmepp \
5666         --disable-gstreamer-1-0 \
5667         --disable-gtk3 \
5668         --disable-gtk4 \
5669         --disable-libcmis \
5670         --disable-mariadb-sdbc \
5671         --disable-nss \
5672         --disable-online-update \
5673         --disable-opencl \
5674         --disable-pdfimport \
5675         --disable-postgresql-sdbc \
5676         --disable-skia \
5677         --disable-xmlhelp \
5678         --enable-dynamic-loading \
5679         --enable-icecream="$enable_icecream" \
5680         --without-doxygen \
5681         --without-webdav \
5682         --without-x \
5683         --with-tls=openssl \
5685     # single quotes added for better readability in case of spaces
5686     echo "    Running CONF-FOR-BUILD/configure" \
5687         $sub_conf_defaults \
5688         --with-parallelism="'$with_parallelism'" \
5689         --with-theme="'$with_theme'" \
5690         $sub_conf_opts \
5691         $with_build_platform_configure_options \
5692         --srcdir=$srcdir
5694     ./configure \
5695         $sub_conf_defaults \
5696         --with-parallelism="$with_parallelism" \
5697         --with-theme="$with_theme" \
5698         $sub_conf_opts \
5699         $with_build_platform_configure_options \
5700         --srcdir=$srcdir \
5701         2>&1 | sed -e 's/^/    /'
5702     if test [${PIPESTATUS[0]}] -ne 0; then
5703         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5704     fi
5706     # filter permitted build targets
5707     PERMITTED_BUILD_TARGETS="
5708         AVMEDIA
5709         BOOST
5710         CAIRO
5711         CLUCENE
5712         CUCKOO
5713         CURL
5714         DBCONNECTIVITY
5715         DESKTOP
5716         DRAGONBOX
5717         DYNLOADING
5718         EPOXY
5719         EXPAT
5720         GLM
5721         GRAPHITE
5722         HARFBUZZ
5723         HELPTOOLS
5724         ICU
5725         LCMS2
5726         LIBJPEG_TURBO
5727         LIBLANGTAG
5728         LibO
5729         LIBFFI
5730         LIBPN
5731         LIBWEBP
5732         LIBXML2
5733         LIBXSLT
5734         MDDS
5735         NATIVE
5736         OPENSSL
5737         ORCUS
5738         PYTHON
5739         SCRIPTING
5740         ZLIB
5742     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5743     # newlined lists, to use grep as a filter
5744     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5745     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5746     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5747     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5749     cp config_host.mk ../config_build.mk
5750     cp config_host_lang.mk ../config_build_lang.mk
5751     mv config.log ../config.Build.log
5752     mkdir -p ../config_build
5753     mv config_host/*.h ../config_build
5754     test -f "$WARNINGS_FILE" && mv "$WARNINGS_FILE" "../$WARNINGS_FILE_FOR_BUILD"
5756     # all these will get a _FOR_BUILD postfix
5757     DIRECT_FOR_BUILD_SETTINGS="
5758         CC
5759         CPPU_ENV
5760         CXX
5761         ILIB
5762         JAVA_HOME
5763         JAVAIFLAGS
5764         JDK
5765         JDK_SECURITYMANAGER_DISALLOWED
5766         LIBO_BIN_FOLDER
5767         LIBO_LIB_FOLDER
5768         LIBO_URE_LIB_FOLDER
5769         LIBO_URE_MISC_FOLDER
5770         OS
5771         SDKDIRNAME
5772         SYSTEM_LIBXML
5773         SYSTEM_LIBXSLT
5775     # these overwrite host config with build config
5776     OVERWRITING_SETTINGS="
5777         ANT
5778         ANT_HOME
5779         ANT_LIB
5780         JAVA_CLASSPATH_NOT_SET
5781         JAVA_SOURCE_VER
5782         JAVA_TARGET_VER
5783         JAVACFLAGS
5784         JAVACOMPILER
5785         JAVADOC
5786         JAVADOCISGJDOC
5787         LOCKFILE
5788         SYSTEM_GENBRK
5789         SYSTEM_GENCCODE
5790         SYSTEM_GENCMN
5792     # these need some special handling
5793     EXTRA_HANDLED_SETTINGS="
5794         INSTDIR
5795         INSTROOT
5796         PATH
5797         WORKDIR
5799     OLD_PATH=$PATH
5800     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
5801     BUILD_PATH=$PATH
5802     PATH=$OLD_PATH
5804     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
5805     echo "$line" >>build-config
5807     for V in $DIRECT_FOR_BUILD_SETTINGS; do
5808         VV='$'$V
5809         VV=`eval "echo $VV"`
5810         if test -n "$VV"; then
5811             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
5812             echo "$line" >>build-config
5813         fi
5814     done
5816     for V in $OVERWRITING_SETTINGS; do
5817         VV='$'$V
5818         VV=`eval "echo $VV"`
5819         if test -n "$VV"; then
5820             line=${V}='${'${V}:-$VV'}'
5821             echo "$line" >>build-config
5822         fi
5823     done
5825     for V in INSTDIR INSTROOT WORKDIR; do
5826         VV='$'$V
5827         VV=`eval "echo $VV"`
5828         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
5829         if test -n "$VV"; then
5830             line="${V}_FOR_BUILD='$VV'"
5831             echo "$line" >>build-config
5832         fi
5833     done
5835     )
5836     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
5837     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])
5838     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
5839              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
5841     eval `cat CONF-FOR-BUILD/build-config`
5843     AC_MSG_RESULT([checking for BUILD platform configuration... done])
5845     rm -rf CONF-FOR-BUILD
5846 else
5847     OS_FOR_BUILD="$OS"
5848     CC_FOR_BUILD="$CC"
5849     CPPU_ENV_FOR_BUILD="$CPPU_ENV"
5850     CXX_FOR_BUILD="$CXX"
5851     INSTDIR_FOR_BUILD="$INSTDIR"
5852     INSTROOT_FOR_BUILD="$INSTROOT"
5853     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
5854     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
5855     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
5856     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
5857     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
5858     WORKDIR_FOR_BUILD="$WORKDIR"
5860 AC_SUBST(OS_FOR_BUILD)
5861 AC_SUBST(INSTDIR_FOR_BUILD)
5862 AC_SUBST(INSTROOT_FOR_BUILD)
5863 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
5864 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
5865 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
5866 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
5867 AC_SUBST(SDKDIRNAME_FOR_BUILD)
5868 AC_SUBST(WORKDIR_FOR_BUILD)
5869 AC_SUBST(CC_FOR_BUILD)
5870 AC_SUBST(CXX_FOR_BUILD)
5871 AC_SUBST(CPPU_ENV_FOR_BUILD)
5873 dnl ===================================================================
5874 dnl Check for lockfile deps
5875 dnl ===================================================================
5876 if test -z "$CROSS_COMPILING"; then
5877     test -n "$LOCKFILE" -a "${with_system_lockfile+set}" != set && with_system_lockfile="$LOCKFILE"
5878     test "${with_system_lockfile+set}" = set || with_system_lockfile=no
5879     AC_MSG_CHECKING([which lockfile binary to use])
5880     case "$with_system_lockfile" in
5881     yes)
5882         AC_MSG_RESULT([external])
5883         AC_PATH_PROGS([LOCKFILE],[dotlockfile lockfile])
5884         ;;
5885     no)
5886         AC_MSG_RESULT([internal])
5887         ;;
5888     *)
5889         if test -x "$with_system_lockfile"; then
5890             LOCKFILE="$with_system_lockfile"
5891         else
5892             AC_MSG_ERROR(['$with_system_lockfile' is not executable.])
5893         fi
5894         AC_MSG_RESULT([$with_system_lockfile])
5895         ;;
5896     esac
5899 if test -n "$LOCKFILE" -a "$DISABLE_DYNLOADING" = TRUE; then
5900     add_warning "The default system lockfile has increasing poll intervals up to 60s, so linking executables may be delayed."
5903 AC_CHECK_HEADERS([getopt.h paths.h sys/param.h])
5904 AC_CHECK_FUNCS([utime utimes])
5905 AC_SUBST(LOCKFILE)
5907 dnl ===================================================================
5908 dnl Check for syslog header
5909 dnl ===================================================================
5910 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
5912 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
5913 dnl ===================================================================
5914 AC_MSG_CHECKING([whether to turn warnings to errors])
5915 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
5916     ENABLE_WERROR="TRUE"
5917     PYTHONWARNINGS="error"
5918     AC_MSG_RESULT([yes])
5919 else
5920     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
5921         ENABLE_WERROR="TRUE"
5922         PYTHONWARNINGS="error"
5923         AC_MSG_RESULT([yes])
5924     else
5925         AC_MSG_RESULT([no])
5926     fi
5928 AC_SUBST(ENABLE_WERROR)
5929 AC_SUBST(PYTHONWARNINGS)
5931 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
5932 dnl ===================================================================
5933 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
5934 if test -z "$enable_assert_always_abort"; then
5935    if test "$ENABLE_DEBUG" = TRUE; then
5936        enable_assert_always_abort=yes
5937    else
5938        enable_assert_always_abort=no
5939    fi
5941 if test "$enable_assert_always_abort" = "yes"; then
5942     ASSERT_ALWAYS_ABORT="TRUE"
5943     AC_MSG_RESULT([yes])
5944 else
5945     ASSERT_ALWAYS_ABORT="FALSE"
5946     AC_MSG_RESULT([no])
5948 AC_SUBST(ASSERT_ALWAYS_ABORT)
5950 # Determine whether to use ooenv for the instdir installation
5951 # ===================================================================
5952 if test $_os != "WINNT" -a $_os != "Darwin"; then
5953     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
5954     if test -z "$enable_ooenv"; then
5955         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5956             enable_ooenv=yes
5957         else
5958             enable_ooenv=no
5959         fi
5960     fi
5961     if test "$enable_ooenv" = "no"; then
5962         AC_MSG_RESULT([no])
5963     else
5964         ENABLE_OOENV="TRUE"
5965         AC_MSG_RESULT([yes])
5966     fi
5968 AC_SUBST(ENABLE_OOENV)
5970 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
5971     if test "$enable_qt5" = "no"; then
5972         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
5973     else
5974         enable_qt5=yes
5975     fi
5978 AC_MSG_CHECKING([whether to build the pagein binaries for oosplash])
5979 if test "${enable_pagein}" != no -a -z "$DISABLE_DYNLOADING"; then
5980     AC_MSG_RESULT([yes])
5981     ENABLE_PAGEIN=TRUE
5982     AC_DEFINE(HAVE_FEATURE_PAGEIN)
5983 else
5984     AC_MSG_RESULT([no])
5986 AC_SUBST(ENABLE_PAGEIN)
5988 dnl ===================================================================
5989 dnl check for cups support
5990 dnl ===================================================================
5992 AC_MSG_CHECKING([whether to enable CUPS support])
5993 if test "$test_cups" = yes -a "$enable_cups" != no; then
5994     ENABLE_CUPS=TRUE
5995     AC_MSG_RESULT([yes])
5997     AC_MSG_CHECKING([whether cups support is present])
5998     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
5999     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
6000     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
6001         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
6002     fi
6003 else
6004     AC_MSG_RESULT([no])
6007 AC_SUBST(ENABLE_CUPS)
6009 libo_CHECK_SYSTEM_MODULE([fontconfig],[FONTCONFIG],[fontconfig >= 2.4.1],,system,TRUE)
6011 dnl whether to find & fetch external tarballs?
6012 dnl ===================================================================
6013 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
6014    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6015        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
6016    else
6017        TARFILE_LOCATION="$LODE_HOME/ext_tar"
6018    fi
6020 if test -z "$TARFILE_LOCATION"; then
6021     if test -d "$SRC_ROOT/src" ; then
6022         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
6023         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
6024     fi
6025     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
6026 else
6027     AbsolutePath "$TARFILE_LOCATION"
6028     PathFormat "${absolute_path}"
6029     TARFILE_LOCATION="${formatted_path}"
6031 AC_SUBST(TARFILE_LOCATION)
6033 AC_MSG_CHECKING([whether we want to fetch tarballs])
6034 if test "$enable_fetch_external" != "no"; then
6035     if test "$with_all_tarballs" = "yes"; then
6036         AC_MSG_RESULT([yes, all of them])
6037         DO_FETCH_TARBALLS="ALL"
6038     else
6039         AC_MSG_RESULT([yes, if we use them])
6040         DO_FETCH_TARBALLS="TRUE"
6041     fi
6042 else
6043     AC_MSG_RESULT([no])
6044     DO_FETCH_TARBALLS=
6046 AC_SUBST(DO_FETCH_TARBALLS)
6048 dnl Test whether to include MySpell dictionaries
6049 dnl ===================================================================
6050 AC_MSG_CHECKING([whether to include MySpell dictionaries])
6051 if test "$with_myspell_dicts" = "yes"; then
6052     AC_MSG_RESULT([yes])
6053     WITH_MYSPELL_DICTS=TRUE
6054     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
6055     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
6056 else
6057     AC_MSG_RESULT([no])
6058     WITH_MYSPELL_DICTS=
6060 AC_SUBST(WITH_MYSPELL_DICTS)
6062 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
6063 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
6064     if test "$with_system_dicts" = yes; then
6065         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
6066     fi
6067     with_system_dicts=no
6070 AC_MSG_CHECKING([whether to use dicts from external paths])
6071 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
6072     AC_MSG_RESULT([yes])
6073     SYSTEM_DICTS=TRUE
6074     AC_MSG_CHECKING([for spelling dictionary directory])
6075     if test -n "$with_external_dict_dir"; then
6076         DICT_SYSTEM_DIR=file://$with_external_dict_dir
6077     else
6078         DICT_SYSTEM_DIR=file:///usr/share/hunspell
6079         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
6080             DICT_SYSTEM_DIR=file:///usr/share/myspell
6081         fi
6082     fi
6083     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
6084     AC_MSG_CHECKING([for hyphenation patterns directory])
6085     if test -n "$with_external_hyph_dir"; then
6086         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
6087     else
6088         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
6089     fi
6090     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
6091     AC_MSG_CHECKING([for thesaurus directory])
6092     if test -n "$with_external_thes_dir"; then
6093         THES_SYSTEM_DIR=file://$with_external_thes_dir
6094     else
6095         THES_SYSTEM_DIR=file:///usr/share/mythes
6096     fi
6097     AC_MSG_RESULT([$THES_SYSTEM_DIR])
6098 else
6099     AC_MSG_RESULT([no])
6100     SYSTEM_DICTS=
6102 AC_SUBST(SYSTEM_DICTS)
6103 AC_SUBST(DICT_SYSTEM_DIR)
6104 AC_SUBST(HYPH_SYSTEM_DIR)
6105 AC_SUBST(THES_SYSTEM_DIR)
6107 dnl ===================================================================
6108 dnl Precompiled headers.
6109 ENABLE_PCH=""
6110 AC_MSG_CHECKING([whether to enable pch feature])
6111 if test -z "$enable_pch"; then
6112     if test "$_os" = "WINNT"; then
6113         # Enabled by default on Windows.
6114         enable_pch=yes
6115         # never use sccache on auto-enabled PCH builds, except if requested explicitly
6116         if test -z "$enable_ccache" -a "$SCCACHE"; then
6117             CCACHE=""
6118         fi
6119     else
6120         enable_pch=no
6121     fi
6123 if test "$enable_pch" != no -a "$_os" = Emscripten -a "$ENABLE_WASM_EXCEPTIONS" = TRUE; then
6124     AC_MSG_ERROR([PCH currently isn't supported for Emscripten with native EH (nEH) because of missing Sj/Lj support with nEH in clang.])
6126 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
6127     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
6129 if test "$enable_pch" = "system"; then
6130     ENABLE_PCH="1"
6131     AC_MSG_RESULT([yes (system headers)])
6132 elif test "$enable_pch" = "base"; then
6133     ENABLE_PCH="2"
6134     AC_MSG_RESULT([yes (system and base headers)])
6135 elif test "$enable_pch" = "normal"; then
6136     ENABLE_PCH="3"
6137     AC_MSG_RESULT([yes (normal)])
6138 elif test "$enable_pch" = "full"; then
6139     ENABLE_PCH="4"
6140     AC_MSG_RESULT([yes (full)])
6141 elif test "$enable_pch" = "yes"; then
6142     # Pick a suitable default.
6143     if test "$GCC" = "yes"; then
6144         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
6145         # while making the PCHs larger and rebuilds more likely.
6146         ENABLE_PCH="2"
6147         AC_MSG_RESULT([yes (system and base headers)])
6148     else
6149         # With MSVC the highest level makes a significant difference,
6150         # and it was the default when there used to be no PCH levels.
6151         ENABLE_PCH="4"
6152         AC_MSG_RESULT([yes (full)])
6153     fi
6154 elif test "$enable_pch" = "no"; then
6155     AC_MSG_RESULT([no])
6156 else
6157     AC_MSG_ERROR([Unknown value for --enable-pch])
6159 AC_SUBST(ENABLE_PCH)
6160 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
6161 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
6162     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
6163     if test "$CCACHE_BIN" != "not found"; then
6164         AC_MSG_CHECKING([ccache version])
6165         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
6166         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6167         AC_MSG_RESULT([$CCACHE_VERSION])
6168         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
6169         if test "$CCACHE_NUMVER" -gt "030701"; then
6170             AC_MSG_RESULT([yes])
6171         else
6172             AC_MSG_RESULT([no (not newer than 3.7.1)])
6173             CCACHE_DEPEND_MODE=
6174         fi
6175     fi
6178 PCH_INSTANTIATE_TEMPLATES=
6179 if test -n "$ENABLE_PCH"; then
6180     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
6181     save_CFLAGS=$CFLAGS
6182     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
6183     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
6184     CFLAGS=$save_CFLAGS
6185     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
6186         AC_MSG_RESULT(yes)
6187     else
6188         AC_MSG_RESULT(no)
6189     fi
6191 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
6193 BUILDING_PCH_WITH_OBJ=
6194 if test -n "$ENABLE_PCH"; then
6195     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
6196     save_CFLAGS=$CFLAGS
6197     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
6198     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
6199     CFLAGS=$save_CFLAGS
6200     if test -n "$BUILDING_PCH_WITH_OBJ"; then
6201         AC_MSG_RESULT(yes)
6202     else
6203         AC_MSG_RESULT(no)
6204     fi
6206 AC_SUBST(BUILDING_PCH_WITH_OBJ)
6208 PCH_CODEGEN=
6209 PCH_NO_CODEGEN=
6210 fpch_prefix=
6211 if test "$COM" = MSC; then
6212     fpch_prefix="-Xclang "
6214 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6215     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-codegen])
6216     save_CFLAGS=$CFLAGS
6217     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-codegen"
6218     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6219         [ PCH_CODEGEN="${fpch_prefix}-fpch-codegen" ],[])
6220     CFLAGS=$save_CFLAGS
6221     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fno-pch-codegen"
6222     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6223         [ PCH_NO_CODEGEN="${fpch_prefix}-fno-pch-codegen" ],[])
6224     CFLAGS=$save_CFLAGS
6225     if test -n "$PCH_CODEGEN"; then
6226         AC_MSG_RESULT(yes)
6227     else
6228         AC_MSG_RESULT(no)
6229     fi
6231 AC_SUBST(PCH_CODEGEN)
6232 AC_SUBST(PCH_NO_CODEGEN)
6233 PCH_DEBUGINFO=
6234 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6235     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-debuginfo])
6236     save_CFLAGS=$CFLAGS
6237     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-debuginfo"
6238     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="${fpch_prefix}-fpch-debuginfo" ],[])
6239     CFLAGS=$save_CFLAGS
6240     if test -n "$PCH_DEBUGINFO"; then
6241         AC_MSG_RESULT(yes)
6242     else
6243         AC_MSG_RESULT(no)
6244     fi
6246 AC_SUBST(PCH_DEBUGINFO)
6248 TAB=`printf '\t'`
6250 AC_MSG_CHECKING([the GNU Make version])
6251 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
6252 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6253 if test "$_make_longver" -ge "038200"; then
6254     AC_MSG_RESULT([$GNUMAKE $_make_version])
6255 else
6256     AC_MSG_ERROR([failed ($GNUMAKE version >= 3.82 needed])
6259 # find if gnumake support file function
6260 AC_MSG_CHECKING([whether GNU Make supports the 'file' function])
6261 TESTGMAKEFILEFUNC="`mktemp -d -t tst.XXXXXX`"
6262 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6263     TESTGMAKEFILEFUNC=`cygpath -m $TESTGMAKEFILEFUNC`
6265 $SED -e "s/<TAB>/$TAB/" > $TESTGMAKEFILEFUNC/Makefile << EOF
6266 \$(file >test.txt,Success )
6268 .PHONY: all
6269 all:
6270 <TAB>@cat test.txt
6273 $GNUMAKE -C $TESTGMAKEFILEFUNC 2>/dev/null 1>&2
6274 if test -f $TESTGMAKEFILEFUNC/test.txt; then
6275     HAVE_GNUMAKE_FILE_FUNC=TRUE
6276     AC_MSG_RESULT([yes])
6277 else
6278     AC_MSG_RESULT([no])
6280 rm -rf $TESTGMAKEFILEFUNC
6281 AC_SUBST(HAVE_GNUMAKE_FILE_FUNC)
6283 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6284 STALE_MAKE=
6285 if test "$_make_ver_check" = ""; then
6286    STALE_MAKE=TRUE
6289 HAVE_LD_HASH_STYLE=FALSE
6290 WITH_LINKER_HASH_STYLE=
6291 AC_MSG_CHECKING([for --hash-style gcc linker support])
6292 if test "$GCC" = "yes"; then
6293     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6294         hash_styles="gnu sysv"
6295     elif test "$with_linker_hash_style" = "no"; then
6296         hash_styles=
6297     else
6298         hash_styles="$with_linker_hash_style"
6299     fi
6301     for hash_style in $hash_styles; do
6302         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6303         hash_style_ldflags_save=$LDFLAGS
6304         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6306         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6307             [
6308 #include <stdio.h>
6309             ],[
6310 printf ("");
6311             ])],
6312             [
6313                   HAVE_LD_HASH_STYLE=TRUE
6314                   WITH_LINKER_HASH_STYLE=$hash_style
6315             ],
6316             [HAVE_LD_HASH_STYLE=FALSE],
6317             [HAVE_LD_HASH_STYLE=FALSE])
6318         LDFLAGS=$hash_style_ldflags_save
6319     done
6321     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6322         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6323     else
6324         AC_MSG_RESULT( no )
6325     fi
6326     LDFLAGS=$hash_style_ldflags_save
6327 else
6328     AC_MSG_RESULT( no )
6330 AC_SUBST(HAVE_LD_HASH_STYLE)
6331 AC_SUBST(WITH_LINKER_HASH_STYLE)
6333 dnl ===================================================================
6334 dnl Check whether there's a Perl version available.
6335 dnl ===================================================================
6336 if test -z "$with_perl_home"; then
6337     AC_PATH_PROG(PERL, perl)
6338 else
6339     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6340     _perl_path="$with_perl_home/bin/perl"
6341     if test -x "$_perl_path"; then
6342         PERL=$_perl_path
6343     else
6344         AC_MSG_ERROR([$_perl_path not found])
6345     fi
6348 dnl ===================================================================
6349 dnl Testing for Perl version 5 or greater.
6350 dnl $] is the Perl version variable, it is returned as an integer
6351 dnl ===================================================================
6352 if test "$PERL"; then
6353     AC_MSG_CHECKING([the Perl version])
6354     ${PERL} -e "exit($]);"
6355     _perl_version=$?
6356     if test "$_perl_version" -lt 5; then
6357         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6358     fi
6359     AC_MSG_RESULT([Perl $_perl_version])
6360 else
6361     AC_MSG_ERROR([Perl not found, install Perl 5])
6364 dnl ===================================================================
6365 dnl Testing for required Perl modules
6366 dnl ===================================================================
6368 AC_MSG_CHECKING([for required Perl modules])
6369 perl_use_string="use Cwd ; use Digest::MD5"
6370 if test "$_os" = "WINNT"; then
6371     if test -n "$PKGFORMAT"; then
6372         for i in $PKGFORMAT; do
6373             case "$i" in
6374             msi)
6375                 # for getting fonts versions to use in MSI
6376                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6377                 ;;
6378             esac
6379         done
6380     fi
6382 if test "$with_system_hsqldb" = "yes"; then
6383     perl_use_string="$perl_use_string ; use Archive::Zip"
6385 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6386     # OpenSSL needs that to build
6387     perl_use_string="$perl_use_string ; use FindBin"
6389 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6390     AC_MSG_RESULT([all modules found])
6391 else
6392     AC_MSG_RESULT([failed to find some modules])
6393     # Find out which modules are missing.
6394     for i in $perl_use_string; do
6395         if test "$i" != "use" -a "$i" != ";"; then
6396             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6397                 missing_perl_modules="$missing_perl_modules $i"
6398             fi
6399         fi
6400     done
6401     AC_MSG_ERROR([
6402     The missing Perl modules are: $missing_perl_modules
6403     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6406 dnl ===================================================================
6407 dnl Check for pkg-config
6408 dnl ===================================================================
6409 if test "$_os" != "WINNT"; then
6410     PKG_PROG_PKG_CONFIG
6412 AC_SUBST(PKG_CONFIG)
6413 AC_SUBST(PKG_CONFIG_PATH)
6414 AC_SUBST(PKG_CONFIG_LIBDIR)
6416 if test "$_os" != "WINNT"; then
6418     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6419     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6420     # explicitly. Or put /path/to/compiler in PATH yourself.
6422     toolprefix=gcc
6423     if test "$COM_IS_CLANG" = "TRUE"; then
6424         toolprefix=llvm
6425     fi
6426     AC_CHECK_TOOLS(AR,$toolprefix-ar ar)
6427     AC_CHECK_TOOLS(NM,$toolprefix-nm nm)
6428     AC_CHECK_TOOLS(RANLIB,$toolprefix-ranlib ranlib)
6429     AC_CHECK_TOOLS(OBJDUMP,$toolprefix-objdump objdump)
6430     AC_CHECK_TOOLS(READELF,$toolprefix-readelf readelf)
6431     AC_CHECK_TOOLS(STRIP,$toolprefix-strip strip)
6433 AC_SUBST(AR)
6434 AC_SUBST(NM)
6435 AC_SUBST(OBJDUMP)
6436 AC_SUBST(RANLIB)
6437 AC_SUBST(READELF)
6438 AC_SUBST(STRIP)
6440 dnl ===================================================================
6441 dnl pkg-config checks on macOS
6442 dnl ===================================================================
6444 if test $_os = Darwin; then
6445     AC_MSG_CHECKING([for bogus pkg-config])
6446     if test -n "$PKG_CONFIG"; then
6447         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6448             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6449         else
6450             if test "$enable_bogus_pkg_config" = "yes"; then
6451                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6452             else
6453                 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.])
6454             fi
6455         fi
6456     else
6457         AC_MSG_RESULT([no, good])
6458     fi
6461 find_csc()
6463     # Return value: $csctest
6465     unset csctest
6467     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client/InstallPath"
6468     if test -n "$regvalue"; then
6469         csctest=$regvalue
6470         return
6471     fi
6474 find_al()
6476     # Return value: $altest
6478     unset altest
6480     # We need this check to detect 4.6.1 or above.
6481     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6482         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools/InstallationFolder"
6483         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6484             altest=$regvalue
6485             return
6486         fi
6487     done
6489     for x in `ls /proc/registry32/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft\ SDKs/Windows`; do
6490         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools/InstallationFolder"
6491         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6492             altest=$regvalue
6493             return
6494         fi
6495     done
6498 find_dotnetsdk46()
6500     unset frametest
6502     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6; do
6503         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder"
6504         if test -n "$regvalue"; then
6505             frametest=$regvalue
6506             return
6507         fi
6508     done
6511 find_winsdk_version()
6513     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6514     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6516     unset winsdktest winsdkbinsubdir winsdklibsubdir
6518     case "$1" in
6519     8.0|8.0A)
6520         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
6521         if test -n "$regvalue"; then
6522             winsdktest=$regvalue
6523             winsdklibsubdir=win8
6524             return
6525         fi
6526         ;;
6527     8.1|8.1A)
6528         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot81"
6529         if test -n "$regvalue"; then
6530             winsdktest=$regvalue
6531             winsdklibsubdir=winv6.3
6532             return
6533         fi
6534         ;;
6535     10.0)
6536         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/InstallationFolder"
6537         if test -n "$regvalue"; then
6538             winsdktest=$regvalue
6539             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion"
6540             if test -n "$regvalue"; then
6541                 winsdkbinsubdir="$regvalue".0
6542                 winsdklibsubdir=$winsdkbinsubdir
6543                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6544                 local tmppath_unix=$(cygpath -u "$tmppath")
6545                 # test exist the SDK path
6546                 if test -d "$tmppath_unix"; then
6547                    # when path is convertible to a short path then path is okay
6548                    cygpath -d "$tmppath" >/dev/null 2>&1
6549                    if test $? -ne 0; then
6550                       AC_MSG_ERROR([Windows SDK doesn't have a 8.3 name, see NtfsDisable8dot3NameCreation])
6551                    fi
6552                 else
6553                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6554                 fi
6555             fi
6556             return
6557         fi
6558         ;;
6559     esac
6562 find_winsdk()
6564     # Return value: From find_winsdk_version
6566     unset winsdktest
6568     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6569         find_winsdk_version $ver
6570         if test -n "$winsdktest"; then
6571             return
6572         fi
6573     done
6576 find_msms()
6578     # Return value: $msmdir
6580     AC_MSG_CHECKING([for MSVC merge modules directory])
6581     local my_msm_files
6582     local my_msm_dir
6584     dnl Order my_msm_files in increasing order. Then check the directories returned
6585     dnl by ls in an inner loop; assuming they are also ordered in increasing order,
6586     dnl the result will be the highest MSM version found in the highest directory.
6588     case "$VCVER" in
6589         16.0 | 17.0)
6590         my_msm_files="Microsoft_VC141_CRT_x86.msm Microsoft_VC142_CRT_x86.msm Microsoft_VC143_CRT_x86.msm ${my_msm_files}"
6591         ;;
6592     esac
6593     for f in $my_msm_files; do
6594         echo "$as_me:$LINENO: searching for $f" >&5
6595     done
6597     msmdir=
6598     case "$VCVER" in
6599     16.0 | 17.0)
6600         for f in ${my_msm_files}; do
6601             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6602                 my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6603                 echo "$as_me:$LINENO: looking for $my_msm_dir${f}])" >&5
6604                 if test -e "$my_msm_dir${f}"; then
6605                     msmdir=$my_msm_dir
6606                 fi
6607             done
6608         done
6609         ;;
6610     esac
6612     if test -n "$msmdir"; then
6613         msmdir=`cygpath -m "$msmdir"`
6614         AC_MSG_RESULT([$msmdir])
6615     else
6616         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6617             AC_MSG_FAILURE([not found])
6618         else
6619             AC_MSG_WARN([not found (check config.log)])
6620             add_warning "MSM none of ${my_msm_files} found"
6621         fi
6622     fi
6625 find_msvc_x64_dlls()
6627     # Return value: $msvcdllpath, $msvcdlls
6629     AC_MSG_CHECKING([for MSVC x64 DLL path])
6631     dnl Order crtver in increasing order. Then check the directories returned by
6632     dnl ls in an inner loop; assuming they are also ordered in increasing order,
6633     dnl the result will be the highest CRT version found in the highest directory.
6635     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6636     case "$VCVER" in
6637     16.0 | 17.0)
6638         for crtver in 141 142 143; do
6639             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6640                 echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT" >&5
6641                 if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"; then
6642                     msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"
6643                 fi
6644             done
6645         done
6646         ;;
6647     esac
6648     AC_MSG_RESULT([$msvcdllpath])
6649     AC_MSG_CHECKING([for MSVC x64 DLLs])
6650     msvcdlls="msvcp140.dll vcruntime140.dll"
6651     for dll in $msvcdlls; do
6652         if ! test -f "$msvcdllpath/$dll"; then
6653             AC_MSG_FAILURE([missing $dll])
6654         fi
6655     done
6656     AC_MSG_RESULT([found all ($msvcdlls)])
6659 dnl =========================================
6660 dnl Check for the Windows  SDK.
6661 dnl =========================================
6662 if test "$_os" = "WINNT"; then
6663     AC_MSG_CHECKING([for Windows SDK])
6664     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6665         find_winsdk
6666         WINDOWS_SDK_HOME=$winsdktest
6668         # normalize if found
6669         if test -n "$WINDOWS_SDK_HOME"; then
6670             WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
6671             WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
6672         fi
6674         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6675     fi
6677     if test -n "$WINDOWS_SDK_HOME"; then
6678         # Remove a possible trailing backslash
6679         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6681         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6682              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6683              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6684             have_windows_sdk_headers=yes
6685         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6686              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6687              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6688             have_windows_sdk_headers=yes
6689         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6690              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6691              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6692             have_windows_sdk_headers=yes
6693         else
6694             have_windows_sdk_headers=no
6695         fi
6697         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6698             have_windows_sdk_libs=yes
6699         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6700             have_windows_sdk_libs=yes
6701         else
6702             have_windows_sdk_libs=no
6703         fi
6705         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6706             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6707 the  Windows SDK are installed.])
6708         fi
6709     fi
6711     if test -z "$WINDOWS_SDK_HOME"; then
6712         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6713     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6714         WINDOWS_SDK_VERSION=80
6715         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6716     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6717         WINDOWS_SDK_VERSION=81
6718         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6719     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6720         WINDOWS_SDK_VERSION=10
6721         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6722     else
6723         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6724     fi
6725     PathFormat "$WINDOWS_SDK_HOME"
6726     WINDOWS_SDK_HOME="$formatted_path"
6727     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6728     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6729         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6730         if test -d "$WINDOWS_SDK_HOME/include/um"; then
6731             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6732         elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then
6733             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6734         fi
6735     fi
6737     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6738     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6739     dnl but not in v8.0), so allow this to be overridden with a
6740     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6741     dnl and configuration error if no WiLangId.vbs is found would arguably be
6742     dnl better, but I do not know under which conditions exactly it is needed by
6743     dnl msiglobal.pm:
6744     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6745         WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6746         WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6747         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6748             WINDOWS_SDK_WILANGID="${WINDOWS_SDK_HOME}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6749             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6750         fi
6751         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6752             WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6753             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6754         fi
6755         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6756             WINDOWS_SDK_WILANGID=$(cygpath -sm "C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs")
6757             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6758         fi
6759     fi
6760     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6761         if test -n "$with_package_format" -a "$with_package_format" != no; then
6762             for i in "$with_package_format"; do
6763                 if test "$i" = "msi"; then
6764                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6765                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6766                     fi
6767                 fi
6768             done
6769         fi
6770     fi
6772 AC_SUBST(WINDOWS_SDK_HOME)
6773 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6774 AC_SUBST(WINDOWS_SDK_VERSION)
6775 AC_SUBST(WINDOWS_SDK_WILANGID)
6777 if test "$build_os" = "cygwin"; then
6778     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6779     dnl dir, it also determines that dir's path w/o an arch segment if any,
6780     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6781     AC_MSG_CHECKING([for midl.exe])
6783     find_winsdk
6784     if test -n "$winsdkbinsubdir" \
6785         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6786     then
6787         MIDL_PATH=$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6788         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin/$winsdkbinsubdir
6789     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6790         MIDL_PATH=$winsdktest/Bin/$WIN_BUILD_ARCH
6791         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6792     elif test -f "$winsdktest/Bin/midl.exe"; then
6793         MIDL_PATH=$winsdktest/Bin
6794         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6795     fi
6796     if test ! -f "$MIDL_PATH/midl.exe"; then
6797         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6798     else
6799         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6800     fi
6802     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6803     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6805     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6806          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6807          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6808          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6809     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6810          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6811          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6812          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
6813     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
6814          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
6815          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6816          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
6817     else
6818         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
6819     fi
6821     dnl Check csc.exe
6822     AC_MSG_CHECKING([for csc.exe])
6823     find_csc
6824     if test -f "$csctest/csc.exe"; then
6825         CSC_PATH="$csctest"
6826     fi
6827     if test ! -f "$CSC_PATH/csc.exe"; then
6828         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
6829     else
6830         AC_MSG_RESULT([$CSC_PATH/csc.exe])
6831     fi
6833     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
6835     dnl Check al.exe
6836     AC_MSG_CHECKING([for al.exe])
6837     find_winsdk
6838     if test -n "$winsdkbinsubdir" \
6839         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
6840     then
6841         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
6842     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/al.exe"; then
6843         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
6844     elif test -f "$winsdktest/Bin/al.exe"; then
6845         AL_PATH="$winsdktest/Bin"
6846     fi
6848     if test -z "$AL_PATH"; then
6849         find_al
6850         if test -f "$altest/bin/al.exe"; then
6851             AL_PATH="$altest/bin"
6852         elif test -f "$altest/al.exe"; then
6853             AL_PATH="$altest"
6854         fi
6855     fi
6856     if test ! -f "$AL_PATH/al.exe"; then
6857         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
6858     else
6859         AC_MSG_RESULT([$AL_PATH/al.exe])
6860     fi
6862     AL_PATH=`win_short_path_for_make "$AL_PATH"`
6864     dnl Check mscoree.lib / .NET Framework dir
6865     AC_MSG_CHECKING(.NET Framework)
6866     find_dotnetsdk46
6867     PathFormat "$frametest"
6868     frametest="$formatted_path"
6869     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6870         DOTNET_FRAMEWORK_HOME="$frametest"
6871     else
6872         find_winsdk
6873         if test -f "$winsdktest/lib/mscoree.lib" -o -f "$winsdktest/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6874             DOTNET_FRAMEWORK_HOME="$winsdktest"
6875         fi
6876     fi
6877     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
6878         AC_MSG_ERROR([mscoree.lib not found])
6879     fi
6880     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
6882     PathFormat "$MIDL_PATH"
6883     MIDL_PATH="$formatted_path"
6885     PathFormat "$AL_PATH"
6886     AL_PATH="$formatted_path"
6888     PathFormat "$DOTNET_FRAMEWORK_HOME"
6889     DOTNET_FRAMEWORK_HOME="$formatted_path"
6891     PathFormat "$CSC_PATH"
6892     CSC_PATH="$formatted_path"
6895 dnl ===================================================================
6896 dnl Testing for C++ compiler and version...
6897 dnl ===================================================================
6899 if test "$_os" != "WINNT"; then
6900     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that
6901     save_CXXFLAGS=$CXXFLAGS
6902     AC_PROG_CXX
6903     CXXFLAGS=$save_CXXFLAGS
6904     if test -z "$CXX_BASE"; then
6905         CXX_BASE=`first_arg_basename "$CXX"`
6906     fi
6909 dnl check for GNU C++ compiler version
6910 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
6911     AC_MSG_CHECKING([the GNU C++ compiler version])
6913     _gpp_version=`$CXX -dumpversion`
6914     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
6916     if test "$_gpp_majmin" -lt "700"; then
6917         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
6918     else
6919         AC_MSG_RESULT([ok (g++ $_gpp_version)])
6920     fi
6922     dnl see https://code.google.com/p/android/issues/detail?id=41770
6923         glibcxx_threads=no
6924         AC_LANG_PUSH([C++])
6925         AC_REQUIRE_CPP
6926         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
6927         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
6928             #include <bits/c++config.h>]],[[
6929             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
6930             && !defined(_GLIBCXX__PTHREADS) \
6931             && !defined(_GLIBCXX_HAS_GTHREADS)
6932             choke me
6933             #endif
6934         ]])],[AC_MSG_RESULT([yes])
6935         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
6936         AC_LANG_POP([C++])
6937         if test $glibcxx_threads = yes; then
6938             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
6939         fi
6941 AC_SUBST(BOOST_CXXFLAGS)
6944 # prefx CXX with ccache if needed
6946 if test "$CCACHE" != ""; then
6947     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
6948     AC_LANG_PUSH([C++])
6949     save_CXXFLAGS=$CXXFLAGS
6950     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
6951     # msvc does not fail on unknown options, check stdout
6952     if test "$COM" = MSC; then
6953         CXXFLAGS="$CXXFLAGS -nologo"
6954     fi
6955     save_ac_cxx_werror_flag=$ac_cxx_werror_flag
6956     ac_cxx_werror_flag=yes
6957     dnl an empty program will do, we're checking the compiler flags
6958     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
6959                       [use_ccache=yes], [use_ccache=no])
6960     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
6961         AC_MSG_RESULT([yes])
6962     else
6963         CXX="$CCACHE $CXX"
6964         CXX_BASE="ccache $CXX_BASE"
6965         AC_MSG_RESULT([no])
6966     fi
6967     CXXFLAGS=$save_CXXFLAGS
6968     ac_cxx_werror_flag=$save_ac_cxx_werror_flag
6969     AC_LANG_POP([C++])
6972 dnl ===================================================================
6973 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
6974 dnl ===================================================================
6976 if test "$_os" != "WINNT"; then
6977     AC_PROG_CXXCPP
6979     dnl Check whether there's a C pre-processor.
6980     AC_PROG_CPP
6984 dnl ===================================================================
6985 dnl Find integral type sizes and alignments
6986 dnl ===================================================================
6988 if test "$_os" != "WINNT"; then
6990     AC_CHECK_SIZEOF(long)
6991     AC_CHECK_SIZEOF(short)
6992     AC_CHECK_SIZEOF(int)
6993     AC_CHECK_SIZEOF(long long)
6994     AC_CHECK_SIZEOF(double)
6995     AC_CHECK_SIZEOF(void*)
6996     AC_CHECK_SIZEOF(size_t)
6998     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
6999     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
7000     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
7001     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
7002     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
7003     SIZEOF_SIZE_T=$ac_cv_sizeof_size_t
7005     dnl Allow build without AC_CHECK_ALIGNOF, grrr
7006     m4_pattern_allow([AC_CHECK_ALIGNOF])
7007     m4_ifdef([AC_CHECK_ALIGNOF],
7008         [
7009             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
7010             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
7011             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
7012             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
7013         ],
7014         [
7015             case "$_os-$host_cpu" in
7016             Linux-i686)
7017                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
7018                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
7019                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
7020                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
7021                 ;;
7022             Linux-x86_64)
7023                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
7024                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
7025                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
7026                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
7027                 ;;
7028             *)
7029                 if test -z "$ac_cv_alignof_short" -o \
7030                         -z "$ac_cv_alignof_int" -o \
7031                         -z "$ac_cv_alignof_long" -o \
7032                         -z "$ac_cv_alignof_double"; then
7033                    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.])
7034                 fi
7035                 ;;
7036             esac
7037         ])
7039     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
7040     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
7041     if test $ac_cv_sizeof_long -eq 8; then
7042         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
7043     elif test $ac_cv_sizeof_double -eq 8; then
7044         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
7045     else
7046         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
7047     fi
7049     dnl Check for large file support
7050     AC_SYS_LARGEFILE
7051     if test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
7052         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
7053     fi
7054     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
7055         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
7056     fi
7057 else
7058     # Hardcode for MSVC
7059     SAL_TYPES_SIZEOFSHORT=2
7060     SAL_TYPES_SIZEOFINT=4
7061     SAL_TYPES_SIZEOFLONG=4
7062     SAL_TYPES_SIZEOFLONGLONG=8
7063     if test $WIN_HOST_BITS -eq 32; then
7064         SAL_TYPES_SIZEOFPOINTER=4
7065         SIZEOF_SIZE_T=4
7066     else
7067         SAL_TYPES_SIZEOFPOINTER=8
7068         SIZEOF_SIZE_T=8
7069     fi
7070     SAL_TYPES_ALIGNMENT2=2
7071     SAL_TYPES_ALIGNMENT4=4
7072     SAL_TYPES_ALIGNMENT8=8
7073     LFS_CFLAGS=''
7075 AC_SUBST(LFS_CFLAGS)
7076 AC_SUBST(SIZEOF_SIZE_T)
7078 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
7079 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
7080 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
7081 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
7082 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
7083 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
7084 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
7085 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
7087 dnl Calc jumbo sheets (1m+ rows) depend on 64 bit tools::Long .
7088 AC_MSG_CHECKING([whether jumbo sheets are supported])
7089 if test "$_os" != "WINNT"; then
7090     if test $SAL_TYPES_SIZEOFLONG -gt 4; then
7091         AC_MSG_RESULT([yes])
7092         ENABLE_JUMBO_SHEETS=TRUE
7093         AC_DEFINE(HAVE_FEATURE_JUMBO_SHEETS)
7094     else
7095         AC_MSG_RESULT([no])
7096     fi
7097 else
7098     if test $WIN_HOST_BITS -gt 32; then
7099         # 64bit windows is special-cased for tools::Long because long is 32bit
7100         AC_MSG_RESULT([yes])
7101         ENABLE_JUMBO_SHEETS=TRUE
7102         AC_DEFINE(HAVE_FEATURE_JUMBO_SHEETS)
7103     else
7104         AC_MSG_RESULT([no])
7105     fi
7107 AC_SUBST(ENABLE_JUMBO_SHEETS)
7109 dnl ===================================================================
7110 dnl Check whether to enable runtime optimizations
7111 dnl ===================================================================
7112 ENABLE_RUNTIME_OPTIMIZATIONS=
7113 AC_MSG_CHECKING([whether to enable runtime optimizations])
7114 if test -z "$enable_runtime_optimizations"; then
7115     for i in $CC; do
7116         case $i in
7117         -fsanitize=*)
7118             enable_runtime_optimizations=no
7119             break
7120             ;;
7121         esac
7122     done
7124 if test "$enable_runtime_optimizations" != no; then
7125     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
7126     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
7127     AC_MSG_RESULT([yes])
7128 else
7129     AC_MSG_RESULT([no])
7131 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
7133 dnl ===================================================================
7134 dnl Check if valgrind headers are available
7135 dnl ===================================================================
7136 ENABLE_VALGRIND=
7137 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
7138     prev_cppflags=$CPPFLAGS
7139     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
7140     # or where does it come from?
7141     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
7142     AC_CHECK_HEADER([valgrind/valgrind.h],
7143         [ENABLE_VALGRIND=TRUE])
7144     CPPFLAGS=$prev_cppflags
7146 AC_SUBST([ENABLE_VALGRIND])
7147 if test -z "$ENABLE_VALGRIND"; then
7148     if test "$with_valgrind" = yes; then
7149         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
7150     fi
7151     VALGRIND_CFLAGS=
7153 AC_SUBST([VALGRIND_CFLAGS])
7156 dnl ===================================================================
7157 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
7158 dnl ===================================================================
7160 # We need at least the sys/sdt.h include header.
7161 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
7162 if test "$SDT_H_FOUND" = "TRUE"; then
7163     # Found sys/sdt.h header, now make sure the c++ compiler works.
7164     # Old g++ versions had problems with probes in constructors/destructors.
7165     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
7166     AC_LANG_PUSH([C++])
7167     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
7168     #include <sys/sdt.h>
7169     class ProbeClass
7170     {
7171     private:
7172       int& ref;
7173       const char *name;
7175     public:
7176       ProbeClass(int& v, const char *n) : ref(v), name(n)
7177       {
7178         DTRACE_PROBE2(_test_, cons, name, ref);
7179       }
7181       void method(int min)
7182       {
7183         DTRACE_PROBE3(_test_, meth, name, ref, min);
7184         ref -= min;
7185       }
7187       ~ProbeClass()
7188       {
7189         DTRACE_PROBE2(_test_, dest, name, ref);
7190       }
7191     };
7192     ]],[[
7193     int i = 64;
7194     DTRACE_PROBE1(_test_, call, i);
7195     ProbeClass inst = ProbeClass(i, "call");
7196     inst.method(24);
7197     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
7198           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
7199     AC_LANG_POP([C++])
7201 AC_CONFIG_HEADERS([config_host/config_probes.h])
7203 dnl ===================================================================
7204 dnl GCC features
7205 dnl ===================================================================
7206 HAVE_GCC_STACK_CLASH_PROTECTION=
7207 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7208     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
7209     save_CFLAGS=$CFLAGS
7210     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
7211     AC_LINK_IFELSE(
7212         [AC_LANG_PROGRAM(, [[return 0;]])],
7213         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
7214         [AC_MSG_RESULT([no])])
7215     CFLAGS=$save_CFLAGS
7217     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
7218     save_CFLAGS=$CFLAGS
7219     CFLAGS="$CFLAGS -Werror -mno-avx"
7220     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
7221     CFLAGS=$save_CFLAGS
7222     if test "$HAVE_GCC_AVX" = "TRUE"; then
7223         AC_MSG_RESULT([yes])
7224     else
7225         AC_MSG_RESULT([no])
7226     fi
7228     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
7229     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7230     int v = 0;
7231     if (__sync_add_and_fetch(&v, 1) != 1 ||
7232         __sync_sub_and_fetch(&v, 1) != 0)
7233         return 1;
7234     __sync_synchronize();
7235     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
7236         v != 1)
7237         return 1;
7238     return 0;
7239 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
7240     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
7241         AC_MSG_RESULT([yes])
7242         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
7243     else
7244         AC_MSG_RESULT([no])
7245     fi
7247     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
7248     AC_LANG_PUSH([C++])
7249     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7250             #include <cstddef>
7251             #include <cxxabi.h>
7252             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
7253         ])], [
7254             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
7255             AC_MSG_RESULT([yes])
7256         ], [AC_MSG_RESULT([no])])
7257     AC_LANG_POP([C++])
7259     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
7260     AC_LANG_PUSH([C++])
7261     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7262             #include <cstddef>
7263             #include <cxxabi.h>
7264             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7265         ])], [
7266             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7267             AC_MSG_RESULT([yes])
7268         ], [AC_MSG_RESULT([no])])
7269     AC_LANG_POP([C++])
7271     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7272     AC_LANG_PUSH([C++])
7273     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7274             #include <cxxabi.h>
7275             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7276         ])], [
7277             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7278             AC_MSG_RESULT([yes])
7279         ], [AC_MSG_RESULT([no])])
7280     AC_LANG_POP([C++])
7282     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7283     AC_LANG_PUSH([C++])
7284     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7285             #include <cstddef>
7286             #include <cxxabi.h>
7287             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7288         ])], [
7289             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7290             AC_MSG_RESULT([yes])
7291         ], [AC_MSG_RESULT([no])])
7292     AC_LANG_POP([C++])
7294     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7295     AC_LANG_PUSH([C++])
7296     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7297             #include <cstddef>
7298             #include <cxxabi.h>
7299             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7300         ])], [
7301             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7302             AC_MSG_RESULT([yes])
7303         ], [AC_MSG_RESULT([no])])
7304     AC_LANG_POP([C++])
7306     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7307     AC_LANG_PUSH([C++])
7308     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7309             #include <cxxabi.h>
7310             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7311         ])], [
7312             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7313             AC_MSG_RESULT([yes])
7314         ], [AC_MSG_RESULT([no])])
7315     AC_LANG_POP([C++])
7317     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7318     AC_LANG_PUSH([C++])
7319     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7320             #include <cxxabi.h>
7321             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7322         ])], [
7323             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7324             AC_MSG_RESULT([yes])
7325         ], [AC_MSG_RESULT([no])])
7326     AC_LANG_POP([C++])
7328     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7329     AC_LANG_PUSH([C++])
7330     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7331             #include <cxxabi.h>
7332             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7333         ])], [
7334             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7335             AC_MSG_RESULT([yes])
7336         ], [AC_MSG_RESULT([no])])
7337     AC_LANG_POP([C++])
7339     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info in cxxabi.h])
7340     AC_LANG_PUSH([C++])
7341     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7342             #include <cstddef>
7343             #include <cxxabi.h>
7344             std::size_t f() { return sizeof(__cxxabiv1::__si_class_type_info); }
7345         ])], [
7346             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7347             AC_MSG_RESULT([yes])
7348         ], [AC_MSG_RESULT([no])])
7349     AC_LANG_POP([C++])
7351     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7352     AC_LANG_PUSH([C++])
7353     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7354             #include <cstddef>
7355             #include <cxxabi.h>
7356             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7357         ])], [
7358             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7359             AC_MSG_RESULT([yes])
7360         ], [AC_MSG_RESULT([no])])
7361     AC_LANG_POP([C++])
7364 AC_SUBST(HAVE_GCC_AVX)
7365 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7366 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7368 dnl ===================================================================
7369 dnl Identify the C++ library
7370 dnl ===================================================================
7372 AC_MSG_CHECKING([what the C++ library is])
7373 HAVE_LIBSTDCPP=
7374 AC_LANG_PUSH([C++])
7375 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7376 #include <utility>
7377 #ifndef __GLIBCXX__
7378 foo bar
7379 #endif
7380 ]])],
7381     [CPP_LIBRARY=GLIBCXX
7382      cpp_library_name="GNU libstdc++"
7383      HAVE_LIBSTDCPP=TRUE
7384     ],
7385     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7386 #include <utility>
7387 #ifndef _LIBCPP_VERSION
7388 foo bar
7389 #endif
7390 ]])],
7391     [CPP_LIBRARY=LIBCPP
7392      cpp_library_name="LLVM libc++"
7393      AC_DEFINE([HAVE_LIBCXX])
7394     ],
7395     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7396 #include <utility>
7397 #ifndef _MSC_VER
7398 foo bar
7399 #endif
7400 ]])],
7401     [CPP_LIBRARY=MSVCRT
7402      cpp_library_name="Microsoft"
7403     ],
7404     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7405 AC_MSG_RESULT([$cpp_library_name])
7406 AC_LANG_POP([C++])
7407 AC_SUBST([HAVE_LIBSTDCPP])
7409 dnl ===================================================================
7410 dnl Check for gperf
7411 dnl ===================================================================
7412 AC_PATH_PROG(GPERF, gperf)
7413 if test -z "$GPERF"; then
7414     AC_MSG_ERROR([gperf not found but needed. Install it.])
7416 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7417     GPERF=`cygpath -m $GPERF`
7419 AC_MSG_CHECKING([whether gperf is new enough])
7420 my_gperf_ver1=$($GPERF --version | head -n 1)
7421 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7422 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7423 if test "$my_gperf_ver3" -ge 301; then
7424     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7425 else
7426     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7428 AC_SUBST(GPERF)
7430 dnl ===================================================================
7431 dnl Check for system libcmis
7432 dnl ===================================================================
7433 libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.5 >= 0.5.2],enabled)
7435 dnl ===================================================================
7436 dnl C++11
7437 dnl ===================================================================
7439 AC_MSG_CHECKING([whether $CXX_BASE supports C++17])
7440 CXXFLAGS_CXX11=
7441 if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7442     if test "$with_latest_c__" = yes; then
7443         CXXFLAGS_CXX11=-std:c++latest
7444     else
7445         CXXFLAGS_CXX11=-std:c++17
7446     fi
7447     CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus"
7448 elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7449     my_flags='-std=c++17 -std=c++1z'
7450     if test "$with_latest_c__" = yes; then
7451         my_flags="-std=c++23 -std=c++2b -std=c++20 -std=c++2a $my_flags"
7452     fi
7453     for flag in $my_flags; do
7454         if test "$COM" = MSC; then
7455             flag="-Xclang $flag"
7456         fi
7457         save_CXXFLAGS=$CXXFLAGS
7458         CXXFLAGS="$CXXFLAGS $flag -Werror"
7459         if test "$SYSTEM_LIBCMIS" = TRUE; then
7460             CXXFLAGS="$CXXFLAGS -DSYSTEM_LIBCMIS $LIBCMIS_CFLAGS"
7461         fi
7462         AC_LANG_PUSH([C++])
7463         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7464             #include <algorithm>
7465             #include <functional>
7466             #include <vector>
7468             #if defined SYSTEM_LIBCMIS
7469             // See ucb/source/ucp/cmis/auth_provider.hxx:
7470             #if !defined __clang__
7471             #pragma GCC diagnostic push
7472             #pragma GCC diagnostic ignored "-Wdeprecated"
7473             #pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
7474             #endif
7475             #include <libcmis/libcmis.hxx>
7476             #if !defined __clang__
7477             #pragma GCC diagnostic pop
7478             #endif
7479             #endif
7481             void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7482                 std::sort(v.begin(), v.end(), fn);
7483             }
7484             ]])],[CXXFLAGS_CXX11=$flag])
7485         AC_LANG_POP([C++])
7486         CXXFLAGS=$save_CXXFLAGS
7487         if test -n "$CXXFLAGS_CXX11"; then
7488             break
7489         fi
7490     done
7492 if test -n "$CXXFLAGS_CXX11"; then
7493     AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7494 else
7495     AC_MSG_ERROR(no)
7497 AC_SUBST(CXXFLAGS_CXX11)
7499 if test "$GCC" = "yes"; then
7500     save_CXXFLAGS=$CXXFLAGS
7501     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7502     CHECK_L_ATOMIC
7503     CXXFLAGS=$save_CXXFLAGS
7504     AC_SUBST(ATOMIC_LIB)
7507 dnl Test for temporarily incompatible libstdc++ 4.7.{0,1}, where
7508 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=179528> introduced
7509 dnl an additional member _M_size into C++11 std::list towards 4.7.0 and
7510 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=189186> removed it
7511 dnl again towards 4.7.2:
7512 if test $CPP_LIBRARY = GLIBCXX; then
7513     AC_MSG_CHECKING([whether using C++11 causes libstdc++ 4.7.0/4.7.1 ABI breakage])
7514     AC_LANG_PUSH([C++])
7515     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7516 #include <list>
7517 #if !defined __GLIBCXX__ || (__GLIBCXX__ != 20120322 && __GLIBCXX__ != 20120614)
7518     // according to <https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html>:
7519     //   GCC 4.7.0: 20120322
7520     //   GCC 4.7.1: 20120614
7521     // and using a range check is not possible as the mapping between
7522     // __GLIBCXX__ values and GCC versions is not monotonic
7523 /* ok */
7524 #else
7525 abi broken
7526 #endif
7527         ]])], [AC_MSG_RESULT(no, ok)],
7528         [AC_MSG_ERROR(yes)])
7529     AC_LANG_POP([C++])
7532 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7533 save_CXXFLAGS=$CXXFLAGS
7534 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7535 AC_LANG_PUSH([C++])
7537 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7538 #include <stddef.h>
7540 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7542 namespace
7544         struct b
7545         {
7546                 int i;
7547                 int j;
7548         };
7550 ]], [[
7551 struct a
7553         int i;
7554         int j;
7556 a thinga[]={{0,0}, {1,1}};
7557 b thingb[]={{0,0}, {1,1}};
7558 size_t i = sizeof(sal_n_array_size(thinga));
7559 size_t j = sizeof(sal_n_array_size(thingb));
7560 return !(i != 0 && j != 0);
7562     ], [ AC_MSG_RESULT(yes) ],
7563     [ AC_MSG_ERROR(no)])
7564 AC_LANG_POP([C++])
7565 CXXFLAGS=$save_CXXFLAGS
7567 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7568 if test "$GCC" = yes; then
7569     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7570     AC_LANG_PUSH([C++])
7571     save_CXXFLAGS=$CXXFLAGS
7572     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7573     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7574     CXXFLAGS=$save_CXXFLAGS
7575     AC_LANG_POP([C++])
7576     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7577         AC_MSG_RESULT([yes])
7578     else
7579         AC_MSG_RESULT([no])
7580     fi
7582 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7584 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7585 AC_LANG_PUSH([C++])
7586 save_CXXFLAGS=$CXXFLAGS
7587 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7588 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7589         #include <algorithm>
7590         #include <initializer_list>
7591         #include <vector>
7592         template<typename T> class S {
7593         private:
7594             std::vector<T> v_;
7595         public:
7596             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7597         };
7598         constinit S<int> s{3, 2, 1};
7599     ])], [
7600         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7601         AC_MSG_RESULT([yes])
7602     ], [AC_MSG_RESULT([no])])
7603 CXXFLAGS=$save_CXXFLAGS
7604 AC_LANG_POP([C++])
7606 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a <span> with unsigned size_type])
7607 AC_LANG_PUSH([C++])
7608 save_CXXFLAGS=$CXXFLAGS
7609 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7610 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7611         #include <span>
7612         #include <type_traits>
7613         // Don't check size_type directly, as it was called index_type before P1872R0:
7614         void f(std::span<int> s) { static_assert(std::is_unsigned_v<decltype(s.size())>); };
7615     ])], [
7616         AC_DEFINE([HAVE_CPP_SPAN],[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 implements C++ DR P1155R3])
7623 AC_LANG_PUSH([C++])
7624 save_CXXFLAGS=$CXXFLAGS
7625 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7626 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7627         struct S1 { S1(S1 &&); };
7628         struct S2: S1 {};
7629         S1 f(S2 s) { return s; }
7630     ])], [
7631         AC_DEFINE([HAVE_P1155R3],[1])
7632         AC_MSG_RESULT([yes])
7633     ], [AC_MSG_RESULT([no])])
7634 CXXFLAGS=$save_CXXFLAGS
7635 AC_LANG_POP([C++])
7637 AC_MSG_CHECKING([whether $CXX_BASE supports C++20 std::atomic_ref])
7638 HAVE_CXX20_ATOMIC_REF=
7639 AC_LANG_PUSH([C++])
7640 save_CXXFLAGS=$CXXFLAGS
7641 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7642 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7643         #include <atomic>
7644         int x;
7645         std::atomic_ref<int> y(x);
7646     ])], [
7647         HAVE_CXX20_ATOMIC_REF=TRUE
7648         AC_MSG_RESULT([yes])
7649     ], [AC_MSG_RESULT([no])])
7650 CXXFLAGS=$save_CXXFLAGS
7651 AC_LANG_POP([C++])
7652 AC_SUBST([HAVE_CXX20_ATOMIC_REF])
7654 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7655 dnl which is included in -Wextra anyway):
7656 HAVE_WDEPRECATED_COPY_DTOR=
7657 if test "$GCC" = yes; then
7658     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7659     AC_LANG_PUSH([C++])
7660     save_CXXFLAGS=$CXXFLAGS
7661     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7662     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7663             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7664             AC_MSG_RESULT([yes])
7665         ], [AC_MSG_RESULT([no])])
7666     CXXFLAGS=$save_CXXFLAGS
7667     AC_LANG_POP([C++])
7669 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7671 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7672 dnl uninitialized warning for code like
7674 dnl   OString f();
7675 dnl   boost::optional<OString> * g(bool b) {
7676 dnl       boost::optional<OString> o;
7677 dnl       if (b) o = f();
7678 dnl       return new boost::optional<OString>(o);
7679 dnl   }
7681 dnl (as is e.g. present, in a slightly more elaborate form, in
7682 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7683 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7684 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7685 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7686     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7687     AC_LANG_PUSH([C++])
7688     save_CXXFLAGS=$CXXFLAGS
7689     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7690     if test "$ENABLE_OPTIMIZED" = TRUE; then
7691         CXXFLAGS="$CXXFLAGS -O2"
7692     else
7693         CXXFLAGS="$CXXFLAGS -O0"
7694     fi
7695     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7696             #include <new>
7697             void f1(int);
7698             struct S1 {
7699                 ~S1() { f1(n); }
7700                 int n = 0;
7701             };
7702             struct S2 {
7703                 S2() {}
7704                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7705                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7706                 void set(S1 s) {
7707                     new (stg) S1(s);
7708                     init = true;
7709                 }
7710                 bool init = false;
7711                 char stg[sizeof (S1)];
7712             } ;
7713             S1 f2();
7714             S2 * f3(bool b) {
7715                 S2 o;
7716                 if (b) o.set(f2());
7717                 return new S2(o);
7718             }
7719         ]])], [AC_MSG_RESULT([no])], [
7720             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7721             AC_MSG_RESULT([yes])
7722         ])
7723     CXXFLAGS=$save_CXXFLAGS
7724     AC_LANG_POP([C++])
7726 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7728 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7729 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7730 dnl hits us e.g. with GCC 10 and --enable-optimized at
7732 dnl   In file included from include/rtl/string.hxx:49,
7733 dnl                    from include/rtl/ustring.hxx:43,
7734 dnl                    from include/osl/file.hxx:35,
7735 dnl                    from include/codemaker/global.hxx:28,
7736 dnl                    from include/codemaker/options.hxx:23,
7737 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7738 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7739 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,
7740 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,
7741 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,
7742 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7743 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7744 dnl      78 |         memcpy( buffer, data, length );
7745 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7746 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7747 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7748     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7749     AC_LANG_PUSH([C++])
7750     save_CXXFLAGS=$CXXFLAGS
7751     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7752     if test "$ENABLE_OPTIMIZED" = TRUE; then
7753         CXXFLAGS="$CXXFLAGS -O2"
7754     else
7755         CXXFLAGS="$CXXFLAGS -O0"
7756     fi
7757     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7758     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7759             void fill(char const * begin, char const * end, char c);
7760             struct q {
7761                 char ids[4];
7762                 char username[6];
7763             };
7764             void test(q & c) {
7765                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
7766                 __builtin_strncpy(c.username, "root", sizeof(c.username));
7767             }
7768         ]])], [AC_MSG_RESULT([no])], [
7769             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
7770             AC_MSG_RESULT([yes])
7771         ])
7772     CXXFLAGS=$save_CXXFLAGS
7773     AC_LANG_POP([C++])
7775 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
7777 HAVE_DLLEXPORTINLINES=
7778 if test "$_os" = "WINNT"; then
7779     AC_MSG_CHECKING([whether $CXX_BASE supports -Zc:dllexportInlines-])
7780     AC_LANG_PUSH([C++])
7781     save_CXXFLAGS=$CXXFLAGS
7782     CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
7783     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7784             HAVE_DLLEXPORTINLINES=TRUE
7785             AC_MSG_RESULT([yes])
7786         ], [AC_MSG_RESULT([no])])
7787     CXXFLAGS=$save_CXXFLAGS
7788     AC_LANG_POP([C++])
7790 AC_SUBST([HAVE_DLLEXPORTINLINES])
7792 dnl ===================================================================
7793 dnl CPU Intrinsics support - SSE, AVX
7794 dnl ===================================================================
7796 CXXFLAGS_INTRINSICS_SSE2=
7797 CXXFLAGS_INTRINSICS_SSSE3=
7798 CXXFLAGS_INTRINSICS_SSE41=
7799 CXXFLAGS_INTRINSICS_SSE42=
7800 CXXFLAGS_INTRINSICS_AVX=
7801 CXXFLAGS_INTRINSICS_AVX2=
7802 CXXFLAGS_INTRINSICS_AVX512=
7803 CXXFLAGS_INTRINSICS_AVX512F=
7804 CXXFLAGS_INTRINSICS_F16C=
7805 CXXFLAGS_INTRINSICS_FMA=
7807 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7808     # GCC, Clang or Clang-cl (clang-cl + MSVC's -arch options don't work well together)
7809     flag_sse2=-msse2
7810     flag_ssse3=-mssse3
7811     flag_sse41=-msse4.1
7812     flag_sse42=-msse4.2
7813     flag_avx=-mavx
7814     flag_avx2=-mavx2
7815     flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
7816     flag_avx512f=-mavx512f
7817     flag_f16c=-mf16c
7818     flag_fma=-mfma
7819 else
7820     # With MSVC using -arch is in fact not necessary for being able
7821     # to use CPU intrinsics, code using AVX512F intrinsics will compile
7822     # even if compiled with -arch:AVX, the -arch option really only affects
7823     # instructions generated for C/C++ code.
7824     # So use the matching same (or lower) -arch options, but only in order
7825     # to generate the best matching instructions for the C++ code surrounding
7826     # the intrinsics.
7827     # SSE2 is the default for x86/x64, so no need to specify the option.
7828     flag_sse2=
7829     # No specific options for these, use the next lower.
7830     flag_ssse3="$flag_sse2"
7831     flag_sse41="$flag_sse2"
7832     flag_sse42="$flag_sse2"
7833     flag_avx=-arch:AVX
7834     flag_avx2=-arch:AVX2
7835     flag_avx512=-arch:AVX512
7836     # Using -arch:AVX512 would enable more than just AVX512F, so use only AVX2.
7837     flag_avx512f=-arch:AVX2
7838     # No MSVC options for these.
7839     flag_f16c="$flag_sse2"
7840     flag_fma="$flag_sse2"
7843 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
7844 AC_LANG_PUSH([C++])
7845 save_CXXFLAGS=$CXXFLAGS
7846 CXXFLAGS="$CXXFLAGS $flag_sse2"
7847 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7848     #include <emmintrin.h>
7849     int main () {
7850         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7851         c = _mm_xor_si128 (a, b);
7852         return 0;
7853     }
7854     ])],
7855     [can_compile_sse2=yes],
7856     [can_compile_sse2=no])
7857 AC_LANG_POP([C++])
7858 CXXFLAGS=$save_CXXFLAGS
7859 AC_MSG_RESULT([${can_compile_sse2}])
7860 if test "${can_compile_sse2}" = "yes" ; then
7861     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
7864 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
7865 AC_LANG_PUSH([C++])
7866 save_CXXFLAGS=$CXXFLAGS
7867 CXXFLAGS="$CXXFLAGS $flag_ssse3"
7868 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7869     #include <tmmintrin.h>
7870     int main () {
7871         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7872         c = _mm_maddubs_epi16 (a, b);
7873         return 0;
7874     }
7875     ])],
7876     [can_compile_ssse3=yes],
7877     [can_compile_ssse3=no])
7878 AC_LANG_POP([C++])
7879 CXXFLAGS=$save_CXXFLAGS
7880 AC_MSG_RESULT([${can_compile_ssse3}])
7881 if test "${can_compile_ssse3}" = "yes" ; then
7882     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
7885 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
7886 AC_LANG_PUSH([C++])
7887 save_CXXFLAGS=$CXXFLAGS
7888 CXXFLAGS="$CXXFLAGS $flag_sse41"
7889 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7890     #include <smmintrin.h>
7891     int main () {
7892         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7893         c = _mm_cmpeq_epi64 (a, b);
7894         return 0;
7895     }
7896     ])],
7897     [can_compile_sse41=yes],
7898     [can_compile_sse41=no])
7899 AC_LANG_POP([C++])
7900 CXXFLAGS=$save_CXXFLAGS
7901 AC_MSG_RESULT([${can_compile_sse41}])
7902 if test "${can_compile_sse41}" = "yes" ; then
7903     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
7906 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
7907 AC_LANG_PUSH([C++])
7908 save_CXXFLAGS=$CXXFLAGS
7909 CXXFLAGS="$CXXFLAGS $flag_sse42"
7910 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7911     #include <nmmintrin.h>
7912     int main () {
7913         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7914         c = _mm_cmpgt_epi64 (a, b);
7915         return 0;
7916     }
7917     ])],
7918     [can_compile_sse42=yes],
7919     [can_compile_sse42=no])
7920 AC_LANG_POP([C++])
7921 CXXFLAGS=$save_CXXFLAGS
7922 AC_MSG_RESULT([${can_compile_sse42}])
7923 if test "${can_compile_sse42}" = "yes" ; then
7924     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
7927 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
7928 AC_LANG_PUSH([C++])
7929 save_CXXFLAGS=$CXXFLAGS
7930 CXXFLAGS="$CXXFLAGS $flag_avx"
7931 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7932     #include <immintrin.h>
7933     int main () {
7934         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
7935         c = _mm256_xor_ps(a, b);
7936         return 0;
7937     }
7938     ])],
7939     [can_compile_avx=yes],
7940     [can_compile_avx=no])
7941 AC_LANG_POP([C++])
7942 CXXFLAGS=$save_CXXFLAGS
7943 AC_MSG_RESULT([${can_compile_avx}])
7944 if test "${can_compile_avx}" = "yes" ; then
7945     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
7948 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
7949 AC_LANG_PUSH([C++])
7950 save_CXXFLAGS=$CXXFLAGS
7951 CXXFLAGS="$CXXFLAGS $flag_avx2"
7952 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7953     #include <immintrin.h>
7954     int main () {
7955         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
7956         c = _mm256_maddubs_epi16(a, b);
7957         return 0;
7958     }
7959     ])],
7960     [can_compile_avx2=yes],
7961     [can_compile_avx2=no])
7962 AC_LANG_POP([C++])
7963 CXXFLAGS=$save_CXXFLAGS
7964 AC_MSG_RESULT([${can_compile_avx2}])
7965 if test "${can_compile_avx2}" = "yes" ; then
7966     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
7969 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
7970 AC_LANG_PUSH([C++])
7971 save_CXXFLAGS=$CXXFLAGS
7972 CXXFLAGS="$CXXFLAGS $flag_avx512"
7973 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7974     #include <immintrin.h>
7975     int main () {
7976         __m512i a = _mm512_loadu_si512(0);
7977         __m512d v1 = _mm512_load_pd(0);
7978         // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
7979         __m512d v2 = _mm512_abs_pd(v1);
7980         return 0;
7981     }
7982     ])],
7983     [can_compile_avx512=yes],
7984     [can_compile_avx512=no])
7985 AC_LANG_POP([C++])
7986 CXXFLAGS=$save_CXXFLAGS
7987 AC_MSG_RESULT([${can_compile_avx512}])
7988 if test "${can_compile_avx512}" = "yes" ; then
7989     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
7990     CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
7993 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
7994 AC_LANG_PUSH([C++])
7995 save_CXXFLAGS=$CXXFLAGS
7996 CXXFLAGS="$CXXFLAGS $flag_f16c"
7997 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7998     #include <immintrin.h>
7999     int main () {
8000         __m128i a = _mm_set1_epi32 (0);
8001         __m128 c;
8002         c = _mm_cvtph_ps(a);
8003         return 0;
8004     }
8005     ])],
8006     [can_compile_f16c=yes],
8007     [can_compile_f16c=no])
8008 AC_LANG_POP([C++])
8009 CXXFLAGS=$save_CXXFLAGS
8010 AC_MSG_RESULT([${can_compile_f16c}])
8011 if test "${can_compile_f16c}" = "yes" ; then
8012     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
8015 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
8016 AC_LANG_PUSH([C++])
8017 save_CXXFLAGS=$CXXFLAGS
8018 CXXFLAGS="$CXXFLAGS $flag_fma"
8019 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8020     #include <immintrin.h>
8021     int main () {
8022         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
8023         d = _mm256_fmadd_ps(a, b, c);
8024         return 0;
8025     }
8026     ])],
8027     [can_compile_fma=yes],
8028     [can_compile_fma=no])
8029 AC_LANG_POP([C++])
8030 CXXFLAGS=$save_CXXFLAGS
8031 AC_MSG_RESULT([${can_compile_fma}])
8032 if test "${can_compile_fma}" = "yes" ; then
8033     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
8036 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
8037 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
8038 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
8039 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
8040 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
8041 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
8042 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
8043 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512F])
8044 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
8045 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
8047 dnl ===================================================================
8048 dnl system stl sanity tests
8049 dnl ===================================================================
8050 if test "$_os" != "WINNT"; then
8052     AC_LANG_PUSH([C++])
8054     save_CPPFLAGS="$CPPFLAGS"
8055     if test -n "$MACOSX_SDK_PATH"; then
8056         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
8057     fi
8059     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
8060     # only.
8061     if test "$CPP_LIBRARY" = GLIBCXX; then
8062         dnl gcc#19664, gcc#22482, rhbz#162935
8063         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
8064         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
8065         AC_MSG_RESULT([$stlvisok])
8066         if test "$stlvisok" = "no"; then
8067             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
8068         fi
8069     fi
8071     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
8072     # when we don't make any dynamic libraries?
8073     if test "$DISABLE_DYNLOADING" = ""; then
8074         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
8075         cat > conftestlib1.cc <<_ACEOF
8076 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
8077 struct S2: S1<int> { virtual ~S2(); };
8078 S2::~S2() {}
8079 _ACEOF
8080         cat > conftestlib2.cc <<_ACEOF
8081 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
8082 struct S2: S1<int> { virtual ~S2(); };
8083 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
8084 _ACEOF
8085         gccvisinlineshiddenok=yes
8086         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
8087             gccvisinlineshiddenok=no
8088         else
8089             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
8090             dnl known to not work with -z defs (unsetting which makes the test
8091             dnl moot, though):
8092             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
8093             if test "$COM_IS_CLANG" = TRUE; then
8094                 for i in $CXX $CXXFLAGS; do
8095                     case $i in
8096                     -fsanitize=*)
8097                         my_linkflagsnoundefs=
8098                         break
8099                         ;;
8100                     esac
8101                 done
8102             fi
8103             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
8104                 gccvisinlineshiddenok=no
8105             fi
8106         fi
8108         rm -fr libconftest*
8109         AC_MSG_RESULT([$gccvisinlineshiddenok])
8110         if test "$gccvisinlineshiddenok" = "no"; then
8111             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
8112         fi
8113     fi
8115    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
8116     cat >visibility.cxx <<_ACEOF
8117 #pragma GCC visibility push(hidden)
8118 struct __attribute__ ((visibility ("default"))) TestStruct {
8119   static void Init();
8121 __attribute__ ((visibility ("default"))) void TestFunc() {
8122   TestStruct::Init();
8124 _ACEOF
8125     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
8126         gccvisbroken=yes
8127     else
8128         case "$host_cpu" in
8129         i?86|x86_64)
8130             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
8131                 gccvisbroken=no
8132             else
8133                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
8134                     gccvisbroken=no
8135                 else
8136                     gccvisbroken=yes
8137                 fi
8138             fi
8139             ;;
8140         *)
8141             gccvisbroken=no
8142             ;;
8143         esac
8144     fi
8145     rm -f visibility.s visibility.cxx
8147     AC_MSG_RESULT([$gccvisbroken])
8148     if test "$gccvisbroken" = "yes"; then
8149         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
8150     fi
8152     CPPFLAGS="$save_CPPFLAGS"
8154     AC_MSG_CHECKING([if CET endbranch is recognized])
8155 cat > endbr.s <<_ACEOF
8156 endbr32
8157 _ACEOF
8158     HAVE_ASM_END_BRANCH_INS_SUPPORT=
8159     if $CXX -c endbr.s -o endbr.o >/dev/null 2>&5; then
8160         AC_MSG_RESULT([yes])
8161         HAVE_ASM_END_BRANCH_INS_SUPPORT=TRUE
8162     else
8163         AC_MSG_RESULT([no])
8164     fi
8165     rm -f endbr.s endbr.o
8166     AC_SUBST(HAVE_ASM_END_BRANCH_INS_SUPPORT)
8168     AC_LANG_POP([C++])
8171 dnl ===================================================================
8172 dnl  Clang++ tests
8173 dnl ===================================================================
8175 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
8176 if test "$GCC" = "yes"; then
8177     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
8178     AC_LANG_PUSH([C++])
8179     save_CXXFLAGS=$CXXFLAGS
8180     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
8181     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
8182     CXXFLAGS=$save_CXXFLAGS
8183     AC_LANG_POP([C++])
8184     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
8185         AC_MSG_RESULT([yes])
8186     else
8187         AC_MSG_RESULT([no])
8188     fi
8190 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
8192 dnl ===================================================================
8193 dnl Compiler plugins
8194 dnl ===================================================================
8196 COMPILER_PLUGINS=
8197 # currently only Clang
8199 if test "$COM_IS_CLANG" != "TRUE"; then
8200     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
8201         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
8202         enable_compiler_plugins=no
8203     fi
8206 COMPILER_PLUGINS_COM_IS_CLANG=
8207 if test "$COM_IS_CLANG" = "TRUE"; then
8208     if test -n "$enable_compiler_plugins"; then
8209         compiler_plugins="$enable_compiler_plugins"
8210     elif test -n "$ENABLE_DBGUTIL"; then
8211         compiler_plugins=test
8212     else
8213         compiler_plugins=no
8214     fi
8215     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
8216         if test "$CLANGVER" -lt 120001; then
8217             if test "$compiler_plugins" = yes; then
8218                 AC_MSG_ERROR(
8219                     [Clang $CLANGVER is too old to build compiler plugins; need >= 12.0.1.])
8220             else
8221                 compiler_plugins=no
8222             fi
8223         fi
8224     fi
8225     if test "$compiler_plugins" != "no"; then
8226         dnl The prefix where Clang resides, override to where Clang resides if
8227         dnl using a source build:
8228         if test -z "$CLANGDIR"; then
8229             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
8230         fi
8231         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
8232         if test -z "$COMPILER_PLUGINS_CXX"; then
8233             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
8234         fi
8235         clangbindir=$CLANGDIR/bin
8236         if test "$build_os" = "cygwin"; then
8237             clangbindir=$(cygpath -u "$clangbindir")
8238         fi
8239         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
8240         if test -n "$LLVM_CONFIG"; then
8241             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
8242             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
8243             if test -z "$CLANGLIBDIR"; then
8244                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
8245             fi
8246             # Try if clang is built from source (in which case its includes are not together with llvm includes).
8247             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
8248             clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
8249             if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
8250                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
8251             fi
8252             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
8253             clangobjdir=$($LLVM_CONFIG --obj-root)
8254             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
8255                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
8256             fi
8257         fi
8258         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
8259         AC_LANG_PUSH([C++])
8260         save_CXX=$CXX
8261         save_CXXCPP=$CXXCPP
8262         save_CPPFLAGS=$CPPFLAGS
8263         save_CXXFLAGS=$CXXFLAGS
8264         save_LDFLAGS=$LDFLAGS
8265         save_LIBS=$LIBS
8266         CXX=$COMPILER_PLUGINS_CXX
8267         CXXCPP="$COMPILER_PLUGINS_CXX -E"
8268         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8269         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8270         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
8271             [COMPILER_PLUGINS=TRUE],
8272             [
8273             if test "$compiler_plugins" = "yes"; then
8274                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
8275             else
8276                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
8277                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
8278             fi
8279             ])
8280         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8281         dnl comment in compilerplugins/Makefile-clang.mk:
8282         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8283             LDFLAGS=""
8284             AC_MSG_CHECKING([for clang libraries to use])
8285             if test -z "$CLANGTOOLLIBS"; then
8286                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8287  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8288                 AC_LINK_IFELSE([
8289                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8290                         [[ clang::FullSourceLoc().dump(); ]])
8291                 ],[CLANGTOOLLIBS="$LIBS"],[])
8292             fi
8293             if test -z "$CLANGTOOLLIBS"; then
8294                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8295                 AC_LINK_IFELSE([
8296                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8297                         [[ clang::FullSourceLoc().dump(); ]])
8298                 ],[CLANGTOOLLIBS="$LIBS"],[])
8299             fi
8300             AC_MSG_RESULT([$CLANGTOOLLIBS])
8301             if test -z "$CLANGTOOLLIBS"; then
8302                 if test "$compiler_plugins" = "yes"; then
8303                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8304                 else
8305                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8306                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8307                 fi
8308                 COMPILER_PLUGINS=
8309             fi
8310             if test -n "$COMPILER_PLUGINS"; then
8311                 if test -z "$CLANGSYSINCLUDE"; then
8312                     if test -n "$LLVM_CONFIG"; then
8313                         # Path to the clang system headers (no idea if there's a better way to get it).
8314                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8315                     fi
8316                 fi
8317             fi
8318         fi
8319         CXX=$save_CXX
8320         CXXCPP=$save_CXXCPP
8321         CPPFLAGS=$save_CPPFLAGS
8322         CXXFLAGS=$save_CXXFLAGS
8323         LDFLAGS=$save_LDFLAGS
8324         LIBS="$save_LIBS"
8325         AC_LANG_POP([C++])
8327         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8328         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8329             #ifndef __clang__
8330             you lose
8331             #endif
8332             int foo=42;
8333             ]])],
8334             [AC_MSG_RESULT([yes])
8335              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8336             [AC_MSG_RESULT([no])])
8337         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8338     fi
8339 else
8340     if test "$enable_compiler_plugins" = "yes"; then
8341         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8342     fi
8344 COMPILER_PLUGINS_ANALYZER_PCH=
8345 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8346     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8348 AC_SUBST(COMPILER_PLUGINS)
8349 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8350 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8351 AC_SUBST(COMPILER_PLUGINS_CXX)
8352 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8353 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8354 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8355 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8356 AC_SUBST(CLANGDIR)
8357 AC_SUBST(CLANGLIBDIR)
8358 AC_SUBST(CLANGTOOLLIBS)
8359 AC_SUBST(CLANGSYSINCLUDE)
8361 # Plugin to help linker.
8362 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8363 # This makes --enable-lto build with clang work.
8364 AC_SUBST(LD_PLUGIN)
8366 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8367 AC_SUBST(HAVE_POSIX_FALLOCATE)
8369 JITC_PROCESSOR_TYPE=""
8370 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8371     # IBMs JDK needs this...
8372     JITC_PROCESSOR_TYPE=6
8373     export JITC_PROCESSOR_TYPE
8375 AC_SUBST([JITC_PROCESSOR_TYPE])
8377 # Misc Windows Stuff
8378 AC_ARG_WITH(ucrt-dir,
8379     AS_HELP_STRING([--with-ucrt-dir],
8380         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8381         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8382         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8383             Windows6.1-KB2999226-x64.msu
8384             Windows6.1-KB2999226-x86.msu
8385             Windows8.1-KB2999226-x64.msu
8386             Windows8.1-KB2999226-x86.msu
8387             Windows8-RT-KB2999226-x64.msu
8388             Windows8-RT-KB2999226-x86.msu
8389         A zip archive including those files is available from Microsoft site:
8390         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8393 UCRT_REDISTDIR="$with_ucrt_dir"
8394 if test $_os = "WINNT"; then
8395     find_msvc_x64_dlls
8396     for i in $PKGFORMAT; do
8397         if test "$i" = msi; then
8398             find_msms
8399             break
8400         fi
8401     done
8402     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8403     MSVC_DLLS="$msvcdlls"
8404     test -n "$msmdir" && MSM_PATH=`win_short_path_for_make "$msmdir"`
8405     # MSVC 15.3 changed it to VC141
8406     if echo "$msvcdllpath" | grep -q "VC143.CRT$"; then
8407         SCPDEFS="$SCPDEFS -DWITH_VC143_REDIST"
8408     elif echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8409         SCPDEFS="$SCPDEFS -DWITH_VC142_REDIST"
8410     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8411         SCPDEFS="$SCPDEFS -DWITH_VC141_REDIST"
8412     else
8413         SCPDEFS="$SCPDEFS -DWITH_VC${VCVER}_REDIST"
8414     fi
8416     if test "$UCRT_REDISTDIR" = "no"; then
8417         dnl explicitly disabled
8418         UCRT_REDISTDIR=""
8419     else
8420         if ! test -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x64.msu" -a \
8421                   -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x86.msu" -a \
8422                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x64.msu" -a \
8423                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x86.msu" -a \
8424                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x64.msu" -a \
8425                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x86.msu"; then
8426             UCRT_REDISTDIR=""
8427             if test -n "$PKGFORMAT"; then
8428                for i in $PKGFORMAT; do
8429                    case "$i" in
8430                    msi)
8431                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8432                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8433                        ;;
8434                    esac
8435                done
8436             fi
8437         fi
8438     fi
8441 AC_SUBST(UCRT_REDISTDIR)
8442 AC_SUBST(MSVC_DLL_PATH)
8443 AC_SUBST(MSVC_DLLS)
8444 AC_SUBST(MSM_PATH)
8447 dnl ===================================================================
8448 dnl Checks for Java
8449 dnl ===================================================================
8450 if test "$ENABLE_JAVA" != ""; then
8452     # Windows-specific tests
8453     if test "$build_os" = "cygwin"; then
8454         if test -z "$with_jdk_home"; then
8455             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8456             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8457             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/CurrentVersion"
8458             if test -n "$regvalue"; then
8459                 ver=$regvalue
8460                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver/JavaHome"
8461                 with_jdk_home=$regvalue
8462             fi
8463             howfound="found automatically"
8464         else
8465             with_jdk_home=`win_short_path_for_make "$with_jdk_home"`
8466             howfound="you passed"
8467         fi
8469         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8470             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])
8471         fi
8472     fi
8474     # 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.
8475     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8476     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8477         with_jdk_home=`/usr/libexec/java_home`
8478     fi
8480     JAVA_HOME=; export JAVA_HOME
8481     if test -z "$with_jdk_home"; then
8482         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8483     else
8484         _java_path="$with_jdk_home/bin/$with_java"
8485         dnl Check if there is a Java interpreter at all.
8486         if test -x "$_java_path"; then
8487             JAVAINTERPRETER=$_java_path
8488         else
8489             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8490         fi
8491     fi
8493     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8494     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8495     dnl loaded by java to run JunitTests:
8496     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8497         shortjdkhome=`cygpath -d "$with_jdk_home"`
8498         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
8499             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8500             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8501         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
8502             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8503             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8504         fi
8506         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8507             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8508         fi
8509         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8510     elif test "$cross_compiling" != "yes"; then
8511         case $CPUNAME in
8512             AARCH64|AXP|X86_64|HPPA|IA64|POWERPC64|S390X|SPARC64|GODSON64)
8513                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8514                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8515                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8516                 fi
8517                 ;;
8518             *) # assumption: everything else 32-bit
8519                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8520                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8521                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8522                 fi
8523                 ;;
8524         esac
8525     fi
8528 dnl ===================================================================
8529 dnl Checks for JDK.
8530 dnl ===================================================================
8532 # Whether all the complexity here actually is needed any more or not, no idea.
8534 JDK_SECURITYMANAGER_DISALLOWED=
8535 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8536     _gij_longver=0
8537     AC_MSG_CHECKING([the installed JDK])
8538     if test -n "$JAVAINTERPRETER"; then
8539         dnl java -version sends output to stderr!
8540         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8541             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8542         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8543             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8544         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8545             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8546         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8547             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8548         else
8549             JDK=sun
8551             dnl Sun JDK specific tests
8552             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8553             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8555             if test "$_jdk_ver" -lt 10900; then
8556                 AC_MSG_ERROR([JDK is too old, you need at least 9 ($_jdk_ver < 10900)])
8557             fi
8558             if test "$_jdk_ver" -gt 10900; then
8559                 JAVA_CLASSPATH_NOT_SET=TRUE
8560             fi
8561             dnl TODO: Presumably, the Security Manager will not merely be disallowed, but be
8562             dnl completely removed in some Java version > 18 (see
8563             dnl <https://openjdk.java.net/jeps/411> "Deprecate the Security Manager for Removal"):
8564             if test "$_jdk_ver" -ge 180000; then
8565                 JDK_SECURITYMANAGER_DISALLOWED=TRUE
8566             fi
8568             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8569             if test "$_os" = "WINNT"; then
8570                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8571             fi
8572             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8574             # set to limit VM usage for JunitTests
8575             JAVAIFLAGS=-Xmx64M
8576             # set to limit VM usage for javac
8577             JAVACFLAGS=-J-Xmx128M
8578         fi
8579     else
8580         AC_MSG_ERROR([Java not found. You need at least JDK 9])
8581     fi
8582 else
8583     if test -z "$ENABLE_JAVA"; then
8584         dnl Java disabled
8585         JAVA_HOME=
8586         export JAVA_HOME
8587     elif test "$cross_compiling" = "yes"; then
8588         # Just assume compatibility of build and host JDK
8589         JDK=$JDK_FOR_BUILD
8590         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8591     fi
8594 dnl ===================================================================
8595 dnl Checks for javac
8596 dnl ===================================================================
8597 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8598     javacompiler="javac"
8599     : ${JAVA_SOURCE_VER=8}
8600     : ${JAVA_TARGET_VER=8}
8601     if test -z "$with_jdk_home"; then
8602         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8603     else
8604         _javac_path="$with_jdk_home/bin/$javacompiler"
8605         dnl Check if there is a Java compiler at all.
8606         if test -x "$_javac_path"; then
8607             JAVACOMPILER=$_javac_path
8608         fi
8609     fi
8610     if test -z "$JAVACOMPILER"; then
8611         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8612     fi
8613     if test "$build_os" = "cygwin"; then
8614         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8615             JAVACOMPILER="${JAVACOMPILER}.exe"
8616         fi
8617         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8618     fi
8621 dnl ===================================================================
8622 dnl Checks for javadoc
8623 dnl ===================================================================
8624 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8625     if test -z "$with_jdk_home"; then
8626         AC_PATH_PROG(JAVADOC, javadoc)
8627     else
8628         _javadoc_path="$with_jdk_home/bin/javadoc"
8629         dnl Check if there is a javadoc at all.
8630         if test -x "$_javadoc_path"; then
8631             JAVADOC=$_javadoc_path
8632         else
8633             AC_PATH_PROG(JAVADOC, javadoc)
8634         fi
8635     fi
8636     if test -z "$JAVADOC"; then
8637         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8638     fi
8639     if test "$build_os" = "cygwin"; then
8640         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8641             JAVADOC="${JAVADOC}.exe"
8642         fi
8643         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8644     fi
8646     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8647     JAVADOCISGJDOC="yes"
8648     fi
8650 AC_SUBST(JAVADOC)
8651 AC_SUBST(JAVADOCISGJDOC)
8653 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8654     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8655     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8656         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8657            # try to recover first by looking whether we have an alternative
8658            # system as in Debian or newer SuSEs where following /usr/bin/javac
8659            # over /etc/alternatives/javac leads to the right bindir where we
8660            # just need to strip a bit away to get a valid JAVA_HOME
8661            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8662         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8663             # maybe only one level of symlink (e.g. on Mac)
8664             JAVA_HOME=$(readlink $JAVACOMPILER)
8665             if test "$(dirname $JAVA_HOME)" = "."; then
8666                 # we've got no path to trim back
8667                 JAVA_HOME=""
8668             fi
8669         else
8670             # else warn
8671             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8672             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8673             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8674             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8675         fi
8676         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8677         if test "$JAVA_HOME" != "/usr"; then
8678             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8679                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8680                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8681                 dnl Tiger already returns a JDK path...
8682                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8683             else
8684                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8685                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8686                 dnl that checks which version to run
8687                 if test -f "$JAVA_HOME"; then
8688                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8689                 fi
8690             fi
8691         fi
8692     fi
8693     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8695     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8696     if test -z "$JAVA_HOME"; then
8697         if test "x$with_jdk_home" = "x"; then
8698             cat > findhome.java <<_ACEOF
8699 [import java.io.File;
8701 class findhome
8703     public static void main(String args[])
8704     {
8705         String jrelocation = System.getProperty("java.home");
8706         File jre = new File(jrelocation);
8707         System.out.println(jre.getParent());
8708     }
8710 _ACEOF
8711             AC_MSG_CHECKING([if javac works])
8712             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8713             AC_TRY_EVAL(javac_cmd)
8714             if test $? = 0 -a -f ./findhome.class; then
8715                 AC_MSG_RESULT([javac works])
8716             else
8717                 echo "configure: javac test failed" >&5
8718                 cat findhome.java >&5
8719                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8720             fi
8721             AC_MSG_CHECKING([if gij knows its java.home])
8722             JAVA_HOME=`$JAVAINTERPRETER findhome`
8723             if test $? = 0 -a "$JAVA_HOME" != ""; then
8724                 AC_MSG_RESULT([$JAVA_HOME])
8725             else
8726                 echo "configure: java test failed" >&5
8727                 cat findhome.java >&5
8728                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8729             fi
8730             # clean-up after ourselves
8731             rm -f ./findhome.java ./findhome.class
8732         else
8733             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8734         fi
8735     fi
8737     # now check if $JAVA_HOME is really valid
8738     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8739         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8740             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8741             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8742             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
8743             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
8744             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
8745             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
8746         fi
8747     fi
8748     PathFormat "$JAVA_HOME"
8749     JAVA_HOME="$formatted_path"
8752 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
8753     "$_os" != Darwin
8754 then
8755     AC_MSG_CHECKING([for JAWT lib])
8756     if test "$_os" = WINNT; then
8757         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
8758         JAWTLIB=jawt.lib
8759     else
8760         case "$host_cpu" in
8761         arm*)
8762             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
8763             JAVA_ARCH=$my_java_arch
8764             ;;
8765         i*86)
8766             my_java_arch=i386
8767             ;;
8768         m68k)
8769             my_java_arch=m68k
8770             ;;
8771         powerpc)
8772             my_java_arch=ppc
8773             ;;
8774         powerpc64)
8775             my_java_arch=ppc64
8776             ;;
8777         powerpc64le)
8778             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
8779             JAVA_ARCH=$my_java_arch
8780             ;;
8781         sparc64)
8782             my_java_arch=sparcv9
8783             ;;
8784         x86_64)
8785             my_java_arch=amd64
8786             ;;
8787         *)
8788             my_java_arch=$host_cpu
8789             ;;
8790         esac
8791         # This is where JDK9 puts the library
8792         if test -e "$JAVA_HOME/lib/libjawt.so"; then
8793             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
8794         else
8795             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
8796         fi
8797         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
8798     fi
8799     AC_MSG_RESULT([$JAWTLIB])
8801 AC_SUBST(JAWTLIB)
8803 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
8804     case "$host_os" in
8806     aix*)
8807         JAVAINC="-I$JAVA_HOME/include"
8808         JAVAINC="$JAVAINC -I$JAVA_HOME/include/aix"
8809         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8810         ;;
8812     cygwin*|wsl*)
8813         JAVAINC="-I$JAVA_HOME/include/win32"
8814         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
8815         ;;
8817     darwin*)
8818         if test -d "$JAVA_HOME/include/darwin"; then
8819             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
8820         else
8821             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
8822         fi
8823         ;;
8825     dragonfly*)
8826         JAVAINC="-I$JAVA_HOME/include"
8827         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8828         ;;
8830     freebsd*)
8831         JAVAINC="-I$JAVA_HOME/include"
8832         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
8833         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
8834         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8835         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8836         ;;
8838     k*bsd*-gnu*)
8839         JAVAINC="-I$JAVA_HOME/include"
8840         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8841         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8842         ;;
8844     linux-gnu*)
8845         JAVAINC="-I$JAVA_HOME/include"
8846         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8847         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8848         ;;
8850     *netbsd*)
8851         JAVAINC="-I$JAVA_HOME/include"
8852         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
8853         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8854        ;;
8856     openbsd*)
8857         JAVAINC="-I$JAVA_HOME/include"
8858         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
8859         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8860         ;;
8862     solaris*)
8863         JAVAINC="-I$JAVA_HOME/include"
8864         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
8865         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8866         ;;
8867     esac
8869 SOLARINC="$SOLARINC $JAVAINC"
8871 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8872     JAVA_HOME_FOR_BUILD=$JAVA_HOME
8873     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
8874     JDK_FOR_BUILD=$JDK
8875     JDK_SECURITYMANAGER_DISALLOWED_FOR_BUILD=$JDK_SECURITYMANAGER_DISALLOWED
8878 AC_SUBST(JAVACFLAGS)
8879 AC_SUBST(JAVACOMPILER)
8880 AC_SUBST(JAVAINTERPRETER)
8881 AC_SUBST(JAVAIFLAGS)
8882 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
8883 AC_SUBST(JAVA_CLASSPATH_NOT_SET)
8884 AC_SUBST(JAVA_HOME)
8885 AC_SUBST(JAVA_HOME_FOR_BUILD)
8886 AC_SUBST(JDK)
8887 AC_SUBST(JDK_FOR_BUILD)
8888 AC_SUBST(JDK_SECURITYMANAGER_DISALLOWED_FOR_BUILD)
8889 AC_SUBST(JAVA_SOURCE_VER)
8890 AC_SUBST(JAVA_TARGET_VER)
8893 dnl ===================================================================
8894 dnl Export file validation
8895 dnl ===================================================================
8896 AC_MSG_CHECKING([whether to enable export file validation])
8897 if test "$with_export_validation" != "no"; then
8898     if test -z "$ENABLE_JAVA"; then
8899         if test "$with_export_validation" = "yes"; then
8900             AC_MSG_ERROR([requested, but Java is disabled])
8901         else
8902             AC_MSG_RESULT([no, as Java is disabled])
8903         fi
8904     elif ! test -d "${SRC_ROOT}/schema"; then
8905         if test "$with_export_validation" = "yes"; then
8906             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
8907         else
8908             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
8909         fi
8910     else
8911         AC_MSG_RESULT([yes])
8912         AC_DEFINE(HAVE_EXPORT_VALIDATION)
8914         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
8915         if test -z "$ODFVALIDATOR"; then
8916             # remember to download the ODF toolkit with validator later
8917             AC_MSG_NOTICE([no odfvalidator found, will download it])
8918             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
8919             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
8921             # and fetch name of odfvalidator jar name from download.lst
8922             ODFVALIDATOR_JAR=`$SED -n -e "s/export *ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8923             AC_SUBST(ODFVALIDATOR_JAR)
8925             if test -z "$ODFVALIDATOR_JAR"; then
8926                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
8927             fi
8928         fi
8929         if test "$build_os" = "cygwin"; then
8930             # In case of Cygwin it will be executed from Windows,
8931             # so we need to run bash and absolute path to validator
8932             # so instead of "odfvalidator" it will be
8933             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8934             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
8935         else
8936             ODFVALIDATOR="sh $ODFVALIDATOR"
8937         fi
8938         AC_SUBST(ODFVALIDATOR)
8941         AC_PATH_PROGS(OFFICEOTRON, officeotron)
8942         if test -z "$OFFICEOTRON"; then
8943             # remember to download the officeotron with validator later
8944             AC_MSG_NOTICE([no officeotron found, will download it])
8945             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
8946             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
8948             # and fetch name of officeotron jar name from download.lst
8949             OFFICEOTRON_JAR=`$SED -n -e "s/export *OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8950             AC_SUBST(OFFICEOTRON_JAR)
8952             if test -z "$OFFICEOTRON_JAR"; then
8953                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
8954             fi
8955         else
8956             # check version of existing officeotron
8957             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
8958             if test 0"$OFFICEOTRON_VER" -lt 704; then
8959                 AC_MSG_ERROR([officeotron too old])
8960             fi
8961         fi
8962         if test "$build_os" = "cygwin"; then
8963             # In case of Cygwin it will be executed from Windows,
8964             # so we need to run bash and absolute path to validator
8965             # so instead of "odfvalidator" it will be
8966             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8967             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
8968         else
8969             OFFICEOTRON="sh $OFFICEOTRON"
8970         fi
8971     fi
8972     AC_SUBST(OFFICEOTRON)
8973 else
8974     AC_MSG_RESULT([no])
8977 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
8978 if test "$with_bffvalidator" != "no"; then
8979     AC_DEFINE(HAVE_BFFVALIDATOR)
8981     if test "$with_export_validation" = "no"; then
8982         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
8983     fi
8985     if test "$with_bffvalidator" = "yes"; then
8986         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
8987     else
8988         BFFVALIDATOR="$with_bffvalidator"
8989     fi
8991     if test "$build_os" = "cygwin"; then
8992         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
8993             AC_MSG_RESULT($BFFVALIDATOR)
8994         else
8995             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8996         fi
8997     elif test -n "$BFFVALIDATOR"; then
8998         # We are not in Cygwin but need to run Windows binary with wine
8999         AC_PATH_PROGS(WINE, wine)
9001         # so swap in a shell wrapper that converts paths transparently
9002         BFFVALIDATOR_EXE="$BFFVALIDATOR"
9003         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
9004         AC_SUBST(BFFVALIDATOR_EXE)
9005         AC_MSG_RESULT($BFFVALIDATOR)
9006     else
9007         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
9008     fi
9009     AC_SUBST(BFFVALIDATOR)
9010 else
9011     AC_MSG_RESULT([no])
9014 dnl ===================================================================
9015 dnl Check for C preprocessor to use
9016 dnl ===================================================================
9017 AC_MSG_CHECKING([which C preprocessor to use in idlc])
9018 SYSTEM_UCPP_IS_GCC=
9019 if test -n "$with_idlc_cpp"; then
9020     AC_MSG_RESULT([$with_idlc_cpp])
9021     AC_PATH_PROG(SYSTEM_UCPP, $with_idlc_cpp)
9022     AC_MSG_CHECKING([if $with_idlc_cpp is GCC CPP])
9023     # ucpp will accept -v (to output version), warn about the others as unknown
9024     # and return 1 (due to -v)
9025     # gcc will accept -v (as verbose), --version (to output version) and -nostdinc
9026     # and return 0 (due to --version ) if all options are supported
9027     $SYSTEM_UCPP -v --version -nostdinc >/dev/null 2>/dev/null
9028     if test $? -eq 0;  then
9029         SYSTEM_UCPP_IS_GCC=TRUE
9030         AC_MSG_RESULT([yes])
9031     else
9032         AC_MSG_RESULT([no])
9033     fi
9034 else
9035     AC_MSG_RESULT([ucpp])
9036     AC_MSG_CHECKING([which ucpp to use])
9037     if test -n "$with_system_ucpp" -a "$with_system_ucpp" != "no"; then
9038         AC_MSG_RESULT([external])
9039         AC_PATH_PROG(SYSTEM_UCPP, ucpp)
9040     else
9041         AC_MSG_RESULT([internal])
9042         BUILD_TYPE="$BUILD_TYPE UCPP"
9043     fi
9045 AC_SUBST(SYSTEM_UCPP)
9046 AC_SUBST(SYSTEM_UCPP_IS_GCC)
9048 dnl ===================================================================
9049 dnl Check for epm (not needed for Windows)
9050 dnl ===================================================================
9051 AC_MSG_CHECKING([whether to enable EPM for packing])
9052 if test "$enable_epm" = "yes"; then
9053     AC_MSG_RESULT([yes])
9054     if test "$_os" != "WINNT"; then
9055         if test $_os = Darwin; then
9056             EPM=internal
9057         elif test -n "$with_epm"; then
9058             EPM=$with_epm
9059         else
9060             AC_PATH_PROG(EPM, epm, no)
9061         fi
9062         if test "$EPM" = "no" -o "$EPM" = "internal"; then
9063             AC_MSG_NOTICE([EPM will be built.])
9064             BUILD_TYPE="$BUILD_TYPE EPM"
9065             EPM=${WORKDIR}/UnpackedTarball/epm/epm
9066         else
9067             # Gentoo has some epm which is something different...
9068             AC_MSG_CHECKING([whether the found epm is the right epm])
9069             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
9070                 AC_MSG_RESULT([yes])
9071             else
9072                 AC_MSG_ERROR([no. Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
9073             fi
9074             AC_MSG_CHECKING([epm version])
9075             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
9076             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
9077                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
9078                 AC_MSG_RESULT([OK, >= 3.7])
9079             else
9080                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
9081                 AC_MSG_ERROR([Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
9082             fi
9083         fi
9084     fi
9086     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
9087         AC_MSG_CHECKING([for rpm])
9088         for a in "$RPM" rpmbuild rpm; do
9089             $a --usage >/dev/null 2> /dev/null
9090             if test $? -eq 0; then
9091                 RPM=$a
9092                 break
9093             else
9094                 $a --version >/dev/null 2> /dev/null
9095                 if test $? -eq 0; then
9096                     RPM=$a
9097                     break
9098                 fi
9099             fi
9100         done
9101         if test -z "$RPM"; then
9102             AC_MSG_ERROR([not found])
9103         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
9104             RPM_PATH=`which $RPM`
9105             AC_MSG_RESULT([$RPM_PATH])
9106             SCPDEFS="$SCPDEFS -DWITH_RPM"
9107         else
9108             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
9109         fi
9110     fi
9111     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
9112         AC_PATH_PROG(DPKG, dpkg, no)
9113         if test "$DPKG" = "no"; then
9114             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
9115         fi
9116     fi
9117     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
9118        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9119         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
9120             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
9121                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
9122                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
9123                     AC_MSG_RESULT([yes])
9124                 else
9125                     AC_MSG_RESULT([no])
9126                     if echo "$PKGFORMAT" | $GREP -q rpm; then
9127                         _pt="rpm"
9128                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
9129                         add_warning "the rpms will need to be installed with --nodeps"
9130                     else
9131                         _pt="pkg"
9132                     fi
9133                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
9134                     add_warning "the ${_pt}s will not be relocatable"
9135                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
9136                                  relocation will work, you need to patch your epm with the
9137                                  patch in epm/epm-3.7.patch or build with
9138                                  --with-epm=internal which will build a suitable epm])
9139                 fi
9140             fi
9141         fi
9142     fi
9143     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9144         AC_PATH_PROG(PKGMK, pkgmk, no)
9145         if test "$PKGMK" = "no"; then
9146             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
9147         fi
9148     fi
9149     AC_SUBST(RPM)
9150     AC_SUBST(DPKG)
9151     AC_SUBST(PKGMK)
9152 else
9153     for i in $PKGFORMAT; do
9154         case "$i" in
9155         aix | bsd | deb | pkg | rpm | native | portable)
9156             AC_MSG_ERROR(
9157                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
9158             ;;
9159         esac
9160     done
9161     AC_MSG_RESULT([no])
9162     EPM=NO
9164 AC_SUBST(EPM)
9166 ENABLE_LWP=
9167 if test "$enable_lotuswordpro" = "yes"; then
9168     ENABLE_LWP="TRUE"
9170 AC_SUBST(ENABLE_LWP)
9172 dnl ===================================================================
9173 dnl Check for building ODK
9174 dnl ===================================================================
9175 AC_MSG_CHECKING([whether to build the ODK])
9176 if test "$enable_odk" = yes; then
9177     if test "$DISABLE_DYNLOADING" = TRUE; then
9178         AC_MSG_ERROR([can't build ODK for --disable-dynamic-loading builds])
9179     fi
9180     AC_MSG_RESULT([yes])
9181     BUILD_TYPE="$BUILD_TYPE ODK"
9182 else
9183     AC_MSG_RESULT([no])
9186 if test "$enable_odk" != yes; then
9187     unset DOXYGEN
9188 else
9189     if test "$with_doxygen" = no; then
9190         AC_MSG_CHECKING([for doxygen])
9191         unset DOXYGEN
9192         AC_MSG_RESULT([no])
9193     else
9194         if test "$with_doxygen" = yes; then
9195             AC_PATH_PROG([DOXYGEN], [doxygen])
9196             if test -z "$DOXYGEN"; then
9197                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
9198             fi
9199             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
9200                 if ! dot -V 2>/dev/null; then
9201                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
9202                 fi
9203             fi
9204         else
9205             AC_MSG_CHECKING([for doxygen])
9206             DOXYGEN=$with_doxygen
9207             AC_MSG_RESULT([$DOXYGEN])
9208         fi
9209         if test -n "$DOXYGEN"; then
9210             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
9211             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
9212             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
9213                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
9214             fi
9215         fi
9216     fi
9218 AC_SUBST([DOXYGEN])
9220 dnl ==================================================================
9221 dnl libfuzzer
9222 dnl ==================================================================
9223 AC_MSG_CHECKING([whether to enable fuzzers])
9224 if test "$enable_fuzzers" != yes; then
9225     AC_MSG_RESULT([no])
9226 else
9227     if test -z $LIB_FUZZING_ENGINE; then
9228       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
9229     fi
9230     AC_MSG_RESULT([yes])
9231     ENABLE_FUZZERS="TRUE"
9232     AC_DEFINE([ENABLE_FUZZERS],1)
9233     BUILD_TYPE="$BUILD_TYPE FUZZERS"
9235 AC_SUBST(LIB_FUZZING_ENGINE)
9237 dnl ===================================================================
9238 dnl Check for system zlib
9239 dnl ===================================================================
9240 if test "$with_system_zlib" = "auto"; then
9241     case "$_os" in
9242     WINNT)
9243         with_system_zlib="$with_system_libs"
9244         ;;
9245     *)
9246         if test "$enable_fuzzers" != "yes"; then
9247             with_system_zlib=yes
9248         else
9249             with_system_zlib=no
9250         fi
9251         ;;
9252     esac
9255 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
9256 dnl and has no pkg-config for it at least on some tinderboxes,
9257 dnl so leaving that out for now
9258 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
9259 AC_MSG_CHECKING([which zlib to use])
9260 if test "$with_system_zlib" = "yes"; then
9261     AC_MSG_RESULT([external])
9262     SYSTEM_ZLIB=TRUE
9263     AC_CHECK_HEADER(zlib.h, [],
9264         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
9265     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
9266         [AC_MSG_ERROR(zlib not found or functional)], [])
9267 else
9268     AC_MSG_RESULT([internal])
9269     SYSTEM_ZLIB=
9270     BUILD_TYPE="$BUILD_TYPE ZLIB"
9271     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
9272     if test "$COM" = "MSC"; then
9273         ZLIB_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/zlib.lib"
9274     else
9275         ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
9276     fi
9278 AC_SUBST(ZLIB_CFLAGS)
9279 AC_SUBST(ZLIB_LIBS)
9280 AC_SUBST(SYSTEM_ZLIB)
9282 dnl ===================================================================
9283 dnl Check for system jpeg
9284 dnl ===================================================================
9285 AC_MSG_CHECKING([which libjpeg to use])
9286 if test "$with_system_jpeg" = "yes"; then
9287     AC_MSG_RESULT([external])
9288     SYSTEM_LIBJPEG=TRUE
9289     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
9290         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
9291     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
9292         [AC_MSG_ERROR(jpeg library not found or functional)], [])
9293 else
9294     SYSTEM_LIBJPEG=
9295     AC_MSG_RESULT([internal, libjpeg-turbo])
9296     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
9298     case "$host_cpu" in
9299     x86_64 | amd64 | i*86 | x86 | ia32)
9300         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
9301         if test -z "$NASM" -a "$build_os" = "cygwin"; then
9302             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
9303                 NASM="$LODE_HOME/opt/bin/nasm"
9304             elif test -x "/opt/lo/bin/nasm"; then
9305                 NASM="/opt/lo/bin/nasm"
9306             fi
9307         fi
9309         if test -n "$NASM"; then
9310             AC_MSG_CHECKING([for object file format of host system])
9311             case "$host_os" in
9312               cygwin* | mingw* | pw32* | wsl*)
9313                 case "$host_cpu" in
9314                   x86_64)
9315                     objfmt='Win64-COFF'
9316                     ;;
9317                   *)
9318                     objfmt='Win32-COFF'
9319                     ;;
9320                 esac
9321               ;;
9322               msdosdjgpp* | go32*)
9323                 objfmt='COFF'
9324               ;;
9325               os2-emx*) # not tested
9326                 objfmt='MSOMF' # obj
9327               ;;
9328               linux*coff* | linux*oldld*)
9329                 objfmt='COFF' # ???
9330               ;;
9331               linux*aout*)
9332                 objfmt='a.out'
9333               ;;
9334               linux*)
9335                 case "$host_cpu" in
9336                   x86_64)
9337                     objfmt='ELF64'
9338                     ;;
9339                   *)
9340                     objfmt='ELF'
9341                     ;;
9342                 esac
9343               ;;
9344               kfreebsd* | freebsd* | netbsd* | openbsd*)
9345                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9346                   objfmt='BSD-a.out'
9347                 else
9348                   case "$host_cpu" in
9349                     x86_64 | amd64)
9350                       objfmt='ELF64'
9351                       ;;
9352                     *)
9353                       objfmt='ELF'
9354                       ;;
9355                   esac
9356                 fi
9357               ;;
9358               solaris* | sunos* | sysv* | sco*)
9359                 case "$host_cpu" in
9360                   x86_64)
9361                     objfmt='ELF64'
9362                     ;;
9363                   *)
9364                     objfmt='ELF'
9365                     ;;
9366                 esac
9367               ;;
9368               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9369                 case "$host_cpu" in
9370                   x86_64)
9371                     objfmt='Mach-O64'
9372                     ;;
9373                   *)
9374                     objfmt='Mach-O'
9375                     ;;
9376                 esac
9377               ;;
9378               *)
9379                 objfmt='ELF ?'
9380               ;;
9381             esac
9383             AC_MSG_RESULT([$objfmt])
9384             if test "$objfmt" = 'ELF ?'; then
9385               objfmt='ELF'
9386               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9387             fi
9389             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9390             case "$objfmt" in
9391               MSOMF)      NAFLAGS='-fobj -DOBJ32 -DPIC';;
9392               Win32-COFF) NAFLAGS='-fwin32 -DWIN32 -DPIC';;
9393               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__ -DPIC';;
9394               COFF)       NAFLAGS='-fcoff -DCOFF -DPIC';;
9395               a.out)      NAFLAGS='-faout -DAOUT -DPIC';;
9396               BSD-a.out)  NAFLAGS='-faoutb -DAOUT -DPIC';;
9397               ELF)        NAFLAGS='-felf -DELF -DPIC';;
9398               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__ -DPIC';;
9399               RDF)        NAFLAGS='-frdf -DRDF -DPIC';;
9400               Mach-O)     NAFLAGS='-fmacho -DMACHO -DPIC';;
9401               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__ -DPIC';;
9402             esac
9403             AC_MSG_RESULT([$NAFLAGS])
9405             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9406             cat > conftest.asm << EOF
9407             [%line __oline__ "configure"
9408                     section .text
9409                     global  _main,main
9410             _main:
9411             main:   xor     eax,eax
9412                     ret
9413             ]
9415             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9416             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9417               AC_MSG_RESULT(yes)
9418             else
9419               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9420               cat conftest.asm >&AS_MESSAGE_LOG_FD
9421               rm -rf conftest*
9422               AC_MSG_RESULT(no)
9423               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9424               NASM=""
9425             fi
9427         fi
9429         if test -z "$NASM"; then
9430 cat << _EOS
9431 ****************************************************************************
9432 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9433 To get one please:
9435 _EOS
9436             if test "$build_os" = "cygwin"; then
9437 cat << _EOS
9438 install a pre-compiled binary for Win32
9440 mkdir -p /opt/lo/bin
9441 cd /opt/lo/bin
9442 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9443 chmod +x nasm
9445 or get and install one from http://www.nasm.us/
9447 Then re-run autogen.sh
9449 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9450 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`which nasm\` finds it.
9452 _EOS
9453             else
9454 cat << _EOS
9455 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md
9457 _EOS
9458             fi
9459             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9460             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9461         fi
9462       ;;
9463     esac
9466 AC_SUBST(NASM)
9467 AC_SUBST(NAFLAGS)
9468 AC_SUBST(LIBJPEG_CFLAGS)
9469 AC_SUBST(LIBJPEG_LIBS)
9470 AC_SUBST(SYSTEM_LIBJPEG)
9472 dnl ===================================================================
9473 dnl Check for system clucene
9474 dnl ===================================================================
9475 libo_CHECK_SYSTEM_MODULE([clucene],[CLUCENE],[libclucene-core])
9476 if test "$SYSTEM_CLUCENE" = TRUE; then
9477     AC_LANG_PUSH([C++])
9478     save_CXXFLAGS=$CXXFLAGS
9479     save_CPPFLAGS=$CPPFLAGS
9480     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9481     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9482     dnl http://sourceforge.net/tracker/index.php?func=detail&aid=3392466&group_id=80013&atid=558446
9483     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9484     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9485                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9486     CXXFLAGS=$save_CXXFLAGS
9487     CPPFLAGS=$save_CPPFLAGS
9488     AC_LANG_POP([C++])
9489     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9492 dnl ===================================================================
9493 dnl Check for system expat
9494 dnl ===================================================================
9495 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9497 dnl ===================================================================
9498 dnl Check for system xmlsec
9499 dnl ===================================================================
9500 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.28])
9502 libo_CHECK_SYSTEM_MODULE([eot],[LIBEOT],[libeot >= 0.01],disabled)
9504 dnl ===================================================================
9505 dnl Check for DLP libs
9506 dnl ===================================================================
9507 REVENGE_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/librevenge/inc"
9508 AS_IF([test "$COM" = "MSC"],
9509       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9510       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9512 REVENGE_LIBS_internal="-L${librevenge_libdir} -lrevenge-0.0"
9513 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1])
9515 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9517 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9519 WPD_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/libwpd/inc"
9520 AS_IF([test "$COM" = "MSC"],
9521       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9522       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9524 WPD_LIBS_internal="-L${libwpd_libdir} -lwpd-0.10"
9525 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10])
9527 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9529 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9530 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.12])
9532 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9534 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9536 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9538 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.1])
9539 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.21])
9541 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9542 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10])
9544 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9546 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9547 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9549 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9551 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9553 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9555 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9557 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9558 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9560 dnl ===================================================================
9561 dnl Check for system lcms2
9562 dnl ===================================================================
9563 if test "$with_system_lcms2" != "yes"; then
9564     SYSTEM_LCMS2=
9566 LCMS2_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/lcms2/include"
9567 LCMS2_LIBS_internal="-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"
9568 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2])
9569 if test "$GCC" = "yes"; then
9570     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9572 if test "$COM" = "MSC"; then # override the above
9573     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9576 dnl ===================================================================
9577 dnl Check for system cppunit
9578 dnl ===================================================================
9579 if test "$_os" != "Android" ; then
9580     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9583 dnl ===================================================================
9584 dnl Check whether freetype is available
9586 dnl FreeType has 3 different kinds of versions
9587 dnl * release, like 2.4.10
9588 dnl * libtool, like 13.0.7 (this what pkg-config returns)
9589 dnl * soname
9590 dnl FreeType's docs/VERSION.DLL provides a table mapping between the three
9592 dnl 9.9.3 is 2.2.0
9593 dnl When the minimal version is at least 2.8.1, remove Skia's check down below.
9594 dnl ===================================================================
9595 FREETYPE_CFLAGS_internal="${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"
9596 if test "x$ac_config_site_64bit_host" = xYES; then
9597     FREETYPE_LIBS_internal="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9598 else
9599     FREETYPE_LIBS_internal="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9601 libo_CHECK_SYSTEM_MODULE([freetype],[FREETYPE],[freetype2 >= 9.9.3],,system,TRUE)
9603 # ===================================================================
9604 # Check for system libxslt
9605 # to prevent incompatibilities between internal libxml2 and external libxslt,
9606 # or vice versa, use with_system_libxml here
9607 # ===================================================================
9608 if test "$with_system_libxml" = "auto"; then
9609     case "$_os" in
9610     WINNT|iOS|Android)
9611         with_system_libxml="$with_system_libs"
9612         ;;
9613     Emscripten)
9614         with_system_libxml=no
9615         ;;
9616     *)
9617         if test "$enable_fuzzers" != "yes"; then
9618             with_system_libxml=yes
9619         else
9620             with_system_libxml=no
9621         fi
9622         ;;
9623     esac
9626 AC_MSG_CHECKING([which libxslt to use])
9627 if test "$with_system_libxml" = "yes"; then
9628     AC_MSG_RESULT([external])
9629     SYSTEM_LIBXSLT=TRUE
9630     if test "$_os" = "Darwin"; then
9631         dnl make sure to use SDK path
9632         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9633         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9634         dnl omit -L/usr/lib
9635         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9636         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9637     else
9638         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9639         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9640         FilterLibs "${LIBXSLT_LIBS}"
9641         LIBXSLT_LIBS="${filteredlibs}"
9642         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9643         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9644         FilterLibs "${LIBEXSLT_LIBS}"
9645         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9646     fi
9648     dnl Check for xsltproc
9649     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9650     if test "$XSLTPROC" = "no"; then
9651         AC_MSG_ERROR([xsltproc is required])
9652     fi
9653 else
9654     AC_MSG_RESULT([internal])
9655     SYSTEM_LIBXSLT=
9656     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9658 AC_SUBST(SYSTEM_LIBXSLT)
9659 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9660     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9662 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9664 AC_SUBST(LIBEXSLT_CFLAGS)
9665 AC_SUBST(LIBEXSLT_LIBS)
9666 AC_SUBST(LIBXSLT_CFLAGS)
9667 AC_SUBST(LIBXSLT_LIBS)
9668 AC_SUBST(XSLTPROC)
9670 # ===================================================================
9671 # Check for system libxml
9672 # ===================================================================
9673 AC_MSG_CHECKING([which libxml to use])
9674 if test "$with_system_libxml" = "yes"; then
9675     AC_MSG_RESULT([external])
9676     SYSTEM_LIBXML=TRUE
9677     if test "$_os" = "Darwin"; then
9678         dnl make sure to use SDK path
9679         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9680         dnl omit -L/usr/lib
9681         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9682     elif test $_os = iOS; then
9683         dnl make sure to use SDK path
9684         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9685         LIBXML_CFLAGS="-I$usr/include/libxml2"
9686         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9687     else
9688         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9689         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9690         FilterLibs "${LIBXML_LIBS}"
9691         LIBXML_LIBS="${filteredlibs}"
9692     fi
9694     dnl Check for xmllint
9695     AC_PATH_PROG(XMLLINT, xmllint, no)
9696     if test "$XMLLINT" = "no"; then
9697         AC_MSG_ERROR([xmllint is required])
9698     fi
9699 else
9700     AC_MSG_RESULT([internal])
9701     SYSTEM_LIBXML=
9702     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9703     if test "$COM" = "MSC"; then
9704         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9705     fi
9706     if test "$COM" = "MSC"; then
9707         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9708     else
9709         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9710         if test "$DISABLE_DYNLOADING" = TRUE; then
9711             LIBXML_LIBS="$LIBXML_LIBS -lm"
9712         fi
9713     fi
9714     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9716 AC_SUBST(SYSTEM_LIBXML)
9717 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9718     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9720 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9721 AC_SUBST(LIBXML_CFLAGS)
9722 AC_SUBST(LIBXML_LIBS)
9723 AC_SUBST(XMLLINT)
9725 # =====================================================================
9726 # Checking for a Python interpreter with version >= 3.3.
9727 # Optionally user can pass an option to configure, i. e.
9728 # ./configure PYTHON=/usr/bin/python
9729 # =====================================================================
9730 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9731     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9732     # unless PYTHON is defined as above which allows 'system'
9733     enable_python=internal
9735 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9736     if test -n "$PYTHON"; then
9737         PYTHON_FOR_BUILD=$PYTHON
9738     else
9739         # This allows a lack of system python with no error, we use internal one in that case.
9740         AM_PATH_PYTHON([3.3],, [:])
9741         # Clean PYTHON_VERSION checked below if cross-compiling
9742         PYTHON_VERSION=""
9743         if test "$PYTHON" != ":"; then
9744             PYTHON_FOR_BUILD=$PYTHON
9745         fi
9746     fi
9749 # Checks for Python to use for Pyuno
9750 AC_MSG_CHECKING([which Python to use for Pyuno])
9751 case "$enable_python" in
9752 no|disable)
9753     if test -z "$PYTHON_FOR_BUILD" -a "$cross_compiling" != yes; then
9754         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9755         # requirement from the choice whether to include Python stuff in the installer, but why
9756         # bother?
9757         AC_MSG_ERROR([Python is required at build time.])
9758     fi
9759     enable_python=no
9760     AC_MSG_RESULT([none])
9761     ;;
9762 ""|yes|auto)
9763     if test "$DISABLE_SCRIPTING" = TRUE; then
9764         if test -z "$PYTHON_FOR_BUILD" -a "$cross_compiling" != yes; then
9765             AC_MSG_ERROR([Python support can't be disabled without cross-compiling or a system python.])
9766         fi
9767         AC_MSG_RESULT([none, overridden by --disable-scripting])
9768         enable_python=no
9769     elif test $build_os = cygwin; then
9770         dnl When building on Windows we don't attempt to use any installed
9771         dnl "system"  Python.
9772         AC_MSG_RESULT([fully internal])
9773         enable_python=internal
9774     elif test "$cross_compiling" = yes; then
9775         AC_MSG_RESULT([system])
9776         enable_python=system
9777     else
9778         # Unset variables set by the above AM_PATH_PYTHON so that
9779         # we actually do check anew.
9780         AC_MSG_RESULT([])
9781         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
9782         AM_PATH_PYTHON([3.3],, [:])
9783         AC_MSG_CHECKING([which Python to use for Pyuno])
9784         if test "$PYTHON" = ":"; then
9785             if test -z "$PYTHON_FOR_BUILD"; then
9786                 AC_MSG_RESULT([fully internal])
9787             else
9788                 AC_MSG_RESULT([internal])
9789             fi
9790             enable_python=internal
9791         else
9792             AC_MSG_RESULT([system])
9793             enable_python=system
9794         fi
9795     fi
9796     ;;
9797 internal)
9798     AC_MSG_RESULT([internal])
9799     ;;
9800 fully-internal)
9801     AC_MSG_RESULT([fully internal])
9802     enable_python=internal
9803     ;;
9804 system)
9805     AC_MSG_RESULT([system])
9806     if test "$_os" = Darwin -a -z "$PYTHON"; then
9807         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
9808     fi
9809     ;;
9811     AC_MSG_ERROR([Incorrect --enable-python option])
9812     ;;
9813 esac
9815 if test $enable_python != no; then
9816     BUILD_TYPE="$BUILD_TYPE PYUNO"
9819 if test $enable_python = system; then
9820     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
9821         # Fallback: Accept these in the environment, or as set above
9822         # for MacOSX.
9823         :
9824     elif test "$cross_compiling" != yes; then
9825         # Unset variables set by the above AM_PATH_PYTHON so that
9826         # we actually do check anew.
9827         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
9828         # This causes an error if no python command is found
9829         AM_PATH_PYTHON([3.3])
9830         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
9831         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
9832         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
9833         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
9834         if test -z "$PKG_CONFIG"; then
9835             PYTHON_CFLAGS="-I$python_include"
9836             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9837         elif $PKG_CONFIG --exists python-$python_version-embed; then
9838             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
9839             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
9840         elif $PKG_CONFIG --exists python-$python_version; then
9841             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
9842             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
9843         else
9844             PYTHON_CFLAGS="-I$python_include"
9845             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9846         fi
9847         FilterLibs "${PYTHON_LIBS}"
9848         PYTHON_LIBS="${filteredlibs}"
9849     else
9850         dnl How to find out the cross-compilation Python installation path?
9851         AC_MSG_CHECKING([for python version])
9852         AS_IF([test -n "$PYTHON_VERSION"],
9853               [AC_MSG_RESULT([$PYTHON_VERSION])],
9854               [AC_MSG_RESULT([not found])
9855                AC_MSG_ERROR([no usable python found])])
9856         test -n "$PYTHON_CFLAGS" && break
9857     fi
9859     dnl Check if the headers really work
9860     save_CPPFLAGS="$CPPFLAGS"
9861     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
9862     AC_CHECK_HEADER(Python.h)
9863     CPPFLAGS="$save_CPPFLAGS"
9865     # let the PYTHON_FOR_BUILD match the same python installation that
9866     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
9867     # better for PythonTests.
9868     PYTHON_FOR_BUILD=$PYTHON
9871 if test "$with_lxml" != no; then
9872     if test -z "$PYTHON_FOR_BUILD"; then
9873         case $build_os in
9874             cygwin)
9875                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
9876                 ;;
9877             *)
9878                 if test "$cross_compiling" != yes ; then
9879                     BUILD_TYPE="$BUILD_TYPE LXML"
9880                 fi
9881                 ;;
9882         esac
9883     else
9884         AC_MSG_CHECKING([for python lxml])
9885         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
9886             AC_MSG_RESULT([yes])
9887         else
9888             case $build_os in
9889                 cygwin)
9890                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
9891                     ;;
9892                 *)
9893                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
9894                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
9895                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
9896                         else
9897                             BUILD_TYPE="$BUILD_TYPE LXML"
9898                             AC_MSG_RESULT([no, using internal lxml])
9899                         fi
9900                     else
9901                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
9902                     fi
9903                     ;;
9904             esac
9905         fi
9906     fi
9909 if test \( "$cross_compiling" = yes -a -z "$PYTHON_FOR_BUILD" \) -o "$enable_python" = internal; then
9910     SYSTEM_PYTHON=
9911     PYTHON_VERSION_MAJOR=3
9912     PYTHON_VERSION_MINOR=8
9913     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.12
9914     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
9915         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
9916     fi
9917     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
9919     # Embedded Python dies without Home set
9920     if test "$HOME" = ""; then
9921         export HOME=""
9922     fi
9925 dnl By now enable_python should be "system", "internal" or "no"
9926 case $enable_python in
9927 system)
9928     SYSTEM_PYTHON=TRUE
9930     if test "x$ac_cv_header_Python_h" != "xyes"; then
9931        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
9932     fi
9934     AC_LANG_PUSH(C)
9935     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
9936     AC_MSG_CHECKING([for correct python library version])
9937        AC_RUN_IFELSE([AC_LANG_SOURCE([[
9938 #include <Python.h>
9940 int main(int argc, char **argv) {
9941    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
9942    else return 1;
9944        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
9945     AC_LANG_POP(C)
9947     dnl FIXME Check if the Python library can be linked with, too?
9948     ;;
9950 internal)
9951     BUILD_TYPE="$BUILD_TYPE PYTHON"
9952     if test "$OS" = LINUX -o "$OS" = WNT ; then
9953         BUILD_TYPE="$BUILD_TYPE LIBFFI"
9954     fi
9955     ;;
9957     DISABLE_PYTHON=TRUE
9958     SYSTEM_PYTHON=
9959     ;;
9961     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
9962     ;;
9963 esac
9965 AC_SUBST(DISABLE_PYTHON)
9966 AC_SUBST(SYSTEM_PYTHON)
9967 AC_SUBST(PYTHON_CFLAGS)
9968 AC_SUBST(PYTHON_FOR_BUILD)
9969 AC_SUBST(PYTHON_LIBS)
9970 AC_SUBST(PYTHON_VERSION)
9971 AC_SUBST(PYTHON_VERSION_MAJOR)
9972 AC_SUBST(PYTHON_VERSION_MINOR)
9974 AC_MSG_CHECKING([whether to build LibreLogo])
9975 case "$enable_python" in
9976 no|disable)
9977     AC_MSG_RESULT([no; Python disabled])
9978     ;;
9980     if test "${enable_librelogo}" = "no"; then
9981         AC_MSG_RESULT([no])
9982     else
9983         AC_MSG_RESULT([yes])
9984         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
9985         AC_DEFINE([ENABLE_LIBRELOGO],1)
9986     fi
9987     ;;
9988 esac
9989 AC_SUBST(ENABLE_LIBRELOGO)
9991 ENABLE_MARIADBC=
9992 MARIADBC_MAJOR=1
9993 MARIADBC_MINOR=0
9994 MARIADBC_MICRO=2
9995 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
9996 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
9997     ENABLE_MARIADBC=TRUE
9998     AC_MSG_RESULT([yes])
9999     BUILD_TYPE="$BUILD_TYPE MARIADBC"
10000 else
10001     AC_MSG_RESULT([no])
10003 AC_SUBST(ENABLE_MARIADBC)
10004 AC_SUBST(MARIADBC_MAJOR)
10005 AC_SUBST(MARIADBC_MINOR)
10006 AC_SUBST(MARIADBC_MICRO)
10008 if test "$ENABLE_MARIADBC" = "TRUE"; then
10009     dnl ===================================================================
10010     dnl Check for system MariaDB
10011     dnl ===================================================================
10012     AC_MSG_CHECKING([which MariaDB to use])
10013     if test "$with_system_mariadb" = "yes"; then
10014         AC_MSG_RESULT([external])
10015         SYSTEM_MARIADB_CONNECTOR_C=TRUE
10016         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
10017         if test -z "$MARIADBCONFIG"; then
10018             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
10019             if test -z "$MARIADBCONFIG"; then
10020                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
10021                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
10022             fi
10023         fi
10024         AC_MSG_CHECKING([MariaDB version])
10025         MARIADB_VERSION=`$MARIADBCONFIG --version`
10026         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
10027         if test "$MARIADB_MAJOR" -ge "5"; then
10028             AC_MSG_RESULT([OK])
10029         else
10030             AC_MSG_ERROR([too old, use 5.0.x or later])
10031         fi
10032         AC_MSG_CHECKING([for MariaDB Client library])
10033         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
10034         if test "$COM_IS_CLANG" = TRUE; then
10035             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
10036         fi
10037         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
10038         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
10039         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
10040         dnl linux32:
10041         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
10042             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
10043             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
10044                 | sed -e 's|/lib64/|/lib/|')
10045         fi
10046         FilterLibs "${MARIADB_LIBS}"
10047         MARIADB_LIBS="${filteredlibs}"
10048         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
10049         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
10050         if test "$enable_bundle_mariadb" = "yes"; then
10051             AC_MSG_RESULT([yes])
10052             BUNDLE_MARIADB_CONNECTOR_C=TRUE
10053             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
10055 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
10057 /g' | grep -E '(mysqlclient|mariadb)')
10058             if test "$_os" = "Darwin"; then
10059                 LIBMARIADB=${LIBMARIADB}.dylib
10060             elif test "$_os" = "WINNT"; then
10061                 LIBMARIADB=${LIBMARIADB}.dll
10062             else
10063                 LIBMARIADB=${LIBMARIADB}.so
10064             fi
10065             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
10066             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
10067             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
10068                 AC_MSG_RESULT([found.])
10069                 PathFormat "$LIBMARIADB_PATH"
10070                 LIBMARIADB_PATH="$formatted_path"
10071             else
10072                 AC_MSG_ERROR([not found.])
10073             fi
10074         else
10075             AC_MSG_RESULT([no])
10076             BUNDLE_MARIADB_CONNECTOR_C=
10077         fi
10078     else
10079         AC_MSG_RESULT([internal])
10080         SYSTEM_MARIADB_CONNECTOR_C=
10081         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
10082         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
10083         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
10084     fi
10086     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
10087     AC_SUBST(MARIADB_CFLAGS)
10088     AC_SUBST(MARIADB_LIBS)
10089     AC_SUBST(LIBMARIADB)
10090     AC_SUBST(LIBMARIADB_PATH)
10091     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
10094 dnl ===================================================================
10095 dnl Check for system hsqldb
10096 dnl ===================================================================
10097 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
10098     AC_MSG_CHECKING([which hsqldb to use])
10099     if test "$with_system_hsqldb" = "yes"; then
10100         AC_MSG_RESULT([external])
10101         SYSTEM_HSQLDB=TRUE
10102         if test -z $HSQLDB_JAR; then
10103             HSQLDB_JAR=/usr/share/java/hsqldb.jar
10104         fi
10105         if ! test -f $HSQLDB_JAR; then
10106                AC_MSG_ERROR(hsqldb.jar not found.)
10107         fi
10108         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
10109         export HSQLDB_JAR
10110         if $PERL -e \
10111            'use Archive::Zip;
10112             my $file = "$ENV{'HSQLDB_JAR'}";
10113             my $zip = Archive::Zip->new( $file );
10114             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
10115             if ( $mf =~ m/Specification-Version: 1.8.*/ )
10116             {
10117                 push @l, split(/\n/, $mf);
10118                 foreach my $line (@l)
10119                 {
10120                     if ($line =~ m/Specification-Version:/)
10121                     {
10122                         ($t, $version) = split (/:/,$line);
10123                         $version =~ s/^\s//;
10124                         ($a, $b, $c, $d) = split (/\./,$version);
10125                         if ($c == "0" && $d > "8")
10126                         {
10127                             exit 0;
10128                         }
10129                         else
10130                         {
10131                             exit 1;
10132                         }
10133                     }
10134                 }
10135             }
10136             else
10137             {
10138                 exit 1;
10139             }'; then
10140             AC_MSG_RESULT([yes])
10141         else
10142             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
10143         fi
10144     else
10145         AC_MSG_RESULT([internal])
10146         SYSTEM_HSQLDB=
10147         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10148         NEED_ANT=TRUE
10149     fi
10150 else
10151     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
10152         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10153     fi
10155 AC_SUBST(SYSTEM_HSQLDB)
10156 AC_SUBST(HSQLDB_JAR)
10158 dnl ===================================================================
10159 dnl Check for PostgreSQL stuff
10160 dnl ===================================================================
10161 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
10162 if test "x$enable_postgresql_sdbc" != "xno"; then
10163     AC_MSG_RESULT([yes])
10164     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
10166     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
10167         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
10168     fi
10169     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
10170         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
10171     fi
10173     postgres_interface=""
10174     if test "$with_system_postgresql" = "yes"; then
10175         postgres_interface="external PostgreSQL"
10176         SYSTEM_POSTGRESQL=TRUE
10177         if test "$_os" = Darwin; then
10178             supp_path=''
10179             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
10180                 pg_supp_path="$P_SEP$d$pg_supp_path"
10181             done
10182         fi
10183         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
10184         if test -n "$PGCONFIG"; then
10185             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
10186             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
10187         else
10188             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
10189               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
10190               POSTGRESQL_LIB=$POSTGRESQL_LIBS
10191             ],[
10192               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
10193             ])
10194         fi
10195         FilterLibs "${POSTGRESQL_LIB}"
10196         POSTGRESQL_LIB="${filteredlibs}"
10197     else
10198         # if/when anything else than PostgreSQL uses Kerberos,
10199         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
10200         WITH_KRB5=
10201         WITH_GSSAPI=
10202         case "$_os" in
10203         Darwin)
10204             # macOS has system MIT Kerberos 5 since 10.4
10205             if test "$with_krb5" != "no"; then
10206                 WITH_KRB5=TRUE
10207                 save_LIBS=$LIBS
10208                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
10209                 # that the libraries where these functions are located on macOS will change, is it?
10210                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10211                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10212                 KRB5_LIBS=$LIBS
10213                 LIBS=$save_LIBS
10214                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10215                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10216                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10217                 LIBS=$save_LIBS
10218             fi
10219             if test "$with_gssapi" != "no"; then
10220                 WITH_GSSAPI=TRUE
10221                 save_LIBS=$LIBS
10222                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10223                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10224                 GSSAPI_LIBS=$LIBS
10225                 LIBS=$save_LIBS
10226             fi
10227             ;;
10228         WINNT)
10229             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
10230                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
10231             fi
10232             ;;
10233         Linux|GNU|*BSD|DragonFly)
10234             if test "$with_krb5" != "no"; then
10235                 WITH_KRB5=TRUE
10236                 save_LIBS=$LIBS
10237                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10238                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10239                 KRB5_LIBS=$LIBS
10240                 LIBS=$save_LIBS
10241                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10242                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10243                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10244                 LIBS=$save_LIBS
10245             fi
10246             if test "$with_gssapi" != "no"; then
10247                 WITH_GSSAPI=TRUE
10248                 save_LIBS=$LIBS
10249                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10250                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10251                 GSSAPI_LIBS=$LIBS
10252                 LIBS=$save_LIBS
10253             fi
10254             ;;
10255         *)
10256             if test "$with_krb5" = "yes"; then
10257                 WITH_KRB5=TRUE
10258                 save_LIBS=$LIBS
10259                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10260                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10261                 KRB5_LIBS=$LIBS
10262                 LIBS=$save_LIBS
10263                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10264                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10265                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10266                 LIBS=$save_LIBS
10267             fi
10268             if test "$with_gssapi" = "yes"; then
10269                 WITH_GSSAPI=TRUE
10270                 save_LIBS=$LIBS
10271                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10272                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10273                 LIBS=$save_LIBS
10274                 GSSAPI_LIBS=$LIBS
10275             fi
10276         esac
10278         if test -n "$with_libpq_path"; then
10279             SYSTEM_POSTGRESQL=TRUE
10280             postgres_interface="external libpq"
10281             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
10282             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
10283         else
10284             SYSTEM_POSTGRESQL=
10285             postgres_interface="internal"
10286             POSTGRESQL_LIB=""
10287             POSTGRESQL_INC="%OVERRIDE_ME%"
10288             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10289         fi
10290     fi
10292     AC_MSG_CHECKING([PostgreSQL C interface])
10293     AC_MSG_RESULT([$postgres_interface])
10295     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10296         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10297         save_CFLAGS=$CFLAGS
10298         save_CPPFLAGS=$CPPFLAGS
10299         save_LIBS=$LIBS
10300         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10301         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10302         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10303         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10304             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10305         CFLAGS=$save_CFLAGS
10306         CPPFLAGS=$save_CPPFLAGS
10307         LIBS=$save_LIBS
10308     fi
10309     BUILD_POSTGRESQL_SDBC=TRUE
10310 else
10311     AC_MSG_RESULT([no])
10313 AC_SUBST(WITH_KRB5)
10314 AC_SUBST(WITH_GSSAPI)
10315 AC_SUBST(GSSAPI_LIBS)
10316 AC_SUBST(KRB5_LIBS)
10317 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10318 AC_SUBST(SYSTEM_POSTGRESQL)
10319 AC_SUBST(POSTGRESQL_INC)
10320 AC_SUBST(POSTGRESQL_LIB)
10322 dnl ===================================================================
10323 dnl Check for Firebird stuff
10324 dnl ===================================================================
10325 ENABLE_FIREBIRD_SDBC=
10326 if test "$enable_firebird_sdbc" = "yes" ; then
10327     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10329     dnl ===================================================================
10330     dnl Check for system Firebird
10331     dnl ===================================================================
10332     AC_MSG_CHECKING([which Firebird to use])
10333     if test "$with_system_firebird" = "yes"; then
10334         AC_MSG_RESULT([external])
10335         SYSTEM_FIREBIRD=TRUE
10336         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10337         if test -z "$FIREBIRDCONFIG"; then
10338             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10339             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10340                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10341             ])
10342             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10343         else
10344             AC_MSG_NOTICE([fb_config found])
10345             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10346             AC_MSG_CHECKING([for Firebird Client library])
10347             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10348             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10349             FilterLibs "${FIREBIRD_LIBS}"
10350             FIREBIRD_LIBS="${filteredlibs}"
10351         fi
10352         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10353         AC_MSG_CHECKING([Firebird version])
10354         if test -n "${FIREBIRD_VERSION}"; then
10355             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10356             if test "$FIREBIRD_MAJOR" -ge "3"; then
10357                 AC_MSG_RESULT([OK])
10358             else
10359                 AC_MSG_ERROR([Ensure firebird >= 3 is installed])
10360             fi
10361         else
10362             save_CFLAGS="${CFLAGS}"
10363             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10364             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10365 #if defined(FB_API_VER) && FB_API_VER == 30
10366 int fb_api_is_30(void) { return 0; }
10367 #else
10368 #error "Wrong Firebird API version"
10369 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10370             CFLAGS="$save_CFLAGS"
10371         fi
10372         ENABLE_FIREBIRD_SDBC=TRUE
10373         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10374     elif test "$enable_database_connectivity" = no; then
10375         AC_MSG_RESULT([none])
10376     elif test "$cross_compiling" = "yes"; then
10377         AC_MSG_RESULT([none])
10378     else
10379         dnl Embedded Firebird has version 3.0
10380         dnl We need libatomic_ops for any non X86/X64 system
10381         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10382             dnl ===================================================================
10383             dnl Check for system libatomic_ops
10384             dnl ===================================================================
10385             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10386             if test "$with_system_libatomic_ops" = "yes"; then
10387                 SYSTEM_LIBATOMIC_OPS=TRUE
10388                 AC_CHECK_HEADERS(atomic_ops.h, [],
10389                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10390             else
10391                 SYSTEM_LIBATOMIC_OPS=
10392                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10393                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10394                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10395             fi
10396         fi
10398         AC_MSG_RESULT([internal])
10399         SYSTEM_FIREBIRD=
10400         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10401         FIREBIRD_LIBS="-lfbclient"
10403         if test "$with_system_libtommath" = "yes"; then
10404             SYSTEM_LIBTOMMATH=TRUE
10405             dnl check for tommath presence
10406             save_LIBS=$LIBS
10407             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10408             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10409             LIBS=$save_LIBS
10410         else
10411             SYSTEM_LIBTOMMATH=
10412             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10413             LIBTOMMATH_LIBS="-ltommath"
10414             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10415         fi
10417         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10418         ENABLE_FIREBIRD_SDBC=TRUE
10419         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10420     fi
10422 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10423 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10424 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10425 AC_SUBST(LIBATOMIC_OPS_LIBS)
10426 AC_SUBST(SYSTEM_FIREBIRD)
10427 AC_SUBST(FIREBIRD_CFLAGS)
10428 AC_SUBST(FIREBIRD_LIBS)
10429 AC_SUBST(SYSTEM_LIBTOMMATH)
10430 AC_SUBST(LIBTOMMATH_CFLAGS)
10431 AC_SUBST(LIBTOMMATH_LIBS)
10433 dnl ===================================================================
10434 dnl Check for system curl
10435 dnl ===================================================================
10436 libo_CHECK_SYSTEM_MODULE([curl],[CURL],[libcurl >= 7.68.0],enabled)
10438 dnl ===================================================================
10439 dnl Check for system boost
10440 dnl ===================================================================
10441 AC_MSG_CHECKING([which boost to use])
10442 if test "$with_system_boost" = "yes"; then
10443     AC_MSG_RESULT([external])
10444     SYSTEM_BOOST=TRUE
10445     AX_BOOST_BASE([1.66],,[AC_MSG_ERROR([no suitable Boost found])])
10446     AX_BOOST_DATE_TIME
10447     AX_BOOST_FILESYSTEM
10448     AX_BOOST_IOSTREAMS
10449     AX_BOOST_LOCALE
10450     AC_LANG_PUSH([C++])
10451     save_CXXFLAGS=$CXXFLAGS
10452     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10453     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10454        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10455     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10456        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10457     CXXFLAGS=$save_CXXFLAGS
10458     AC_LANG_POP([C++])
10459     # this is in m4/ax_boost_base.m4
10460     FilterLibs "${BOOST_LDFLAGS}"
10461     BOOST_LDFLAGS="${filteredlibs}"
10462 else
10463     AC_MSG_RESULT([internal])
10464     BUILD_TYPE="$BUILD_TYPE BOOST"
10465     SYSTEM_BOOST=
10466     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10467         # use warning-suppressing wrapper headers
10468         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10469     else
10470         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10471     fi
10473 AC_SUBST(SYSTEM_BOOST)
10475 dnl ===================================================================
10476 dnl Check for system mdds
10477 dnl ===================================================================
10478 MDDS_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/mdds/include"
10479 libo_CHECK_SYSTEM_MODULE([mdds],[MDDS],[mdds-2.0 >= 2.0.0])
10481 dnl ===================================================================
10482 dnl Check for system cuckoo
10483 dnl ===================================================================
10484 AC_MSG_CHECKING([which cuckoo to use])
10485 if test "$with_system_cuckoo" = "yes"; then
10486     AC_MSG_RESULT([external])
10487     SYSTEM_CUCKOO=TRUE
10488     AC_LANG_PUSH([C++])
10489     AC_CHECK_HEADER([libcuckoo/cuckoohash_map.hh], [],
10490        [AC_MSG_ERROR([libcuckoo/cuckoohash_map.hh not found. install cuckoo])], [])
10491     AC_LANG_POP([C++])
10492 else
10493     AC_MSG_RESULT([internal])
10494     BUILD_TYPE="$BUILD_TYPE CUCKOO"
10495     SYSTEM_CUCKOO=
10497 AC_SUBST([SYSTEM_CUCKOO])
10499 dnl ===================================================================
10500 dnl Check for system dragonbox
10501 dnl ===================================================================
10502 AC_MSG_CHECKING([which dragonbox to use])
10503 if test "$with_system_dragonbox" = "yes"; then
10504     AC_MSG_RESULT([external])
10505     SYSTEM_DRAGONBOX=TRUE
10506     AC_LANG_PUSH([C++])
10507     save_CPPFLAGS=$CPPFLAGS
10508     # This is where upstream installs to, unfortunately no .pc or so...
10509     DRAGONBOX_CFLAGS=-I/usr/include/dragonbox-1.0.0
10510     CPPFLAGS="$CPPFLAGS $DRAGONBOX_CFLAGS"
10511     AC_CHECK_HEADER([dragonbox/dragonbox.h], [],
10512        [AC_MSG_ERROR([dragonbox/dragonbox.h not found. install dragonbox])], [])
10513     AC_LANG_POP([C++])
10514     CPPFLAGS=$save_CPPFLAGS
10515 else
10516     AC_MSG_RESULT([internal])
10517     BUILD_TYPE="$BUILD_TYPE DRAGONBOX"
10518     SYSTEM_DRAGONBOX=
10520 AC_SUBST([SYSTEM_DRAGONBOX])
10521 AC_SUBST([DRAGONBOX_CFLAGS])
10523 dnl ===================================================================
10524 dnl Check for system libfixmath
10525 dnl ===================================================================
10526 AC_MSG_CHECKING([which libfixmath to use])
10527 if test "$with_system_libfixmath" = "yes"; then
10528     AC_MSG_RESULT([external])
10529     SYSTEM_LIBFIXMATH=TRUE
10530     AC_LANG_PUSH([C++])
10531     AC_CHECK_HEADER([libfixmath/fix16.hpp], [],
10532        [AC_MSG_ERROR([libfixmath/fix16.hpp not found. install libfixmath])], [])
10533     AC_CHECK_LIB([libfixmath], [fix16_mul], [:], [AC_MSG_ERROR(libfixmath lib not found or functional)], [])
10534     AC_LANG_POP([C++])
10535 else
10536     AC_MSG_RESULT([internal])
10537     SYSTEM_LIBFIXMATH=
10539 AC_SUBST([SYSTEM_LIBFIXMATH])
10541 dnl ===================================================================
10542 dnl Check for system glm
10543 dnl ===================================================================
10544 AC_MSG_CHECKING([which glm to use])
10545 if test "$with_system_glm" = "yes"; then
10546     AC_MSG_RESULT([external])
10547     SYSTEM_GLM=TRUE
10548     AC_LANG_PUSH([C++])
10549     AC_CHECK_HEADER([glm/glm.hpp], [],
10550        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10551     AC_LANG_POP([C++])
10552 else
10553     AC_MSG_RESULT([internal])
10554     BUILD_TYPE="$BUILD_TYPE GLM"
10555     SYSTEM_GLM=
10556     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10558 AC_SUBST([GLM_CFLAGS])
10559 AC_SUBST([SYSTEM_GLM])
10561 dnl ===================================================================
10562 dnl Check for system odbc
10563 dnl ===================================================================
10564 AC_MSG_CHECKING([which odbc headers to use])
10565 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
10566     AC_MSG_RESULT([external])
10567     SYSTEM_ODBC_HEADERS=TRUE
10569     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10570         save_CPPFLAGS=$CPPFLAGS
10571         find_winsdk
10572         PathFormat "$winsdktest"
10573         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"
10574         AC_CHECK_HEADER(sqlext.h, [],
10575             [AC_MSG_ERROR(odbc not found. install odbc)],
10576             [#include <windows.h>])
10577         CPPFLAGS=$save_CPPFLAGS
10578     else
10579         AC_CHECK_HEADER(sqlext.h, [],
10580             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10581     fi
10582 elif test "$enable_database_connectivity" = no; then
10583     AC_MSG_RESULT([none])
10584 else
10585     AC_MSG_RESULT([internal])
10586     SYSTEM_ODBC_HEADERS=
10588 AC_SUBST(SYSTEM_ODBC_HEADERS)
10590 dnl ===================================================================
10591 dnl Check for system NSS
10592 dnl ===================================================================
10593 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10594     libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8])
10595     AC_DEFINE(HAVE_FEATURE_NSS)
10596     ENABLE_NSS=TRUE
10597 elif test $_os != iOS ; then
10598     with_tls=openssl
10600 AC_SUBST(ENABLE_NSS)
10602 dnl ===================================================================
10603 dnl Enable LDAP support
10604 dnl ===================================================================
10606 if test "$test_openldap" = yes; then
10607     AC_MSG_CHECKING([whether to enable LDAP support])
10608     if test "$enable_ldap" = yes -a \( "$ENABLE_NSS" = TRUE -o "$with_system_openldap" = yes \); then
10609         AC_MSG_RESULT([yes])
10610         ENABLE_LDAP=TRUE
10611     else
10612         if test "$enable_ldap" != "yes"; then
10613             AC_MSG_RESULT([no])
10614         else
10615             AC_MSG_RESULT([no (needs NSS or system openldap)])
10616         fi
10617     fi
10619 dnl ===================================================================
10620 dnl Check for system openldap
10621 dnl ===================================================================
10623     if test "$ENABLE_LDAP" = TRUE; then
10624         AC_MSG_CHECKING([which openldap library to use])
10625         if test "$with_system_openldap" = yes; then
10626             AC_MSG_RESULT([external])
10627             SYSTEM_OPENLDAP=TRUE
10628             AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10629             AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10630             AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10631         else
10632             AC_MSG_RESULT([internal])
10633             BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10634         fi
10635     fi
10638 AC_SUBST(ENABLE_LDAP)
10639 AC_SUBST(SYSTEM_OPENLDAP)
10641 dnl ===================================================================
10642 dnl Check for TLS/SSL and cryptographic implementation to use
10643 dnl ===================================================================
10644 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10645 if test -n "$with_tls"; then
10646     case $with_tls in
10647     openssl)
10648         AC_DEFINE(USE_TLS_OPENSSL)
10649         TLS=OPENSSL
10650         AC_MSG_RESULT([$TLS])
10652         if test "$enable_openssl" != "yes"; then
10653             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10654         fi
10656         # warn that OpenSSL has been selected but not all TLS code has this option
10657         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS])
10658         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS"
10659         ;;
10660     nss)
10661         AC_DEFINE(USE_TLS_NSS)
10662         TLS=NSS
10663         AC_MSG_RESULT([$TLS])
10664         ;;
10665     no)
10666         AC_MSG_RESULT([none])
10667         AC_MSG_WARN([Skipping TLS/SSL])
10668         ;;
10669     *)
10670         AC_MSG_RESULT([])
10671         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10672 openssl - OpenSSL
10673 nss - Mozilla's Network Security Services (NSS)
10674     ])
10675         ;;
10676     esac
10677 else
10678     # default to using NSS, it results in smaller oox lib
10679     AC_DEFINE(USE_TLS_NSS)
10680     TLS=NSS
10681     AC_MSG_RESULT([$TLS])
10683 AC_SUBST(TLS)
10685 dnl ===================================================================
10686 dnl Check for system sane
10687 dnl ===================================================================
10688 AC_MSG_CHECKING([which sane header to use])
10689 if test "$with_system_sane" = "yes"; then
10690     AC_MSG_RESULT([external])
10691     AC_CHECK_HEADER(sane/sane.h, [],
10692       [AC_MSG_ERROR(sane not found. install sane)], [])
10693 else
10694     AC_MSG_RESULT([internal])
10695     BUILD_TYPE="$BUILD_TYPE SANE"
10698 dnl ===================================================================
10699 dnl Check for system icu
10700 dnl ===================================================================
10701 ICU_MAJOR=70
10702 ICU_MINOR=1
10703 ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10704 ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10705 ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10706 ICU_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10707 ICU_LIBS_internal="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10708 libo_CHECK_SYSTEM_MODULE([icu],[ICU],[icu-i18n >= 4.6])
10709 if test "$SYSTEM_ICU" = TRUE; then
10710     AC_LANG_PUSH([C++])
10711     AC_MSG_CHECKING([for unicode/rbbi.h])
10712     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10713     AC_LANG_POP([C++])
10715     ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10716     ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10717     ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10719     if test "$ICU_MAJOR" -ge 50; then
10720         AC_MSG_NOTICE([Ignore ICU_MINOR as obviously the libraries don't include the minor version in their names any more])
10721         ICU_MINOR=
10722     fi
10724     if test "$CROSS_COMPILING" != TRUE; then
10725         # using the system icu tools can lead to version confusion, use the
10726         # ones from the build environment when cross-compiling
10727         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10728         if test -z "$SYSTEM_GENBRK"; then
10729             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10730         fi
10731         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10732         if test -z "$SYSTEM_GENCCODE"; then
10733             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10734         fi
10735         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10736         if test -z "$SYSTEM_GENCMN"; then
10737             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10738         fi
10739         if test "$ICU_MAJOR" -lt 49; then
10740             ICU_RECLASSIFIED_PREPEND_SET_EMPTY=
10741             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER=
10742             ICU_RECLASSIFIED_HEBREW_LETTER=
10743         fi
10744     fi
10746 if test "$ICU_MAJOR" -ge "59"; then
10747     # As of ICU 59 it defaults to typedef char16_t UChar; which is available
10748     # with -std=c++11 but not all external libraries can be built with that,
10749     # for those use a bit-compatible typedef uint16_t UChar; see
10750     # icu/source/common/unicode/umachine.h
10751     ICU_UCHAR_TYPE="-DUCHAR_TYPE=uint16_t"
10752 else
10753     ICU_UCHAR_TYPE=""
10755 AC_SUBST(SYSTEM_GENBRK)
10756 AC_SUBST(SYSTEM_GENCCODE)
10757 AC_SUBST(SYSTEM_GENCMN)
10758 AC_SUBST(ICU_MAJOR)
10759 AC_SUBST(ICU_MINOR)
10760 AC_SUBST(ICU_RECLASSIFIED_PREPEND_SET_EMPTY)
10761 AC_SUBST(ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER)
10762 AC_SUBST(ICU_RECLASSIFIED_HEBREW_LETTER)
10763 AC_SUBST(ICU_UCHAR_TYPE)
10765 dnl ==================================================================
10766 dnl Breakpad
10767 dnl ==================================================================
10768 DEFAULT_CRASHDUMP_VALUE="true"
10769 AC_MSG_CHECKING([whether to enable breakpad])
10770 if test "$enable_breakpad" != yes; then
10771     AC_MSG_RESULT([no])
10772 else
10773     AC_MSG_RESULT([yes])
10774     ENABLE_BREAKPAD="TRUE"
10775     AC_DEFINE(ENABLE_BREAKPAD)
10776     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
10777     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
10779     AC_MSG_CHECKING([for disable crash dump])
10780     if test "$enable_crashdump" = no; then
10781         DEFAULT_CRASHDUMP_VALUE="false"
10782         AC_MSG_RESULT([yes])
10783     else
10784        AC_MSG_RESULT([no])
10785     fi
10787     AC_MSG_CHECKING([for crashreport config])
10788     if test "$with_symbol_config" = "no"; then
10789         BREAKPAD_SYMBOL_CONFIG="invalid"
10790         AC_MSG_RESULT([no])
10791     else
10792         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
10793         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
10794         AC_MSG_RESULT([yes])
10795     fi
10796     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
10798 AC_SUBST(ENABLE_BREAKPAD)
10799 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
10801 dnl ===================================================================
10802 dnl Orcus
10803 dnl ===================================================================
10804 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.17 >= 0.17.2])
10805 if test "$with_system_orcus" != "yes"; then
10806     if test "$SYSTEM_BOOST" = "TRUE"; then
10807         dnl Link with Boost.System
10808         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
10809         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
10810         dnl in documentation has no effect.
10811         AX_BOOST_SYSTEM
10812     fi
10814 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
10815 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
10816 AC_SUBST([BOOST_SYSTEM_LIB])
10817 AC_SUBST(SYSTEM_LIBORCUS)
10819 dnl ===================================================================
10820 dnl HarfBuzz
10821 dnl ===================================================================
10823 GRAPHITE_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"
10824 GRAPHITE_LIBS_internal="-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"
10825 libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3])
10827 HARFBUZZ_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/harfbuzz/src"
10828 HARFBUZZ_LIBS_internal="-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"
10829 libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 0.9.42])
10831 if test "$COM" = "MSC"; then # override the above
10832     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
10833     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
10836 if test "$with_system_harfbuzz" = "yes"; then
10837     if test "$with_system_graphite" = "no"; then
10838         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
10839     fi
10840     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
10841     save_LIBS="$LIBS"
10842     save_CFLAGS="$CFLAGS"
10843     LIBS="$LIBS $HARFBUZZ_LIBS"
10844     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
10845     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
10846     LIBS="$save_LIBS"
10847     CFLAGS="$save_CFLAGS"
10848 else
10849     if test "$with_system_graphite" = "yes"; then
10850         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
10851     fi
10854 if test "$USING_X11" = TRUE; then
10855     AC_PATH_X
10856     AC_PATH_XTRA
10857     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
10859     if test -z "$x_includes"; then
10860         x_includes="default_x_includes"
10861     fi
10862     if test -z "$x_libraries"; then
10863         x_libraries="default_x_libraries"
10864     fi
10865     CFLAGS="$CFLAGS $X_CFLAGS"
10866     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
10867     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
10868 else
10869     x_includes="no_x_includes"
10870     x_libraries="no_x_libraries"
10873 if test "$USING_X11" = TRUE; then
10874     dnl ===================================================================
10875     dnl Check for extension headers
10876     dnl ===================================================================
10877     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
10878      [#include <X11/extensions/shape.h>])
10880     # vcl needs ICE and SM
10881     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
10882     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
10883         [AC_MSG_ERROR(ICE library not found)])
10884     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
10885     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
10886         [AC_MSG_ERROR(SM library not found)])
10889 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
10890     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
10891     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
10894 dnl ===================================================================
10895 dnl Check for system Xrender
10896 dnl ===================================================================
10897 AC_MSG_CHECKING([whether to use Xrender])
10898 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
10899     AC_MSG_RESULT([yes])
10900     PKG_CHECK_MODULES(XRENDER, xrender)
10901     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10902     FilterLibs "${XRENDER_LIBS}"
10903     XRENDER_LIBS="${filteredlibs}"
10904     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
10905       [AC_MSG_ERROR(libXrender not found or functional)], [])
10906     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
10907       [AC_MSG_ERROR(Xrender not found. install X)], [])
10908 else
10909     AC_MSG_RESULT([no])
10911 AC_SUBST(XRENDER_CFLAGS)
10912 AC_SUBST(XRENDER_LIBS)
10914 dnl ===================================================================
10915 dnl Check for XRandr
10916 dnl ===================================================================
10917 AC_MSG_CHECKING([whether to enable RandR support])
10918 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
10919     AC_MSG_RESULT([yes])
10920     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
10921     if test "$ENABLE_RANDR" != "TRUE"; then
10922         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
10923                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
10924         XRANDR_CFLAGS=" "
10925         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
10926           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
10927         XRANDR_LIBS="-lXrandr "
10928         ENABLE_RANDR="TRUE"
10929     fi
10930     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10931     FilterLibs "${XRANDR_LIBS}"
10932     XRANDR_LIBS="${filteredlibs}"
10933 else
10934     ENABLE_RANDR=""
10935     AC_MSG_RESULT([no])
10937 AC_SUBST(XRANDR_CFLAGS)
10938 AC_SUBST(XRANDR_LIBS)
10939 AC_SUBST(ENABLE_RANDR)
10941 if test -z "$with_webdav"; then
10942     with_webdav=$test_webdav
10945 AC_MSG_CHECKING([for WebDAV support])
10946 case "$with_webdav" in
10948     AC_MSG_RESULT([no])
10949     WITH_WEBDAV=""
10950     ;;
10952     AC_MSG_RESULT([yes])
10953     # curl is already mandatory (almost) and checked elsewhere
10954     if test "$enable_curl" = "no"; then
10955         AC_MSG_ERROR(["--with-webdav conflicts with --disable-curl"])
10956     fi
10957     WITH_WEBDAV=TRUE
10958     ;;
10959 esac
10960 AC_SUBST(WITH_WEBDAV)
10962 dnl ===================================================================
10963 dnl Check for disabling cve_tests
10964 dnl ===================================================================
10965 AC_MSG_CHECKING([whether to execute CVE tests])
10966 # If not explicitly enabled or disabled, default
10967 if test -z "$enable_cve_tests"; then
10968     case "$OS" in
10969     WNT)
10970         # Default cves off for Windows with its wild and wonderful
10971         # variety of AV software kicking in and panicking
10972         enable_cve_tests=no
10973         ;;
10974     *)
10975         # otherwise yes
10976         enable_cve_tests=yes
10977         ;;
10978     esac
10980 if test "$enable_cve_tests" = "no"; then
10981     AC_MSG_RESULT([no])
10982     DISABLE_CVE_TESTS=TRUE
10983     AC_SUBST(DISABLE_CVE_TESTS)
10984 else
10985     AC_MSG_RESULT([yes])
10988 dnl ===================================================================
10989 dnl Check for enabling chart XShape tests
10990 dnl ===================================================================
10991 AC_MSG_CHECKING([whether to execute chart XShape tests])
10992 if test "$enable_chart_tests" = "yes" -o '(' "$_os" = "WINNT" -a "$enable_chart_tests" != "no" ')'; then
10993     AC_MSG_RESULT([yes])
10994     ENABLE_CHART_TESTS=TRUE
10995     AC_SUBST(ENABLE_CHART_TESTS)
10996 else
10997     AC_MSG_RESULT([no])
11000 dnl ===================================================================
11001 dnl Check for system openssl
11002 dnl ===================================================================
11003 ENABLE_OPENSSL=
11004 AC_MSG_CHECKING([whether to disable OpenSSL usage])
11005 if test "$enable_openssl" = "yes"; then
11006     AC_MSG_RESULT([no])
11007     ENABLE_OPENSSL=TRUE
11008     if test "$_os" = Darwin ; then
11009         # OpenSSL is deprecated when building for 10.7 or later.
11010         #
11011         # http://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
11012         # http://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
11014         with_system_openssl=no
11015         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
11016     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
11017             && test "$with_system_openssl" != "no"; then
11018         with_system_openssl=yes
11019         SYSTEM_OPENSSL=TRUE
11020         OPENSSL_CFLAGS=
11021         OPENSSL_LIBS="-lssl -lcrypto"
11022     else
11023         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
11024     fi
11025     if test "$with_system_openssl" = "yes"; then
11026         AC_MSG_CHECKING([whether openssl supports SHA512])
11027         AC_LANG_PUSH([C])
11028         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
11029             SHA512_CTX context;
11030 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
11031         AC_LANG_POP(C)
11032     fi
11033 else
11034     AC_MSG_RESULT([yes])
11036     # warn that although OpenSSL is disabled, system libraries may depend on it
11037     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
11038     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
11041 AC_SUBST([ENABLE_OPENSSL])
11043 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
11044     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
11045         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
11046         enable_cipher_openssl_backend=no
11047     else
11048         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
11049     fi
11051 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
11052 ENABLE_CIPHER_OPENSSL_BACKEND=
11053 if test "$enable_cipher_openssl_backend" = yes; then
11054     AC_MSG_RESULT([yes])
11055     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
11056 else
11057     AC_MSG_RESULT([no])
11059 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
11061 dnl ===================================================================
11062 dnl Select the crypto backends used by LO
11063 dnl ===================================================================
11065 if test "$build_crypto" = yes; then
11066     if test "$OS" = WNT; then
11067         BUILD_TYPE="$BUILD_TYPE CRYPTO_MSCAPI"
11068         AC_DEFINE([USE_CRYPTO_MSCAPI])
11069     elif test "$ENABLE_NSS" = TRUE; then
11070         BUILD_TYPE="$BUILD_TYPE CRYPTO_NSS"
11071         AC_DEFINE([USE_CRYPTO_NSS])
11072     fi
11075 dnl ===================================================================
11076 dnl Check for system redland
11077 dnl ===================================================================
11078 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
11079 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
11080 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
11081 if test "$with_system_redland" = "yes"; then
11082     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
11083             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
11084 else
11085     RAPTOR_MAJOR="0"
11086     RASQAL_MAJOR="3"
11087     REDLAND_MAJOR="0"
11089 AC_SUBST(RAPTOR_MAJOR)
11090 AC_SUBST(RASQAL_MAJOR)
11091 AC_SUBST(REDLAND_MAJOR)
11093 dnl ===================================================================
11094 dnl Check for system hunspell
11095 dnl ===================================================================
11096 AC_MSG_CHECKING([which libhunspell to use])
11097 if test "$with_system_hunspell" = "yes"; then
11098     AC_MSG_RESULT([external])
11099     SYSTEM_HUNSPELL=TRUE
11100     AC_LANG_PUSH([C++])
11101     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
11102     if test "$HUNSPELL_PC" != "TRUE"; then
11103         AC_CHECK_HEADER(hunspell.hxx, [],
11104             [
11105             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
11106             [AC_MSG_ERROR(hunspell headers not found.)], [])
11107             ], [])
11108         AC_CHECK_LIB([hunspell], [main], [:],
11109            [ AC_MSG_ERROR(hunspell library not found.) ], [])
11110         HUNSPELL_LIBS=-lhunspell
11111     fi
11112     AC_LANG_POP([C++])
11113     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11114     FilterLibs "${HUNSPELL_LIBS}"
11115     HUNSPELL_LIBS="${filteredlibs}"
11116 else
11117     AC_MSG_RESULT([internal])
11118     SYSTEM_HUNSPELL=
11119     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
11120     if test "$COM" = "MSC"; then
11121         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
11122     else
11123         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
11124     fi
11125     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
11127 AC_SUBST(SYSTEM_HUNSPELL)
11128 AC_SUBST(HUNSPELL_CFLAGS)
11129 AC_SUBST(HUNSPELL_LIBS)
11131 dnl ===================================================================
11132 dnl Check for system zxing
11133 dnl ===================================================================
11134 AC_MSG_CHECKING([whether to use zxing])
11135 if test "$enable_zxing" = "no"; then
11136     AC_MSG_RESULT([no])
11137     ENABLE_ZXING=
11138     SYSTEM_ZXING=
11139 else
11140     AC_MSG_RESULT([yes])
11141     ENABLE_ZXING=TRUE
11142     AC_MSG_CHECKING([which libzxing to use])
11143     if test "$with_system_zxing" = "yes"; then
11144         AC_MSG_RESULT([external])
11145         SYSTEM_ZXING=TRUE
11146         ZXING_CFLAGS=
11147         AC_LANG_PUSH([C++])
11148         save_CXXFLAGS=$CXXFLAGS
11149         save_IFS=$IFS
11150         IFS=$P_SEP
11151         for i in $CPLUS_INCLUDE_PATH /usr/include; do
11152             dnl Reset IFS as soon as possible, to avoid unexpected side effects (and the
11153             dnl "/usr/include" fallback makes sure we get here at least once; resetting rather than
11154             dnl unsetting follows the advice at <http://git.savannah.gnu.org/gitweb/?p=autoconf.git;
11155             dnl a=commit;h=e51c9919f2cf70185b7916ac040bc0bbfd0f743b> "Add recommendation on (not)
11156             dnl unsetting IFS."):
11157             IFS=$save_IFS
11158             dnl TODO: GCC and Clang treat empty paths in CPLUS_INCLUDE_PATH like ".", but we simply
11159             dnl ignore them here:
11160             if test -z "$i"; then
11161                 continue
11162             fi
11163             dnl TODO: White space in $i would cause problems:
11164             CXXFLAGS="$save_CXXFLAGS -I$i/ZXing"
11165             AC_CHECK_HEADER(MultiFormatWriter.h, [ZXING_CFLAGS=-I$i/ZXing; break],
11166                 [unset ac_cv_header_MultiFormatWriter_h], [#include <stdexcept>])
11167         done
11168         CXXFLAGS=$save_CXXFLAGS
11169         if test -z "$ZXING_CFLAGS"; then
11170             AC_MSG_ERROR(zxing headers not found.)
11171         fi
11172         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
11173             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
11174             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
11175         AC_LANG_POP([C++])
11176         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11177         FilterLibs "${ZXING_LIBS}"
11178         ZXING_LIBS="${filteredlibs}"
11179     else
11180         AC_MSG_RESULT([internal])
11181         SYSTEM_ZXING=
11182         BUILD_TYPE="$BUILD_TYPE ZXING"
11183     fi
11184     if test "$ENABLE_ZXING" = TRUE; then
11185         AC_DEFINE(ENABLE_ZXING)
11186     fi
11188 AC_SUBST(SYSTEM_ZXING)
11189 AC_SUBST(ENABLE_ZXING)
11190 AC_SUBST(ZXING_CFLAGS)
11191 AC_SUBST(ZXING_LIBS)
11193 dnl ===================================================================
11194 dnl Check for system box2d
11195 dnl ===================================================================
11196 AC_MSG_CHECKING([which box2d to use])
11197 if test "$with_system_box2d" = "yes"; then
11198     AC_MSG_RESULT([external])
11199     SYSTEM_BOX2D=TRUE
11200     AC_LANG_PUSH([C++])
11201     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
11202         [BOX2D_H_FOUND='FALSE'])
11203     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
11204         _BOX2D_LIB=box2d
11205         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
11206     else
11207         # fail this. there's no other alternative to check when we are here.
11208         AC_CHECK_HEADER([Box2D/Box2D.h], [],
11209             [AC_MSG_ERROR(box2d headers not found.)])
11210         _BOX2D_LIB=Box2D
11211         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11212     fi
11213     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11214         [ AC_MSG_ERROR(box2d library not found.) ], [])
11215     BOX2D_LIBS=-l$_BOX2D_LIB
11216     AC_LANG_POP([C++])
11217     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11218     FilterLibs "${BOX2D_LIBS}"
11219     BOX2D_LIBS="${filteredlibs}"
11220 else
11221     AC_MSG_RESULT([internal])
11222     SYSTEM_BOX2D=
11223     BUILD_TYPE="$BUILD_TYPE BOX2D"
11225 AC_SUBST(SYSTEM_BOX2D)
11226 AC_SUBST(BOX2D_CFLAGS)
11227 AC_SUBST(BOX2D_LIBS)
11229 dnl ===================================================================
11230 dnl Checking for altlinuxhyph
11231 dnl ===================================================================
11232 AC_MSG_CHECKING([which altlinuxhyph to use])
11233 if test "$with_system_altlinuxhyph" = "yes"; then
11234     AC_MSG_RESULT([external])
11235     SYSTEM_HYPH=TRUE
11236     AC_CHECK_HEADER(hyphen.h, [],
11237        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11238     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11239        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11240        [#include <hyphen.h>])
11241     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11242         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11243     if test -z "$HYPHEN_LIB"; then
11244         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11245            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11246     fi
11247     if test -z "$HYPHEN_LIB"; then
11248         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11249            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11250     fi
11251 else
11252     AC_MSG_RESULT([internal])
11253     SYSTEM_HYPH=
11254     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11255     if test "$COM" = "MSC"; then
11256         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11257     else
11258         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11259     fi
11261 AC_SUBST(SYSTEM_HYPH)
11262 AC_SUBST(HYPHEN_LIB)
11264 dnl ===================================================================
11265 dnl Checking for mythes
11266 dnl ===================================================================
11267 AC_MSG_CHECKING([which mythes to use])
11268 if test "$with_system_mythes" = "yes"; then
11269     AC_MSG_RESULT([external])
11270     SYSTEM_MYTHES=TRUE
11271     AC_LANG_PUSH([C++])
11272     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11273     if test "$MYTHES_PKGCONFIG" = "no"; then
11274         AC_CHECK_HEADER(mythes.hxx, [],
11275             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11276         AC_CHECK_LIB([mythes-1.2], [main], [:],
11277             [ MYTHES_FOUND=no], [])
11278     if test "$MYTHES_FOUND" = "no"; then
11279         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11280                 [ MYTHES_FOUND=no], [])
11281     fi
11282     if test "$MYTHES_FOUND" = "no"; then
11283         AC_MSG_ERROR([mythes library not found!.])
11284     fi
11285     fi
11286     AC_LANG_POP([C++])
11287     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11288     FilterLibs "${MYTHES_LIBS}"
11289     MYTHES_LIBS="${filteredlibs}"
11290 else
11291     AC_MSG_RESULT([internal])
11292     SYSTEM_MYTHES=
11293     BUILD_TYPE="$BUILD_TYPE MYTHES"
11294     if test "$COM" = "MSC"; then
11295         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11296     else
11297         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11298     fi
11300 AC_SUBST(SYSTEM_MYTHES)
11301 AC_SUBST(MYTHES_CFLAGS)
11302 AC_SUBST(MYTHES_LIBS)
11304 dnl ===================================================================
11305 dnl How should we build the linear programming solver ?
11306 dnl ===================================================================
11308 ENABLE_COINMP=
11309 AC_MSG_CHECKING([whether to build with CoinMP])
11310 if test "$enable_coinmp" != "no"; then
11311     ENABLE_COINMP=TRUE
11312     AC_MSG_RESULT([yes])
11313     if test "$with_system_coinmp" = "yes"; then
11314         SYSTEM_COINMP=TRUE
11315         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11316         FilterLibs "${COINMP_LIBS}"
11317         COINMP_LIBS="${filteredlibs}"
11318     else
11319         BUILD_TYPE="$BUILD_TYPE COINMP"
11320     fi
11321 else
11322     AC_MSG_RESULT([no])
11324 AC_SUBST(ENABLE_COINMP)
11325 AC_SUBST(SYSTEM_COINMP)
11326 AC_SUBST(COINMP_CFLAGS)
11327 AC_SUBST(COINMP_LIBS)
11329 ENABLE_LPSOLVE=
11330 AC_MSG_CHECKING([whether to build with lpsolve])
11331 if test "$enable_lpsolve" != "no"; then
11332     ENABLE_LPSOLVE=TRUE
11333     AC_MSG_RESULT([yes])
11334 else
11335     AC_MSG_RESULT([no])
11337 AC_SUBST(ENABLE_LPSOLVE)
11339 if test "$ENABLE_LPSOLVE" = TRUE; then
11340     AC_MSG_CHECKING([which lpsolve to use])
11341     if test "$with_system_lpsolve" = "yes"; then
11342         AC_MSG_RESULT([external])
11343         SYSTEM_LPSOLVE=TRUE
11344         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11345            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11346         save_LIBS=$LIBS
11347         # some systems need this. Like Ubuntu...
11348         AC_CHECK_LIB(m, floor)
11349         AC_CHECK_LIB(dl, dlopen)
11350         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11351             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11352         LIBS=$save_LIBS
11353     else
11354         AC_MSG_RESULT([internal])
11355         SYSTEM_LPSOLVE=
11356         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11357     fi
11359 AC_SUBST(SYSTEM_LPSOLVE)
11361 dnl ===================================================================
11362 dnl Checking for libexttextcat
11363 dnl ===================================================================
11364 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11365 if test "$with_system_libexttextcat" = "yes"; then
11366     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11368 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11370 dnl ===================================================================
11371 dnl Checking for libnumbertext
11372 dnl ===================================================================
11373 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11374 if test "$with_system_libnumbertext" = "yes"; then
11375     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11376     SYSTEM_LIBNUMBERTEXT=YES
11377 else
11378     SYSTEM_LIBNUMBERTEXT=
11379     AC_LANG_PUSH([C++])
11380     save_CPPFLAGS=$CPPFLAGS
11381     CPPFLAGS="$CPPFLAGS $CXXFLAGS_CXX11"
11382     AC_CHECK_HEADERS([codecvt regex])
11383     AS_IF([test "x$ac_cv_header_codecvt" != xyes -o "x$ac_cv_header_regex" != xyes],
11384             [ LIBNUMBERTEXT_CFLAGS=''
11385               AC_MSG_WARN([No system-provided libnumbertext or codecvt/regex C++11 headers (min. libstdc++ 4.9).
11386                            Enable libnumbertext fallback (missing number to number name conversion).])
11387             ])
11388     CPPFLAGS=$save_CPPFLAGS
11389     AC_LANG_POP([C++])
11391 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11392 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11393 AC_SUBST(LIBNUMBERTEXT_CFLAGS)
11395 dnl ***************************************
11396 dnl testing libc version for Linux...
11397 dnl ***************************************
11398 if test "$_os" = "Linux"; then
11399     AC_MSG_CHECKING([whether the libc is recent enough])
11400     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
11401     #include <features.h>
11402     #if defined(__GNU_LIBRARY__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1))
11403     #error glibc >= 2.1 is required
11404     #endif
11405     ]])],, [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([no, upgrade libc])])
11408 dnl =========================================
11409 dnl Check for uuidgen
11410 dnl =========================================
11411 if test "$_os" = "WINNT"; then
11412     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11413     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11414     UUIDGEN=uuidgen.exe
11415     AC_SUBST(UUIDGEN)
11416 else
11417     AC_PATH_PROG([UUIDGEN], [uuidgen])
11418     if test -z "$UUIDGEN"; then
11419         AC_MSG_WARN([uuid is needed for building installation sets])
11420     fi
11423 dnl ***************************************
11424 dnl Checking for bison and flex
11425 dnl ***************************************
11426 AC_PATH_PROG(BISON, bison)
11427 if test -z "$BISON"; then
11428     AC_MSG_ERROR([no bison found in \$PATH, install it])
11429 else
11430     AC_MSG_CHECKING([the bison version])
11431     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11432     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11433     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11434     dnl cause
11435     dnl
11436     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]
11437     dnl   typedef union YYSTYPE
11438     dnl           ~~~~~~^~~~~~~
11439     dnl
11440     dnl while at least 3.4.1 is know to be good:
11441     if test "$COMPILER_PLUGINS" = TRUE; then
11442         if test "$_bison_longver" -lt 2004; then
11443             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11444         fi
11445     else
11446         if test "$_bison_longver" -lt 2000; then
11447             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11448         fi
11449     fi
11451 AC_SUBST([BISON])
11453 AC_PATH_PROG(FLEX, flex)
11454 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11455     FLEX=`cygpath -m $FLEX`
11457 if test -z "$FLEX"; then
11458     AC_MSG_ERROR([no flex found in \$PATH, install it])
11459 else
11460     AC_MSG_CHECKING([the flex version])
11461     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11462     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11463         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11464     fi
11466 AC_SUBST([FLEX])
11468 AC_PATH_PROG(DIFF, diff)
11469 if test -z "$DIFF"; then
11470     AC_MSG_ERROR(["diff" not found in \$PATH, install it])
11472 AC_SUBST([DIFF])
11474 AC_PATH_PROG(UNIQ, uniq)
11475 if test -z "$UNIQ"; then
11476     AC_MSG_ERROR(["uniq" not found in \$PATH, install it])
11478 AC_SUBST([UNIQ])
11480 dnl ***************************************
11481 dnl Checking for patch
11482 dnl ***************************************
11483 AC_PATH_PROG(PATCH, patch)
11484 if test -z "$PATCH"; then
11485     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11488 dnl On Solaris or macOS, check if --with-gnu-patch was used
11489 if test "$_os" = "SunOS" -o "$_os" = "Darwin"; then
11490     if test -z "$with_gnu_patch"; then
11491         GNUPATCH=$PATCH
11492     else
11493         if test -x "$with_gnu_patch"; then
11494             GNUPATCH=$with_gnu_patch
11495         else
11496             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11497         fi
11498     fi
11500     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11501     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11502         AC_MSG_RESULT([yes])
11503     else
11504         AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11505     fi
11506 else
11507     GNUPATCH=$PATCH
11510 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11511     GNUPATCH=`cygpath -m $GNUPATCH`
11514 dnl We also need to check for --with-gnu-cp
11516 if test -z "$with_gnu_cp"; then
11517     # check the place where the good stuff is hidden on Solaris...
11518     if test -x /usr/gnu/bin/cp; then
11519         GNUCP=/usr/gnu/bin/cp
11520     else
11521         AC_PATH_PROGS(GNUCP, gnucp cp)
11522     fi
11523     if test -z $GNUCP; then
11524         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11525     fi
11526 else
11527     if test -x "$with_gnu_cp"; then
11528         GNUCP=$with_gnu_cp
11529     else
11530         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11531     fi
11534 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11535     GNUCP=`cygpath -m $GNUCP`
11538 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11539 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11540     AC_MSG_RESULT([yes])
11541 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11542     AC_MSG_RESULT([yes])
11543 else
11544     case "$build_os" in
11545     darwin*|netbsd*|openbsd*|freebsd*|dragonfly*|aix*)
11546         x_GNUCP=[\#]
11547         GNUCP=''
11548         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11549         ;;
11550     *)
11551         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11552         ;;
11553     esac
11556 AC_SUBST(GNUPATCH)
11557 AC_SUBST(GNUCP)
11558 AC_SUBST(x_GNUCP)
11560 dnl ***************************************
11561 dnl testing assembler path
11562 dnl ***************************************
11563 ML_EXE=""
11564 if test "$_os" = "WINNT"; then
11565     case "$WIN_HOST_ARCH" in
11566     x86) assembler=ml.exe ;;
11567     x64) assembler=ml64.exe ;;
11568     arm64) assembler=armasm64.exe ;;
11569     esac
11571     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11572     if test -f "$MSVC_HOST_PATH/$assembler"; then
11573         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11574         AC_MSG_RESULT([$ML_EXE])
11575     else
11576         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11577     fi
11580 AC_SUBST(ML_EXE)
11582 dnl ===================================================================
11583 dnl We need zip and unzip
11584 dnl ===================================================================
11585 AC_PATH_PROG(ZIP, zip)
11586 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11587 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11588     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],,)
11591 AC_PATH_PROG(UNZIP, unzip)
11592 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11594 dnl ===================================================================
11595 dnl Zip must be a specific type for different build types.
11596 dnl ===================================================================
11597 if test $build_os = cygwin; then
11598     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11599         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11600     fi
11603 dnl ===================================================================
11604 dnl We need touch with -h option support.
11605 dnl ===================================================================
11606 AC_PATH_PROG(TOUCH, touch)
11607 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11608 touch "$WARNINGS_FILE"
11609 if ! "$TOUCH" -h "$WARNINGS_FILE" 2>/dev/null > /dev/null; then
11610     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],,)
11613 dnl ===================================================================
11614 dnl Check for system epoxy
11615 dnl ===================================================================
11616 EPOXY_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/epoxy/include"
11617 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2])
11619 dnl ===================================================================
11620 dnl Set vcl option: coordinate device in double or sal_Int32
11621 dnl ===================================================================
11623 dnl disabled for now, we don't want subtle differences between OSs
11624 dnl AC_MSG_CHECKING([Type to use for Device Pixel coordinates])
11625 dnl if test "$_os" = "Darwin" -o  $_os = iOS ; then
11626 dnl     AC_DEFINE(VCL_FLOAT_DEVICE_PIXEL)
11627 dnl     AC_MSG_RESULT([double])
11628 dnl else
11629 dnl     AC_MSG_RESULT([sal_Int32])
11630 dnl fi
11632 dnl ===================================================================
11633 dnl Show which vclplugs will be built.
11634 dnl ===================================================================
11635 R=""
11637 libo_ENABLE_VCLPLUG([gen])
11638 libo_ENABLE_VCLPLUG([gtk3])
11639 libo_ENABLE_VCLPLUG([gtk3_kde5])
11640 libo_ENABLE_VCLPLUG([gtk4])
11641 libo_ENABLE_VCLPLUG([kf5])
11642 libo_ENABLE_VCLPLUG([qt5])
11643 libo_ENABLE_VCLPLUG([qt6])
11645 if test "$_os" = "WINNT"; then
11646     R="$R win"
11647 elif test "$_os" = "Darwin"; then
11648     R="$R osx"
11649 elif test "$_os" = "iOS"; then
11650     R="ios"
11651 elif test "$_os" = Android; then
11652     R="android"
11655 build_vcl_plugins="$R"
11656 if test -z "$build_vcl_plugins"; then
11657     build_vcl_plugins=" none"
11659 AC_MSG_NOTICE([VCLplugs to be built:${build_vcl_plugins}])
11660 VCL_PLUGIN_INFO=$R
11661 AC_SUBST([VCL_PLUGIN_INFO])
11663 if test "$DISABLE_DYNLOADING" = TRUE -a -z "$DISABLE_GUI" -a \( -z "$R" -o $(echo "$R" | wc -w) -ne 1 \); then
11664     AC_MSG_ERROR([Can't build --disable-dynamic-loading without --disable-gui and a single VCL plugin"])
11667 dnl ===================================================================
11668 dnl Check for GTK libraries
11669 dnl ===================================================================
11671 GTK3_CFLAGS=""
11672 GTK3_LIBS=""
11673 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11674     if test "$with_system_cairo" = no; then
11675         add_warning 'Non-system cairo combined with gtk3 is assumed to cause trouble; proceed at your own risk.'
11676     fi
11677     : ${with_system_cairo:=yes}
11678     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)
11679     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11680     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11681     FilterLibs "${GTK3_LIBS}"
11682     GTK3_LIBS="${filteredlibs}"
11684     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11685     if test "$with_system_epoxy" != "yes"; then
11686         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11687         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11688                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11689     fi
11691 AC_SUBST(GTK3_LIBS)
11692 AC_SUBST(GTK3_CFLAGS)
11694 GTK4_CFLAGS=""
11695 GTK4_LIBS=""
11696 if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then
11697     if test "$with_system_cairo" = no; then
11698         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11699     fi
11700     : ${with_system_cairo:=yes}
11701     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11702     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11703     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11704     FilterLibs "${GTK4_LIBS}"
11705     GTK4_LIBS="${filteredlibs}"
11707     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11708     if test "$with_system_epoxy" != "yes"; then
11709         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11710         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11711                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11712     fi
11714 AC_SUBST(GTK4_LIBS)
11715 AC_SUBST(GTK4_CFLAGS)
11717 if test "$enable_introspection" = yes; then
11718     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11719         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11720     else
11721         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
11722     fi
11725 dnl ===================================================================
11726 dnl check for dbus support
11727 dnl ===================================================================
11728 ENABLE_DBUS=""
11729 DBUS_CFLAGS=""
11730 DBUS_LIBS=""
11731 DBUS_GLIB_CFLAGS=""
11732 DBUS_GLIB_LIBS=""
11733 DBUS_HAVE_GLIB=""
11735 if test "$enable_dbus" = "no"; then
11736     test_dbus=no
11739 AC_MSG_CHECKING([whether to enable DBUS support])
11740 if test "$test_dbus" = "yes"; then
11741     ENABLE_DBUS="TRUE"
11742     AC_MSG_RESULT([yes])
11743     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
11744     AC_DEFINE(ENABLE_DBUS)
11745     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11746     FilterLibs "${DBUS_LIBS}"
11747     DBUS_LIBS="${filteredlibs}"
11749     # Glib is needed for BluetoothServer
11750     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
11751     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
11752         [
11753             DBUS_HAVE_GLIB="TRUE"
11754             AC_DEFINE(DBUS_HAVE_GLIB,1)
11755         ],
11756         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
11757     )
11758 else
11759     AC_MSG_RESULT([no])
11762 AC_SUBST(ENABLE_DBUS)
11763 AC_SUBST(DBUS_CFLAGS)
11764 AC_SUBST(DBUS_LIBS)
11765 AC_SUBST(DBUS_GLIB_CFLAGS)
11766 AC_SUBST(DBUS_GLIB_LIBS)
11767 AC_SUBST(DBUS_HAVE_GLIB)
11769 AC_MSG_CHECKING([whether to enable Impress remote control])
11770 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
11771     AC_MSG_RESULT([yes])
11772     ENABLE_SDREMOTE=TRUE
11773     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
11775     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
11776         # The Bluetooth code doesn't compile with macOS SDK 10.15
11777         if test "$enable_sdremote_bluetooth" = yes; then
11778             AC_MSG_ERROR([macOS SDK $macosx_sdk does not currently support --enable-sdremote-bluetooth])
11779         fi
11780         enable_sdremote_bluetooth=no
11781     fi
11782     # If not explicitly enabled or disabled, default
11783     if test -z "$enable_sdremote_bluetooth"; then
11784         case "$OS" in
11785         LINUX|MACOSX|WNT)
11786             # Default to yes for these
11787             enable_sdremote_bluetooth=yes
11788             ;;
11789         *)
11790             # otherwise no
11791             enable_sdremote_bluetooth=no
11792             ;;
11793         esac
11794     fi
11795     # $enable_sdremote_bluetooth is guaranteed non-empty now
11797     if test "$enable_sdremote_bluetooth" != "no"; then
11798         if test "$OS" = "LINUX"; then
11799             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
11800                 AC_MSG_RESULT([yes])
11801                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
11802                 dnl ===================================================================
11803                 dnl Check for system bluez
11804                 dnl ===================================================================
11805                 AC_MSG_CHECKING([which Bluetooth header to use])
11806                 if test "$with_system_bluez" = "yes"; then
11807                     AC_MSG_RESULT([external])
11808                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
11809                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
11810                     SYSTEM_BLUEZ=TRUE
11811                 else
11812                     AC_MSG_RESULT([internal])
11813                     SYSTEM_BLUEZ=
11814                 fi
11815             else
11816                 AC_MSG_RESULT([no, dbus disabled])
11817                 ENABLE_SDREMOTE_BLUETOOTH=
11818                 SYSTEM_BLUEZ=
11819             fi
11820         else
11821             AC_MSG_RESULT([yes])
11822             ENABLE_SDREMOTE_BLUETOOTH=TRUE
11823             SYSTEM_BLUEZ=
11824         fi
11825     else
11826         AC_MSG_RESULT([no])
11827         ENABLE_SDREMOTE_BLUETOOTH=
11828         SYSTEM_BLUEZ=
11829     fi
11830 else
11831     ENABLE_SDREMOTE=
11832     SYSTEM_BLUEZ=
11833     AC_MSG_RESULT([no])
11835 AC_SUBST(ENABLE_SDREMOTE)
11836 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
11837 AC_SUBST(SYSTEM_BLUEZ)
11839 dnl ===================================================================
11840 dnl Check whether to enable GIO support
11841 dnl ===================================================================
11842 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11843     AC_MSG_CHECKING([whether to enable GIO support])
11844     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
11845         dnl Need at least 2.26 for the dbus support.
11846         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
11847                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
11848         if test "$ENABLE_GIO" = "TRUE"; then
11849             AC_DEFINE(ENABLE_GIO)
11850             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11851             FilterLibs "${GIO_LIBS}"
11852             GIO_LIBS="${filteredlibs}"
11853         fi
11854     else
11855         AC_MSG_RESULT([no])
11856     fi
11858 AC_SUBST(ENABLE_GIO)
11859 AC_SUBST(GIO_CFLAGS)
11860 AC_SUBST(GIO_LIBS)
11863 dnl ===================================================================
11865 SPLIT_APP_MODULES=""
11866 if test "$enable_split_app_modules" = "yes"; then
11867     SPLIT_APP_MODULES="TRUE"
11869 AC_SUBST(SPLIT_APP_MODULES)
11871 SPLIT_OPT_FEATURES=""
11872 if test "$enable_split_opt_features" = "yes"; then
11873     SPLIT_OPT_FEATURES="TRUE"
11875 AC_SUBST(SPLIT_OPT_FEATURES)
11877 dnl ===================================================================
11878 dnl Check whether the GStreamer libraries are available.
11879 dnl ===================================================================
11881 ENABLE_GSTREAMER_1_0=""
11883 if test "$test_gstreamer_1_0" = yes; then
11885     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
11886     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
11887         ENABLE_GSTREAMER_1_0="TRUE"
11888         AC_MSG_RESULT([yes])
11889         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
11890         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11891         FilterLibs "${GSTREAMER_1_0_LIBS}"
11892         GSTREAMER_1_0_LIBS="${filteredlibs}"
11893         AC_DEFINE(ENABLE_GSTREAMER_1_0)
11894     else
11895         AC_MSG_RESULT([no])
11896     fi
11898 AC_SUBST(GSTREAMER_1_0_CFLAGS)
11899 AC_SUBST(GSTREAMER_1_0_LIBS)
11900 AC_SUBST(ENABLE_GSTREAMER_1_0)
11902 ENABLE_OPENGL_TRANSITIONS=
11903 ENABLE_OPENGL_CANVAS=
11904 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
11905    : # disable
11906 elif test "$_os" = "Darwin"; then
11907     # We use frameworks on macOS, no need for detail checks
11908     ENABLE_OPENGL_TRANSITIONS=TRUE
11909     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11910     ENABLE_OPENGL_CANVAS=TRUE
11911 elif test $_os = WINNT; then
11912     ENABLE_OPENGL_TRANSITIONS=TRUE
11913     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11914     ENABLE_OPENGL_CANVAS=TRUE
11915 else
11916     if test "$USING_X11" = TRUE; then
11917         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
11918         ENABLE_OPENGL_TRANSITIONS=TRUE
11919         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11920         ENABLE_OPENGL_CANVAS=TRUE
11921     fi
11924 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
11925 AC_SUBST(ENABLE_OPENGL_CANVAS)
11927 dnl =================================================
11928 dnl Check whether to build with OpenCL support.
11929 dnl =================================================
11931 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
11932     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
11933     # platform (optional at run-time, used through clew).
11934     BUILD_TYPE="$BUILD_TYPE OPENCL"
11935     AC_DEFINE(HAVE_FEATURE_OPENCL)
11938 dnl =================================================
11939 dnl Check whether to build with dconf support.
11940 dnl =================================================
11942 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
11943     PKG_CHECK_MODULES([DCONF], [dconf >= 0.15.2], [], [
11944         if test "$enable_dconf" = yes; then
11945             AC_MSG_ERROR([dconf not found])
11946         else
11947             enable_dconf=no
11948         fi])
11950 AC_MSG_CHECKING([whether to enable dconf])
11951 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
11952     DCONF_CFLAGS=
11953     DCONF_LIBS=
11954     ENABLE_DCONF=
11955     AC_MSG_RESULT([no])
11956 else
11957     ENABLE_DCONF=TRUE
11958     AC_DEFINE(ENABLE_DCONF)
11959     AC_MSG_RESULT([yes])
11961 AC_SUBST([DCONF_CFLAGS])
11962 AC_SUBST([DCONF_LIBS])
11963 AC_SUBST([ENABLE_DCONF])
11965 # pdf import?
11966 AC_MSG_CHECKING([whether to build the PDF import feature])
11967 ENABLE_PDFIMPORT=
11968 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
11969     AC_MSG_RESULT([yes])
11970     ENABLE_PDFIMPORT=TRUE
11971     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
11972 else
11973     AC_MSG_RESULT([no])
11976 # Pdfium?
11977 AC_MSG_CHECKING([whether to build PDFium])
11978 ENABLE_PDFIUM=
11979 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
11980     AC_MSG_RESULT([yes])
11981     ENABLE_PDFIUM=TRUE
11982     BUILD_TYPE="$BUILD_TYPE PDFIUM"
11983 else
11984     AC_MSG_RESULT([no])
11986 AC_SUBST(ENABLE_PDFIUM)
11988 if test "$ENABLE_PDFIUM" = "TRUE"; then
11989     AC_MSG_CHECKING([which OpenJPEG library to use])
11990     if test "$with_system_openjpeg" = "yes"; then
11991         SYSTEM_OPENJPEG2=TRUE
11992         AC_MSG_RESULT([external])
11993         PKG_CHECK_MODULES( OPENJPEG2, libopenjp2 )
11994         OPENJPEG2_CFLAGS=$(printf '%s' "$OPENJPEG2_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11995         FilterLibs "${OPENJPEG2_LIBS}"
11996         OPENJPEG2_LIBS="${filteredlibs}"
11997     else
11998         SYSTEM_OPENJPEG2=FALSE
11999         AC_MSG_RESULT([internal])
12000     fi
12002     AC_MSG_CHECKING([which Abseil library to use])
12003     if test "$with_system_abseil" = "yes"; then
12004         AC_MSG_RESULT([external])
12005         SYSTEM_ABSEIL=TRUE
12006         AC_LANG_PUSH([C++])
12007         AC_CHECK_HEADER(absl/types/bad_optional_access.h, [],
12008                         [AC_MSG_ERROR(abseil headers not found.)], [])
12009         AC_CHECK_LIB([absl_bad_optional_access], [main], [ABSEIL_LIBS=-labsl_bad_optional_access],
12010                      [AC_MSG_ERROR([libabsl_bad_optional_access library not found.])])
12011         AC_LANG_POP([C++])
12012         ABSEIL_CFLAGS=$(printf '%s' "$ABSEIL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12013         FilterLibs "${ABSEIL_LIBS}"
12014         ABSEIL_LIBS="${filteredlibs}"
12015     else
12016         AC_MSG_RESULT([internal])
12017     fi
12019 AC_SUBST(SYSTEM_OPENJPEG2)
12020 AC_SUBST(SYSTEM_ABSEIL)
12021 AC_SUBST(ABSEIL_CFLAGS)
12022 AC_SUBST(ABSEIL_LIBS)
12024 dnl ===================================================================
12025 dnl Check for poppler
12026 dnl ===================================================================
12027 ENABLE_POPPLER=
12028 AC_MSG_CHECKING([whether to build Poppler])
12029 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
12030     AC_MSG_RESULT([yes])
12031     ENABLE_POPPLER=TRUE
12032     AC_DEFINE(HAVE_FEATURE_POPPLER)
12033 else
12034     AC_MSG_RESULT([no])
12036 AC_SUBST(ENABLE_POPPLER)
12038 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
12039     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
12042 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
12043     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
12046 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
12047     dnl ===================================================================
12048     dnl Check for system poppler
12049     dnl ===================================================================
12050     AC_MSG_CHECKING([which PDF import poppler to use])
12051     if test "$with_system_poppler" = "yes"; then
12052         AC_MSG_RESULT([external])
12053         SYSTEM_POPPLER=TRUE
12054         PKG_CHECK_MODULES(POPPLER,[poppler >= 0.14 poppler-cpp])
12055         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12056         FilterLibs "${POPPLER_LIBS}"
12057         POPPLER_LIBS="${filteredlibs}"
12058     else
12059         AC_MSG_RESULT([internal])
12060         SYSTEM_POPPLER=
12061         BUILD_TYPE="$BUILD_TYPE POPPLER"
12062     fi
12063     AC_DEFINE([ENABLE_PDFIMPORT],1)
12065 AC_SUBST(ENABLE_PDFIMPORT)
12066 AC_SUBST(SYSTEM_POPPLER)
12067 AC_SUBST(POPPLER_CFLAGS)
12068 AC_SUBST(POPPLER_LIBS)
12070 # Skia?
12071 ENABLE_SKIA=
12072 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
12073     # Skia now requires at least freetype2 >= 2.8.1, which is less that what LO requires as system freetype.
12074     if test "$SYSTEM_FREETYPE" = TRUE; then
12075         PKG_CHECK_EXISTS(freetype2 >= 21.0.15, # 21.0.15 = 2.8.1
12076             [skia_freetype_ok=yes],
12077             [skia_freetype_ok=no])
12078     else # internal is ok
12079         skia_freetype_ok=yes
12080     fi
12081     AC_MSG_CHECKING([whether to build Skia])
12082     if test "$skia_freetype_ok" = "yes"; then
12083         if test "$enable_skia" = "debug"; then
12084             AC_MSG_RESULT([yes (debug)])
12085             ENABLE_SKIA_DEBUG=TRUE
12086         else
12087             AC_MSG_RESULT([yes])
12088             ENABLE_SKIA_DEBUG=
12089         fi
12090         ENABLE_SKIA=TRUE
12091         AC_DEFINE(HAVE_FEATURE_SKIA)
12092         BUILD_TYPE="$BUILD_TYPE SKIA"
12094         if test "$OS" = "MACOSX"; then
12095             AC_DEFINE(SK_SUPPORT_GPU,1)
12096             AC_DEFINE(SK_METAL,1)
12097             SKIA_GPU=METAL
12098             AC_SUBST(SKIA_GPU)
12099         else
12100             AC_DEFINE(SK_SUPPORT_GPU,1)
12101             AC_DEFINE(SK_VULKAN,1)
12102             SKIA_GPU=VULKAN
12103             AC_SUBST(SKIA_GPU)
12104         fi
12106         if test -n "$MAC_OS_X_VERSION_MIN_REQUIRED" && test "$MAC_OS_X_VERSION_MIN_REQUIRED" -lt "101200"; then
12107             SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX=1
12108             AC_SUBST(SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX)
12109         fi
12110     else
12111         AC_MSG_RESULT([no (freetype too old)])
12112         add_warning "freetype version is too old for Skia library, at least 2.8.1 required, Skia support disabled"
12113     fi
12115 else
12116     AC_MSG_CHECKING([whether to build Skia])
12117     AC_MSG_RESULT([no])
12119 AC_SUBST(ENABLE_SKIA)
12120 AC_SUBST(ENABLE_SKIA_DEBUG)
12122 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
12123 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
12124 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
12125 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
12126 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
12127 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
12128 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
12129 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F=
12130 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
12131 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
12132 HAVE_LO_CLANG_DLLEXPORTINLINES=
12134 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE; then
12135     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12136         AC_MSG_CHECKING([for Clang])
12137         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
12138     else
12139         if test "$_os" = "WINNT"; then
12140             AC_MSG_CHECKING([for clang-cl])
12141             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
12142                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
12143             elif test -n "$PROGRAMFILES" -a -x "$PROGRAMFILES/LLVM/bin/clang-cl.exe"; then
12144                 LO_CLANG_CC=`win_short_path_for_make "$PROGRAMFILES/LLVM/bin/clang-cl.exe"`
12145             elif test -x "c:/Program Files/LLVM/bin/clang-cl.exe"; then
12146                 LO_CLANG_CC=`win_short_path_for_make "c:/Program Files/LLVM/bin/clang-cl.exe"`
12147             fi
12148             if test -n "$LO_CLANG_CC"; then
12149                 dnl explicitly set -m32/-m64
12150                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
12151                 LO_CLANG_CXX="$LO_CLANG_CC"
12152                 AC_MSG_RESULT([$LO_CLANG_CC])
12153             else
12154                 AC_MSG_RESULT([no])
12155             fi
12157             AC_MSG_CHECKING([the dependency generation prefix (clang.exe -showIncludes)])
12158             echo "#include <stdlib.h>" > conftest.c
12159             LO_CLANG_SHOWINCLUDES_PREFIX=`$LO_CLANG_CC $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
12160                 grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
12161             rm -f conftest.c conftest.obj
12162             if test -z "$LO_CLANG_SHOWINCLUDES_PREFIX"; then
12163                 AC_MSG_ERROR([cannot determine the -showIncludes prefix])
12164             else
12165                 AC_MSG_RESULT(["$LO_CLANG_SHOWINCLUDES_PREFIX"])
12166             fi
12167         else
12168             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
12169             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
12170         fi
12171     fi
12172     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12173         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
12174         clang2_ver=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
12175         if test "$clang2_ver" -lt 50002; then
12176             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
12177             LO_CLANG_CC=
12178             LO_CLANG_CXX=
12179         fi
12180     fi
12181     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX" -a "$_os" = "WINNT"; then
12182         save_CXX="$CXX"
12183         CXX="$LO_CLANG_CXX"
12184         AC_MSG_CHECKING([whether $CXX supports -Zc:dllexportInlines-])
12185         AC_LANG_PUSH([C++])
12186         save_CXXFLAGS=$CXXFLAGS
12187         CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
12188         AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
12189                 HAVE_LO_CLANG_DLLEXPORTINLINES=TRUE
12190                 AC_MSG_RESULT([yes])
12191             ], [AC_MSG_RESULT([no])])
12192         CXXFLAGS=$save_CXXFLAGS
12193         AC_LANG_POP([C++])
12194         CXX="$save_CXX"
12195         if test -z "$HAVE_LO_CLANG_DLLEXPORTINLINES"; then
12196             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.])
12197         fi
12198     fi
12199     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
12200         # Skia is the default on Windows and Mac, so hard-require Clang.
12201         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
12202         if test "$_os" = "WINNT" -o "$_os" = "Darwin"; then
12203             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang, or use --disable-skia.])
12204         else
12205             AC_MSG_WARN([Clang compiler not found.])
12206         fi
12207     else
12209         save_CXX="$CXX"
12210         CXX="$LO_CLANG_CXX"
12211         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
12212         flag_sse2=-msse2
12213         flag_ssse3=-mssse3
12214         flag_sse41=-msse4.1
12215         flag_sse42=-msse4.2
12216         flag_avx=-mavx
12217         flag_avx2=-mavx2
12218         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
12219         flag_avx512f=-mavx512f
12220         flag_f16c=-mf16c
12221         flag_fma=-mfma
12223         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
12224         AC_LANG_PUSH([C++])
12225         save_CXXFLAGS=$CXXFLAGS
12226         CXXFLAGS="$CXXFLAGS $flag_sse2"
12227         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12228             #include <emmintrin.h>
12229             int main () {
12230                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12231                 c = _mm_xor_si128 (a, b);
12232                 return 0;
12233             }
12234             ])],
12235             [can_compile_sse2=yes],
12236             [can_compile_sse2=no])
12237         AC_LANG_POP([C++])
12238         CXXFLAGS=$save_CXXFLAGS
12239         AC_MSG_RESULT([${can_compile_sse2}])
12240         if test "${can_compile_sse2}" = "yes" ; then
12241             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
12242         fi
12244         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
12245         AC_LANG_PUSH([C++])
12246         save_CXXFLAGS=$CXXFLAGS
12247         CXXFLAGS="$CXXFLAGS $flag_ssse3"
12248         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12249             #include <tmmintrin.h>
12250             int main () {
12251                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12252                 c = _mm_maddubs_epi16 (a, b);
12253                 return 0;
12254             }
12255             ])],
12256             [can_compile_ssse3=yes],
12257             [can_compile_ssse3=no])
12258         AC_LANG_POP([C++])
12259         CXXFLAGS=$save_CXXFLAGS
12260         AC_MSG_RESULT([${can_compile_ssse3}])
12261         if test "${can_compile_ssse3}" = "yes" ; then
12262             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
12263         fi
12265         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
12266         AC_LANG_PUSH([C++])
12267         save_CXXFLAGS=$CXXFLAGS
12268         CXXFLAGS="$CXXFLAGS $flag_sse41"
12269         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12270             #include <smmintrin.h>
12271             int main () {
12272                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12273                 c = _mm_cmpeq_epi64 (a, b);
12274                 return 0;
12275             }
12276             ])],
12277             [can_compile_sse41=yes],
12278             [can_compile_sse41=no])
12279         AC_LANG_POP([C++])
12280         CXXFLAGS=$save_CXXFLAGS
12281         AC_MSG_RESULT([${can_compile_sse41}])
12282         if test "${can_compile_sse41}" = "yes" ; then
12283             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12284         fi
12286         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12287         AC_LANG_PUSH([C++])
12288         save_CXXFLAGS=$CXXFLAGS
12289         CXXFLAGS="$CXXFLAGS $flag_sse42"
12290         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12291             #include <nmmintrin.h>
12292             int main () {
12293                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12294                 c = _mm_cmpgt_epi64 (a, b);
12295                 return 0;
12296             }
12297             ])],
12298             [can_compile_sse42=yes],
12299             [can_compile_sse42=no])
12300         AC_LANG_POP([C++])
12301         CXXFLAGS=$save_CXXFLAGS
12302         AC_MSG_RESULT([${can_compile_sse42}])
12303         if test "${can_compile_sse42}" = "yes" ; then
12304             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12305         fi
12307         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12308         AC_LANG_PUSH([C++])
12309         save_CXXFLAGS=$CXXFLAGS
12310         CXXFLAGS="$CXXFLAGS $flag_avx"
12311         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12312             #include <immintrin.h>
12313             int main () {
12314                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12315                 c = _mm256_xor_ps(a, b);
12316                 return 0;
12317             }
12318             ])],
12319             [can_compile_avx=yes],
12320             [can_compile_avx=no])
12321         AC_LANG_POP([C++])
12322         CXXFLAGS=$save_CXXFLAGS
12323         AC_MSG_RESULT([${can_compile_avx}])
12324         if test "${can_compile_avx}" = "yes" ; then
12325             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12326         fi
12328         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12329         AC_LANG_PUSH([C++])
12330         save_CXXFLAGS=$CXXFLAGS
12331         CXXFLAGS="$CXXFLAGS $flag_avx2"
12332         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12333             #include <immintrin.h>
12334             int main () {
12335                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12336                 c = _mm256_maddubs_epi16(a, b);
12337                 return 0;
12338             }
12339             ])],
12340             [can_compile_avx2=yes],
12341             [can_compile_avx2=no])
12342         AC_LANG_POP([C++])
12343         CXXFLAGS=$save_CXXFLAGS
12344         AC_MSG_RESULT([${can_compile_avx2}])
12345         if test "${can_compile_avx2}" = "yes" ; then
12346             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12347         fi
12349         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12350         AC_LANG_PUSH([C++])
12351         save_CXXFLAGS=$CXXFLAGS
12352         CXXFLAGS="$CXXFLAGS $flag_avx512"
12353         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12354             #include <immintrin.h>
12355             int main () {
12356                 __m512i a = _mm512_loadu_si512(0);
12357                 __m512d v1 = _mm512_load_pd(0);
12358                 // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
12359                 __m512d v2 = _mm512_abs_pd(v1);
12360                 return 0;
12361             }
12362             ])],
12363             [can_compile_avx512=yes],
12364             [can_compile_avx512=no])
12365         AC_LANG_POP([C++])
12366         CXXFLAGS=$save_CXXFLAGS
12367         AC_MSG_RESULT([${can_compile_avx512}])
12368         if test "${can_compile_avx512}" = "yes" ; then
12369             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12370             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
12371         fi
12373         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12374         AC_LANG_PUSH([C++])
12375         save_CXXFLAGS=$CXXFLAGS
12376         CXXFLAGS="$CXXFLAGS $flag_f16c"
12377         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12378             #include <immintrin.h>
12379             int main () {
12380                 __m128i a = _mm_set1_epi32 (0);
12381                 __m128 c;
12382                 c = _mm_cvtph_ps(a);
12383                 return 0;
12384             }
12385             ])],
12386             [can_compile_f16c=yes],
12387             [can_compile_f16c=no])
12388         AC_LANG_POP([C++])
12389         CXXFLAGS=$save_CXXFLAGS
12390         AC_MSG_RESULT([${can_compile_f16c}])
12391         if test "${can_compile_f16c}" = "yes" ; then
12392             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12393         fi
12395         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12396         AC_LANG_PUSH([C++])
12397         save_CXXFLAGS=$CXXFLAGS
12398         CXXFLAGS="$CXXFLAGS $flag_fma"
12399         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12400             #include <immintrin.h>
12401             int main () {
12402                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12403                 d = _mm256_fmadd_ps(a, b, c);
12404                 return 0;
12405             }
12406             ])],
12407             [can_compile_fma=yes],
12408             [can_compile_fma=no])
12409         AC_LANG_POP([C++])
12410         CXXFLAGS=$save_CXXFLAGS
12411         AC_MSG_RESULT([${can_compile_fma}])
12412         if test "${can_compile_fma}" = "yes" ; then
12413             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12414         fi
12416         CXX="$save_CXX"
12417     fi
12420 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12422 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12423     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12424     AC_LANG_PUSH([C])
12425     save_CC="$CC"
12426     CC="$LO_CLANG_CC"
12427     save_CFLAGS=$CFLAGS
12428     CFLAGS="$CFLAGS --ccache-skip -O2 -Werror"
12429     dnl an empty program will do, we're checking the compiler flags
12430     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12431                       [use_ccache=yes], [use_ccache=no])
12432     CFLAGS=$save_CFLAGS
12433     CC=$save_CC
12434     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12435         AC_MSG_RESULT([yes])
12436     else
12437         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12438         AC_MSG_RESULT([no])
12439     fi
12440     AC_LANG_POP([C])
12442     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12443     AC_LANG_PUSH([C++])
12444     save_CXX="$CXX"
12445     CXX="$LO_CLANG_CXX"
12446     save_CXXFLAGS=$CXXFLAGS
12447     CXXFLAGS="$CXXFLAGS --ccache-skip -O2 -Werror"
12448     dnl an empty program will do, we're checking the compiler flags
12449     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12450                       [use_ccache=yes], [use_ccache=no])
12451     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12452         AC_MSG_RESULT([yes])
12453     else
12454         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12455         AC_MSG_RESULT([no])
12456     fi
12457     CXXFLAGS=$save_CXXFLAGS
12458     CXX=$save_CXX
12459     AC_LANG_POP([C++])
12462 AC_SUBST(LO_CLANG_CC)
12463 AC_SUBST(LO_CLANG_CXX)
12464 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12465 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12466 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12467 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12468 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12469 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12470 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12471 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F)
12472 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12473 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12474 AC_SUBST(LO_CLANG_SHOWINCLUDES_PREFIX)
12475 AC_SUBST(CLANG_USE_LD)
12476 AC_SUBST([HAVE_LO_CLANG_DLLEXPORTINLINES])
12478 SYSTEM_GPGMEPP=
12480 AC_MSG_CHECKING([whether to enable gpgmepp])
12481 if test "$enable_gpgmepp" = no; then
12482     AC_MSG_RESULT([no])
12483 elif test "$enable_mpl_subset" = "yes"; then
12484     AC_MSG_RESULT([no (MPL only])
12485 elif test "$enable_fuzzers" = "yes"; then
12486     AC_MSG_RESULT([no (oss-fuzz)])
12487 elif test \( \( "$_os" = "Linux" -o "$_os" = "Darwin" \) -a "$ENABLE_NSS" = TRUE \) -o "$_os" = "WINNT" ; then
12488     AC_MSG_RESULT([yes])
12489     dnl ===================================================================
12490     dnl Check for system gpgme
12491     dnl ===================================================================
12492     AC_MSG_CHECKING([which gpgmepp to use])
12493     if test "$with_system_gpgmepp" = "yes"; then
12494         AC_MSG_RESULT([external])
12495         SYSTEM_GPGMEPP=TRUE
12497         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12498         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12499             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp >= 1.14 development package])], [])
12500         # progress_callback is the only func with plain C linkage
12501         # checking for it also filters out older, KDE-dependent libgpgmepp versions
12502         AC_CHECK_LIB(gpgmepp, progress_callback, [ GPGMEPP_LIBS=-lgpgmepp ],
12503             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12504         AC_CHECK_HEADER(gpgme.h, [],
12505             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12506     else
12507         AC_MSG_RESULT([internal])
12508         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12510         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12511         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12512         if test "$_os" != "WINNT"; then
12513             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12514             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12515         fi
12516     fi
12517     ENABLE_GPGMEPP=TRUE
12518     AC_DEFINE([HAVE_FEATURE_GPGME])
12519     AC_PATH_PROG(GPG, gpg)
12520     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12521     # so let's exclude that manually for the moment
12522     if test -n "$GPG" -a "$_os" != "WINNT"; then
12523         # make sure we not only have a working gpgme, but a full working
12524         # gpg installation to run OpenPGP signature verification
12525         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12526     fi
12527     if test "$_os" = "Linux"; then
12528       uid=`id -u`
12529       AC_MSG_CHECKING([for /run/user/$uid])
12530       if test -d /run/user/$uid; then
12531         AC_MSG_RESULT([yes])
12532         AC_PATH_PROG(GPGCONF, gpgconf)
12534         # Older versions of gpgconf are not working as expected, since
12535         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12536         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12537         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12538         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12539         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12540         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12541         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12542           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12543           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12544           if $GPGCONF --dump-options > /dev/null ; then
12545             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12546               AC_MSG_RESULT([yes])
12547               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12548               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12549             else
12550               AC_MSG_RESULT([no])
12551             fi
12552           else
12553             AC_MSG_RESULT([no. missing or broken gpgconf?])
12554           fi
12555         else
12556           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12557         fi
12558       else
12559         AC_MSG_RESULT([no])
12560      fi
12561    fi
12562 else
12563     AC_MSG_RESULT([no (unsupported OS or missing NSS)])
12565 AC_SUBST(ENABLE_GPGMEPP)
12566 AC_SUBST(SYSTEM_GPGMEPP)
12567 AC_SUBST(GPG_ERROR_CFLAGS)
12568 AC_SUBST(GPG_ERROR_LIBS)
12569 AC_SUBST(LIBASSUAN_CFLAGS)
12570 AC_SUBST(LIBASSUAN_LIBS)
12571 AC_SUBST(GPGMEPP_CFLAGS)
12572 AC_SUBST(GPGMEPP_LIBS)
12574 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12575 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12576     AC_MSG_RESULT([yes])
12577     ENABLE_MEDIAWIKI=TRUE
12578     BUILD_TYPE="$BUILD_TYPE XSLTML"
12579     if test  "x$with_java" = "xno"; then
12580         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12581     fi
12582 else
12583     AC_MSG_RESULT([no])
12584     ENABLE_MEDIAWIKI=
12585     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12587 AC_SUBST(ENABLE_MEDIAWIKI)
12589 AC_MSG_CHECKING([whether to build the Report Builder])
12590 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12591     AC_MSG_RESULT([yes])
12592     ENABLE_REPORTBUILDER=TRUE
12593     AC_MSG_CHECKING([which jfreereport libs to use])
12594     if test "$with_system_jfreereport" = "yes"; then
12595         SYSTEM_JFREEREPORT=TRUE
12596         AC_MSG_RESULT([external])
12597         if test -z $SAC_JAR; then
12598             SAC_JAR=/usr/share/java/sac.jar
12599         fi
12600         if ! test -f $SAC_JAR; then
12601              AC_MSG_ERROR(sac.jar not found.)
12602         fi
12604         if test -z $LIBXML_JAR; then
12605             if test -f /usr/share/java/libxml-1.0.0.jar; then
12606                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12607             elif test -f /usr/share/java/libxml.jar; then
12608                 LIBXML_JAR=/usr/share/java/libxml.jar
12609             else
12610                 AC_MSG_ERROR(libxml.jar replacement not found.)
12611             fi
12612         elif ! test -f $LIBXML_JAR; then
12613             AC_MSG_ERROR(libxml.jar not found.)
12614         fi
12616         if test -z $FLUTE_JAR; then
12617             if test -f /usr/share/java/flute-1.3.0.jar; then
12618                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12619             elif test -f /usr/share/java/flute.jar; then
12620                 FLUTE_JAR=/usr/share/java/flute.jar
12621             else
12622                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12623             fi
12624         elif ! test -f $FLUTE_JAR; then
12625             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12626         fi
12628         if test -z $JFREEREPORT_JAR; then
12629             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12630                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12631             elif test -f /usr/share/java/flow-engine.jar; then
12632                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12633             else
12634                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12635             fi
12636         elif ! test -f  $JFREEREPORT_JAR; then
12637                 AC_MSG_ERROR(jfreereport.jar not found.)
12638         fi
12640         if test -z $LIBLAYOUT_JAR; then
12641             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12642                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12643             elif test -f /usr/share/java/liblayout.jar; then
12644                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12645             else
12646                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12647             fi
12648         elif ! test -f $LIBLAYOUT_JAR; then
12649                 AC_MSG_ERROR(liblayout.jar not found.)
12650         fi
12652         if test -z $LIBLOADER_JAR; then
12653             if test -f /usr/share/java/libloader-1.0.0.jar; then
12654                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
12655             elif test -f /usr/share/java/libloader.jar; then
12656                 LIBLOADER_JAR=/usr/share/java/libloader.jar
12657             else
12658                 AC_MSG_ERROR(libloader.jar replacement not found.)
12659             fi
12660         elif ! test -f  $LIBLOADER_JAR; then
12661             AC_MSG_ERROR(libloader.jar not found.)
12662         fi
12664         if test -z $LIBFORMULA_JAR; then
12665             if test -f /usr/share/java/libformula-0.2.0.jar; then
12666                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
12667             elif test -f /usr/share/java/libformula.jar; then
12668                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
12669             else
12670                 AC_MSG_ERROR(libformula.jar replacement not found.)
12671             fi
12672         elif ! test -f $LIBFORMULA_JAR; then
12673                 AC_MSG_ERROR(libformula.jar not found.)
12674         fi
12676         if test -z $LIBREPOSITORY_JAR; then
12677             if test -f /usr/share/java/librepository-1.0.0.jar; then
12678                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
12679             elif test -f /usr/share/java/librepository.jar; then
12680                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
12681             else
12682                 AC_MSG_ERROR(librepository.jar replacement not found.)
12683             fi
12684         elif ! test -f $LIBREPOSITORY_JAR; then
12685             AC_MSG_ERROR(librepository.jar not found.)
12686         fi
12688         if test -z $LIBFONTS_JAR; then
12689             if test -f /usr/share/java/libfonts-1.0.0.jar; then
12690                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
12691             elif test -f /usr/share/java/libfonts.jar; then
12692                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
12693             else
12694                 AC_MSG_ERROR(libfonts.jar replacement not found.)
12695             fi
12696         elif ! test -f $LIBFONTS_JAR; then
12697                 AC_MSG_ERROR(libfonts.jar not found.)
12698         fi
12700         if test -z $LIBSERIALIZER_JAR; then
12701             if test -f /usr/share/java/libserializer-1.0.0.jar; then
12702                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
12703             elif test -f /usr/share/java/libserializer.jar; then
12704                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
12705             else
12706                 AC_MSG_ERROR(libserializer.jar replacement not found.)
12707             fi
12708         elif ! test -f $LIBSERIALIZER_JAR; then
12709                 AC_MSG_ERROR(libserializer.jar not found.)
12710         fi
12712         if test -z $LIBBASE_JAR; then
12713             if test -f /usr/share/java/libbase-1.0.0.jar; then
12714                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
12715             elif test -f /usr/share/java/libbase.jar; then
12716                 LIBBASE_JAR=/usr/share/java/libbase.jar
12717             else
12718                 AC_MSG_ERROR(libbase.jar replacement not found.)
12719             fi
12720         elif ! test -f $LIBBASE_JAR; then
12721             AC_MSG_ERROR(libbase.jar not found.)
12722         fi
12724     else
12725         AC_MSG_RESULT([internal])
12726         SYSTEM_JFREEREPORT=
12727         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
12728         NEED_ANT=TRUE
12729     fi
12730 else
12731     AC_MSG_RESULT([no])
12732     ENABLE_REPORTBUILDER=
12733     SYSTEM_JFREEREPORT=
12735 AC_SUBST(ENABLE_REPORTBUILDER)
12736 AC_SUBST(SYSTEM_JFREEREPORT)
12737 AC_SUBST(SAC_JAR)
12738 AC_SUBST(LIBXML_JAR)
12739 AC_SUBST(FLUTE_JAR)
12740 AC_SUBST(JFREEREPORT_JAR)
12741 AC_SUBST(LIBBASE_JAR)
12742 AC_SUBST(LIBLAYOUT_JAR)
12743 AC_SUBST(LIBLOADER_JAR)
12744 AC_SUBST(LIBFORMULA_JAR)
12745 AC_SUBST(LIBREPOSITORY_JAR)
12746 AC_SUBST(LIBFONTS_JAR)
12747 AC_SUBST(LIBSERIALIZER_JAR)
12749 # scripting provider for BeanShell?
12750 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
12751 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
12752     AC_MSG_RESULT([yes])
12753     ENABLE_SCRIPTING_BEANSHELL=TRUE
12755     dnl ===================================================================
12756     dnl Check for system beanshell
12757     dnl ===================================================================
12758     AC_MSG_CHECKING([which beanshell to use])
12759     if test "$with_system_beanshell" = "yes"; then
12760         AC_MSG_RESULT([external])
12761         SYSTEM_BSH=TRUE
12762         if test -z $BSH_JAR; then
12763             BSH_JAR=/usr/share/java/bsh.jar
12764         fi
12765         if ! test -f $BSH_JAR; then
12766             AC_MSG_ERROR(bsh.jar not found.)
12767         fi
12768     else
12769         AC_MSG_RESULT([internal])
12770         SYSTEM_BSH=
12771         BUILD_TYPE="$BUILD_TYPE BSH"
12772     fi
12773 else
12774     AC_MSG_RESULT([no])
12775     ENABLE_SCRIPTING_BEANSHELL=
12776     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
12778 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
12779 AC_SUBST(SYSTEM_BSH)
12780 AC_SUBST(BSH_JAR)
12782 # scripting provider for JavaScript?
12783 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
12784 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
12785     AC_MSG_RESULT([yes])
12786     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
12788     dnl ===================================================================
12789     dnl Check for system rhino
12790     dnl ===================================================================
12791     AC_MSG_CHECKING([which rhino to use])
12792     if test "$with_system_rhino" = "yes"; then
12793         AC_MSG_RESULT([external])
12794         SYSTEM_RHINO=TRUE
12795         if test -z $RHINO_JAR; then
12796             RHINO_JAR=/usr/share/java/js.jar
12797         fi
12798         if ! test -f $RHINO_JAR; then
12799             AC_MSG_ERROR(js.jar not found.)
12800         fi
12801     else
12802         AC_MSG_RESULT([internal])
12803         SYSTEM_RHINO=
12804         BUILD_TYPE="$BUILD_TYPE RHINO"
12805         NEED_ANT=TRUE
12806     fi
12807 else
12808     AC_MSG_RESULT([no])
12809     ENABLE_SCRIPTING_JAVASCRIPT=
12810     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
12812 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
12813 AC_SUBST(SYSTEM_RHINO)
12814 AC_SUBST(RHINO_JAR)
12816 # This is only used in Qt5/Qt6/KF5 checks to determine if /usr/lib64
12817 # paths should be added to library search path. So lets put all 64-bit
12818 # platforms there.
12819 supports_multilib=
12820 case "$host_cpu" in
12821 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el)
12822     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
12823         supports_multilib="yes"
12824     fi
12825     ;;
12827     ;;
12828 esac
12830 dnl ===================================================================
12831 dnl QT5 Integration
12832 dnl ===================================================================
12834 QT5_CFLAGS=""
12835 QT5_LIBS=""
12836 QMAKE5="qmake"
12837 MOC5="moc"
12838 QT5_GOBJECT_CFLAGS=""
12839 QT5_GOBJECT_LIBS=""
12840 QT5_HAVE_GOBJECT=""
12841 QT5_PLATFORMS_SRCDIR=""
12842 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12843         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
12844         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12845 then
12846     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
12847     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
12849     if test -n "$supports_multilib"; then
12850         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
12851     fi
12853     qt5_test_include="QtWidgets/qapplication.h"
12854     if test "$_os" = "Emscripten"; then
12855         qt5_test_library="libQt5Widgets.a"
12856     else
12857         qt5_test_library="libQt5Widgets.so"
12858     fi
12860     dnl Check for qmake5
12861     if test -n "$QT5DIR"; then
12862         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
12863     else
12864         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
12865     fi
12866     if test "$QMAKE5" = "no"; then
12867         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12868     else
12869         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
12870         if test -z "$qmake5_test_ver"; then
12871             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12872         fi
12873         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
12874         qt5_minimal_minor="6"
12875         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
12876             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
12877         else
12878             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
12879         fi
12880     fi
12882     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
12883     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
12884     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
12885     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
12887     AC_MSG_CHECKING([for Qt5 headers])
12888     qt5_incdir="no"
12889     for inc_dir in $qt5_incdirs; do
12890         if test -r "$inc_dir/$qt5_test_include"; then
12891             qt5_incdir="$inc_dir"
12892             break
12893         fi
12894     done
12895     AC_MSG_RESULT([$qt5_incdir])
12896     if test "x$qt5_incdir" = "xno"; then
12897         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12898     fi
12899     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
12900     AC_LANG_PUSH([C++])
12901     save_CPPFLAGS=$CPPFLAGS
12902     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
12903     AC_CHECK_HEADER(QtCore/qconfig.h, [],
12904         [AC_MSG_ERROR(qconfig.h header not found.)], [])
12905     CPPFLAGS=$save_CPPFLAGS
12906     AC_LANG_POP([C++])
12908     AC_MSG_CHECKING([for Qt5 libraries])
12909     qt5_libdir="no"
12910     for lib_dir in $qt5_libdirs; do
12911         if test -r "$lib_dir/$qt5_test_library"; then
12912             qt5_libdir="$lib_dir"
12913             break
12914         fi
12915     done
12916     AC_MSG_RESULT([$qt5_libdir])
12917     if test "x$qt5_libdir" = "xno"; then
12918         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12919     fi
12921     if test "$_os" = "Emscripten"; then
12922         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
12923             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
12924         fi
12925         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
12926             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
12927         fi
12929         EMSDK_LLVM_NM="$(em-config EMSCRIPTEN_ROOT)"/../bin/llvm-nm
12930         if ! test -x "$EMSDK_LLVM_NM"; then
12931             AC_MSG_ERROR([Missing llvm-nm expected to be found at "$EMSDK_LLVM_NM".])
12932         fi
12933         if test ! -f "${qt5_libdir}"/libQt5Gui.a; then
12934             AC_MSG_ERROR([No Qt5 WASM libQt5Gui.a in ${qt5_libdir}])
12935         fi
12936         QT5_WASM_SJLJ="`${EMSDK_LLVM_NM} "${qt5_libdir}"/libQt5Gui.a 2>/dev/null | $GREP emscripten_longjmp`"
12937         if test "$ENABLE_WASM_EXCEPTIONS" = TRUE -a -n "$QT5_WASM_SJLJ"; then
12938             AC_MSG_ERROR(['emscripten_longjmp' symbol found in libQt5Gui.a (missing '-s SUPPORT_LONGJMP=wasm'). See static/README.wasm.md.])
12939         fi
12940         if test "$ENABLE_WASM_EXCEPTIONS" != TRUE -a -z "$QT5_WASM_SJLJ"; then
12941             AC_MSG_ERROR(['emscripten_longjmp' symbol not found in libQt5Gui.a. You probably use an incompatible Qt build with '-s SUPPORT_LONGJMP=wasm'.])
12942         fi
12943     fi
12945     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
12946     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12947     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
12948     if test "$_os" = "Emscripten"; then
12949         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
12950     fi
12952     if test "$USING_X11" = TRUE; then
12953         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
12954         PKG_CHECK_MODULES(QT5_XCB_ICCCM,[xcb-icccm],[
12955             QT5_HAVE_XCB_ICCCM=1
12956             AC_DEFINE(QT5_HAVE_XCB_ICCCM)
12957         ],[
12958             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)])
12959             add_warning "XCB ICCCM not found, which is needed for Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)"
12960         ])
12961         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
12962         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
12963         QT5_USING_X11=1
12964         AC_DEFINE(QT5_USING_X11)
12965     fi
12967     dnl Check for Meta Object Compiler
12969     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
12970     if test "$MOC5" = "no"; then
12971         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
12972 the root of your Qt installation by exporting QT5DIR before running "configure".])
12973     fi
12975     if test "$test_gstreamer_1_0" = yes; then
12976         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
12977                 QT5_HAVE_GOBJECT=1
12978                 AC_DEFINE(QT5_HAVE_GOBJECT)
12979             ],
12980             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
12981         )
12982     fi
12984 AC_SUBST(QT5_CFLAGS)
12985 AC_SUBST(QT5_LIBS)
12986 AC_SUBST(MOC5)
12987 AC_SUBST(QT5_GOBJECT_CFLAGS)
12988 AC_SUBST(QT5_GOBJECT_LIBS)
12989 AC_SUBST(QT5_HAVE_GOBJECT)
12990 AC_SUBST(QT5_PLATFORMS_SRCDIR)
12992 dnl ===================================================================
12993 dnl QT6 Integration
12994 dnl ===================================================================
12996 QT6_CFLAGS=""
12997 QT6_LIBS=""
12998 QMAKE6="qmake"
12999 MOC6="moc"
13000 QT6_PLATFORMS_SRCDIR=""
13001 if test \( "$test_qt6" = "yes" -a "$ENABLE_QT6" = "TRUE" \)
13002 then
13003     qt6_incdirs="$QT6INC /usr/include/qt6 /usr/include $x_includes"
13004     qt6_libdirs="$QT6LIB /usr/lib/qt6 /usr/lib $x_libraries"
13006     if test -n "$supports_multilib"; then
13007         qt6_libdirs="$qt6_libdirs /usr/lib64/qt6 /usr/lib64/qt /usr/lib64"
13008     fi
13010     qt6_test_include="QtWidgets/qapplication.h"
13011     if test "$_os" = "Emscripten"; then
13012         qt6_test_library="libQt6Widgets.a"
13013     else
13014         qt6_test_library="libQt6Widgets.so"
13015     fi
13017     dnl Check for qmake6
13018     if test -n "$QT6DIR"; then
13019         AC_PATH_PROG(QMAKE6, [qmake], no, [$QT6DIR/bin])
13020     else
13021         AC_PATH_PROGS(QMAKE6, [qmake-qt6 qmake], no)
13022     fi
13023     if test "$QMAKE6" = "no"; then
13024         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13025     else
13026         qmake6_test_ver="`$QMAKE6 -v 2>&1 | $SED -n -e 's/^Using Qt version \(6\.[[0-9.]]\+\).*$/\1/p'`"
13027         if test -z "$qmake6_test_ver"; then
13028             AC_MSG_ERROR([Wrong qmake for Qt6 found. Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13029         fi
13030         AC_MSG_NOTICE([Detected Qt6 version: $qmake6_test_ver])
13031     fi
13033     qt6_incdirs="`$QMAKE6 -query QT_INSTALL_HEADERS` $qt6_incdirs"
13034     qt6_libdirs="`$QMAKE6 -query QT_INSTALL_LIBS` $qt6_libdirs"
13035     qt6_platformsdir="`$QMAKE6 -query QT_INSTALL_PLUGINS`/platforms"
13036     QT6_PLATFORMS_SRCDIR="$qt6_platformsdir"
13038     AC_MSG_CHECKING([for Qt6 headers])
13039     qt6_incdir="no"
13040     for inc_dir in $qt6_incdirs; do
13041         if test -r "$inc_dir/$qt6_test_include"; then
13042             qt6_incdir="$inc_dir"
13043             break
13044         fi
13045     done
13046     AC_MSG_RESULT([$qt6_incdir])
13047     if test "x$qt6_incdir" = "xno"; then
13048         AC_MSG_ERROR([Qt6 headers not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13049     fi
13050     # check for scenario: qt6-qtbase-devel-*.86_64 installed but host is i686
13051     AC_LANG_PUSH([C++])
13052     save_CPPFLAGS=$CPPFLAGS
13053     CPPFLAGS="${CPPFLAGS} -I${qt6_incdir}"
13054     AC_CHECK_HEADER(QtCore/qconfig.h, [],
13055         [AC_MSG_ERROR(qconfig.h header not found.)], [])
13056     CPPFLAGS=$save_CPPFLAGS
13057     AC_LANG_POP([C++])
13059     AC_MSG_CHECKING([for Qt6 libraries])
13060     qt6_libdir="no"
13061     for lib_dir in $qt6_libdirs; do
13062         if test -r "$lib_dir/$qt6_test_library"; then
13063             qt6_libdir="$lib_dir"
13064             break
13065         fi
13066     done
13067     AC_MSG_RESULT([$qt6_libdir])
13068     if test "x$qt6_libdir" = "xno"; then
13069         AC_MSG_ERROR([Qt6 libraries not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13070     fi
13072     if test "$_os" = "Emscripten"; then
13073         if test ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html ; then
13074             QT6_PLATFORMS_SRCDIR="${QT6_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
13075         fi
13076         if test ! -f "${qt6_platformsdir}"/libqwasm.a -o ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html; then
13077             AC_MSG_ERROR([No Qt6 WASM QPA plugin found in ${qt6_platformsdir} or ${QT6_PLATFORMS_SRCDIR}])
13078         fi
13079     fi
13081     QT6_CFLAGS="-I$qt6_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13082     QT6_CFLAGS=$(printf '%s' "$QT6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13083     QT6_LIBS="-L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
13084     if test "$_os" = "Emscripten"; then
13085         QT6_LIBS="$QT6_LIBS -lqtpcre2 -lQt6EventDispatcherSupport -lQt6FontDatabaseSupport -L${qt6_platformsdir} -lqwasm"
13086     fi
13088     if test "$USING_X11" = TRUE; then
13089         PKG_CHECK_MODULES(QT6_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for key modifier handling in X11.])])
13090         QT6_CFLAGS="$QT6_CFLAGS $QT6_XCB_CFLAGS"
13091         QT6_LIBS="$QT6_LIBS $QT6_XCB_LIBS"
13092         QT6_USING_X11=1
13093         AC_DEFINE(QT6_USING_X11)
13094     fi
13096     dnl Check for Meta Object Compiler
13098     AC_PATH_PROGS( MOC6, [moc-qt6 moc], no, [`dirname $qt6_libdir`/libexec:$QT6DIR/libexec:$PATH])
13099     if test "$MOC6" = "no"; then
13100         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13101 the root of your Qt installation by exporting QT6DIR before running "configure".])
13102     fi
13104 AC_SUBST(QT6_CFLAGS)
13105 AC_SUBST(QT6_LIBS)
13106 AC_SUBST(MOC6)
13107 AC_SUBST(QT6_PLATFORMS_SRCDIR)
13109 dnl ===================================================================
13110 dnl KF5 Integration
13111 dnl ===================================================================
13113 KF5_CFLAGS=""
13114 KF5_LIBS=""
13115 KF5_CONFIG="kf5-config"
13116 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13117         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13118 then
13119     if test "$OS" = "HAIKU"; then
13120         haiku_arch="`echo $RTL_ARCH | tr X x`"
13121         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13122         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13123     fi
13125     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
13126     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
13127     if test -n "$supports_multilib"; then
13128         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
13129     fi
13131     kf5_test_include="KF5/KIOFileWidgets/KFileWidget"
13132     kf5_test_library="libKF5KIOFileWidgets.so"
13133     kf5_libdirs="$qt5_libdir $kf5_libdirs"
13135     dnl kf5 KDE4 support compatibility installed
13136     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
13137     if test "$KF5_CONFIG" != "no"; then
13138         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
13139         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
13140     fi
13142     dnl Check for KF5 headers
13143     AC_MSG_CHECKING([for KF5 headers])
13144     kf5_incdir="no"
13145     for kf5_check in $kf5_incdirs; do
13146         if test -r "$kf5_check/$kf5_test_include"; then
13147             kf5_incdir="$kf5_check/KF5"
13148             break
13149         fi
13150     done
13151     AC_MSG_RESULT([$kf5_incdir])
13152     if test "x$kf5_incdir" = "xno"; then
13153         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13154     fi
13156     dnl Check for KF5 libraries
13157     AC_MSG_CHECKING([for KF5 libraries])
13158     kf5_libdir="no"
13159     for kf5_check in $kf5_libdirs; do
13160         if test -r "$kf5_check/$kf5_test_library"; then
13161             kf5_libdir="$kf5_check"
13162             break
13163         fi
13164     done
13166     AC_MSG_RESULT([$kf5_libdir])
13167     if test "x$kf5_libdir" = "xno"; then
13168         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13169     fi
13171     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"
13172     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13173     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13175     if test "$USING_X11" = TRUE; then
13176         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
13177     fi
13179     AC_LANG_PUSH([C++])
13180     save_CXXFLAGS=$CXXFLAGS
13181     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
13182     AC_MSG_CHECKING([whether KDE is >= 5.0])
13183        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13184 #include <kcoreaddons_version.h>
13186 int main(int argc, char **argv) {
13187        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
13188        else return 1;
13190        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13191     CXXFLAGS=$save_CXXFLAGS
13192     AC_LANG_POP([C++])
13194 AC_SUBST(KF5_CFLAGS)
13195 AC_SUBST(KF5_LIBS)
13197 dnl ===================================================================
13198 dnl Test whether to include Evolution 2 support
13199 dnl ===================================================================
13200 AC_MSG_CHECKING([whether to enable evolution 2 support])
13201 if test "$enable_evolution2" = yes; then
13202     AC_MSG_RESULT([yes])
13203     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
13204     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13205     FilterLibs "${GOBJECT_LIBS}"
13206     GOBJECT_LIBS="${filteredlibs}"
13207     ENABLE_EVOAB2="TRUE"
13208 else
13209     AC_MSG_RESULT([no])
13211 AC_SUBST(ENABLE_EVOAB2)
13212 AC_SUBST(GOBJECT_CFLAGS)
13213 AC_SUBST(GOBJECT_LIBS)
13215 dnl ===================================================================
13216 dnl Test which themes to include
13217 dnl ===================================================================
13218 AC_MSG_CHECKING([which themes to include])
13219 # if none given use default subset of available themes
13220 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
13221     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"
13224 WITH_THEMES=""
13225 if test "x$with_theme" != "xno"; then
13226     for theme in $with_theme; do
13227         case $theme in
13228         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" ;;
13229         default) real_theme=colibre ;;
13230         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
13231         esac
13232         WITH_THEMES=`echo "$WITH_THEMES $real_theme"|tr '\ ' '\n'|sort|uniq|tr '\n' '\ '`
13233     done
13235 AC_MSG_RESULT([$WITH_THEMES])
13236 AC_SUBST([WITH_THEMES])
13237 # FIXME: remove this, and the convenience default->colibre remapping after a grace period
13238 for theme in $with_theme; do
13239     case $theme in
13240     default) AC_MSG_WARN([--with-theme=default is deprecated and will be removed, use --with-theme=colibre]) ;;
13241     *) ;;
13242     esac
13243 done
13245 ###############################################################################
13246 # Extensions checking
13247 ###############################################################################
13248 AC_MSG_CHECKING([for extensions integration])
13249 if test "x$enable_extension_integration" != "xno"; then
13250     WITH_EXTENSION_INTEGRATION=TRUE
13251     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
13252     AC_MSG_RESULT([yes, use integration])
13253 else
13254     WITH_EXTENSION_INTEGRATION=
13255     AC_MSG_RESULT([no, do not integrate])
13257 AC_SUBST(WITH_EXTENSION_INTEGRATION)
13259 dnl Should any extra extensions be included?
13260 dnl There are standalone tests for each of these below.
13261 WITH_EXTRA_EXTENSIONS=
13262 AC_SUBST([WITH_EXTRA_EXTENSIONS])
13264 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
13265 if test "x$with_java" != "xno"; then
13266     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
13269 AC_MSG_CHECKING([whether to build opens___.ttf])
13270 if test "$enable_build_opensymbol" = "yes"; then
13271     AC_MSG_RESULT([yes])
13272     AC_PATH_PROG(FONTFORGE, fontforge)
13273     if test -z "$FONTFORGE"; then
13274         AC_MSG_ERROR([fontforge not installed])
13275     fi
13276 else
13277     AC_MSG_RESULT([no])
13278     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
13280 AC_SUBST(FONTFORGE)
13282 dnl ===================================================================
13283 dnl Test whether to include fonts
13284 dnl ===================================================================
13285 AC_MSG_CHECKING([whether to include third-party fonts])
13286 if test "$with_fonts" != "no"; then
13287     AC_MSG_RESULT([yes])
13288     WITH_FONTS=TRUE
13289     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
13290     AC_DEFINE(HAVE_MORE_FONTS)
13291 else
13292     AC_MSG_RESULT([no])
13293     WITH_FONTS=
13294     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
13296 AC_SUBST(WITH_FONTS)
13299 dnl ===================================================================
13300 dnl Test whether to enable online update service
13301 dnl ===================================================================
13302 AC_MSG_CHECKING([whether to enable online update])
13303 ENABLE_ONLINE_UPDATE=
13304 ENABLE_ONLINE_UPDATE_MAR=
13305 UPDATE_CONFIG=
13306 if test "$enable_online_update" = ""; then
13307     AC_MSG_RESULT([no])
13308 else
13309     if test "$enable_online_update" = "mar"; then
13310         AC_MSG_RESULT([yes - MAR-based online update])
13311         ENABLE_ONLINE_UPDATE_MAR="TRUE"
13312         if test "$with_update_config" = ""; then
13313             AC_MSG_ERROR([mar based online updater needs an update config specified with "with-update-config])
13314         fi
13315         UPDATE_CONFIG="$with_update_config"
13316         AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
13317     elif test "$enable_online_update" = "yes"; then
13318         AC_MSG_RESULT([yes])
13319         ENABLE_ONLINE_UPDATE="TRUE"
13320     else
13321         AC_MSG_RESULT([no])
13322     fi
13324 AC_SUBST(ENABLE_ONLINE_UPDATE)
13325 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
13326 AC_SUBST(UPDATE_CONFIG)
13329 PRIVACY_POLICY_URL="$with_privacy_policy_url"
13330 if test "$ENABLE_ONLINE_UPDATE" = TRUE -o "$ENABLE_BREAKPAD" = "TRUE"; then
13331     if test "x$with_privacy_policy_url" = "xundefined"; then
13332         AC_MSG_FAILURE([online update or breakpad/crashreporting are enabled, but no --with-privacy-policy-url=... was provided])
13333     fi
13335 AC_SUBST(PRIVACY_POLICY_URL)
13336 dnl ===================================================================
13337 dnl Test whether we need bzip2
13338 dnl ===================================================================
13339 SYSTEM_BZIP2=
13340 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE"; then
13341     AC_MSG_CHECKING([whether to use system bzip2])
13342     if test "$with_system_bzip2" = yes; then
13343         SYSTEM_BZIP2=TRUE
13344         AC_MSG_RESULT([yes])
13345         PKG_CHECK_MODULES(BZIP2, bzip2)
13346         FilterLibs "${BZIP2_LIBS}"
13347         BZIP2_LIBS="${filteredlibs}"
13348     else
13349         AC_MSG_RESULT([no])
13350         BUILD_TYPE="$BUILD_TYPE BZIP2"
13351     fi
13353 AC_SUBST(SYSTEM_BZIP2)
13354 AC_SUBST(BZIP2_CFLAGS)
13355 AC_SUBST(BZIP2_LIBS)
13357 dnl ===================================================================
13358 dnl Test whether to enable extension update
13359 dnl ===================================================================
13360 AC_MSG_CHECKING([whether to enable extension update])
13361 ENABLE_EXTENSION_UPDATE=
13362 if test "x$enable_extension_update" = "xno"; then
13363     AC_MSG_RESULT([no])
13364 else
13365     AC_MSG_RESULT([yes])
13366     ENABLE_EXTENSION_UPDATE="TRUE"
13367     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
13368     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
13370 AC_SUBST(ENABLE_EXTENSION_UPDATE)
13373 dnl ===================================================================
13374 dnl Test whether to create MSI with LIMITUI=1 (silent install)
13375 dnl ===================================================================
13376 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
13377 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
13378     AC_MSG_RESULT([no])
13379     ENABLE_SILENT_MSI=
13380 else
13381     AC_MSG_RESULT([yes])
13382     ENABLE_SILENT_MSI=TRUE
13383     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
13385 AC_SUBST(ENABLE_SILENT_MSI)
13387 AC_MSG_CHECKING([whether and how to use Xinerama])
13388 if test "$_os" = "Linux" -o "$_os" = "FreeBSD"; then
13389     if test "$x_libraries" = "default_x_libraries"; then
13390         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
13391         if test "x$XINERAMALIB" = x; then
13392            XINERAMALIB="/usr/lib"
13393         fi
13394     else
13395         XINERAMALIB="$x_libraries"
13396     fi
13397     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13398         # we have both versions, let the user decide but use the dynamic one
13399         # per default
13400         USE_XINERAMA=TRUE
13401         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13402             XINERAMA_LINK=dynamic
13403         else
13404             XINERAMA_LINK=static
13405         fi
13406     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13407         # we have only the dynamic version
13408         USE_XINERAMA=TRUE
13409         XINERAMA_LINK=dynamic
13410     elif test -e "$XINERAMALIB/libXinerama.a"; then
13411         # static version
13412         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13413             USE_XINERAMA=TRUE
13414             XINERAMA_LINK=static
13415         else
13416             USE_XINERAMA=
13417             XINERAMA_LINK=none
13418         fi
13419     else
13420         # no Xinerama
13421         USE_XINERAMA=
13422         XINERAMA_LINK=none
13423     fi
13424     if test "$USE_XINERAMA" = "TRUE"; then
13425         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13426         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13427             [AC_MSG_ERROR(Xinerama header not found.)], [])
13428         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13429         if test "x$XEXTLIB" = x; then
13430            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13431         fi
13432         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13433         if test "$_os" = "FreeBSD"; then
13434             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13435         fi
13436         if test "$_os" = "Linux"; then
13437             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13438         fi
13439         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13440             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13441     else
13442         AC_MSG_RESULT([no, libXinerama not found or wrong architecture.])
13443     fi
13444 else
13445     USE_XINERAMA=
13446     XINERAMA_LINK=none
13447     AC_MSG_RESULT([no])
13449 AC_SUBST(USE_XINERAMA)
13450 AC_SUBST(XINERAMA_LINK)
13452 dnl ===================================================================
13453 dnl Test whether to build cairo or rely on the system version
13454 dnl ===================================================================
13456 if test "$test_cairo" = "yes"; then
13457     AC_MSG_CHECKING([whether to use the system cairo])
13459     : ${with_system_cairo:=$with_system_libs}
13460     if test "$with_system_cairo" = "yes"; then
13461         SYSTEM_CAIRO=TRUE
13462         AC_MSG_RESULT([yes])
13464         PKG_CHECK_MODULES( CAIRO, cairo >= 1.8.0 )
13465         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13466         FilterLibs "${CAIRO_LIBS}"
13467         CAIRO_LIBS="${filteredlibs}"
13469         if test "$test_xrender" = "yes"; then
13470             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13471             AC_LANG_PUSH([C])
13472             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13473 #ifdef PictStandardA8
13474 #else
13475       return fail;
13476 #endif
13477 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13479             AC_LANG_POP([C])
13480         fi
13481     else
13482         AC_MSG_RESULT([no])
13483         BUILD_TYPE="$BUILD_TYPE CAIRO"
13484     fi
13486     if test "$enable_cairo_canvas" != no; then
13487         AC_DEFINE(ENABLE_CAIRO_CANVAS)
13488         ENABLE_CAIRO_CANVAS=TRUE
13489     fi
13492 AC_SUBST(CAIRO_CFLAGS)
13493 AC_SUBST(CAIRO_LIBS)
13494 AC_SUBST(ENABLE_CAIRO_CANVAS)
13495 AC_SUBST(SYSTEM_CAIRO)
13497 dnl ===================================================================
13498 dnl Test whether to use avahi
13499 dnl ===================================================================
13500 if test "$_os" = "WINNT"; then
13501     # Windows uses bundled mDNSResponder
13502     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13503 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13504     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13505                       [ENABLE_AVAHI="TRUE"])
13506     AC_DEFINE(HAVE_FEATURE_AVAHI)
13507     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13508     FilterLibs "${AVAHI_LIBS}"
13509     AVAHI_LIBS="${filteredlibs}"
13512 AC_SUBST(ENABLE_AVAHI)
13513 AC_SUBST(AVAHI_CFLAGS)
13514 AC_SUBST(AVAHI_LIBS)
13516 dnl ===================================================================
13517 dnl Test whether to use liblangtag
13518 dnl ===================================================================
13519 SYSTEM_LIBLANGTAG=
13520 AC_MSG_CHECKING([whether to use system liblangtag])
13521 if test "$with_system_liblangtag" = yes; then
13522     SYSTEM_LIBLANGTAG=TRUE
13523     AC_MSG_RESULT([yes])
13524     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
13525     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
13526     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
13527     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13528     FilterLibs "${LIBLANGTAG_LIBS}"
13529     LIBLANGTAG_LIBS="${filteredlibs}"
13530 else
13531     SYSTEM_LIBLANGTAG=
13532     AC_MSG_RESULT([no])
13533     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
13534     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
13535     if test "$COM" = "MSC"; then
13536         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
13537     else
13538         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
13539     fi
13541 AC_SUBST(SYSTEM_LIBLANGTAG)
13542 AC_SUBST(LIBLANGTAG_CFLAGS)
13543 AC_SUBST(LIBLANGTAG_LIBS)
13545 dnl ===================================================================
13546 dnl Test whether to build libpng or rely on the system version
13547 dnl ===================================================================
13549 LIBPNG_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/libpng"
13550 LIBPNG_LIBS_internal="-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"
13551 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng])
13553 dnl ===================================================================
13554 dnl Test whether to build libwebp or rely on the system version
13555 dnl ===================================================================
13557 libo_CHECK_SYSTEM_MODULE([libwebp],[LIBWEBP],[libwebp])
13559 dnl ===================================================================
13560 dnl Check for runtime JVM search path
13561 dnl ===================================================================
13562 if test "$ENABLE_JAVA" != ""; then
13563     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
13564     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
13565         AC_MSG_RESULT([yes])
13566         if ! test -d "$with_jvm_path"; then
13567             AC_MSG_ERROR(["$with_jvm_path" not a directory])
13568         fi
13569         if ! test -d "$with_jvm_path"jvm; then
13570             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
13571         fi
13572         JVM_ONE_PATH_CHECK="$with_jvm_path"
13573         AC_SUBST(JVM_ONE_PATH_CHECK)
13574     else
13575         AC_MSG_RESULT([no])
13576     fi
13579 dnl ===================================================================
13580 dnl Test for the presence of Ant and that it works
13581 dnl ===================================================================
13583 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
13584     ANT_HOME=; export ANT_HOME
13585     WITH_ANT_HOME=; export WITH_ANT_HOME
13586     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
13587         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
13588             if test "$_os" = "WINNT"; then
13589                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
13590             else
13591                 with_ant_home="$LODE_HOME/opt/ant"
13592             fi
13593         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
13594             with_ant_home="$LODE_HOME/opt/ant"
13595         fi
13596     fi
13597     if test -z "$with_ant_home"; then
13598         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
13599     else
13600         if test "$_os" = "WINNT"; then
13601             # AC_PATH_PROGS needs unix path
13602             with_ant_home=`cygpath -u "$with_ant_home"`
13603         fi
13604         AbsolutePath "$with_ant_home"
13605         with_ant_home=$absolute_path
13606         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
13607         WITH_ANT_HOME=$with_ant_home
13608         ANT_HOME=$with_ant_home
13609     fi
13611     if test -z "$ANT"; then
13612         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
13613     else
13614         # resolve relative or absolute symlink
13615         while test -h "$ANT"; do
13616             a_cwd=`pwd`
13617             a_basename=`basename "$ANT"`
13618             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
13619             cd "`dirname "$ANT"`"
13620             cd "`dirname "$a_script"`"
13621             ANT="`pwd`"/"`basename "$a_script"`"
13622             cd "$a_cwd"
13623         done
13625         AC_MSG_CHECKING([if $ANT works])
13626         mkdir -p conftest.dir
13627         a_cwd=$(pwd)
13628         cd conftest.dir
13629         cat > conftest.java << EOF
13630         public class conftest {
13631             int testmethod(int a, int b) {
13632                     return a + b;
13633             }
13634         }
13637         cat > conftest.xml << EOF
13638         <project name="conftest" default="conftest">
13639         <target name="conftest">
13640             <javac srcdir="." includes="conftest.java">
13641             </javac>
13642         </target>
13643         </project>
13646         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
13647         if test $? = 0 -a -f ./conftest.class; then
13648             AC_MSG_RESULT([Ant works])
13649             if test -z "$WITH_ANT_HOME"; then
13650                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
13651                 if test -z "$ANT_HOME"; then
13652                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
13653                 fi
13654             else
13655                 ANT_HOME="$WITH_ANT_HOME"
13656             fi
13657         else
13658             echo "configure: Ant test failed" >&5
13659             cat conftest.java >&5
13660             cat conftest.xml >&5
13661             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
13662         fi
13663         cd "$a_cwd"
13664         rm -fr conftest.dir
13665     fi
13666     if test -z "$ANT_HOME"; then
13667         ANT_HOME="NO_ANT_HOME"
13668     else
13669         PathFormat "$ANT_HOME"
13670         ANT_HOME="$formatted_path"
13671         PathFormat "$ANT"
13672         ANT="$formatted_path"
13673     fi
13675     dnl Checking for ant.jar
13676     if test "$ANT_HOME" != "NO_ANT_HOME"; then
13677         AC_MSG_CHECKING([Ant lib directory])
13678         if test -f $ANT_HOME/lib/ant.jar; then
13679             ANT_LIB="$ANT_HOME/lib"
13680         else
13681             if test -f $ANT_HOME/ant.jar; then
13682                 ANT_LIB="$ANT_HOME"
13683             else
13684                 if test -f /usr/share/java/ant.jar; then
13685                     ANT_LIB=/usr/share/java
13686                 else
13687                     if test -f /usr/share/ant-core/lib/ant.jar; then
13688                         ANT_LIB=/usr/share/ant-core/lib
13689                     else
13690                         if test -f $ANT_HOME/lib/ant/ant.jar; then
13691                             ANT_LIB="$ANT_HOME/lib/ant"
13692                         else
13693                             if test -f /usr/share/lib/ant/ant.jar; then
13694                                 ANT_LIB=/usr/share/lib/ant
13695                             else
13696                                 AC_MSG_ERROR([Ant libraries not found!])
13697                             fi
13698                         fi
13699                     fi
13700                 fi
13701             fi
13702         fi
13703         PathFormat "$ANT_LIB"
13704         ANT_LIB="$formatted_path"
13705         AC_MSG_RESULT([Ant lib directory found.])
13706     fi
13708     ant_minver=1.6.0
13709     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
13711     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
13712     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
13713     ant_version_major=`echo $ant_version | cut -d. -f1`
13714     ant_version_minor=`echo $ant_version | cut -d. -f2`
13715     echo "configure: ant_version $ant_version " >&5
13716     echo "configure: ant_version_major $ant_version_major " >&5
13717     echo "configure: ant_version_minor $ant_version_minor " >&5
13718     if test "$ant_version_major" -ge "2"; then
13719         AC_MSG_RESULT([yes, $ant_version])
13720     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
13721         AC_MSG_RESULT([yes, $ant_version])
13722     else
13723         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
13724     fi
13726     rm -f conftest* core core.* *.core
13728 AC_SUBST(ANT)
13729 AC_SUBST(ANT_HOME)
13730 AC_SUBST(ANT_LIB)
13732 OOO_JUNIT_JAR=
13733 HAMCREST_JAR=
13734 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
13735     AC_MSG_CHECKING([for JUnit 4])
13736     if test "$with_junit" = "yes"; then
13737         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
13738             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
13739         elif test -e /usr/share/java/junit4.jar; then
13740             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
13741         else
13742            if test -e /usr/share/lib/java/junit.jar; then
13743               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
13744            else
13745               OOO_JUNIT_JAR=/usr/share/java/junit.jar
13746            fi
13747         fi
13748     else
13749         OOO_JUNIT_JAR=$with_junit
13750     fi
13751     if test "$_os" = "WINNT"; then
13752         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
13753     fi
13754     printf 'import org.junit.Before;' > conftest.java
13755     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13756         AC_MSG_RESULT([$OOO_JUNIT_JAR])
13757     else
13758         AC_MSG_ERROR(
13759 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
13760  specify its pathname via --with-junit=..., or disable it via --without-junit])
13761     fi
13762     rm -f conftest.class conftest.java
13763     if test $OOO_JUNIT_JAR != ""; then
13764         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
13765     fi
13767     AC_MSG_CHECKING([for included Hamcrest])
13768     printf 'import org.hamcrest.BaseDescription;' > conftest.java
13769     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13770         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
13771     else
13772         AC_MSG_RESULT([Not included])
13773         AC_MSG_CHECKING([for standalone hamcrest jar.])
13774         if test "$with_hamcrest" = "yes"; then
13775             if test -e /usr/share/lib/java/hamcrest.jar; then
13776                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
13777             elif test -e /usr/share/java/hamcrest/core.jar; then
13778                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
13779             elif test -e /usr/share/java/hamcrest/hamcrest.jar; then
13780                 HAMCREST_JAR=/usr/share/java/hamcrest/hamcrest.jar
13781             else
13782                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
13783             fi
13784         else
13785             HAMCREST_JAR=$with_hamcrest
13786         fi
13787         if test "$_os" = "WINNT"; then
13788             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
13789         fi
13790         if "$JAVACOMPILER" -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
13791             AC_MSG_RESULT([$HAMCREST_JAR])
13792         else
13793             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),
13794                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
13795         fi
13796     fi
13797     rm -f conftest.class conftest.java
13799 AC_SUBST(OOO_JUNIT_JAR)
13800 AC_SUBST(HAMCREST_JAR)
13803 AC_SUBST(SCPDEFS)
13806 # check for wget and curl
13808 WGET=
13809 CURL=
13811 if test "$enable_fetch_external" != "no"; then
13813 CURL=`which curl 2>/dev/null`
13815 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
13816     # wget new enough?
13817     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
13818     if test $? -eq 0; then
13819         WGET=$i
13820         break
13821     fi
13822 done
13824 if test -z "$WGET" -a -z "$CURL"; then
13825     AC_MSG_ERROR([neither wget nor curl found!])
13830 AC_SUBST(WGET)
13831 AC_SUBST(CURL)
13834 # check for sha256sum
13836 SHA256SUM=
13838 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
13839     eval "$i -a 256 --version" > /dev/null 2>&1
13840     ret=$?
13841     if test $ret -eq 0; then
13842         SHA256SUM="$i -a 256"
13843         break
13844     fi
13845 done
13847 if test -z "$SHA256SUM"; then
13848     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
13849         eval "$i --version" > /dev/null 2>&1
13850         ret=$?
13851         if test $ret -eq 0; then
13852             SHA256SUM=$i
13853             break
13854         fi
13855     done
13858 if test -z "$SHA256SUM"; then
13859     AC_MSG_ERROR([no sha256sum found!])
13862 AC_SUBST(SHA256SUM)
13864 dnl ===================================================================
13865 dnl Dealing with l10n options
13866 dnl ===================================================================
13867 AC_MSG_CHECKING([which languages to be built])
13868 # get list of all languages
13869 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
13870 # the sed command does the following:
13871 #   + if a line ends with a backslash, append the next line to it
13872 #   + adds " on the beginning of the value (after =)
13873 #   + adds " at the end of the value
13874 #   + removes en-US; we want to put it on the beginning
13875 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
13876 [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)]
13877 ALL_LANGS="en-US $completelangiso"
13878 # check the configured localizations
13879 WITH_LANG="$with_lang"
13881 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
13882 # (Norwegian is "nb" and "nn".)
13883 if test "$WITH_LANG" = "no"; then
13884     WITH_LANG=
13887 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
13888     AC_MSG_RESULT([en-US])
13889 else
13890     AC_MSG_RESULT([$WITH_LANG])
13891     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
13892     if test -z "$MSGFMT"; then
13893         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
13894             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
13895         elif test -x "/opt/lo/bin/msgfmt"; then
13896             MSGFMT="/opt/lo/bin/msgfmt"
13897         else
13898             AC_CHECK_PROGS(MSGFMT, [msgfmt])
13899             if test -z "$MSGFMT"; then
13900                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
13901             fi
13902         fi
13903     fi
13904     if test -z "$MSGUNIQ"; then
13905         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
13906             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
13907         elif test -x "/opt/lo/bin/msguniq"; then
13908             MSGUNIQ="/opt/lo/bin/msguniq"
13909         else
13910             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
13911             if test -z "$MSGUNIQ"; then
13912                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
13913             fi
13914         fi
13915     fi
13917 AC_SUBST(MSGFMT)
13918 AC_SUBST(MSGUNIQ)
13919 # check that the list is valid
13920 for lang in $WITH_LANG; do
13921     test "$lang" = "ALL" && continue
13922     # need to check for the exact string, so add space before and after the list of all languages
13923     for vl in $ALL_LANGS; do
13924         if test "$vl" = "$lang"; then
13925            break
13926         fi
13927     done
13928     if test "$vl" != "$lang"; then
13929         # if you're reading this - you prolly quoted your languages remove the quotes ...
13930         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
13931     fi
13932 done
13933 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
13934     echo $WITH_LANG | grep -q en-US
13935     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
13937 # list with substituted ALL
13938 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
13939 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
13940 test "$WITH_LANG" = "en-US" && WITH_LANG=
13941 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
13942     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
13943     ALL_LANGS=`echo $ALL_LANGS qtz`
13945 AC_SUBST(ALL_LANGS)
13946 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
13947 AC_SUBST(WITH_LANG)
13948 AC_SUBST(WITH_LANG_LIST)
13949 AC_SUBST(GIT_NEEDED_SUBMODULES)
13951 WITH_POOR_HELP_LOCALIZATIONS=
13952 if test -d "$SRC_ROOT/translations/source"; then
13953     for l in `ls -1 $SRC_ROOT/translations/source`; do
13954         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
13955             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
13956         fi
13957     done
13959 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
13961 if test -n "$with_locales" -a "$with_locales" != ALL; then
13962     WITH_LOCALES="$with_locales"
13964     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
13965     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
13966     # config_host/config_locales.h.in
13967     for locale in $WITH_LOCALES; do
13968         lang=${locale%_*}
13970         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
13972         case $lang in
13973         hi|mr*ne)
13974             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
13975             ;;
13976         bg|ru)
13977             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
13978             ;;
13979         esac
13980     done
13981 else
13982     AC_DEFINE(WITH_LOCALE_ALL)
13984 AC_SUBST(WITH_LOCALES)
13986 dnl git submodule update --reference
13987 dnl ===================================================================
13988 if test -n "${GIT_REFERENCE_SRC}"; then
13989     for repo in ${GIT_NEEDED_SUBMODULES}; do
13990         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
13991             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
13992         fi
13993     done
13995 AC_SUBST(GIT_REFERENCE_SRC)
13997 dnl git submodules linked dirs
13998 dnl ===================================================================
13999 if test -n "${GIT_LINK_SRC}"; then
14000     for repo in ${GIT_NEEDED_SUBMODULES}; do
14001         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
14002             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
14003         fi
14004     done
14006 AC_SUBST(GIT_LINK_SRC)
14008 dnl branding
14009 dnl ===================================================================
14010 AC_MSG_CHECKING([for alternative branding images directory])
14011 # initialize mapped arrays
14012 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
14013 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
14015 if test -z "$with_branding" -o "$with_branding" = "no"; then
14016     AC_MSG_RESULT([none])
14017     DEFAULT_BRAND_IMAGES="$brand_files"
14018 else
14019     if ! test -d $with_branding ; then
14020         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
14021     else
14022         AC_MSG_RESULT([$with_branding])
14023         CUSTOM_BRAND_DIR="$with_branding"
14024         for lfile in $brand_files
14025         do
14026             if ! test -f $with_branding/$lfile ; then
14027                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
14028                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
14029             else
14030                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
14031             fi
14032         done
14033         check_for_progress="yes"
14034     fi
14036 AC_SUBST([BRAND_INTRO_IMAGES])
14037 AC_SUBST([CUSTOM_BRAND_DIR])
14038 AC_SUBST([CUSTOM_BRAND_IMAGES])
14039 AC_SUBST([DEFAULT_BRAND_IMAGES])
14042 AC_MSG_CHECKING([for 'intro' progress settings])
14043 PROGRESSBARCOLOR=
14044 PROGRESSSIZE=
14045 PROGRESSPOSITION=
14046 PROGRESSFRAMECOLOR=
14047 PROGRESSTEXTCOLOR=
14048 PROGRESSTEXTBASELINE=
14050 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
14051     source "$with_branding/progress.conf"
14052     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
14053 else
14054     AC_MSG_RESULT([none])
14057 AC_SUBST(PROGRESSBARCOLOR)
14058 AC_SUBST(PROGRESSSIZE)
14059 AC_SUBST(PROGRESSPOSITION)
14060 AC_SUBST(PROGRESSFRAMECOLOR)
14061 AC_SUBST(PROGRESSTEXTCOLOR)
14062 AC_SUBST(PROGRESSTEXTBASELINE)
14065 dnl ===================================================================
14066 dnl Custom build version
14067 dnl ===================================================================
14068 AC_MSG_CHECKING([for extra build ID])
14069 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
14070     EXTRA_BUILDID="$with_extra_buildid"
14072 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
14073 if test -n "$EXTRA_BUILDID" ; then
14074     AC_MSG_RESULT([$EXTRA_BUILDID])
14075 else
14076     AC_MSG_RESULT([not set])
14078 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
14080 OOO_VENDOR=
14081 AC_MSG_CHECKING([for vendor])
14082 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
14083     OOO_VENDOR="$USERNAME"
14085     if test -z "$OOO_VENDOR"; then
14086         OOO_VENDOR="$USER"
14087     fi
14089     if test -z "$OOO_VENDOR"; then
14090         OOO_VENDOR="`id -u -n`"
14091     fi
14093     AC_MSG_RESULT([not set, using $OOO_VENDOR])
14094 else
14095     OOO_VENDOR="$with_vendor"
14096     AC_MSG_RESULT([$OOO_VENDOR])
14098 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
14099 AC_SUBST(OOO_VENDOR)
14101 if test "$_os" = "Android" ; then
14102     ANDROID_PACKAGE_NAME=
14103     AC_MSG_CHECKING([for Android package name])
14104     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
14105         if test -n "$ENABLE_DEBUG"; then
14106             # Default to the package name that makes ndk-gdb happy.
14107             ANDROID_PACKAGE_NAME="org.libreoffice"
14108         else
14109             ANDROID_PACKAGE_NAME="org.example.libreoffice"
14110         fi
14112         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
14113     else
14114         ANDROID_PACKAGE_NAME="$with_android_package_name"
14115         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
14116     fi
14117     AC_SUBST(ANDROID_PACKAGE_NAME)
14120 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
14121 if test "$with_compat_oowrappers" = "yes"; then
14122     WITH_COMPAT_OOWRAPPERS=TRUE
14123     AC_MSG_RESULT(yes)
14124 else
14125     WITH_COMPAT_OOWRAPPERS=
14126     AC_MSG_RESULT(no)
14128 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
14130 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{print tolower($0)}'`
14131 AC_MSG_CHECKING([for install dirname])
14132 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
14133     INSTALLDIRNAME="$with_install_dirname"
14135 AC_MSG_RESULT([$INSTALLDIRNAME])
14136 AC_SUBST(INSTALLDIRNAME)
14138 AC_MSG_CHECKING([for prefix])
14139 test "x$prefix" = xNONE && prefix=$ac_default_prefix
14140 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
14141 PREFIXDIR="$prefix"
14142 AC_MSG_RESULT([$PREFIXDIR])
14143 AC_SUBST(PREFIXDIR)
14145 LIBDIR=[$(eval echo $(eval echo $libdir))]
14146 AC_SUBST(LIBDIR)
14148 DATADIR=[$(eval echo $(eval echo $datadir))]
14149 AC_SUBST(DATADIR)
14151 MANDIR=[$(eval echo $(eval echo $mandir))]
14152 AC_SUBST(MANDIR)
14154 DOCDIR=[$(eval echo $(eval echo $docdir))]
14155 AC_SUBST(DOCDIR)
14157 BINDIR=[$(eval echo $(eval echo $bindir))]
14158 AC_SUBST(BINDIR)
14160 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
14161 AC_SUBST(INSTALLDIR)
14163 TESTINSTALLDIR="${BUILDDIR}/test-install"
14164 AC_SUBST(TESTINSTALLDIR)
14167 # ===================================================================
14168 # OAuth2 id and secrets
14169 # ===================================================================
14171 AC_MSG_CHECKING([for Google Drive client id and secret])
14172 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
14173     AC_MSG_RESULT([not set])
14174     GDRIVE_CLIENT_ID="\"\""
14175     GDRIVE_CLIENT_SECRET="\"\""
14176 else
14177     AC_MSG_RESULT([set])
14178     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
14179     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
14181 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
14182 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
14184 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
14185 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
14186     AC_MSG_RESULT([not set])
14187     ALFRESCO_CLOUD_CLIENT_ID="\"\""
14188     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
14189 else
14190     AC_MSG_RESULT([set])
14191     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
14192     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
14194 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
14195 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
14197 AC_MSG_CHECKING([for OneDrive client id and secret])
14198 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
14199     AC_MSG_RESULT([not set])
14200     ONEDRIVE_CLIENT_ID="\"\""
14201     ONEDRIVE_CLIENT_SECRET="\"\""
14202 else
14203     AC_MSG_RESULT([set])
14204     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
14205     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
14207 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
14208 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
14211 dnl ===================================================================
14212 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
14213 dnl --enable-dependency-tracking configure option
14214 dnl ===================================================================
14215 AC_MSG_CHECKING([whether to enable dependency tracking])
14216 if test "$enable_dependency_tracking" = "no"; then
14217     nodep=TRUE
14218     AC_MSG_RESULT([no])
14219 else
14220     AC_MSG_RESULT([yes])
14222 AC_SUBST(nodep)
14224 dnl ===================================================================
14225 dnl Number of CPUs to use during the build
14226 dnl ===================================================================
14227 AC_MSG_CHECKING([for number of processors to use])
14228 # plain --with-parallelism is just the default
14229 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
14230     if test "$with_parallelism" = "no"; then
14231         PARALLELISM=0
14232     else
14233         PARALLELISM=$with_parallelism
14234     fi
14235 else
14236     if test "$enable_icecream" = "yes"; then
14237         PARALLELISM="40"
14238     else
14239         case `uname -s` in
14241         Darwin|FreeBSD|NetBSD|OpenBSD)
14242             PARALLELISM=`sysctl -n hw.ncpu`
14243             ;;
14245         Linux)
14246             PARALLELISM=`getconf _NPROCESSORS_ONLN`
14247         ;;
14248         # what else than above does profit here *and* has /proc?
14249         *)
14250             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
14251             ;;
14252         esac
14254         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
14255         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
14256     fi
14259 if test $PARALLELISM -eq 0; then
14260     AC_MSG_RESULT([explicit make -j option needed])
14261 else
14262     AC_MSG_RESULT([$PARALLELISM])
14264 AC_SUBST(PARALLELISM)
14266 IWYU_PATH="$with_iwyu"
14267 AC_SUBST(IWYU_PATH)
14268 if test ! -z "$IWYU_PATH"; then
14269     if test ! -f "$IWYU_PATH"; then
14270         AC_MSG_ERROR([cannot find include-what-you-use binary specified by --with-iwyu])
14271     fi
14275 # Set up ILIB for MSVC build
14277 ILIB1=
14278 if test "$build_os" = "cygwin"; then
14279     ILIB="."
14280     if test -n "$JAVA_HOME"; then
14281         ILIB="$ILIB;$JAVA_HOME/lib"
14282     fi
14283     ILIB1=-link
14284     ILIB="$ILIB;$COMPATH/lib/$WIN_HOST_ARCH"
14285     ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/$WIN_HOST_ARCH"
14286     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14287     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14288     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
14289         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14290         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14291     fi
14292     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
14293     ucrtlibpath_formatted=$formatted_path
14294     ILIB="$ILIB;$ucrtlibpath_formatted"
14295     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
14296     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
14297         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/lib"
14298     else
14299         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
14300     fi
14302     if test "$cross_compiling" != "yes"; then
14303         ILIB_FOR_BUILD="$ILIB"
14304     fi
14306 AC_SUBST(ILIB)
14307 AC_SUBST(ILIB_FOR_BUILD)
14309 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
14310 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
14311 dnl from consteval constructor initializing const variable",
14312 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
14313 dnl expression' with consteval constructor", <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
14314 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
14315 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'",
14316 dnl <https://developercommunity.visualstudio.com/t/1581879> "Bogus error C7595 with consteval
14317 dnl constructor in ternary expression (/std:c++latest)", or
14318 dnl <https://github.com/llvm/llvm-project/issues/54612> "C++20, consteval, anonymous union:
14319 dnl llvm/lib/IR/Instructions.cpp:1491: void llvm::StoreInst::AssertOK(): Assertion
14320 dnl `cast<PointerType>(getOperand(1)->getType())->isOpaqueOrPointeeTypeMatches(getOperand(0)->getType())
14321 dnl && "Ptr must be a pointer to Val type!"' failed.":
14322 AC_LANG_PUSH([C++])
14323 save_CXX=$CXX
14324 if test "$COM" = MSC && test "$COM_IS_CLANG" != TRUE; then
14325     CXX="env LIB=$ILIB $CXX"
14327 save_CXXFLAGS=$CXXFLAGS
14328 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
14329 AC_RUN_IFELSE([AC_LANG_PROGRAM([
14330         struct S {
14331             consteval S() { i = 1; }
14332             int i = 0;
14333         };
14334         S const s;
14336         struct S1 { consteval S1(int) {} };
14337         struct S2 {
14338             S1 x;
14339             S2(): x(0) {}
14340         };
14342         struct S3 {
14343             consteval S3() {}
14344             union {
14345                 int a;
14346                 unsigned b = 0;
14347             };
14348         };
14349         void f() { S3(); }
14351         struct S4 { consteval S4() = default; };
14352         void f4(bool b) { b ? S4() : S4(); }
14354         struct S5 {
14355             consteval S5() { c = 0; }
14356             char * f() { return &c; }
14357             union {
14358                 char c;
14359                 int i;
14360             };
14361         };
14362         auto s5 = S5().f();
14363     ], [
14364         return (s.i == 1) ? 0 : 1;
14365     ])], [
14366         AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
14367         AC_MSG_RESULT([yes])
14368     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
14369 CXX=$save_CXX
14370 CXXFLAGS=$save_CXXFLAGS
14371 AC_LANG_POP([C++])
14373 # ===================================================================
14374 # Creating bigger shared library to link against
14375 # ===================================================================
14376 AC_MSG_CHECKING([whether to create huge library])
14377 MERGELIBS=
14379 if test $_os = iOS -o $_os = Android; then
14380     # Never any point in mergelibs for these as we build just static
14381     # libraries anyway...
14382     enable_mergelibs=no
14385 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
14386     if test $_os != Linux -a $_os != WINNT; then
14387         add_warning "--enable-mergelibs is not tested for this platform"
14388     fi
14389     MERGELIBS="TRUE"
14390     AC_MSG_RESULT([yes])
14391     AC_DEFINE(ENABLE_MERGELIBS)
14392 else
14393     AC_MSG_RESULT([no])
14395 AC_SUBST([MERGELIBS])
14397 dnl ===================================================================
14398 dnl icerun is a wrapper that stops us spawning tens of processes
14399 dnl locally - for tools that can't be executed on the compile cluster
14400 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
14401 dnl ===================================================================
14402 AC_MSG_CHECKING([whether to use icerun wrapper])
14403 ICECREAM_RUN=
14404 if test "$enable_icecream" = "yes" && which icerun >/dev/null 2>&1 ; then
14405     ICECREAM_RUN=icerun
14406     AC_MSG_RESULT([yes])
14407 else
14408     AC_MSG_RESULT([no])
14410 AC_SUBST(ICECREAM_RUN)
14412 dnl ===================================================================
14413 dnl Setup the ICECC_VERSION for the build the same way it was set for
14414 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
14415 dnl ===================================================================
14416 x_ICECC_VERSION=[\#]
14417 if test -n "$ICECC_VERSION" ; then
14418     x_ICECC_VERSION=
14420 AC_SUBST(x_ICECC_VERSION)
14421 AC_SUBST(ICECC_VERSION)
14423 dnl ===================================================================
14425 AC_MSG_CHECKING([MPL subset])
14426 MPL_SUBSET=
14428 if test "$enable_mpl_subset" = "yes"; then
14429     warn_report=false
14430     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
14431         warn_report=true
14432     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
14433         warn_report=true
14434     fi
14435     if test "$warn_report" = "true"; then
14436         AC_MSG_ERROR([need to --disable-report-builder - extended database report builder.])
14437     fi
14438     if test "x$enable_postgresql_sdbc" != "xno"; then
14439         AC_MSG_ERROR([need to --disable-postgresql-sdbc - the PostgreSQL database backend.])
14440     fi
14441     if test "$enable_lotuswordpro" = "yes"; then
14442         AC_MSG_ERROR([need to --disable-lotuswordpro - a Lotus Word Pro file format import filter.])
14443     fi
14444     if test -n "$ENABLE_POPPLER"; then
14445         if test "x$SYSTEM_POPPLER" = "x"; then
14446             AC_MSG_ERROR([need to disable PDF import via poppler or use system library])
14447         fi
14448     fi
14449     # cf. m4/libo_check_extension.m4
14450     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
14451         AC_MSG_ERROR([need to disable extra extensions '$WITH_EXTRA_EXTENSIONS'])
14452     fi
14453     for theme in $WITH_THEMES; do
14454         case $theme in
14455         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
14456             AC_MSG_ERROR([need to disable icon themes from '$WITH_THEMES': $theme present, use --with-theme=colibre]) ;;
14457         *) : ;;
14458         esac
14459     done
14461     ENABLE_OPENGL_TRANSITIONS=
14463     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
14464         AC_MSG_ERROR([need to --disable-lpsolve - calc linear programming solver.])
14465     fi
14467     MPL_SUBSET="TRUE"
14468     AC_DEFINE(MPL_HAVE_SUBSET)
14469     AC_MSG_RESULT([only])
14470 else
14471     AC_MSG_RESULT([no restrictions])
14473 AC_SUBST(MPL_SUBSET)
14475 dnl ===================================================================
14477 AC_MSG_CHECKING([formula logger])
14478 ENABLE_FORMULA_LOGGER=
14480 if test "x$enable_formula_logger" = "xyes"; then
14481     AC_MSG_RESULT([yes])
14482     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14483     ENABLE_FORMULA_LOGGER=TRUE
14484 elif test -n "$ENABLE_DBGUTIL" ; then
14485     AC_MSG_RESULT([yes])
14486     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14487     ENABLE_FORMULA_LOGGER=TRUE
14488 else
14489     AC_MSG_RESULT([no])
14492 AC_SUBST(ENABLE_FORMULA_LOGGER)
14494 dnl ===================================================================
14495 dnl Checking for active Antivirus software.
14496 dnl ===================================================================
14498 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
14499     AC_MSG_CHECKING([for active Antivirus software])
14500     ANTIVIRUS_LIST=`cscript.exe //Nologo $SRC_ROOT/antivirusDetection.vbs`
14501     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
14502         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
14503             AC_MSG_RESULT([found])
14504             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
14505             echo $EICAR_STRING > $SRC_ROOT/eicar
14506             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
14507             rm $SRC_ROOT/eicar
14508             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14509                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14510             fi
14511             echo $EICAR_STRING > $BUILDDIR/eicar
14512             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
14513             rm $BUILDDIR/eicar
14514             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14515                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14516             fi
14517             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"
14518         else
14519             AC_MSG_RESULT([not found])
14520         fi
14521     else
14522         AC_MSG_RESULT([n/a])
14523     fi
14526 dnl ===================================================================
14527 dnl Setting up the environment.
14528 dnl ===================================================================
14529 AC_MSG_NOTICE([setting up the build environment variables...])
14531 AC_SUBST(COMPATH)
14533 if test "$build_os" = "cygwin"; then
14534     if test -d "$COMPATH/atlmfc/lib/spectre"; then
14535         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
14536         ATL_INCLUDE="$COMPATH/atlmfc/include"
14537     elif test -d "$COMPATH/atlmfc/lib"; then
14538         ATL_LIB="$COMPATH/atlmfc/lib"
14539         ATL_INCLUDE="$COMPATH/atlmfc/include"
14540     else
14541         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
14542         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
14543     fi
14544     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
14545     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
14546     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
14548     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
14549     PathFormat "/usr/bin/find.exe"
14550     FIND="$formatted_path"
14551     PathFormat "/usr/bin/sort.exe"
14552     SORT="$formatted_path"
14553     PathFormat "/usr/bin/grep.exe"
14554     WIN_GREP="$formatted_path"
14555     PathFormat "/usr/bin/ls.exe"
14556     WIN_LS="$formatted_path"
14557     PathFormat "/usr/bin/touch.exe"
14558     WIN_TOUCH="$formatted_path"
14559 else
14560     FIND=find
14561     SORT=sort
14564 AC_SUBST(ATL_INCLUDE)
14565 AC_SUBST(ATL_LIB)
14566 AC_SUBST(FIND)
14567 AC_SUBST(SORT)
14568 AC_SUBST(WIN_GREP)
14569 AC_SUBST(WIN_LS)
14570 AC_SUBST(WIN_TOUCH)
14572 AC_SUBST(BUILD_TYPE)
14574 AC_SUBST(SOLARINC)
14576 PathFormat "$PERL"
14577 PERL="$formatted_path"
14578 AC_SUBST(PERL)
14580 if test -n "$TMPDIR"; then
14581     TEMP_DIRECTORY="$TMPDIR"
14582 else
14583     TEMP_DIRECTORY="/tmp"
14585 if test "$build_os" = "cygwin"; then
14586     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
14588 AC_SUBST(TEMP_DIRECTORY)
14590 # setup the PATH for the environment
14591 if test -n "$LO_PATH_FOR_BUILD"; then
14592     LO_PATH="$LO_PATH_FOR_BUILD"
14593     case "$host_os" in
14594     cygwin*|wsl*)
14595         pathmunge "$MSVC_HOST_PATH" "before"
14596         ;;
14597     esac
14598 else
14599     LO_PATH="$PATH"
14601     case "$host_os" in
14603     aix*|dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
14604         if test "$ENABLE_JAVA" != ""; then
14605             pathmunge "$JAVA_HOME/bin" "after"
14606         fi
14607         ;;
14609     cygwin*|wsl*)
14610         # Win32 make needs native paths
14611         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
14612             LO_PATH=`cygpath -p -m "$PATH"`
14613         fi
14614         if test "$WIN_BUILD_ARCH" = "x64"; then
14615             # needed for msi packaging
14616             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
14617         fi
14618         # .NET 4.6 and higher don't have bin directory
14619         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
14620             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
14621         fi
14622         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
14623         pathmunge "$CSC_PATH" "before"
14624         pathmunge "$MIDL_PATH" "before"
14625         pathmunge "$AL_PATH" "before"
14626         pathmunge "$MSVC_MULTI_PATH" "before"
14627         pathmunge "$MSVC_BUILD_PATH" "before"
14628         if test -n "$MSBUILD_PATH" ; then
14629             pathmunge "$MSBUILD_PATH" "before"
14630         fi
14631         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
14632         if test "$ENABLE_JAVA" != ""; then
14633             if test -d "$JAVA_HOME/jre/bin/client"; then
14634                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
14635             fi
14636             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
14637                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
14638             fi
14639             pathmunge "$JAVA_HOME/bin" "before"
14640         fi
14641         pathmunge "$MSVC_HOST_PATH" "before"
14642         ;;
14644     solaris*)
14645         pathmunge "/usr/css/bin" "before"
14646         if test "$ENABLE_JAVA" != ""; then
14647             pathmunge "$JAVA_HOME/bin" "after"
14648         fi
14649         ;;
14650     esac
14653 AC_SUBST(LO_PATH)
14655 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
14656 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
14657     x_LO_ELFCHECK_ALLOWLIST=
14658 else
14659     x_LO_ELFCHECK_ALLOWLIST=[\#]
14661 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
14662 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
14664 libo_FUZZ_SUMMARY
14666 # Generate a configuration sha256 we can use for deps
14667 if test -f config_host.mk; then
14668     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
14670 if test -f config_host_lang.mk; then
14671     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
14674 CFLAGS=$my_original_CFLAGS
14675 CXXFLAGS=$my_original_CXXFLAGS
14676 CPPFLAGS=$my_original_CPPFLAGS
14678 AC_CONFIG_LINKS([include:include])
14680 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
14681 # BUILD platform configuration] - otherwise breaks cross building
14682 AC_CONFIG_FILES([config_host.mk
14683                  config_host_lang.mk
14684                  Makefile
14685                  bin/bffvalidator.sh
14686                  bin/odfvalidator.sh
14687                  bin/officeotron.sh
14688                  hardened_runtime.xcent
14689                  instsetoo_native/util/openoffice.lst
14690                  sysui/desktop/macosx/Info.plist
14691                  vs-code.code-workspace.template:.vscode/vs-code-template.code-workspace.in])
14692 AC_CONFIG_HEADERS([config_host/config_buildid.h])
14693 AC_CONFIG_HEADERS([config_host/config_box2d.h])
14694 AC_CONFIG_HEADERS([config_host/config_clang.h])
14695 AC_CONFIG_HEADERS([config_host/config_crypto.h])
14696 AC_CONFIG_HEADERS([config_host/config_dconf.h])
14697 AC_CONFIG_HEADERS([config_host/config_eot.h])
14698 AC_CONFIG_HEADERS([config_host/config_extensions.h])
14699 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
14700 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
14701 AC_CONFIG_HEADERS([config_host/config_dbus.h])
14702 AC_CONFIG_HEADERS([config_host/config_features.h])
14703 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
14704 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
14705 AC_CONFIG_HEADERS([config_host/config_firebird.h])
14706 AC_CONFIG_HEADERS([config_host/config_folders.h])
14707 AC_CONFIG_HEADERS([config_host/config_fonts.h])
14708 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
14709 AC_CONFIG_HEADERS([config_host/config_gio.h])
14710 AC_CONFIG_HEADERS([config_host/config_global.h])
14711 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
14712 AC_CONFIG_HEADERS([config_host/config_java.h])
14713 AC_CONFIG_HEADERS([config_host/config_langs.h])
14714 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
14715 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
14716 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
14717 AC_CONFIG_HEADERS([config_host/config_locales.h])
14718 AC_CONFIG_HEADERS([config_host/config_mpl.h])
14719 AC_CONFIG_HEADERS([config_host/config_oox.h])
14720 AC_CONFIG_HEADERS([config_host/config_options.h])
14721 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
14722 AC_CONFIG_HEADERS([config_host/config_zxing.h])
14723 AC_CONFIG_HEADERS([config_host/config_skia.h])
14724 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
14725 AC_CONFIG_HEADERS([config_host/config_vendor.h])
14726 AC_CONFIG_HEADERS([config_host/config_vcl.h])
14727 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
14728 AC_CONFIG_HEADERS([config_host/config_version.h])
14729 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
14730 AC_CONFIG_HEADERS([config_host/config_poppler.h])
14731 AC_CONFIG_HEADERS([config_host/config_python.h])
14732 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
14733 AC_CONFIG_HEADERS([config_host/config_wasm_strip.h])
14734 AC_CONFIG_HEADERS([solenv/lockfile/autoconf.h])
14735 AC_OUTPUT
14737 if test "$CROSS_COMPILING" = TRUE; then
14738     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
14741 # touch the config timestamp file
14742 if test ! -f config_host.mk.stamp; then
14743     echo > config_host.mk.stamp
14744 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
14745     echo "Host Configuration unchanged - avoiding scp2 stamp update"
14746 else
14747     echo > config_host.mk.stamp
14750 # touch the config lang timestamp file
14751 if test ! -f config_host_lang.mk.stamp; then
14752     echo > config_host_lang.mk.stamp
14753 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
14754     echo "Language Configuration unchanged - avoiding scp2 stamp update"
14755 else
14756     echo > config_host_lang.mk.stamp
14760 if test \( "$STALE_MAKE" = "TRUE" -o "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE" \) \
14761         -a "$build_os" = "cygwin"; then
14763 cat << _EOS
14764 ****************************************************************************
14765 WARNING:
14766 Your make version is known to be horribly slow, and hard to debug
14767 problems with. To get a reasonably functional make please do:
14769 to install a pre-compiled binary make for Win32
14771  mkdir -p /opt/lo/bin
14772  cd /opt/lo/bin
14773  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
14774  cp make-4.2.1-msvc.exe make
14775  chmod +x make
14777 to install from source:
14778 place yourself in a working directory of you choice.
14780  git clone git://git.savannah.gnu.org/make.git
14782  [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"]
14783  set PATH=%PATH%;C:\Cygwin\bin
14784  [or Cygwin64, if that is what you have]
14785  cd path-to-make-repo-you-cloned-above
14786  build_w32.bat --without-guile
14788 should result in a WinRel/gnumake.exe.
14789 Copy it to the Cygwin /opt/lo/bin directory as make.exe
14791 Then re-run autogen.sh
14793 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
14794 Alternatively, you can install the 'new' make where ever you want and make sure that `which make` finds it.
14796 _EOS
14797 if test "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE"; then
14798     AC_MSG_ERROR([no file function found; the build will fail without it; use GNU make 4.0 or later])
14803 cat << _EOF
14804 ****************************************************************************
14806 To show information on various make targets and make flags, run:
14807 $GNUMAKE help
14809 To just build, run:
14810 $GNUMAKE
14812 _EOF
14814 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
14815     cat << _EOF
14816 After the build has finished successfully, you can immediately run what you built using the command:
14817 _EOF
14819     if test $_os = Darwin; then
14820         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
14821     else
14822         echo instdir/program/soffice
14823     fi
14824     cat << _EOF
14826 If you want to run the unit tests, run:
14827 $GNUMAKE check
14829 _EOF
14832 if test -s "$WARNINGS_FILE_FOR_BUILD"; then
14833     echo "BUILD / cross-toolset config, repeated ($WARNINGS_FILE_FOR_BUILD)"
14834     cat "$WARNINGS_FILE_FOR_BUILD"
14835     echo
14838 if test -s "$WARNINGS_FILE"; then
14839     echo "HOST config ($WARNINGS_FILE)"
14840     cat "$WARNINGS_FILE"
14843 # Remove unneeded emconfigure artifacts
14844 rm -f a.out a.wasm a.out.js a.out.wasm
14846 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: