Bump version to 23.05.4.2
[LibreOffice.git] / configure.ac
blobb0dd7b189697e65691eaa80bad1a645e496fa090
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([Collabora Office],[23.05.4.2],[],[],[https://collaboraoffice.com/])
14 dnl libnumbertext needs autoconf 2.68, but that can pick up autoconf268 just fine if it is installed
15 dnl whereas aclocal (as run by autogen.sh) insists on using autoconf and fails hard
16 dnl so check for the version of autoconf that is actually used to create the configure script
17 AC_PREREQ([2.59])
18 m4_if(m4_version_compare(m4_defn([AC_AUTOCONF_VERSION]), [2.68]), -1,
19     [AC_MSG_ERROR([at least autoconf version 2.68 is needed (you can use AUTOCONF environment variable to point to a suitable one)])])
21 if test -n "$BUILD_TYPE"; then
22     AC_MSG_ERROR([You have sourced config_host.mk in this shell.  This may lead to trouble, please run in a fresh (login) shell.])
25 save_CC=$CC
26 save_CXX=$CXX
28 first_arg_basename()
30     for i in $1; do
31         basename "$i"
32         break
33     done
36 CC_BASE=`first_arg_basename "$CC"`
37 CXX_BASE=`first_arg_basename "$CXX"`
39 BUILD_TYPE="LibO"
40 SCPDEFS=""
41 GIT_NEEDED_SUBMODULES=""
42 LO_PATH= # used by path_munge to construct a PATH variable
44 FilterLibs()
46     # Return value: $filteredlibs
48     filteredlibs=
49     if test "$COM" = "MSC"; then
50         for f in $1; do
51             if test "x$f" != "x${f#-L}"; then
52                 filteredlibs="$filteredlibs -LIBPATH:${f:2}"
53             elif test "x$f" != "x${f#-l}"; then
54                 filteredlibs="$filteredlibs ${f:2}.lib"
55             else
56                 filteredlibs="$filteredlibs $f"
57             fi
58         done
59     else
60         for f in $1; do
61             case "$f" in
62                 # let's start with Fedora's paths for now
63                 -L/lib|-L/lib/|-L/lib64|-L/lib64/|-L/usr/lib|-L/usr/lib/|-L/usr/lib64|-L/usr/lib64/)
64                     # ignore it: on UNIXoids it is searched by default anyway
65                     # but if it's given explicitly then it may override other paths
66                     # (on macOS it would be an error to use it instead of SDK)
67                     ;;
68                 *)
69                     filteredlibs="$filteredlibs $f"
70                     ;;
71             esac
72         done
73     fi
76 PathFormat()
78     # Args: $1: A pathname. On Cygwin and WSL, in either the Unix or the Windows format. Note that this
79     # function is called also on Unix.
80     #
81     # Return value: $formatted_path and $formatted_path_unix.
82     #
83     # $formatted_path is the argument in Windows format, but using forward slashes instead of
84     # backslashes, using 8.3 pathname components if necessary (if it otherwise would contains spaces
85     # or shell metacharacters).
86     #
87     # $formatted_path_unix is the argument in a form usable in Cygwin or WSL, using 8.3 components if
88     # necessary. On Cygwin, it is the same as $formatted_path, but on WSL it is $formatted_path as a
89     # Unix pathname.
90     #
91     # Errors out if 8.3 names are needed but aren't present for some of the path components.
93     # Examples:
94     #
95     # /home/tml/lo/master-optimised => C:/cygwin64/home/tml/lo/master-optimised
96     #
97     # C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe => C:/PROGRA~2/MICROS~3/INSTAL~1/vswhere.exe
98     #
99     # C:\Program Files (x86)\Microsoft Visual Studio\2019\Community => C:/PROGRA~2/MICROS~3/2019/COMMUN~1
100     #
101     # C:/PROGRA~2/WI3CF2~1/10/Include/10.0.18362.0/ucrt => C:/PROGRA~2/WI3CF2~1/10/Include/10.0.18362.0/ucrt
102     #
103     # /cygdrive/c/PROGRA~2/WI3CF2~1/10 => C:/PROGRA~2/WI3CF2~1/10
104     #
105     # C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\ => C:/PROGRA~2/WI3CF2~1/NETFXSDK/4.8/
106     #
107     # /usr/bin/find.exe => C:/cygwin64/bin/find.exe
109     if test -n "$UNITTEST_WSL_PATHFORMAT"; then
110         printf "PathFormat $1 ==> "
111     fi
113     formatted_path="$1"
114     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
115         if test "$build_os" = "wsl"; then
116             formatted_path=$(echo "$formatted_path" | tr -d '\r')
117         fi
119         pf_conv_to_dos=
120         # spaces,parentheses,brackets,braces are problematic in pathname
121         # so are backslashes
122         case "$formatted_path" in
123             *\ * | *\)* | *\(* | *\{* | *\}* | *\[* | *\]* | *\\* )
124                 pf_conv_to_dos="yes"
125             ;;
126         esac
127         if test "$pf_conv_to_dos" = "yes"; then
128             if test "$build_os" = "wsl"; then
129                 case "$formatted_path" in
130                     /*)
131                         formatted_path=$(wslpath -w "$formatted_path")
132                         ;;
133                 esac
134                 formatted_path=$($WSL_LO_HELPER --8.3 "$formatted_path")
135             elif test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
136                 formatted_path=`cygpath -sm "$formatted_path"`
137             else
138                 formatted_path=`cygpath -d "$formatted_path"`
139             fi
140             if test $? -ne 0;  then
141                 AC_MSG_ERROR([path conversion failed for "$1".])
142             fi
143         fi
144         fp_count_colon=`echo "$formatted_path" | $GREP -c "[:]"`
145         fp_count_slash=`echo "$formatted_path" | $GREP -c "[/]"`
146         if test "$fp_count_slash$fp_count_colon" != "00"; then
147             if test "$fp_count_colon" = "0"; then
148                 new_formatted_path=`realpath "$formatted_path"`
149                 if test $? -ne 0;  then
150                     AC_MSG_WARN([realpath failed for "$formatted_path", not necessarily a problem.])
151                 else
152                     formatted_path="$new_formatted_path"
153                 fi
154             fi
155             if test "$build_os" = "wsl"; then
156                 if test "$fp_count_colon" != "0"; then
157                     formatted_path=$(wslpath "$formatted_path")
158                     local final_slash=
159                     case "$formatted_path" in
160                         */)
161                             final_slash=/
162                             ;;
163                     esac
164                     formatted_path=$(wslpath -m $formatted_path)
165                     case "$formatted_path" in
166                         */)
167                             ;;
168                         *)
169                             formatted_path="$formatted_path"$final_slash
170                             ;;
171                     esac
172                 else
173                     formatted_path=$(wslpath -m "$formatted_path")
174                 fi
175             else
176                 formatted_path=`cygpath -m "$formatted_path"`
177             fi
178             if test $? -ne 0;  then
179                 AC_MSG_ERROR([path conversion failed for "$1".])
180             fi
181         fi
182         fp_count_space=`echo "$formatted_path" | $GREP -c "[ ]"`
183         if test "$fp_count_space" != "0"; then
184             AC_MSG_ERROR([converted path "$formatted_path" still contains spaces. Short filenames (8.3 filenames) support was disabled on this system?])
185         fi
186     fi
187     if test "$build_os" = "wsl"; then
188         # WSL can't run Windows binaries from Windows pathnames so we need a separate return value in Unix format
189         formatted_path_unix=$(wslpath "$formatted_path")
190     else
191         # But Cygwin can
192         formatted_path_unix="$formatted_path"
193     fi
196 AbsolutePath()
198     # There appears to be no simple and portable method to get an absolute and
199     # canonical path, so we try creating the directory if does not exist and
200     # utilizing the shell and pwd.
202     # Args: $1: A possibly relative pathname
203     # Return value: $absolute_path
205     # Convert to unix path, mkdir would treat c:/path as a relative path.
206     PathFormat "$1"
207     local rel="$formatted_path_unix"
208     absolute_path=""
209     test ! -e "$rel" && mkdir -p "$rel"
210     if test -d "$rel" ; then
211         cd "$rel" || AC_MSG_ERROR([absolute path resolution failed for "$rel".])
212         absolute_path="$(pwd)"
213         cd - > /dev/null
214     else
215         AC_MSG_ERROR([Failed to resolve absolute path.  "$rel" does not exist or is not a directory.])
216     fi
219 WARNINGS_FILE=config.warn
220 WARNINGS_FILE_FOR_BUILD=config.Build.warn
221 rm -f "$WARNINGS_FILE" "$WARNINGS_FILE_FOR_BUILD"
222 have_WARNINGS="no"
223 add_warning()
225     if test "$have_WARNINGS" = "no"; then
226         echo "*************************************" > "$WARNINGS_FILE"
227         have_WARNINGS="yes"
228         if which tput >/dev/null && test "`tput colors 2>/dev/null || echo 0`" -ge 8; then
229             dnl <esc> as actual byte (U+1b), [ escaped using quadrigraph @<:@
230             COLORWARN='*\e@<:@1;33;40m WARNING \e@<:@0m:'
231         else
232             COLORWARN="* WARNING :"
233         fi
234     fi
235     echo "$COLORWARN $@" >> "$WARNINGS_FILE"
238 dnl Some Mac User have the bad habit of letting a lot of crap
239 dnl accumulate in their PATH and even adding stuff in /usr/local/bin
240 dnl that confuse the build.
241 dnl For the ones that use LODE, let's be nice and protect them
242 dnl from themselves
244 mac_sanitize_path()
246     mac_path="$LODE_HOME/opt/bin:/usr/bin:/bin:/usr/sbin:/sbin"
247 dnl a common but nevertheless necessary thing that may be in a fancy
248 dnl path location is git, so make sure we have it
249     mac_git_path=`which git 2>/dev/null`
250     if test -n "$mac_git_path" -a -x "$mac_git_path" -a "$mac_git_path" != "/usr/bin/git" ; then
251         mac_path="$mac_path:`dirname $mac_git_path`"
252     fi
253 dnl a not so common but nevertheless quite helpful thing that may be in a fancy
254 dnl path location is gpg, so make sure we find it
255     mac_gpg_path=`which gpg 2>/dev/null`
256     if test -n "$mac_gpg_path" -a -x "$mac_gpg_path" -a "$mac_gpg_path" != "/usr/bin/gpg" ; then
257         mac_path="$mac_path:`dirname $mac_gpg_path`"
258     fi
259     PATH="$mac_path"
260     unset mac_path
261     unset mac_git_path
262     unset mac_gpg_path
265 dnl semantically test a three digits version
266 dnl $1 - $3 = minimal version
267 dnl $4 - $6 = current version
269 check_semantic_version_three()
271     test "$4" -gt "$1" \
272         -o \( "$4" -eq "$1" -a "$5" -gt "$2" \) \
273         -o \( "$4" -eq "$1" -a "$5" -eq "$2" -a "$6" -ge "$3" \)
274     return $?
277 dnl calls check_semantic_version_three with digits in named variables $1_MAJOR, $1_MINOR, $1_TINY
278 dnl $1 = current version prefix, e.g. EMSCRIPTEN => EMSCRIPTEN_
279 dnl $2 = postfix to $1, e.g. MIN => EMSCRIPTEN_MIN_
281 check_semantic_version_three_prefixed()
283     eval local MIN_MAJOR="\$${1}_${2}_MAJOR"
284     eval local MIN_MINOR="\$${1}_${2}_MINOR"
285     eval local MIN_TINY="\$${1}_${2}_TINY"
286     eval local CUR_MAJOR="\$${1}_MAJOR"
287     eval local CUR_MINOR="\$${1}_MINOR"
288     eval local CUR_TINY="\$${1}_TINY"
289     check_semantic_version_three $MIN_MAJOR $MIN_MINOR $MIN_TINY $CUR_MAJOR $CUR_MINOR $CUR_TINY
290     return $?
293 echo "********************************************************************"
294 echo "*"
295 echo "*   Running ${PACKAGE_NAME} build configuration."
296 echo "*"
297 echo "********************************************************************"
298 echo ""
300 dnl ===================================================================
301 dnl checks build and host OSes
302 dnl do this before argument processing to allow for platform dependent defaults
303 dnl ===================================================================
305 # Check for WSL (version 2, at least). But if --host is explicitly specified (to really do build for
306 # Linux on WSL) trust that.
307 if test -z "$host" -a -z "$build" -a "`wslsys -v 2>/dev/null`" != ""; then
308     ac_cv_host="x86_64-pc-wsl"
309     ac_cv_host_cpu="x86_64"
310     ac_cv_host_os="wsl"
311     ac_cv_build="$ac_cv_host"
312     ac_cv_build_cpu="$ac_cv_host_cpu"
313     ac_cv_build_os="$ac_cv_host_os"
315     # Emulation of Cygwin's cygpath command for WSL.
316     cygpath()
317     {
318         if test -n "$UNITTEST_WSL_CYGPATH"; then
319             echo -n cygpath "$@" "==> "
320         fi
322         # Cygwin's real cygpath has a plethora of options but we use only a few here.
323         local args="$@"
324         local opt
325         local opt_d opt_m opt_u opt_w opt_l opt_s opt_p
326         OPTIND=1
328         while getopts dmuwlsp opt; do
329             case "$opt" in
330                 \?)
331                     AC_MSG_ERROR([Unimplemented cygpath emulation option in invocation: cygpath $args])
332                     ;;
333                 ?)
334                     eval opt_$opt=yes
335                     ;;
336             esac
337         done
339         shift $((OPTIND-1))
341         if test $# -ne 1; then
342             AC_MSG_ERROR([Invalid cygpath emulation invocation: Pathname missing]);
343         fi
345         local input="$1"
347         local result
349         if test -n "$opt_d" -o -n "$opt_m" -o -n "$opt_w"; then
350             # Print Windows path, possibly in 8.3 form (-d) or with forward slashes (-m)
352             if test -n "$opt_u"; then
353                 AC_MSG_ERROR([Invalid cygpath invocation: Both Windows and Unix path output requested])
354             fi
356             case "$input" in
357                 /mnt/*)
358                     # A Windows file in WSL format
359                     input=$(wslpath -w "$input")
360                     ;;
361                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
362                     # Already in Windows format
363                     ;;
364                 /*)
365                     input=$(wslpath -w "$input")
366                     ;;
367                 *)
368                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
369                     ;;
370             esac
371             if test -n "$opt_d" -o -n "$opt_s"; then
372                 input=$($WSL_LO_HELPER --8.3 "$input")
373             fi
374             if test -n "$opt_m"; then
375                 input="${input//\\//}"
376             fi
377             echo "$input"
378         else
379             # Print Unix path
381             case "$input" in
382                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
383                     wslpath -u "$input"
384                     ;;
385                 /)
386                     echo "$input"
387                     ;;
388                 *)
389                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
390                     ;;
391             esac
392         fi
393     }
395     if test -n "$UNITTEST_WSL_CYGPATH"; then
396         BUILDDIR=.
398         # Nothing special with these file names, just arbitrary ones picked to test with
399         cygpath -d /usr/lib64/ld-linux-x86-64.so.2
400         cygpath -w /usr/lib64/ld-linux-x86-64.so.2
401         cygpath -m /usr/lib64/ld-linux-x86-64.so.2
402         cygpath -m -s /usr/lib64/ld-linux-x86-64.so.2
403         # At least on my machine for instance this file does have an 8.3 name
404         cygpath -d /mnt/c/windows/WindowsUpdate.log
405         # But for instance this one doesn't
406         cygpath -w /mnt/c/windows/system32/AboutSettingsHandlers.dll
407         cygpath -ws /mnt/c/windows/WindowsUpdate.log
408         cygpath -m /mnt/c/windows/system32/AboutSettingsHandlers.dll
409         cygpath -ms /mnt/c/windows/WindowsUpdate.log
411         cygpath -u 'c:\windows\system32\AboutSettingsHandlers.dll'
412         cygpath -u 'c:/windows/system32/AboutSettingsHandlers.dll'
414         exit 0
415     fi
417     if test -z "$WSL_LO_HELPER"; then
418         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/wsl-lo-helper" ; then
419             WSL_LO_HELPER="$LODE_HOME/opt/bin/wsl-lo-helper"
420         elif test -x "/opt/lo/bin/wsl-lo-helper"; then
421             WSL_LO_HELPER="/opt/lo/bin/wsl-lo-helper"
422         fi
423     fi
424     if test -z "$WSL_LO_HELPER"; then
425         AC_MSG_ERROR([wsl-lo-helper not found. See solenv/wsl/README.])
426     fi
429 AC_CANONICAL_HOST
430 AC_CANONICAL_BUILD
432 if test -n "$UNITTEST_WSL_PATHFORMAT"; then
433     BUILDDIR=.
434     GREP=grep
436     # Use of PathFormat must be after AC_CANONICAL_BUILD above
437     PathFormat /
438     printf "$formatted_path , $formatted_path_unix\n"
440     PathFormat $PWD
441     printf "$formatted_path , $formatted_path_unix\n"
443     PathFormat "$PROGRAMFILESX86"
444     printf "$formatted_path , $formatted_path_unix\n"
446     exit 0
449 AC_MSG_CHECKING([for product name])
450 PRODUCTNAME="AC_PACKAGE_NAME"
451 if test -n "$with_product_name" -a "$with_product_name" != no; then
452     PRODUCTNAME="$with_product_name"
454 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
455     PRODUCTNAME="${PRODUCTNAME}Dev"
456     PRODUCTNAME=AC_PACKAGE_NAME
458 AC_MSG_RESULT([$PRODUCTNAME])
459 AC_SUBST(PRODUCTNAME)
460 PRODUCTNAME_WITHOUT_SPACES=$(printf %s "$PRODUCTNAME" | sed 's/ //g')
461 AC_SUBST(PRODUCTNAME_WITHOUT_SPACES)
463 dnl ===================================================================
464 dnl Our version is defined by the AC_INIT() at the top of this script.
465 dnl ===================================================================
467 AC_MSG_CHECKING([for package version])
468 if test -n "$with_package_version" -a "$with_package_version" != no; then
469     PACKAGE_VERSION="$with_package_version"
471 AC_MSG_RESULT([$PACKAGE_VERSION])
473 set `echo "$PACKAGE_VERSION" | sed "s/\./ /g"`
475 LIBO_VERSION_MAJOR=$1
476 LIBO_VERSION_MINOR=$2
477 LIBO_VERSION_MICRO=$3
478 LIBO_VERSION_PATCH=$4
480 LIBO_VERSION_SUFFIX=$5
482 # Split out LIBO_VERSION_SUFFIX_SUFFIX... horrible crack. But apparently wanted separately in
483 # openoffice.lst as ABOUTBOXPRODUCTVERSIONSUFFIX. Note that the double brackets are for m4's sake,
484 # they get undoubled before actually passed to sed.
485 LIBO_VERSION_SUFFIX_SUFFIX=`echo "$LIBO_VERSION_SUFFIX" | sed -e 's/.*[[a-zA-Z0-9]]\([[^a-zA-Z0-9]]*\)$/\1/'`
486 test -n "$LIBO_VERSION_SUFFIX_SUFFIX" && LIBO_VERSION_SUFFIX="${LIBO_VERSION_SUFFIX%${LIBO_VERSION_SUFFIX_SUFFIX}}"
487 # LIBO_VERSION_SUFFIX, if non-empty, should include the period separator
488 test -n "$LIBO_VERSION_SUFFIX" && LIBO_VERSION_SUFFIX=".$LIBO_VERSION_SUFFIX"
490 # The value for key CFBundleVersion in the Info.plist file must be a period-separated list of at most
491 # three non-negative integers. Please find more information about CFBundleVersion at
492 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleversion
494 # The value for key CFBundleShortVersionString in the Info.plist file must be a period-separated list
495 # of at most three non-negative integers. Please find more information about
496 # CFBundleShortVersionString at
497 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring
499 MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.`expr $LIBO_VERSION_MICRO '*' 1000 + $LIBO_VERSION_PATCH`
500 MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION
502 AC_SUBST(LIBO_VERSION_MAJOR)
503 AC_SUBST(LIBO_VERSION_MINOR)
504 AC_SUBST(LIBO_VERSION_MICRO)
505 AC_SUBST(LIBO_VERSION_PATCH)
506 AC_SUBST(LIBO_VERSION_SUFFIX)
507 AC_SUBST(LIBO_VERSION_SUFFIX_SUFFIX)
508 AC_SUBST(MACOSX_BUNDLE_SHORTVERSION)
509 AC_SUBST(MACOSX_BUNDLE_VERSION)
511 AC_DEFINE_UNQUOTED(LIBO_VERSION_MAJOR,$LIBO_VERSION_MAJOR)
512 AC_DEFINE_UNQUOTED(LIBO_VERSION_MINOR,$LIBO_VERSION_MINOR)
513 AC_DEFINE_UNQUOTED(LIBO_VERSION_MICRO,$LIBO_VERSION_MICRO)
514 AC_DEFINE_UNQUOTED(LIBO_VERSION_PATCH,$LIBO_VERSION_PATCH)
516 LIBO_THIS_YEAR=`date +%Y`
517 AC_DEFINE_UNQUOTED(LIBO_THIS_YEAR,$LIBO_THIS_YEAR)
519 # replace backslashes, to get a valid c++ string
520 config_args=$(echo $ac_configure_args | tr '\\' '/')
521 AC_DEFINE_UNQUOTED([BUILDCONFIG],[["$config_args"]],[Options passed to configure script])
523 dnl ===================================================================
524 dnl Product version
525 dnl ===================================================================
526 AC_MSG_CHECKING([for product version])
527 PRODUCTVERSION="$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR"
528 AC_MSG_RESULT([$PRODUCTVERSION])
529 AC_SUBST(PRODUCTVERSION)
531 AC_PROG_EGREP
532 # AC_PROG_EGREP doesn't set GREP on all systems as well
533 AC_PATH_PROG(GREP, grep)
535 BUILDDIR=`pwd`
536 cd $srcdir
537 SRC_ROOT=`pwd`
538 cd $BUILDDIR
539 x_Cygwin=[\#]
541 dnl ======================================
542 dnl Required GObject introspection version
543 dnl ======================================
544 INTROSPECTION_REQUIRED_VERSION=1.32.0
546 dnl ===================================================================
547 dnl Search all the common names for GNU Make
548 dnl ===================================================================
549 AC_MSG_CHECKING([for GNU Make])
551 # try to use our own make if it is available and GNUMAKE was not already defined
552 if test -z "$GNUMAKE"; then
553     if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/make" ; then
554         GNUMAKE="$LODE_HOME/opt/bin/make"
555     elif test -x "/opt/lo/bin/make"; then
556         GNUMAKE="/opt/lo/bin/make"
557     fi
560 GNUMAKE_WIN_NATIVE=
561 for a in "$MAKE" "$GNUMAKE" make gmake gnumake; do
562     if test -n "$a"; then
563         $a --version 2> /dev/null | grep GNU  2>&1 > /dev/null
564         if test $? -eq 0;  then
565             if test "$build_os" = "cygwin"; then
566                 if test -n "$($a -v | grep 'Built for Windows')" ; then
567                     GNUMAKE="$(cygpath -m "$(which "$(cygpath -u $a)")")"
568                     GNUMAKE_WIN_NATIVE="TRUE"
569                 else
570                     GNUMAKE=`which $a`
571                 fi
572             else
573                 GNUMAKE=`which $a`
574             fi
575             break
576         fi
577     fi
578 done
579 AC_MSG_RESULT($GNUMAKE)
580 if test -z "$GNUMAKE"; then
581     AC_MSG_ERROR([not found. install GNU Make.])
582 else
583     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
584         AC_MSG_NOTICE([Using a native Win32 GNU Make version.])
585     fi
588 win_short_path_for_make()
590     local short_path="$1"
591     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
592         cygpath -sm "$short_path"
593     else
594         cygpath -u "$(cygpath -d "$short_path")"
595     fi
599 if test "$build_os" = "cygwin"; then
600     PathFormat "$SRC_ROOT"
601     SRC_ROOT="$formatted_path"
602     PathFormat "$BUILDDIR"
603     BUILDDIR="$formatted_path"
604     x_Cygwin=
605     AC_MSG_CHECKING(for explicit COMSPEC)
606     if test -z "$COMSPEC"; then
607         AC_MSG_ERROR([COMSPEC not set in environment, please set it and rerun])
608     else
609         AC_MSG_RESULT([found: $COMSPEC])
610     fi
613 AC_SUBST(SRC_ROOT)
614 AC_SUBST(BUILDDIR)
615 AC_SUBST(x_Cygwin)
616 AC_DEFINE_UNQUOTED(SRCDIR,"$SRC_ROOT")
617 AC_DEFINE_UNQUOTED(SRC_ROOT,"$SRC_ROOT")
618 AC_DEFINE_UNQUOTED(BUILDDIR,"$BUILDDIR")
620 if test "z$EUID" = "z0" -a "`uname -o 2>/dev/null`" = "Cygwin"; then
621     AC_MSG_ERROR([You must build LibreOffice as a normal user - not using an administrative account])
624 # need sed in os checks...
625 AC_PATH_PROGS(SED, sed)
626 if test -z "$SED"; then
627     AC_MSG_ERROR([install sed to run this script])
630 # Set the ENABLE_LTO variable
631 # ===================================================================
632 AC_MSG_CHECKING([whether to use link-time optimization])
633 if test -n "$enable_lto" -a "$enable_lto" != "no"; then
634     ENABLE_LTO="TRUE"
635     AC_MSG_RESULT([yes])
636 else
637     ENABLE_LTO=""
638     AC_MSG_RESULT([no])
640 AC_SUBST(ENABLE_LTO)
642 AC_ARG_ENABLE(fuzz-options,
643     AS_HELP_STRING([--enable-fuzz-options],
644         [Randomly enable or disable each of those configurable options
645          that are supposed to be freely selectable without interdependencies,
646          or where bad interaction from interdependencies is automatically avoided.])
649 dnl ===================================================================
650 dnl When building for Android, --with-android-ndk,
651 dnl --with-android-ndk-toolchain-version and --with-android-sdk are
652 dnl mandatory
653 dnl ===================================================================
655 AC_ARG_WITH(android-ndk,
656     AS_HELP_STRING([--with-android-ndk],
657         [Specify location of the Android Native Development Kit. Mandatory when building for Android.]),
660 AC_ARG_WITH(android-ndk-toolchain-version,
661     AS_HELP_STRING([--with-android-ndk-toolchain-version],
662         [Specify which toolchain version to use, of those present in the
663         Android NDK you are using. The default (and only supported version currently) is "clang5.0"]),,
664         with_android_ndk_toolchain_version=clang5.0)
666 AC_ARG_WITH(android-sdk,
667     AS_HELP_STRING([--with-android-sdk],
668         [Specify location of the Android SDK. Mandatory when building for Android.]),
671 AC_ARG_WITH(android-api-level,
672     AS_HELP_STRING([--with-android-api-level],
673         [Specify the API level when building for Android. Defaults to 16 for ARM and x86 and to 21 for ARM64 and x86-64]),
676 ANDROID_NDK_DIR=
677 if test -z "$with_android_ndk" -a -e "$SRC_ROOT/external/android-ndk" -a "$build" != "$host"; then
678     with_android_ndk="$SRC_ROOT/external/android-ndk"
680 if test -n "$with_android_ndk"; then
681     eval ANDROID_NDK_DIR=$with_android_ndk
683     # Set up a lot of pre-canned defaults
685     if test ! -f $ANDROID_NDK_DIR/RELEASE.TXT; then
686         if test ! -f $ANDROID_NDK_DIR/source.properties; then
687             AC_MSG_ERROR([Unrecognized Android NDK. Missing RELEASE.TXT or source.properties file in $ANDROID_NDK_DIR.])
688         fi
689         ANDROID_NDK_VERSION=`sed -n -e 's/Pkg.Revision = //p' $ANDROID_NDK_DIR/source.properties`
690     else
691         ANDROID_NDK_VERSION=`cut -f1 -d' ' <$ANDROID_NDK_DIR/RELEASE.TXT`
692     fi
693     if test -z "$ANDROID_NDK_VERSION";  then
694         AC_MSG_ERROR([Failed to determine Android NDK version. Please check your installation.])
695     fi
696     case $ANDROID_NDK_VERSION in
697     r9*|r10*)
698         AC_MSG_ERROR([Building for Android is only supported with NDK versions above 16.x*])
699         ;;
700     11.1.*|12.1.*|13.1.*|14.1.*)
701         AC_MSG_ERROR([Building for Android is only supported with NDK versions above 16.x.*])
702         ;;
703     16.*|17.*|18.*|19.*|20.*)
704         ;;
705     *)
706         AC_MSG_WARN([Untested Android NDK version $ANDROID_NDK_VERSION, only versions 16.* til 20.* have been used successfully. Proceed at your own risk.])
707         add_warning "Untested Android NDK version $ANDROID_NDK_VERSION, only versions 16.* til 20.* have been used successfully. Proceed at your own risk."
708         ;;
709     esac
711     ANDROID_API_LEVEL=16
712     if test -n "$with_android_api_level" ; then
713         ANDROID_API_LEVEL="$with_android_api_level"
714     fi
716     android_cpu=$host_cpu
717     if test $host_cpu = arm; then
718         android_platform_prefix=arm-linux-androideabi
719         android_gnu_prefix=$android_platform_prefix
720         LLVM_TRIPLE=armv7a-linux-androideabi
721         ANDROID_APP_ABI=armeabi-v7a
722         ANDROIDCFLAGS="-mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=neon -Wl,--fix-cortex-a8"
723     elif test $host_cpu = aarch64; then
724         android_platform_prefix=aarch64-linux-android
725         android_gnu_prefix=$android_platform_prefix
726         LLVM_TRIPLE=$android_platform_prefix
727         # minimum android version that supports aarch64
728         if test "$ANDROID_API_LEVEL" -lt "21" ; then
729             ANDROID_API_LEVEL=21
730         fi
731         ANDROID_APP_ABI=arm64-v8a
732     elif test $host_cpu = x86_64; then
733         android_platform_prefix=x86_64-linux-android
734         android_gnu_prefix=$android_platform_prefix
735         LLVM_TRIPLE=$android_platform_prefix
736         # minimum android version that supports x86_64
737         ANDROID_API_LEVEL=21
738         ANDROID_APP_ABI=x86_64
739     else
740         # host_cpu is something like "i386" or "i686" I guess, NDK uses
741         # "x86" in some contexts
742         android_cpu=x86
743         android_platform_prefix=$android_cpu
744         android_gnu_prefix=i686-linux-android
745         LLVM_TRIPLE=$android_gnu_prefix
746         ANDROID_APP_ABI=x86
747     fi
749     case "$with_android_ndk_toolchain_version" in
750     clang5.0)
751         ANDROID_GCC_TOOLCHAIN_VERSION=4.9
752         ;;
753     *)
754         AC_MSG_ERROR([Unrecognized value for the --with-android-ndk-toolchain-version option. Building for Android is only supported with Clang 5.*])
755     esac
757     AC_MSG_NOTICE([using the Android API level... $ANDROID_API_LEVEL])
759     # NDK 15 or later toolchain is 64bit-only, except for Windows that we don't support. Using a 64-bit
760     # linker is required if you compile large parts of the code with -g. A 32-bit linker just won't
761     # manage to link the (app-specific) single huge .so that is built for the app in
762     # android/source/ if there is debug information in a significant part of the object files.
763     # (A 64-bit ld.gold grows too much over 10 gigabytes of virtual space when linking such a .so if
764     # all objects have been built with debug information.)
765     case $build_os in
766     linux-gnu*)
767         android_HOST_TAG=linux-x86_64
768         ;;
769     darwin*)
770         android_HOST_TAG=darwin-x86_64
771         ;;
772     *)
773         AC_MSG_ERROR([We only support building for Android from Linux or macOS])
774         # ndk would also support windows and windows-x86_64
775         ;;
776     esac
777     android_TOOLCHAIN=$ANDROID_NDK_DIR/toolchains/llvm/prebuilt/$android_HOST_TAG
778     ANDROID_COMPILER_BIN=$android_TOOLCHAIN/bin
779     dnl TODO: NSS build uses it...
780     ANDROID_BINUTILS_PREBUILT_ROOT=$ANDROID_NDK_DIR/toolchains/$android_platform_prefix-$ANDROID_GCC_TOOLCHAIN_VERSION/prebuilt/$android_HOST_TAG
781     AC_SUBST(ANDROID_BINUTILS_PREBUILT_ROOT)
783     test -z "$AR" && AR=$ANDROID_COMPILER_BIN/$android_gnu_prefix-ar
784     test -z "$NM" && NM=$ANDROID_COMPILER_BIN/$android_gnu_prefix-nm
785     test -z "$OBJDUMP" && OBJDUMP=$ANDROID_COMPILER_BIN/$android_gnu_prefix-objdump
786     test -z "$RANLIB" && RANLIB=$ANDROID_COMPILER_BIN/$android_gnu_prefix-ranlib
787     test -z "$STRIP" && STRIP=$ANDROID_COMPILER_BIN/$android_gnu_prefix-strip
789     ANDROIDCFLAGS="$ANDROIDCFLAGS -target ${LLVM_TRIPLE}${ANDROID_API_LEVEL}"
790     ANDROIDCFLAGS="$ANDROIDCFLAGS -no-canonical-prefixes -ffunction-sections -fdata-sections -Qunused-arguments"
791     if test "$ENABLE_LTO" = TRUE; then
792         # -flto comes from com_GCC_defs.mk, too, but we need to make sure it gets passed as part of
793         # $CC and $CXX when building external libraries
794         ANDROIDCFLAGS="$ANDROIDCFLAGS -flto -fuse-linker-plugin -O2"
795     fi
797     ANDROIDCXXFLAGS="$ANDROIDCFLAGS -stdlib=libc++"
799     if test -z "$CC"; then
800         CC="$ANDROID_COMPILER_BIN/clang $ANDROIDCFLAGS"
801         CC_BASE="clang"
802     fi
803     if test -z "$CXX"; then
804         CXX="$ANDROID_COMPILER_BIN/clang++ $ANDROIDCXXFLAGS"
805         CXX_BASE="clang++"
806     fi
808 AC_SUBST(ANDROID_NDK_DIR)
809 AC_SUBST(ANDROID_APP_ABI)
810 AC_SUBST(ANDROID_GCC_TOOLCHAIN_VERSION)
812 dnl ===================================================================
813 dnl --with-android-sdk
814 dnl ===================================================================
815 ANDROID_SDK_DIR=
816 if test -z "$with_android_sdk" -a -e "$SRC_ROOT/external/android-sdk-linux" -a "$build" != "$host"; then
817     with_android_sdk="$SRC_ROOT/external/android-sdk-linux"
819 if test -n "$with_android_sdk"; then
820     eval ANDROID_SDK_DIR=$with_android_sdk
821     PATH="$ANDROID_SDK_DIR/platform-tools:$ANDROID_SDK_DIR/tools:$PATH"
823 AC_SUBST(ANDROID_SDK_DIR)
825 AC_ARG_ENABLE([android-lok],
826     AS_HELP_STRING([--enable-android-lok],
827         [The Android app from the android/ subdir needs several tweaks all
828          over the place that break the LOK when used in the Online-based
829          Android app.  This switch indicates that the intent of this build is
830          actually the Online-based, non-modified LOK.])
832 ENABLE_ANDROID_LOK=
833 if test -n "$ANDROID_NDK_DIR" ; then
834     if test "$enable_android_lok" = yes; then
835         ENABLE_ANDROID_LOK=TRUE
836         AC_DEFINE(HAVE_FEATURE_ANDROID_LOK)
837         AC_MSG_NOTICE([building the Android version... for the Online-based Android app])
838     else
839         AC_MSG_NOTICE([building the Android version... for the app from the android/ subdir])
840     fi
842 AC_SUBST([ENABLE_ANDROID_LOK])
844 libo_FUZZ_ARG_ENABLE([android-editing],
845     AS_HELP_STRING([--enable-android-editing],
846         [Enable the experimental editing feature on Android.])
848 ENABLE_ANDROID_EDITING=
849 if test "$enable_android_editing" = yes; then
850     ENABLE_ANDROID_EDITING=TRUE
852 AC_SUBST([ENABLE_ANDROID_EDITING])
854 disable_database_connectivity_dependencies()
856     enable_evolution2=no
857     enable_firebird_sdbc=no
858     enable_mariadb_sdbc=no
859     enable_postgresql_sdbc=no
860     enable_report_builder=no
863 # ===================================================================
865 # Start initial platform setup
867 # The using_* variables reflect platform support and should not be
868 # changed after the "End initial platform setup" block.
869 # This is also true for most test_* variables.
870 # ===================================================================
871 build_crypto=yes
872 test_clucene=no
873 test_gdb_index=no
874 test_openldap=yes
875 test_split_debug=no
876 test_webdav=yes
877 usable_dlapi=yes
879 # There is currently just iOS not using salplug, so this explicitly enables it.
880 # must: using_freetype_fontconfig
881 #  may: using_headless_plugin defaults to $using_freetype_fontconfig
882 # must: using_x11
884 # Default values, as such probably valid just for Linux, set
885 # differently below just for Mac OSX, but at least better than
886 # hardcoding these as we used to do. Much of this is duplicated also
887 # in solenv for old build system and for gbuild, ideally we should
888 # perhaps define stuff like this only here in configure.ac?
890 LINKFLAGSSHL="-shared"
891 PICSWITCH="-fpic"
892 DLLPOST=".so"
894 LINKFLAGSNOUNDEFS="-Wl,-z,defs"
896 INSTROOTBASESUFFIX=
897 INSTROOTCONTENTSUFFIX=
898 SDKDIRNAME=sdk
900 HOST_PLATFORM="$host"
902 host_cpu_for_clang="$host_cpu"
904 case "$host_os" in
906 solaris*)
907     using_freetype_fontconfig=yes
908     using_x11=yes
909     build_skia=yes
910     _os=SunOS
912     dnl ===========================================================
913     dnl Check whether we're using Solaris 10 - SPARC or Intel.
914     dnl ===========================================================
915     AC_MSG_CHECKING([the Solaris operating system release])
916     _os_release=`echo $host_os | $SED -e s/solaris2\.//`
917     if test "$_os_release" -lt "10"; then
918         AC_MSG_ERROR([use Solaris >= 10 to build LibreOffice])
919     else
920         AC_MSG_RESULT([ok ($_os_release)])
921     fi
923     dnl Check whether we're using a SPARC or i386 processor
924     AC_MSG_CHECKING([the processor type])
925     if test "$host_cpu" = "sparc" -o "$host_cpu" = "i386"; then
926         AC_MSG_RESULT([ok ($host_cpu)])
927     else
928         AC_MSG_ERROR([only SPARC and i386 processors are supported])
929     fi
930     ;;
932 linux-gnu*|k*bsd*-gnu*|linux-musl*)
933     using_freetype_fontconfig=yes
934     using_x11=yes
935     build_skia=yes
936     test_gdb_index=yes
937     test_split_debug=yes
938     if test "$enable_fuzzers" = yes; then
939         test_system_freetype=no
940     fi
941     _os=Linux
942     ;;
944 gnu)
945     using_freetype_fontconfig=yes
946     using_x11=no
947     _os=GNU
948      ;;
950 cygwin*|wsl*)
951     # When building on Windows normally with MSVC under Cygwin,
952     # configure thinks that the host platform (the platform the
953     # built code will run on) is Cygwin, even if it obviously is
954     # Windows, which in Autoconf terminology is called
955     # "mingw32". (Which is misleading as MinGW is the name of the
956     # tool-chain, not an operating system.)
958     # Somewhat confusing, yes. But this configure script doesn't
959     # look at $host etc that much, it mostly uses its own $_os
960     # variable, set here in this case statement.
962     using_freetype_fontconfig=no
963     using_x11=no
964     test_unix_dlapi=no
965     test_openldap=no
966     enable_pagein=no
967     build_skia=yes
968     _os=WINNT
970     DLLPOST=".dll"
971     LINKFLAGSNOUNDEFS=
973     if test "$host_cpu" = "aarch64"; then
974         build_skia=no
975         enable_gpgmepp=no
976         enable_coinmp=no
977         enable_firebird_sdbc=no
978     fi
979     ;;
981 darwin*) # macOS
982     using_freetype_fontconfig=no
983     using_x11=no
984     build_skia=yes
985     enable_pagein=no
986     if test -n "$LODE_HOME" ; then
987         mac_sanitize_path
988         AC_MSG_NOTICE([sanitized the PATH to $PATH])
989     fi
990     _os=Darwin
991     INSTROOTBASESUFFIX=/$PRODUCTNAME_WITHOUT_SPACES.app
992     INSTROOTCONTENTSUFFIX=/Contents
993     SDKDIRNAME=${PRODUCTNAME_WITHOUT_SPACES}${PRODUCTVERSION}_SDK
994     # See "Default values, as such probably valid just for Linux" comment above the case "$host_os"
995     LINKFLAGSSHL="-dynamiclib -single_module"
997     # -fPIC is default
998     PICSWITCH=""
1000     DLLPOST=".dylib"
1002     # -undefined error is the default
1003     LINKFLAGSNOUNDEFS=""
1004     case "$host_cpu" in
1005     aarch64|arm64)
1006         # Apple's Clang uses "arm64"
1007         host_cpu_for_clang=arm64
1008     esac
1011 ios*) # iOS
1012     using_freetype_fontconfig=no
1013     using_x11=no
1014     build_crypto=no
1015     test_libcmis=no
1016     test_openldap=no
1017     test_webdav=no
1018     if test -n "$LODE_HOME" ; then
1019         mac_sanitize_path
1020         AC_MSG_NOTICE([sanitized the PATH to $PATH])
1021     fi
1022     enable_gpgmepp=no
1023     _os=iOS
1024     enable_mpl_subset=yes
1025     enable_lotuswordpro=no
1026     disable_database_connectivity_dependencies
1027     enable_coinmp=no
1028     enable_lpsolve=no
1029     enable_extension_integration=no
1030     enable_xmlhelp=no
1031     with_ppds=no
1032     if test "$enable_ios_simulator" = "yes"; then
1033         host=x86_64-apple-darwin
1034     fi
1035     # See "Default values, as such probably valid just for Linux" comment above the case "$host_os"
1036     LINKFLAGSSHL="-dynamiclib -single_module"
1038     # -fPIC is default
1039     PICSWITCH=""
1041     DLLPOST=".dylib"
1043     # -undefined error is the default
1044     LINKFLAGSNOUNDEFS=""
1046     # HOST_PLATFORM is used for external projects and their configury typically doesn't like the "ios"
1047     # part, so use aarch64-apple-darwin for now.
1048     HOST_PLATFORM=aarch64-apple-darwin
1050     # Apple's Clang uses "arm64"
1051     host_cpu_for_clang=arm64
1054 freebsd*)
1055     using_freetype_fontconfig=yes
1056     using_x11=yes
1057     build_skia=yes
1058     AC_MSG_CHECKING([the FreeBSD operating system release])
1059     if test -n "$with_os_version"; then
1060         OSVERSION="$with_os_version"
1061     else
1062         OSVERSION=`/sbin/sysctl -n kern.osreldate`
1063     fi
1064     AC_MSG_RESULT([found OSVERSION=$OSVERSION])
1065     AC_MSG_CHECKING([which thread library to use])
1066     if test "$OSVERSION" -lt "500016"; then
1067         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1068         PTHREAD_LIBS="-pthread"
1069     elif test "$OSVERSION" -lt "502102"; then
1070         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1071         PTHREAD_LIBS="-lc_r"
1072     else
1073         PTHREAD_CFLAGS=""
1074         PTHREAD_LIBS="-pthread"
1075     fi
1076     AC_MSG_RESULT([$PTHREAD_LIBS])
1077     _os=FreeBSD
1078     ;;
1080 *netbsd*)
1081     using_freetype_fontconfig=yes
1082     using_x11=yes
1083     test_gtk3_kde5=no
1084     build_skia=yes
1085     PTHREAD_LIBS="-pthread -lpthread"
1086     _os=NetBSD
1087     ;;
1089 aix*)
1090     using_freetype_fontconfig=yes
1091     using_x11=yes
1092     test_randr=no
1093     test_gstreamer_1_0=no
1094     PTHREAD_LIBS=-pthread
1095     _os=AIX
1096     ;;
1098 openbsd*)
1099     using_freetype_fontconfig=yes
1100     using_x11=yes
1101     PTHREAD_CFLAGS="-D_THREAD_SAFE"
1102     PTHREAD_LIBS="-pthread"
1103     _os=OpenBSD
1104     ;;
1106 dragonfly*)
1107     using_freetype_fontconfig=yes
1108     using_x11=yes
1109     build_skia=yes
1110     PTHREAD_LIBS="-pthread"
1111     _os=DragonFly
1112     ;;
1114 linux-android*)
1115     # API exists, but seems not really usable since Android 7 AFAIK
1116     usable_dlapi=no
1117     using_freetype_fontconfig=yes
1118     using_headless_plugin=no
1119     using_x11=no
1120     build_crypto=no
1121     test_openldap=no
1122     test_system_freetype=no
1123     test_webdav=no
1124     disable_database_connectivity_dependencies
1125     enable_lotuswordpro=no
1126     enable_mpl_subset=yes
1127     enable_cairo_canvas=no
1128     enable_coinmp=yes
1129     enable_lpsolve=no
1130     enable_odk=no
1131     enable_python=no
1132     enable_xmlhelp=no
1133     _os=Android
1134     ;;
1136 haiku*)
1137     using_freetype_fontconfig=yes
1138     using_x11=no
1139     test_gtk3=no
1140     test_gtk3_kde5=no
1141     test_kf5=yes
1142     enable_odk=no
1143     enable_coinmp=no
1144     enable_pdfium=no
1145     enable_sdremote=no
1146     enable_postgresql_sdbc=no
1147     enable_firebird_sdbc=no
1148     _os=Haiku
1149     ;;
1151 emscripten)
1152     # API currently just exists in headers, not code
1153     usable_dlapi=no
1154     using_freetype_fontconfig=yes
1155     using_x11=yes
1156     test_openldap=no
1157     test_qt5=yes
1158     test_split_debug=yes
1159     test_system_freetype=no
1160     enable_compiler_plugins=no
1161     enable_customtarget_components=yes
1162     enable_split_debug=yes
1163     enable_wasm_strip=yes
1164     with_system_zlib=no
1165     with_theme="colibre"
1166     _os=Emscripten
1167     ;;
1170     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
1171     ;;
1172 esac
1174 AC_SUBST(HOST_PLATFORM)
1176 if test -z "$using_x11" -o -z "$using_freetype_fontconfig"; then
1177     AC_MSG_ERROR([You must set \$using_freetype_fontconfig and \$using_x11 for your platform])
1180 # Set defaults, if not set by platform
1181 test "${test_cups+set}" = set || test_cups="$using_x11"
1182 test "${test_dbus+set}" = set || test_dbus="$using_x11"
1183 test "${test_gen+set}" = set || test_gen="$using_x11"
1184 test "${test_gstreamer_1_0+set}" = set || test_gstreamer_1_0="$using_x11"
1185 test "${test_gtk3+set}" = set || test_gtk3="$using_x11"
1186 test "${test_gtk4+set}" = set || test_gtk4="$using_x11"
1187 test "${test_kf5+set}" = set || test_kf5="$using_x11"
1188 # don't handle test_qt5, so it can disable test_kf5 later
1189 test "${test_qt6+set}" = set || test_qt6="$using_x11"
1190 test "${test_randr+set}" = set || test_randr="$using_x11"
1191 test "${test_xrender+set}" = set || test_xrender="$using_x11"
1192 test "${using_headless_plugin+set}" = set || using_headless_plugin="$using_freetype_fontconfig"
1194 test "${test_gtk3_kde5+set}" != set -a "$test_kf5" = yes -a "$test_gtk3" = yes && test_gtk3_kde5="yes"
1195 # Make sure fontconfig and freetype test both either system or not
1196 test "${test_system_fontconfig+set}" != set -a "${test_system_freetype+set}" = set && test_system_fontconfig="$test_system_freetype"
1197 test "${test_system_freetype+set}" != set -a "${test_system_fontconfig+set}" = set && test_system_freetype="$test_system_fontconfig"
1199 # convenience / platform overriding "fixes"
1200 # Don't sort!
1201 test "$test_kf5" = yes -a "$test_qt5" = no && test_kf5=no
1202 test "$test_kf5" = yes && test_qt5=yes
1203 test "$test_gtk3" != yes && enable_gtk3=no
1204 test "$test_gtk3" != yes -o "$test_kf5" != yes && test_gtk3_kde5=no
1205 test "$using_freetype_fontconfig" = no && using_headless_plugin=no
1206 test "$using_freetype_fontconfig" = yes && test_cairo=yes
1208 # Keep in sync with the above $using_x11 depending test default list
1209 disable_x11_tests()
1211     test_cups=no
1212     test_dbus=no
1213     test_gen=no
1214     test_gstreamer_1_0=no
1215     test_gtk3_kde5=no
1216     test_gtk3=no
1217     test_gtk4=no
1218     test_kf5=no
1219     test_qt5=no
1220     test_qt6=no
1221     test_randr=no
1222     test_xrender=no
1225 test "$using_x11" = yes && USING_X11=TRUE
1227 if test "$using_freetype_fontconfig" = yes; then
1228     USE_HEADLESS_CODE=TRUE
1229     if test "$using_headless_plugin" = yes; then
1230         AC_DEFINE(ENABLE_HEADLESS)
1231         ENABLE_HEADLESS=TRUE
1232     fi
1233 else
1234     test_fontconfig=no
1235     test_freetype=no
1238 AC_SUBST(ENABLE_HEADLESS)
1239 AC_SUBST(USE_HEADLESS_CODE)
1241 AC_MSG_NOTICE([VCL platform has a usable dynamic loading API: $usable_dlapi])
1242 AC_MSG_NOTICE([VCL platform uses freetype+fontconfig: $using_freetype_fontconfig])
1243 AC_MSG_NOTICE([VCL platform uses headless plugin: $using_headless_plugin])
1244 AC_MSG_NOTICE([VCL platform uses X11: $using_x11])
1246 # ===================================================================
1248 # End initial platform setup
1250 # ===================================================================
1252 if test "$_os" = "Android" ; then
1253     # Verify that the NDK and SDK options are proper
1254     if test -z "$with_android_ndk"; then
1255         AC_MSG_ERROR([the --with-android-ndk option is mandatory, unless it is available at external/android-ndk/.])
1256     elif test ! -f "$ANDROID_NDK_DIR/meta/abis.json"; then
1257         AC_MSG_ERROR([the --with-android-ndk option does not point to an Android NDK])
1258     fi
1260     if test -z "$ANDROID_SDK_DIR"; then
1261         AC_MSG_ERROR([the --with-android-sdk option is mandatory, unless it is available at external/android-sdk-linux/.])
1262     elif test ! -d "$ANDROID_SDK_DIR/platforms"; then
1263         AC_MSG_ERROR([the --with-android-sdk option does not point to an Android SDK])
1264     fi
1267 if test "$_os" = "AIX"; then
1268     AC_PATH_PROG(GAWK, gawk)
1269     if test -z "$GAWK"; then
1270         AC_MSG_ERROR([gawk not found in \$PATH])
1271     fi
1274 AC_SUBST(SDKDIRNAME)
1276 AC_SUBST(PTHREAD_CFLAGS)
1277 AC_SUBST(PTHREAD_LIBS)
1279 # Check for explicit A/C/CXX/OBJC/OBJCXX/LDFLAGS.
1280 # By default use the ones specified by our build system,
1281 # but explicit override is possible.
1282 AC_MSG_CHECKING(for explicit AFLAGS)
1283 if test -n "$AFLAGS"; then
1284     AC_MSG_RESULT([$AFLAGS])
1285     x_AFLAGS=
1286 else
1287     AC_MSG_RESULT(no)
1288     x_AFLAGS=[\#]
1290 AC_MSG_CHECKING(for explicit CFLAGS)
1291 if test -n "$CFLAGS"; then
1292     AC_MSG_RESULT([$CFLAGS])
1293     x_CFLAGS=
1294 else
1295     AC_MSG_RESULT(no)
1296     x_CFLAGS=[\#]
1298 AC_MSG_CHECKING(for explicit CXXFLAGS)
1299 if test -n "$CXXFLAGS"; then
1300     AC_MSG_RESULT([$CXXFLAGS])
1301     x_CXXFLAGS=
1302 else
1303     AC_MSG_RESULT(no)
1304     x_CXXFLAGS=[\#]
1306 AC_MSG_CHECKING(for explicit OBJCFLAGS)
1307 if test -n "$OBJCFLAGS"; then
1308     AC_MSG_RESULT([$OBJCFLAGS])
1309     x_OBJCFLAGS=
1310 else
1311     AC_MSG_RESULT(no)
1312     x_OBJCFLAGS=[\#]
1314 AC_MSG_CHECKING(for explicit OBJCXXFLAGS)
1315 if test -n "$OBJCXXFLAGS"; then
1316     AC_MSG_RESULT([$OBJCXXFLAGS])
1317     x_OBJCXXFLAGS=
1318 else
1319     AC_MSG_RESULT(no)
1320     x_OBJCXXFLAGS=[\#]
1322 AC_MSG_CHECKING(for explicit LDFLAGS)
1323 if test -n "$LDFLAGS"; then
1324     AC_MSG_RESULT([$LDFLAGS])
1325     x_LDFLAGS=
1326 else
1327     AC_MSG_RESULT(no)
1328     x_LDFLAGS=[\#]
1330 AC_SUBST(AFLAGS)
1331 AC_SUBST(CFLAGS)
1332 AC_SUBST(CXXFLAGS)
1333 AC_SUBST(OBJCFLAGS)
1334 AC_SUBST(OBJCXXFLAGS)
1335 AC_SUBST(LDFLAGS)
1336 AC_SUBST(x_AFLAGS)
1337 AC_SUBST(x_CFLAGS)
1338 AC_SUBST(x_CXXFLAGS)
1339 AC_SUBST(x_OBJCFLAGS)
1340 AC_SUBST(x_OBJCXXFLAGS)
1341 AC_SUBST(x_LDFLAGS)
1343 dnl These are potentially set for MSVC, in the code checking for UCRT below:
1344 my_original_CFLAGS=$CFLAGS
1345 my_original_CXXFLAGS=$CXXFLAGS
1346 my_original_CPPFLAGS=$CPPFLAGS
1348 dnl The following checks for gcc, cc and then cl (if it weren't guarded for win32)
1349 dnl Needs to precede the AC_C_BIGENDIAN and AC_SEARCH_LIBS calls below, which apparently call
1350 dnl AC_PROG_CC internally.
1351 if test "$_os" != "WINNT"; then
1352     # AC_PROG_CC sets CFLAGS to -g -O2 if not set, avoid that
1353     save_CFLAGS=$CFLAGS
1354     AC_PROG_CC
1355     CFLAGS=$save_CFLAGS
1356     if test -z "$CC_BASE"; then
1357         CC_BASE=`first_arg_basename "$CC"`
1358     fi
1361 if test "$_os" != "WINNT"; then
1362     AC_C_BIGENDIAN([ENDIANNESS=big], [ENDIANNESS=little])
1363 else
1364     ENDIANNESS=little
1366 AC_SUBST(ENDIANNESS)
1368 if test "$usable_dlapi" != no; then
1369     AC_DEFINE([HAVE_DLAPI])
1370     if test "$test_unix_dlapi" != no; then
1371         save_LIBS="$LIBS"
1372         AC_SEARCH_LIBS([dlsym], [dl],
1373             [case "$ac_cv_search_dlsym" in -l*) UNIX_DLAPI_LIBS="$ac_cv_search_dlsym";; esac],
1374             [AC_MSG_ERROR([dlsym not found in either libc nor libdl])])
1375         LIBS="$save_LIBS"
1376         AC_DEFINE([HAVE_UNIX_DLAPI])
1377     fi
1379 AC_SUBST(UNIX_DLAPI_LIBS)
1381 # Check for a (GNU) backtrace implementation
1382 AC_ARG_VAR([BACKTRACE_CFLAGS], [Compiler flags needed to use backtrace(3)])
1383 AC_ARG_VAR([BACKTRACE_LIBS], [Linker flags needed to use backtrace(3)])
1384 AS_IF([test "x$BACKTRACE_LIBS$BACKTRACE_CFLAGS" = x], [
1385     save_LIBS="$LIBS"
1386     AC_SEARCH_LIBS([backtrace], [libexecinfo],
1387         [case "$ac_cv_search_backtrace" in -l*) BACKTRACE_LIBS="$ac_cv_search_backtrace";; esac],
1388         [PKG_CHECK_MODULES([BACKTRACE], [libexecinfo], [ac_cv_search_backtrace=], [:])])
1389     LIBS="$save_LIBS"
1391 AS_IF([test "x$ac_cv_search_backtrace" != xno ], [
1392     AC_DEFINE([HAVE_FEATURE_BACKTRACE])
1395 dnl ===================================================================
1396 dnl Sanity checks for Emscripten SDK setup
1397 dnl ===================================================================
1399 EMSCRIPTEN_MIN_MAJOR=2
1400 EMSCRIPTEN_MIN_MINOR=0
1401 EMSCRIPTEN_MIN_TINY=31
1402 EMSCRIPTEN_MIN_VERSION="${EMSCRIPTEN_MIN_MAJOR}.${EMSCRIPTEN_MIN_MINOR}.${EMSCRIPTEN_MIN_TINY}"
1404 if test "$_os" = "Emscripten"; then
1405     AC_MSG_CHECKING([if Emscripten is at least $EMSCRIPTEN_MIN_VERSION])
1406     AS_IF([test -z "$EMSDK"],
1407           [AC_MSG_ERROR([No \$EMSDK environment variable.])])
1408     EMSCRIPTEN_VERSION_H=$EMSDK/upstream/emscripten/cache/sysroot/include/emscripten/version.h
1409     if test -f "$EMSCRIPTEN_VERSION_H"; then
1410         EMSCRIPTEN_MAJOR=$($GREP __EMSCRIPTEN_major__ "$EMSCRIPTEN_VERSION_H" | $SED -ne 's/.*__EMSCRIPTEN_major__ //p')
1411         EMSCRIPTEN_MINOR=$($GREP __EMSCRIPTEN_minor__ "$EMSCRIPTEN_VERSION_H" | $SED -ne 's/.*__EMSCRIPTEN_minor__ //p')
1412         EMSCRIPTEN_TINY=$($GREP __EMSCRIPTEN_tiny__ "$EMSCRIPTEN_VERSION_H" | $SED -ne 's/.*__EMSCRIPTEN_tiny__ //p')
1413     else
1414         EMSCRIPTEN_DEFINES=$(echo | emcc -dM -E - | $GREP __EMSCRIPTEN_)
1415         EMSCRIPTEN_MAJOR=$(echo "$EMSCRIPTEN_DEFINES" | $SED -ne 's/.*__EMSCRIPTEN_major__ //p')
1416         EMSCRIPTEN_MINOR=$(echo "$EMSCRIPTEN_DEFINES" | $SED -ne 's/.*__EMSCRIPTEN_minor__ //p')
1417         EMSCRIPTEN_TINY=$(echo "$EMSCRIPTEN_DEFINES" | $SED -ne 's/.*__EMSCRIPTEN_tiny__ //p')
1418     fi
1420     EMSCRIPTEN_VERSION="${EMSCRIPTEN_MAJOR}.${EMSCRIPTEN_MINOR}.${EMSCRIPTEN_TINY}"
1422     check_semantic_version_three_prefixed EMSCRIPTEN MIN
1423     if test $? -eq 0; then
1424         AC_MSG_RESULT([yes ($EMSCRIPTEN_VERSION)])
1425     else
1426         AC_MSG_ERROR([no, found $EMSCRIPTEN_VERSION])
1427     fi
1429     EMSCRIPTEN_ERROR=0
1430     if ! which emconfigure >/dev/null 2>&1; then
1431         AC_MSG_WARN([emconfigure must be in your \$PATH])
1432         EMSCRIPTEN_ERROR=1
1433     fi
1434     if test -z "$EMMAKEN_JUST_CONFIGURE"; then
1435         AC_MSG_WARN(["\$EMMAKEN_JUST_CONFIGURE wasn't set by emconfigure. Prefix configure or use autogen.sh])
1436         EMSCRIPTEN_ERROR=1
1437     fi
1438     EMSDK_FILE_PACKAGER="$(em-config EMSCRIPTEN_ROOT)"/tools/file_packager
1439     if ! test -x "$EMSDK_FILE_PACKAGER"; then
1440         AC_MSG_WARN([No file_packager found in $(em-config EMSCRIPTEN_ROOT)/tools/file_packager.])
1441         EMSCRIPTEN_ERROR=1
1442     fi
1443     if test $EMSCRIPTEN_ERROR -ne 0; then
1444         AC_MSG_ERROR(["Please fix your EMSDK setup to build with Emscripten!"])
1445     fi
1447 AC_SUBST(EMSDK_FILE_PACKAGER)
1449 ###############################################################################
1450 # Extensions switches --enable/--disable
1451 ###############################################################################
1452 # By default these should be enabled unless having extra dependencies.
1453 # If there is extra dependency over configure options then the enable should
1454 # be automagic based on whether the requiring feature is enabled or not.
1455 # All this options change anything only with --enable-extension-integration.
1457 # The name of this option and its help string makes it sound as if
1458 # extensions are built anyway, just not integrated in the installer,
1459 # if you use --disable-extension-integration. Is that really the
1460 # case?
1462 AC_ARG_ENABLE(ios-simulator,
1463     AS_HELP_STRING([--enable-ios-simulator],
1464         [build for iOS simulator])
1467 libo_FUZZ_ARG_ENABLE(extension-integration,
1468     AS_HELP_STRING([--disable-extension-integration],
1469         [Disable integration of the built extensions in the installer of the
1470          product. Use this switch to disable the integration.])
1473 AC_ARG_ENABLE(avmedia,
1474     AS_HELP_STRING([--disable-avmedia],
1475         [Disable displaying and inserting AV media in documents. Work in progress, use only if you are hacking on it.]),
1476 ,test "${enable_avmedia+set}" = set || enable_avmedia=yes)
1478 AC_ARG_ENABLE(database-connectivity,
1479     AS_HELP_STRING([--disable-database-connectivity],
1480         [Disable various database connectivity. Work in progress, use only if you are hacking on it.])
1483 # This doesn't mean not building (or "integrating") extensions
1484 # (although it probably should; i.e. it should imply
1485 # --disable-extension-integration I guess), it means not supporting
1486 # any extension mechanism at all
1487 libo_FUZZ_ARG_ENABLE(extensions,
1488     AS_HELP_STRING([--disable-extensions],
1489         [Disable all add-on extension functionality. Work in progress, use only if you are hacking on it.])
1492 AC_ARG_ENABLE(scripting,
1493     AS_HELP_STRING([--disable-scripting],
1494         [Disable BASIC, Java and Python. Work in progress, use only if you are hacking on it.]),
1495 ,test "${enable_scripting+set}" = set || enable_scripting=yes)
1497 # This is mainly for Android and iOS, but could potentially be used in some
1498 # special case otherwise, too, so factored out as a separate setting
1500 AC_ARG_ENABLE(dynamic-loading,
1501     AS_HELP_STRING([--disable-dynamic-loading],
1502         [Disable any use of dynamic loading of code. Work in progress, use only if you are hacking on it.])
1505 libo_FUZZ_ARG_ENABLE(report-builder,
1506     AS_HELP_STRING([--disable-report-builder],
1507         [Disable the Report Builder.])
1510 libo_FUZZ_ARG_ENABLE(ext-wiki-publisher,
1511     AS_HELP_STRING([--enable-ext-wiki-publisher],
1512         [Enable the Wiki Publisher extension.])
1515 libo_FUZZ_ARG_ENABLE(lpsolve,
1516     AS_HELP_STRING([--disable-lpsolve],
1517         [Disable compilation of the lp solve solver ])
1519 libo_FUZZ_ARG_ENABLE(coinmp,
1520     AS_HELP_STRING([--disable-coinmp],
1521         [Disable compilation of the CoinMP solver ])
1524 libo_FUZZ_ARG_ENABLE(pdfimport,
1525     AS_HELP_STRING([--disable-pdfimport],
1526         [Disable building the PDF import feature.])
1529 libo_FUZZ_ARG_ENABLE(pdfium,
1530     AS_HELP_STRING([--disable-pdfium],
1531         [Disable building PDFium. Results in unsecure PDF signature verification.])
1534 libo_FUZZ_ARG_ENABLE(skia,
1535     AS_HELP_STRING([--disable-skia],
1536         [Disable building Skia. Use --enable-skia=debug to build without optimizations.])
1539 ###############################################################################
1541 dnl ---------- *** ----------
1543 libo_FUZZ_ARG_ENABLE(mergelibs,
1544     AS_HELP_STRING([--enable-mergelibs],
1545         [Merge several of the smaller libraries into one big, "merged", one.])
1548 libo_FUZZ_ARG_ENABLE(breakpad,
1549     AS_HELP_STRING([--enable-breakpad],
1550         [Enables breakpad for crash reporting.])
1553 libo_FUZZ_ARG_ENABLE(crashdump,
1554     AS_HELP_STRING([--disable-crashdump],
1555         [Disable dump.ini and dump-file, when --enable-breakpad])
1558 AC_ARG_ENABLE(fetch-external,
1559     AS_HELP_STRING([--disable-fetch-external],
1560         [Disables fetching external tarballs from web sources.])
1563 AC_ARG_ENABLE(fuzzers,
1564     AS_HELP_STRING([--enable-fuzzers],
1565         [Enables building libfuzzer targets for fuzz testing.])
1568 libo_FUZZ_ARG_ENABLE(pch,
1569     AS_HELP_STRING([--enable-pch=<yes/no/system/base/normal/full>],
1570         [Enables precompiled header support for C++. Forced default on Windows/VC build.
1571          Using 'system' will include only external headers, 'base' will add also headers
1572          from base modules, 'normal' will also add all headers except from the module built,
1573          'full' will use all suitable headers even from a module itself.])
1576 libo_FUZZ_ARG_ENABLE(epm,
1577     AS_HELP_STRING([--enable-epm],
1578         [LibreOffice includes self-packaging code, that requires epm, however epm is
1579          useless for large scale package building.])
1582 libo_FUZZ_ARG_ENABLE(odk,
1583     AS_HELP_STRING([--enable-odk],
1584         [Enable building the Office Development Kit, the part that extensions need to build against])
1587 AC_ARG_ENABLE(mpl-subset,
1588     AS_HELP_STRING([--enable-mpl-subset],
1589         [Don't compile any pieces which are not MPL or more liberally licensed])
1592 libo_FUZZ_ARG_ENABLE(evolution2,
1593     AS_HELP_STRING([--enable-evolution2],
1594         [Allows the built-in evolution 2 addressbook connectivity build to be
1595          enabled.])
1598 AC_ARG_ENABLE(avahi,
1599     AS_HELP_STRING([--enable-avahi],
1600         [Determines whether to use Avahi to advertise Impress to remote controls.])
1603 libo_FUZZ_ARG_ENABLE(werror,
1604     AS_HELP_STRING([--enable-werror],
1605         [Turn warnings to errors. (Has no effect in modules where the treating
1606          of warnings as errors is disabled explicitly.)]),
1609 libo_FUZZ_ARG_ENABLE(assert-always-abort,
1610     AS_HELP_STRING([--enable-assert-always-abort],
1611         [make assert() failures abort even when building without --enable-debug or --enable-dbgutil.]),
1614 libo_FUZZ_ARG_ENABLE(dbgutil,
1615     AS_HELP_STRING([--enable-dbgutil],
1616         [Provide debugging support from --enable-debug and include additional debugging
1617          utilities such as object counting or more expensive checks.
1618          This is the recommended option for developers.
1619          Note that this makes the build ABI incompatible, it is not possible to mix object
1620          files or libraries from a --enable-dbgutil and a --disable-dbgutil build.]))
1622 libo_FUZZ_ARG_ENABLE(debug,
1623     AS_HELP_STRING([--enable-debug],
1624         [Include debugging information, disable compiler optimization and inlining plus
1625          extra debugging code like assertions. Extra large build! (enables -g compiler flag).]))
1627 libo_FUZZ_ARG_ENABLE(split-debug,
1628     AS_HELP_STRING([--disable-split-debug],
1629         [Disable using split debug information (-gsplit-dwarf compile flag). Split debug information
1630          saves disk space and build time, but requires tools that support it (both build tools and debuggers).]))
1632 libo_FUZZ_ARG_ENABLE(gdb-index,
1633     AS_HELP_STRING([--disable-gdb-index],
1634         [Disables creating debug information in the gdb index format, which makes gdb start faster.
1635          The feature requires a linker that supports the --gdb-index option.]))
1637 libo_FUZZ_ARG_ENABLE(sal-log,
1638     AS_HELP_STRING([--enable-sal-log],
1639         [Make SAL_INFO and SAL_WARN calls do something even in a non-debug build.]))
1641 libo_FUZZ_ARG_ENABLE(symbols,
1642     AS_HELP_STRING([--enable-symbols],
1643         [Generate debug information.
1644          By default, enabled for --enable-debug and --enable-dbgutil, disabled
1645          otherwise. It is possible to explicitly specify gbuild build targets
1646          (where 'all' means everything, '-' prepended means to not enable, '/' appended means
1647          everything in the directory; there is no ordering, more specific overrides
1648          more general, and disabling takes precedence).
1649          Example: --enable-symbols="all -sw/ -Library_sc".]))
1651 libo_FUZZ_ARG_ENABLE(optimized,
1652     AS_HELP_STRING([--enable-optimized=<yes/no/debug>],
1653         [Whether to compile with optimization flags.
1654          By default, disabled for --enable-debug and --enable-dbgutil, enabled
1655          otherwise. Using 'debug' will try to use only optimizations that should
1656          not interfere with debugging. For Emscripten we default to optimized (-O1)
1657          debug build, as otherwise binaries become too large.]))
1659 libo_FUZZ_ARG_ENABLE(runtime-optimizations,
1660     AS_HELP_STRING([--disable-runtime-optimizations],
1661         [Statically disable certain runtime optimizations (like rtl/alloc.h or
1662          JVM JIT) that are known to interact badly with certain dynamic analysis
1663          tools (like -fsanitize=address or Valgrind).  By default, disabled iff
1664          CC contains "-fsanitize=*".  (For Valgrind, those runtime optimizations
1665          are typically disabled dynamically via RUNNING_ON_VALGRIND.)]))
1667 AC_ARG_WITH(valgrind,
1668     AS_HELP_STRING([--with-valgrind],
1669         [Make availability of Valgrind headers a hard requirement.]))
1671 libo_FUZZ_ARG_ENABLE(compiler-plugins,
1672     AS_HELP_STRING([--enable-compiler-plugins],
1673         [Enable compiler plugins that will perform additional checks during
1674          building. Enabled automatically by --enable-dbgutil.
1675          Use --enable-compiler-plugins=debug to also enable debug code in the plugins.]))
1676 COMPILER_PLUGINS_DEBUG=
1677 if test "$enable_compiler_plugins" = debug; then
1678     enable_compiler_plugins=yes
1679     COMPILER_PLUGINS_DEBUG=TRUE
1682 libo_FUZZ_ARG_ENABLE(compiler-plugins-analyzer-pch,
1683     AS_HELP_STRING([--disable-compiler-plugins-analyzer-pch],
1684         [Disable use of precompiled headers when running the Clang compiler plugin analyzer.  Not
1685          relevant in the --disable-compiler-plugins case.]))
1687 libo_FUZZ_ARG_ENABLE(ooenv,
1688     AS_HELP_STRING([--enable-ooenv],
1689         [Enable ooenv for the instdir installation.]))
1691 AC_ARG_ENABLE(lto,
1692     AS_HELP_STRING([--enable-lto],
1693         [Enable link-time optimization. Suitable for (optimised) product builds. Building might take
1694          longer but libraries and executables are optimized for speed. For GCC, best to use the 'gold'
1695          linker.)]))
1697 AC_ARG_ENABLE(python,
1698     AS_HELP_STRING([--enable-python=<no/auto/system/internal/fully-internal>],
1699         [Enables or disables Python support at run-time.
1700          Also specifies what Python to use at build-time.
1701          'fully-internal' even forces the internal version for uses of Python
1702          during the build.
1703          On macOS the only choices are
1704          'internal' (default) or 'fully-internal'. Otherwise the default is 'auto'.
1705          ]))
1707 libo_FUZZ_ARG_ENABLE(gtk3,
1708     AS_HELP_STRING([--disable-gtk3],
1709         [Determines whether to use Gtk+ 3.0 vclplug on platforms where Gtk+ 3.0 is available.]),
1710 ,test "${test_gtk3}" = no -o "${enable_gtk3+set}" = set || enable_gtk3=yes)
1712 AC_ARG_ENABLE(gtk4,
1713     AS_HELP_STRING([--enable-gtk4],
1714         [Determines whether to use Gtk+ 4.0 vclplug on platforms where Gtk+ 4.0 is available.]))
1716 AC_ARG_ENABLE(introspection,
1717     AS_HELP_STRING([--enable-introspection],
1718         [Generate files for GObject introspection.  Requires --enable-gtk3.  (Typically used by
1719          Linux distributions.)]))
1721 AC_ARG_ENABLE(split-app-modules,
1722     AS_HELP_STRING([--enable-split-app-modules],
1723         [Split file lists for app modules, e.g. base, calc.
1724          Has effect only with make distro-pack-install]),
1727 AC_ARG_ENABLE(split-opt-features,
1728     AS_HELP_STRING([--enable-split-opt-features],
1729         [Split file lists for some optional features, e.g. pyuno, testtool.
1730          Has effect only with make distro-pack-install]),
1733 libo_FUZZ_ARG_ENABLE(cairo-canvas,
1734     AS_HELP_STRING([--disable-cairo-canvas],
1735         [Determines whether to build the Cairo canvas on platforms where Cairo is available.]),
1738 libo_FUZZ_ARG_ENABLE(dbus,
1739     AS_HELP_STRING([--disable-dbus],
1740         [Determines whether to enable features that depend on dbus.
1741          e.g. Presentation mode screensaver control, bluetooth presentation control, automatic font install]),
1742 ,test "${enable_dbus+set}" = set || enable_dbus=yes)
1744 libo_FUZZ_ARG_ENABLE(sdremote,
1745     AS_HELP_STRING([--disable-sdremote],
1746         [Determines whether to enable Impress remote control (i.e. the server component).]),
1747 ,test "${enable_sdremote+set}" = set || enable_sdremote=yes)
1749 libo_FUZZ_ARG_ENABLE(sdremote-bluetooth,
1750     AS_HELP_STRING([--disable-sdremote-bluetooth],
1751         [Determines whether to build sdremote with bluetooth support.
1752          Requires dbus on Linux.]))
1754 libo_FUZZ_ARG_ENABLE(gio,
1755     AS_HELP_STRING([--disable-gio],
1756         [Determines whether to use the GIO support.]),
1757 ,test "${enable_gio+set}" = set || enable_gio=yes)
1759 AC_ARG_ENABLE(qt5,
1760     AS_HELP_STRING([--enable-qt5],
1761         [Determines whether to use Qt5 vclplug on platforms where Qt5 is
1762          available.]),
1765 AC_ARG_ENABLE(qt6,
1766     AS_HELP_STRING([--enable-qt6],
1767         [Determines whether to use Qt6 vclplug on platforms where Qt6 is
1768          available.]),
1771 AC_ARG_ENABLE(kf5,
1772     AS_HELP_STRING([--enable-kf5],
1773         [Determines whether to use Qt5/KF5 vclplug on platforms where Qt5 and
1774          KF5 are available.]),
1777 AC_ARG_ENABLE(gtk3_kde5,
1778     AS_HELP_STRING([--enable-gtk3-kde5],
1779         [Determines whether to use Gtk3 vclplug with KF5 file dialogs on
1780          platforms where Gtk3, Qt5 and Plasma is available.]),
1783 AC_ARG_ENABLE(gen,
1784     AS_HELP_STRING([--enable-gen],
1785         [To select the gen backend in case of --disable-dynamic-loading.
1786          Per default auto-enabled when X11 is used.]),
1787 ,test "${test_gen}" = no -o "${enable_gen+set}" = set || enable_gen=yes)
1789 AC_ARG_ENABLE(gui,
1790     AS_HELP_STRING([--disable-gui],
1791         [Disable use of X11 or Wayland to reduce dependencies (e.g. for building LibreOfficeKit).]),
1792 ,enable_gui=yes)
1794 libo_FUZZ_ARG_ENABLE(randr,
1795     AS_HELP_STRING([--disable-randr],
1796         [Disable RandR support in the vcl project.]),
1797 ,test "${enable_randr+set}" = set || enable_randr=yes)
1799 libo_FUZZ_ARG_ENABLE(gstreamer-1-0,
1800     AS_HELP_STRING([--disable-gstreamer-1-0],
1801         [Disable building with the gstreamer 1.0 avmedia backend.]),
1802 ,test "${enable_gstreamer_1_0+set}" = set || enable_gstreamer_1_0=yes)
1804 libo_FUZZ_ARG_ENABLE([eot],
1805     [AS_HELP_STRING([--enable-eot],
1806         [Enable support for Embedded OpenType fonts.])],
1807 ,test "${enable_eot+set}" = set || enable_eot=no)
1809 libo_FUZZ_ARG_ENABLE(cve-tests,
1810     AS_HELP_STRING([--disable-cve-tests],
1811         [Prevent CVE tests to be executed]),
1814 AC_ARG_ENABLE(build-opensymbol,
1815     AS_HELP_STRING([--enable-build-opensymbol],
1816         [Do not use the prebuilt opens___.ttf. Build it instead. This needs
1817          fontforge installed.]),
1820 AC_ARG_ENABLE(dependency-tracking,
1821     AS_HELP_STRING([--enable-dependency-tracking],
1822         [Do not reject slow dependency extractors.])[
1823   --disable-dependency-tracking
1824                           Disables generation of dependency information.
1825                           Speed up one-time builds.],
1828 AC_ARG_ENABLE(icecream,
1829     AS_HELP_STRING([--enable-icecream],
1830         [Use the 'icecream' distributed compiling tool to speedup the compilation.
1831          It defaults to /opt/icecream for the location of the icecream gcc/g++
1832          wrappers, you can override that using --with-gcc-home=/the/path switch.]),
1835 AC_ARG_ENABLE(ld,
1836     AS_HELP_STRING([--enable-ld=<linker>],
1837         [Use the specified linker. Both 'gold' and 'lld' linkers generally use less memory and link faster.
1838          By default tries to use the best linker possible, use --disable-ld to use the default linker.
1839          If <linker> contains any ':', the part before the first ':' is used as the value of
1840          -fuse-ld, while the part after the first ':' is used as the value of --ld-path (which is
1841          needed for Clang 12).]),
1844 libo_FUZZ_ARG_ENABLE(cups,
1845     AS_HELP_STRING([--disable-cups],
1846         [Do not build cups support.])
1849 AC_ARG_ENABLE(ccache,
1850     AS_HELP_STRING([--disable-ccache],
1851         [Do not try to use ccache automatically.
1852          By default we will try to detect if ccache is available; in that case if
1853          CC/CXX are not yet set, and --enable-icecream is not given, we
1854          attempt to use ccache. --disable-ccache disables ccache completely.
1855          Additionally ccache's depend mode is enabled if possible,
1856          use --enable-ccache=nodepend to enable ccache without depend mode.
1860 AC_ARG_ENABLE(z7-debug,
1861     AS_HELP_STRING([--enable-z7-debug],
1862         [Makes the MSVC compiler use -Z7 for debugging instead of the default -Zi. Using this option takes
1863          more disk spaces but allows to use ccache. Final PDB files are created even with this option enabled.
1864          Enabled by default if ccache is detected.]))
1866 libo_FUZZ_ARG_ENABLE(online-update,
1867     AS_HELP_STRING([--enable-online-update],
1868         [Enable the online update service that will check for new versions of
1869          LibreOffice. Disabled by default. Requires --with-privacy-policy-url to be set.
1870          If the value is "mar", the experimental Mozilla-like update will be
1871          enabled instead of the traditional update mechanism.]),
1874 AC_ARG_WITH(update-config,
1875     AS_HELP_STRING([--with-update-config=/tmp/update.ini],
1876                    [Path to the update config ini file]))
1878 libo_FUZZ_ARG_ENABLE(extension-update,
1879     AS_HELP_STRING([--disable-extension-update],
1880         [Disable possibility to update installed extensions.]),
1883 libo_FUZZ_ARG_ENABLE(release-build,
1884     AS_HELP_STRING([--enable-release-build],
1885         [Enable release build. Note that the "release build" choice is orthogonal to
1886          whether symbols are present, debug info is generated, or optimization
1887          is done.
1888          See http://wiki.documentfoundation.org/Development/DevBuild]),
1891 AC_ARG_ENABLE(windows-build-signing,
1892     AS_HELP_STRING([--enable-windows-build-signing],
1893         [Enable signing of windows binaries (*.exe, *.dll)]),
1896 AC_ARG_ENABLE(silent-msi,
1897     AS_HELP_STRING([--enable-silent-msi],
1898         [Enable MSI with LIMITUI=1 (silent install).]),
1901 AC_ARG_ENABLE(macosx-code-signing,
1902     AS_HELP_STRING([--enable-macosx-code-signing=<identity>],
1903         [Sign executables, dylibs, frameworks and the app bundle. If you
1904          don't provide an identity the first suitable certificate
1905          in your keychain is used.]),
1908 AC_ARG_ENABLE(macosx-package-signing,
1909     AS_HELP_STRING([--enable-macosx-package-signing=<identity>],
1910         [Create a .pkg suitable for uploading to the Mac App Store and sign
1911          it. If you don't provide an identity the first suitable certificate
1912          in your keychain is used.]),
1915 AC_ARG_ENABLE(macosx-sandbox,
1916     AS_HELP_STRING([--enable-macosx-sandbox],
1917         [Make the app bundle run in a sandbox. Requires code signing.
1918          Is required by apps distributed in the Mac App Store, and implies
1919          adherence to App Store rules.]),
1922 AC_ARG_WITH(macosx-bundle-identifier,
1923     AS_HELP_STRING([--with-macosx-bundle-identifier=tld.mumble.orifice.TheOffice],
1924         [Define the macOS bundle identifier. Default is the somewhat weird
1925          org.libreoffice.script ("script", huh?).]),
1926 ,with_macosx_bundle_identifier=org.libreoffice.script)
1928 AC_ARG_WITH(macosx-provisioning-profile,
1929     AS_HELP_STRING([--with-macosx-provisioning-profile=/path/to/mac.provisionprofile],
1930         [Specify the path to a provisioning profile to use]),
1933 AC_ARG_WITH(product-name,
1934     AS_HELP_STRING([--with-product-name='My Own Office Suite'],
1935         [Define the product name. Default is AC_PACKAGE_NAME.]),
1936 ,with_product_name=$PRODUCTNAME)
1938 libo_FUZZ_ARG_ENABLE(community-flavor,
1939     AS_HELP_STRING([--disable-community-flavor],
1940         [Disable the Community branding.]),
1943 AC_ARG_WITH(package-version,
1944     AS_HELP_STRING([--with-package-version='3.1.4.5'],
1945         [Define the package version. Default is AC_PACKAGE_VERSION. Use only if you distribute an own build for macOS.]),
1948 libo_FUZZ_ARG_ENABLE(readonly-installset,
1949     AS_HELP_STRING([--enable-readonly-installset],
1950         [Prevents any attempts by LibreOffice to write into its installation. That means
1951          at least that no "system-wide" extensions can be added. Partly experimental work in
1952          progress, probably not fully implemented. Always enabled for macOS.]),
1955 libo_FUZZ_ARG_ENABLE(mariadb-sdbc,
1956     AS_HELP_STRING([--disable-mariadb-sdbc],
1957         [Disable the build of the MariaDB/MySQL-SDBC driver.])
1960 libo_FUZZ_ARG_ENABLE(postgresql-sdbc,
1961     AS_HELP_STRING([--disable-postgresql-sdbc],
1962         [Disable the build of the PostgreSQL-SDBC driver.])
1965 libo_FUZZ_ARG_ENABLE(lotuswordpro,
1966     AS_HELP_STRING([--disable-lotuswordpro],
1967         [Disable the build of the Lotus Word Pro filter.]),
1968 ,test "${enable_lotuswordpro+set}" = set || enable_lotuswordpro=yes)
1970 libo_FUZZ_ARG_ENABLE(firebird-sdbc,
1971     AS_HELP_STRING([--disable-firebird-sdbc],
1972         [Disable the build of the Firebird-SDBC driver if it doesn't compile for you.]),
1973 ,test "${enable_firebird_sdbc+set}" = set || enable_firebird_sdbc=yes)
1975 AC_ARG_ENABLE(bogus-pkg-config,
1976     AS_HELP_STRING([--enable-bogus-pkg-config],
1977         [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.]),
1980 AC_ARG_ENABLE(openssl,
1981     AS_HELP_STRING([--disable-openssl],
1982         [Disable using libssl/libcrypto from OpenSSL. If disabled,
1983          components will use NSS. Work in progress,
1984          use only if you are hacking on it.]),
1985 ,enable_openssl=yes)
1987 libo_FUZZ_ARG_ENABLE(cipher-openssl-backend,
1988     AS_HELP_STRING([--enable-cipher-openssl-backend],
1989         [Enable using OpenSSL as the actual implementation of the rtl/cipher.h functionality.
1990          Requires --enable-openssl.]))
1992 AC_ARG_ENABLE(nss,
1993     AS_HELP_STRING([--disable-nss],
1994         [Disable using NSS. If disabled,
1995          components will use openssl. Work in progress,
1996          use only if you are hacking on it.]),
1997 ,enable_nss=yes)
1999 AC_ARG_ENABLE(library-bin-tar,
2000     AS_HELP_STRING([--enable-library-bin-tar],
2001         [Enable the building and reused of tarball of binary build for some 'external' libraries.
2002         Some libraries can save their build result in a tarball
2003         stored in TARFILE_LOCATION. That binary tarball is
2004         uniquely identified by the source tarball,
2005         the content of the config_host.mk file and the content
2006         of the top-level directory in core for that library
2007         If this option is enabled, then if such a tarfile exist, it will be untarred
2008         instead of the source tarfile, and the build step will be skipped for that
2009         library.
2010         If a proper tarfile does not exist, then the normal source-based
2011         build is done for that library and a proper binary tarfile is created
2012         for the next time.]),
2015 AC_ARG_ENABLE(dconf,
2016     AS_HELP_STRING([--disable-dconf],
2017         [Disable the dconf configuration backend (enabled by default where
2018          available).]))
2020 libo_FUZZ_ARG_ENABLE(formula-logger,
2021     AS_HELP_STRING(
2022         [--enable-formula-logger],
2023         [Enable formula logger for logging formula calculation flow in Calc.]
2024     )
2027 AC_ARG_ENABLE(ldap,
2028     AS_HELP_STRING([--disable-ldap],
2029         [Disable LDAP support.]),
2030 ,enable_ldap=yes)
2032 AC_ARG_ENABLE(opencl,
2033     AS_HELP_STRING([--disable-opencl],
2034         [Disable OpenCL support.]),
2035 ,enable_opencl=yes)
2037 libo_FUZZ_ARG_ENABLE(librelogo,
2038     AS_HELP_STRING([--disable-librelogo],
2039         [Do not build LibreLogo.]),
2040 ,enable_librelogo=yes)
2042 AC_ARG_ENABLE(wasm-strip,
2043     AS_HELP_STRING([--enable-wasm-strip],
2044         [Strip the static build like for WASM/emscripten platform.]),
2047 AC_ARG_WITH(main-module,
2048     AS_HELP_STRING([--with-main-module=<writer/calc>],
2049         [Specify which main module to build for wasm.
2050         Default value is 'writer'.]),
2053 AC_ARG_ENABLE(wasm-exceptions,
2054     AS_HELP_STRING([--enable-wasm-exceptions],
2055         [Build with native WASM exceptions (AKA -fwasm-exceptions),
2056         matter of fact, this is currently not finished by any implementation)
2057         (see https://webassembly.org/roadmap/ for the current state]),
2060 AC_ARG_ENABLE(xmlhelp,
2061     AS_HELP_STRING([--disable-xmlhelp],
2062         [Disable XML help support]),
2063 ,enable_xmlhelp=yes)
2065 AC_ARG_ENABLE(customtarget-components,
2066     AS_HELP_STRING([--enable-customtarget-components],
2067         [Generates the static UNO object constructor mapping from the build.]))
2069 AC_ARG_ENABLE(float_device_pixel,
2070     AS_HELP_STRING([--enable-float-device-pixel],
2071                    [Uses doubles for VCL device coordinates instead of 32-bit integers.]),
2074 dnl ===================================================================
2075 dnl Optional Packages (--with/without-)
2076 dnl ===================================================================
2078 AC_ARG_WITH(gcc-home,
2079     AS_HELP_STRING([--with-gcc-home],
2080         [Specify the location of gcc/g++ manually. This can be used in conjunction
2081          with --enable-icecream when icecream gcc/g++ wrappers are installed in a
2082          non-default path.]),
2085 AC_ARG_WITH(gnu-patch,
2086     AS_HELP_STRING([--with-gnu-patch],
2087         [Specify location of GNU patch on Solaris or FreeBSD.]),
2090 AC_ARG_WITH(build-platform-configure-options,
2091     AS_HELP_STRING([--with-build-platform-configure-options],
2092         [Specify options for the configure script run for the *build* platform in a cross-compilation]),
2095 AC_ARG_WITH(gnu-cp,
2096     AS_HELP_STRING([--with-gnu-cp],
2097         [Specify location of GNU cp on Solaris or FreeBSD.]),
2100 AC_ARG_WITH(external-tar,
2101     AS_HELP_STRING([--with-external-tar=<TARFILE_PATH>],
2102         [Specify an absolute path of where to find (and store) tarfiles.]),
2103     TARFILE_LOCATION=$withval ,
2106 AC_ARG_WITH(referenced-git,
2107     AS_HELP_STRING([--with-referenced-git=<OTHER_CHECKOUT_DIR>],
2108         [Specify another checkout directory to reference. This makes use of
2109                  git submodule update --reference, and saves a lot of diskspace
2110                  when having multiple trees side-by-side.]),
2111     GIT_REFERENCE_SRC=$withval ,
2114 AC_ARG_WITH(linked-git,
2115     AS_HELP_STRING([--with-linked-git=<submodules repo basedir>],
2116         [Specify a directory where the repositories of submodules are located.
2117          This uses a method similar to git-new-workdir to get submodules.]),
2118     GIT_LINK_SRC=$withval ,
2121 AC_ARG_WITH(galleries,
2122     AS_HELP_STRING([--with-galleries],
2123         [Specify how galleries should be built. It is possible either to
2124          build these internally from source ("build"),
2125          or to disable them ("no")]),
2128 AC_ARG_WITH(theme,
2129     AS_HELP_STRING([--with-theme="theme1 theme2..."],
2130         [Choose which themes to include. By default those themes with an '*' are included.
2131          Possible choices: *breeze, *breeze_dark, *breeze_dark_svg, *breeze_svg,
2132          *colibre, *colibre_svg, *colibre_dark, *colibre_dark_svg,
2133          *elementary, *elementary_svg,
2134          *karasa_jaga, *karasa_jaga_svg,
2135          *sifr, *sifr_dark, *sifr_dark_svg, *sifr_svg,
2136          *sukapura, *sukapura_dark, *sukapura_dark_svg, *sukapura_svg.]),
2139 libo_FUZZ_ARG_WITH(helppack-integration,
2140     AS_HELP_STRING([--without-helppack-integration],
2141         [It will not integrate the helppacks to the installer
2142          of the product. Please use this switch to use the online help
2143          or separate help packages.]),
2146 libo_FUZZ_ARG_WITH(fonts,
2147     AS_HELP_STRING([--without-fonts],
2148         [LibreOffice includes some third-party fonts to provide a reliable basis for
2149          help content, templates, samples, etc. When these fonts are already
2150          known to be available on the system then you should use this option.]),
2153 AC_ARG_ENABLE(noto-font,
2154     AS_HELP_STRING([--enable-noto-font],
2155         [Add more Google Noto fonts.]),
2158 AC_ARG_WITH(epm,
2159     AS_HELP_STRING([--with-epm],
2160         [Decides which epm to use. Default is to use the one from the system if
2161          one is built. When either this is not there or you say =internal epm
2162          will be built.]),
2165 AC_ARG_WITH(package-format,
2166     AS_HELP_STRING([--with-package-format],
2167         [Specify package format(s) for LibreOffice installation sets. The
2168          implicit --without-package-format leads to no installation sets being
2169          generated. Possible values: aix, archive, bsd, deb, dmg,
2170          installed, msi, pkg, and rpm.
2171          Example: --with-package-format='deb rpm']),
2174 AC_ARG_WITH(tls,
2175     AS_HELP_STRING([--with-tls],
2176         [Decides which TLS/SSL and cryptographic implementations to use for
2177          LibreOffice's code. Default is to use NSS although OpenSSL is also
2178          possible. Notice that selecting NSS restricts the usage of OpenSSL
2179          in LO's code but selecting OpenSSL doesn't restrict by now the
2180          usage of NSS in LO's code. Possible values: openssl, nss.
2181          Example: --with-tls="nss"]),
2184 AC_ARG_WITH(system-libs,
2185     AS_HELP_STRING([--with-system-libs],
2186         [Use libraries already on system -- enables all --with-system-* flags.]),
2189 AC_ARG_WITH(system-bzip2,
2190     AS_HELP_STRING([--with-system-bzip2],
2191         [Use bzip2 already on system. Used only when --enable-online-update=mar]),,
2192     [with_system_bzip2="$with_system_libs"])
2194 AC_ARG_WITH(system-headers,
2195     AS_HELP_STRING([--with-system-headers],
2196         [Use headers already on system -- enables all --with-system-* flags for
2197          external packages whose headers are the only entities used i.e.
2198          boost/odbc/sane-header(s).]),,
2199     [with_system_headers="$with_system_libs"])
2201 AC_ARG_WITH(system-jars,
2202     AS_HELP_STRING([--without-system-jars],
2203         [When building with --with-system-libs, also the needed jars are expected
2204          on the system. Use this to disable that]),,
2205     [with_system_jars="$with_system_libs"])
2207 AC_ARG_WITH(system-cairo,
2208     AS_HELP_STRING([--with-system-cairo],
2209         [Use cairo libraries already on system.  Happens automatically for
2210          (implicit) --enable-gtk3.]))
2212 AC_ARG_WITH(system-epoxy,
2213     AS_HELP_STRING([--with-system-epoxy],
2214         [Use epoxy libraries already on system.  Happens automatically for
2215          (implicit) --enable-gtk3.]),,
2216        [with_system_epoxy="$with_system_libs"])
2218 AC_ARG_WITH(myspell-dicts,
2219     AS_HELP_STRING([--with-myspell-dicts],
2220         [Adds myspell dictionaries to the LibreOffice installation set]),
2223 AC_ARG_WITH(system-dicts,
2224     AS_HELP_STRING([--without-system-dicts],
2225         [Do not use dictionaries from system paths.]),
2228 AC_ARG_WITH(external-dict-dir,
2229     AS_HELP_STRING([--with-external-dict-dir],
2230         [Specify external dictionary dir.]),
2233 AC_ARG_WITH(external-hyph-dir,
2234     AS_HELP_STRING([--with-external-hyph-dir],
2235         [Specify external hyphenation pattern dir.]),
2238 AC_ARG_WITH(external-thes-dir,
2239     AS_HELP_STRING([--with-external-thes-dir],
2240         [Specify external thesaurus dir.]),
2243 AC_ARG_WITH(system-zlib,
2244     AS_HELP_STRING([--with-system-zlib],
2245         [Use zlib already on system.]),,
2246     [with_system_zlib=auto])
2248 AC_ARG_WITH(system-jpeg,
2249     AS_HELP_STRING([--with-system-jpeg],
2250         [Use jpeg already on system.]),,
2251     [with_system_jpeg="$with_system_libs"])
2253 AC_ARG_WITH(system-expat,
2254     AS_HELP_STRING([--with-system-expat],
2255         [Use expat already on system.]),,
2256     [with_system_expat="$with_system_libs"])
2258 AC_ARG_WITH(system-libxml,
2259     AS_HELP_STRING([--with-system-libxml],
2260         [Use libxml/libxslt already on system.]),,
2261     [with_system_libxml=auto])
2263 AC_ARG_WITH(system-openldap,
2264     AS_HELP_STRING([--with-system-openldap],
2265         [Use the OpenLDAP LDAP SDK already on system.]),,
2266     [with_system_openldap="$with_system_libs"])
2268 libo_FUZZ_ARG_ENABLE(poppler,
2269     AS_HELP_STRING([--disable-poppler],
2270         [Disable building Poppler.])
2273 AC_ARG_WITH(system-poppler,
2274     AS_HELP_STRING([--with-system-poppler],
2275         [Use system poppler (only needed for PDF import).]),,
2276     [with_system_poppler="$with_system_libs"])
2278 AC_ARG_WITH(system-abseil,
2279     AS_HELP_STRING([--with-system-abseil],
2280         [Use the abseil libraries already on system.]),,
2281     [with_system_abseil="$with_system_libs"])
2283 AC_ARG_WITH(system-openjpeg,
2284     AS_HELP_STRING([--with-system-openjpeg],
2285         [Use the OpenJPEG library already on system.]),,
2286     [with_system_openjpeg="$with_system_libs"])
2288 libo_FUZZ_ARG_ENABLE(gpgmepp,
2289     AS_HELP_STRING([--disable-gpgmepp],
2290         [Disable building gpgmepp. Do not use in normal cases unless you want to fix potential problems it causes.])
2293 AC_ARG_WITH(system-gpgmepp,
2294     AS_HELP_STRING([--with-system-gpgmepp],
2295         [Use gpgmepp already on system]),,
2296     [with_system_gpgmepp="$with_system_libs"])
2298 AC_ARG_WITH(system-mariadb,
2299     AS_HELP_STRING([--with-system-mariadb],
2300         [Use MariaDB/MySQL libraries already on system.]),,
2301     [with_system_mariadb="$with_system_libs"])
2303 AC_ARG_ENABLE(bundle-mariadb,
2304     AS_HELP_STRING([--enable-bundle-mariadb],
2305         [When using MariaDB/MySQL libraries already on system, bundle them with the MariaDB Connector/LibreOffice.])
2308 AC_ARG_WITH(system-postgresql,
2309     AS_HELP_STRING([--with-system-postgresql],
2310         [Use PostgreSQL libraries already on system, for building the PostgreSQL-SDBC
2311          driver. If pg_config is not in PATH, use PGCONFIG to point to it.]),,
2312     [with_system_postgresql="$with_system_libs"])
2314 AC_ARG_WITH(libpq-path,
2315     AS_HELP_STRING([--with-libpq-path=<absolute path to your libpq installation>],
2316         [Use this PostgreSQL C interface (libpq) installation for building
2317          the PostgreSQL-SDBC extension.]),
2320 AC_ARG_WITH(system-firebird,
2321     AS_HELP_STRING([--with-system-firebird],
2322         [Use Firebird libraries already on system, for building the Firebird-SDBC
2323          driver. If fb_config is not in PATH, use FBCONFIG to point to it.]),,
2324     [with_system_firebird="$with_system_libs"])
2326 AC_ARG_WITH(system-libtommath,
2327             AS_HELP_STRING([--with-system-libtommath],
2328                            [Use libtommath already on system]),,
2329             [with_system_libtommath="$with_system_libs"])
2331 AC_ARG_WITH(system-hsqldb,
2332     AS_HELP_STRING([--with-system-hsqldb],
2333         [Use hsqldb already on system.]))
2335 AC_ARG_WITH(hsqldb-jar,
2336     AS_HELP_STRING([--with-hsqldb-jar=JARFILE],
2337         [Specify path to jarfile manually.]),
2338     HSQLDB_JAR=$withval)
2340 libo_FUZZ_ARG_ENABLE(scripting-beanshell,
2341     AS_HELP_STRING([--disable-scripting-beanshell],
2342         [Disable support for scripts in BeanShell.]),
2346 AC_ARG_WITH(system-beanshell,
2347     AS_HELP_STRING([--with-system-beanshell],
2348         [Use beanshell already on system.]),,
2349     [with_system_beanshell="$with_system_jars"])
2351 AC_ARG_WITH(beanshell-jar,
2352     AS_HELP_STRING([--with-beanshell-jar=JARFILE],
2353         [Specify path to jarfile manually.]),
2354     BSH_JAR=$withval)
2356 libo_FUZZ_ARG_ENABLE(scripting-javascript,
2357     AS_HELP_STRING([--disable-scripting-javascript],
2358         [Disable support for scripts in JavaScript.]),
2362 AC_ARG_WITH(system-rhino,
2363     AS_HELP_STRING([--with-system-rhino],
2364         [Use rhino already on system.]),,)
2365 #    [with_system_rhino="$with_system_jars"])
2366 # Above is not used as we have different debug interface
2367 # patched into internal rhino. This code needs to be fixed
2368 # before we can enable it by default.
2370 AC_ARG_WITH(rhino-jar,
2371     AS_HELP_STRING([--with-rhino-jar=JARFILE],
2372         [Specify path to jarfile manually.]),
2373     RHINO_JAR=$withval)
2375 AC_ARG_WITH(system-jfreereport,
2376     AS_HELP_STRING([--with-system-jfreereport],
2377         [Use JFreeReport already on system.]),,
2378     [with_system_jfreereport="$with_system_jars"])
2380 AC_ARG_WITH(sac-jar,
2381     AS_HELP_STRING([--with-sac-jar=JARFILE],
2382         [Specify path to jarfile manually.]),
2383     SAC_JAR=$withval)
2385 AC_ARG_WITH(libxml-jar,
2386     AS_HELP_STRING([--with-libxml-jar=JARFILE],
2387         [Specify path to jarfile manually.]),
2388     LIBXML_JAR=$withval)
2390 AC_ARG_WITH(flute-jar,
2391     AS_HELP_STRING([--with-flute-jar=JARFILE],
2392         [Specify path to jarfile manually.]),
2393     FLUTE_JAR=$withval)
2395 AC_ARG_WITH(jfreereport-jar,
2396     AS_HELP_STRING([--with-jfreereport-jar=JARFILE],
2397         [Specify path to jarfile manually.]),
2398     JFREEREPORT_JAR=$withval)
2400 AC_ARG_WITH(liblayout-jar,
2401     AS_HELP_STRING([--with-liblayout-jar=JARFILE],
2402         [Specify path to jarfile manually.]),
2403     LIBLAYOUT_JAR=$withval)
2405 AC_ARG_WITH(libloader-jar,
2406     AS_HELP_STRING([--with-libloader-jar=JARFILE],
2407         [Specify path to jarfile manually.]),
2408     LIBLOADER_JAR=$withval)
2410 AC_ARG_WITH(libformula-jar,
2411     AS_HELP_STRING([--with-libformula-jar=JARFILE],
2412         [Specify path to jarfile manually.]),
2413     LIBFORMULA_JAR=$withval)
2415 AC_ARG_WITH(librepository-jar,
2416     AS_HELP_STRING([--with-librepository-jar=JARFILE],
2417         [Specify path to jarfile manually.]),
2418     LIBREPOSITORY_JAR=$withval)
2420 AC_ARG_WITH(libfonts-jar,
2421     AS_HELP_STRING([--with-libfonts-jar=JARFILE],
2422         [Specify path to jarfile manually.]),
2423     LIBFONTS_JAR=$withval)
2425 AC_ARG_WITH(libserializer-jar,
2426     AS_HELP_STRING([--with-libserializer-jar=JARFILE],
2427         [Specify path to jarfile manually.]),
2428     LIBSERIALIZER_JAR=$withval)
2430 AC_ARG_WITH(libbase-jar,
2431     AS_HELP_STRING([--with-libbase-jar=JARFILE],
2432         [Specify path to jarfile manually.]),
2433     LIBBASE_JAR=$withval)
2435 AC_ARG_WITH(system-odbc,
2436     AS_HELP_STRING([--with-system-odbc],
2437         [Use the odbc headers already on system.]),,
2438     [with_system_odbc="auto"])
2440 AC_ARG_WITH(system-sane,
2441     AS_HELP_STRING([--with-system-sane],
2442         [Use sane.h already on system.]),,
2443     [with_system_sane="$with_system_headers"])
2445 AC_ARG_WITH(system-bluez,
2446     AS_HELP_STRING([--with-system-bluez],
2447         [Use bluetooth.h already on system.]),,
2448     [with_system_bluez="$with_system_headers"])
2450 AC_ARG_WITH(system-boost,
2451     AS_HELP_STRING([--with-system-boost],
2452         [Use boost already on system.]),,
2453     [with_system_boost="$with_system_headers"])
2455 AC_ARG_WITH(system-dragonbox,
2456     AS_HELP_STRING([--with-system-dragonbox],
2457         [Use dragonbox already on system.]),,
2458     [with_system_dragonbox="$with_system_headers"])
2460 AC_ARG_WITH(system-libfixmath,
2461     AS_HELP_STRING([--with-system-libfixmath],
2462         [Use libfixmath already on system.]),,
2463     [with_system_libfixmath="$with_system_libs"])
2465 AC_ARG_WITH(system-glm,
2466     AS_HELP_STRING([--with-system-glm],
2467         [Use glm already on system.]),,
2468     [with_system_glm="$with_system_headers"])
2470 AC_ARG_WITH(system-hunspell,
2471     AS_HELP_STRING([--with-system-hunspell],
2472         [Use libhunspell already on system.]),,
2473     [with_system_hunspell="$with_system_libs"])
2475 libo_FUZZ_ARG_ENABLE(cairo-rgba,
2476     AS_HELP_STRING([--enable-cairo-rgba],
2477         [Use RGBA order, instead of default BRGA. Not possible with --with-system-cairo]))
2479 libo_FUZZ_ARG_ENABLE(zxing,
2480     AS_HELP_STRING([--disable-zxing],
2481        [Disable use of zxing external library.]))
2483 AC_ARG_WITH(system-zxing,
2484     AS_HELP_STRING([--with-system-zxing],
2485         [Use libzxing already on system.]),,
2486     [with_system_zxing="$with_system_libs"])
2488 AC_ARG_WITH(system-box2d,
2489     AS_HELP_STRING([--with-system-box2d],
2490         [Use box2d already on system.]),,
2491     [with_system_box2d="$with_system_libs"])
2493 AC_ARG_WITH(system-mythes,
2494     AS_HELP_STRING([--with-system-mythes],
2495         [Use mythes already on system.]),,
2496     [with_system_mythes="$with_system_libs"])
2498 AC_ARG_WITH(system-altlinuxhyph,
2499     AS_HELP_STRING([--with-system-altlinuxhyph],
2500         [Use ALTLinuxhyph already on system.]),,
2501     [with_system_altlinuxhyph="$with_system_libs"])
2503 AC_ARG_WITH(system-lpsolve,
2504     AS_HELP_STRING([--with-system-lpsolve],
2505         [Use lpsolve already on system.]),,
2506     [with_system_lpsolve="$with_system_libs"])
2508 AC_ARG_WITH(system-coinmp,
2509     AS_HELP_STRING([--with-system-coinmp],
2510         [Use CoinMP already on system.]),,
2511     [with_system_coinmp="$with_system_libs"])
2513 AC_ARG_WITH(system-liblangtag,
2514     AS_HELP_STRING([--with-system-liblangtag],
2515         [Use liblangtag library already on system.]),,
2516     [with_system_liblangtag="$with_system_libs"])
2518 AC_ARG_WITH(system-lockfile,
2519     AS_HELP_STRING([--with-system-lockfile[=file]],
2520         [Detect a system lockfile program or use the \$file argument.]))
2522 AC_ARG_WITH(webdav,
2523     AS_HELP_STRING([--without-webdav],
2524         [Disable WebDAV support in the UCB.]))
2526 AC_ARG_WITH(linker-hash-style,
2527     AS_HELP_STRING([--with-linker-hash-style],
2528         [Use linker with --hash-style=<style> when linking shared objects.
2529          Possible values: "sysv", "gnu", "both". The default value is "gnu"
2530          if supported on the build system, and "sysv" otherwise.]))
2532 AC_ARG_WITH(jdk-home,
2533     AS_HELP_STRING([--with-jdk-home=<absolute path to JDK home>],
2534         [If you have installed JDK 9 or later on your system please supply the
2535          path here. Note that this is not the location of the java command but the
2536          location of the entire distribution. In case of cross-compiling, this
2537          is the JDK of the host os. Use --with-build-platform-configure-options
2538          to point to a different build platform JDK.]),
2541 AC_ARG_WITH(help,
2542     AS_HELP_STRING([--with-help],
2543         [Enable the build of help. There is a special parameter "common" that
2544          can be used to bundle only the common part, .e.g help-specific icons.
2545          This is useful when you build the helpcontent separately.])
2546     [
2547                           Usage:     --with-help    build the old local help
2548                                  --without-help     no local help (default)
2549                                  --with-help=html   build the new HTML local help
2550                                  --with-help=online build the new HTML online help
2551     ],
2554 AC_ARG_WITH(omindex,
2555    AS_HELP_STRING([--with-omindex],
2556         [Enable the support of xapian-omega index for online help.])
2557    [
2558                          Usage: --with-omindex=server prepare the pages for omindex
2559                                 but let xapian-omega be built in server.
2560                                 --with-omindex=noxap do not prepare online pages
2561                                 for xapian-omega
2562   ],
2565 libo_FUZZ_ARG_WITH(java,
2566     AS_HELP_STRING([--with-java=<java command>],
2567         [Specify the name of the Java interpreter command. Typically "java"
2568          which is the default.
2570          To build without support for Java components, applets, accessibility
2571          or the XML filters written in Java, use --without-java or --with-java=no.]),
2572     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ],
2573     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ]
2576 AC_ARG_WITH(jvm-path,
2577     AS_HELP_STRING([--with-jvm-path=<absolute path to parent of jvm home>],
2578         [Use a specific JVM search path at runtime.
2579          e.g. use --with-jvm-path=/usr/lib/ to find JRE/JDK in /usr/lib/jvm/]),
2582 AC_ARG_WITH(ant-home,
2583     AS_HELP_STRING([--with-ant-home=<absolute path to Ant home>],
2584         [If you have installed Apache Ant on your system, please supply the path here.
2585          Note that this is not the location of the Ant binary but the location
2586          of the entire distribution.]),
2589 AC_ARG_WITH(symbol-config,
2590     AS_HELP_STRING([--with-symbol-config],
2591         [Configuration for the crashreport symbol upload]),
2592         [],
2593         [with_symbol_config=no])
2595 AC_ARG_WITH(export-validation,
2596     AS_HELP_STRING([--without-export-validation],
2597         [Disable validating OOXML and ODF files as exported from in-tree tests.]),
2598 ,with_export_validation=auto)
2600 AC_ARG_WITH(bffvalidator,
2601     AS_HELP_STRING([--with-bffvalidator=<absolute path to BFFValidator>],
2602         [Enables export validation for Microsoft Binary formats (doc, xls, ppt).
2603          Requires installed Microsoft Office Binary File Format Validator.
2604          Note: export-validation (--with-export-validation) is required to be turned on.
2605          See https://www.microsoft.com/en-us/download/details.aspx?id=26794]),
2606 ,with_bffvalidator=no)
2608 libo_FUZZ_ARG_WITH(junit,
2609     AS_HELP_STRING([--with-junit=<absolute path to JUnit 4 jar>],
2610         [Specifies the JUnit 4 jar file to use for JUnit-based tests.
2611          --without-junit disables those tests. Not relevant in the --without-java case.]),
2612 ,with_junit=yes)
2614 AC_ARG_WITH(hamcrest,
2615     AS_HELP_STRING([--with-hamcrest=<absolute path to hamcrest jar>],
2616         [Specifies the hamcrest jar file to use for JUnit-based tests.
2617          --without-junit disables those tests. Not relevant in the --without-java case.]),
2618 ,with_hamcrest=yes)
2620 AC_ARG_WITH(perl-home,
2621     AS_HELP_STRING([--with-perl-home=<abs. path to Perl 5 home>],
2622         [If you have installed Perl 5 Distribution, on your system, please
2623          supply the path here. Note that this is not the location of the Perl
2624          binary but the location of the entire distribution.]),
2627 libo_FUZZ_ARG_WITH(doxygen,
2628     AS_HELP_STRING(
2629         [--with-doxygen=<absolute path to doxygen executable>],
2630         [Specifies the doxygen executable to use when generating ODK C/C++
2631          documentation. --without-doxygen disables generation of ODK C/C++
2632          documentation. Not relevant in the --disable-odk case.]),
2633 ,with_doxygen=yes)
2635 AC_ARG_WITH(visual-studio,
2636     AS_HELP_STRING([--with-visual-studio=<2019/2022/2022preview>],
2637         [Specify which Visual Studio version to use in case several are
2638          installed. Currently 2019 (default) and 2022 are supported.]),
2641 AC_ARG_WITH(windows-sdk,
2642     AS_HELP_STRING([--with-windows-sdk=<8.0(A)/8.1(A)/10.0>],
2643         [Specify which Windows SDK, or "Windows Kit", version to use
2644          in case the one that came with the selected Visual Studio
2645          is not what you want for some reason. Note that not all compiler/SDK
2646          combinations are supported. The intent is that this option should not
2647          be needed.]),
2650 AC_ARG_WITH(lang,
2651     AS_HELP_STRING([--with-lang="es sw tu cs sk"],
2652         [Use this option to build LibreOffice with additional UI language support.
2653          English (US) is always included by default.
2654          Separate multiple languages with space.
2655          For all languages, use --with-lang=ALL.]),
2658 AC_ARG_WITH(locales,
2659     AS_HELP_STRING([--with-locales="en es pt fr zh kr ja"],
2660         [Use this option to limit the locale information built in.
2661          Separate multiple locales with space.
2662          Very experimental and might well break stuff.
2663          Just a desperate measure to shrink code and data size.
2664          By default all the locales available is included.
2665          Just works with --disable-dynloading. Defaults to "ALL".
2666          This option is completely unrelated to --with-lang.])
2667     [
2668                           Affects also our character encoding conversion
2669                           tables for encodings mainly targeted for a
2670                           particular locale, like EUC-CN and EUC-TW for
2671                           zh, ISO-2022-JP for ja.
2673                           Affects also our add-on break iterator data for
2674                           some languages.
2676                           For the default, all locales, don't use this switch at all.
2677                           Specifying just the language part of a locale means all matching
2678                           locales will be included.
2679     ],
2682 # Kerberos and GSSAPI used only by PostgreSQL as of LibO 3.5
2683 libo_FUZZ_ARG_WITH(krb5,
2684     AS_HELP_STRING([--with-krb5],
2685         [Enable MIT Kerberos 5 support in modules that support it.
2686          By default automatically enabled on platforms
2687          where a good system Kerberos 5 is available.]),
2690 libo_FUZZ_ARG_WITH(gssapi,
2691     AS_HELP_STRING([--with-gssapi],
2692         [Enable GSSAPI support in modules that support it.
2693          By default automatically enabled on platforms
2694          where a good system GSSAPI is available.]),
2697 libo_FUZZ_ARG_WITH(lxml,
2698     AS_HELP_STRING([--without-lxml],
2699         [gla11y will use python lxml when available, potentially building a local copy if necessary.
2700          --without-lxml tells it to not use python lxml at all, which means that gla11y will only
2701          report widget classes and ids.]),
2704 libo_FUZZ_ARG_WITH(latest-c++,
2705     AS_HELP_STRING([--with-latest-c++],
2706         [Try to enable the latest features of the C++ compiler, even if they are not yet part of a
2707          published standard.  This option is ignored when CXXFLAGS_CXX11 is set explicitly.]),,
2708         [with_latest_c__=no])
2710 AC_ARG_WITH(gtk3-build,
2711     AS_HELP_STRING([--with-gtk3-build=<absolute path to GTK3 build>],
2712         [(Windows-only) In order to build GtkTiledViewer on Windows, pass the path
2713          to a GTK3 build, like '--with-gtk3-build=C:/gtk-build/gtk/x64/release'.]))
2715 dnl ===================================================================
2716 dnl Branding
2717 dnl ===================================================================
2719 AC_ARG_WITH(branding,
2720     AS_HELP_STRING([--with-branding=/path/to/images],
2721         [Use given path to retrieve branding images set.])
2722     [
2723                           Search for intro.png about.svg and logo.svg.
2724                           If any is missing, default ones will be used instead.
2726                           Search also progress.conf for progress
2727                           settings on intro screen :
2729                           PROGRESSBARCOLOR="255,255,255" Set color of
2730                           progress bar. Comma separated RGB decimal values.
2731                           PROGRESSSIZE="407,6" Set size of progress bar.
2732                           Comma separated decimal values (width, height).
2733                           PROGRESSPOSITION="61,317" Set position of progress
2734                           bar from left,top. Comma separated decimal values.
2735                           PROGRESSFRAMECOLOR="20,136,3" Set color of progress
2736                           bar frame. Comma separated RGB decimal values.
2737                           PROGRESSTEXTCOLOR="0,0,0" Set color of progress
2738                           bar text. Comma separated RGB decimal values.
2739                           PROGRESSTEXTBASELINE="287" Set vertical position of
2740                           progress bar text from top. Decimal value.
2742                           Default values will be used if not found.
2743     ],
2747 AC_ARG_WITH(extra-buildid,
2748     AS_HELP_STRING([--with-extra-buildid="Tinderbox: Win-x86@6, Branch:master, Date:2012-11-26_00.29.34"],
2749         [Show addition build identification in about dialog.]),
2753 AC_ARG_WITH(vendor,
2754     AS_HELP_STRING([--with-vendor="John the Builder"],
2755         [Set vendor of the build.]),
2758 AC_ARG_WITH(privacy-policy-url,
2759     AS_HELP_STRING([--with-privacy-policy-url="https://yourdomain/privacy-policy"],
2760         [The URL to your privacy policy (needed when
2761          enabling online-update or crashreporting via breakpad)]),
2762         [if test "x$with_privacy_policy_url" = "xyes"; then
2763             AC_MSG_FAILURE([you need to specify an argument when using --with-privacy-policy-url])
2764          elif test "x$with_privacy_policy_url" = "xno"; then
2765             with_privacy_policy_url="undefined"
2766          fi]
2767 ,[with_privacy_policy_url="undefined"])
2769 AC_ARG_WITH(android-package-name,
2770     AS_HELP_STRING([--with-android-package-name="org.libreoffice"],
2771         [Set Android package name of the build.]),
2774 AC_ARG_WITH(compat-oowrappers,
2775     AS_HELP_STRING([--with-compat-oowrappers],
2776         [Install oo* wrappers in parallel with
2777          lo* ones to keep backward compatibility.
2778          Has effect only with make distro-pack-install]),
2781 AC_ARG_WITH(os-version,
2782     AS_HELP_STRING([--with-os-version=<OSVERSION>],
2783         [For FreeBSD users, use this option to override the detected OSVERSION.]),
2786 AC_ARG_WITH(parallelism,
2787     AS_HELP_STRING([--with-parallelism],
2788         [Number of jobs to run simultaneously during build. Parallel builds can
2789         save a lot of time on multi-cpu machines. Defaults to the number of
2790         CPUs on the machine, unless you configure --enable-icecream - then to
2791         40.]),
2794 AC_ARG_WITH(all-tarballs,
2795     AS_HELP_STRING([--with-all-tarballs],
2796         [Download all external tarballs unconditionally]))
2798 AC_ARG_WITH(gdrive-client-id,
2799     AS_HELP_STRING([--with-gdrive-client-id],
2800         [Provides the client id of the application for OAuth2 authentication
2801         on Google Drive. If either this or --with-gdrive-client-secret is
2802         empty, the feature will be disabled]),
2805 AC_ARG_WITH(gdrive-client-secret,
2806     AS_HELP_STRING([--with-gdrive-client-secret],
2807         [Provides the client secret of the application for OAuth2
2808         authentication on Google Drive. If either this or
2809         --with-gdrive-client-id is empty, the feature will be disabled]),
2812 AC_ARG_WITH(alfresco-cloud-client-id,
2813     AS_HELP_STRING([--with-alfresco-cloud-client-id],
2814         [Provides the client id of the application for OAuth2 authentication
2815         on Alfresco Cloud. If either this or --with-alfresco-cloud-client-secret is
2816         empty, the feature will be disabled]),
2819 AC_ARG_WITH(alfresco-cloud-client-secret,
2820     AS_HELP_STRING([--with-alfresco-cloud-client-secret],
2821         [Provides the client secret of the application for OAuth2
2822         authentication on Alfresco Cloud. If either this or
2823         --with-alfresco-cloud-client-id is empty, the feature will be disabled]),
2826 AC_ARG_WITH(onedrive-client-id,
2827     AS_HELP_STRING([--with-onedrive-client-id],
2828         [Provides the client id of the application for OAuth2 authentication
2829         on OneDrive. If either this or --with-onedrive-client-secret is
2830         empty, the feature will be disabled]),
2833 AC_ARG_WITH(onedrive-client-secret,
2834     AS_HELP_STRING([--with-onedrive-client-secret],
2835         [Provides the client secret of the application for OAuth2
2836         authentication on OneDrive. If either this or
2837         --with-onedrive-client-id is empty, the feature will be disabled]),
2839 dnl ===================================================================
2840 dnl Do we want to use pre-build binary tarball for recompile
2841 dnl ===================================================================
2843 if test "$enable_library_bin_tar" = "yes" ; then
2844     USE_LIBRARY_BIN_TAR=TRUE
2845 else
2846     USE_LIBRARY_BIN_TAR=
2848 AC_SUBST(USE_LIBRARY_BIN_TAR)
2850 dnl ===================================================================
2851 dnl Test whether build target is Release Build
2852 dnl ===================================================================
2853 AC_MSG_CHECKING([whether build target is Release Build])
2854 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
2855     AC_MSG_RESULT([no])
2856     ENABLE_RELEASE_BUILD=
2857     GET_TASK_ALLOW_ENTITLEMENT='
2858         <!-- We want to be able to debug a hardened process when not building for release -->
2859         <key>com.apple.security.get-task-allow</key>
2860         <true/>'
2861 else
2862     AC_MSG_RESULT([yes])
2863     ENABLE_RELEASE_BUILD=TRUE
2864     GET_TASK_ALLOW_ENTITLEMENT=''
2866 AC_SUBST(ENABLE_RELEASE_BUILD)
2867 AC_SUBST(GET_TASK_ALLOW_ENTITLEMENT)
2869 AC_MSG_CHECKING([whether to build a Community flavor])
2870 if test -z "$enable_community_flavor" -o "$enable_community_flavor" = "yes"; then
2871     AC_DEFINE(HAVE_FEATURE_COMMUNITY_FLAVOR)
2872     AC_MSG_RESULT([yes])
2873 else
2874     AC_MSG_RESULT([no])
2877 dnl ===================================================================
2878 dnl Test whether to sign Windows Build
2879 dnl ===================================================================
2880 AC_MSG_CHECKING([whether to sign windows build])
2881 if test "$enable_windows_build_signing" = "yes" -a "$_os" = "WINNT"; then
2882     AC_MSG_RESULT([yes])
2883     WINDOWS_BUILD_SIGNING="TRUE"
2884 else
2885     AC_MSG_RESULT([no])
2886     WINDOWS_BUILD_SIGNING="FALSE"
2888 AC_SUBST(WINDOWS_BUILD_SIGNING)
2890 dnl ===================================================================
2891 dnl MacOSX build and runtime environment options
2892 dnl ===================================================================
2894 AC_ARG_WITH(macosx-version-min-required,
2895     AS_HELP_STRING([--with-macosx-version-min-required=<version>],
2896         [set the minimum OS version needed to run the built LibreOffice])
2897     [
2898                           e. g.: --with-macosx-version-min-required=10.14
2899     ],
2902 dnl ===================================================================
2903 dnl Check for incompatible options set by fuzzing, and reset those
2904 dnl automatically to working combinations
2905 dnl ===================================================================
2907 if test "$libo_fuzzed_enable_dbus" = yes -a "$libo_fuzzed_enable_avahi" -a \
2908         "$enable_dbus" != "$enable_avahi"; then
2909     AC_MSG_NOTICE([Resetting --enable-avahi=$enable_dbus])
2910     enable_avahi=$enable_dbus
2913 add_lopath_after ()
2915     if ! echo "$LO_PATH" | $EGREP -q "(^|${P_SEP})$1($|${P_SEP})"; then
2916         LO_PATH="${LO_PATH:+$LO_PATH$P_SEP}$1"
2917     fi
2920 add_lopath_before ()
2922     local IFS=${P_SEP}
2923     local path_cleanup
2924     local dir
2925     for dir in $LO_PATH ; do
2926         if test "$dir" != "$1" ; then
2927             path_cleanup=${path_cleanup:+$path_cleanup$P_SEP}$dir
2928         fi
2929     done
2930     LO_PATH="$1${path_cleanup:+$P_SEP$path_cleanup}"
2933 dnl ===================================================================
2934 dnl check for required programs (grep, awk, sed, bash)
2935 dnl ===================================================================
2937 pathmunge ()
2939     local new_path
2940     if test -n "$1"; then
2941         if test "$build_os" = "cygwin"; then
2942             if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
2943                 PathFormat "$1"
2944                 new_path=`cygpath -sm "$formatted_path"`
2945             else
2946                 PathFormat "$1"
2947                 new_path=`cygpath -u "$formatted_path"`
2948             fi
2949         else
2950             new_path="$1"
2951         fi
2952         if test "$2" = "after"; then
2953             add_lopath_after "$new_path"
2954         else
2955             add_lopath_before "$new_path"
2956         fi
2957     fi
2960 AC_PROG_AWK
2961 AC_PATH_PROG( AWK, $AWK)
2962 if test -z "$AWK"; then
2963     AC_MSG_ERROR([install awk to run this script])
2966 AC_PATH_PROG(BASH, bash)
2967 if test -z "$BASH"; then
2968     AC_MSG_ERROR([bash not found in \$PATH])
2970 AC_SUBST(BASH)
2972 # prefer parallel compression tools, if available
2973 AC_PATH_PROG(COMPRESSIONTOOL, pigz)
2974 if test -z "$COMPRESSIONTOOL"; then
2975     AC_PATH_PROG(COMPRESSIONTOOL, gzip)
2976     if test -z "$COMPRESSIONTOOL"; then
2977         AC_MSG_ERROR([gzip not found in \$PATH])
2978     fi
2980 AC_SUBST(COMPRESSIONTOOL)
2982 AC_MSG_CHECKING([for GNU or BSD tar])
2983 for a in $GNUTAR gtar gnutar tar bsdtar /usr/sfw/bin/gtar; do
2984     $a --version 2> /dev/null | grep -E "GNU|bsdtar"  2>&1 > /dev/null
2985     if test $? -eq 0;  then
2986         GNUTAR=$a
2987         break
2988     fi
2989 done
2990 AC_MSG_RESULT($GNUTAR)
2991 if test -z "$GNUTAR"; then
2992     AC_MSG_ERROR([not found. install GNU or BSD tar.])
2994 AC_SUBST(GNUTAR)
2996 AC_MSG_CHECKING([for tar's option to strip components])
2997 $GNUTAR --help 2> /dev/null | grep -E "bsdtar|strip-components" 2>&1 >/dev/null
2998 if test $? -eq 0; then
2999     STRIP_COMPONENTS="--strip-components"
3000 else
3001     $GNUTAR --help 2> /dev/null | grep -E "strip-path" 2>&1 >/dev/null
3002     if test $? -eq 0; then
3003         STRIP_COMPONENTS="--strip-path"
3004     else
3005         STRIP_COMPONENTS="unsupported"
3006     fi
3008 AC_MSG_RESULT($STRIP_COMPONENTS)
3009 if test x$STRIP_COMPONENTS = xunsupported; then
3010     AC_MSG_ERROR([you need a tar that is able to strip components.])
3012 AC_SUBST(STRIP_COMPONENTS)
3014 dnl It is useful to have a BUILD_TYPE keyword to distinguish "normal"
3015 dnl desktop OSes from "mobile" ones.
3017 dnl We assume that a non-DESKTOP build type is also a non-NATIVE one.
3018 dnl In other words, that when building for an OS that is not a
3019 dnl "desktop" one but a "mobile" one, we are always cross-compiling.
3021 dnl Note the direction of the implication; there is no assumption that
3022 dnl cross-compiling would imply a non-desktop OS.
3024 if test $_os != iOS -a $_os != Android -a "$enable_fuzzers" != "yes"; then
3025     BUILD_TYPE="$BUILD_TYPE DESKTOP"
3026     AC_DEFINE(HAVE_FEATURE_DESKTOP)
3027     if test "$_os" != Emscripten; then
3028         AC_DEFINE(HAVE_FEATURE_MULTIUSER_ENVIRONMENT)
3029     fi
3032 # explicitly doesn't include enable_gtk3=no and enable_qt5=yes, so it should
3033 # also work with the default gtk3 plugin.
3034 if test "$enable_wasm_strip" = "yes"; then
3035     enable_avmedia=no
3036     enable_cmis=no
3037     enable_coinmp=no
3038     enable_cups=no
3039     test "$_os" = Emscripten && enable_curl=no
3040     enable_database_connectivity=no
3041     enable_dbus=no
3042     enable_dconf=no
3043     test "${enable_dynamic_loading+set}" = set -o "$_os" != Emscripten || enable_dynamic_loading=no
3044     enable_extension_integration=no
3045     enable_extensions=no
3046     enable_extension_update=no
3047     enable_gio=no
3048     enable_gpgmepp=no
3049     enable_ldap=no
3050     enable_lotuswordpro=no
3051     enable_lpsolve=no
3052     enable_nss=no
3053     enable_odk=no
3054     enable_online_update=no
3055     enable_opencl=no
3056     enable_pdfimport=no
3057     enable_randr=no
3058     enable_report_builder=no
3059     enable_scripting=no
3060     enable_sdremote_bluetooth=no
3061     enable_skia=no
3062     enable_xmlhelp=no
3063     enable_zxing=no
3064     test_libepubgen=no
3065     test_libcdr=no
3066     test_libcmis=no
3067     test_libetonyek=no
3068     test_libfreehand=no
3069     test_libmspub=no
3070     test_libpagemaker=no
3071     test_libqxp=no
3072     test_libvisio=no
3073     test_libzmf=no
3074     test_webdav=no
3075     with_galleries=no
3076     with_webdav=no
3077     with_x=no
3079     test "${with_fonts+set}" = set || with_fonts=yes
3080     test "${with_locales+set}" = set || with_locales=en
3082     AC_DEFINE(ENABLE_WASM_STRIP_ACCESSIBILITY)
3083     AC_DEFINE(ENABLE_WASM_STRIP_WRITER)
3084     AC_DEFINE(ENABLE_WASM_STRIP_CALC)
3085     AC_DEFINE(ENABLE_WASM_STRIP_CANVAS)
3086 #    AC_DEFINE(ENABLE_WASM_STRIP_CHART)
3087     AC_DEFINE(ENABLE_WASM_STRIP_DBACCESS)
3088     AC_DEFINE(ENABLE_WASM_STRIP_EPUB)
3089     AC_DEFINE(ENABLE_WASM_STRIP_EXTRA)
3090     AC_DEFINE(ENABLE_WASM_STRIP_GUESSLANG)
3091 #    AC_DEFINE(ENABLE_WASM_STRIP_HUNSPELL)
3092     AC_DEFINE(ENABLE_WASM_STRIP_LANGUAGETOOL)
3093     AC_DEFINE(ENABLE_WASM_STRIP_PINGUSER)
3094     AC_DEFINE(ENABLE_WASM_STRIP_PREMULTIPLY)
3095     AC_DEFINE(ENABLE_WASM_STRIP_RECENT)
3096     AC_DEFINE(ENABLE_WASM_STRIP_RECOVERYUI)
3097     AC_DEFINE(ENABLE_WASM_STRIP_SPLASH)
3098     AC_DEFINE(ENABLE_WASM_STRIP_SWEXPORTS)
3099     AC_DEFINE(ENABLE_WASM_STRIP_SCEXPORTS)
3102 EMSCRIPTEN_NEH_MAJOR=3
3103 EMSCRIPTEN_NEH_MINOR=1
3104 EMSCRIPTEN_NEH_TINY=3
3105 EMSCRIPTEN_NEH_VERSION="${EMSCRIPTEN_NEH_MAJOR}.${EMSCRIPTEN_NEH_MINOR}.${EMSCRIPTEN_NEH_TINY}"
3107 if test "$enable_wasm_exceptions" = yes; then
3108     AC_MSG_CHECKING([if Emscripten version is at least $EMSCRIPTEN_NEH_VERSION for SjLj + native EH])
3109     check_semantic_version_three_prefixed EMSCRIPTEN NEH
3110     if test $? -ne 0; then
3111         AC_MSG_ERROR([no, found $EMSCRIPTEN_VERSION])
3112     else
3113         AC_MSG_RESULT([yes ($EMSCRIPTEN_VERSION)])
3114     fi
3115     ENABLE_WASM_EXCEPTIONS=TRUE
3117 AC_SUBST(ENABLE_WASM_EXCEPTIONS)
3119 # Whether to build "avmedia" functionality or not.
3121 if test "$enable_avmedia" = yes; then
3122     BUILD_TYPE="$BUILD_TYPE AVMEDIA"
3123     AC_DEFINE(HAVE_FEATURE_AVMEDIA)
3124 else
3125     test_gstreamer_1_0=no
3128 # Decide whether to build database connectivity stuff (including Base) or not.
3129 if test "$enable_database_connectivity" != no; then
3130     BUILD_TYPE="$BUILD_TYPE DBCONNECTIVITY"
3131     AC_DEFINE(HAVE_FEATURE_DBCONNECTIVITY)
3132 else
3133     if test "$_os" = iOS; then
3134         AC_MSG_ERROR([Presumly can't disable DB connectivity on iOS.])
3135     fi
3136     disable_database_connectivity_dependencies
3139 if test -z "$enable_extensions"; then
3140     # For iOS and Android Viewer, disable extensions unless specifically overridden with --enable-extensions.
3141     if test $_os != iOS && test $_os != Android -o "$ENABLE_ANDROID_LOK" = TRUE ; then
3142         enable_extensions=yes
3143     fi
3146 DISABLE_SCRIPTING=''
3147 if test "$enable_scripting" = yes; then
3148     BUILD_TYPE="$BUILD_TYPE SCRIPTING"
3149     AC_DEFINE(HAVE_FEATURE_SCRIPTING)
3150 else
3151     DISABLE_SCRIPTING='TRUE'
3152     SCPDEFS="$SCPDEFS -DDISABLE_SCRIPTING"
3155 if test $_os = iOS -o $_os = Android -o $_os = Emscripten; then
3156     # Disable dynamic_loading always for iOS and Android
3157     enable_dynamic_loading=no
3158 elif test -z "$enable_dynamic_loading"; then
3159     # Otherwise enable it unless specifically disabled
3160     enable_dynamic_loading=yes
3163 DISABLE_DYNLOADING=''
3164 if test "$enable_dynamic_loading" = yes; then
3165     BUILD_TYPE="$BUILD_TYPE DYNLOADING"
3166 else
3167     DISABLE_DYNLOADING='TRUE'
3168     if test $_os != iOS -a $_os != Android; then
3169         enable_database_connectivity=no
3170         enable_nss=no
3171         enable_odk=no
3172         enable_python=no
3173         enable_skia=no
3174         with_java=no
3175     fi
3177 AC_SUBST(DISABLE_DYNLOADING)
3179 ENABLE_CUSTOMTARGET_COMPONENTS=
3180 if test "$enable_customtarget_components" = yes -a "$DISABLE_DYNLOADING" = TRUE; then
3181     ENABLE_CUSTOMTARGET_COMPONENTS=TRUE
3182     if test -n "$with_locales" -a "$with_locales" != en -a "$with_locales" != ALL; then
3183         AC_MSG_ERROR([Currently just --with-locales=all or en is supported with --enable-customtarget-components])
3184     fi
3186 AC_SUBST(ENABLE_CUSTOMTARGET_COMPONENTS)
3188 if test "$enable_extensions" = yes; then
3189     BUILD_TYPE="$BUILD_TYPE EXTENSIONS"
3190     AC_DEFINE(HAVE_FEATURE_EXTENSIONS)
3191 else
3192     enable_extension_integration=no
3193     enable_extension_update=no
3196 # remember SYSBASE value
3197 AC_SUBST(SYSBASE)
3199 dnl ===================================================================
3200 dnl  Sort out various gallery compilation options
3201 dnl ===================================================================
3202 WITH_GALLERY_BUILD=TRUE
3203 AC_MSG_CHECKING([how to build and package galleries])
3204 if test -n "${with_galleries}"; then
3205     if test "$with_galleries" = "build"; then
3206         if test "$enable_database_connectivity" = no; then
3207             AC_MSG_ERROR([DB connectivity is needed for gengal / svx])
3208         fi
3209         AC_MSG_RESULT([build from source images internally])
3210     elif test "$with_galleries" = "no"; then
3211         WITH_GALLERY_BUILD=
3212         AC_MSG_RESULT([disable non-internal gallery build])
3213     else
3214         AC_MSG_ERROR([unknown value --with-galleries=$with_galleries])
3215     fi
3216 else
3217     if test $_os != iOS -a $_os != Android; then
3218         AC_MSG_RESULT([internal src images for desktop])
3219     else
3220         WITH_GALLERY_BUILD=
3221         AC_MSG_RESULT([disable src image build])
3222     fi
3224 AC_SUBST(WITH_GALLERY_BUILD)
3226 dnl ===================================================================
3227 dnl  Checks if ccache is available
3228 dnl ===================================================================
3229 CCACHE_DEPEND_MODE=
3230 if test "$enable_ccache" = "no"; then
3231     CCACHE=""
3232 elif test -n "$enable_ccache" -o \( "$enable_ccache" = "" -a "$enable_icecream" != "yes" \); then
3233     case "%$CC%$CXX%" in
3234     # If $CC and/or $CXX already contain "ccache" (possibly suffixed with some version number etc),
3235     # assume that's good then
3236     *%ccache[[-_' ']]*|*/ccache[[-_' ']]*)
3237         AC_MSG_NOTICE([ccache seems to be included in a pre-defined CC and/or CXX])
3238         CCACHE_DEPEND_MODE=1
3239         ;;
3240     *)
3241         # try to use our own ccache if it is available and CCACHE was not already defined
3242         if test -z "$CCACHE"; then
3243             if test "$_os" = "WINNT"; then
3244                 ccache_ext=.exe # e.g. openssl build needs ccache.exe, not just ccache
3245             fi
3246             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/ccache$ccache_ext" ; then
3247                 CCACHE="$LODE_HOME/opt/bin/ccache$ccache_ext"
3248             elif test -x "/opt/lo/bin/ccache$ccache_ext"; then
3249                 CCACHE="/opt/lo/bin/ccache$ccache_ext"
3250             fi
3251         fi
3252         AC_PATH_PROG([CCACHE],[ccache],[not found])
3253         if test "$CCACHE" != "not found" -a "$_os" = "WINNT"; then
3254             CCACHE=`win_short_path_for_make "$CCACHE"`
3255             # check that it has MSVC support (it should recognize it in CCACHE_COMPILERTYPE)
3256             rm -f conftest.txt
3257             AC_MSG_CHECKING([whether $CCACHE has MSVC support])
3258             CCACHE_COMPILERTYPE=cl CCACHE_LOGFILE=conftest.txt $CCACHE echo >/dev/null 2>/dev/null
3259             if grep -q 'Config: (environment) compiler_type = cl' conftest.txt; then
3260                 AC_MSG_RESULT(yes)
3261             else
3262                 AC_MSG_RESULT(no)
3263                 CCACHE="not found"
3264             fi
3265             rm -f conftest.txt
3266         fi
3267         if test "$CCACHE" = "not found" -a "$_os" = "WINNT"; then
3268             # on windows/VC perhaps sccache is around?
3269             case "%$CC%$CXX%" in
3270             # If $CC and/or $CXX already contain "sccache" (possibly suffixed with some version number etc),
3271             # assume that's good then
3272             *%sccache[[-_' ']]*|*/sccache[[-_' ']]*)
3273                 AC_MSG_NOTICE([sccache seems to be included in a pre-defined CC and/or CXX])
3274                 CCACHE_DEPEND_MODE=1
3275                 SCCACHE=1
3276                 ;;
3277             *)
3278                 # for sharing code below, reuse CCACHE env var
3279                 AC_PATH_PROG([CCACHE],[sccache],[not found])
3280                 if test "$CCACHE" != "not found"; then
3281                     CCACHE=`win_short_path_for_make "$CCACHE"`
3282                     SCCACHE=1
3283                     CCACHE_DEPEND_MODE=1
3284                 fi
3285                 ;;
3286             esac
3287         fi
3288         if test "$CCACHE" = "not found"; then
3289             CCACHE=""
3290         fi
3291         if test -n "$CCACHE" -a -z "$SCCACHE"; then
3292             CCACHE_DEPEND_MODE=1
3293             # Need to check for ccache version: otherwise prevents
3294             # caching of the results (like "-x objective-c++" for Mac)
3295             if test $_os = Darwin -o $_os = iOS; then
3296                 # Check ccache version
3297                 AC_MSG_CHECKING([whether version of ccache is suitable])
3298                 CCACHE_VERSION=`"$CCACHE" -V | "$AWK" '/^ccache version/{print $3}'`
3299                 CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
3300                 if test "$CCACHE_VERSION" = "2.4_OOo" -o "$CCACHE_NUMVER" -ge "030100"; then
3301                     AC_MSG_RESULT([yes, $CCACHE_VERSION])
3302                 else
3303                     AC_MSG_RESULT([no, $CCACHE_VERSION])
3304                     CCACHE=""
3305                     CCACHE_DEPEND_MODE=
3306                 fi
3307             fi
3308         fi
3309         ;;
3310     esac
3311 else
3312     CCACHE=""
3314 if test "$enable_ccache" = "nodepend"; then
3315     CCACHE_DEPEND_MODE=""
3317 AC_SUBST(CCACHE_DEPEND_MODE)
3319 # sccache defaults are good enough
3320 if test "$CCACHE" != "" -a -z "$SCCACHE"; then
3321     # e.g. (/home/rene/.config/ccache/ccache.conf) max_size = 20.0G
3322     # or (...) max_size = 20.0 G
3323     # -p works with both 4.2 and 4.4
3324     ccache_size_msg=$([$CCACHE -p | $AWK /max_size/'{ print $4 $5 }' | sed -e 's/\.[0-9]*//'])
3325     ccache_size=$(echo "$ccache_size_msg" | grep "G" | sed -e 's/G.*$//')
3326     if test "$ccache_size" = ""; then
3327         ccache_size=$(echo "$ccache_size_msg" | grep "M" | sed -e 's/\ M.*$//')
3328         if test "$ccache_size" = ""; then
3329             ccache_size=0
3330         fi
3331         # we could not determine the size or it was less than 1GB -> disable auto-ccache
3332         if test $ccache_size -lt 1024; then
3333             CCACHE=""
3334             AC_MSG_WARN([ccache's cache size is less than 1GB using it is counter-productive: Disabling auto-ccache detection])
3335             add_warning "ccache's cache size is less than 1GB using it is counter-productive: auto-ccache detection disabled"
3336         else
3337             # warn that ccache may be too small for debug build
3338             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3339             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3340         fi
3341     else
3342         if test $ccache_size -lt 5; then
3343             #warn that ccache may be too small for debug build
3344             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3345             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3346         fi
3347     fi
3350 ENABLE_Z7_DEBUG=
3351 if test "$enable_z7_debug" != no; then
3352     if test "$enable_z7_debug" = yes -o -n "$CCACHE"; then
3353         ENABLE_Z7_DEBUG=TRUE
3354     fi
3355 else
3356     AC_MSG_WARN([ccache will not work with --disable-z7-debug])
3357     add_warning "ccache will not work with --disable-z7-debug"
3359 AC_SUBST(ENABLE_Z7_DEBUG)
3361 dnl ===================================================================
3362 dnl  Checks for C compiler,
3363 dnl  The check for the C++ compiler is later on.
3364 dnl ===================================================================
3365 if test "$_os" != "WINNT"; then
3366     GCC_HOME_SET="true"
3367     AC_MSG_CHECKING([gcc home])
3368     if test -z "$with_gcc_home"; then
3369         if test "$enable_icecream" = "yes"; then
3370             if test -d "/usr/lib/icecc/bin"; then
3371                 GCC_HOME="/usr/lib/icecc/"
3372             elif test -d "/usr/libexec/icecc/bin"; then
3373                 GCC_HOME="/usr/libexec/icecc/"
3374             elif test -d "/opt/icecream/bin"; then
3375                 GCC_HOME="/opt/icecream/"
3376             else
3377                 AC_MSG_ERROR([Could not figure out the location of icecream GCC wrappers, manually use --with-gcc-home])
3379             fi
3380         else
3381             GCC_HOME=`which gcc | $SED -e s,/bin/gcc,,`
3382             GCC_HOME_SET="false"
3383         fi
3384     else
3385         GCC_HOME="$with_gcc_home"
3386     fi
3387     AC_MSG_RESULT($GCC_HOME)
3388     AC_SUBST(GCC_HOME)
3390     if test "$GCC_HOME_SET" = "true"; then
3391         if test -z "$CC"; then
3392             CC="$GCC_HOME/bin/gcc"
3393             CC_BASE="gcc"
3394         fi
3395         if test -z "$CXX"; then
3396             CXX="$GCC_HOME/bin/g++"
3397             CXX_BASE="g++"
3398         fi
3399     fi
3402 COMPATH=`dirname "$CC"`
3403 if test "$COMPATH" = "."; then
3404     AC_PATH_PROGS(COMPATH, $CC)
3405     dnl double square bracket to get single because of M4 quote...
3406     COMPATH=`echo $COMPATH | $SED "s@/[[^/:]]*\\\$@@"`
3408 COMPATH=`echo $COMPATH | $SED "s@/[[Bb]][[Ii]][[Nn]]\\\$@@"`
3410 dnl ===================================================================
3411 dnl Java support
3412 dnl ===================================================================
3413 AC_MSG_CHECKING([whether to build with Java support])
3414 if test "$with_java" != "no"; then
3415     if test "$DISABLE_SCRIPTING" = TRUE; then
3416         AC_MSG_RESULT([no, overridden by --disable-scripting])
3417         ENABLE_JAVA=""
3418         with_java=no
3419     else
3420         AC_MSG_RESULT([yes])
3421         ENABLE_JAVA="TRUE"
3422         AC_DEFINE(HAVE_FEATURE_JAVA)
3423     fi
3424 else
3425     AC_MSG_RESULT([no])
3426     ENABLE_JAVA=""
3429 AC_SUBST(ENABLE_JAVA)
3431 dnl ENABLE_JAVA="TRUE" if we want there to be *run-time* (and build-time) support for Java
3433 dnl ENABLE_JAVA="" indicate no Java support at all
3435 dnl ===================================================================
3436 dnl Check macOS SDK and compiler
3437 dnl ===================================================================
3439 if test $_os = Darwin; then
3441     # The SDK in the currently selected Xcode should be found.
3443     AC_MSG_CHECKING([what macOS SDK to use])
3444     # XCode only ships with a single SDK for a while now, and using older SDKs alongside is not
3445     # really supported anymore, instead you'd use different copies of Xcode, each with their own
3446     # SDK, and thus xcrun will pick the SDK that matches the currently selected Xcode version
3447     # also restricting the SDK version to "known good" versions doesn't seem necessary anymore, the
3448     # problems that existed in the PPC days with target versions not being respected or random
3449     # failures seems to be a thing of the past or rather: limiting either the Xcode version or the
3450     # SDK version is enough, no need to do both...
3451     MACOSX_SDK_PATH=`xcrun --sdk macosx --show-sdk-path 2> /dev/null`
3452     if test ! -d "$MACOSX_SDK_PATH"; then
3453         AC_MSG_ERROR([Could not find an appropriate macOS SDK])
3454     fi
3455     macosx_sdk=`xcodebuild -version -sdk "$MACOSX_SDK_PATH" SDKVersion`
3456     MACOSX_SDK_BUILD_VERSION=$(xcodebuild -version -sdk "$MACOSX_SDK_PATH" ProductBuildVersion)
3457     # format changed between 10.9 and 10.10 - up to 10.9 it was just four digits (1090), starting
3458     # with macOS 10.10 it was switched to account for x.y.z with six digits, 10.10 is 101000,
3459     # 10.10.2 is 101002
3460     # we don't target the lower versions anymore, so it doesn't matter that we don't generate the
3461     # correct version in case such an old SDK is specified, it will be rejected later anyway
3462     MACOSX_SDK_VERSION=$(echo $macosx_sdk | $AWK -F. '{ print $1*10000+$2*100+$3 }')
3463     if test $MACOSX_SDK_VERSION -lt 101400; then
3464         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported, lowest supported version is 10.14])
3465     fi
3466     if test "$host_cpu" = arm64 -a $MACOSX_SDK_VERSION -lt 110000; then
3467         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported for Apple Silicon (need at least 11.0)])
3468     fi
3469     AC_MSG_RESULT([macOS SDK $macosx_sdk at $MACOSX_SDK_PATH])
3471     AC_MSG_CHECKING([what minimum version of macOS to require])
3472     if test "$with_macosx_version_min_required" = "" ; then
3473         if test "$host_cpu" = x86_64; then
3474             with_macosx_version_min_required="10.14";
3475         else
3476             with_macosx_version_min_required="11.0";
3477         fi
3478     fi
3479     # see same notes about MACOSX_SDK_VERSION above
3480     MAC_OS_X_VERSION_MIN_REQUIRED=$(echo $with_macosx_version_min_required | $AWK -F. '{ print $1*10000+$2*100+$3 }')
3481     if test $MAC_OS_X_VERSION_MIN_REQUIRED -lt 101400; then
3482         AC_MSG_ERROR([with-macosx-version-min-required $with_macosx_version_min_required is not a supported value, minimum supported version is 10.14])
3483     fi
3484     AC_MSG_RESULT([$with_macosx_version_min_required])
3486     AC_MSG_CHECKING([that macosx-version-min-required is coherent with macos-with-sdk])
3487     if test $MAC_OS_X_VERSION_MIN_REQUIRED -gt $MACOSX_SDK_VERSION; then
3488         AC_MSG_ERROR([the version minimum required ($with_macosx_version_min_required) cannot be greater than the sdk level ($macosx_sdk)])
3489     else
3490         AC_MSG_RESULT([yes])
3491     fi
3493     # export this so that "xcrun" invocations later return matching values
3494     DEVELOPER_DIR="${MACOSX_SDK_PATH%/SDKs*}"
3495     DEVELOPER_DIR="${DEVELOPER_DIR%/Platforms*}"
3496     export DEVELOPER_DIR
3497     FRAMEWORKSHOME="$MACOSX_SDK_PATH/System/Library/Frameworks"
3498     MACOSX_DEPLOYMENT_TARGET="$with_macosx_version_min_required"
3500     AC_MSG_CHECKING([whether Xcode is new enough])
3501     my_xcode_ver1=$(xcrun xcodebuild -version | head -n 1)
3502     my_xcode_ver2=${my_xcode_ver1#Xcode }
3503     my_xcode_ver3=$(printf %s "$my_xcode_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
3504     if test "$my_xcode_ver3" -ge 1205; then
3505         AC_MSG_RESULT([yes ($my_xcode_ver2)])
3506     else
3507         AC_MSG_ERROR(["$my_xcode_ver1" is too old or unrecognized, must be at least Xcode 12.5])
3508     fi
3510     my_xcode_ver1=$(xcrun xcodebuild -version | tail -n 1)
3511     MACOSX_XCODE_BUILD_VERSION=${my_xcode_ver1#Build version }
3513     LIBTOOL=/usr/bin/libtool
3514     INSTALL_NAME_TOOL=install_name_tool
3515     if test -z "$save_CC"; then
3516         stdlib=-stdlib=libc++
3518         AC_MSG_CHECKING([what C compiler to use])
3519         CC="`xcrun -find clang`"
3520         CC_BASE=`first_arg_basename "$CC"`
3521         if test "$host_cpu" = x86_64; then
3522             CC+=" -target x86_64-apple-macos"
3523         else
3524             CC+=" -target arm64-apple-macos"
3525         fi
3526         CC+=" -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3527         AC_MSG_RESULT([$CC])
3529         AC_MSG_CHECKING([what C++ compiler to use])
3530         CXX="`xcrun -find clang++`"
3531         CXX_BASE=`first_arg_basename "$CXX"`
3532         if test "$host_cpu" = x86_64; then
3533             CXX+=" -target x86_64-apple-macos"
3534         else
3535             CXX+=" -target arm64-apple-macos"
3536         fi
3537         CXX+=" $stdlib -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3538         AC_MSG_RESULT([$CXX])
3540         INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3541         AR=`xcrun -find ar`
3542         NM=`xcrun -find nm`
3543         STRIP=`xcrun -find strip`
3544         LIBTOOL=`xcrun -find libtool`
3545         RANLIB=`xcrun -find ranlib`
3546     fi
3548     AC_MSG_CHECKING([whether to do code signing])
3550     if test -z "$enable_macosx_code_signing" -o "$enable_macosx_code_signing" == "no" ; then
3551         AC_MSG_RESULT([no])
3552     else
3553         if test "$enable_macosx_code_signing" = yes; then
3554             # By default use the first suitable certificate (?).
3556             # http://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3557             # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3558             # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3559             # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3560             # "Developer ID Application" one.
3561             identity="Developer ID Application:"
3562         else
3563             identity=$enable_macosx_code_signing
3564         fi
3565         identity=`security find-identity -p codesigning -v 2>/dev/null | $AWK "/$identity/{print \\$2; exit}"`
3566         if test -n "$identity"; then
3567             MACOSX_CODESIGNING_IDENTITY=$identity
3568             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3569             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3570         else
3571             AC_MSG_ERROR([cannot determine identity to use])
3572         fi
3573     fi
3575     AC_MSG_CHECKING([whether to create a Mac App Store package])
3577     if test -z "$enable_macosx_package_signing" || test "$enable_macosx_package_signing" == no; then
3578         AC_MSG_RESULT([no])
3579     elif test -z "$MACOSX_CODESIGNING_IDENTITY"; then
3580         AC_MSG_ERROR([You forgot --enable-macosx-code-signing])
3581     else
3582         if test "$enable_macosx_package_signing" = yes; then
3583             # By default use the first suitable certificate.
3584             # It should be a "3rd Party Mac Developer Installer" one
3585             identity="3rd Party Mac Developer Installer:"
3586         else
3587             identity=$enable_macosx_package_signing
3588         fi
3589         identity=`security find-identity -v 2>/dev/null | $AWK "/$identity/ {print \\$2; exit}"`
3590         if test -n "$identity"; then
3591             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3592             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3593             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3594         else
3595             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3596         fi
3597     fi
3599     if test -n "$MACOSX_CODESIGNING_IDENTITY" -a -n "$MACOSX_PACKAGE_SIGNING_IDENTITY" -a "$MACOSX_CODESIGNING_IDENTITY" = "$MACOSX_PACKAGE_SIGNING_IDENTITY"; then
3600         AC_MSG_ERROR([You should not use the same identity for code and package signing])
3601     fi
3603     AC_MSG_CHECKING([whether to sandbox the application])
3605     if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then
3606         AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java])
3607     elif test "$enable_macosx_sandbox" = yes; then
3608         ENABLE_MACOSX_SANDBOX=TRUE
3609         AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX)
3610         AC_MSG_RESULT([yes])
3611     else
3612         AC_MSG_RESULT([no])
3613     fi
3615     AC_MSG_CHECKING([what macOS app bundle identifier to use])
3616     MACOSX_BUNDLE_IDENTIFIER=$with_macosx_bundle_identifier
3617     AC_MSG_RESULT([$MACOSX_BUNDLE_IDENTIFIER])
3619     if test -n "$with_macosx_provisioning_profile" ; then
3620         if test ! -f "$with_macosx_provisioning_profile"; then
3621             AC_MSG_ERROR([provisioning profile not found at $with_macosx_provisioning_profile])
3622         else
3623             MACOSX_PROVISIONING_PROFILE=$with_macosx_provisioning_profile
3624             MACOSX_PROVISIONING_INFO=$([security cms -D -i "$MACOSX_PROVISIONING_PROFILE" | \
3625                 xmllint --xpath "//key[.='com.apple.application-identifier' or .='com.apple.developer.team-identifier'] \
3626                     | //key[.='com.apple.application-identifier' or .='com.apple.developer.team-identifier']/following-sibling::string[1]" - | \
3627                 sed -e 's#><#>\n\t<#g' -e 's#^#\t#'])
3628         fi
3629     fi
3631 AC_SUBST(MACOSX_SDK_PATH)
3632 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3633 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3634 AC_SUBST(INSTALL_NAME_TOOL)
3635 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3636 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3637 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3638 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3639 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3640 AC_SUBST(MACOSX_PROVISIONING_INFO)
3641 AC_SUBST(MACOSX_PROVISIONING_PROFILE)
3642 AC_SUBST(MACOSX_SDK_BUILD_VERSION)
3643 AC_SUBST(MACOSX_XCODE_BUILD_VERSION)
3645 dnl ===================================================================
3646 dnl Check iOS SDK and compiler
3647 dnl ===================================================================
3649 if test $_os = iOS; then
3650     AC_MSG_CHECKING([what iOS SDK to use])
3652     if test "$enable_ios_simulator" = "yes"; then
3653         platformlc=iphonesimulator
3654         versionmin=-mios-simulator-version-min=14.5
3655     else
3656         platformlc=iphoneos
3657         versionmin=-miphoneos-version-min=14.5
3658     fi
3660     sysroot=`xcrun --sdk $platformlc --show-sdk-path`
3662     if ! test -d "$sysroot"; then
3663         AC_MSG_ERROR([Could not find iOS SDK $sysroot])
3664     fi
3666     AC_MSG_RESULT($sysroot)
3668     stdlib="-stdlib=libc++"
3670     AC_MSG_CHECKING([what C compiler to use])
3671     CC="`xcrun -find clang`"
3672     CC_BASE=`first_arg_basename "$CC"`
3673     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3674     AC_MSG_RESULT([$CC])
3676     AC_MSG_CHECKING([what C++ compiler to use])
3677     CXX="`xcrun -find clang++`"
3678     CXX_BASE=`first_arg_basename "$CXX"`
3679     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3680     AC_MSG_RESULT([$CXX])
3682     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3683     AR=`xcrun -find ar`
3684     NM=`xcrun -find nm`
3685     STRIP=`xcrun -find strip`
3686     LIBTOOL=`xcrun -find libtool`
3687     RANLIB=`xcrun -find ranlib`
3690 AC_MSG_CHECKING([whether to treat the installation as read-only])
3692 if test $_os = Darwin; then
3693     enable_readonly_installset=yes
3694 elif test "$enable_extensions" != yes; then
3695     enable_readonly_installset=yes
3697 if test "$enable_readonly_installset" = yes; then
3698     AC_MSG_RESULT([yes])
3699     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3700 else
3701     AC_MSG_RESULT([no])
3704 dnl ===================================================================
3705 dnl Structure of install set
3706 dnl ===================================================================
3708 if test $_os = Darwin; then
3709     LIBO_BIN_FOLDER=MacOS
3710     LIBO_ETC_FOLDER=Resources
3711     LIBO_LIBEXEC_FOLDER=MacOS
3712     LIBO_LIB_FOLDER=Frameworks
3713     LIBO_LIB_PYUNO_FOLDER=Resources
3714     LIBO_SHARE_FOLDER=Resources
3715     LIBO_SHARE_HELP_FOLDER=Resources/help
3716     LIBO_SHARE_JAVA_FOLDER=Resources/java
3717     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3718     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3719     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3720     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3721     LIBO_URE_BIN_FOLDER=MacOS
3722     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3723     LIBO_URE_LIB_FOLDER=Frameworks
3724     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3725     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3726 elif test $_os = WINNT; then
3727     LIBO_BIN_FOLDER=program
3728     LIBO_ETC_FOLDER=program
3729     LIBO_LIBEXEC_FOLDER=program
3730     LIBO_LIB_FOLDER=program
3731     LIBO_LIB_PYUNO_FOLDER=program
3732     LIBO_SHARE_FOLDER=share
3733     LIBO_SHARE_HELP_FOLDER=help
3734     LIBO_SHARE_JAVA_FOLDER=program/classes
3735     LIBO_SHARE_PRESETS_FOLDER=presets
3736     LIBO_SHARE_READMES_FOLDER=readmes
3737     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3738     LIBO_SHARE_SHELL_FOLDER=program/shell
3739     LIBO_URE_BIN_FOLDER=program
3740     LIBO_URE_ETC_FOLDER=program
3741     LIBO_URE_LIB_FOLDER=program
3742     LIBO_URE_MISC_FOLDER=program
3743     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3744 else
3745     LIBO_BIN_FOLDER=program
3746     LIBO_ETC_FOLDER=program
3747     LIBO_LIBEXEC_FOLDER=program
3748     LIBO_LIB_FOLDER=program
3749     LIBO_LIB_PYUNO_FOLDER=program
3750     LIBO_SHARE_FOLDER=share
3751     LIBO_SHARE_HELP_FOLDER=help
3752     LIBO_SHARE_JAVA_FOLDER=program/classes
3753     LIBO_SHARE_PRESETS_FOLDER=presets
3754     LIBO_SHARE_READMES_FOLDER=readmes
3755     if test "$enable_fuzzers" != yes; then
3756         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3757     else
3758         LIBO_SHARE_RESOURCE_FOLDER=resource
3759     fi
3760     LIBO_SHARE_SHELL_FOLDER=program/shell
3761     LIBO_URE_BIN_FOLDER=program
3762     LIBO_URE_ETC_FOLDER=program
3763     LIBO_URE_LIB_FOLDER=program
3764     LIBO_URE_MISC_FOLDER=program
3765     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3767 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3768 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3769 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3770 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3771 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3772 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3773 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3774 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3775 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3776 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3777 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3778 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3779 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3780 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3781 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3782 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3784 # Not all of them needed in config_host.mk, add more if need arises
3785 AC_SUBST(LIBO_BIN_FOLDER)
3786 AC_SUBST(LIBO_ETC_FOLDER)
3787 AC_SUBST(LIBO_LIB_FOLDER)
3788 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3789 AC_SUBST(LIBO_SHARE_FOLDER)
3790 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3791 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3792 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3793 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3794 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3795 AC_SUBST(LIBO_URE_BIN_FOLDER)
3796 AC_SUBST(LIBO_URE_ETC_FOLDER)
3797 AC_SUBST(LIBO_URE_LIB_FOLDER)
3798 AC_SUBST(LIBO_URE_MISC_FOLDER)
3799 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3801 dnl ===================================================================
3802 dnl Windows specific tests and stuff
3803 dnl ===================================================================
3805 reg_get_value()
3807     # Return value: $regvalue
3808     unset regvalue
3810     if test "$build_os" = "wsl"; then
3811         regvalue=$($WSL_LO_HELPER --read-registry $1 "$2" 2>/dev/null)
3812         return
3813     fi
3815     local _regentry="/proc/registry${1}/${2}"
3816     if test -f "$_regentry"; then
3817         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3818         # Registry keys read via /proc/registry* are always \0 terminated!
3819         local _regvalue=$(tr -d '\0' < "$_regentry")
3820         if test $? -eq 0; then
3821             regvalue=$_regvalue
3822         fi
3823     fi
3826 # Get a value from the 32-bit side of the Registry
3827 reg_get_value_32()
3829     reg_get_value "32" "$1"
3832 # Get a value from the 64-bit side of the Registry
3833 reg_get_value_64()
3835     reg_get_value "64" "$1"
3838 reg_list_values()
3840     # Return value: $reglist
3841     unset reglist
3843     if test "$build_os" = "wsl"; then
3844         reglist=$($WSL_LO_HELPER --list-registry $1 "$2" 2>/dev/null | tr -d '\r')
3845         return
3846     fi
3848     reglist=$(ls "/proc/registry${1}/${2}")
3851 # List values from the 32-bit side of the Registry
3852 reg_list_values_32()
3854     reg_list_values "32" "$1"
3857 # List values from the 64-bit side of the Registry
3858 reg_list_values_64()
3860     reg_list_values "64" "$1"
3863 case "$host_os" in
3864 cygwin*|wsl*)
3865     COM=MSC
3866     OS=WNT
3867     RTL_OS=Windows
3868     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3869         P_SEP=";"
3870     else
3871         P_SEP=:
3872     fi
3873     case "$host_cpu" in
3874     x86_64)
3875         CPUNAME=X86_64
3876         RTL_ARCH=X86_64
3877         PLATFORMID=windows_x86_64
3878         WINDOWS_X64=1
3879         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
3880         WIN_HOST_ARCH="x64"
3881         WIN_MULTI_ARCH="x86"
3882         WIN_HOST_BITS=64
3883         ;;
3884     i*86)
3885         CPUNAME=INTEL
3886         RTL_ARCH=x86
3887         PLATFORMID=windows_x86
3888         WIN_HOST_ARCH="x86"
3889         WIN_HOST_BITS=32
3890         WIN_OTHER_ARCH="x64"
3891         ;;
3892     aarch64)
3893         CPUNAME=AARCH64
3894         RTL_ARCH=AARCH64
3895         PLATFORMID=windows_aarch64
3896         WINDOWS_X64=1
3897         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
3898         WIN_HOST_ARCH="arm64"
3899         WIN_HOST_BITS=64
3900         with_ucrt_dir=no
3901         ;;
3902     *)
3903         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
3904         ;;
3905     esac
3907     case "$build_cpu" in
3908     x86_64) WIN_BUILD_ARCH="x64" ;;
3909     i*86) WIN_BUILD_ARCH="x86" ;;
3910     aarch64) WIN_BUILD_ARCH="arm64" ;;
3911     *)
3912         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
3913         ;;
3914     esac
3916     SCPDEFS="$SCPDEFS -D_MSC_VER"
3917     ;;
3918 esac
3920 # multi-arch is an arch, which can execute on the host (x86 on x64), while
3921 # other-arch won't, but wouldn't break the build (x64 on x86).
3922 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
3923     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
3927 if test "$build_cpu" != "$host_cpu" -o "$DISABLE_DYNLOADING" = TRUE; then
3928     # To allow building Windows multi-arch releases without cross-tooling
3929     if test "$DISABLE_DYNLOADING" = TRUE -o \( -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH" \); then
3930         cross_compiling="yes"
3931     fi
3934 if test "$cross_compiling" = "yes"; then
3935     export CROSS_COMPILING=TRUE
3936     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
3937         ENABLE_WASM_STRIP=TRUE
3938     fi
3939     if test "$_os" = "Emscripten"; then
3940         if test "$with_main_module" = "calc"; then
3941             ENABLE_WASM_STRIP_WRITER=TRUE
3942         elif test "$with_main_module" = "writer"; then
3943             ENABLE_WASM_STRIP_CALC=TRUE
3944         fi
3945     fi
3946 else
3947     CROSS_COMPILING=
3948     BUILD_TYPE="$BUILD_TYPE NATIVE"
3950 AC_SUBST(CROSS_COMPILING)
3951 AC_SUBST(ENABLE_WASM_STRIP)
3952 AC_SUBST(ENABLE_WASM_STRIP_WRITER)
3953 AC_SUBST(ENABLE_WASM_STRIP_CALC)
3955 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
3956 # NOTE: must _not_ be used for bundled external libraries!
3957 ISYSTEM=
3958 if test "$GCC" = "yes"; then
3959     AC_MSG_CHECKING( for -isystem )
3960     save_CFLAGS=$CFLAGS
3961     CFLAGS="$CFLAGS -isystem /usr/include -Werror"
3962     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
3963     CFLAGS=$save_CFLAGS
3964     if test -n "$ISYSTEM"; then
3965         AC_MSG_RESULT(yes)
3966     else
3967         AC_MSG_RESULT(no)
3968     fi
3970 if test -z "$ISYSTEM"; then
3971     # fall back to using -I
3972     ISYSTEM=-I
3974 AC_SUBST(ISYSTEM)
3976 dnl ===================================================================
3977 dnl  Check which Visual Studio compiler is used
3978 dnl ===================================================================
3980 map_vs_year_to_version()
3982     # Return value: $vsversion
3984     unset vsversion
3986     case $1 in
3987     2019)
3988         vsversion=16;;
3989     2022)
3990         vsversion=17;;
3991     2022preview)
3992         vsversion=17.4;;
3993     *)
3994         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
3995     esac
3998 vs_versions_to_check()
4000     # Args: $1 (optional) : versions to check, in the order of preference
4001     # Return value: $vsversions
4003     unset vsversions
4005     if test -n "$1"; then
4006         map_vs_year_to_version "$1"
4007         vsversions=$vsversion
4008     else
4009         # Default version is 2019
4010         vsversions="16"
4011     fi
4014 win_get_env_from_vsvars32bat()
4016     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
4017     # Also seems to be located in another directory under the same name: vsvars32.bat
4018     # https://github.com/bazelbuild/bazel/blob/master/src/main/native/build_windows_jni.sh#L56-L57
4019     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$(cygpath -w $VC_PRODUCT_DIR)" > $WRAPPERBATCHFILEPATH
4020     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
4021     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
4022     local result
4023     if test "$build_os" = "wsl"; then
4024         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
4025     else
4026         chmod +x $WRAPPERBATCHFILEPATH
4027         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
4028     fi
4029     rm -f $WRAPPERBATCHFILEPATH
4030     printf '%s' "$result"
4033 find_ucrt()
4035     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/InstallationFolder"
4036     if test -n "$regvalue"; then
4037         PathFormat "$regvalue"
4038         UCRTSDKDIR=$formatted_path_unix
4039         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion"
4040         UCRTVERSION=$regvalue
4041         # Rest if not exist
4042         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
4043           UCRTSDKDIR=
4044         fi
4045     fi
4046     if test -z "$UCRTSDKDIR"; then
4047         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
4048         ide_env_file="${ide_env_dir}VsDevCmd.bat"
4049         if test -f "$ide_env_file"; then
4050             PathFormat "$(win_get_env_from_vsvars32bat UniversalCRTSdkDir)"
4051             UCRTSDKDIR=$formatted_path
4052             UCRTVERSION=$(win_get_env_from_vsvars32bat UCRTVersion)
4053             dnl Hack needed at least by tml:
4054             if test "$UCRTVERSION" = 10.0.15063.0 \
4055                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
4056                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
4057             then
4058                 UCRTVERSION=10.0.14393.0
4059             fi
4060         else
4061           AC_MSG_ERROR([No UCRT found])
4062         fi
4063     fi
4066 find_msvc()
4068     # Find Visual C++
4069     # Args: $1 (optional) : The VS version year
4070     # Return values: $vctest, $vcyear, $vctoolset, $vcnumwithdot, $vcbuildnumber
4072     unset vctest vctoolset vcnumwithdot vcbuildnumber
4074     vs_versions_to_check "$1"
4075     if test "$build_os" = wsl; then
4076         vswhere="$PROGRAMFILESX86"
4077         if test -z "$vswhere"; then
4078             vswhere="c:\\Program Files (x86)"
4079         fi
4080     else
4081         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
4082     fi
4083     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
4084     PathFormat "$vswhere"
4085     vswhere=$formatted_path_unix
4086     for ver in $vsversions; do
4087         vswhereoutput=`$vswhere -version "@<:@ $ver , $(expr ${ver%%.*} + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4088         if test -z "$vswhereoutput"; then
4089             vswhereoutput=`$vswhere -prerelease -version "@<:@ $ver , $(expr ${ver%%.*} + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4090         fi
4091         # Fall back to all MS products (this includes VC++ Build Tools)
4092         if ! test -n "$vswhereoutput"; then
4093             AC_MSG_CHECKING([VC++ Build Tools and similar])
4094             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr ${ver%%.*} + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4095         fi
4096         if test -n "$vswhereoutput"; then
4097             PathFormat "$vswhereoutput"
4098             vctest=$formatted_path_unix
4099             break
4100         fi
4101     done
4103     if test -n "$vctest"; then
4104         vcnumwithdot="$ver"
4105         if test "${vcnumwithdot%%.*}" = "$vcnumwithdot"; then
4106             vcnumwithdot=$vcnumwithdot.0
4107         fi
4108         case "$vcnumwithdot" in
4109         16.0)
4110             vcyear=2019
4111             vctoolset=v142
4112             ;;
4113         17.0 | 17.4)
4114             vcyear=2022
4115             vctoolset=v143
4116             ;;
4117         esac
4118         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
4120     fi
4123 test_cl_exe()
4125     AC_MSG_CHECKING([$1 compiler])
4127     CL_EXE_PATH="$2/cl.exe"
4129     if test ! -f "$CL_EXE_PATH"; then
4130         if test "$1" = "multi-arch"; then
4131             AC_MSG_WARN([no compiler (cl.exe) in $2])
4132             return 1
4133         else
4134             AC_MSG_ERROR([no compiler (cl.exe) in $2])
4135         fi
4136     fi
4138     dnl ===========================================================
4139     dnl  Check for the corresponding mspdb*.dll
4140     dnl ===========================================================
4142     # MSVC 15.0 has libraries from 14.0?
4143     mspdbnum="140"
4145     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
4146         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
4147     fi
4149     # The compiles has to find its shared libraries
4150     OLD_PATH="$PATH"
4151     TEMP_PATH=`cygpath -d "$2"`
4152     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
4154     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
4155         AC_MSG_ERROR([no compiler (cl.exe) in $2])
4156     fi
4158     PATH="$OLD_PATH"
4160     AC_MSG_RESULT([$CL_EXE_PATH])
4163 SOLARINC=
4164 MSBUILD_PATH=
4165 DEVENV=
4166 if test "$_os" = "WINNT"; then
4167     AC_MSG_CHECKING([Visual C++])
4168     find_msvc "$with_visual_studio"
4169     if test -z "$vctest"; then
4170         if test -n "$with_visual_studio"; then
4171             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
4172         else
4173             AC_MSG_ERROR([no Visual Studio installation found])
4174         fi
4175     fi
4176     AC_MSG_RESULT([])
4178     VC_PRODUCT_DIR="$vctest/VC"
4179     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
4181     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
4182     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
4183         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
4184         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
4185         if test $? -ne 0; then
4186             WIN_MULTI_ARCH=""
4187             WIN_OTHER_ARCH=""
4188         fi
4189     fi
4191     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
4192         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
4193         test_cl_exe "build" "$MSVC_BUILD_PATH"
4194     fi
4196     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
4197         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
4198         test_cl_exe "host" "$MSVC_HOST_PATH"
4199     else
4200         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
4201     fi
4203     AC_MSG_CHECKING([for short pathname of VC product directory])
4204     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
4205     AC_MSG_RESULT([$VC_PRODUCT_DIR])
4207     UCRTSDKDIR=
4208     UCRTVERSION=
4210     AC_MSG_CHECKING([for UCRT location])
4211     find_ucrt
4212     # find_ucrt errors out if it doesn't find it
4213     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
4214     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
4215     ucrtincpath_formatted=$formatted_path
4216     # SOLARINC is used for external modules and must be set too.
4217     # And no, it's not sufficient to set SOLARINC only, as configure
4218     # itself doesn't honour it.
4219     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
4220     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
4221     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
4222     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4224     AC_SUBST(UCRTSDKDIR)
4225     AC_SUBST(UCRTVERSION)
4227     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4228     # Find the proper version of MSBuild.exe to use based on the VS version
4229     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath
4230     if test -z "$regvalue" ; then
4231         if test "$WIN_BUILD_ARCH" != "x64"; then
4232             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4233         else
4234             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4235         fi
4236     fi
4237     if test -d "$regvalue" ; then
4238         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4239         AC_MSG_RESULT([$regvalue])
4240     else
4241         AC_MSG_ERROR([MSBuild.exe location not found])
4242     fi
4244     # Find the version of devenv.exe
4245     # MSVC 2017 devenv does not start properly from a DOS 8.3 path
4246     DEVENV=$(cygpath -lm "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe")
4247     DEVENV_unix=$(cygpath -u "$DEVENV")
4248     if test ! -e "$DEVENV_unix"; then
4249         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4250     fi
4252     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4253     dnl needed when building CLR code:
4254     if test -z "$MSVC_CXX"; then
4255         # This gives us a posix path with 8.3 filename restrictions
4256         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4257     fi
4259     if test -z "$CC"; then
4260         CC=$MSVC_CXX
4261         CC_BASE=`first_arg_basename "$CC"`
4262     fi
4263     if test -z "$CXX"; then
4264         CXX=$MSVC_CXX
4265         CXX_BASE=`first_arg_basename "$CXX"`
4266     fi
4268     if test -n "$CC"; then
4269         # Remove /cl.exe from CC case insensitive
4270         AC_MSG_NOTICE([found Visual C++ $vcyear])
4272         main_include_dir=`cygpath -d -m "$COMPATH/Include"`
4273         CPPFLAGS="$CPPFLAGS -I$main_include_dir"
4275         PathFormat "$COMPATH"
4276         COMPATH=`win_short_path_for_make "$formatted_path"`
4278         VCVER=$vcnumwithdot
4279         VCTOOLSET=$vctoolset
4281         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4282         # are always "better", we list them in reverse chronological order.
4284         case "$vcnumwithdot" in
4285         16.0 | 17.0 | 17.4)
4286             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4287             ;;
4288         esac
4290         # The expectation is that --with-windows-sdk should not need to be used
4291         if test -n "$with_windows_sdk"; then
4292             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4293             *" "$with_windows_sdk" "*)
4294                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4295                 ;;
4296             *)
4297                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4298                 ;;
4299             esac
4300         fi
4302         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4303         ac_objext=obj
4304         ac_exeext=exe
4306     else
4307         AC_MSG_ERROR([Visual C++ not found after all, huh])
4308     fi
4310     # ERROR if VS version < 16.5
4311     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4312     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4313         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4314         // between Visual Studio versions and _MSC_VER:
4315         #if _MSC_VER < 1925
4316         #error
4317         #endif
4318     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4320     # WARN if VS version < 16.10
4321     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.10])
4322     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4323         #if _MSC_VER < 1929
4324         #error
4325         #endif
4326     ]])],[vs2019_recommended_version=yes],[vs2019_recommended_version=no])
4328     if test $vs2019_recommended_version = yes; then
4329         AC_MSG_RESULT([yes])
4330     else
4331         AC_MSG_WARN([no])
4332         add_warning "You should have at least Visual Studio 2019 version 16.10 to avoid build problems. Otherwise, you may face problems with the build of some modules including dragonbox."
4333     fi
4335     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4336     # version of the Explorer extension (and maybe other small
4337     # bits, too) needed when installing a 32-bit LibreOffice on a
4338     # 64-bit OS. The 64-bit Explorer extension is a feature that
4339     # has been present since long in OOo. Don't confuse it with
4340     # building LibreOffice itself as 64-bit code.
4342     BUILD_X64=
4343     CXX_X64_BINARY=
4345     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4346         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4347         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4348              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4349         then
4350             BUILD_X64=TRUE
4351             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4352             AC_MSG_RESULT([found])
4353         else
4354             AC_MSG_RESULT([not found])
4355             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4356         fi
4357     elif test "$WIN_HOST_ARCH" = "x64"; then
4358         CXX_X64_BINARY=$CXX
4359     fi
4360     AC_SUBST(BUILD_X64)
4362     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4363     AC_SUBST(CXX_X64_BINARY)
4365     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4366     # needed to support TWAIN scan on both 32- and 64-bit systems
4368     case "$WIN_HOST_ARCH" in
4369     x64)
4370         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4371         if test -n "$CXX_X86_BINARY"; then
4372             BUILD_X86=TRUE
4373             AC_MSG_RESULT([preset])
4374         elif test -n "$WIN_MULTI_ARCH"; then
4375             BUILD_X86=TRUE
4376             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4377             AC_MSG_RESULT([found])
4378         else
4379             AC_MSG_RESULT([not found])
4380             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4381         fi
4382         ;;
4383     x86)
4384         BUILD_X86=TRUE
4385         CXX_X86_BINARY=$MSVC_CXX
4386         ;;
4387     esac
4388     AC_SUBST(BUILD_X86)
4389     AC_SUBST(CXX_X86_BINARY)
4391 AC_SUBST(VCVER)
4392 AC_SUBST(VCTOOLSET)
4393 AC_SUBST(DEVENV)
4394 AC_SUBST(MSVC_CXX)
4396 COM_IS_CLANG=
4397 AC_MSG_CHECKING([whether the compiler is actually Clang])
4398 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4399     #ifndef __clang__
4400     you lose
4401     #endif
4402     int foo=42;
4403     ]])],
4404     [AC_MSG_RESULT([yes])
4405      COM_IS_CLANG=TRUE],
4406     [AC_MSG_RESULT([no])])
4407 AC_SUBST(COM_IS_CLANG)
4409 CLANGVER=
4410 if test "$COM_IS_CLANG" = TRUE; then
4411     AC_MSG_CHECKING([whether Clang is new enough])
4412     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4413         #if !defined __apple_build_version__
4414         #error
4415         #endif
4416         ]])],
4417         [my_apple_clang=yes],[my_apple_clang=])
4418     if test "$my_apple_clang" = yes; then
4419         AC_MSG_RESULT([assumed yes (Apple Clang)])
4420     elif test "$_os" = Emscripten; then
4421         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4422     else
4423         if test "$_os" = WINNT; then
4424             dnl In which case, assume clang-cl:
4425             my_args="/EP /TC"
4426         else
4427             my_args="-E -P"
4428         fi
4429         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC $my_args - | sed 's/ //g'`
4430         CLANG_FULL_VERSION=`echo __clang_version__ | $CC $my_args -`
4431         CLANGVER=`echo $clang_version \
4432             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4433         if test "$CLANGVER" -ge 80001; then
4434             AC_MSG_RESULT([yes ($clang_version)])
4435         else
4436             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 8.0.1])
4437         fi
4438         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4439         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4440     fi
4443 SHOWINCLUDES_PREFIX=
4444 if test "$_os" = WINNT; then
4445     dnl We need to guess the prefix of the -showIncludes output, it can be
4446     dnl localized
4447     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4448     echo "#include <stdlib.h>" > conftest.c
4449     SHOWINCLUDES_PREFIX=`VSLANG=1033 $CC $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4450         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4451     rm -f conftest.c conftest.obj
4452     if test -z "$SHOWINCLUDES_PREFIX"; then
4453         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4454     else
4455         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4456     fi
4458 AC_SUBST(SHOWINCLUDES_PREFIX)
4461 # prefix C with ccache if needed
4463 if test "$CCACHE" != ""; then
4464     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4466     AC_LANG_PUSH([C])
4467     save_CFLAGS=$CFLAGS
4468     CFLAGS="$CFLAGS --ccache-skip -O2"
4469     # msvc does not fail on unknown options, check stdout
4470     if test "$COM" = MSC; then
4471         CFLAGS="$CFLAGS -nologo"
4472     fi
4473     save_ac_c_werror_flag=$ac_c_werror_flag
4474     ac_c_werror_flag=yes
4475     dnl an empty program will do, we're checking the compiler flags
4476     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4477                       [use_ccache=yes], [use_ccache=no])
4478     CFLAGS=$save_CFLAGS
4479     ac_c_werror_flag=$save_ac_c_werror_flag
4480     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4481         AC_MSG_RESULT([yes])
4482     else
4483         CC="$CCACHE $CC"
4484         CC_BASE="ccache $CC_BASE"
4485         AC_MSG_RESULT([no])
4486     fi
4487     AC_LANG_POP([C])
4490 # ===================================================================
4491 # check various GCC options that Clang does not support now but maybe
4492 # will somewhen in the future, check them even for GCC, so that the
4493 # flags are set
4494 # ===================================================================
4496 HAVE_GCC_GGDB2=
4497 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4498     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4499     save_CFLAGS=$CFLAGS
4500     CFLAGS="$CFLAGS -Werror -ggdb2"
4501     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4502     CFLAGS=$save_CFLAGS
4503     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4504         AC_MSG_RESULT([yes])
4505     else
4506         AC_MSG_RESULT([no])
4507     fi
4509     if test "$host_cpu" = "m68k"; then
4510         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4511         save_CFLAGS=$CFLAGS
4512         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4513         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4514         CFLAGS=$save_CFLAGS
4515         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4516             AC_MSG_RESULT([yes])
4517         else
4518             AC_MSG_ERROR([no])
4519         fi
4520     fi
4522 AC_SUBST(HAVE_GCC_GGDB2)
4524 dnl ===================================================================
4525 dnl  Test the gcc version
4526 dnl ===================================================================
4527 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4528     AC_MSG_CHECKING([the GCC version])
4529     _gcc_version=`$CC -dumpfullversion`
4530     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4531         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4532     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4534     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4536     if test "$gcc_full_version" -lt 70000; then
4537         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 7.0.0])
4538     fi
4539 else
4540     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4541     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4542     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4543     # (which reports itself as GCC 4.2.1).
4544     GCC_VERSION=
4546 AC_SUBST(GCC_VERSION)
4548 dnl Set the ENABLE_DBGUTIL variable
4549 dnl ===================================================================
4550 AC_MSG_CHECKING([whether to build with additional debug utilities])
4551 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4552     ENABLE_DBGUTIL="TRUE"
4553     # this is an extra var so it can have different default on different MSVC
4554     # versions (in case there are version specific problems with it)
4555     MSVC_USE_DEBUG_RUNTIME="TRUE"
4557     AC_MSG_RESULT([yes])
4558     # cppunit and graphite expose STL in public headers
4559     if test "$with_system_cppunit" = "yes"; then
4560         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4561     else
4562         with_system_cppunit=no
4563     fi
4564     if test "$with_system_graphite" = "yes"; then
4565         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4566     else
4567         with_system_graphite=no
4568     fi
4569     if test "$with_system_orcus" = "yes"; then
4570         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4571     else
4572         with_system_orcus=no
4573     fi
4574     if test "$with_system_libcmis" = "yes"; then
4575         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4576     else
4577         with_system_libcmis=no
4578     fi
4579     if test "$with_system_hunspell" = "yes"; then
4580         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4581     else
4582         with_system_hunspell=no
4583     fi
4584     if test "$with_system_gpgmepp" = "yes"; then
4585         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4586     else
4587         with_system_gpgmepp=no
4588     fi
4589     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4590     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4591     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4592     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4593     # of those two is using the system variant:
4594     if test "$with_system_libnumbertext" = "yes"; then
4595         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4596     else
4597         with_system_libnumbertext=no
4598     fi
4599     if test "$with_system_libwps" = "yes"; then
4600         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4601     else
4602         with_system_libwps=no
4603     fi
4604 else
4605     ENABLE_DBGUTIL=""
4606     MSVC_USE_DEBUG_RUNTIME=""
4607     AC_MSG_RESULT([no])
4609 AC_SUBST(ENABLE_DBGUTIL)
4610 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4612 dnl Set the ENABLE_DEBUG variable.
4613 dnl ===================================================================
4614 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4615     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4617 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4618     if test -z "$libo_fuzzed_enable_debug"; then
4619         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4620     else
4621         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4622         enable_debug=yes
4623     fi
4626 AC_MSG_CHECKING([whether to do a debug build])
4627 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4628     ENABLE_DEBUG="TRUE"
4629     if test -n "$ENABLE_DBGUTIL" ; then
4630         AC_MSG_RESULT([yes (dbgutil)])
4631     else
4632         AC_MSG_RESULT([yes])
4633     fi
4634 else
4635     ENABLE_DEBUG=""
4636     AC_MSG_RESULT([no])
4638 AC_SUBST(ENABLE_DEBUG)
4640 dnl ===================================================================
4641 dnl Select the linker to use (gold/lld/ld.bfd/mold).
4642 dnl This is done only after compiler checks (need to know if Clang is
4643 dnl used, for different defaults) and after checking if a debug build
4644 dnl is wanted (non-debug builds get the default linker if not explicitly
4645 dnl specified otherwise).
4646 dnl All checks for linker features/options should come after this.
4647 dnl ===================================================================
4648 check_use_ld()
4650     use_ld=-fuse-ld=${1%%:*}
4651     use_ld_path=${1#*:}
4652     if test "$use_ld_path" != "$1"; then
4653         if test "$COM_IS_CLANG" = TRUE; then
4654             if test "$CLANGVER" -ge 120000; then
4655                 use_ld="${use_ld} --ld-path=${use_ld_path}"
4656             else
4657                 use_ld="-fuse-ld=${use_ld_path}"
4658             fi
4659         else
4660             # I tried to use gcc's '-B<path>' and a directory + symlink setup in
4661             # $BUILDDIR, but libtool always filtered-out that option, so gcc wouldn't
4662             # pickup the alternative linker, when called by libtool for linking.
4663             # For mold, one can use LD_PRELOAD=/usr/lib/mold/mold-wrapper.so instead.
4664             AC_MSG_ERROR([A linker path is just supported with clang, because of libtool's -B filtering!])
4665         fi
4666     fi
4667     use_ld_fail_if_error=$2
4668     use_ld_ok=
4669     AC_MSG_CHECKING([for $use_ld linker support])
4670     use_ld_ldflags_save="$LDFLAGS"
4671     LDFLAGS="$LDFLAGS $use_ld"
4672     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4673 #include <stdio.h>
4674         ],[
4675 printf ("hello world\n");
4676         ])], USE_LD=$use_ld, [])
4677     if test -n "$USE_LD"; then
4678         AC_MSG_RESULT( yes )
4679         use_ld_ok=yes
4680     else
4681         if test -n "$use_ld_fail_if_error"; then
4682             AC_MSG_ERROR( no )
4683         else
4684             AC_MSG_RESULT( no )
4685         fi
4686     fi
4687     if test -n "$use_ld_ok"; then
4688         dnl keep the value of LDFLAGS
4689         return 0
4690     fi
4691     LDFLAGS="$use_ld_ldflags_save"
4692     return 1
4694 USE_LD=
4695 if test "$enable_ld" != "no"; then
4696     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4697         if test -n "$enable_ld"; then
4698             check_use_ld "$enable_ld" fail_if_error
4699         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4700             dnl non-debug builds default to the default linker
4701             true
4702         elif test -n "$COM_IS_CLANG"; then
4703             check_use_ld lld
4704             if test $? -ne 0; then
4705                 check_use_ld gold
4706                 if test $? -ne 0; then
4707                     check_use_ld mold
4708                 fi
4709             fi
4710         else
4711             # For gcc first try gold, new versions also support lld/mold.
4712             check_use_ld gold
4713             if test $? -ne 0; then
4714                 check_use_ld lld
4715                 if test $? -ne 0; then
4716                     check_use_ld mold
4717                 fi
4718             fi
4719         fi
4720         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4721         rm conftest.out
4722         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD|^mold)')
4723         if test -z "$ld_used"; then
4724             ld_used="unknown"
4725         fi
4726         AC_MSG_CHECKING([for linker that is used])
4727         AC_MSG_RESULT([$ld_used])
4728         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4729             if echo "$ld_used" | grep -q "^GNU ld"; then
4730                 AC_MSG_WARN([The default GNU linker is slow, consider using LLD, mold or the GNU gold linker.])
4731                 add_warning "The default GNU linker is slow, consider using LLD, mold or the GNU gold linker."
4732             fi
4733         fi
4734     else
4735         if test "$enable_ld" = "yes"; then
4736             AC_MSG_ERROR([--enable-ld not supported])
4737         fi
4738     fi
4740 AC_SUBST(USE_LD)
4741 AC_SUBST(LD)
4743 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4744 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4745     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4746     bsymbolic_functions_ldflags_save=$LDFLAGS
4747     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4748     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4749 #include <stdio.h>
4750         ],[
4751 printf ("hello world\n");
4752         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4753     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4754         AC_MSG_RESULT( found )
4755     else
4756         AC_MSG_RESULT( not found )
4757     fi
4758     LDFLAGS=$bsymbolic_functions_ldflags_save
4760 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4762 LD_GC_SECTIONS=
4763 if test "$GCC" = "yes"; then
4764     for flag in "--gc-sections" "-dead_strip"; do
4765         AC_MSG_CHECKING([for $flag linker support])
4766         ldflags_save=$LDFLAGS
4767         LDFLAGS="$LDFLAGS -Wl,$flag"
4768         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4769 #include <stdio.h>
4770             ],[
4771 printf ("hello world\n");
4772             ])],[
4773             LD_GC_SECTIONS="-Wl,$flag"
4774             AC_MSG_RESULT( found )
4775             ], [
4776             AC_MSG_RESULT( not found )
4777             ])
4778         LDFLAGS=$ldflags_save
4779         if test -n "$LD_GC_SECTIONS"; then
4780             break
4781         fi
4782     done
4784 AC_SUBST(LD_GC_SECTIONS)
4786 HAVE_EXTERNAL_DWARF=
4787 if test "$enable_split_debug" != no; then
4788     use_split_debug=
4789     if test -n "$ENABLE_LTO"; then
4790         : # Inherently incompatible, since no debug info is created while compiling, GCC complains.
4791     elif test "$enable_split_debug" = yes; then
4792         use_split_debug=1
4793     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4794     elif test "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4795         use_split_debug=1
4796     fi
4797     if test -n "$use_split_debug"; then
4798         if test "$_os" = "Emscripten"; then
4799             TEST_CC_FLAG=-gseparate-dwarf
4800         else
4801             TEST_CC_FLAG=-gsplit-dwarf
4802         fi
4803         AC_MSG_CHECKING([whether $CC_BASE supports $TEST_CC_FLAG])
4804         save_CFLAGS=$CFLAGS
4805         CFLAGS="$CFLAGS -Werror $TEST_CC_FLAG"
4806         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_EXTERNAL_DWARF=TRUE ],[])
4807         CFLAGS=$save_CFLAGS
4808         if test "$HAVE_EXTERNAL_DWARF" = "TRUE"; then
4809             AC_MSG_RESULT([yes])
4810         else
4811             if test "$enable_split_debug" = yes; then
4812                 AC_MSG_ERROR([no])
4813             else
4814                 AC_MSG_RESULT([no])
4815             fi
4816         fi
4817     fi
4818     if test -z "$HAVE_EXTERNAL_DWARF" -a "$test_split_debug" = "yes" -a -n "$use_split_debug"; then
4819         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4820         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4821     fi
4823 AC_SUBST(HAVE_EXTERNAL_DWARF)
4825 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4826 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4827 save_CFLAGS=$CFLAGS
4828 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4829 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4830 CFLAGS=$save_CFLAGS
4831 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4832     AC_MSG_RESULT([yes])
4833 else
4834     AC_MSG_RESULT([no])
4836 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4838 ENABLE_GDB_INDEX=
4839 if test "$enable_gdb_index" != "no"; then
4840     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4841     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4842         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4843         save_CFLAGS=$CFLAGS
4844         CFLAGS="$CFLAGS -Werror -g -ggnu-pubnames"
4845         have_ggnu_pubnames=
4846         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4847         if test "$have_ggnu_pubnames" != "TRUE"; then
4848             if test "$enable_gdb_index" = "yes"; then
4849                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4850             else
4851                 AC_MSG_RESULT( no )
4852             fi
4853         else
4854             AC_MSG_RESULT( yes )
4855             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4856             ldflags_save=$LDFLAGS
4857             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4858             AC_LINK_IFELSE([AC_LANG_PROGRAM([
4859 #include <stdio.h>
4860                 ],[
4861 printf ("hello world\n");
4862                 ])], ENABLE_GDB_INDEX=TRUE, [])
4863             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
4864                 AC_MSG_RESULT( yes )
4865             else
4866                 if test "$enable_gdb_index" = "yes"; then
4867                     AC_MSG_ERROR( no )
4868                 else
4869                     AC_MSG_RESULT( no )
4870                 fi
4871             fi
4872             LDFLAGS=$ldflags_save
4873         fi
4874         CFLAGS=$save_CFLAGS
4875         fi
4876     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4877         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
4878         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
4879     fi
4881 AC_SUBST(ENABLE_GDB_INDEX)
4883 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
4884     enable_sal_log=yes
4886 if test "$enable_sal_log" = yes; then
4887     ENABLE_SAL_LOG=TRUE
4889 AC_SUBST(ENABLE_SAL_LOG)
4891 dnl Check for enable symbols option
4892 dnl ===================================================================
4893 AC_MSG_CHECKING([whether to generate debug information])
4894 if test -z "$enable_symbols"; then
4895     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4896         enable_symbols=yes
4897     else
4898         enable_symbols=no
4899     fi
4901 if test "$enable_symbols" = yes; then
4902     ENABLE_SYMBOLS_FOR=all
4903     AC_MSG_RESULT([yes])
4904 elif test "$enable_symbols" = no; then
4905     ENABLE_SYMBOLS_FOR=
4906     AC_MSG_RESULT([no])
4907 else
4908     # Selective debuginfo.
4909     ENABLE_SYMBOLS_FOR="$enable_symbols"
4910     AC_MSG_RESULT([for "$enable_symbols"])
4912 AC_SUBST(ENABLE_SYMBOLS_FOR)
4913 if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then
4914     # Building on Android with full symbols: without enough memory the linker never finishes currently.
4915     AC_MSG_CHECKING([whether enough memory is available for linking])
4916     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
4917     # Check for 15GB, as Linux reports a bit less than the physical memory size.
4918     if test -n "$mem_size" -a $mem_size -lt 15728640; then
4919         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
4920     else
4921         AC_MSG_RESULT([yes])
4922     fi
4925 ENABLE_OPTIMIZED=
4926 ENABLE_OPTIMIZED_DEBUG=
4927 AC_MSG_CHECKING([whether to compile with optimization flags])
4928 if test -z "$enable_optimized"; then
4929     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4930         enable_optimized=no
4931     else
4932         enable_optimized=yes
4933     fi
4935 if test "$enable_optimized" = yes; then
4936     ENABLE_OPTIMIZED=TRUE
4937     AC_MSG_RESULT([yes])
4938 elif test "$enable_optimized" = debug; then
4939     ENABLE_OPTIMIZED_DEBUG=TRUE
4940     AC_MSG_RESULT([yes (debug)])
4941     HAVE_GCC_OG=
4942     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4943         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
4944         save_CFLAGS=$CFLAGS
4945         CFLAGS="$CFLAGS -Werror -Og"
4946         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
4947         CFLAGS=$save_CFLAGS
4948         if test "$HAVE_GCC_OG" = "TRUE"; then
4949             AC_MSG_RESULT([yes])
4950         else
4951             AC_MSG_RESULT([no])
4952         fi
4953     fi
4954     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
4955         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
4956     fi
4957 else
4958     AC_MSG_RESULT([no])
4960 AC_SUBST(ENABLE_OPTIMIZED)
4961 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
4964 # determine CPUNAME, OS, ...
4966 case "$host_os" in
4968 aix*)
4969     COM=GCC
4970     CPUNAME=POWERPC
4971     OS=AIX
4972     RTL_OS=AIX
4973     RTL_ARCH=PowerPC
4974     PLATFORMID=aix_powerpc
4975     P_SEP=:
4976     ;;
4978 cygwin*|wsl*)
4979     # Already handled
4980     ;;
4982 darwin*)
4983     COM=GCC
4984     OS=MACOSX
4985     RTL_OS=MacOSX
4986     P_SEP=:
4988     case "$host_cpu" in
4989     aarch64|arm64)
4990         if test "$enable_ios_simulator" = "yes"; then
4991             OS=iOS
4992         else
4993             CPUNAME=AARCH64
4994             RTL_ARCH=AARCH64
4995             PLATFORMID=macosx_aarch64
4996         fi
4997         ;;
4998     x86_64)
4999         if test "$enable_ios_simulator" = "yes"; then
5000             OS=iOS
5001         fi
5002         CPUNAME=X86_64
5003         RTL_ARCH=X86_64
5004         PLATFORMID=macosx_x86_64
5005         ;;
5006     *)
5007         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5008         ;;
5009     esac
5010     ;;
5012 ios*)
5013     COM=GCC
5014     OS=iOS
5015     RTL_OS=iOS
5016     P_SEP=:
5018     case "$host_cpu" in
5019     aarch64|arm64)
5020         if test "$enable_ios_simulator" = "yes"; then
5021             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
5022         fi
5023         ;;
5024     *)
5025         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5026         ;;
5027     esac
5028     CPUNAME=AARCH64
5029     RTL_ARCH=AARCH64
5030     PLATFORMID=ios_arm64
5031     ;;
5033 dragonfly*)
5034     COM=GCC
5035     OS=DRAGONFLY
5036     RTL_OS=DragonFly
5037     P_SEP=:
5039     case "$host_cpu" in
5040     i*86)
5041         CPUNAME=INTEL
5042         RTL_ARCH=x86
5043         PLATFORMID=dragonfly_x86
5044         ;;
5045     x86_64)
5046         CPUNAME=X86_64
5047         RTL_ARCH=X86_64
5048         PLATFORMID=dragonfly_x86_64
5049         ;;
5050     *)
5051         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5052         ;;
5053     esac
5054     ;;
5056 freebsd*)
5057     COM=GCC
5058     RTL_OS=FreeBSD
5059     OS=FREEBSD
5060     P_SEP=:
5062     case "$host_cpu" in
5063     aarch64)
5064         CPUNAME=AARCH64
5065         PLATFORMID=freebsd_aarch64
5066         RTL_ARCH=AARCH64
5067         ;;
5068     i*86)
5069         CPUNAME=INTEL
5070         RTL_ARCH=x86
5071         PLATFORMID=freebsd_x86
5072         ;;
5073     x86_64|amd64)
5074         CPUNAME=X86_64
5075         RTL_ARCH=X86_64
5076         PLATFORMID=freebsd_x86_64
5077         ;;
5078     powerpc64)
5079         CPUNAME=POWERPC64
5080         RTL_ARCH=PowerPC_64
5081         PLATFORMID=freebsd_powerpc64
5082         ;;
5083     powerpc|powerpcspe)
5084         CPUNAME=POWERPC
5085         RTL_ARCH=PowerPC
5086         PLATFORMID=freebsd_powerpc
5087         ;;
5088     *)
5089         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5090         ;;
5091     esac
5092     ;;
5094 haiku*)
5095     COM=GCC
5096     GUIBASE=haiku
5097     RTL_OS=Haiku
5098     OS=HAIKU
5099     P_SEP=:
5101     case "$host_cpu" in
5102     i*86)
5103         CPUNAME=INTEL
5104         RTL_ARCH=x86
5105         PLATFORMID=haiku_x86
5106         ;;
5107     x86_64|amd64)
5108         CPUNAME=X86_64
5109         RTL_ARCH=X86_64
5110         PLATFORMID=haiku_x86_64
5111         ;;
5112     *)
5113         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5114         ;;
5115     esac
5116     ;;
5118 kfreebsd*)
5119     COM=GCC
5120     OS=LINUX
5121     RTL_OS=kFreeBSD
5122     P_SEP=:
5124     case "$host_cpu" in
5126     i*86)
5127         CPUNAME=INTEL
5128         RTL_ARCH=x86
5129         PLATFORMID=kfreebsd_x86
5130         ;;
5131     x86_64)
5132         CPUNAME=X86_64
5133         RTL_ARCH=X86_64
5134         PLATFORMID=kfreebsd_x86_64
5135         ;;
5136     *)
5137         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5138         ;;
5139     esac
5140     ;;
5142 linux-gnu*|linux-musl*)
5143     COM=GCC
5144     OS=LINUX
5145     RTL_OS=Linux
5146     P_SEP=:
5148     case "$host_cpu" in
5150     aarch64)
5151         CPUNAME=AARCH64
5152         PLATFORMID=linux_aarch64
5153         RTL_ARCH=AARCH64
5154         EPM_FLAGS="-a arm64"
5155         ;;
5156     alpha)
5157         CPUNAME=AXP
5158         RTL_ARCH=ALPHA
5159         PLATFORMID=linux_alpha
5160         ;;
5161     arm*)
5162         CPUNAME=ARM
5163         EPM_FLAGS="-a arm"
5164         RTL_ARCH=ARM_EABI
5165         PLATFORMID=linux_arm_eabi
5166         case "$host_cpu" in
5167         arm*-linux)
5168             RTL_ARCH=ARM_OABI
5169             PLATFORMID=linux_arm_oabi
5170             ;;
5171         esac
5172         ;;
5173     hppa)
5174         CPUNAME=HPPA
5175         RTL_ARCH=HPPA
5176         EPM_FLAGS="-a hppa"
5177         PLATFORMID=linux_hppa
5178         ;;
5179     i*86)
5180         CPUNAME=INTEL
5181         RTL_ARCH=x86
5182         PLATFORMID=linux_x86
5183         ;;
5184     ia64)
5185         CPUNAME=IA64
5186         RTL_ARCH=IA64
5187         PLATFORMID=linux_ia64
5188         ;;
5189     mips)
5190         CPUNAME=MIPS
5191         RTL_ARCH=MIPS_EB
5192         EPM_FLAGS="-a mips"
5193         PLATFORMID=linux_mips_eb
5194         ;;
5195     mips64)
5196         CPUNAME=MIPS64
5197         RTL_ARCH=MIPS64_EB
5198         EPM_FLAGS="-a mips64"
5199         PLATFORMID=linux_mips64_eb
5200         ;;
5201     mips64el)
5202         CPUNAME=MIPS64
5203         RTL_ARCH=MIPS64_EL
5204         EPM_FLAGS="-a mips64el"
5205         PLATFORMID=linux_mips64_el
5206         ;;
5207     mipsel)
5208         CPUNAME=MIPS
5209         RTL_ARCH=MIPS_EL
5210         EPM_FLAGS="-a mipsel"
5211         PLATFORMID=linux_mips_el
5212         ;;
5213     riscv64)
5214         CPUNAME=RISCV64
5215         RTL_ARCH=RISCV64
5216         EPM_FLAGS="-a riscv64"
5217         PLATFORMID=linux_riscv64
5218         ;;
5219     m68k)
5220         CPUNAME=M68K
5221         RTL_ARCH=M68K
5222         PLATFORMID=linux_m68k
5223         ;;
5224     powerpc)
5225         CPUNAME=POWERPC
5226         RTL_ARCH=PowerPC
5227         PLATFORMID=linux_powerpc
5228         ;;
5229     powerpc64)
5230         CPUNAME=POWERPC64
5231         RTL_ARCH=PowerPC_64
5232         PLATFORMID=linux_powerpc64
5233         ;;
5234     powerpc64le)
5235         CPUNAME=POWERPC64
5236         RTL_ARCH=PowerPC_64_LE
5237         PLATFORMID=linux_powerpc64_le
5238         ;;
5239     sparc)
5240         CPUNAME=SPARC
5241         RTL_ARCH=SPARC
5242         PLATFORMID=linux_sparc
5243         ;;
5244     sparc64)
5245         CPUNAME=SPARC64
5246         RTL_ARCH=SPARC64
5247         PLATFORMID=linux_sparc64
5248         ;;
5249     s390)
5250         CPUNAME=S390
5251         RTL_ARCH=S390
5252         PLATFORMID=linux_s390
5253         ;;
5254     s390x)
5255         CPUNAME=S390X
5256         RTL_ARCH=S390x
5257         PLATFORMID=linux_s390x
5258         ;;
5259     x86_64)
5260         CPUNAME=X86_64
5261         RTL_ARCH=X86_64
5262         PLATFORMID=linux_x86_64
5263         ;;
5264     loongarch64)
5265         CPUNAME=LOONGARCH64
5266         RTL_ARCH=LOONGARCH64
5267         PLATFORMID=linux_loongarch64
5268         ;;
5269     *)
5270         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5271         ;;
5272     esac
5273     ;;
5275 linux-android*)
5276     COM=GCC
5277     OS=ANDROID
5278     RTL_OS=Android
5279     P_SEP=:
5281     case "$host_cpu" in
5283     arm|armel)
5284         CPUNAME=ARM
5285         RTL_ARCH=ARM_EABI
5286         PLATFORMID=android_arm_eabi
5287         ;;
5288     aarch64)
5289         CPUNAME=AARCH64
5290         RTL_ARCH=AARCH64
5291         PLATFORMID=android_aarch64
5292         ;;
5293     i*86)
5294         CPUNAME=INTEL
5295         RTL_ARCH=x86
5296         PLATFORMID=android_x86
5297         ;;
5298     x86_64)
5299         CPUNAME=X86_64
5300         RTL_ARCH=X86_64
5301         PLATFORMID=android_x86_64
5302         ;;
5303     *)
5304         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5305         ;;
5306     esac
5307     ;;
5309 *netbsd*)
5310     COM=GCC
5311     OS=NETBSD
5312     RTL_OS=NetBSD
5313     P_SEP=:
5315     case "$host_cpu" in
5316     i*86)
5317         CPUNAME=INTEL
5318         RTL_ARCH=x86
5319         PLATFORMID=netbsd_x86
5320         ;;
5321     powerpc)
5322         CPUNAME=POWERPC
5323         RTL_ARCH=PowerPC
5324         PLATFORMID=netbsd_powerpc
5325         ;;
5326     sparc)
5327         CPUNAME=SPARC
5328         RTL_ARCH=SPARC
5329         PLATFORMID=netbsd_sparc
5330         ;;
5331     x86_64)
5332         CPUNAME=X86_64
5333         RTL_ARCH=X86_64
5334         PLATFORMID=netbsd_x86_64
5335         ;;
5336     *)
5337         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5338         ;;
5339     esac
5340     ;;
5342 openbsd*)
5343     COM=GCC
5344     OS=OPENBSD
5345     RTL_OS=OpenBSD
5346     P_SEP=:
5348     case "$host_cpu" in
5349     i*86)
5350         CPUNAME=INTEL
5351         RTL_ARCH=x86
5352         PLATFORMID=openbsd_x86
5353         ;;
5354     x86_64)
5355         CPUNAME=X86_64
5356         RTL_ARCH=X86_64
5357         PLATFORMID=openbsd_x86_64
5358         ;;
5359     *)
5360         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5361         ;;
5362     esac
5363     SOLARINC="$SOLARINC -I/usr/local/include"
5364     ;;
5366 solaris*)
5367     COM=GCC
5368     OS=SOLARIS
5369     RTL_OS=Solaris
5370     P_SEP=:
5372     case "$host_cpu" in
5373     i*86)
5374         CPUNAME=INTEL
5375         RTL_ARCH=x86
5376         PLATFORMID=solaris_x86
5377         ;;
5378     sparc)
5379         CPUNAME=SPARC
5380         RTL_ARCH=SPARC
5381         PLATFORMID=solaris_sparc
5382         ;;
5383     sparc64)
5384         CPUNAME=SPARC64
5385         RTL_ARCH=SPARC64
5386         PLATFORMID=solaris_sparc64
5387         ;;
5388     *)
5389         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5390         ;;
5391     esac
5392     SOLARINC="$SOLARINC -I/usr/local/include"
5393     ;;
5395 emscripten*)
5396     COM=GCC
5397     OS=EMSCRIPTEN
5398     RTL_OS=Emscripten
5399     P_SEP=:
5401     case "$host_cpu" in
5402     wasm32|wasm64)
5403         ;;
5404     *)
5405         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5406         ;;
5407     esac
5408     CPUNAME=INTEL
5409     RTL_ARCH=x86
5410     PLATFORMID=linux_x86
5411     ;;
5414     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5415     ;;
5416 esac
5418 DISABLE_GUI=""
5419 if test "$enable_gui" = "no"; then
5420     if test "$using_x11" != yes; then
5421         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5422     fi
5423     USING_X11=
5424     DISABLE_GUI=TRUE
5425     test_epoxy=no
5426 else
5427     AC_DEFINE(HAVE_FEATURE_UI)
5429 AC_SUBST(DISABLE_GUI)
5431 if test "$with_x" = "no"; then
5432     USING_X11=
5435 if test -z "$USING_X11" -a "$enable_qt5" = "yes" -a "$enable_gen" = "yes"; then
5436     AC_MSG_ERROR([Can't select gen VCL plugin, if --without-x is used!])
5439 if test "$using_x11" = yes; then
5440     if test "$USING_X11" = TRUE; then
5441         AC_DEFINE(USING_X11)
5442     else
5443         disable_x11_tests
5444         if test "$DISABLE_DYNLOADING" = TRUE; then
5445             test_qt5=yes
5446         fi
5447     fi
5448 else
5449     if test "$USING_X11" = TRUE; then
5450         AC_MSG_ERROR([Platform doesn't support X11 (\$using_x11), but \$USING_X11 is set!])
5451     fi
5454 WORKDIR="${BUILDDIR}/workdir"
5455 INSTDIR="${BUILDDIR}/instdir"
5456 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5457 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5458 AC_SUBST(COM)
5459 AC_SUBST(CPUNAME)
5460 AC_SUBST(RTL_OS)
5461 AC_SUBST(RTL_ARCH)
5462 AC_SUBST(EPM_FLAGS)
5463 AC_SUBST(USING_X11)
5464 AC_SUBST([INSTDIR])
5465 AC_SUBST([INSTROOT])
5466 AC_SUBST([INSTROOTBASE])
5467 AC_SUBST(OS)
5468 AC_SUBST(P_SEP)
5469 AC_SUBST(WORKDIR)
5470 AC_SUBST(PLATFORMID)
5471 AC_SUBST(WINDOWS_X64)
5472 AC_DEFINE_UNQUOTED(SDKDIR, "$INSTDIR/$SDKDIRNAME")
5473 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5475 if test "$OS" = WNT -a "$COM" = MSC; then
5476     case "$CPUNAME" in
5477     INTEL) CPPU_ENV=msci ;;
5478     X86_64) CPPU_ENV=mscx ;;
5479     AARCH64) CPPU_ENV=msca ;;
5480     *)
5481         AC_MSG_ERROR([Unknown \$CPUNAME '$CPUNAME' for $OS / $COM"])
5482         ;;
5483     esac
5484 else
5485     CPPU_ENV=gcc3
5487 AC_SUBST(CPPU_ENV)
5489 dnl ===================================================================
5490 dnl Test which package format to use
5491 dnl ===================================================================
5492 AC_MSG_CHECKING([which package format to use])
5493 if test -n "$with_package_format" -a "$with_package_format" != no; then
5494     for i in $with_package_format; do
5495         case "$i" in
5496         aix | bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5497             ;;
5498         *)
5499             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5500 aix - AIX software distribution
5501 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5502 deb - Debian software distribution
5503 pkg - Solaris software distribution
5504 rpm - RedHat software distribution
5506 LibreOffice additionally supports:
5507 archive - .tar.gz or .zip
5508 dmg - macOS .dmg
5509 installed - installation tree
5510 msi - Windows .msi
5511         ])
5512             ;;
5513         esac
5514     done
5515     # fakeroot is needed to ensure correct file ownerships/permissions
5516     # inside deb packages and tar archives created on Linux and Solaris.
5517     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5518         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5519         if test "$FAKEROOT" = "no"; then
5520             AC_MSG_ERROR(
5521                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5522         fi
5523     fi
5524     PKGFORMAT="$with_package_format"
5525     AC_MSG_RESULT([$PKGFORMAT])
5526 else
5527     PKGFORMAT=
5528     AC_MSG_RESULT([none])
5530 AC_SUBST(PKGFORMAT)
5532 dnl ===================================================================
5533 dnl handle help related options
5535 dnl If you change help related options, please update README.help
5536 dnl ===================================================================
5538 ENABLE_HTMLHELP=
5539 HELP_OMINDEX_PAGE=
5540 HELP_ONLINE=
5541 WITH_HELPPACKS=
5543 AC_MSG_CHECKING([which help to build])
5544 if test -n "$with_help" -a "$with_help" != "no"; then
5545     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5546     BUILD_TYPE="$BUILD_TYPE HELP"
5547     case "$with_help" in
5548     "html")
5549         ENABLE_HTMLHELP=TRUE
5550         WITH_HELPPACKS=TRUE
5551         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5552         AC_MSG_RESULT([HTML (local)])
5553         ;;
5554     "online")
5555         ENABLE_HTMLHELP=TRUE
5556         HELP_ONLINE=TRUE
5557         AC_MSG_RESULT([HTML (online)])
5558         ;;
5559     yes)
5560         WITH_HELPPACKS=TRUE
5561         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5562         AC_MSG_RESULT([XML (local)])
5563         ;;
5564     *)
5565         AC_MSG_ERROR([Unknown --with-help=$with_help])
5566         ;;
5567     esac
5568 else
5569     AC_MSG_RESULT([no])
5572 AC_MSG_CHECKING([if we need to build the help index tooling])
5573 if test \( "$with_help" = yes -o "$enable_extension_integration" != no \) -a -z "$DISABLE_DYNLOADING"; then
5574     BUILD_TYPE="$BUILD_TYPE HELPTOOLS"
5575     test_clucene=yes
5576     AC_MSG_RESULT([yes])
5577 else
5578     AC_MSG_RESULT([no])
5581 AC_MSG_CHECKING([whether to enable xapian-omega support for online help])
5582 if test -n "$with_omindex" -a "$with_omindex" != "no"; then
5583     if test "$HELP_ONLINE" != TRUE; then
5584         AC_MSG_ERROR([Can't build xapian-omega index without --help=online])
5585     fi
5586     case "$with_omindex" in
5587     "server")
5588         HELP_OMINDEX_PAGE=TRUE
5589         AC_MSG_RESULT([SERVER])
5590         ;;
5591     "noxap")
5592         AC_MSG_RESULT([NOXAP])
5593         ;;
5594     *)
5595         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5596         ;;
5597     esac
5598 else
5599     AC_MSG_RESULT([no])
5602 AC_MSG_CHECKING([whether to include the XML-help support])
5603 if test "$enable_xmlhelp" = yes; then
5604     BUILD_TYPE="$BUILD_TYPE XMLHELP"
5605     test_clucene=yes
5606     AC_DEFINE(HAVE_FEATURE_XMLHELP)
5607     AC_MSG_RESULT([yes])
5608 else
5609     if test "$with_help" = yes; then
5610         add_warning "Building the XML help, but LO with disabled xmlhelp support. Generated help can't be accessed from this LO build!"
5611     fi
5612     AC_MSG_RESULT([no])
5615 dnl Test whether to integrate helppacks into the product's installer
5616 AC_MSG_CHECKING([for helppack integration])
5617 if test -z "$WITH_HELPPACKS" -o "$with_helppack_integration" = no; then
5618     AC_MSG_RESULT([no integration])
5619 else
5620     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
5621     AC_MSG_RESULT([integration])
5624 AC_SUBST([ENABLE_HTMLHELP])
5625 AC_SUBST([HELP_OMINDEX_PAGE])
5626 AC_SUBST([HELP_ONLINE])
5627 # WITH_HELPPACKS is used only in configure
5629 dnl ===================================================================
5630 dnl Set up a different compiler to produce tools to run on the build
5631 dnl machine when doing cross-compilation
5632 dnl ===================================================================
5634 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5635 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5636 if test "$cross_compiling" = "yes"; then
5637     AC_MSG_CHECKING([for BUILD platform configuration])
5638     echo
5639     rm -rf CONF-FOR-BUILD config_build.mk
5640     mkdir CONF-FOR-BUILD
5641     # Here must be listed all files needed when running the configure script. In particular, also
5642     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5643     # keep them in the same order as there.
5644     (cd $SRC_ROOT && tar cf - \
5645         config.guess \
5646         bin/get_config_variables \
5647         solenv/bin/getcompver.awk \
5648         solenv/inc/langlist.mk \
5649         download.lst \
5650         config_host.mk.in \
5651         config_host_lang.mk.in \
5652         Makefile.in \
5653         lo.xcent.in \
5654         bin/bffvalidator.sh.in \
5655         bin/odfvalidator.sh.in \
5656         bin/officeotron.sh.in \
5657         hardened_runtime.xcent.in \
5658         instsetoo_native/util/openoffice.lst.in \
5659         config_host/*.in \
5660         sysui/desktop/macosx/Info.plist.in \
5661         .vscode/vs-code-template.code-workspace.in \
5662         solenv/lockfile/autoconf.h.in \
5663         ) \
5664     | (cd CONF-FOR-BUILD && tar xf -)
5665     cp configure CONF-FOR-BUILD
5666     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5667     (
5668     unset COM USING_X11 OS CPUNAME
5669     unset CC CXX SYSBASE CFLAGS
5670     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5671     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5672     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5673     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5674     if test -n "$CC_FOR_BUILD"; then
5675         export CC="$CC_FOR_BUILD"
5676         CC_BASE=`first_arg_basename "$CC"`
5677     fi
5678     if test -n "$CXX_FOR_BUILD"; then
5679         export CXX="$CXX_FOR_BUILD"
5680         CXX_BASE=`first_arg_basename "$CXX"`
5681     fi
5682     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5683     cd CONF-FOR-BUILD
5685     # Handle host configuration, which affects the cross-toolset too
5686     sub_conf_opts=""
5687     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5688     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5689     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5690     # While we don't need scripting support, we don't have a PYTHON_FOR_BUILD Java equivalent, so must enable scripting for Java
5691     if test -n "$ENABLE_JAVA"; then
5692         case "$_os" in
5693         Android)
5694             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5695             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5696             ;;
5697         *)
5698             if test -z "$with_jdk_home"; then
5699                 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.])
5700             fi
5701             ;;
5702         esac
5703     else
5704         sub_conf_opts="$sub_conf_opts --without-java"
5705     fi
5706     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5707     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no --disable-database-connectivity"
5708     test -n "$with_help" -a "$with_help" != "no" && sub_conf_opts="$sub_conf_opts --with-help=$with_help"
5709     test "$enable_extensions" = yes || sub_conf_opts="$sub_conf_opts --disable-extensions"
5710     test "${enable_ld+set}" = set -a "$build_cpu" = "$host_cpu" && sub_conf_opts="$sub_conf_opts --enable-ld=${enable_ld}"
5711     test "${enable_pch+set}" = set && sub_conf_opts="$sub_conf_opts --enable-pch=${enable_pch}"
5712     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5713     test "${with_system_lockfile+set}" = set && sub_conf_opts="$sub_conf_opts --with-system-lockfile=${with_system_lockfile}"
5714     test "${enable_fuzzers}" = yes && sub_conf_opts="$sub_conf_opts --without-system-libxml"
5715     if test "$_os" = "Emscripten"; then
5716         sub_conf_opts="$sub_conf_opts --without-system-libxml --without-system-fontconfig --without-system-freetype --without-system-zlib"
5717         if test "${with_main_module+set}" = set; then
5718             sub_conf_opts="$sub_conf_opts --with-main-module=${with_main_module}"
5719         else
5720             sub_conf_opts="$sub_conf_opts --with-main-module=writer"
5721         fi
5722     fi
5724     # Don't bother having configure look for stuff not needed for the build platform anyway
5725     # WARNING: any option with an argument containing spaces must be handled separately (see --with-theme)
5726     sub_conf_defaults=" \
5727         --build="$build_alias" \
5728         --disable-cairo-canvas \
5729         --disable-cups \
5730         --disable-customtarget-components \
5731         --disable-firebird-sdbc \
5732         --disable-gpgmepp \
5733         --disable-gstreamer-1-0 \
5734         --disable-gtk3 \
5735         --disable-gtk4 \
5736         --disable-libcmis \
5737         --disable-mariadb-sdbc \
5738         --disable-nss \
5739         --disable-online-update \
5740         --disable-opencl \
5741         --disable-pdfimport \
5742         --disable-postgresql-sdbc \
5743         --disable-skia \
5744         --disable-xmlhelp \
5745         --enable-dynamic-loading \
5746         --enable-icecream="$enable_icecream" \
5747         --without-doxygen \
5748         --without-webdav \
5749         --without-x \
5750         --with-tls=openssl \
5752     # single quotes added for better readability in case of spaces
5753     echo "    Running CONF-FOR-BUILD/configure" \
5754         $sub_conf_defaults \
5755         --with-parallelism="'$with_parallelism'" \
5756         --with-theme="'$with_theme'" \
5757         --with-vendor="'$with_vendor'" \
5758         $sub_conf_opts \
5759         $with_build_platform_configure_options \
5760         --srcdir=$srcdir
5762     ./configure \
5763         $sub_conf_defaults \
5764         --with-parallelism="$with_parallelism" \
5765         --with-theme="$with_theme" \
5766         "--with-vendor=$with_vendor" \
5767         $sub_conf_opts \
5768         $with_build_platform_configure_options \
5769         --srcdir=$srcdir \
5770         2>&1 | sed -e 's/^/    /'
5771     if test [${PIPESTATUS[0]}] -ne 0; then
5772         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5773     fi
5775     # filter permitted build targets
5776     PERMITTED_BUILD_TARGETS="
5777         AVMEDIA
5778         BOOST
5779         CAIRO
5780         CLUCENE
5781         CURL
5782         DBCONNECTIVITY
5783         DESKTOP
5784         DRAGONBOX
5785         DYNLOADING
5786         EPOXY
5787         EXPAT
5788         GLM
5789         GRAPHITE
5790         HARFBUZZ
5791         HELPTOOLS
5792         ICU
5793         LCMS2
5794         LIBJPEG_TURBO
5795         LIBLANGTAG
5796         LibO
5797         LIBFFI
5798         LIBPN
5799         LIBTIFF
5800         LIBWEBP
5801         LIBXML2
5802         LIBXSLT
5803         MDDS
5804         NATIVE
5805         OPENSSL
5806         ORCUS
5807         PYTHON
5808         SCRIPTING
5809         ZLIB
5811     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5812     # newlined lists, to use grep as a filter
5813     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5814     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5815     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5816     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5818     cp config_host.mk ../config_build.mk
5819     cp config_host_lang.mk ../config_build_lang.mk
5820     mv config.log ../config.Build.log
5821     mkdir -p ../config_build
5822     mv config_host/*.h ../config_build
5823     test -f "$WARNINGS_FILE" && mv "$WARNINGS_FILE" "../$WARNINGS_FILE_FOR_BUILD"
5825     # all these will get a _FOR_BUILD postfix
5826     DIRECT_FOR_BUILD_SETTINGS="
5827         CC
5828         CPPU_ENV
5829         CXX
5830         ILIB
5831         JAVA_HOME
5832         JAVAIFLAGS
5833         JDK
5834         JDK_SECURITYMANAGER_DISALLOWED
5835         LIBO_BIN_FOLDER
5836         LIBO_LIB_FOLDER
5837         LIBO_URE_LIB_FOLDER
5838         LIBO_URE_MISC_FOLDER
5839         OS
5840         SDKDIRNAME
5841         SYSTEM_LIBXML
5842         SYSTEM_LIBXSLT
5844     # these overwrite host config with build config
5845     OVERWRITING_SETTINGS="
5846         ANT
5847         ANT_HOME
5848         ANT_LIB
5849         JAVA_CLASSPATH_NOT_SET
5850         JAVA_SOURCE_VER
5851         JAVA_TARGET_VER
5852         JAVACFLAGS
5853         JAVACOMPILER
5854         JAVADOC
5855         JAVADOCISGJDOC
5856         LOCKFILE
5857         SYSTEM_GENBRK
5858         SYSTEM_GENCCODE
5859         SYSTEM_GENCMN
5861     # these need some special handling
5862     EXTRA_HANDLED_SETTINGS="
5863         INSTDIR
5864         INSTROOT
5865         PATH
5866         WORKDIR
5868     OLD_PATH=$PATH
5869     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
5870     BUILD_PATH=$PATH
5871     PATH=$OLD_PATH
5873     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
5874     echo "$line" >>build-config
5876     for V in $DIRECT_FOR_BUILD_SETTINGS; do
5877         VV='$'$V
5878         VV=`eval "echo $VV"`
5879         if test -n "$VV"; then
5880             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
5881             echo "$line" >>build-config
5882         fi
5883     done
5885     for V in $OVERWRITING_SETTINGS; do
5886         VV='$'$V
5887         VV=`eval "echo $VV"`
5888         if test -n "$VV"; then
5889             line=${V}='${'${V}:-$VV'}'
5890             echo "$line" >>build-config
5891         fi
5892     done
5894     for V in INSTDIR INSTROOT WORKDIR; do
5895         VV='$'$V
5896         VV=`eval "echo $VV"`
5897         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
5898         if test -n "$VV"; then
5899             line="${V}_FOR_BUILD='$VV'"
5900             echo "$line" >>build-config
5901         fi
5902     done
5904     )
5905     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
5906     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])
5907     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
5908              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
5910     eval `cat CONF-FOR-BUILD/build-config`
5912     AC_MSG_RESULT([checking for BUILD platform configuration... done])
5914     rm -rf CONF-FOR-BUILD
5915 else
5916     OS_FOR_BUILD="$OS"
5917     CC_FOR_BUILD="$CC"
5918     CPPU_ENV_FOR_BUILD="$CPPU_ENV"
5919     CXX_FOR_BUILD="$CXX"
5920     INSTDIR_FOR_BUILD="$INSTDIR"
5921     INSTROOT_FOR_BUILD="$INSTROOT"
5922     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
5923     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
5924     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
5925     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
5926     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
5927     WORKDIR_FOR_BUILD="$WORKDIR"
5929 AC_SUBST(OS_FOR_BUILD)
5930 AC_SUBST(INSTDIR_FOR_BUILD)
5931 AC_SUBST(INSTROOT_FOR_BUILD)
5932 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
5933 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
5934 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
5935 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
5936 AC_SUBST(SDKDIRNAME_FOR_BUILD)
5937 AC_SUBST(WORKDIR_FOR_BUILD)
5938 AC_SUBST(CC_FOR_BUILD)
5939 AC_SUBST(CXX_FOR_BUILD)
5940 AC_SUBST(CPPU_ENV_FOR_BUILD)
5942 dnl ===================================================================
5943 dnl Check for lockfile deps
5944 dnl ===================================================================
5945 if test -z "$CROSS_COMPILING"; then
5946     test -n "$LOCKFILE" -a "${with_system_lockfile+set}" != set && with_system_lockfile="$LOCKFILE"
5947     test "${with_system_lockfile+set}" = set || with_system_lockfile=no
5948     AC_MSG_CHECKING([which lockfile binary to use])
5949     case "$with_system_lockfile" in
5950     yes)
5951         AC_MSG_RESULT([external])
5952         AC_PATH_PROGS([LOCKFILE],[dotlockfile lockfile])
5953         ;;
5954     no)
5955         AC_MSG_RESULT([internal])
5956         ;;
5957     *)
5958         if test -x "$with_system_lockfile"; then
5959             LOCKFILE="$with_system_lockfile"
5960         else
5961             AC_MSG_ERROR(['$with_system_lockfile' is not executable.])
5962         fi
5963         AC_MSG_RESULT([$with_system_lockfile])
5964         ;;
5965     esac
5968 if test -n "$LOCKFILE" -a "$DISABLE_DYNLOADING" = TRUE; then
5969     add_warning "The default system lockfile has increasing poll intervals up to 60s, so linking executables may be delayed."
5972 AC_CHECK_HEADERS([getopt.h paths.h sys/param.h])
5973 AC_CHECK_FUNCS([utime utimes])
5974 AC_SUBST(LOCKFILE)
5976 dnl ===================================================================
5977 dnl Check for syslog header
5978 dnl ===================================================================
5979 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
5981 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
5982 dnl ===================================================================
5983 AC_MSG_CHECKING([whether to turn warnings to errors])
5984 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
5985     ENABLE_WERROR="TRUE"
5986     PYTHONWARNINGS="error"
5987     AC_MSG_RESULT([yes])
5988 else
5989     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
5990         ENABLE_WERROR="TRUE"
5991         PYTHONWARNINGS="error"
5992         AC_MSG_RESULT([yes])
5993     else
5994         AC_MSG_RESULT([no])
5995     fi
5997 AC_SUBST(ENABLE_WERROR)
5998 AC_SUBST(PYTHONWARNINGS)
6000 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
6001 dnl ===================================================================
6002 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
6003 if test -z "$enable_assert_always_abort"; then
6004    if test "$ENABLE_DEBUG" = TRUE; then
6005        enable_assert_always_abort=yes
6006    else
6007        enable_assert_always_abort=no
6008    fi
6010 if test "$enable_assert_always_abort" = "yes"; then
6011     ASSERT_ALWAYS_ABORT="TRUE"
6012     AC_MSG_RESULT([yes])
6013 else
6014     ASSERT_ALWAYS_ABORT="FALSE"
6015     AC_MSG_RESULT([no])
6017 AC_SUBST(ASSERT_ALWAYS_ABORT)
6019 # Determine whether to use ooenv for the instdir installation
6020 # ===================================================================
6021 if test $_os != "WINNT" -a $_os != "Darwin"; then
6022     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
6023     if test -z "$enable_ooenv"; then
6024         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
6025             enable_ooenv=yes
6026         else
6027             enable_ooenv=no
6028         fi
6029     fi
6030     if test "$enable_ooenv" = "no"; then
6031         AC_MSG_RESULT([no])
6032     else
6033         ENABLE_OOENV="TRUE"
6034         AC_MSG_RESULT([yes])
6035     fi
6037 AC_SUBST(ENABLE_OOENV)
6039 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
6040     if test "$enable_qt5" = "no"; then
6041         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
6042     else
6043         enable_qt5=yes
6044     fi
6047 AC_MSG_CHECKING([whether to build the pagein binaries for oosplash])
6048 if test "${enable_pagein}" != no -a -z "$DISABLE_DYNLOADING"; then
6049     AC_MSG_RESULT([yes])
6050     ENABLE_PAGEIN=TRUE
6051     AC_DEFINE(HAVE_FEATURE_PAGEIN)
6052 else
6053     AC_MSG_RESULT([no])
6055 AC_SUBST(ENABLE_PAGEIN)
6057 dnl ===================================================================
6058 dnl check for cups support
6059 dnl ===================================================================
6061 AC_MSG_CHECKING([whether to enable CUPS support])
6062 if test "$test_cups" = yes -a "$enable_cups" != no; then
6063     ENABLE_CUPS=TRUE
6064     AC_MSG_RESULT([yes])
6066     AC_MSG_CHECKING([whether cups support is present])
6067     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
6068     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
6069     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
6070         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
6071     fi
6072 else
6073     AC_MSG_RESULT([no])
6076 AC_SUBST(ENABLE_CUPS)
6078 libo_CHECK_SYSTEM_MODULE([fontconfig],[FONTCONFIG],[fontconfig >= 2.4.1],,system,TRUE)
6080 dnl whether to find & fetch external tarballs?
6081 dnl ===================================================================
6082 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
6083    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6084        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
6085    else
6086        TARFILE_LOCATION="$LODE_HOME/ext_tar"
6087    fi
6089 if test -z "$TARFILE_LOCATION"; then
6090     if test -d "$SRC_ROOT/src" ; then
6091         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
6092         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
6093     fi
6094     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
6095 else
6096     AbsolutePath "$TARFILE_LOCATION"
6097     PathFormat "${absolute_path}"
6098     TARFILE_LOCATION="${formatted_path_unix}"
6100 AC_SUBST(TARFILE_LOCATION)
6102 AC_MSG_CHECKING([whether we want to fetch tarballs])
6103 if test "$enable_fetch_external" != "no"; then
6104     if test "$with_all_tarballs" = "yes"; then
6105         AC_MSG_RESULT([yes, all of them])
6106         DO_FETCH_TARBALLS="ALL"
6107     else
6108         AC_MSG_RESULT([yes, if we use them])
6109         DO_FETCH_TARBALLS="TRUE"
6110     fi
6111 else
6112     AC_MSG_RESULT([no])
6113     DO_FETCH_TARBALLS=
6115 AC_SUBST(DO_FETCH_TARBALLS)
6117 dnl Test whether to include MySpell dictionaries
6118 dnl ===================================================================
6119 AC_MSG_CHECKING([whether to include MySpell dictionaries])
6120 if test "$with_myspell_dicts" = "yes"; then
6121     AC_MSG_RESULT([yes])
6122     WITH_MYSPELL_DICTS=TRUE
6123     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
6124     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
6125 else
6126     AC_MSG_RESULT([no])
6127     WITH_MYSPELL_DICTS=
6129 AC_SUBST(WITH_MYSPELL_DICTS)
6131 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
6132 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
6133     if test "$with_system_dicts" = yes; then
6134         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
6135     fi
6136     with_system_dicts=no
6139 AC_MSG_CHECKING([whether to use dicts from external paths])
6140 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
6141     AC_MSG_RESULT([yes])
6142     SYSTEM_DICTS=TRUE
6143     AC_MSG_CHECKING([for spelling dictionary directory])
6144     if test -n "$with_external_dict_dir"; then
6145         DICT_SYSTEM_DIR=file://$with_external_dict_dir
6146     else
6147         DICT_SYSTEM_DIR=file:///usr/share/hunspell
6148         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
6149             DICT_SYSTEM_DIR=file:///usr/share/myspell
6150         fi
6151     fi
6152     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
6153     AC_MSG_CHECKING([for hyphenation patterns directory])
6154     if test -n "$with_external_hyph_dir"; then
6155         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
6156     else
6157         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
6158     fi
6159     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
6160     AC_MSG_CHECKING([for thesaurus directory])
6161     if test -n "$with_external_thes_dir"; then
6162         THES_SYSTEM_DIR=file://$with_external_thes_dir
6163     else
6164         THES_SYSTEM_DIR=file:///usr/share/mythes
6165     fi
6166     AC_MSG_RESULT([$THES_SYSTEM_DIR])
6167 else
6168     AC_MSG_RESULT([no])
6169     SYSTEM_DICTS=
6171 AC_SUBST(SYSTEM_DICTS)
6172 AC_SUBST(DICT_SYSTEM_DIR)
6173 AC_SUBST(HYPH_SYSTEM_DIR)
6174 AC_SUBST(THES_SYSTEM_DIR)
6176 dnl ===================================================================
6177 dnl Precompiled headers.
6178 ENABLE_PCH=""
6179 AC_MSG_CHECKING([whether to enable pch feature])
6180 if test -z "$enable_pch"; then
6181     if test "$_os" = "WINNT"; then
6182         # Enabled by default on Windows.
6183         enable_pch=yes
6184         # never use sccache on auto-enabled PCH builds, except if requested explicitly
6185         if test -z "$enable_ccache" -a "$SCCACHE"; then
6186             CCACHE=""
6187         fi
6188     else
6189         enable_pch=no
6190     fi
6192 if test "$enable_pch" != no -a "$_os" = Emscripten -a "$ENABLE_WASM_EXCEPTIONS" = TRUE; then
6193     AC_MSG_ERROR([PCH currently isn't supported for Emscripten with native EH (nEH) because of missing Sj/Lj support with nEH in clang.])
6195 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
6196     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
6198 if test "$enable_pch" = "system"; then
6199     ENABLE_PCH="1"
6200     AC_MSG_RESULT([yes (system headers)])
6201 elif test "$enable_pch" = "base"; then
6202     ENABLE_PCH="2"
6203     AC_MSG_RESULT([yes (system and base headers)])
6204 elif test "$enable_pch" = "normal"; then
6205     ENABLE_PCH="3"
6206     AC_MSG_RESULT([yes (normal)])
6207 elif test "$enable_pch" = "full"; then
6208     ENABLE_PCH="4"
6209     AC_MSG_RESULT([yes (full)])
6210 elif test "$enable_pch" = "yes"; then
6211     # Pick a suitable default.
6212     if test "$GCC" = "yes"; then
6213         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
6214         # while making the PCHs larger and rebuilds more likely.
6215         ENABLE_PCH="2"
6216         AC_MSG_RESULT([yes (system and base headers)])
6217     else
6218         # With MSVC the highest level makes a significant difference,
6219         # and it was the default when there used to be no PCH levels.
6220         ENABLE_PCH="4"
6221         AC_MSG_RESULT([yes (full)])
6222     fi
6223 elif test "$enable_pch" = "no"; then
6224     AC_MSG_RESULT([no])
6225 else
6226     AC_MSG_ERROR([Unknown value for --enable-pch])
6228 AC_SUBST(ENABLE_PCH)
6229 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
6230 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
6231     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
6232     if test "$CCACHE_BIN" != "not found"; then
6233         AC_MSG_CHECKING([ccache version])
6234         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
6235         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6236         AC_MSG_RESULT([$CCACHE_VERSION])
6237         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
6238         if test "$CCACHE_NUMVER" -gt "030701"; then
6239             AC_MSG_RESULT([yes])
6240         else
6241             AC_MSG_RESULT([no (not newer than 3.7.1)])
6242             CCACHE_DEPEND_MODE=
6243         fi
6244     fi
6247 PCH_INSTANTIATE_TEMPLATES=
6248 if test -n "$ENABLE_PCH"; then
6249     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
6250     save_CFLAGS=$CFLAGS
6251     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
6252     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
6253     CFLAGS=$save_CFLAGS
6254     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
6255         AC_MSG_RESULT(yes)
6256     else
6257         AC_MSG_RESULT(no)
6258     fi
6260 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
6262 BUILDING_PCH_WITH_OBJ=
6263 if test -n "$ENABLE_PCH"; then
6264     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
6265     save_CFLAGS=$CFLAGS
6266     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
6267     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
6268     CFLAGS=$save_CFLAGS
6269     if test -n "$BUILDING_PCH_WITH_OBJ"; then
6270         AC_MSG_RESULT(yes)
6271     else
6272         AC_MSG_RESULT(no)
6273     fi
6275 AC_SUBST(BUILDING_PCH_WITH_OBJ)
6277 PCH_CODEGEN=
6278 PCH_NO_CODEGEN=
6279 fpch_prefix=
6280 if test "$COM" = MSC; then
6281     fpch_prefix="-Xclang "
6283 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6284     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-codegen])
6285     save_CFLAGS=$CFLAGS
6286     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-codegen"
6287     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6288         [ PCH_CODEGEN="${fpch_prefix}-fpch-codegen" ],[])
6289     CFLAGS=$save_CFLAGS
6290     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fno-pch-codegen"
6291     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6292         [ PCH_NO_CODEGEN="${fpch_prefix}-fno-pch-codegen" ],[])
6293     CFLAGS=$save_CFLAGS
6294     if test -n "$PCH_CODEGEN"; then
6295         AC_MSG_RESULT(yes)
6296     else
6297         AC_MSG_RESULT(no)
6298     fi
6300 AC_SUBST(PCH_CODEGEN)
6301 AC_SUBST(PCH_NO_CODEGEN)
6302 PCH_DEBUGINFO=
6303 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6304     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-debuginfo])
6305     save_CFLAGS=$CFLAGS
6306     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-debuginfo"
6307     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="${fpch_prefix}-fpch-debuginfo" ],[])
6308     CFLAGS=$save_CFLAGS
6309     if test -n "$PCH_DEBUGINFO"; then
6310         AC_MSG_RESULT(yes)
6311     else
6312         AC_MSG_RESULT(no)
6313     fi
6315 AC_SUBST(PCH_DEBUGINFO)
6317 TAB=`printf '\t'`
6319 AC_MSG_CHECKING([the GNU Make version])
6320 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
6321 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6322 if test "$_make_longver" -ge "040000"; then
6323     AC_MSG_RESULT([$GNUMAKE $_make_version])
6324 else
6325     AC_MSG_ERROR([failed ($GNUMAKE version >= 4.0 needed)])
6328 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6329 STALE_MAKE=
6330 if test "$_make_ver_check" = ""; then
6331    STALE_MAKE=TRUE
6334 HAVE_LD_HASH_STYLE=FALSE
6335 WITH_LINKER_HASH_STYLE=
6336 AC_MSG_CHECKING([for --hash-style gcc linker support])
6337 if test "$GCC" = "yes"; then
6338     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6339         hash_styles="gnu sysv"
6340     elif test "$with_linker_hash_style" = "no"; then
6341         hash_styles=
6342     else
6343         hash_styles="$with_linker_hash_style"
6344     fi
6346     for hash_style in $hash_styles; do
6347         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6348         hash_style_ldflags_save=$LDFLAGS
6349         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6351         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6352             [
6353 #include <stdio.h>
6354             ],[
6355 printf ("");
6356             ])],
6357             [
6358                   HAVE_LD_HASH_STYLE=TRUE
6359                   WITH_LINKER_HASH_STYLE=$hash_style
6360             ],
6361             [HAVE_LD_HASH_STYLE=FALSE],
6362             [HAVE_LD_HASH_STYLE=FALSE])
6363         LDFLAGS=$hash_style_ldflags_save
6364     done
6366     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6367         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6368     else
6369         AC_MSG_RESULT( no )
6370     fi
6371     LDFLAGS=$hash_style_ldflags_save
6372 else
6373     AC_MSG_RESULT( no )
6375 AC_SUBST(HAVE_LD_HASH_STYLE)
6376 AC_SUBST(WITH_LINKER_HASH_STYLE)
6378 dnl ===================================================================
6379 dnl Check whether there's a Perl version available.
6380 dnl ===================================================================
6381 if test -z "$with_perl_home"; then
6382     AC_PATH_PROG(PERL, perl)
6383 else
6384     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6385     _perl_path="$with_perl_home/bin/perl"
6386     if test -x "$_perl_path"; then
6387         PERL=$_perl_path
6388     else
6389         AC_MSG_ERROR([$_perl_path not found])
6390     fi
6393 dnl ===================================================================
6394 dnl Testing for Perl version 5 or greater.
6395 dnl $] is the Perl version variable, it is returned as an integer
6396 dnl ===================================================================
6397 if test "$PERL"; then
6398     AC_MSG_CHECKING([the Perl version])
6399     ${PERL} -e "exit($]);"
6400     _perl_version=$?
6401     if test "$_perl_version" -lt 5; then
6402         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6403     fi
6404     AC_MSG_RESULT([Perl $_perl_version])
6405 else
6406     AC_MSG_ERROR([Perl not found, install Perl 5])
6409 dnl ===================================================================
6410 dnl Testing for required Perl modules
6411 dnl ===================================================================
6413 AC_MSG_CHECKING([for required Perl modules])
6414 perl_use_string="use Cwd ; use Digest::MD5"
6415 if test "$_os" = "WINNT"; then
6416     if test -n "$PKGFORMAT"; then
6417         for i in $PKGFORMAT; do
6418             case "$i" in
6419             msi)
6420                 # for getting fonts versions to use in MSI
6421                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6422                 ;;
6423             esac
6424         done
6425     fi
6427 if test "$with_system_hsqldb" = "yes"; then
6428     perl_use_string="$perl_use_string ; use Archive::Zip"
6430 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6431     # OpenSSL needs that to build
6432     perl_use_string="$perl_use_string ; use FindBin"
6434 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6435     AC_MSG_RESULT([all modules found])
6436 else
6437     AC_MSG_RESULT([failed to find some modules])
6438     # Find out which modules are missing.
6439     for i in $perl_use_string; do
6440         if test "$i" != "use" -a "$i" != ";"; then
6441             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6442                 missing_perl_modules="$missing_perl_modules $i"
6443             fi
6444         fi
6445     done
6446     AC_MSG_ERROR([
6447     The missing Perl modules are: $missing_perl_modules
6448     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6451 dnl ===================================================================
6452 dnl Check for pkg-config
6453 dnl ===================================================================
6454 if test "$_os" != "WINNT"; then
6455     PKG_PROG_PKG_CONFIG
6457 AC_SUBST(PKG_CONFIG)
6458 AC_SUBST(PKG_CONFIG_PATH)
6459 AC_SUBST(PKG_CONFIG_LIBDIR)
6461 if test "$_os" != "WINNT"; then
6463     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6464     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6465     # explicitly. Or put /path/to/compiler in PATH yourself.
6467     toolprefix=gcc
6468     if test "$COM_IS_CLANG" = "TRUE"; then
6469         toolprefix=llvm
6470     fi
6471     AC_CHECK_TOOLS(AR,$toolprefix-ar ar)
6472     AC_CHECK_TOOLS(NM,$toolprefix-nm nm)
6473     AC_CHECK_TOOLS(RANLIB,$toolprefix-ranlib ranlib)
6474     AC_CHECK_TOOLS(OBJDUMP,$toolprefix-objdump objdump)
6475     AC_CHECK_TOOLS(READELF,$toolprefix-readelf readelf)
6476     AC_CHECK_TOOLS(STRIP,$toolprefix-strip strip)
6478 AC_SUBST(AR)
6479 AC_SUBST(NM)
6480 AC_SUBST(OBJDUMP)
6481 AC_SUBST(RANLIB)
6482 AC_SUBST(READELF)
6483 AC_SUBST(STRIP)
6485 dnl ===================================================================
6486 dnl pkg-config checks on macOS
6487 dnl ===================================================================
6489 if test $_os = Darwin; then
6490     AC_MSG_CHECKING([for bogus pkg-config])
6491     if test -n "$PKG_CONFIG"; then
6492         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6493             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6494         else
6495             if test "$enable_bogus_pkg_config" = "yes"; then
6496                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6497             else
6498                 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.])
6499             fi
6500         fi
6501     else
6502         AC_MSG_RESULT([no, good])
6503     fi
6506 find_csc()
6508     # Return value: $csctest
6510     unset csctest
6512     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client/InstallPath"
6513     if test -n "$regvalue"; then
6514         csctest=$regvalue
6515         return
6516     fi
6519 find_al()
6521     # Return value: $altest
6523     unset altest
6525     # We need this check to detect 4.6.1 or above.
6526     for ver in 4.8.1 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6527         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools/InstallationFolder"
6528         PathFormat "$regvalue"
6529         if test -n "$regvalue" -a \( -f "$formatted_path_unix/al.exe" -o -f "$formatted_path_unix/bin/al.exe" \); then
6530             altest=$regvalue
6531             return
6532         fi
6533     done
6535     reg_list_values_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows"
6536     for x in $reglist; do
6537         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools/InstallationFolder"
6538         PathFormat "$regvalue"
6539         if test -n "$regvalue" -a \( -f "$formatted_path_unix/al.exe" -o -f "$formatted_path_unix/bin/al.exe" \); then
6540             altest=$regvalue
6541             return
6542         fi
6543     done
6546 find_dotnetsdk46()
6548     unset frametest
6550     for ver in 4.8.1 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6; do
6551         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder"
6552         if test -n "$regvalue"; then
6553             frametest=$regvalue
6554             return
6555         fi
6556     done
6559 find_winsdk_version()
6561     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6562     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6564     unset winsdktest winsdkbinsubdir winsdklibsubdir
6566     case "$1" in
6567     8.0|8.0A)
6568         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
6569         if test -n "$regvalue"; then
6570             winsdktest=$regvalue
6571             winsdklibsubdir=win8
6572             return
6573         fi
6574         ;;
6575     8.1|8.1A)
6576         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot81"
6577         if test -n "$regvalue"; then
6578             winsdktest=$regvalue
6579             winsdklibsubdir=winv6.3
6580             return
6581         fi
6582         ;;
6583     10.0)
6584         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/InstallationFolder"
6585         if test -n "$regvalue"; then
6586             winsdktest=$regvalue
6587             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion"
6588             if test -n "$regvalue"; then
6589                 winsdkbinsubdir="$regvalue".0
6590                 winsdklibsubdir=$winsdkbinsubdir
6591                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6592                 local tmppath_unix=$(cygpath -u "$tmppath")
6593                 # test exist the SDK path
6594                 if test -d "$tmppath_unix"; then
6595                    # when path is convertible to a short path then path is okay
6596                    cygpath -d "$tmppath" >/dev/null 2>&1
6597                    if test $? -ne 0; then
6598                       AC_MSG_ERROR([Windows SDK doesn't have a 8.3 name, see NtfsDisable8dot3NameCreation])
6599                    fi
6600                 else
6601                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6602                 fi
6603             fi
6604             return
6605         fi
6606         ;;
6607     esac
6610 find_winsdk()
6612     # Return value: From find_winsdk_version
6614     unset winsdktest
6616     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6617         find_winsdk_version $ver
6618         if test -n "$winsdktest"; then
6619             return
6620         fi
6621     done
6624 find_msms()
6626     # Return value: $msmdir
6627     local version="$1"
6629     AC_MSG_CHECKING([for MSVC $version merge modules directory])
6630     local my_msm_file="Microsoft_VC${version}_CRT_x86.msm"
6631     local my_msm_dir
6633     echo "$as_me:$LINENO: searching for $my_msm_file" >&5
6635     msmdir=
6636     case "$VCVER" in
6637     16.0 | 17.0 | 17.4)
6638         for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6639             my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6640             echo "$as_me:$LINENO: looking for $my_msm_dir${my_msm_file}])" >&5
6641             if test -e "$my_msm_dir${my_msm_file}"; then
6642                 msmdir=$my_msm_dir
6643             fi
6644         done
6645         ;;
6646     esac
6648     if test -n "$msmdir"; then
6649         msmdir=`cygpath -m "$msmdir"`
6650         AC_MSG_RESULT([$msmdir])
6651     else
6652         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6653             AC_MSG_FAILURE([not found])
6654         else
6655             AC_MSG_WARN([not found (check config.log)])
6656             add_warning "MSM ${my_msm_file} not found"
6657         fi
6658     fi
6661 find_msvc_x64_dlls()
6663     # Return value: $msvcdllpath, $msvcdlls
6665     AC_MSG_CHECKING([for MSVC x64 DLL path])
6667     dnl Order crtver in increasing order. Then check the directories returned by
6668     dnl ls in an inner loop; assuming they are also ordered in increasing order,
6669     dnl the result will be the highest CRT version found in the highest directory.
6671     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6672     case "$VCVER" in
6673     16.0 | 17.0 | 17.4)
6674         for crtver in 141 142 143; do
6675             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6676                 echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT" >&5
6677                 if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"; then
6678                     msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"
6679                 fi
6680             done
6681         done
6682         ;;
6683     esac
6684     AC_MSG_RESULT([$msvcdllpath])
6685     AC_MSG_CHECKING([for MSVC x64 DLLs])
6686     msvcdlls="msvcp140.dll vcruntime140.dll"
6687     for dll in $msvcdlls; do
6688         if ! test -f "$msvcdllpath/$dll"; then
6689             AC_MSG_FAILURE([missing $dll])
6690         fi
6691     done
6692     AC_MSG_RESULT([found all ($msvcdlls)])
6695 dnl =========================================
6696 dnl Check for the Windows  SDK.
6697 dnl =========================================
6698 if test "$_os" = "WINNT"; then
6699     AC_MSG_CHECKING([for Windows SDK])
6700     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6701         find_winsdk
6702         WINDOWS_SDK_HOME=$winsdktest
6704         # normalize if found
6705         if test -n "$WINDOWS_SDK_HOME"; then
6706             WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
6707             WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
6708         fi
6710         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6711     fi
6713     if test -n "$WINDOWS_SDK_HOME"; then
6714         # Remove a possible trailing backslash
6715         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6717         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6718              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6719              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6720             have_windows_sdk_headers=yes
6721         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6722              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6723              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6724             have_windows_sdk_headers=yes
6725         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6726              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6727              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6728             have_windows_sdk_headers=yes
6729         else
6730             have_windows_sdk_headers=no
6731         fi
6733         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6734             have_windows_sdk_libs=yes
6735         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6736             have_windows_sdk_libs=yes
6737         else
6738             have_windows_sdk_libs=no
6739         fi
6741         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6742             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6743 the  Windows SDK are installed.])
6744         fi
6745     fi
6747     if test -z "$WINDOWS_SDK_HOME"; then
6748         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6749     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6750         WINDOWS_SDK_VERSION=80
6751         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6752     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6753         WINDOWS_SDK_VERSION=81
6754         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6755     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6756         WINDOWS_SDK_VERSION=10
6757         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6758     else
6759         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6760     fi
6761     PathFormat "$WINDOWS_SDK_HOME"
6762     WINDOWS_SDK_HOME="$formatted_path"
6763     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6764     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6765         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6766         if test -d "$WINDOWS_SDK_HOME/include/um"; then
6767             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6768         elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then
6769             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6770         fi
6771     fi
6773     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6774     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6775     dnl but not in v8.0), so allow this to be overridden with a
6776     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6777     dnl and configuration error if no WiLangId.vbs is found would arguably be
6778     dnl better, but I do not know under which conditions exactly it is needed by
6779     dnl msiglobal.pm:
6780     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6781         WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6782         WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6783         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6784             WINDOWS_SDK_WILANGID="${WINDOWS_SDK_HOME}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6785             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6786         fi
6787         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6788             WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6789             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6790         fi
6791         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6792             WINDOWS_SDK_WILANGID=$(cygpath -sm "C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs")
6793             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6794         fi
6795     fi
6796     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6797         if test -n "$with_package_format" -a "$with_package_format" != no; then
6798             for i in "$with_package_format"; do
6799                 if test "$i" = "msi"; then
6800                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6801                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6802                     fi
6803                 fi
6804             done
6805         fi
6806     fi
6808 AC_SUBST(WINDOWS_SDK_HOME)
6809 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6810 AC_SUBST(WINDOWS_SDK_VERSION)
6811 AC_SUBST(WINDOWS_SDK_WILANGID)
6813 if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6814     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6815     dnl dir, it also determines that dir's path w/o an arch segment if any,
6816     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6817     AC_MSG_CHECKING([for midl.exe])
6819     find_winsdk
6820     PathFormat "$winsdktest"
6821     winsdktest_unix="$formatted_path_unix"
6823     if test -n "$winsdkbinsubdir" \
6824         -a -f "$winsdktest_unix/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6825     then
6826         MIDL_PATH=$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6827         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME_unix/Bin/$winsdkbinsubdir
6828     elif test -f "$winsdktest_unix/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6829         MIDL_PATH=$winsdktest/Bin/$WIN_BUILD_ARCH
6830         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME_unix/Bin
6831     elif test -f "$winsdktest_unix/Bin/midl.exe"; then
6832         MIDL_PATH=$winsdktest/Bin
6833         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME_unix/Bin
6834     fi
6835     PathFormat "$MIDL_PATH"
6836     if test ! -f "$formatted_path_unix/midl.exe"; then
6837         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6838     else
6839         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6840     fi
6842     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6843     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6845     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6846          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6847          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6848          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6849     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6850          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6851          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6852          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
6853     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
6854          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
6855          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6856          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
6857     else
6858         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
6859     fi
6861     dnl Check csc.exe
6862     AC_MSG_CHECKING([for csc.exe])
6863     find_csc
6864     PathFormat "$csctest"
6865     csctest_unix="$formatted_path_unix"
6866     if test -f "$csctest_unix/csc.exe"; then
6867         CSC_PATH="$csctest"
6868     fi
6869     if test ! -f "$csctest_unix/csc.exe"; then
6870         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
6871     else
6872         AC_MSG_RESULT([$CSC_PATH/csc.exe])
6873     fi
6875     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
6877     dnl Check al.exe
6878     AC_MSG_CHECKING([for al.exe])
6879     if test -n "$winsdkbinsubdir" \
6880         -a -f "$winsdktest_unix/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
6881     then
6882         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
6883     elif test -f "$winsdktest_unix/Bin/$WIN_BUILD_ARCH/al.exe"; then
6884         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
6885     elif test -f "$winsdktest_unix/Bin/al.exe"; then
6886         AL_PATH="$winsdktest/Bin"
6887     fi
6889     if test -z "$AL_PATH"; then
6890         find_al
6891         PathFormat "$altest"
6892         altest_unix="$formatted_path_unix"
6893         if test -f "$altest_unix/bin/al.exe"; then
6894             AL_PATH="$altest/bin"
6895         elif test -f "$altest_unix/al.exe"; then
6896             AL_PATH="$altest"
6897         fi
6898     fi
6899     PathFormat "$AL_PATH"
6900     if test ! -f "$formatted_path_unix/al.exe"; then
6901         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
6902     else
6903         AC_MSG_RESULT([$AL_PATH/al.exe])
6904     fi
6906     AL_PATH=`win_short_path_for_make "$AL_PATH"`
6908     dnl Check mscoree.lib / .NET Framework dir
6909     AC_MSG_CHECKING(.NET Framework)
6910     find_dotnetsdk46
6911     PathFormat "$frametest"
6912     frametest="$formatted_path_unix"
6913     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6914         DOTNET_FRAMEWORK_HOME="$frametest"
6915     else
6916         if test -f "$winsdktest_unix/lib/mscoree.lib" -o -f "$winsdktest_unix/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6917             DOTNET_FRAMEWORK_HOME="$winsdktest"
6918         fi
6919     fi
6920     PathFormat "$DOTNET_FRAMEWORK_HOME"
6921     if test ! -f "$formatted_path_unix/lib/mscoree.lib" -a ! -f "$formatted_path_unix/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib" -a ! -f "$formatted_path_unix/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6922         AC_MSG_ERROR([mscoree.lib not found])
6923     fi
6924     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
6926     PathFormat "$MIDL_PATH"
6927     MIDL_PATH="$formatted_path"
6929     PathFormat "$AL_PATH"
6930     AL_PATH="$formatted_path"
6932     PathFormat "$DOTNET_FRAMEWORK_HOME"
6933     DOTNET_FRAMEWORK_HOME="$formatted_path"
6935     PathFormat "$CSC_PATH"
6936     CSC_PATH="$formatted_path"
6939 dnl ===================================================================
6940 dnl Testing for C++ compiler and version...
6941 dnl ===================================================================
6943 if test "$_os" != "WINNT"; then
6944     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that
6945     save_CXXFLAGS=$CXXFLAGS
6946     AC_PROG_CXX
6947     CXXFLAGS=$save_CXXFLAGS
6948     if test -z "$CXX_BASE"; then
6949         CXX_BASE=`first_arg_basename "$CXX"`
6950     fi
6953 dnl check for GNU C++ compiler version
6954 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
6955     AC_MSG_CHECKING([the GNU C++ compiler version])
6957     _gpp_version=`$CXX -dumpversion`
6958     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
6960     if test "$_gpp_majmin" -lt "700"; then
6961         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
6962     else
6963         AC_MSG_RESULT([ok (g++ $_gpp_version)])
6964     fi
6966     dnl see https://code.google.com/p/android/issues/detail?id=41770
6967         glibcxx_threads=no
6968         AC_LANG_PUSH([C++])
6969         AC_REQUIRE_CPP
6970         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
6971         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
6972             #include <bits/c++config.h>]],[[
6973             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
6974             && !defined(_GLIBCXX__PTHREADS) \
6975             && !defined(_GLIBCXX_HAS_GTHREADS)
6976             choke me
6977             #endif
6978         ]])],[AC_MSG_RESULT([yes])
6979         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
6980         AC_LANG_POP([C++])
6981         if test $glibcxx_threads = yes; then
6982             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
6983         fi
6985 AC_SUBST(BOOST_CXXFLAGS)
6988 # prefx CXX with ccache if needed
6990 if test "$CCACHE" != ""; then
6991     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
6992     AC_LANG_PUSH([C++])
6993     save_CXXFLAGS=$CXXFLAGS
6994     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
6995     # msvc does not fail on unknown options, check stdout
6996     if test "$COM" = MSC; then
6997         CXXFLAGS="$CXXFLAGS -nologo"
6998     fi
6999     save_ac_cxx_werror_flag=$ac_cxx_werror_flag
7000     ac_cxx_werror_flag=yes
7001     dnl an empty program will do, we're checking the compiler flags
7002     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
7003                       [use_ccache=yes], [use_ccache=no])
7004     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
7005         AC_MSG_RESULT([yes])
7006     else
7007         CXX="$CCACHE $CXX"
7008         CXX_BASE="ccache $CXX_BASE"
7009         AC_MSG_RESULT([no])
7010     fi
7011     CXXFLAGS=$save_CXXFLAGS
7012     ac_cxx_werror_flag=$save_ac_cxx_werror_flag
7013     AC_LANG_POP([C++])
7016 dnl ===================================================================
7017 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
7018 dnl ===================================================================
7020 if test "$_os" != "WINNT"; then
7021     AC_PROG_CXXCPP
7023     dnl Check whether there's a C pre-processor.
7024     AC_PROG_CPP
7028 dnl ===================================================================
7029 dnl Find integral type sizes and alignments
7030 dnl ===================================================================
7032 if test "$_os" != "WINNT"; then
7034     AC_CHECK_SIZEOF(long)
7035     AC_CHECK_SIZEOF(short)
7036     AC_CHECK_SIZEOF(int)
7037     AC_CHECK_SIZEOF(long long)
7038     AC_CHECK_SIZEOF(double)
7039     AC_CHECK_SIZEOF(void*)
7040     AC_CHECK_SIZEOF(size_t)
7042     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
7043     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
7044     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
7045     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
7046     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
7047     SIZEOF_SIZE_T=$ac_cv_sizeof_size_t
7049     dnl Allow build without AC_CHECK_ALIGNOF, grrr
7050     m4_pattern_allow([AC_CHECK_ALIGNOF])
7051     m4_ifdef([AC_CHECK_ALIGNOF],
7052         [
7053             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
7054             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
7055             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
7056             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
7057         ],
7058         [
7059             case "$_os-$host_cpu" in
7060             Linux-i686)
7061                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
7062                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
7063                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
7064                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
7065                 ;;
7066             Linux-x86_64)
7067                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
7068                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
7069                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
7070                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
7071                 ;;
7072             *)
7073                 if test -z "$ac_cv_alignof_short" -o \
7074                         -z "$ac_cv_alignof_int" -o \
7075                         -z "$ac_cv_alignof_long" -o \
7076                         -z "$ac_cv_alignof_double"; then
7077                    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.])
7078                 fi
7079                 ;;
7080             esac
7081         ])
7083     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
7084     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
7085     if test $ac_cv_sizeof_long -eq 8; then
7086         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
7087     elif test $ac_cv_sizeof_double -eq 8; then
7088         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
7089     else
7090         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
7091     fi
7093     dnl Check for large file support
7094     AC_SYS_LARGEFILE
7095     if test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
7096         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
7097     fi
7098     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
7099         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
7100     fi
7101 else
7102     # Hardcode for MSVC
7103     SAL_TYPES_SIZEOFSHORT=2
7104     SAL_TYPES_SIZEOFINT=4
7105     SAL_TYPES_SIZEOFLONG=4
7106     SAL_TYPES_SIZEOFLONGLONG=8
7107     if test $WIN_HOST_BITS -eq 32; then
7108         SAL_TYPES_SIZEOFPOINTER=4
7109         SIZEOF_SIZE_T=4
7110     else
7111         SAL_TYPES_SIZEOFPOINTER=8
7112         SIZEOF_SIZE_T=8
7113     fi
7114     SAL_TYPES_ALIGNMENT2=2
7115     SAL_TYPES_ALIGNMENT4=4
7116     SAL_TYPES_ALIGNMENT8=8
7117     LFS_CFLAGS=''
7119 AC_SUBST(LFS_CFLAGS)
7120 AC_SUBST(SIZEOF_SIZE_T)
7122 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
7123 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
7124 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
7125 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
7126 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
7127 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
7128 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
7129 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
7131 dnl Calc jumbo sheets (1m+ rows) depend on 64 bit tools::Long .
7132 AC_MSG_CHECKING([whether jumbo sheets are supported])
7133 if test "$_os" != "WINNT"; then
7134     if test $SAL_TYPES_SIZEOFLONG -gt 4; then
7135         AC_MSG_RESULT([yes])
7136         ENABLE_JUMBO_SHEETS=TRUE
7137         AC_DEFINE(HAVE_FEATURE_JUMBO_SHEETS)
7138     else
7139         AC_MSG_RESULT([no])
7140     fi
7141 else
7142     if test $WIN_HOST_BITS -gt 32; then
7143         # 64bit windows is special-cased for tools::Long because long is 32bit
7144         AC_MSG_RESULT([yes])
7145         ENABLE_JUMBO_SHEETS=TRUE
7146         AC_DEFINE(HAVE_FEATURE_JUMBO_SHEETS)
7147     else
7148         AC_MSG_RESULT([no])
7149     fi
7151 AC_SUBST(ENABLE_JUMBO_SHEETS)
7153 dnl ===================================================================
7154 dnl Check whether to enable runtime optimizations
7155 dnl ===================================================================
7156 ENABLE_RUNTIME_OPTIMIZATIONS=
7157 AC_MSG_CHECKING([whether to enable runtime optimizations])
7158 if test -z "$enable_runtime_optimizations"; then
7159     for i in $CC; do
7160         case $i in
7161         -fsanitize=*)
7162             enable_runtime_optimizations=no
7163             break
7164             ;;
7165         esac
7166     done
7168 if test "$enable_runtime_optimizations" != no; then
7169     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
7170     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
7171     AC_MSG_RESULT([yes])
7172 else
7173     AC_MSG_RESULT([no])
7175 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
7177 dnl ===================================================================
7178 dnl Check if valgrind headers are available
7179 dnl ===================================================================
7180 ENABLE_VALGRIND=
7181 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
7182     prev_cppflags=$CPPFLAGS
7183     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
7184     # or where does it come from?
7185     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
7186     AC_CHECK_HEADER([valgrind/valgrind.h],
7187         [ENABLE_VALGRIND=TRUE])
7188     CPPFLAGS=$prev_cppflags
7190 AC_SUBST([ENABLE_VALGRIND])
7191 if test -z "$ENABLE_VALGRIND"; then
7192     if test "$with_valgrind" = yes; then
7193         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
7194     fi
7195     VALGRIND_CFLAGS=
7197 AC_SUBST([VALGRIND_CFLAGS])
7200 dnl ===================================================================
7201 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
7202 dnl ===================================================================
7204 # We need at least the sys/sdt.h include header.
7205 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
7206 if test "$SDT_H_FOUND" = "TRUE"; then
7207     # Found sys/sdt.h header, now make sure the c++ compiler works.
7208     # Old g++ versions had problems with probes in constructors/destructors.
7209     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
7210     AC_LANG_PUSH([C++])
7211     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
7212     #include <sys/sdt.h>
7213     class ProbeClass
7214     {
7215     private:
7216       int& ref;
7217       const char *name;
7219     public:
7220       ProbeClass(int& v, const char *n) : ref(v), name(n)
7221       {
7222         DTRACE_PROBE2(_test_, cons, name, ref);
7223       }
7225       void method(int min)
7226       {
7227         DTRACE_PROBE3(_test_, meth, name, ref, min);
7228         ref -= min;
7229       }
7231       ~ProbeClass()
7232       {
7233         DTRACE_PROBE2(_test_, dest, name, ref);
7234       }
7235     };
7236     ]],[[
7237     int i = 64;
7238     DTRACE_PROBE1(_test_, call, i);
7239     ProbeClass inst = ProbeClass(i, "call");
7240     inst.method(24);
7241     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
7242           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
7243     AC_LANG_POP([C++])
7245 AC_CONFIG_HEADERS([config_host/config_probes.h])
7247 dnl ===================================================================
7248 dnl GCC features
7249 dnl ===================================================================
7250 HAVE_GCC_STACK_CLASH_PROTECTION=
7251 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7252     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
7253     save_CFLAGS=$CFLAGS
7254     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
7255     AC_LINK_IFELSE(
7256         [AC_LANG_PROGRAM(, [[return 0;]])],
7257         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
7258         [AC_MSG_RESULT([no])])
7259     CFLAGS=$save_CFLAGS
7261     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
7262     save_CFLAGS=$CFLAGS
7263     CFLAGS="$CFLAGS -Werror -mno-avx"
7264     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
7265     CFLAGS=$save_CFLAGS
7266     if test "$HAVE_GCC_AVX" = "TRUE"; then
7267         AC_MSG_RESULT([yes])
7268     else
7269         AC_MSG_RESULT([no])
7270     fi
7272     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
7273     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7274     int v = 0;
7275     if (__sync_add_and_fetch(&v, 1) != 1 ||
7276         __sync_sub_and_fetch(&v, 1) != 0)
7277         return 1;
7278     __sync_synchronize();
7279     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
7280         v != 1)
7281         return 1;
7282     return 0;
7283 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
7284     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
7285         AC_MSG_RESULT([yes])
7286         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
7287     else
7288         AC_MSG_RESULT([no])
7289     fi
7291     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
7292     AC_LANG_PUSH([C++])
7293     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7294             #include <cstddef>
7295             #include <cxxabi.h>
7296             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
7297         ])], [
7298             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
7299             AC_MSG_RESULT([yes])
7300         ], [AC_MSG_RESULT([no])])
7301     AC_LANG_POP([C++])
7303     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
7304     AC_LANG_PUSH([C++])
7305     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7306             #include <cstddef>
7307             #include <cxxabi.h>
7308             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7309         ])], [
7310             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7311             AC_MSG_RESULT([yes])
7312         ], [AC_MSG_RESULT([no])])
7313     AC_LANG_POP([C++])
7315     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7316     AC_LANG_PUSH([C++])
7317     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7318             #include <cxxabi.h>
7319             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7320         ])], [
7321             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7322             AC_MSG_RESULT([yes])
7323         ], [AC_MSG_RESULT([no])])
7324     AC_LANG_POP([C++])
7326     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7327     AC_LANG_PUSH([C++])
7328     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7329             #include <cstddef>
7330             #include <cxxabi.h>
7331             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7332         ])], [
7333             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7334             AC_MSG_RESULT([yes])
7335         ], [AC_MSG_RESULT([no])])
7336     AC_LANG_POP([C++])
7338     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7339     AC_LANG_PUSH([C++])
7340     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7341             #include <cstddef>
7342             #include <cxxabi.h>
7343             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7344         ])], [
7345             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7346             AC_MSG_RESULT([yes])
7347         ], [AC_MSG_RESULT([no])])
7348     AC_LANG_POP([C++])
7350     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7351     AC_LANG_PUSH([C++])
7352     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7353             #include <cxxabi.h>
7354             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7355         ])], [
7356             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7357             AC_MSG_RESULT([yes])
7358         ], [AC_MSG_RESULT([no])])
7359     AC_LANG_POP([C++])
7361     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7362     AC_LANG_PUSH([C++])
7363     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7364             #include <cxxabi.h>
7365             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7366         ])], [
7367             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7368             AC_MSG_RESULT([yes])
7369         ], [AC_MSG_RESULT([no])])
7370     AC_LANG_POP([C++])
7372     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7373     AC_LANG_PUSH([C++])
7374     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7375             #include <cxxabi.h>
7376             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7377         ])], [
7378             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7379             AC_MSG_RESULT([yes])
7380         ], [AC_MSG_RESULT([no])])
7381     AC_LANG_POP([C++])
7383     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info in cxxabi.h])
7384     AC_LANG_PUSH([C++])
7385     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7386             #include <cstddef>
7387             #include <cxxabi.h>
7388             std::size_t f() { return sizeof(__cxxabiv1::__si_class_type_info); }
7389         ])], [
7390             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7391             AC_MSG_RESULT([yes])
7392         ], [AC_MSG_RESULT([no])])
7393     AC_LANG_POP([C++])
7395     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7396     AC_LANG_PUSH([C++])
7397     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7398             #include <cstddef>
7399             #include <cxxabi.h>
7400             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7401         ])], [
7402             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7403             AC_MSG_RESULT([yes])
7404         ], [AC_MSG_RESULT([no])])
7405     AC_LANG_POP([C++])
7408 AC_SUBST(HAVE_GCC_AVX)
7409 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7410 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7412 dnl ===================================================================
7413 dnl Identify the C++ library
7414 dnl ===================================================================
7416 AC_MSG_CHECKING([what the C++ library is])
7417 HAVE_LIBSTDCPP=
7418 HAVE_LIBCPP=
7419 AC_LANG_PUSH([C++])
7420 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7421 #include <utility>
7422 #ifndef __GLIBCXX__
7423 foo bar
7424 #endif
7425 ]])],
7426     [CPP_LIBRARY=GLIBCXX
7427      cpp_library_name="GNU libstdc++"
7428      HAVE_LIBSTDCPP=TRUE
7429     ],
7430     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7431 #include <utility>
7432 #ifndef _LIBCPP_VERSION
7433 foo bar
7434 #endif
7435 ]])],
7436     [CPP_LIBRARY=LIBCPP
7437      cpp_library_name="LLVM libc++"
7438      AC_DEFINE([HAVE_LIBCPP])
7439      HAVE_LIBCPP=TRUE
7440     ],
7441     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7442 #include <utility>
7443 #ifndef _MSC_VER
7444 foo bar
7445 #endif
7446 ]])],
7447     [CPP_LIBRARY=MSVCRT
7448      cpp_library_name="Microsoft"
7449     ],
7450     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7451 AC_MSG_RESULT([$cpp_library_name])
7452 AC_LANG_POP([C++])
7453 AC_SUBST([HAVE_LIBSTDCPP])
7454 AC_SUBST([HAVE_LIBCPP])
7456 if test -z "${LIBCPP_DEBUG+x}" -a -z "$CROSS_COMPILING" -a -n "$HAVE_LIBCPP" -a -n "$ENABLE_DBGUTIL"
7457 then
7458     # Libc++ has two levels of debug mode, assertions mode enabled with -D_LIBCPP_DEBUG=0,
7459     # and actual debug mode enabled with -D_LIBCPP_DEBUG=1 (and starting with LLVM15
7460     # assertions mode will be separate and controlled by -D_LIBCPP_ENABLE_ASSERTIONS=1,
7461     # although there will be backwards compatibility).
7462     # Debug mode is supported by libc++ only if built for it, e.g. Mac libc++ isn't,
7463     # and there would be undefined references to debug functions.
7464     # Moreover std::to_string() has a bug (https://reviews.llvm.org/D125184).
7465     # So check if debug mode can be used and disable or downgrade it to assertions
7466     # if needed.
7467     AC_MSG_CHECKING([if libc++ has a usable debug mode])
7468     AC_LANG_PUSH([C++])
7469     libcpp_debug_links=
7470     AC_LINK_IFELSE([AC_LANG_SOURCE([[
7471 #define _LIBCPP_DEBUG 0 // only assertions
7472 #include <vector>
7473 int main()
7475     std::vector<int> v;
7476     v.push_back( 1 );
7477     return v[ 3 ];
7479 ]])], [libcpp_debug_links=1])
7480     if test -n "$libcpp_debug_links"; then
7481         # we can use at least assertions, check if debug mode works
7482         AC_RUN_IFELSE([AC_LANG_SOURCE([[
7483 #define _LIBCPP_DEBUG 1 // debug mode
7484 #include <string>
7485 #include <vector>
7486 int foo(const std::vector<int>& v) { return *v.begin(); }
7487 int main()
7489     std::vector<int> v;
7490     v.push_back( 1 );
7491     std::string s = "xxxxxxxxxxxxxxxxxxxxxxxxx" + std::to_string(10);
7492     return (foo(v) + s.size()) != 0 ? 0 : 1;
7494 ]])],
7495         [AC_MSG_RESULT(yes)
7496          LIBCPP_DEBUG=-D_LIBCPP_DEBUG=1
7497         ],
7498         [AC_MSG_RESULT(no, using only assertions)
7499          LIBCPP_DEBUG=-D_LIBCPP_DEBUG=0
7500         ]
7501         )
7502     else
7503         AC_MSG_RESULT(no)
7504     fi
7505     AC_LANG_POP([C++])
7507 AC_SUBST([LIBCPP_DEBUG])
7509 dnl ===================================================================
7510 dnl Check for gperf
7511 dnl ===================================================================
7512 AC_PATH_PROG(GPERF, gperf)
7513 if test -z "$GPERF"; then
7514     AC_MSG_ERROR([gperf not found but needed. Install it.])
7516 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7517     GPERF=`cygpath -m $GPERF`
7519 AC_MSG_CHECKING([whether gperf is new enough])
7520 my_gperf_ver1=$($GPERF --version | head -n 1)
7521 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7522 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7523 if test "$my_gperf_ver3" -ge 301; then
7524     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7525 else
7526     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7528 AC_SUBST(GPERF)
7530 dnl ===================================================================
7531 dnl Check for system libcmis
7532 dnl ===================================================================
7533 libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.5 >= 0.5.2],enabled)
7535 dnl ===================================================================
7536 dnl C++11
7537 dnl ===================================================================
7539 if test -z "${CXXFLAGS_CXX11+x}"; then
7540     AC_MSG_CHECKING([whether $CXX_BASE supports C++17])
7541     if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7542         if test "$with_latest_c__" = yes; then
7543             CXXFLAGS_CXX11=-std:c++latest
7544         else
7545             CXXFLAGS_CXX11=-std:c++17
7546         fi
7547         CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus"
7548     elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7549         my_flags='-std=c++17 -std=c++1z'
7550         if test "$with_latest_c__" = yes; then
7551             my_flags="-std=c++23 -std=c++2b -std=c++20 -std=c++2a $my_flags"
7552         fi
7553         for flag in $my_flags; do
7554             if test "$COM" = MSC; then
7555                 flag="-Xclang $flag"
7556             fi
7557             save_CXXFLAGS=$CXXFLAGS
7558             CXXFLAGS="$CXXFLAGS $flag -Werror"
7559             if test "$SYSTEM_LIBCMIS" = TRUE; then
7560                 CXXFLAGS="$CXXFLAGS -DSYSTEM_LIBCMIS $LIBCMIS_CFLAGS"
7561             fi
7562             AC_LANG_PUSH([C++])
7563             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7564                 #include <algorithm>
7565                 #include <functional>
7566                 #include <vector>
7568                 #if defined SYSTEM_LIBCMIS
7569                 // See ucb/source/ucp/cmis/auth_provider.hxx:
7570                 #if !defined __clang__
7571                 #pragma GCC diagnostic push
7572                 #pragma GCC diagnostic ignored "-Wdeprecated"
7573                 #pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
7574                 #endif
7575                 #include <libcmis/libcmis.hxx>
7576                 #if !defined __clang__
7577                 #pragma GCC diagnostic pop
7578                 #endif
7579                 #endif
7581                 void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7582                     std::sort(v.begin(), v.end(), fn);
7583                 }
7584                 ]])],[CXXFLAGS_CXX11=$flag])
7585             AC_LANG_POP([C++])
7586             CXXFLAGS=$save_CXXFLAGS
7587             if test -n "$CXXFLAGS_CXX11"; then
7588                 break
7589             fi
7590         done
7591     fi
7592     if test -n "$CXXFLAGS_CXX11"; then
7593         AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7594     else
7595         AC_MSG_ERROR(no)
7596     fi
7598 AC_SUBST(CXXFLAGS_CXX11)
7600 if test "$GCC" = "yes"; then
7601     save_CXXFLAGS=$CXXFLAGS
7602     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7603     CHECK_L_ATOMIC
7604     CXXFLAGS=$save_CXXFLAGS
7605     AC_SUBST(ATOMIC_LIB)
7608 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7609 save_CXXFLAGS=$CXXFLAGS
7610 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7611 AC_LANG_PUSH([C++])
7613 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7614 #include <stddef.h>
7616 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7618 namespace
7620         struct b
7621         {
7622                 int i;
7623                 int j;
7624         };
7626 ]], [[
7627 struct a
7629         int i;
7630         int j;
7632 a thinga[]={{0,0}, {1,1}};
7633 b thingb[]={{0,0}, {1,1}};
7634 size_t i = sizeof(sal_n_array_size(thinga));
7635 size_t j = sizeof(sal_n_array_size(thingb));
7636 return !(i != 0 && j != 0);
7638     ], [ AC_MSG_RESULT(yes) ],
7639     [ AC_MSG_ERROR(no)])
7640 AC_LANG_POP([C++])
7641 CXXFLAGS=$save_CXXFLAGS
7643 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7644 if test "$GCC" = yes; then
7645     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7646     AC_LANG_PUSH([C++])
7647     save_CXXFLAGS=$CXXFLAGS
7648     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7649     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7650     CXXFLAGS=$save_CXXFLAGS
7651     AC_LANG_POP([C++])
7652     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7653         AC_MSG_RESULT([yes])
7654     else
7655         AC_MSG_RESULT([no])
7656     fi
7658 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7660 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7661 AC_LANG_PUSH([C++])
7662 save_CXXFLAGS=$CXXFLAGS
7663 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7664 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7665         #include <algorithm>
7666         #include <initializer_list>
7667         #include <vector>
7668         template<typename T> class S {
7669         private:
7670             std::vector<T> v_;
7671         public:
7672             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7673         };
7674         constinit S<int> s{3, 2, 1};
7675     ])], [
7676         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7677         AC_MSG_RESULT([yes])
7678     ], [AC_MSG_RESULT([no])])
7679 CXXFLAGS=$save_CXXFLAGS
7680 AC_LANG_POP([C++])
7682 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a <span> with unsigned size_type])
7683 AC_LANG_PUSH([C++])
7684 save_CXXFLAGS=$CXXFLAGS
7685 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7686 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7687         #include <span>
7688         #include <type_traits>
7689         // Don't check size_type directly, as it was called index_type before P1872R0:
7690         void f(std::span<int> s) { static_assert(std::is_unsigned_v<decltype(s.size())>); };
7691     ])], [
7692         AC_DEFINE([HAVE_CPP_SPAN],[1])
7693         AC_MSG_RESULT([yes])
7694     ], [AC_MSG_RESULT([no])])
7695 CXXFLAGS=$save_CXXFLAGS
7696 AC_LANG_POP([C++])
7698 AC_MSG_CHECKING([whether $CXX_BASE implements C++ DR P1155R3])
7699 AC_LANG_PUSH([C++])
7700 save_CXXFLAGS=$CXXFLAGS
7701 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7702 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7703         struct S1 { S1(S1 &&); };
7704         struct S2: S1 {};
7705         S1 f(S2 s) { return s; }
7706     ])], [
7707         AC_DEFINE([HAVE_P1155R3],[1])
7708         AC_MSG_RESULT([yes])
7709     ], [AC_MSG_RESULT([no])])
7710 CXXFLAGS=$save_CXXFLAGS
7711 AC_LANG_POP([C++])
7713 AC_MSG_CHECKING([whether $CXX_BASE supports C++20 std::atomic_ref])
7714 HAVE_CXX20_ATOMIC_REF=
7715 AC_LANG_PUSH([C++])
7716 save_CXXFLAGS=$CXXFLAGS
7717 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7718 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7719         #include <atomic>
7720         int x;
7721         std::atomic_ref<int> y(x);
7722     ])], [
7723         HAVE_CXX20_ATOMIC_REF=TRUE
7724         AC_MSG_RESULT([yes])
7725     ], [AC_MSG_RESULT([no])])
7726 CXXFLAGS=$save_CXXFLAGS
7727 AC_LANG_POP([C++])
7728 AC_SUBST([HAVE_CXX20_ATOMIC_REF])
7730 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7731 dnl which is included in -Wextra anyway):
7732 HAVE_WDEPRECATED_COPY_DTOR=
7733 if test "$GCC" = yes; then
7734     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7735     AC_LANG_PUSH([C++])
7736     save_CXXFLAGS=$CXXFLAGS
7737     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7738     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7739             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7740             AC_MSG_RESULT([yes])
7741         ], [AC_MSG_RESULT([no])])
7742     CXXFLAGS=$save_CXXFLAGS
7743     AC_LANG_POP([C++])
7745 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7747 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7748 dnl uninitialized warning for code like
7750 dnl   OString f();
7751 dnl   boost::optional<OString> * g(bool b) {
7752 dnl       boost::optional<OString> o;
7753 dnl       if (b) o = f();
7754 dnl       return new boost::optional<OString>(o);
7755 dnl   }
7757 dnl (as is e.g. present, in a slightly more elaborate form, in
7758 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7759 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7760 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7761 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7762     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7763     AC_LANG_PUSH([C++])
7764     save_CXXFLAGS=$CXXFLAGS
7765     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7766     if test "$ENABLE_OPTIMIZED" = TRUE; then
7767         CXXFLAGS="$CXXFLAGS -O2"
7768     else
7769         CXXFLAGS="$CXXFLAGS -O0"
7770     fi
7771     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7772             #include <new>
7773             void f1(int);
7774             struct S1 {
7775                 ~S1() { f1(n); }
7776                 int n = 0;
7777             };
7778             struct S2 {
7779                 S2() {}
7780                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7781                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7782                 void set(S1 s) {
7783                     new (stg) S1(s);
7784                     init = true;
7785                 }
7786                 bool init = false;
7787                 char stg[sizeof (S1)];
7788             } ;
7789             S1 f2();
7790             S2 * f3(bool b) {
7791                 S2 o;
7792                 if (b) o.set(f2());
7793                 return new S2(o);
7794             }
7795         ]])], [AC_MSG_RESULT([no])], [
7796             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7797             AC_MSG_RESULT([yes])
7798         ])
7799     CXXFLAGS=$save_CXXFLAGS
7800     AC_LANG_POP([C++])
7802 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7804 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7805 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7806 dnl hits us e.g. with GCC 10 and --enable-optimized at
7808 dnl   In file included from include/rtl/string.hxx:49,
7809 dnl                    from include/rtl/ustring.hxx:43,
7810 dnl                    from include/osl/file.hxx:35,
7811 dnl                    from include/codemaker/global.hxx:28,
7812 dnl                    from include/codemaker/options.hxx:23,
7813 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7814 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7815 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,
7816 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,
7817 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,
7818 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7819 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7820 dnl      78 |         memcpy( buffer, data, length );
7821 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7822 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7823 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7824     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7825     AC_LANG_PUSH([C++])
7826     save_CXXFLAGS=$CXXFLAGS
7827     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7828     if test "$ENABLE_OPTIMIZED" = TRUE; then
7829         CXXFLAGS="$CXXFLAGS -O2"
7830     else
7831         CXXFLAGS="$CXXFLAGS -O0"
7832     fi
7833     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7834     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7835             void fill(char const * begin, char const * end, char c);
7836             struct q {
7837                 char ids[4];
7838                 char username[6];
7839             };
7840             void test(q & c) {
7841                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
7842                 __builtin_strncpy(c.username, "root", sizeof(c.username));
7843             }
7844         ]])], [AC_MSG_RESULT([no])], [
7845             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
7846             AC_MSG_RESULT([yes])
7847         ])
7848     CXXFLAGS=$save_CXXFLAGS
7849     AC_LANG_POP([C++])
7851 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
7853 HAVE_DLLEXPORTINLINES=
7854 if test "$_os" = "WINNT"; then
7855     AC_MSG_CHECKING([whether $CXX_BASE supports -Zc:dllexportInlines-])
7856     AC_LANG_PUSH([C++])
7857     save_CXXFLAGS=$CXXFLAGS
7858     CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
7859     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7860             HAVE_DLLEXPORTINLINES=TRUE
7861             AC_MSG_RESULT([yes])
7862         ], [AC_MSG_RESULT([no])])
7863     CXXFLAGS=$save_CXXFLAGS
7864     AC_LANG_POP([C++])
7866 AC_SUBST([HAVE_DLLEXPORTINLINES])
7868 dnl ===================================================================
7869 dnl CPU Intrinsics support - SSE, AVX
7870 dnl ===================================================================
7872 CXXFLAGS_INTRINSICS_SSE2=
7873 CXXFLAGS_INTRINSICS_SSSE3=
7874 CXXFLAGS_INTRINSICS_SSE41=
7875 CXXFLAGS_INTRINSICS_SSE42=
7876 CXXFLAGS_INTRINSICS_AVX=
7877 CXXFLAGS_INTRINSICS_AVX2=
7878 CXXFLAGS_INTRINSICS_AVX512=
7879 CXXFLAGS_INTRINSICS_AVX512F=
7880 CXXFLAGS_INTRINSICS_F16C=
7881 CXXFLAGS_INTRINSICS_FMA=
7883 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7884     # GCC, Clang or Clang-cl (clang-cl + MSVC's -arch options don't work well together)
7885     flag_sse2=-msse2
7886     flag_ssse3=-mssse3
7887     flag_sse41=-msse4.1
7888     flag_sse42=-msse4.2
7889     flag_avx=-mavx
7890     flag_avx2=-mavx2
7891     flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
7892     flag_avx512f=-mavx512f
7893     flag_f16c=-mf16c
7894     flag_fma=-mfma
7895 else
7896     # With MSVC using -arch is in fact not necessary for being able
7897     # to use CPU intrinsics, code using AVX512F intrinsics will compile
7898     # even if compiled with -arch:AVX, the -arch option really only affects
7899     # instructions generated for C/C++ code.
7900     # So use the matching same (or lower) -arch options, but only in order
7901     # to generate the best matching instructions for the C++ code surrounding
7902     # the intrinsics.
7903     # SSE2 is the default for x86/x64, so no need to specify the option.
7904     flag_sse2=
7905     # No specific options for these, use the next lower.
7906     flag_ssse3="$flag_sse2"
7907     flag_sse41="$flag_sse2"
7908     flag_sse42="$flag_sse2"
7909     flag_avx=-arch:AVX
7910     flag_avx2=-arch:AVX2
7911     flag_avx512=-arch:AVX512
7912     # Using -arch:AVX512 would enable more than just AVX512F, so use only AVX2.
7913     flag_avx512f=-arch:AVX2
7914     # No MSVC options for these.
7915     flag_f16c="$flag_sse2"
7916     flag_fma="$flag_sse2"
7919 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
7920 AC_LANG_PUSH([C++])
7921 save_CXXFLAGS=$CXXFLAGS
7922 CXXFLAGS="$CXXFLAGS $flag_sse2"
7923 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7924     #include <emmintrin.h>
7925     int main () {
7926         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7927         c = _mm_xor_si128 (a, b);
7928         return 0;
7929     }
7930     ])],
7931     [can_compile_sse2=yes],
7932     [can_compile_sse2=no])
7933 AC_LANG_POP([C++])
7934 CXXFLAGS=$save_CXXFLAGS
7935 AC_MSG_RESULT([${can_compile_sse2}])
7936 if test "${can_compile_sse2}" = "yes" ; then
7937     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
7940 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
7941 AC_LANG_PUSH([C++])
7942 save_CXXFLAGS=$CXXFLAGS
7943 CXXFLAGS="$CXXFLAGS $flag_ssse3"
7944 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7945     #include <tmmintrin.h>
7946     int main () {
7947         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7948         c = _mm_maddubs_epi16 (a, b);
7949         return 0;
7950     }
7951     ])],
7952     [can_compile_ssse3=yes],
7953     [can_compile_ssse3=no])
7954 AC_LANG_POP([C++])
7955 CXXFLAGS=$save_CXXFLAGS
7956 AC_MSG_RESULT([${can_compile_ssse3}])
7957 if test "${can_compile_ssse3}" = "yes" ; then
7958     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
7961 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
7962 AC_LANG_PUSH([C++])
7963 save_CXXFLAGS=$CXXFLAGS
7964 CXXFLAGS="$CXXFLAGS $flag_sse41"
7965 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7966     #include <smmintrin.h>
7967     int main () {
7968         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7969         c = _mm_cmpeq_epi64 (a, b);
7970         return 0;
7971     }
7972     ])],
7973     [can_compile_sse41=yes],
7974     [can_compile_sse41=no])
7975 AC_LANG_POP([C++])
7976 CXXFLAGS=$save_CXXFLAGS
7977 AC_MSG_RESULT([${can_compile_sse41}])
7978 if test "${can_compile_sse41}" = "yes" ; then
7979     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
7982 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
7983 AC_LANG_PUSH([C++])
7984 save_CXXFLAGS=$CXXFLAGS
7985 CXXFLAGS="$CXXFLAGS $flag_sse42"
7986 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7987     #include <nmmintrin.h>
7988     int main () {
7989         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7990         c = _mm_cmpgt_epi64 (a, b);
7991         return 0;
7992     }
7993     ])],
7994     [can_compile_sse42=yes],
7995     [can_compile_sse42=no])
7996 AC_LANG_POP([C++])
7997 CXXFLAGS=$save_CXXFLAGS
7998 AC_MSG_RESULT([${can_compile_sse42}])
7999 if test "${can_compile_sse42}" = "yes" ; then
8000     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
8003 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
8004 AC_LANG_PUSH([C++])
8005 save_CXXFLAGS=$CXXFLAGS
8006 CXXFLAGS="$CXXFLAGS $flag_avx"
8007 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8008     #include <immintrin.h>
8009     int main () {
8010         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
8011         c = _mm256_xor_ps(a, b);
8012         return 0;
8013     }
8014     ])],
8015     [can_compile_avx=yes],
8016     [can_compile_avx=no])
8017 AC_LANG_POP([C++])
8018 CXXFLAGS=$save_CXXFLAGS
8019 AC_MSG_RESULT([${can_compile_avx}])
8020 if test "${can_compile_avx}" = "yes" ; then
8021     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
8024 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
8025 AC_LANG_PUSH([C++])
8026 save_CXXFLAGS=$CXXFLAGS
8027 CXXFLAGS="$CXXFLAGS $flag_avx2"
8028 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8029     #include <immintrin.h>
8030     int main () {
8031         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
8032         c = _mm256_maddubs_epi16(a, b);
8033         return 0;
8034     }
8035     ])],
8036     [can_compile_avx2=yes],
8037     [can_compile_avx2=no])
8038 AC_LANG_POP([C++])
8039 CXXFLAGS=$save_CXXFLAGS
8040 AC_MSG_RESULT([${can_compile_avx2}])
8041 if test "${can_compile_avx2}" = "yes" ; then
8042     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
8045 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
8046 AC_LANG_PUSH([C++])
8047 save_CXXFLAGS=$CXXFLAGS
8048 CXXFLAGS="$CXXFLAGS $flag_avx512"
8049 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8050     #include <immintrin.h>
8051     int main () {
8052         __m512i a = _mm512_loadu_si512(0);
8053         __m512d v1 = _mm512_load_pd(0);
8054         // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
8055         __m512d v2 = _mm512_abs_pd(v1);
8056         return 0;
8057     }
8058     ])],
8059     [can_compile_avx512=yes],
8060     [can_compile_avx512=no])
8061 AC_LANG_POP([C++])
8062 CXXFLAGS=$save_CXXFLAGS
8063 AC_MSG_RESULT([${can_compile_avx512}])
8064 if test "${can_compile_avx512}" = "yes" ; then
8065     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
8066     CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
8069 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
8070 AC_LANG_PUSH([C++])
8071 save_CXXFLAGS=$CXXFLAGS
8072 CXXFLAGS="$CXXFLAGS $flag_f16c"
8073 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8074     #include <immintrin.h>
8075     int main () {
8076         __m128i a = _mm_set1_epi32 (0);
8077         __m128 c;
8078         c = _mm_cvtph_ps(a);
8079         return 0;
8080     }
8081     ])],
8082     [can_compile_f16c=yes],
8083     [can_compile_f16c=no])
8084 AC_LANG_POP([C++])
8085 CXXFLAGS=$save_CXXFLAGS
8086 AC_MSG_RESULT([${can_compile_f16c}])
8087 if test "${can_compile_f16c}" = "yes" ; then
8088     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
8091 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
8092 AC_LANG_PUSH([C++])
8093 save_CXXFLAGS=$CXXFLAGS
8094 CXXFLAGS="$CXXFLAGS $flag_fma"
8095 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8096     #include <immintrin.h>
8097     int main () {
8098         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
8099         d = _mm256_fmadd_ps(a, b, c);
8100         return 0;
8101     }
8102     ])],
8103     [can_compile_fma=yes],
8104     [can_compile_fma=no])
8105 AC_LANG_POP([C++])
8106 CXXFLAGS=$save_CXXFLAGS
8107 AC_MSG_RESULT([${can_compile_fma}])
8108 if test "${can_compile_fma}" = "yes" ; then
8109     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
8112 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
8113 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
8114 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
8115 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
8116 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
8117 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
8118 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
8119 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512F])
8120 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
8121 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
8123 dnl ===================================================================
8124 dnl system stl sanity tests
8125 dnl ===================================================================
8126 if test "$_os" != "WINNT"; then
8128     AC_LANG_PUSH([C++])
8130     save_CPPFLAGS="$CPPFLAGS"
8131     if test -n "$MACOSX_SDK_PATH"; then
8132         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
8133     fi
8135     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
8136     # only.
8137     if test "$CPP_LIBRARY" = GLIBCXX; then
8138         dnl gcc#19664, gcc#22482, rhbz#162935
8139         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
8140         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
8141         AC_MSG_RESULT([$stlvisok])
8142         if test "$stlvisok" = "no"; then
8143             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
8144         fi
8145     fi
8147     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
8148     # when we don't make any dynamic libraries?
8149     if test "$DISABLE_DYNLOADING" = ""; then
8150         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
8151         cat > conftestlib1.cc <<_ACEOF
8152 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
8153 struct S2: S1<int> { virtual ~S2(); };
8154 S2::~S2() {}
8155 _ACEOF
8156         cat > conftestlib2.cc <<_ACEOF
8157 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
8158 struct S2: S1<int> { virtual ~S2(); };
8159 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
8160 _ACEOF
8161         gccvisinlineshiddenok=yes
8162         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
8163             gccvisinlineshiddenok=no
8164         else
8165             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
8166             dnl known to not work with -z defs (unsetting which makes the test
8167             dnl moot, though):
8168             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
8169             if test "$COM_IS_CLANG" = TRUE; then
8170                 for i in $CXX $CXXFLAGS; do
8171                     case $i in
8172                     -fsanitize=*)
8173                         my_linkflagsnoundefs=
8174                         break
8175                         ;;
8176                     esac
8177                 done
8178             fi
8179             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
8180                 gccvisinlineshiddenok=no
8181             fi
8182         fi
8184         rm -fr libconftest*
8185         AC_MSG_RESULT([$gccvisinlineshiddenok])
8186         if test "$gccvisinlineshiddenok" = "no"; then
8187             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
8188         fi
8189     fi
8191    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
8192     cat >visibility.cxx <<_ACEOF
8193 #pragma GCC visibility push(hidden)
8194 struct __attribute__ ((visibility ("default"))) TestStruct {
8195   static void Init();
8197 __attribute__ ((visibility ("default"))) void TestFunc() {
8198   TestStruct::Init();
8200 _ACEOF
8201     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
8202         gccvisbroken=yes
8203     else
8204         case "$host_cpu" in
8205         i?86|x86_64)
8206             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
8207                 gccvisbroken=no
8208             else
8209                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
8210                     gccvisbroken=no
8211                 else
8212                     gccvisbroken=yes
8213                 fi
8214             fi
8215             ;;
8216         *)
8217             gccvisbroken=no
8218             ;;
8219         esac
8220     fi
8221     rm -f visibility.s visibility.cxx
8223     AC_MSG_RESULT([$gccvisbroken])
8224     if test "$gccvisbroken" = "yes"; then
8225         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
8226     fi
8228     CPPFLAGS="$save_CPPFLAGS"
8230     AC_MSG_CHECKING([if CET endbranch is recognized])
8231 cat > endbr.s <<_ACEOF
8232 endbr32
8233 _ACEOF
8234     HAVE_ASM_END_BRANCH_INS_SUPPORT=
8235     if $CXX -c endbr.s -o endbr.o >/dev/null 2>&5; then
8236         AC_MSG_RESULT([yes])
8237         HAVE_ASM_END_BRANCH_INS_SUPPORT=TRUE
8238     else
8239         AC_MSG_RESULT([no])
8240     fi
8241     rm -f endbr.s endbr.o
8242     AC_SUBST(HAVE_ASM_END_BRANCH_INS_SUPPORT)
8244     AC_LANG_POP([C++])
8247 dnl ===================================================================
8248 dnl  Clang++ tests
8249 dnl ===================================================================
8251 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
8252 if test "$GCC" = "yes"; then
8253     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
8254     AC_LANG_PUSH([C++])
8255     save_CXXFLAGS=$CXXFLAGS
8256     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
8257     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
8258     CXXFLAGS=$save_CXXFLAGS
8259     AC_LANG_POP([C++])
8260     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
8261         AC_MSG_RESULT([yes])
8262     else
8263         AC_MSG_RESULT([no])
8264     fi
8266 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
8268 dnl ===================================================================
8269 dnl Compiler plugins
8270 dnl ===================================================================
8272 COMPILER_PLUGINS=
8273 # currently only Clang
8275 if test "$COM_IS_CLANG" != "TRUE"; then
8276     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
8277         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
8278         enable_compiler_plugins=no
8279     fi
8282 COMPILER_PLUGINS_COM_IS_CLANG=
8283 if test "$COM_IS_CLANG" = "TRUE"; then
8284     if test -n "$enable_compiler_plugins"; then
8285         compiler_plugins="$enable_compiler_plugins"
8286     elif test -n "$ENABLE_DBGUTIL"; then
8287         compiler_plugins=test
8288     else
8289         compiler_plugins=no
8290     fi
8291     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
8292         if test "$CLANGVER" -lt 120001; then
8293             if test "$compiler_plugins" = yes; then
8294                 AC_MSG_ERROR(
8295                     [Clang $CLANGVER is too old to build compiler plugins; need >= 12.0.1.])
8296             else
8297                 compiler_plugins=no
8298             fi
8299         fi
8300     fi
8301     if test "$compiler_plugins" != "no"; then
8302         dnl The prefix where Clang resides, override to where Clang resides if
8303         dnl using a source build:
8304         if test -z "$CLANGDIR"; then
8305             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
8306         fi
8307         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
8308         if test -z "$COMPILER_PLUGINS_CXX"; then
8309             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
8310         fi
8311         clangbindir=$CLANGDIR/bin
8312         if test "$build_os" = "cygwin"; then
8313             clangbindir=$(cygpath -u "$clangbindir")
8314         fi
8315         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
8316         if test -n "$LLVM_CONFIG"; then
8317             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
8318             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
8319             if test -z "$CLANGLIBDIR"; then
8320                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
8321             fi
8322             # Try if clang is built from source (in which case its includes are not together with llvm includes).
8323             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
8324             if $LLVM_CONFIG --src-root >/dev/null 2>&1; then
8325                 clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
8326                 if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
8327                     COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
8328                 fi
8329             fi
8330             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
8331             clangobjdir=$($LLVM_CONFIG --obj-root)
8332             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
8333                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
8334             fi
8335         fi
8336         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
8337         AC_LANG_PUSH([C++])
8338         save_CXX=$CXX
8339         save_CXXCPP=$CXXCPP
8340         save_CPPFLAGS=$CPPFLAGS
8341         save_CXXFLAGS=$CXXFLAGS
8342         save_LDFLAGS=$LDFLAGS
8343         save_LIBS=$LIBS
8344         CXX=$COMPILER_PLUGINS_CXX
8345         CXXCPP="$COMPILER_PLUGINS_CXX -E"
8346         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8347         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8348         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
8349             [COMPILER_PLUGINS=TRUE],
8350             [
8351             if test "$compiler_plugins" = "yes"; then
8352                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
8353             else
8354                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
8355                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
8356             fi
8357             ])
8358         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8359         dnl comment in compilerplugins/Makefile-clang.mk:
8360         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8361             LDFLAGS=""
8362             AC_MSG_CHECKING([for clang libraries to use])
8363             if test -z "$CLANGTOOLLIBS"; then
8364                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8365                 AC_LINK_IFELSE([
8366                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8367                         [[ clang::FullSourceLoc().dump(); ]])
8368                 ],[CLANGTOOLLIBS="$LIBS"],[])
8369             fi
8370             dnl If the above check for the combined -lclang-cpp failed, fall back to a hand-curated
8371             dnl list of individual -lclang* (but note that that list can become outdated over time,
8372             dnl see e.g. the since-reverted 5078591de9a0e65ca560a4f1913e90dfe95f66bf "CLANGTOOLLIBS
8373             dnl needs to include -lclangSupport now"):
8374             if test -z "$CLANGTOOLLIBS"; then
8375                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8376  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8377                 AC_LINK_IFELSE([
8378                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8379                         [[ clang::FullSourceLoc().dump(); ]])
8380                 ],[CLANGTOOLLIBS="$LIBS"],[])
8381             fi
8382             AC_MSG_RESULT([$CLANGTOOLLIBS])
8383             if test -z "$CLANGTOOLLIBS"; then
8384                 if test "$compiler_plugins" = "yes"; then
8385                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8386                 else
8387                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8388                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8389                 fi
8390                 COMPILER_PLUGINS=
8391             fi
8392             if test -n "$COMPILER_PLUGINS"; then
8393                 if test -z "$CLANGSYSINCLUDE"; then
8394                     if test -n "$LLVM_CONFIG"; then
8395                         # Path to the clang system headers (no idea if there's a better way to get it).
8396                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8397                     fi
8398                 fi
8399             fi
8400         fi
8401         CXX=$save_CXX
8402         CXXCPP=$save_CXXCPP
8403         CPPFLAGS=$save_CPPFLAGS
8404         CXXFLAGS=$save_CXXFLAGS
8405         LDFLAGS=$save_LDFLAGS
8406         LIBS="$save_LIBS"
8407         AC_LANG_POP([C++])
8409         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8410         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8411             #ifndef __clang__
8412             you lose
8413             #endif
8414             int foo=42;
8415             ]])],
8416             [AC_MSG_RESULT([yes])
8417              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8418             [AC_MSG_RESULT([no])])
8419         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8420     fi
8421 else
8422     if test "$enable_compiler_plugins" = "yes"; then
8423         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8424     fi
8426 COMPILER_PLUGINS_ANALYZER_PCH=
8427 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8428     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8430 AC_SUBST(COMPILER_PLUGINS)
8431 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8432 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8433 AC_SUBST(COMPILER_PLUGINS_CXX)
8434 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8435 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8436 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8437 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8438 AC_SUBST(CLANGDIR)
8439 AC_SUBST(CLANGLIBDIR)
8440 AC_SUBST(CLANGTOOLLIBS)
8441 AC_SUBST(CLANGSYSINCLUDE)
8443 # Plugin to help linker.
8444 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8445 # This makes --enable-lto build with clang work.
8446 AC_SUBST(LD_PLUGIN)
8448 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8449 AC_SUBST(HAVE_POSIX_FALLOCATE)
8451 JITC_PROCESSOR_TYPE=""
8452 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8453     # IBMs JDK needs this...
8454     JITC_PROCESSOR_TYPE=6
8455     export JITC_PROCESSOR_TYPE
8457 AC_SUBST([JITC_PROCESSOR_TYPE])
8459 # Misc Windows Stuff
8460 AC_ARG_WITH(ucrt-dir,
8461     AS_HELP_STRING([--with-ucrt-dir],
8462         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8463         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8464         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8465             Windows6.1-KB2999226-x64.msu
8466             Windows6.1-KB2999226-x86.msu
8467             Windows8.1-KB2999226-x64.msu
8468             Windows8.1-KB2999226-x86.msu
8469             Windows8-RT-KB2999226-x64.msu
8470             Windows8-RT-KB2999226-x86.msu
8471         A zip archive including those files is available from Microsoft site:
8472         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8475 UCRT_REDISTDIR="$with_ucrt_dir"
8476 if test $_os = "WINNT"; then
8477     find_msvc_x64_dlls
8478     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8479     MSVC_DLLS="$msvcdlls"
8480     if echo "$msvcdllpath" | grep -q "VC143.CRT$"; then
8481         with_redist=143
8482     elif echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8483         with_redist=142
8484     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8485         with_redist=141
8486     fi
8487     for i in $PKGFORMAT; do
8488         if test "$i" = msi; then
8489             find_msms "$with_redist"
8490             if test -n "$msmdir"; then
8491                 MSM_PATH=`win_short_path_for_make "$msmdir"`
8492                 SCPDEFS="$SCPDEFS -DWITH_VC_REDIST=$with_redist"
8493             fi
8494             break
8495         fi
8496     done
8498     if test "$UCRT_REDISTDIR" = "no"; then
8499         dnl explicitly disabled
8500         UCRT_REDISTDIR=""
8501     else
8502         if ! test -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x64.msu" -a \
8503                   -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x86.msu" -a \
8504                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x64.msu" -a \
8505                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x86.msu" -a \
8506                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x64.msu" -a \
8507                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x86.msu"; then
8508             UCRT_REDISTDIR=""
8509             if test -n "$PKGFORMAT"; then
8510                for i in $PKGFORMAT; do
8511                    case "$i" in
8512                    msi)
8513                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8514                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8515                        ;;
8516                    esac
8517                done
8518             fi
8519         fi
8520     fi
8523 AC_SUBST(UCRT_REDISTDIR)
8524 AC_SUBST(MSVC_DLL_PATH)
8525 AC_SUBST(MSVC_DLLS)
8526 AC_SUBST(MSM_PATH)
8529 dnl ===================================================================
8530 dnl Checks for Java
8531 dnl ===================================================================
8532 if test "$ENABLE_JAVA" != ""; then
8534     # Windows-specific tests
8535     if test "$build_os" = "cygwin"; then
8536         if test -z "$with_jdk_home"; then
8537             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8538             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8539             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/CurrentVersion"
8540             if test -n "$regvalue"; then
8541                 ver=$regvalue
8542                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver/JavaHome"
8543                 with_jdk_home=$regvalue
8544             fi
8545             howfound="found automatically"
8546         else
8547             with_jdk_home=`win_short_path_for_make "$with_jdk_home"`
8548             howfound="you passed"
8549         fi
8551         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8552             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])
8553         fi
8554     fi
8556     # 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.
8557     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8558     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8559         with_jdk_home=`/usr/libexec/java_home`
8560     fi
8562     JAVA_HOME=; export JAVA_HOME
8563     if test -z "$with_jdk_home"; then
8564         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8565     else
8566         _java_path="$with_jdk_home/bin/$with_java"
8567         dnl Check if there is a Java interpreter at all.
8568         if test -x "$_java_path"; then
8569             JAVAINTERPRETER=$_java_path
8570         else
8571             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8572         fi
8573     fi
8575     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8576     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8577     dnl loaded by java to run JunitTests:
8578     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8579         shortjdkhome=`cygpath -d "$with_jdk_home"`
8580         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
8581             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8582             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8583         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
8584             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8585             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8586         fi
8588         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8589             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8590         fi
8591         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8592     elif test "$cross_compiling" != "yes"; then
8593         case $CPUNAME in
8594             AARCH64|AXP|X86_64|IA64|POWERPC64|S390X|SPARC64|MIPS64|RISCV64)
8595                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8596                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8597                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8598                 fi
8599                 ;;
8600             *) # assumption: everything else 32-bit
8601                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8602                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8603                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8604                 fi
8605                 ;;
8606         esac
8607     fi
8610 dnl ===================================================================
8611 dnl Checks for JDK.
8612 dnl ===================================================================
8614 # Whether all the complexity here actually is needed any more or not, no idea.
8616 JDK_SECURITYMANAGER_DISALLOWED=
8617 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8618     _gij_longver=0
8619     AC_MSG_CHECKING([the installed JDK])
8620     if test -n "$JAVAINTERPRETER"; then
8621         dnl java -version sends output to stderr!
8622         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8623             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8624         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8625             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8626         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8627             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8628         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8629             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8630         else
8631             JDK=sun
8633             dnl Sun JDK specific tests
8634             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8635             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8637             if test "$_jdk_ver" -lt 10900; then
8638                 AC_MSG_ERROR([JDK is too old, you need at least 9 ($_jdk_ver < 10900)])
8639             fi
8640             if test "$_jdk_ver" -gt 10900; then
8641                 JAVA_CLASSPATH_NOT_SET=TRUE
8642             fi
8643             dnl TODO: Presumably, the Security Manager will not merely be disallowed, but be
8644             dnl completely removed in some Java version > 18 (see
8645             dnl <https://openjdk.java.net/jeps/411> "Deprecate the Security Manager for Removal"):
8646             if test "$_jdk_ver" -ge 180000; then
8647                 JDK_SECURITYMANAGER_DISALLOWED=TRUE
8648             fi
8650             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8651             if test "$_os" = "WINNT"; then
8652                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8653             fi
8654             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8656             # set to limit VM usage for JunitTests
8657             JAVAIFLAGS=-Xmx64M
8658             # set to limit VM usage for javac
8659             JAVACFLAGS=-J-Xmx128M
8660         fi
8661     else
8662         AC_MSG_ERROR([Java not found. You need at least JDK 9])
8663     fi
8664 else
8665     if test -z "$ENABLE_JAVA"; then
8666         dnl Java disabled
8667         JAVA_HOME=
8668         export JAVA_HOME
8669     elif test "$cross_compiling" = "yes"; then
8670         # Just assume compatibility of build and host JDK
8671         JDK=$JDK_FOR_BUILD
8672         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8673     fi
8676 dnl ===================================================================
8677 dnl Checks for javac
8678 dnl ===================================================================
8679 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8680     javacompiler="javac"
8681     : ${JAVA_SOURCE_VER=8}
8682     : ${JAVA_TARGET_VER=8}
8683     if test -z "$with_jdk_home"; then
8684         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8685     else
8686         _javac_path="$with_jdk_home/bin/$javacompiler"
8687         dnl Check if there is a Java compiler at all.
8688         if test -x "$_javac_path"; then
8689             JAVACOMPILER=$_javac_path
8690         fi
8691     fi
8692     if test -z "$JAVACOMPILER"; then
8693         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8694     fi
8695     if test "$build_os" = "cygwin"; then
8696         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8697             JAVACOMPILER="${JAVACOMPILER}.exe"
8698         fi
8699         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8700     fi
8703 dnl ===================================================================
8704 dnl Checks for javadoc
8705 dnl ===================================================================
8706 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8707     if test -z "$with_jdk_home"; then
8708         AC_PATH_PROG(JAVADOC, javadoc)
8709     else
8710         _javadoc_path="$with_jdk_home/bin/javadoc"
8711         dnl Check if there is a javadoc at all.
8712         if test -x "$_javadoc_path"; then
8713             JAVADOC=$_javadoc_path
8714         else
8715             AC_PATH_PROG(JAVADOC, javadoc)
8716         fi
8717     fi
8718     if test -z "$JAVADOC"; then
8719         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8720     fi
8721     if test "$build_os" = "cygwin"; then
8722         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8723             JAVADOC="${JAVADOC}.exe"
8724         fi
8725         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8726     fi
8728     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8729     JAVADOCISGJDOC="yes"
8730     fi
8732 AC_SUBST(JAVADOC)
8733 AC_SUBST(JAVADOCISGJDOC)
8735 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8736     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8737     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8738         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8739            # try to recover first by looking whether we have an alternative
8740            # system as in Debian or newer SuSEs where following /usr/bin/javac
8741            # over /etc/alternatives/javac leads to the right bindir where we
8742            # just need to strip a bit away to get a valid JAVA_HOME
8743            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8744         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8745             # maybe only one level of symlink (e.g. on Mac)
8746             JAVA_HOME=$(readlink $JAVACOMPILER)
8747             if test "$(dirname $JAVA_HOME)" = "."; then
8748                 # we've got no path to trim back
8749                 JAVA_HOME=""
8750             fi
8751         else
8752             # else warn
8753             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8754             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8755             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8756             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8757         fi
8758         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8759         if test "$JAVA_HOME" != "/usr"; then
8760             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8761                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8762                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8763                 dnl Tiger already returns a JDK path...
8764                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8765             else
8766                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8767                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8768                 dnl that checks which version to run
8769                 if test -f "$JAVA_HOME"; then
8770                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8771                 fi
8772             fi
8773         fi
8774     fi
8775     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8777     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8778     if test -z "$JAVA_HOME"; then
8779         if test "x$with_jdk_home" = "x"; then
8780             cat > findhome.java <<_ACEOF
8781 [import java.io.File;
8783 class findhome
8785     public static void main(String args[])
8786     {
8787         String jrelocation = System.getProperty("java.home");
8788         File jre = new File(jrelocation);
8789         System.out.println(jre.getParent());
8790     }
8792 _ACEOF
8793             AC_MSG_CHECKING([if javac works])
8794             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8795             AC_TRY_EVAL(javac_cmd)
8796             if test $? = 0 -a -f ./findhome.class; then
8797                 AC_MSG_RESULT([javac works])
8798             else
8799                 echo "configure: javac test failed" >&5
8800                 cat findhome.java >&5
8801                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8802             fi
8803             AC_MSG_CHECKING([if gij knows its java.home])
8804             JAVA_HOME=`$JAVAINTERPRETER findhome`
8805             if test $? = 0 -a "$JAVA_HOME" != ""; then
8806                 AC_MSG_RESULT([$JAVA_HOME])
8807             else
8808                 echo "configure: java test failed" >&5
8809                 cat findhome.java >&5
8810                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8811             fi
8812             # clean-up after ourselves
8813             rm -f ./findhome.java ./findhome.class
8814         else
8815             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8816         fi
8817     fi
8819     # now check if $JAVA_HOME is really valid
8820     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8821         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8822             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8823             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8824             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
8825             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
8826             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
8827             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
8828         fi
8829     fi
8830     PathFormat "$JAVA_HOME"
8831     JAVA_HOME="$formatted_path"
8834 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
8835     "$_os" != Darwin
8836 then
8837     AC_MSG_CHECKING([for JAWT lib])
8838     if test "$_os" = WINNT; then
8839         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
8840         JAWTLIB=jawt.lib
8841     else
8842         case "$host_cpu" in
8843         arm*)
8844             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
8845             JAVA_ARCH=$my_java_arch
8846             ;;
8847         i*86)
8848             my_java_arch=i386
8849             ;;
8850         m68k)
8851             my_java_arch=m68k
8852             ;;
8853         powerpc)
8854             my_java_arch=ppc
8855             ;;
8856         powerpc64)
8857             my_java_arch=ppc64
8858             ;;
8859         powerpc64le)
8860             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
8861             JAVA_ARCH=$my_java_arch
8862             ;;
8863         sparc64)
8864             my_java_arch=sparcv9
8865             ;;
8866         x86_64)
8867             my_java_arch=amd64
8868             ;;
8869         *)
8870             my_java_arch=$host_cpu
8871             ;;
8872         esac
8873         # This is where JDK9 puts the library
8874         if test -e "$JAVA_HOME/lib/libjawt.so"; then
8875             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
8876         else
8877             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
8878         fi
8879         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
8880     fi
8881     AC_MSG_RESULT([$JAWTLIB])
8883 AC_SUBST(JAWTLIB)
8885 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
8886     case "$host_os" in
8888     aix*)
8889         JAVAINC="-I$JAVA_HOME/include"
8890         JAVAINC="$JAVAINC -I$JAVA_HOME/include/aix"
8891         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8892         ;;
8894     cygwin*|wsl*)
8895         JAVAINC="-I$JAVA_HOME/include/win32"
8896         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
8897         ;;
8899     darwin*)
8900         if test -d "$JAVA_HOME/include/darwin"; then
8901             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
8902         else
8903             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
8904         fi
8905         ;;
8907     dragonfly*)
8908         JAVAINC="-I$JAVA_HOME/include"
8909         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8910         ;;
8912     freebsd*)
8913         JAVAINC="-I$JAVA_HOME/include"
8914         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
8915         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
8916         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8917         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8918         ;;
8920     k*bsd*-gnu*)
8921         JAVAINC="-I$JAVA_HOME/include"
8922         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8923         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8924         ;;
8926     linux-gnu*)
8927         JAVAINC="-I$JAVA_HOME/include"
8928         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8929         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8930         ;;
8932     *netbsd*)
8933         JAVAINC="-I$JAVA_HOME/include"
8934         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
8935         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8936        ;;
8938     openbsd*)
8939         JAVAINC="-I$JAVA_HOME/include"
8940         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
8941         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8942         ;;
8944     solaris*)
8945         JAVAINC="-I$JAVA_HOME/include"
8946         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
8947         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8948         ;;
8949     esac
8951 SOLARINC="$SOLARINC $JAVAINC"
8953 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8954     JAVA_HOME_FOR_BUILD=$JAVA_HOME
8955     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
8956     JDK_FOR_BUILD=$JDK
8957     JDK_SECURITYMANAGER_DISALLOWED_FOR_BUILD=$JDK_SECURITYMANAGER_DISALLOWED
8960 AC_SUBST(JAVACFLAGS)
8961 AC_SUBST(JAVACOMPILER)
8962 AC_SUBST(JAVAINTERPRETER)
8963 AC_SUBST(JAVAIFLAGS)
8964 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
8965 AC_SUBST(JAVA_CLASSPATH_NOT_SET)
8966 AC_SUBST(JAVA_HOME)
8967 AC_SUBST(JAVA_HOME_FOR_BUILD)
8968 AC_SUBST(JDK)
8969 AC_SUBST(JDK_FOR_BUILD)
8970 AC_SUBST(JDK_SECURITYMANAGER_DISALLOWED_FOR_BUILD)
8971 AC_SUBST(JAVA_SOURCE_VER)
8972 AC_SUBST(JAVA_TARGET_VER)
8975 dnl ===================================================================
8976 dnl Export file validation
8977 dnl ===================================================================
8978 AC_MSG_CHECKING([whether to enable export file validation])
8979 if test "$with_export_validation" != "no"; then
8980     if test -z "$ENABLE_JAVA"; then
8981         if test "$with_export_validation" = "yes"; then
8982             AC_MSG_ERROR([requested, but Java is disabled])
8983         else
8984             AC_MSG_RESULT([no, as Java is disabled])
8985         fi
8986     elif ! test -d "${SRC_ROOT}/schema"; then
8987         if test "$with_export_validation" = "yes"; then
8988             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
8989         else
8990             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
8991         fi
8992     else
8993         AC_MSG_RESULT([yes])
8994         AC_DEFINE(HAVE_EXPORT_VALIDATION)
8996         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
8997         if test -z "$ODFVALIDATOR"; then
8998             # remember to download the ODF toolkit with validator later
8999             AC_MSG_NOTICE([no odfvalidator found, will download it])
9000             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
9001             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
9003             # and fetch name of odfvalidator jar name from download.lst
9004             ODFVALIDATOR_JAR=`$SED -n -e "s/^ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
9005             AC_SUBST(ODFVALIDATOR_JAR)
9007             if test -z "$ODFVALIDATOR_JAR"; then
9008                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
9009             fi
9010         fi
9011         if test "$build_os" = "cygwin"; then
9012             # In case of Cygwin it will be executed from Windows,
9013             # so we need to run bash and absolute path to validator
9014             # so instead of "odfvalidator" it will be
9015             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
9016             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
9017         else
9018             ODFVALIDATOR="sh $ODFVALIDATOR"
9019         fi
9020         AC_SUBST(ODFVALIDATOR)
9023         AC_PATH_PROGS(OFFICEOTRON, officeotron)
9024         if test -z "$OFFICEOTRON"; then
9025             # remember to download the officeotron with validator later
9026             AC_MSG_NOTICE([no officeotron found, will download it])
9027             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
9028             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
9030             # and fetch name of officeotron jar name from download.lst
9031             OFFICEOTRON_JAR=`$SED -n -e "s/^OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
9032             AC_SUBST(OFFICEOTRON_JAR)
9034             if test -z "$OFFICEOTRON_JAR"; then
9035                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
9036             fi
9037         else
9038             # check version of existing officeotron
9039             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
9040             if test 0"$OFFICEOTRON_VER" -lt 704; then
9041                 AC_MSG_ERROR([officeotron too old])
9042             fi
9043         fi
9044         if test "$build_os" = "cygwin"; then
9045             # In case of Cygwin it will be executed from Windows,
9046             # so we need to run bash and absolute path to validator
9047             # so instead of "odfvalidator" it will be
9048             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
9049             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
9050         else
9051             OFFICEOTRON="sh $OFFICEOTRON"
9052         fi
9053     fi
9054     AC_SUBST(OFFICEOTRON)
9055 else
9056     AC_MSG_RESULT([no])
9059 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
9060 if test "$with_bffvalidator" != "no"; then
9061     AC_DEFINE(HAVE_BFFVALIDATOR)
9063     if test "$with_export_validation" = "no"; then
9064         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
9065     fi
9067     if test "$with_bffvalidator" = "yes"; then
9068         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
9069     else
9070         BFFVALIDATOR="$with_bffvalidator"
9071     fi
9073     if test "$build_os" = "cygwin"; then
9074         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
9075             AC_MSG_RESULT($BFFVALIDATOR)
9076         else
9077             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
9078         fi
9079     elif test -n "$BFFVALIDATOR"; then
9080         # We are not in Cygwin but need to run Windows binary with wine
9081         AC_PATH_PROGS(WINE, wine)
9083         # so swap in a shell wrapper that converts paths transparently
9084         BFFVALIDATOR_EXE="$BFFVALIDATOR"
9085         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
9086         AC_SUBST(BFFVALIDATOR_EXE)
9087         AC_MSG_RESULT($BFFVALIDATOR)
9088     else
9089         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
9090     fi
9091     AC_SUBST(BFFVALIDATOR)
9092 else
9093     AC_MSG_RESULT([no])
9096 dnl ===================================================================
9097 dnl Check for epm (not needed for Windows)
9098 dnl ===================================================================
9099 AC_MSG_CHECKING([whether to enable EPM for packing])
9100 if test "$enable_epm" = "yes"; then
9101     AC_MSG_RESULT([yes])
9102     if test "$_os" != "WINNT"; then
9103         if test $_os = Darwin; then
9104             EPM=internal
9105         elif test -n "$with_epm"; then
9106             EPM=$with_epm
9107         else
9108             AC_PATH_PROG(EPM, epm, no)
9109         fi
9110         if test "$EPM" = "no" -o "$EPM" = "internal"; then
9111             AC_MSG_NOTICE([EPM will be built.])
9112             BUILD_TYPE="$BUILD_TYPE EPM"
9113             EPM=${WORKDIR}/UnpackedTarball/epm/epm
9114         else
9115             # Gentoo has some epm which is something different...
9116             AC_MSG_CHECKING([whether the found epm is the right epm])
9117             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
9118                 AC_MSG_RESULT([yes])
9119             else
9120                 AC_MSG_ERROR([no. Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
9121             fi
9122             AC_MSG_CHECKING([epm version])
9123             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
9124             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
9125                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
9126                 AC_MSG_RESULT([OK, >= 3.7])
9127             else
9128                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
9129                 AC_MSG_ERROR([Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
9130             fi
9131         fi
9132     fi
9134     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
9135         AC_MSG_CHECKING([for rpm])
9136         for a in "$RPM" rpmbuild rpm; do
9137             $a --usage >/dev/null 2> /dev/null
9138             if test $? -eq 0; then
9139                 RPM=$a
9140                 break
9141             else
9142                 $a --version >/dev/null 2> /dev/null
9143                 if test $? -eq 0; then
9144                     RPM=$a
9145                     break
9146                 fi
9147             fi
9148         done
9149         if test -z "$RPM"; then
9150             AC_MSG_ERROR([not found])
9151         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
9152             RPM_PATH=`which $RPM`
9153             AC_MSG_RESULT([$RPM_PATH])
9154             SCPDEFS="$SCPDEFS -DWITH_RPM"
9155         else
9156             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
9157         fi
9158     fi
9159     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
9160         AC_PATH_PROG(DPKG, dpkg, no)
9161         if test "$DPKG" = "no"; then
9162             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
9163         fi
9164     fi
9165     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
9166        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9167         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
9168             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
9169                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
9170                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
9171                     AC_MSG_RESULT([yes])
9172                 else
9173                     AC_MSG_RESULT([no])
9174                     if echo "$PKGFORMAT" | $GREP -q rpm; then
9175                         _pt="rpm"
9176                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
9177                         add_warning "the rpms will need to be installed with --nodeps"
9178                     else
9179                         _pt="pkg"
9180                     fi
9181                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
9182                     add_warning "the ${_pt}s will not be relocatable"
9183                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
9184                                  relocation will work, you need to patch your epm with the
9185                                  patch in epm/epm-3.7.patch or build with
9186                                  --with-epm=internal which will build a suitable epm])
9187                 fi
9188             fi
9189         fi
9190     fi
9191     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9192         AC_PATH_PROG(PKGMK, pkgmk, no)
9193         if test "$PKGMK" = "no"; then
9194             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
9195         fi
9196     fi
9197     AC_SUBST(RPM)
9198     AC_SUBST(DPKG)
9199     AC_SUBST(PKGMK)
9200 else
9201     for i in $PKGFORMAT; do
9202         case "$i" in
9203         aix | bsd | deb | pkg | rpm | native | portable)
9204             AC_MSG_ERROR(
9205                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
9206             ;;
9207         esac
9208     done
9209     AC_MSG_RESULT([no])
9210     EPM=NO
9212 AC_SUBST(EPM)
9214 ENABLE_LWP=
9215 if test "$enable_lotuswordpro" = "yes"; then
9216     ENABLE_LWP="TRUE"
9218 AC_SUBST(ENABLE_LWP)
9220 dnl ===================================================================
9221 dnl Check for building ODK
9222 dnl ===================================================================
9223 AC_MSG_CHECKING([whether to build the ODK])
9224 if test "$enable_odk" = yes; then
9225     if test "$DISABLE_DYNLOADING" = TRUE; then
9226         AC_MSG_ERROR([can't build ODK for --disable-dynamic-loading builds])
9227     fi
9228     AC_MSG_RESULT([yes])
9229     BUILD_TYPE="$BUILD_TYPE ODK"
9230 else
9231     AC_MSG_RESULT([no])
9234 if test "$enable_odk" != yes; then
9235     unset DOXYGEN
9236 else
9237     if test "$with_doxygen" = no; then
9238         AC_MSG_CHECKING([for doxygen])
9239         unset DOXYGEN
9240         AC_MSG_RESULT([no])
9241     else
9242         if test "$with_doxygen" = yes; then
9243             AC_PATH_PROG([DOXYGEN], [doxygen])
9244             if test -z "$DOXYGEN"; then
9245                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
9246             fi
9247             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
9248                 if ! dot -V 2>/dev/null; then
9249                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
9250                 fi
9251             fi
9252         else
9253             AC_MSG_CHECKING([for doxygen])
9254             DOXYGEN=$with_doxygen
9255             AC_MSG_RESULT([$DOXYGEN])
9256         fi
9257         if test -n "$DOXYGEN"; then
9258             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
9259             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
9260             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
9261                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
9262             fi
9263         fi
9264     fi
9266 AC_SUBST([DOXYGEN])
9268 dnl ==================================================================
9269 dnl libfuzzer
9270 dnl ==================================================================
9271 AC_MSG_CHECKING([whether to enable fuzzers])
9272 if test "$enable_fuzzers" != yes; then
9273     AC_MSG_RESULT([no])
9274 else
9275     if test -z $LIB_FUZZING_ENGINE; then
9276       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
9277     fi
9278     AC_MSG_RESULT([yes])
9279     ENABLE_FUZZERS="TRUE"
9280     AC_DEFINE([ENABLE_FUZZERS],1)
9281     AC_DEFINE([VCL_FLOAT_DEVICE_PIXEL],1)
9282     BUILD_TYPE="$BUILD_TYPE FUZZERS"
9284 AC_SUBST(LIB_FUZZING_ENGINE)
9286 dnl ===================================================================
9287 dnl Check for system zlib
9288 dnl ===================================================================
9289 if test "$with_system_zlib" = "auto"; then
9290     case "$_os" in
9291     WINNT)
9292         with_system_zlib="$with_system_libs"
9293         ;;
9294     *)
9295         if test "$enable_fuzzers" != "yes"; then
9296             with_system_zlib=yes
9297         else
9298             with_system_zlib=no
9299         fi
9300         ;;
9301     esac
9304 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
9305 dnl and has no pkg-config for it at least on some tinderboxes,
9306 dnl so leaving that out for now
9307 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
9308 AC_MSG_CHECKING([which zlib to use])
9309 if test "$with_system_zlib" = "yes"; then
9310     AC_MSG_RESULT([external])
9311     SYSTEM_ZLIB=TRUE
9312     AC_CHECK_HEADER(zlib.h, [],
9313         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
9314     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
9315         [AC_MSG_ERROR(zlib not found or functional)], [])
9316 else
9317     AC_MSG_RESULT([internal])
9318     SYSTEM_ZLIB=
9319     BUILD_TYPE="$BUILD_TYPE ZLIB"
9320     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
9321     if test "$COM" = "MSC"; then
9322         ZLIB_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/zlib.lib"
9323     else
9324         ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
9325     fi
9327 AC_SUBST(ZLIB_CFLAGS)
9328 AC_SUBST(ZLIB_LIBS)
9329 AC_SUBST(SYSTEM_ZLIB)
9331 dnl ===================================================================
9332 dnl Check for system jpeg
9333 dnl ===================================================================
9334 AC_MSG_CHECKING([which libjpeg to use])
9335 if test "$with_system_jpeg" = "yes"; then
9336     AC_MSG_RESULT([external])
9337     SYSTEM_LIBJPEG=TRUE
9338     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
9339         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
9340     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
9341         [AC_MSG_ERROR(jpeg library not found or functional)], [])
9342 else
9343     SYSTEM_LIBJPEG=
9344     AC_MSG_RESULT([internal, libjpeg-turbo])
9345     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
9347     case "$host_cpu" in
9348     x86_64 | amd64 | i*86 | x86 | ia32)
9349         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
9350         if test -z "$NASM" -a "$build_os" = "cygwin"; then
9351             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
9352                 NASM="$LODE_HOME/opt/bin/nasm"
9353             elif test -x "/opt/lo/bin/nasm"; then
9354                 NASM="/opt/lo/bin/nasm"
9355             fi
9356         fi
9358         if test -n "$NASM"; then
9359             AC_MSG_CHECKING([for object file format of host system])
9360             case "$host_os" in
9361               cygwin* | mingw* | pw32* | wsl*)
9362                 case "$host_cpu" in
9363                   x86_64)
9364                     objfmt='Win64-COFF'
9365                     ;;
9366                   *)
9367                     objfmt='Win32-COFF'
9368                     ;;
9369                 esac
9370               ;;
9371               msdosdjgpp* | go32*)
9372                 objfmt='COFF'
9373               ;;
9374               os2-emx*) # not tested
9375                 objfmt='MSOMF' # obj
9376               ;;
9377               linux*coff* | linux*oldld*)
9378                 objfmt='COFF' # ???
9379               ;;
9380               linux*aout*)
9381                 objfmt='a.out'
9382               ;;
9383               linux*)
9384                 case "$host_cpu" in
9385                   x86_64)
9386                     objfmt='ELF64'
9387                     ;;
9388                   *)
9389                     objfmt='ELF'
9390                     ;;
9391                 esac
9392               ;;
9393               kfreebsd* | freebsd* | netbsd* | openbsd*)
9394                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9395                   objfmt='BSD-a.out'
9396                 else
9397                   case "$host_cpu" in
9398                     x86_64 | amd64)
9399                       objfmt='ELF64'
9400                       ;;
9401                     *)
9402                       objfmt='ELF'
9403                       ;;
9404                   esac
9405                 fi
9406               ;;
9407               solaris* | sunos* | sysv* | sco*)
9408                 case "$host_cpu" in
9409                   x86_64)
9410                     objfmt='ELF64'
9411                     ;;
9412                   *)
9413                     objfmt='ELF'
9414                     ;;
9415                 esac
9416               ;;
9417               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9418                 case "$host_cpu" in
9419                   x86_64)
9420                     objfmt='Mach-O64'
9421                     ;;
9422                   *)
9423                     objfmt='Mach-O'
9424                     ;;
9425                 esac
9426               ;;
9427               *)
9428                 objfmt='ELF ?'
9429               ;;
9430             esac
9432             AC_MSG_RESULT([$objfmt])
9433             if test "$objfmt" = 'ELF ?'; then
9434               objfmt='ELF'
9435               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9436             fi
9438             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9439             case "$objfmt" in
9440               MSOMF)      NAFLAGS='-fobj -DOBJ32 -DPIC';;
9441               Win32-COFF) NAFLAGS='-fwin32 -DWIN32 -DPIC';;
9442               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__ -DPIC';;
9443               COFF)       NAFLAGS='-fcoff -DCOFF -DPIC';;
9444               a.out)      NAFLAGS='-faout -DAOUT -DPIC';;
9445               BSD-a.out)  NAFLAGS='-faoutb -DAOUT -DPIC';;
9446               ELF)        NAFLAGS='-felf -DELF -DPIC';;
9447               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__ -DPIC';;
9448               RDF)        NAFLAGS='-frdf -DRDF -DPIC';;
9449               Mach-O)     NAFLAGS='-fmacho -DMACHO -DPIC';;
9450               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__ -DPIC';;
9451             esac
9452             AC_MSG_RESULT([$NAFLAGS])
9454             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9455             cat > conftest.asm << EOF
9456             [%line __oline__ "configure"
9457                     section .text
9458                     global  _main,main
9459             _main:
9460             main:   xor     eax,eax
9461                     ret
9462             ]
9464             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9465             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9466               AC_MSG_RESULT(yes)
9467             else
9468               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9469               cat conftest.asm >&AS_MESSAGE_LOG_FD
9470               rm -rf conftest*
9471               AC_MSG_RESULT(no)
9472               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9473               NASM=""
9474             fi
9476         fi
9478         if test -z "$NASM"; then
9479 cat << _EOS
9480 ****************************************************************************
9481 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9482 To get one please:
9484 _EOS
9485             if test "$build_os" = "cygwin"; then
9486 cat << _EOS
9487 install a pre-compiled binary for Win32
9489 mkdir -p /opt/lo/bin
9490 cd /opt/lo/bin
9491 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9492 chmod +x nasm
9494 or get and install one from http://www.nasm.us/
9496 Then re-run autogen.sh
9498 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9499 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`which nasm\` finds it.
9501 _EOS
9502             else
9503 cat << _EOS
9504 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md
9506 _EOS
9507             fi
9508             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9509             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9510         fi
9511       ;;
9512     esac
9515 AC_SUBST(NASM)
9516 AC_SUBST(NAFLAGS)
9517 AC_SUBST(LIBJPEG_CFLAGS)
9518 AC_SUBST(LIBJPEG_LIBS)
9519 AC_SUBST(SYSTEM_LIBJPEG)
9521 dnl ===================================================================
9522 dnl Check for system clucene
9523 dnl ===================================================================
9524 libo_CHECK_SYSTEM_MODULE([clucene],[CLUCENE],[libclucene-core])
9525 if test "$SYSTEM_CLUCENE" = TRUE; then
9526     AC_LANG_PUSH([C++])
9527     save_CXXFLAGS=$CXXFLAGS
9528     save_CPPFLAGS=$CPPFLAGS
9529     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9530     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9531     dnl http://sourceforge.net/tracker/index.php?func=detail&aid=3392466&group_id=80013&atid=558446
9532     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9533     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9534                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9535     CXXFLAGS=$save_CXXFLAGS
9536     CPPFLAGS=$save_CPPFLAGS
9537     AC_LANG_POP([C++])
9538     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9541 dnl ===================================================================
9542 dnl Check for system expat
9543 dnl ===================================================================
9544 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9546 dnl ===================================================================
9547 dnl Check for system xmlsec
9548 dnl ===================================================================
9549 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.35])
9551 AC_MSG_CHECKING([whether to enable Embedded OpenType support])
9552 if test "$enable_eot" = "yes"; then
9553     ENABLE_EOT="TRUE"
9554     AC_DEFINE([ENABLE_EOT])
9555     AC_MSG_RESULT([yes])
9557     libo_CHECK_SYSTEM_MODULE([libeot],[LIBEOT],[libeot >= 0.01])
9558 else
9559     ENABLE_EOT=
9560     AC_MSG_RESULT([no])
9562 AC_SUBST([ENABLE_EOT])
9564 dnl ===================================================================
9565 dnl Check for DLP libs
9566 dnl ===================================================================
9567 REVENGE_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/librevenge/inc"
9568 AS_IF([test "$COM" = "MSC"],
9569       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9570       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9572 REVENGE_LIBS_internal="-L${librevenge_libdir} -lrevenge-0.0"
9573 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1])
9575 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9577 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9579 WPD_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/libwpd/inc"
9580 AS_IF([test "$COM" = "MSC"],
9581       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9582       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9584 WPD_LIBS_internal="-L${libwpd_libdir} -lwpd-0.10"
9585 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10])
9587 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9589 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9590 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.12])
9592 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9594 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9596 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9598 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.21])
9599 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.21])
9601 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9602 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10])
9604 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9606 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9607 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9609 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9611 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9613 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9615 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9617 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9618 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9620 dnl ===================================================================
9621 dnl Check for system lcms2
9622 dnl ===================================================================
9623 if test "$with_system_lcms2" != "yes"; then
9624     SYSTEM_LCMS2=
9626 LCMS2_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/lcms2/include"
9627 LCMS2_LIBS_internal="-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"
9628 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2])
9629 if test "$GCC" = "yes"; then
9630     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9632 if test "$COM" = "MSC"; then # override the above
9633     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9636 dnl ===================================================================
9637 dnl Check for system cppunit
9638 dnl ===================================================================
9639 if test "$_os" != "Android" ; then
9640     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9643 dnl ===================================================================
9644 dnl Check whether freetype is available
9646 dnl FreeType has 3 different kinds of versions
9647 dnl * release, like 2.4.10
9648 dnl * libtool, like 13.0.7 (this what pkg-config returns)
9649 dnl * soname
9650 dnl FreeType's docs/VERSION.DLL provides a table mapping between the three
9652 dnl 9.9.3 is 2.2.0
9653 dnl When the minimal version is at least 2.8.1, remove Skia's check down below.
9654 dnl ===================================================================
9655 FREETYPE_CFLAGS_internal="${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"
9656 if test "x$ac_config_site_64bit_host" = xYES; then
9657     FREETYPE_LIBS_internal="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9658 else
9659     FREETYPE_LIBS_internal="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9661 libo_CHECK_SYSTEM_MODULE([freetype],[FREETYPE],[freetype2 >= 9.9.3],,system,TRUE)
9663 # ===================================================================
9664 # Check for system libxslt
9665 # to prevent incompatibilities between internal libxml2 and external libxslt,
9666 # or vice versa, use with_system_libxml here
9667 # ===================================================================
9668 if test "$with_system_libxml" = "auto"; then
9669     case "$_os" in
9670     WINNT|iOS|Android)
9671         with_system_libxml="$with_system_libs"
9672         ;;
9673     Emscripten)
9674         with_system_libxml=no
9675         ;;
9676     *)
9677         if test "$enable_fuzzers" != "yes"; then
9678             with_system_libxml=yes
9679         else
9680             with_system_libxml=no
9681         fi
9682         ;;
9683     esac
9686 AC_MSG_CHECKING([which libxslt to use])
9687 if test "$with_system_libxml" = "yes"; then
9688     AC_MSG_RESULT([external])
9689     SYSTEM_LIBXSLT=TRUE
9690     if test "$_os" = "Darwin"; then
9691         dnl make sure to use SDK path
9692         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9693         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9694         dnl omit -L/usr/lib
9695         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9696         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9697     else
9698         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9699         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9700         FilterLibs "${LIBXSLT_LIBS}"
9701         LIBXSLT_LIBS="${filteredlibs}"
9702         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9703         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9704         FilterLibs "${LIBEXSLT_LIBS}"
9705         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9706     fi
9708     dnl Check for xsltproc
9709     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9710     if test "$XSLTPROC" = "no"; then
9711         AC_MSG_ERROR([xsltproc is required])
9712     fi
9713 else
9714     AC_MSG_RESULT([internal])
9715     SYSTEM_LIBXSLT=
9716     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9718 AC_SUBST(SYSTEM_LIBXSLT)
9719 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9720     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9722 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9724 AC_SUBST(LIBEXSLT_CFLAGS)
9725 AC_SUBST(LIBEXSLT_LIBS)
9726 AC_SUBST(LIBXSLT_CFLAGS)
9727 AC_SUBST(LIBXSLT_LIBS)
9728 AC_SUBST(XSLTPROC)
9730 # ===================================================================
9731 # Check for system libxml
9732 # ===================================================================
9733 AC_MSG_CHECKING([which libxml to use])
9734 if test "$with_system_libxml" = "yes"; then
9735     AC_MSG_RESULT([external])
9736     SYSTEM_LIBXML=TRUE
9737     if test "$_os" = "Darwin"; then
9738         dnl make sure to use SDK path
9739         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9740         dnl omit -L/usr/lib
9741         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9742     elif test $_os = iOS; then
9743         dnl make sure to use SDK path
9744         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9745         LIBXML_CFLAGS="-I$usr/include/libxml2"
9746         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9747     else
9748         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9749         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9750         FilterLibs "${LIBXML_LIBS}"
9751         LIBXML_LIBS="${filteredlibs}"
9752     fi
9754     dnl Check for xmllint
9755     AC_PATH_PROG(XMLLINT, xmllint, no)
9756     if test "$XMLLINT" = "no"; then
9757         AC_MSG_ERROR([xmllint is required])
9758     fi
9759 else
9760     AC_MSG_RESULT([internal])
9761     SYSTEM_LIBXML=
9762     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9763     if test "$COM" = "MSC"; then
9764         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9765     fi
9766     if test "$COM" = "MSC"; then
9767         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9768     else
9769         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9770         if test "$DISABLE_DYNLOADING" = TRUE; then
9771             LIBXML_LIBS="$LIBXML_LIBS -lm"
9772         fi
9773     fi
9774     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9776 AC_SUBST(SYSTEM_LIBXML)
9777 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9778     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9780 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9781 AC_SUBST(LIBXML_CFLAGS)
9782 AC_SUBST(LIBXML_LIBS)
9783 AC_SUBST(XMLLINT)
9785 # =====================================================================
9786 # Checking for a Python interpreter with version >= 3.3.
9787 # Optionally user can pass an option to configure, i. e.
9788 # ./configure PYTHON=/usr/bin/python
9789 # =====================================================================
9790 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9791     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9792     # unless PYTHON is defined as above which allows 'system'
9793     enable_python=internal
9795 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9796     if test -n "$PYTHON"; then
9797         PYTHON_FOR_BUILD=$PYTHON
9798     else
9799         # This allows a lack of system python with no error, we use internal one in that case.
9800         AM_PATH_PYTHON([3.3],, [:])
9801         # Clean PYTHON_VERSION checked below if cross-compiling
9802         PYTHON_VERSION=""
9803         if test "$PYTHON" != ":"; then
9804             PYTHON_FOR_BUILD=$PYTHON
9805         fi
9806     fi
9809 # Checks for Python to use for Pyuno
9810 AC_MSG_CHECKING([which Python to use for Pyuno])
9811 case "$enable_python" in
9812 no|disable)
9813     if test -z "$PYTHON_FOR_BUILD" -a "$cross_compiling" != yes; then
9814         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9815         # requirement from the choice whether to include Python stuff in the installer, but why
9816         # bother?
9817         AC_MSG_ERROR([Python is required at build time.])
9818     fi
9819     enable_python=no
9820     AC_MSG_RESULT([none])
9821     ;;
9822 ""|yes|auto)
9823     if test "$DISABLE_SCRIPTING" = TRUE; then
9824         if test -z "$PYTHON_FOR_BUILD" -a "$cross_compiling" != yes; then
9825             AC_MSG_ERROR([Python support can't be disabled without cross-compiling or a system python.])
9826         fi
9827         AC_MSG_RESULT([none, overridden by --disable-scripting])
9828         enable_python=no
9829     elif test $build_os = cygwin -o $build_os = wsl; then
9830         dnl When building on Windows we don't attempt to use any installed
9831         dnl "system"  Python.
9832         AC_MSG_RESULT([fully internal])
9833         enable_python=internal
9834     elif test "$cross_compiling" = yes; then
9835         AC_MSG_RESULT([system])
9836         enable_python=system
9837     else
9838         # Unset variables set by the above AM_PATH_PYTHON so that
9839         # we actually do check anew.
9840         AC_MSG_RESULT([])
9841         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
9842         AM_PATH_PYTHON([3.3],, [:])
9843         AC_MSG_CHECKING([which Python to use for Pyuno])
9844         if test "$PYTHON" = ":"; then
9845             if test -z "$PYTHON_FOR_BUILD"; then
9846                 AC_MSG_RESULT([fully internal])
9847             else
9848                 AC_MSG_RESULT([internal])
9849             fi
9850             enable_python=internal
9851         else
9852             AC_MSG_RESULT([system])
9853             enable_python=system
9854         fi
9855     fi
9856     ;;
9857 internal)
9858     AC_MSG_RESULT([internal])
9859     ;;
9860 fully-internal)
9861     AC_MSG_RESULT([fully internal])
9862     enable_python=internal
9863     ;;
9864 system)
9865     AC_MSG_RESULT([system])
9866     if test "$_os" = Darwin -a -z "$PYTHON"; then
9867         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
9868     fi
9869     ;;
9871     AC_MSG_ERROR([Incorrect --enable-python option])
9872     ;;
9873 esac
9875 if test $enable_python != no; then
9876     BUILD_TYPE="$BUILD_TYPE PYUNO"
9879 if test $enable_python = system; then
9880     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
9881         # Fallback: Accept these in the environment, or as set above
9882         # for MacOSX.
9883         :
9884     elif test "$cross_compiling" != yes; then
9885         # Unset variables set by the above AM_PATH_PYTHON so that
9886         # we actually do check anew.
9887         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
9888         # This causes an error if no python command is found
9889         AM_PATH_PYTHON([3.3])
9890         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
9891         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
9892         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
9893         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
9894         if test -z "$PKG_CONFIG"; then
9895             PYTHON_CFLAGS="-I$python_include"
9896             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9897         elif $PKG_CONFIG --exists python-$python_version-embed; then
9898             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
9899             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
9900         elif $PKG_CONFIG --exists python-$python_version; then
9901             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
9902             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
9903         else
9904             PYTHON_CFLAGS="-I$python_include"
9905             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9906         fi
9907         FilterLibs "${PYTHON_LIBS}"
9908         PYTHON_LIBS="${filteredlibs}"
9909     else
9910         dnl How to find out the cross-compilation Python installation path?
9911         AC_MSG_CHECKING([for python version])
9912         AS_IF([test -n "$PYTHON_VERSION"],
9913               [AC_MSG_RESULT([$PYTHON_VERSION])],
9914               [AC_MSG_RESULT([not found])
9915                AC_MSG_ERROR([no usable python found])])
9916         test -n "$PYTHON_CFLAGS" && break
9917     fi
9919     dnl Check if the headers really work
9920     save_CPPFLAGS="$CPPFLAGS"
9921     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
9922     AC_CHECK_HEADER(Python.h)
9923     CPPFLAGS="$save_CPPFLAGS"
9925     # let the PYTHON_FOR_BUILD match the same python installation that
9926     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
9927     # better for PythonTests.
9928     PYTHON_FOR_BUILD=$PYTHON
9931 if test "$with_lxml" != no; then
9932     if test -z "$PYTHON_FOR_BUILD"; then
9933         case $build_os in
9934             cygwin)
9935                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
9936                 ;;
9937             *)
9938                 if test "$cross_compiling" != yes ; then
9939                     BUILD_TYPE="$BUILD_TYPE LXML"
9940                 fi
9941                 ;;
9942         esac
9943     else
9944         AC_MSG_CHECKING([for python lxml])
9945         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
9946             AC_MSG_RESULT([yes])
9947         else
9948             case $build_os in
9949                 cygwin)
9950                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
9951                     ;;
9952                 *)
9953                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
9954                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
9955                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
9956                         else
9957                             BUILD_TYPE="$BUILD_TYPE LXML"
9958                             AC_MSG_RESULT([no, using internal lxml])
9959                         fi
9960                     else
9961                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
9962                     fi
9963                     ;;
9964             esac
9965         fi
9966     fi
9969 if test \( "$cross_compiling" = yes -a -z "$PYTHON_FOR_BUILD" \) -o "$enable_python" = internal; then
9970     SYSTEM_PYTHON=
9971     PYTHON_VERSION_MAJOR=3
9972     PYTHON_VERSION_MINOR=8
9973     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.18
9974     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
9975         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
9976     fi
9977     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
9979     # Embedded Python dies without Home set
9980     if test "$HOME" = ""; then
9981         export HOME=""
9982     fi
9985 dnl By now enable_python should be "system", "internal" or "no"
9986 case $enable_python in
9987 system)
9988     SYSTEM_PYTHON=TRUE
9990     if test "x$ac_cv_header_Python_h" != "xyes"; then
9991        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
9992     fi
9994     AC_LANG_PUSH(C)
9995     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
9996     AC_MSG_CHECKING([for correct python library version])
9997        AC_RUN_IFELSE([AC_LANG_SOURCE([[
9998 #include <Python.h>
10000 int main(int argc, char **argv) {
10001    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
10002    else return 1;
10004        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
10005     AC_LANG_POP(C)
10007     dnl FIXME Check if the Python library can be linked with, too?
10008     ;;
10010 internal)
10011     BUILD_TYPE="$BUILD_TYPE PYTHON"
10012     if test "$OS" = LINUX -o "$OS" = WNT ; then
10013         BUILD_TYPE="$BUILD_TYPE LIBFFI"
10014     fi
10015     ;;
10017     DISABLE_PYTHON=TRUE
10018     SYSTEM_PYTHON=
10019     ;;
10021     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
10022     ;;
10023 esac
10025 AC_SUBST(DISABLE_PYTHON)
10026 AC_SUBST(SYSTEM_PYTHON)
10027 AC_SUBST(PYTHON_CFLAGS)
10028 AC_SUBST(PYTHON_FOR_BUILD)
10029 AC_SUBST(PYTHON_LIBS)
10030 AC_SUBST(PYTHON_VERSION)
10031 AC_SUBST(PYTHON_VERSION_MAJOR)
10032 AC_SUBST(PYTHON_VERSION_MINOR)
10034 AC_MSG_CHECKING([whether to build LibreLogo])
10035 case "$enable_python" in
10036 no|disable)
10037     AC_MSG_RESULT([no; Python disabled])
10038     ;;
10040     if test "${enable_librelogo}" = "no"; then
10041         AC_MSG_RESULT([no])
10042     else
10043         AC_MSG_RESULT([yes])
10044         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
10045         AC_DEFINE([ENABLE_LIBRELOGO],1)
10046     fi
10047     ;;
10048 esac
10049 AC_SUBST(ENABLE_LIBRELOGO)
10051 ENABLE_MARIADBC=
10052 MARIADBC_MAJOR=1
10053 MARIADBC_MINOR=0
10054 MARIADBC_MICRO=2
10055 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
10056 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
10057     ENABLE_MARIADBC=TRUE
10058     AC_MSG_RESULT([yes])
10059     BUILD_TYPE="$BUILD_TYPE MARIADBC"
10060 else
10061     AC_MSG_RESULT([no])
10063 AC_SUBST(ENABLE_MARIADBC)
10064 AC_SUBST(MARIADBC_MAJOR)
10065 AC_SUBST(MARIADBC_MINOR)
10066 AC_SUBST(MARIADBC_MICRO)
10068 if test "$ENABLE_MARIADBC" = "TRUE"; then
10069     dnl ===================================================================
10070     dnl Check for system MariaDB
10071     dnl ===================================================================
10072     AC_MSG_CHECKING([which MariaDB to use])
10073     if test "$with_system_mariadb" = "yes"; then
10074         AC_MSG_RESULT([external])
10075         SYSTEM_MARIADB_CONNECTOR_C=TRUE
10076         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
10077         if test -z "$MARIADBCONFIG"; then
10078             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
10079             if test -z "$MARIADBCONFIG"; then
10080                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
10081                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
10082             fi
10083         fi
10084         AC_MSG_CHECKING([MariaDB version])
10085         MARIADB_VERSION=`$MARIADBCONFIG --version`
10086         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
10087         if test "$MARIADB_MAJOR" -ge "5"; then
10088             AC_MSG_RESULT([OK])
10089         else
10090             AC_MSG_ERROR([too old, use 5.0.x or later])
10091         fi
10092         AC_MSG_CHECKING([for MariaDB Client library])
10093         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
10094         if test "$COM_IS_CLANG" = TRUE; then
10095             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
10096         fi
10097         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
10098         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
10099         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
10100         dnl linux32:
10101         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
10102             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
10103             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
10104                 | sed -e 's|/lib64/|/lib/|')
10105         fi
10106         FilterLibs "${MARIADB_LIBS}"
10107         MARIADB_LIBS="${filteredlibs}"
10108         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
10109         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
10110         if test "$enable_bundle_mariadb" = "yes"; then
10111             AC_MSG_RESULT([yes])
10112             BUNDLE_MARIADB_CONNECTOR_C=TRUE
10113             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
10115 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
10117 /g' | grep -E '(mysqlclient|mariadb)')
10118             if test "$_os" = "Darwin"; then
10119                 LIBMARIADB=${LIBMARIADB}.dylib
10120             elif test "$_os" = "WINNT"; then
10121                 LIBMARIADB=${LIBMARIADB}.dll
10122             else
10123                 LIBMARIADB=${LIBMARIADB}.so
10124             fi
10125             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
10126             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
10127             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
10128                 AC_MSG_RESULT([found.])
10129                 PathFormat "$LIBMARIADB_PATH"
10130                 LIBMARIADB_PATH="$formatted_path"
10131             else
10132                 AC_MSG_ERROR([not found.])
10133             fi
10134         else
10135             AC_MSG_RESULT([no])
10136             BUNDLE_MARIADB_CONNECTOR_C=
10137         fi
10138     else
10139         AC_MSG_RESULT([internal])
10140         SYSTEM_MARIADB_CONNECTOR_C=
10141         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
10142         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
10143         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
10144     fi
10146     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
10147     AC_SUBST(MARIADB_CFLAGS)
10148     AC_SUBST(MARIADB_LIBS)
10149     AC_SUBST(LIBMARIADB)
10150     AC_SUBST(LIBMARIADB_PATH)
10151     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
10154 dnl ===================================================================
10155 dnl Check for system hsqldb
10156 dnl ===================================================================
10157 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
10158     AC_MSG_CHECKING([which hsqldb to use])
10159     if test "$with_system_hsqldb" = "yes"; then
10160         AC_MSG_RESULT([external])
10161         SYSTEM_HSQLDB=TRUE
10162         if test -z $HSQLDB_JAR; then
10163             HSQLDB_JAR=/usr/share/java/hsqldb.jar
10164         fi
10165         if ! test -f $HSQLDB_JAR; then
10166                AC_MSG_ERROR(hsqldb.jar not found.)
10167         fi
10168         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
10169         export HSQLDB_JAR
10170         if $PERL -e \
10171            'use Archive::Zip;
10172             my $file = "$ENV{'HSQLDB_JAR'}";
10173             my $zip = Archive::Zip->new( $file );
10174             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
10175             if ( $mf =~ m/Specification-Version: 1.8.*/ )
10176             {
10177                 push @l, split(/\n/, $mf);
10178                 foreach my $line (@l)
10179                 {
10180                     if ($line =~ m/Specification-Version:/)
10181                     {
10182                         ($t, $version) = split (/:/,$line);
10183                         $version =~ s/^\s//;
10184                         ($a, $b, $c, $d) = split (/\./,$version);
10185                         if ($c == "0" && $d > "8")
10186                         {
10187                             exit 0;
10188                         }
10189                         else
10190                         {
10191                             exit 1;
10192                         }
10193                     }
10194                 }
10195             }
10196             else
10197             {
10198                 exit 1;
10199             }'; then
10200             AC_MSG_RESULT([yes])
10201         else
10202             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
10203         fi
10204     else
10205         AC_MSG_RESULT([internal])
10206         SYSTEM_HSQLDB=
10207         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10208         NEED_ANT=TRUE
10209     fi
10210 else
10211     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
10212         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10213     fi
10215 AC_SUBST(SYSTEM_HSQLDB)
10216 AC_SUBST(HSQLDB_JAR)
10218 dnl ===================================================================
10219 dnl Check for PostgreSQL stuff
10220 dnl ===================================================================
10221 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
10222 if test "x$enable_postgresql_sdbc" != "xno"; then
10223     AC_MSG_RESULT([yes])
10224     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
10226     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
10227         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
10228     fi
10229     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
10230         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
10231     fi
10233     postgres_interface=""
10234     if test "$with_system_postgresql" = "yes"; then
10235         postgres_interface="external PostgreSQL"
10236         SYSTEM_POSTGRESQL=TRUE
10237         if test "$_os" = Darwin; then
10238             supp_path=''
10239             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
10240                 pg_supp_path="$P_SEP$d$pg_supp_path"
10241             done
10242         fi
10243         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
10244         if test -n "$PGCONFIG"; then
10245             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
10246             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
10247         else
10248             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
10249               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
10250               POSTGRESQL_LIB=$POSTGRESQL_LIBS
10251             ],[
10252               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
10253             ])
10254         fi
10255         FilterLibs "${POSTGRESQL_LIB}"
10256         POSTGRESQL_LIB="${filteredlibs}"
10257     else
10258         # if/when anything else than PostgreSQL uses Kerberos,
10259         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
10260         WITH_KRB5=
10261         WITH_GSSAPI=
10262         case "$_os" in
10263         Darwin)
10264             # macOS has system MIT Kerberos 5 since 10.4
10265             if test "$with_krb5" != "no"; then
10266                 WITH_KRB5=TRUE
10267                 save_LIBS=$LIBS
10268                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
10269                 # that the libraries where these functions are located on macOS will change, is it?
10270                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10271                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10272                 KRB5_LIBS=$LIBS
10273                 LIBS=$save_LIBS
10274                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10275                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10276                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10277                 LIBS=$save_LIBS
10278             fi
10279             if test "$with_gssapi" != "no"; then
10280                 WITH_GSSAPI=TRUE
10281                 save_LIBS=$LIBS
10282                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10283                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10284                 GSSAPI_LIBS=$LIBS
10285                 LIBS=$save_LIBS
10286             fi
10287             ;;
10288         WINNT)
10289             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
10290                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
10291             fi
10292             ;;
10293         Linux|GNU|*BSD|DragonFly)
10294             if test "$with_krb5" != "no"; then
10295                 WITH_KRB5=TRUE
10296                 save_LIBS=$LIBS
10297                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10298                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10299                 KRB5_LIBS=$LIBS
10300                 LIBS=$save_LIBS
10301                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10302                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10303                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10304                 LIBS=$save_LIBS
10305             fi
10306             if test "$with_gssapi" != "no"; then
10307                 WITH_GSSAPI=TRUE
10308                 save_LIBS=$LIBS
10309                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10310                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10311                 GSSAPI_LIBS=$LIBS
10312                 LIBS=$save_LIBS
10313             fi
10314             ;;
10315         *)
10316             if test "$with_krb5" = "yes"; then
10317                 WITH_KRB5=TRUE
10318                 save_LIBS=$LIBS
10319                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10320                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10321                 KRB5_LIBS=$LIBS
10322                 LIBS=$save_LIBS
10323                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10324                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10325                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10326                 LIBS=$save_LIBS
10327             fi
10328             if test "$with_gssapi" = "yes"; then
10329                 WITH_GSSAPI=TRUE
10330                 save_LIBS=$LIBS
10331                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10332                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10333                 LIBS=$save_LIBS
10334                 GSSAPI_LIBS=$LIBS
10335             fi
10336         esac
10338         if test -n "$with_libpq_path"; then
10339             SYSTEM_POSTGRESQL=TRUE
10340             postgres_interface="external libpq"
10341             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
10342             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
10343         else
10344             SYSTEM_POSTGRESQL=
10345             postgres_interface="internal"
10346             POSTGRESQL_LIB=""
10347             POSTGRESQL_INC="%OVERRIDE_ME%"
10348             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10349         fi
10350     fi
10352     AC_MSG_CHECKING([PostgreSQL C interface])
10353     AC_MSG_RESULT([$postgres_interface])
10355     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10356         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10357         save_CFLAGS=$CFLAGS
10358         save_CPPFLAGS=$CPPFLAGS
10359         save_LIBS=$LIBS
10360         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10361         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10362         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10363         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10364             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10365         CFLAGS=$save_CFLAGS
10366         CPPFLAGS=$save_CPPFLAGS
10367         LIBS=$save_LIBS
10368     fi
10369     BUILD_POSTGRESQL_SDBC=TRUE
10370 else
10371     AC_MSG_RESULT([no])
10373 AC_SUBST(WITH_KRB5)
10374 AC_SUBST(WITH_GSSAPI)
10375 AC_SUBST(GSSAPI_LIBS)
10376 AC_SUBST(KRB5_LIBS)
10377 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10378 AC_SUBST(SYSTEM_POSTGRESQL)
10379 AC_SUBST(POSTGRESQL_INC)
10380 AC_SUBST(POSTGRESQL_LIB)
10382 dnl ===================================================================
10383 dnl Check for Firebird stuff
10384 dnl ===================================================================
10385 ENABLE_FIREBIRD_SDBC=
10386 if test "$enable_firebird_sdbc" = "yes" ; then
10387     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10389     dnl ===================================================================
10390     dnl Check for system Firebird
10391     dnl ===================================================================
10392     AC_MSG_CHECKING([which Firebird to use])
10393     if test "$with_system_firebird" = "yes"; then
10394         AC_MSG_RESULT([external])
10395         SYSTEM_FIREBIRD=TRUE
10396         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10397         if test -z "$FIREBIRDCONFIG"; then
10398             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10399             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10400                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10401             ])
10402             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10403         else
10404             AC_MSG_NOTICE([fb_config found])
10405             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10406             AC_MSG_CHECKING([for Firebird Client library])
10407             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10408             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10409             FilterLibs "${FIREBIRD_LIBS}"
10410             FIREBIRD_LIBS="${filteredlibs}"
10411         fi
10412         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10413         AC_MSG_CHECKING([Firebird version])
10414         if test -n "${FIREBIRD_VERSION}"; then
10415             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10416             if test "$FIREBIRD_MAJOR" -ge "3"; then
10417                 AC_MSG_RESULT([OK])
10418             else
10419                 AC_MSG_ERROR([Ensure firebird >= 3 is installed])
10420             fi
10421         else
10422             save_CFLAGS="${CFLAGS}"
10423             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10424             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10425 #if defined(FB_API_VER) && FB_API_VER == 30
10426 int fb_api_is_30(void) { return 0; }
10427 #else
10428 #error "Wrong Firebird API version"
10429 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10430             CFLAGS="$save_CFLAGS"
10431         fi
10432         ENABLE_FIREBIRD_SDBC=TRUE
10433         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10434     elif test "$enable_database_connectivity" = no; then
10435         AC_MSG_RESULT([none])
10436     elif test "$cross_compiling" = "yes"; then
10437         AC_MSG_RESULT([none])
10438     else
10439         dnl Embedded Firebird has version 3.0
10440         dnl We need libatomic_ops for any non X86/X64 system
10441         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10442             dnl ===================================================================
10443             dnl Check for system libatomic_ops
10444             dnl ===================================================================
10445             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10446             if test "$with_system_libatomic_ops" = "yes"; then
10447                 SYSTEM_LIBATOMIC_OPS=TRUE
10448                 AC_CHECK_HEADERS(atomic_ops.h, [],
10449                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10450             else
10451                 SYSTEM_LIBATOMIC_OPS=
10452                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10453                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10454                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10455             fi
10456         fi
10458         AC_MSG_RESULT([internal])
10459         SYSTEM_FIREBIRD=
10460         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10461         FIREBIRD_LIBS="-lfbclient"
10463         if test "$with_system_libtommath" = "yes"; then
10464             SYSTEM_LIBTOMMATH=TRUE
10465             dnl check for tommath presence
10466             save_LIBS=$LIBS
10467             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10468             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10469             LIBS=$save_LIBS
10470         else
10471             SYSTEM_LIBTOMMATH=
10472             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10473             LIBTOMMATH_LIBS="-ltommath"
10474             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10475         fi
10477         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10478         ENABLE_FIREBIRD_SDBC=TRUE
10479         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10480     fi
10482 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10483 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10484 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10485 AC_SUBST(LIBATOMIC_OPS_LIBS)
10486 AC_SUBST(SYSTEM_FIREBIRD)
10487 AC_SUBST(FIREBIRD_CFLAGS)
10488 AC_SUBST(FIREBIRD_LIBS)
10489 AC_SUBST(SYSTEM_LIBTOMMATH)
10490 AC_SUBST(LIBTOMMATH_CFLAGS)
10491 AC_SUBST(LIBTOMMATH_LIBS)
10493 dnl ===================================================================
10494 dnl Check for system curl
10495 dnl ===================================================================
10496 libo_CHECK_SYSTEM_MODULE([curl],[CURL],[libcurl >= 7.68.0],enabled)
10498 dnl ===================================================================
10499 dnl Check for system boost
10500 dnl ===================================================================
10501 AC_MSG_CHECKING([which boost to use])
10502 if test "$with_system_boost" = "yes"; then
10503     AC_MSG_RESULT([external])
10504     SYSTEM_BOOST=TRUE
10505     AX_BOOST_BASE([1.66],,[AC_MSG_ERROR([no suitable Boost found])])
10506     AX_BOOST_DATE_TIME
10507     AX_BOOST_FILESYSTEM
10508     AX_BOOST_IOSTREAMS
10509     AX_BOOST_LOCALE
10510     AC_LANG_PUSH([C++])
10511     save_CXXFLAGS=$CXXFLAGS
10512     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10513     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10514        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10515     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10516        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10517     CXXFLAGS=$save_CXXFLAGS
10518     AC_LANG_POP([C++])
10519     # this is in m4/ax_boost_base.m4
10520     FilterLibs "${BOOST_LDFLAGS}"
10521     BOOST_LDFLAGS="${filteredlibs}"
10522 else
10523     AC_MSG_RESULT([internal])
10524     BUILD_TYPE="$BUILD_TYPE BOOST"
10525     SYSTEM_BOOST=
10526     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10527         # use warning-suppressing wrapper headers
10528         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10529     else
10530         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10531     fi
10533 AC_SUBST(SYSTEM_BOOST)
10535 dnl ===================================================================
10536 dnl Check for system mdds
10537 dnl ===================================================================
10538 MDDS_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/mdds/include"
10539 libo_CHECK_SYSTEM_MODULE([mdds],[MDDS],[mdds-2.0 >= 2.0.0])
10541 dnl ===================================================================
10542 dnl Check for system dragonbox
10543 dnl ===================================================================
10544 AC_MSG_CHECKING([which dragonbox to use])
10545 if test "$with_system_dragonbox" = "yes"; then
10546     AC_MSG_RESULT([external])
10547     SYSTEM_DRAGONBOX=TRUE
10548     AC_LANG_PUSH([C++])
10549     save_CPPFLAGS=$CPPFLAGS
10550     # This is where upstream installs to, unfortunately no .pc or so...
10551     DRAGONBOX_CFLAGS=-I/usr/include/dragonbox-1.1.3
10552     CPPFLAGS="$CPPFLAGS $DRAGONBOX_CFLAGS"
10553     AC_CHECK_HEADER([dragonbox/dragonbox.h], [],
10554        [AC_MSG_ERROR([dragonbox/dragonbox.h not found. install dragonbox])], [])
10555     AC_LANG_POP([C++])
10556     CPPFLAGS=$save_CPPFLAGS
10557 else
10558     AC_MSG_RESULT([internal])
10559     BUILD_TYPE="$BUILD_TYPE DRAGONBOX"
10560     SYSTEM_DRAGONBOX=
10562 AC_SUBST([SYSTEM_DRAGONBOX])
10563 AC_SUBST([DRAGONBOX_CFLAGS])
10565 dnl ===================================================================
10566 dnl Check for system libfixmath
10567 dnl ===================================================================
10568 AC_MSG_CHECKING([which libfixmath to use])
10569 if test "$with_system_libfixmath" = "yes"; then
10570     AC_MSG_RESULT([external])
10571     SYSTEM_LIBFIXMATH=TRUE
10572     AC_LANG_PUSH([C++])
10573     AC_CHECK_HEADER([libfixmath/fix16.hpp], [],
10574        [AC_MSG_ERROR([libfixmath/fix16.hpp not found. install libfixmath])], [])
10575     AC_CHECK_LIB([libfixmath], [fix16_mul], [:], [AC_MSG_ERROR(libfixmath lib not found or functional)], [])
10576     AC_LANG_POP([C++])
10577 else
10578     AC_MSG_RESULT([internal])
10579     SYSTEM_LIBFIXMATH=
10581 AC_SUBST([SYSTEM_LIBFIXMATH])
10583 dnl ===================================================================
10584 dnl Check for system glm
10585 dnl ===================================================================
10586 AC_MSG_CHECKING([which glm to use])
10587 if test "$with_system_glm" = "yes"; then
10588     AC_MSG_RESULT([external])
10589     SYSTEM_GLM=TRUE
10590     AC_LANG_PUSH([C++])
10591     AC_CHECK_HEADER([glm/glm.hpp], [],
10592        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10593     AC_LANG_POP([C++])
10594 else
10595     AC_MSG_RESULT([internal])
10596     BUILD_TYPE="$BUILD_TYPE GLM"
10597     SYSTEM_GLM=
10598     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10600 AC_SUBST([GLM_CFLAGS])
10601 AC_SUBST([SYSTEM_GLM])
10603 dnl ===================================================================
10604 dnl Check for system odbc
10605 dnl ===================================================================
10606 AC_MSG_CHECKING([which odbc headers to use])
10607 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
10608     AC_MSG_RESULT([external])
10609     SYSTEM_ODBC_HEADERS=TRUE
10611     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10612         save_CPPFLAGS=$CPPFLAGS
10613         find_winsdk
10614         PathFormat "$winsdktest"
10615         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"
10616         AC_CHECK_HEADER(sqlext.h, [],
10617             [AC_MSG_ERROR(odbc not found. install odbc)],
10618             [#include <windows.h>])
10619         CPPFLAGS=$save_CPPFLAGS
10620     else
10621         AC_CHECK_HEADER(sqlext.h, [],
10622             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10623     fi
10624 elif test "$enable_database_connectivity" = no; then
10625     AC_MSG_RESULT([none])
10626 else
10627     AC_MSG_RESULT([internal])
10628     SYSTEM_ODBC_HEADERS=
10629     BUILD_TYPE="$BUILD_TYPE IODBC"
10631 AC_SUBST(SYSTEM_ODBC_HEADERS)
10633 dnl ===================================================================
10634 dnl Check for system NSS
10635 dnl ===================================================================
10636 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10637     libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8],,system-if-linux)
10638     AC_DEFINE(HAVE_FEATURE_NSS)
10639     ENABLE_NSS=TRUE
10640 elif test $_os != iOS ; then
10641     with_tls=openssl
10643 AC_SUBST(ENABLE_NSS)
10645 dnl ===================================================================
10646 dnl Enable LDAP support
10647 dnl ===================================================================
10649 if test "$test_openldap" = yes; then
10650     AC_MSG_CHECKING([whether to enable LDAP support])
10651     if test "$enable_ldap" = yes -a \( "$ENABLE_NSS" = TRUE -o "$with_system_openldap" = yes \); then
10652         AC_MSG_RESULT([yes])
10653         ENABLE_LDAP=TRUE
10654     else
10655         if test "$enable_ldap" != "yes"; then
10656             AC_MSG_RESULT([no])
10657         else
10658             AC_MSG_RESULT([no (needs NSS or system openldap)])
10659         fi
10660     fi
10662 dnl ===================================================================
10663 dnl Check for system openldap
10664 dnl ===================================================================
10666     if test "$ENABLE_LDAP" = TRUE; then
10667         AC_MSG_CHECKING([which openldap library to use])
10668         if test "$with_system_openldap" = yes; then
10669             AC_MSG_RESULT([external])
10670             SYSTEM_OPENLDAP=TRUE
10671             AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10672             AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10673             AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10674         else
10675             AC_MSG_RESULT([internal])
10676             BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10677         fi
10678     fi
10681 AC_SUBST(ENABLE_LDAP)
10682 AC_SUBST(SYSTEM_OPENLDAP)
10684 dnl ===================================================================
10685 dnl Check for TLS/SSL and cryptographic implementation to use
10686 dnl ===================================================================
10687 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10688 if test -n "$with_tls"; then
10689     case $with_tls in
10690     openssl)
10691         AC_DEFINE(USE_TLS_OPENSSL)
10692         TLS=OPENSSL
10693         AC_MSG_RESULT([$TLS])
10695         if test "$enable_openssl" != "yes"; then
10696             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10697         fi
10699         # warn that OpenSSL has been selected but not all TLS code has this option
10700         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS])
10701         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS"
10702         ;;
10703     nss)
10704         AC_DEFINE(USE_TLS_NSS)
10705         TLS=NSS
10706         AC_MSG_RESULT([$TLS])
10707         ;;
10708     no)
10709         AC_MSG_RESULT([none])
10710         AC_MSG_WARN([Skipping TLS/SSL])
10711         ;;
10712     *)
10713         AC_MSG_RESULT([])
10714         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10715 openssl - OpenSSL
10716 nss - Mozilla's Network Security Services (NSS)
10717     ])
10718         ;;
10719     esac
10720 else
10721     # default to using NSS, it results in smaller oox lib
10722     AC_DEFINE(USE_TLS_NSS)
10723     TLS=NSS
10724     AC_MSG_RESULT([$TLS])
10726 AC_SUBST(TLS)
10728 dnl ===================================================================
10729 dnl Check for system sane
10730 dnl ===================================================================
10731 AC_MSG_CHECKING([which sane header to use])
10732 if test "$with_system_sane" = "yes"; then
10733     AC_MSG_RESULT([external])
10734     AC_CHECK_HEADER(sane/sane.h, [],
10735       [AC_MSG_ERROR(sane not found. install sane)], [])
10736 else
10737     AC_MSG_RESULT([internal])
10738     BUILD_TYPE="$BUILD_TYPE SANE"
10741 dnl ===================================================================
10742 dnl Check for system icu
10743 dnl ===================================================================
10744 ICU_MAJOR=72
10745 ICU_MINOR=1
10746 ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10747 ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10748 ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10749 ICU_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10750 ICU_LIBS_internal="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10751 libo_CHECK_SYSTEM_MODULE([icu],[ICU],[icu-i18n >= 4.6])
10752 if test "$SYSTEM_ICU" = TRUE; then
10753     AC_LANG_PUSH([C++])
10754     AC_MSG_CHECKING([for unicode/rbbi.h])
10755     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10756     AC_LANG_POP([C++])
10758     ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10759     ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10760     ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10762     if test "$ICU_MAJOR" -ge 50; then
10763         AC_MSG_NOTICE([Ignore ICU_MINOR as obviously the libraries don't include the minor version in their names any more])
10764         ICU_MINOR=
10765     fi
10767     if test "$CROSS_COMPILING" != TRUE; then
10768         # using the system icu tools can lead to version confusion, use the
10769         # ones from the build environment when cross-compiling
10770         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10771         if test -z "$SYSTEM_GENBRK"; then
10772             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10773         fi
10774         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10775         if test -z "$SYSTEM_GENCCODE"; then
10776             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10777         fi
10778         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10779         if test -z "$SYSTEM_GENCMN"; then
10780             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10781         fi
10782         if test "$ICU_MAJOR" -lt 49; then
10783             ICU_RECLASSIFIED_PREPEND_SET_EMPTY=
10784             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER=
10785             ICU_RECLASSIFIED_HEBREW_LETTER=
10786         fi
10787     fi
10789 if test "$ICU_MAJOR" -ge "59"; then
10790     # As of ICU 59 it defaults to typedef char16_t UChar; which is available
10791     # with -std=c++11 but not all external libraries can be built with that,
10792     # for those use a bit-compatible typedef uint16_t UChar; see
10793     # icu/source/common/unicode/umachine.h
10794     ICU_UCHAR_TYPE="-DUCHAR_TYPE=uint16_t"
10795 else
10796     ICU_UCHAR_TYPE=""
10798 AC_SUBST(SYSTEM_GENBRK)
10799 AC_SUBST(SYSTEM_GENCCODE)
10800 AC_SUBST(SYSTEM_GENCMN)
10801 AC_SUBST(ICU_MAJOR)
10802 AC_SUBST(ICU_MINOR)
10803 AC_SUBST(ICU_RECLASSIFIED_PREPEND_SET_EMPTY)
10804 AC_SUBST(ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER)
10805 AC_SUBST(ICU_RECLASSIFIED_HEBREW_LETTER)
10806 AC_SUBST(ICU_UCHAR_TYPE)
10808 dnl ==================================================================
10809 dnl Breakpad
10810 dnl ==================================================================
10811 DEFAULT_CRASHDUMP_VALUE="true"
10812 AC_MSG_CHECKING([whether to enable breakpad])
10813 if test "$enable_breakpad" != yes; then
10814     AC_MSG_RESULT([no])
10815 else
10816     AC_MSG_RESULT([yes])
10817     ENABLE_BREAKPAD="TRUE"
10818     AC_DEFINE(ENABLE_BREAKPAD)
10819     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
10820     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
10822     AC_MSG_CHECKING([for disable crash dump])
10823     if test "$enable_crashdump" = no; then
10824         DEFAULT_CRASHDUMP_VALUE="false"
10825         AC_MSG_RESULT([yes])
10826     else
10827        AC_MSG_RESULT([no])
10828     fi
10830     AC_MSG_CHECKING([for crashreport config])
10831     if test "$with_symbol_config" = "no"; then
10832         BREAKPAD_SYMBOL_CONFIG="invalid"
10833         AC_MSG_RESULT([no])
10834     else
10835         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
10836         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
10837         AC_MSG_RESULT([yes])
10838     fi
10839     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
10841 AC_SUBST(ENABLE_BREAKPAD)
10842 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
10844 dnl ===================================================================
10845 dnl Orcus
10846 dnl ===================================================================
10847 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.17 >= 0.17.2])
10848 if test "$with_system_orcus" != "yes"; then
10849     if test "$SYSTEM_BOOST" = "TRUE"; then
10850         dnl Link with Boost.System
10851         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
10852         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
10853         dnl in documentation has no effect.
10854         AX_BOOST_SYSTEM
10855     fi
10857 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
10858 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
10859 AC_SUBST([BOOST_SYSTEM_LIB])
10860 AC_SUBST(SYSTEM_LIBORCUS)
10862 dnl ===================================================================
10863 dnl HarfBuzz
10864 dnl ===================================================================
10865 harfbuzz_required_version=5.1.0
10867 GRAPHITE_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"
10868 GRAPHITE_LIBS_internal="-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"
10869 HARFBUZZ_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/harfbuzz/src"
10870 HARFBUZZ_LIBS_internal="-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"
10871 case "$_os" in
10872     Linux)
10873         libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3],,,TRUE)
10874         libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 0.9.42],,,TRUE)
10875         ;;
10876     *)
10877         libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3])
10878         libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 0.9.42])
10879         ;;
10880 esac
10882 if test "$COM" = "MSC"; then # override the above
10883     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
10884     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
10887 if test "$with_system_harfbuzz" = "yes"; then
10888     if test "$with_system_graphite" = "no"; then
10889         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
10890     fi
10891     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
10892     save_LIBS="$LIBS"
10893     save_CFLAGS="$CFLAGS"
10894     LIBS="$LIBS $HARFBUZZ_LIBS"
10895     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
10896     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
10897     LIBS="$save_LIBS"
10898     CFLAGS="$save_CFLAGS"
10899 else
10900     if test "$with_system_graphite" = "yes"; then
10901         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
10902     fi
10905 if test "$USING_X11" = TRUE; then
10906     AC_PATH_X
10907     AC_PATH_XTRA
10908     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
10910     if test -z "$x_includes"; then
10911         x_includes="default_x_includes"
10912     fi
10913     if test -z "$x_libraries"; then
10914         x_libraries="default_x_libraries"
10915     fi
10916     CFLAGS="$CFLAGS $X_CFLAGS"
10917     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
10918     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
10919 else
10920     x_includes="no_x_includes"
10921     x_libraries="no_x_libraries"
10924 if test "$USING_X11" = TRUE; then
10925     dnl ===================================================================
10926     dnl Check for extension headers
10927     dnl ===================================================================
10928     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
10929      [#include <X11/extensions/shape.h>])
10931     # vcl needs ICE and SM
10932     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
10933     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
10934         [AC_MSG_ERROR(ICE library not found)])
10935     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
10936     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
10937         [AC_MSG_ERROR(SM library not found)])
10940 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
10941     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
10942     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
10945 dnl ===================================================================
10946 dnl Check for system Xrender
10947 dnl ===================================================================
10948 AC_MSG_CHECKING([whether to use Xrender])
10949 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
10950     AC_MSG_RESULT([yes])
10951     PKG_CHECK_MODULES(XRENDER, xrender)
10952     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10953     FilterLibs "${XRENDER_LIBS}"
10954     XRENDER_LIBS="${filteredlibs}"
10955     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
10956       [AC_MSG_ERROR(libXrender not found or functional)], [])
10957     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
10958       [AC_MSG_ERROR(Xrender not found. install X)], [])
10959 else
10960     AC_MSG_RESULT([no])
10962 AC_SUBST(XRENDER_CFLAGS)
10963 AC_SUBST(XRENDER_LIBS)
10965 dnl ===================================================================
10966 dnl Check for XRandr
10967 dnl ===================================================================
10968 AC_MSG_CHECKING([whether to enable RandR support])
10969 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
10970     AC_MSG_RESULT([yes])
10971     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
10972     if test "$ENABLE_RANDR" != "TRUE"; then
10973         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
10974                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
10975         XRANDR_CFLAGS=" "
10976         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
10977           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
10978         XRANDR_LIBS="-lXrandr "
10979         ENABLE_RANDR="TRUE"
10980     fi
10981     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10982     FilterLibs "${XRANDR_LIBS}"
10983     XRANDR_LIBS="${filteredlibs}"
10984 else
10985     ENABLE_RANDR=""
10986     AC_MSG_RESULT([no])
10988 AC_SUBST(XRANDR_CFLAGS)
10989 AC_SUBST(XRANDR_LIBS)
10990 AC_SUBST(ENABLE_RANDR)
10992 if test -z "$with_webdav"; then
10993     with_webdav=$test_webdav
10996 AC_MSG_CHECKING([for WebDAV support])
10997 case "$with_webdav" in
10999     AC_MSG_RESULT([no])
11000     WITH_WEBDAV=""
11001     ;;
11003     AC_MSG_RESULT([yes])
11004     # curl is already mandatory (almost) and checked elsewhere
11005     if test "$enable_curl" = "no"; then
11006         AC_MSG_ERROR(["--with-webdav conflicts with --disable-curl"])
11007     fi
11008     WITH_WEBDAV=TRUE
11009     ;;
11010 esac
11011 AC_SUBST(WITH_WEBDAV)
11013 dnl ===================================================================
11014 dnl Check for disabling cve_tests
11015 dnl ===================================================================
11016 AC_MSG_CHECKING([whether to execute CVE tests])
11017 # If not explicitly enabled or disabled, default
11018 if test -z "$enable_cve_tests"; then
11019     case "$OS" in
11020     WNT)
11021         # Default cves off for Windows with its wild and wonderful
11022         # variety of AV software kicking in and panicking
11023         enable_cve_tests=no
11024         ;;
11025     *)
11026         # otherwise yes
11027         enable_cve_tests=yes
11028         ;;
11029     esac
11031 if test "$enable_cve_tests" = "no"; then
11032     AC_MSG_RESULT([no])
11033     DISABLE_CVE_TESTS=TRUE
11034     AC_SUBST(DISABLE_CVE_TESTS)
11035 else
11036     AC_MSG_RESULT([yes])
11039 dnl ===================================================================
11040 dnl Check for system openssl
11041 dnl ===================================================================
11042 ENABLE_OPENSSL=
11043 AC_MSG_CHECKING([whether to disable OpenSSL usage])
11044 if test "$enable_openssl" = "yes"; then
11045     AC_MSG_RESULT([no])
11046     ENABLE_OPENSSL=TRUE
11047     if test "$_os" = Darwin ; then
11048         # OpenSSL is deprecated when building for 10.7 or later.
11049         #
11050         # http://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
11051         # http://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
11053         with_system_openssl=no
11054         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
11055     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
11056             && test "$with_system_openssl" != "no"; then
11057         with_system_openssl=yes
11058         SYSTEM_OPENSSL=TRUE
11059         OPENSSL_CFLAGS=
11060         OPENSSL_LIBS="-lssl -lcrypto"
11061     else
11062         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
11063     fi
11064     if test "$with_system_openssl" = "yes"; then
11065         AC_MSG_CHECKING([whether openssl supports SHA512])
11066         AC_LANG_PUSH([C])
11067         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
11068             SHA512_CTX context;
11069 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
11070         AC_LANG_POP(C)
11071     fi
11072 else
11073     AC_MSG_RESULT([yes])
11075     # warn that although OpenSSL is disabled, system libraries may depend on it
11076     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
11077     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
11080 AC_SUBST([ENABLE_OPENSSL])
11082 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
11083     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
11084         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
11085         enable_cipher_openssl_backend=no
11086     else
11087         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
11088     fi
11090 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
11091 ENABLE_CIPHER_OPENSSL_BACKEND=
11092 if test "$enable_cipher_openssl_backend" = yes; then
11093     AC_MSG_RESULT([yes])
11094     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
11095 else
11096     AC_MSG_RESULT([no])
11098 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
11100 dnl ===================================================================
11101 dnl Select the crypto backends used by LO
11102 dnl ===================================================================
11104 if test "$build_crypto" = yes; then
11105     if test "$OS" = WNT; then
11106         BUILD_TYPE="$BUILD_TYPE CRYPTO_MSCAPI"
11107         AC_DEFINE([USE_CRYPTO_MSCAPI])
11108     elif test "$ENABLE_NSS" = TRUE; then
11109         BUILD_TYPE="$BUILD_TYPE CRYPTO_NSS"
11110         AC_DEFINE([USE_CRYPTO_NSS])
11111     fi
11114 dnl ===================================================================
11115 dnl Check for system redland
11116 dnl ===================================================================
11117 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
11118 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
11119 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
11120 if test "$with_system_redland" = "yes"; then
11121     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
11122             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
11123 else
11124     RAPTOR_MAJOR="0"
11125     RASQAL_MAJOR="3"
11126     REDLAND_MAJOR="0"
11128 AC_SUBST(RAPTOR_MAJOR)
11129 AC_SUBST(RASQAL_MAJOR)
11130 AC_SUBST(REDLAND_MAJOR)
11132 dnl ===================================================================
11133 dnl Check for system hunspell
11134 dnl ===================================================================
11135 AC_MSG_CHECKING([which libhunspell to use])
11136 if test "$with_system_hunspell" = "yes"; then
11137     AC_MSG_RESULT([external])
11138     SYSTEM_HUNSPELL=TRUE
11139     AC_LANG_PUSH([C++])
11140     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
11141     if test "$HUNSPELL_PC" != "TRUE"; then
11142         AC_CHECK_HEADER(hunspell.hxx, [],
11143             [
11144             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
11145             [AC_MSG_ERROR(hunspell headers not found.)], [])
11146             ], [])
11147         AC_CHECK_LIB([hunspell], [main], [:],
11148            [ AC_MSG_ERROR(hunspell library not found.) ], [])
11149         HUNSPELL_LIBS=-lhunspell
11150     fi
11151     AC_LANG_POP([C++])
11152     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11153     FilterLibs "${HUNSPELL_LIBS}"
11154     HUNSPELL_LIBS="${filteredlibs}"
11155 else
11156     AC_MSG_RESULT([internal])
11157     SYSTEM_HUNSPELL=
11158     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
11159     if test "$COM" = "MSC"; then
11160         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
11161     else
11162         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
11163     fi
11164     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
11166 AC_SUBST(SYSTEM_HUNSPELL)
11167 AC_SUBST(HUNSPELL_CFLAGS)
11168 AC_SUBST(HUNSPELL_LIBS)
11170 dnl ===================================================================
11171 dnl Check for system zxing
11172 dnl ===================================================================
11173 AC_MSG_CHECKING([whether to use zxing])
11174 if test "$enable_zxing" = "no"; then
11175     AC_MSG_RESULT([no])
11176     ENABLE_ZXING=
11177     SYSTEM_ZXING=
11178 else
11179     AC_MSG_RESULT([yes])
11180     ENABLE_ZXING=TRUE
11181     AC_MSG_CHECKING([which libzxing to use])
11182     if test "$with_system_zxing" = "yes"; then
11183         AC_MSG_RESULT([external])
11184         SYSTEM_ZXING=TRUE
11185         ZXING_CFLAGS=
11186         AC_LANG_PUSH([C++])
11187         save_CXXFLAGS=$CXXFLAGS
11188         save_IFS=$IFS
11189         IFS=$P_SEP
11190         for i in $CPLUS_INCLUDE_PATH /usr/include; do
11191             dnl Reset IFS as soon as possible, to avoid unexpected side effects (and the
11192             dnl "/usr/include" fallback makes sure we get here at least once; resetting rather than
11193             dnl unsetting follows the advice at <http://git.savannah.gnu.org/gitweb/?p=autoconf.git;
11194             dnl a=commit;h=e51c9919f2cf70185b7916ac040bc0bbfd0f743b> "Add recommendation on (not)
11195             dnl unsetting IFS."):
11196             IFS=$save_IFS
11197             dnl TODO: GCC and Clang treat empty paths in CPLUS_INCLUDE_PATH like ".", but we simply
11198             dnl ignore them here:
11199             if test -z "$i"; then
11200                 continue
11201             fi
11202             dnl TODO: White space in $i would cause problems:
11203             CXXFLAGS="$save_CXXFLAGS ${CXXFLAGS_CXX11} -I$i/ZXing"
11204             AC_CHECK_HEADER(MultiFormatWriter.h, [ZXING_CFLAGS=-I$i/ZXing; break],
11205                 [unset ac_cv_header_MultiFormatWriter_h], [#include <stdexcept>])
11206         done
11207         CXXFLAGS=$save_CXXFLAGS
11208         if test -z "$ZXING_CFLAGS"; then
11209             AC_MSG_ERROR(zxing headers not found.)
11210         fi
11211         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
11212             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
11213             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
11214         AC_LANG_POP([C++])
11215         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11216         FilterLibs "${ZXING_LIBS}"
11217         ZXING_LIBS="${filteredlibs}"
11218     else
11219         AC_MSG_RESULT([internal])
11220         SYSTEM_ZXING=
11221         BUILD_TYPE="$BUILD_TYPE ZXING"
11222     fi
11223     if test "$ENABLE_ZXING" = TRUE; then
11224         AC_DEFINE(ENABLE_ZXING)
11225     fi
11227 AC_SUBST(SYSTEM_ZXING)
11228 AC_SUBST(ENABLE_ZXING)
11229 AC_SUBST(ZXING_CFLAGS)
11230 AC_SUBST(ZXING_LIBS)
11232 dnl ===================================================================
11233 dnl Check for system box2d
11234 dnl ===================================================================
11235 AC_MSG_CHECKING([which box2d to use])
11236 if test "$with_system_box2d" = "yes"; then
11237     AC_MSG_RESULT([external])
11238     SYSTEM_BOX2D=TRUE
11239     AC_LANG_PUSH([C++])
11240     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
11241         [BOX2D_H_FOUND='FALSE'])
11242     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
11243         _BOX2D_LIB=box2d
11244         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
11245     else
11246         # fail this. there's no other alternative to check when we are here.
11247         AC_CHECK_HEADER([Box2D/Box2D.h], [],
11248             [AC_MSG_ERROR(box2d headers not found.)])
11249         _BOX2D_LIB=Box2D
11250         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11251     fi
11252     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11253         [ AC_MSG_ERROR(box2d library not found.) ], [])
11254     BOX2D_LIBS=-l$_BOX2D_LIB
11255     AC_LANG_POP([C++])
11256     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11257     FilterLibs "${BOX2D_LIBS}"
11258     BOX2D_LIBS="${filteredlibs}"
11259 else
11260     AC_MSG_RESULT([internal])
11261     SYSTEM_BOX2D=
11262     BUILD_TYPE="$BUILD_TYPE BOX2D"
11264 AC_SUBST(SYSTEM_BOX2D)
11265 AC_SUBST(BOX2D_CFLAGS)
11266 AC_SUBST(BOX2D_LIBS)
11268 dnl ===================================================================
11269 dnl Checking for altlinuxhyph
11270 dnl ===================================================================
11271 AC_MSG_CHECKING([which altlinuxhyph to use])
11272 if test "$with_system_altlinuxhyph" = "yes"; then
11273     AC_MSG_RESULT([external])
11274     SYSTEM_HYPH=TRUE
11275     AC_CHECK_HEADER(hyphen.h, [],
11276        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11277     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11278        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11279        [#include <hyphen.h>])
11280     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11281         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11282     if test -z "$HYPHEN_LIB"; then
11283         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11284            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11285     fi
11286     if test -z "$HYPHEN_LIB"; then
11287         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11288            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11289     fi
11290 else
11291     AC_MSG_RESULT([internal])
11292     SYSTEM_HYPH=
11293     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11294     if test "$COM" = "MSC"; then
11295         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11296     else
11297         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11298     fi
11300 AC_SUBST(SYSTEM_HYPH)
11301 AC_SUBST(HYPHEN_LIB)
11303 dnl ===================================================================
11304 dnl Checking for mythes
11305 dnl ===================================================================
11306 AC_MSG_CHECKING([which mythes to use])
11307 if test "$with_system_mythes" = "yes"; then
11308     AC_MSG_RESULT([external])
11309     SYSTEM_MYTHES=TRUE
11310     AC_LANG_PUSH([C++])
11311     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11312     if test "$MYTHES_PKGCONFIG" = "no"; then
11313         AC_CHECK_HEADER(mythes.hxx, [],
11314             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11315         AC_CHECK_LIB([mythes-1.2], [main], [:],
11316             [ MYTHES_FOUND=no], [])
11317     if test "$MYTHES_FOUND" = "no"; then
11318         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11319                 [ MYTHES_FOUND=no], [])
11320     fi
11321     if test "$MYTHES_FOUND" = "no"; then
11322         AC_MSG_ERROR([mythes library not found!.])
11323     fi
11324     fi
11325     AC_LANG_POP([C++])
11326     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11327     FilterLibs "${MYTHES_LIBS}"
11328     MYTHES_LIBS="${filteredlibs}"
11329 else
11330     AC_MSG_RESULT([internal])
11331     SYSTEM_MYTHES=
11332     BUILD_TYPE="$BUILD_TYPE MYTHES"
11333     if test "$COM" = "MSC"; then
11334         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11335     else
11336         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11337     fi
11339 AC_SUBST(SYSTEM_MYTHES)
11340 AC_SUBST(MYTHES_CFLAGS)
11341 AC_SUBST(MYTHES_LIBS)
11343 dnl ===================================================================
11344 dnl How should we build the linear programming solver ?
11345 dnl ===================================================================
11347 ENABLE_COINMP=
11348 AC_MSG_CHECKING([whether to build with CoinMP])
11349 if test "$enable_coinmp" != "no"; then
11350     ENABLE_COINMP=TRUE
11351     AC_MSG_RESULT([yes])
11352     if test "$with_system_coinmp" = "yes"; then
11353         SYSTEM_COINMP=TRUE
11354         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11355         FilterLibs "${COINMP_LIBS}"
11356         COINMP_LIBS="${filteredlibs}"
11357     else
11358         BUILD_TYPE="$BUILD_TYPE COINMP"
11359     fi
11360 else
11361     AC_MSG_RESULT([no])
11363 AC_SUBST(ENABLE_COINMP)
11364 AC_SUBST(SYSTEM_COINMP)
11365 AC_SUBST(COINMP_CFLAGS)
11366 AC_SUBST(COINMP_LIBS)
11368 ENABLE_LPSOLVE=
11369 AC_MSG_CHECKING([whether to build with lpsolve])
11370 if test "$enable_lpsolve" != "no"; then
11371     ENABLE_LPSOLVE=TRUE
11372     AC_MSG_RESULT([yes])
11373 else
11374     AC_MSG_RESULT([no])
11376 AC_SUBST(ENABLE_LPSOLVE)
11378 if test "$ENABLE_LPSOLVE" = TRUE; then
11379     AC_MSG_CHECKING([which lpsolve to use])
11380     if test "$with_system_lpsolve" = "yes"; then
11381         AC_MSG_RESULT([external])
11382         SYSTEM_LPSOLVE=TRUE
11383         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11384            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11385         save_LIBS=$LIBS
11386         # some systems need this. Like Ubuntu...
11387         AC_CHECK_LIB(m, floor)
11388         AC_CHECK_LIB(dl, dlopen)
11389         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11390             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11391         LIBS=$save_LIBS
11392     else
11393         AC_MSG_RESULT([internal])
11394         SYSTEM_LPSOLVE=
11395         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11396     fi
11398 AC_SUBST(SYSTEM_LPSOLVE)
11400 dnl ===================================================================
11401 dnl Checking for libexttextcat
11402 dnl ===================================================================
11403 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11404 if test "$with_system_libexttextcat" = "yes"; then
11405     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11407 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11409 dnl ===================================================================
11410 dnl Checking for libnumbertext
11411 dnl ===================================================================
11412 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11413 if test "$with_system_libnumbertext" = "yes"; then
11414     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11415     SYSTEM_LIBNUMBERTEXT=YES
11416 else
11417     SYSTEM_LIBNUMBERTEXT=
11419 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11420 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11422 dnl ***************************************
11423 dnl testing libc version for Linux...
11424 dnl ***************************************
11425 if test "$_os" = "Linux"; then
11426     AC_MSG_CHECKING([whether the libc is recent enough])
11427     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
11428     #include <features.h>
11429     #if defined(__GNU_LIBRARY__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1))
11430     #error glibc >= 2.1 is required
11431     #endif
11432     ]])],, [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([no, upgrade libc])])
11435 dnl =========================================
11436 dnl Check for uuidgen
11437 dnl =========================================
11438 if test "$_os" = "WINNT"; then
11439     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11440     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11441     UUIDGEN=uuidgen.exe
11442     AC_SUBST(UUIDGEN)
11443 else
11444     AC_PATH_PROG([UUIDGEN], [uuidgen])
11445     if test -z "$UUIDGEN"; then
11446         AC_MSG_WARN([uuid is needed for building installation sets])
11447     fi
11450 dnl ***************************************
11451 dnl Checking for bison and flex
11452 dnl ***************************************
11453 AC_PATH_PROG(BISON, bison)
11454 if test -z "$BISON"; then
11455     AC_MSG_ERROR([no bison found in \$PATH, install it])
11456 else
11457     AC_MSG_CHECKING([the bison version])
11458     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11459     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11460     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11461     dnl cause
11462     dnl
11463     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]
11464     dnl   typedef union YYSTYPE
11465     dnl           ~~~~~~^~~~~~~
11466     dnl
11467     dnl while at least 3.4.1 is know to be good:
11468     if test "$COMPILER_PLUGINS" = TRUE; then
11469         if test "$_bison_longver" -lt 2004; then
11470             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11471         fi
11472     else
11473         if test "$_bison_longver" -lt 2000; then
11474             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11475         fi
11476     fi
11478 AC_SUBST([BISON])
11480 AC_PATH_PROG(FLEX, flex)
11481 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11482     FLEX=`cygpath -m $FLEX`
11484 if test -z "$FLEX"; then
11485     AC_MSG_ERROR([no flex found in \$PATH, install it])
11486 else
11487     AC_MSG_CHECKING([the flex version])
11488     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11489     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11490         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11491     fi
11493 AC_SUBST([FLEX])
11495 AC_PATH_PROG(DIFF, diff)
11496 if test -z "$DIFF"; then
11497     AC_MSG_ERROR(["diff" not found in \$PATH, install it])
11499 AC_SUBST([DIFF])
11501 AC_PATH_PROG(UNIQ, uniq)
11502 if test -z "$UNIQ"; then
11503     AC_MSG_ERROR(["uniq" not found in \$PATH, install it])
11505 AC_SUBST([UNIQ])
11507 dnl ***************************************
11508 dnl Checking for patch
11509 dnl ***************************************
11510 AC_PATH_PROG(PATCH, patch)
11511 if test -z "$PATCH"; then
11512     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11515 dnl On Solaris or macOS, check if --with-gnu-patch was used
11516 if test "$_os" = "SunOS" -o "$_os" = "Darwin" -o "$_os" = "FreeBSD"; then
11517     if test -z "$with_gnu_patch"; then
11518         GNUPATCH=$PATCH
11519     else
11520         if test -x "$with_gnu_patch"; then
11521             GNUPATCH=$with_gnu_patch
11522         else
11523             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11524         fi
11525     fi
11527     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11528     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11529         AC_MSG_RESULT([yes])
11530     else
11531         if $GNUPATCH --version | grep "2\.0-.*-Apple" >/dev/null 2>/dev/null; then
11532             AC_MSG_RESULT([no, but accepted (Apple patch)])
11533             add_warning "patch utility is not GNU patch. Apple's patch should work OK, but it might experience issues where GNU patch doesn't."
11534         else
11535             AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11536         fi
11537     fi
11538 else
11539     GNUPATCH=$PATCH
11542 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11543     GNUPATCH=`cygpath -m $GNUPATCH`
11546 dnl We also need to check for --with-gnu-cp
11548 if test -z "$with_gnu_cp"; then
11549     # check the place where the good stuff is hidden on Solaris...
11550     if test -x /usr/gnu/bin/cp; then
11551         GNUCP=/usr/gnu/bin/cp
11552     else
11553         AC_PATH_PROGS(GNUCP, gnucp cp)
11554     fi
11555     if test -z $GNUCP; then
11556         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11557     fi
11558 else
11559     if test -x "$with_gnu_cp"; then
11560         GNUCP=$with_gnu_cp
11561     else
11562         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11563     fi
11566 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11567     GNUCP=`cygpath -m $GNUCP`
11570 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11571 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11572     AC_MSG_RESULT([yes])
11573 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11574     AC_MSG_RESULT([yes])
11575 else
11576     case "$build_os" in
11577     darwin*|netbsd*|openbsd*|freebsd*|dragonfly*|aix*)
11578         x_GNUCP=[\#]
11579         GNUCP=''
11580         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11581         ;;
11582     *)
11583         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11584         ;;
11585     esac
11588 AC_SUBST(GNUPATCH)
11589 AC_SUBST(GNUCP)
11590 AC_SUBST(x_GNUCP)
11592 dnl ***************************************
11593 dnl testing assembler path
11594 dnl ***************************************
11595 ML_EXE=""
11596 if test "$_os" = "WINNT"; then
11597     case "$WIN_HOST_ARCH" in
11598     x86) assembler=ml.exe ;;
11599     x64) assembler=ml64.exe ;;
11600     arm64) assembler=armasm64.exe ;;
11601     esac
11603     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11604     if test -f "$MSVC_HOST_PATH/$assembler"; then
11605         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11606         AC_MSG_RESULT([$ML_EXE])
11607     else
11608         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11609     fi
11612 AC_SUBST(ML_EXE)
11614 dnl ===================================================================
11615 dnl We need zip and unzip
11616 dnl ===================================================================
11617 AC_PATH_PROG(ZIP, zip)
11618 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11619 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11620     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],,)
11623 AC_PATH_PROG(UNZIP, unzip)
11624 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11626 dnl ===================================================================
11627 dnl Zip must be a specific type for different build types.
11628 dnl ===================================================================
11629 if test $build_os = cygwin; then
11630     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11631         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11632     fi
11635 dnl ===================================================================
11636 dnl We need touch with -h option support.
11637 dnl ===================================================================
11638 AC_PATH_PROG(TOUCH, touch)
11639 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11640 touch "$WARNINGS_FILE"
11641 if ! "$TOUCH" -h "$WARNINGS_FILE" 2>/dev/null > /dev/null; then
11642     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],,)
11645 dnl ===================================================================
11646 dnl Check for system epoxy
11647 dnl ===================================================================
11648 EPOXY_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/epoxy/include"
11649 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2])
11651 dnl ===================================================================
11652 dnl Set vcl option: coordinate device in double or sal_Int32
11653 dnl ===================================================================
11655 AC_MSG_CHECKING([Type to use for Device Pixel coordinates])
11656 if test "$enable_float_device_pixel" = yes; then
11657     AC_DEFINE(VCL_FLOAT_DEVICE_PIXEL)
11658     AC_MSG_RESULT([double])
11659 else
11660     AC_MSG_RESULT([sal_Int32])
11663 dnl ===================================================================
11664 dnl Show which vclplugs will be built.
11665 dnl ===================================================================
11666 R=""
11668 libo_ENABLE_VCLPLUG([gen])
11669 libo_ENABLE_VCLPLUG([gtk3])
11670 libo_ENABLE_VCLPLUG([gtk3_kde5])
11671 libo_ENABLE_VCLPLUG([gtk4])
11672 libo_ENABLE_VCLPLUG([kf5])
11673 libo_ENABLE_VCLPLUG([qt5])
11674 libo_ENABLE_VCLPLUG([qt6])
11676 if test "$_os" = "WINNT"; then
11677     R="$R win"
11678 elif test "$_os" = "Darwin"; then
11679     R="$R osx"
11680 elif test "$_os" = "iOS"; then
11681     R="ios"
11682 elif test "$_os" = Android; then
11683     R="android"
11686 build_vcl_plugins="$R"
11687 if test -z "$build_vcl_plugins"; then
11688     build_vcl_plugins=" none"
11690 AC_MSG_NOTICE([VCLplugs to be built:${build_vcl_plugins}])
11691 VCL_PLUGIN_INFO=$R
11692 AC_SUBST([VCL_PLUGIN_INFO])
11694 if test "$DISABLE_DYNLOADING" = TRUE -a -z "$DISABLE_GUI" -a \( -z "$R" -o $(echo "$R" | wc -w) -ne 1 \); then
11695     AC_MSG_ERROR([Can't build --disable-dynamic-loading without --disable-gui and a single VCL plugin"])
11698 dnl ===================================================================
11699 dnl Check for GTK libraries
11700 dnl ===================================================================
11702 GTK3_CFLAGS=""
11703 GTK3_LIBS=""
11704 ENABLE_GTKTILEDVIEWER=""
11705 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11706     if test "$with_system_cairo" = no; then
11707         add_warning 'Non-system cairo combined with gtk3 is known to cause trouble (eg. broken image in the splashscreen). Use --with-system-cairo unless you know what you are doing.'
11708     fi
11709     : ${with_system_cairo:=yes}
11710     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)
11711     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11712     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11713     FilterLibs "${GTK3_LIBS}"
11714     GTK3_LIBS="${filteredlibs}"
11716     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11717     if test "$with_system_epoxy" != "yes"; then
11718         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11719         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11720                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11721     fi
11722 elif test -n "$with_gtk3_build" -a "$OS" = "WNT"; then
11723     PathFormat "${with_gtk3_build}/lib/pkgconfig"
11724     if test "$build_os" = "cygwin"; then
11725         dnl cygwin's pkg-config does not recognize "C:/..."-style paths, only "/cygdrive/c/..."
11726         formatted_path_unix=`cygpath -au "$formatted_path_unix"`
11727     fi
11729     PKG_CONFIG_PATH="$formatted_path_unix"; export PKG_CONFIG_PATH
11730     PKG_CHECK_MODULES(GTK3, cairo gdk-3.0 gio-2.0 glib-2.0 gobject-2.0 gtk+-3.0)
11731     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11732     FilterLibs "${GTK3_LIBS}"
11733     GTK3_LIBS="${filteredlibs}"
11734     ENABLE_GTKTILEDVIEWER="yes"
11736 AC_SUBST(GTK3_LIBS)
11737 AC_SUBST(GTK3_CFLAGS)
11738 AC_SUBST(ENABLE_GTKTILEDVIEWER)
11740 GTK4_CFLAGS=""
11741 GTK4_LIBS=""
11742 if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then
11743     if test "$with_system_cairo" = no; then
11744         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11745     fi
11746     : ${with_system_cairo:=yes}
11747     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11748     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11749     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11750     FilterLibs "${GTK4_LIBS}"
11751     GTK4_LIBS="${filteredlibs}"
11753     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11754     if test "$with_system_epoxy" != "yes"; then
11755         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11756         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11757                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11758     fi
11760 AC_SUBST(GTK4_LIBS)
11761 AC_SUBST(GTK4_CFLAGS)
11763 if test "$enable_introspection" = yes; then
11764     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11765         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11766     else
11767         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
11768     fi
11771 dnl ===================================================================
11772 dnl check for dbus support
11773 dnl ===================================================================
11774 ENABLE_DBUS=""
11775 DBUS_CFLAGS=""
11776 DBUS_LIBS=""
11777 DBUS_GLIB_CFLAGS=""
11778 DBUS_GLIB_LIBS=""
11779 DBUS_HAVE_GLIB=""
11781 if test "$enable_dbus" = "no"; then
11782     test_dbus=no
11785 AC_MSG_CHECKING([whether to enable DBUS support])
11786 if test "$test_dbus" = "yes"; then
11787     ENABLE_DBUS="TRUE"
11788     AC_MSG_RESULT([yes])
11789     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
11790     AC_DEFINE(ENABLE_DBUS)
11791     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11792     FilterLibs "${DBUS_LIBS}"
11793     DBUS_LIBS="${filteredlibs}"
11795     # Glib is needed for BluetoothServer
11796     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
11797     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
11798         [
11799             DBUS_HAVE_GLIB="TRUE"
11800             AC_DEFINE(DBUS_HAVE_GLIB,1)
11801         ],
11802         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
11803     )
11804 else
11805     AC_MSG_RESULT([no])
11808 AC_SUBST(ENABLE_DBUS)
11809 AC_SUBST(DBUS_CFLAGS)
11810 AC_SUBST(DBUS_LIBS)
11811 AC_SUBST(DBUS_GLIB_CFLAGS)
11812 AC_SUBST(DBUS_GLIB_LIBS)
11813 AC_SUBST(DBUS_HAVE_GLIB)
11815 AC_MSG_CHECKING([whether to enable Impress remote control])
11816 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
11817     AC_MSG_RESULT([yes])
11818     ENABLE_SDREMOTE=TRUE
11819     SDREMOTE_ENTITLEMENT="      <key>com.apple.security.network.server</key>
11820         <true/>"
11821     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
11823     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
11824         # The Bluetooth code doesn't compile with macOS SDK 10.15
11825         if test "$enable_sdremote_bluetooth" = yes; then
11826             AC_MSG_ERROR([macOS SDK $macosx_sdk does not currently support --enable-sdremote-bluetooth])
11827         fi
11828         add_warning "not building the bluetooth part of the sdremote - used api was removed from macOS SDK 10.15"
11829         enable_sdremote_bluetooth=no
11830     fi
11831     # If not explicitly enabled or disabled, default
11832     if test -z "$enable_sdremote_bluetooth"; then
11833         case "$OS" in
11834         LINUX|MACOSX|WNT)
11835             # Default to yes for these
11836             enable_sdremote_bluetooth=yes
11837             ;;
11838         *)
11839             # otherwise no
11840             enable_sdremote_bluetooth=no
11841             ;;
11842         esac
11843     fi
11844     # $enable_sdremote_bluetooth is guaranteed non-empty now
11846     if test "$enable_sdremote_bluetooth" != "no"; then
11847         if test "$OS" = "LINUX"; then
11848             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
11849                 AC_MSG_RESULT([yes])
11850                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
11851                 dnl ===================================================================
11852                 dnl Check for system bluez
11853                 dnl ===================================================================
11854                 AC_MSG_CHECKING([which Bluetooth header to use])
11855                 if test "$with_system_bluez" = "yes"; then
11856                     AC_MSG_RESULT([external])
11857                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
11858                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
11859                     SYSTEM_BLUEZ=TRUE
11860                 else
11861                     AC_MSG_RESULT([internal])
11862                     SYSTEM_BLUEZ=
11863                 fi
11864             else
11865                 AC_MSG_RESULT([no, dbus disabled])
11866                 ENABLE_SDREMOTE_BLUETOOTH=
11867                 SYSTEM_BLUEZ=
11868             fi
11869         else
11870             AC_MSG_RESULT([yes])
11871             ENABLE_SDREMOTE_BLUETOOTH=TRUE
11872             SYSTEM_BLUEZ=
11873             SDREMOTE_ENTITLEMENT="$SDREMOTE_ENTITLEMENT
11874         <key>com.apple.security.device.bluetooth</key>
11875         <true/>"
11876         fi
11877     else
11878         AC_MSG_RESULT([no])
11879         ENABLE_SDREMOTE_BLUETOOTH=
11880         SYSTEM_BLUEZ=
11881     fi
11882 else
11883     ENABLE_SDREMOTE=
11884     SYSTEM_BLUEZ=
11885     AC_MSG_RESULT([no])
11887 AC_SUBST(ENABLE_SDREMOTE)
11888 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
11889 AC_SUBST(SDREMOTE_ENTITLEMENT)
11890 AC_SUBST(SYSTEM_BLUEZ)
11892 dnl ===================================================================
11893 dnl Check whether to enable GIO support
11894 dnl ===================================================================
11895 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11896     AC_MSG_CHECKING([whether to enable GIO support])
11897     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
11898         dnl Need at least 2.26 for the dbus support.
11899         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
11900                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
11901         if test "$ENABLE_GIO" = "TRUE"; then
11902             AC_DEFINE(ENABLE_GIO)
11903             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11904             FilterLibs "${GIO_LIBS}"
11905             GIO_LIBS="${filteredlibs}"
11906         fi
11907     else
11908         AC_MSG_RESULT([no])
11909     fi
11911 AC_SUBST(ENABLE_GIO)
11912 AC_SUBST(GIO_CFLAGS)
11913 AC_SUBST(GIO_LIBS)
11916 dnl ===================================================================
11918 SPLIT_APP_MODULES=""
11919 if test "$enable_split_app_modules" = "yes"; then
11920     SPLIT_APP_MODULES="TRUE"
11922 AC_SUBST(SPLIT_APP_MODULES)
11924 SPLIT_OPT_FEATURES=""
11925 if test "$enable_split_opt_features" = "yes"; then
11926     SPLIT_OPT_FEATURES="TRUE"
11928 AC_SUBST(SPLIT_OPT_FEATURES)
11930 dnl ===================================================================
11931 dnl Check whether the GStreamer libraries are available.
11932 dnl ===================================================================
11934 ENABLE_GSTREAMER_1_0=""
11936 if test "$test_gstreamer_1_0" = yes; then
11938     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
11939     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
11940         ENABLE_GSTREAMER_1_0="TRUE"
11941         AC_MSG_RESULT([yes])
11942         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
11943         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11944         FilterLibs "${GSTREAMER_1_0_LIBS}"
11945         GSTREAMER_1_0_LIBS="${filteredlibs}"
11946         AC_DEFINE(ENABLE_GSTREAMER_1_0)
11947     else
11948         AC_MSG_RESULT([no])
11949     fi
11951 AC_SUBST(GSTREAMER_1_0_CFLAGS)
11952 AC_SUBST(GSTREAMER_1_0_LIBS)
11953 AC_SUBST(ENABLE_GSTREAMER_1_0)
11955 ENABLE_OPENGL_TRANSITIONS=
11956 ENABLE_OPENGL_CANVAS=
11957 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
11958    : # disable
11959 elif test "$_os" = "Darwin"; then
11960     # We use frameworks on macOS, no need for detail checks
11961     ENABLE_OPENGL_TRANSITIONS=TRUE
11962     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11963     ENABLE_OPENGL_CANVAS=TRUE
11964 elif test $_os = WINNT; then
11965     ENABLE_OPENGL_TRANSITIONS=TRUE
11966     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11967     ENABLE_OPENGL_CANVAS=TRUE
11968 else
11969     if test "$USING_X11" = TRUE; then
11970         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
11971         ENABLE_OPENGL_TRANSITIONS=TRUE
11972         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11973         ENABLE_OPENGL_CANVAS=TRUE
11974     fi
11977 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
11978 AC_SUBST(ENABLE_OPENGL_CANVAS)
11980 dnl =================================================
11981 dnl Check whether to build with OpenCL support.
11982 dnl =================================================
11984 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
11985     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
11986     # platform (optional at run-time, used through clew).
11987     BUILD_TYPE="$BUILD_TYPE OPENCL"
11988     AC_DEFINE(HAVE_FEATURE_OPENCL)
11991 dnl =================================================
11992 dnl Check whether to build with dconf support.
11993 dnl =================================================
11995 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
11996     PKG_CHECK_MODULES([DCONF], [dconf >= 0.15.2], [], [
11997         if test "$enable_dconf" = yes; then
11998             AC_MSG_ERROR([dconf not found])
11999         else
12000             enable_dconf=no
12001         fi])
12003 AC_MSG_CHECKING([whether to enable dconf])
12004 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
12005     DCONF_CFLAGS=
12006     DCONF_LIBS=
12007     ENABLE_DCONF=
12008     AC_MSG_RESULT([no])
12009 else
12010     ENABLE_DCONF=TRUE
12011     AC_DEFINE(ENABLE_DCONF)
12012     AC_MSG_RESULT([yes])
12014 AC_SUBST([DCONF_CFLAGS])
12015 AC_SUBST([DCONF_LIBS])
12016 AC_SUBST([ENABLE_DCONF])
12018 # pdf import?
12019 AC_MSG_CHECKING([whether to build the PDF import feature])
12020 ENABLE_PDFIMPORT=
12021 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
12022     AC_MSG_RESULT([yes])
12023     ENABLE_PDFIMPORT=TRUE
12024     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
12025 else
12026     AC_MSG_RESULT([no])
12029 # Pdfium?
12030 AC_MSG_CHECKING([whether to build PDFium])
12031 ENABLE_PDFIUM=
12032 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
12033     AC_MSG_RESULT([yes])
12034     ENABLE_PDFIUM=TRUE
12035     BUILD_TYPE="$BUILD_TYPE PDFIUM"
12036 else
12037     AC_MSG_RESULT([no])
12039 AC_SUBST(ENABLE_PDFIUM)
12041 if test "$ENABLE_PDFIUM" = "TRUE"; then
12042     AC_MSG_CHECKING([which OpenJPEG library to use])
12043     if test "$with_system_openjpeg" = "yes"; then
12044         SYSTEM_OPENJPEG2=TRUE
12045         AC_MSG_RESULT([external])
12046         PKG_CHECK_MODULES( OPENJPEG2, libopenjp2 )
12047         OPENJPEG2_CFLAGS=$(printf '%s' "$OPENJPEG2_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12048         FilterLibs "${OPENJPEG2_LIBS}"
12049         OPENJPEG2_LIBS="${filteredlibs}"
12050     else
12051         SYSTEM_OPENJPEG2=FALSE
12052         AC_MSG_RESULT([internal])
12053     fi
12055     AC_MSG_CHECKING([which Abseil library to use])
12056     if test "$with_system_abseil" = "yes"; then
12057         AC_MSG_RESULT([external])
12058         SYSTEM_ABSEIL=TRUE
12059         AC_LANG_PUSH([C++])
12060         AC_CHECK_HEADER(absl/types/bad_optional_access.h, [],
12061                         [AC_MSG_ERROR(abseil headers not found.)], [])
12062         AC_CHECK_HEADER(absl/types/bad_variant_access.h, [],
12063                         [AC_MSG_ERROR(abseil headers not found.)], [])
12064         AC_CHECK_LIB([absl_bad_optional_access], [main], [],
12065                      [AC_MSG_ERROR([libabsl_bad_optional_access library not found.])])
12066         AC_CHECK_LIB([absl_bad_variant_access], [main], [],
12067                      [AC_MSG_ERROR([libabsl_bad_variant_access library not found.])])
12068         ABSEIL_LIBS="-labsl_bad_optional_access -labsl_bad_variant_access"
12069         AC_LANG_POP([C++])
12070         ABSEIL_CFLAGS=$(printf '%s' "$ABSEIL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12071         FilterLibs "${ABSEIL_LIBS}"
12072         ABSEIL_LIBS="${filteredlibs}"
12073     else
12074         AC_MSG_RESULT([internal])
12075     fi
12077 AC_SUBST(SYSTEM_OPENJPEG2)
12078 AC_SUBST(SYSTEM_ABSEIL)
12079 AC_SUBST(ABSEIL_CFLAGS)
12080 AC_SUBST(ABSEIL_LIBS)
12082 dnl ===================================================================
12083 dnl Check for poppler
12084 dnl ===================================================================
12085 ENABLE_POPPLER=
12086 AC_MSG_CHECKING([whether to build Poppler])
12087 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
12088     AC_MSG_RESULT([yes])
12089     ENABLE_POPPLER=TRUE
12090     AC_DEFINE(HAVE_FEATURE_POPPLER)
12091 else
12092     AC_MSG_RESULT([no])
12094 AC_SUBST(ENABLE_POPPLER)
12096 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
12097     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
12100 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
12101     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
12104 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
12105     dnl ===================================================================
12106     dnl Check for system poppler
12107     dnl ===================================================================
12108     AC_MSG_CHECKING([which PDF import poppler to use])
12109     if test "$with_system_poppler" = "yes"; then
12110         AC_MSG_RESULT([external])
12111         SYSTEM_POPPLER=TRUE
12112         PKG_CHECK_MODULES(POPPLER,[poppler >= 0.14 poppler-cpp])
12113         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12114         FilterLibs "${POPPLER_LIBS}"
12115         POPPLER_LIBS="${filteredlibs}"
12116     else
12117         AC_MSG_RESULT([internal])
12118         SYSTEM_POPPLER=
12119         BUILD_TYPE="$BUILD_TYPE POPPLER"
12120     fi
12121     AC_DEFINE([ENABLE_PDFIMPORT],1)
12123 AC_SUBST(ENABLE_PDFIMPORT)
12124 AC_SUBST(SYSTEM_POPPLER)
12125 AC_SUBST(POPPLER_CFLAGS)
12126 AC_SUBST(POPPLER_LIBS)
12128 # Skia?
12129 ENABLE_SKIA=
12130 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
12131     # Skia now requires at least freetype2 >= 2.8.1, which is less that what LO requires as system freetype.
12132     if test "$SYSTEM_FREETYPE" = TRUE; then
12133         PKG_CHECK_EXISTS(freetype2 >= 21.0.15, # 21.0.15 = 2.8.1
12134             [skia_freetype_ok=yes],
12135             [skia_freetype_ok=no])
12136     else # internal is ok
12137         skia_freetype_ok=yes
12138     fi
12139     AC_MSG_CHECKING([whether to build Skia])
12140     if test "$skia_freetype_ok" = "yes"; then
12141         if test "$enable_skia" = "debug"; then
12142             AC_MSG_RESULT([yes (debug)])
12143             ENABLE_SKIA_DEBUG=TRUE
12144         else
12145             AC_MSG_RESULT([yes])
12146             ENABLE_SKIA_DEBUG=
12147         fi
12148         ENABLE_SKIA=TRUE
12149         if test "$ENDIANNESS" = "big" && test "$ENABLE_SKIA" = "TRUE"; then
12150                 AC_MSG_ERROR([skia doesn't work/isn't supported upstream on big-endian. Use --disable-skia])
12151         fi
12153         AC_DEFINE(HAVE_FEATURE_SKIA)
12154         BUILD_TYPE="$BUILD_TYPE SKIA"
12156         if test "$OS" = "MACOSX"; then
12157             AC_DEFINE(SK_SUPPORT_GPU,1)
12158             AC_DEFINE(SK_METAL,1)
12159             SKIA_GPU=METAL
12160             AC_SUBST(SKIA_GPU)
12161         else
12162             AC_DEFINE(SK_SUPPORT_GPU,1)
12163             AC_DEFINE(SK_VULKAN,1)
12164             SKIA_GPU=VULKAN
12165             AC_SUBST(SKIA_GPU)
12166         fi
12167     else
12168         AC_MSG_RESULT([no (freetype too old)])
12169         add_warning "freetype version is too old for Skia library, at least 2.8.1 required, Skia support disabled"
12170     fi
12172 else
12173     AC_MSG_CHECKING([whether to build Skia])
12174     AC_MSG_RESULT([no])
12176 AC_SUBST(ENABLE_SKIA)
12177 AC_SUBST(ENABLE_SKIA_DEBUG)
12179 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
12180 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
12181 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
12182 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
12183 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
12184 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
12185 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
12186 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F=
12187 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
12188 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
12189 HAVE_LO_CLANG_DLLEXPORTINLINES=
12191 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE; then
12192     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12193         AC_MSG_CHECKING([for Clang])
12194         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
12195     else
12196         if test "$_os" = "WINNT"; then
12197             AC_MSG_CHECKING([for clang-cl])
12198             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
12199                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
12200             elif test -n "$PROGRAMFILES" -a -x "$(cygpath -u "$PROGRAMFILES/LLVM/bin/clang-cl.exe")"; then
12201                 LO_CLANG_CC=`win_short_path_for_make "$PROGRAMFILES/LLVM/bin/clang-cl.exe"`
12202             elif test -x "$(cygpath -u "c:/Program Files/LLVM/bin/clang-cl.exe")"; then
12203                 LO_CLANG_CC=`win_short_path_for_make "c:/Program Files/LLVM/bin/clang-cl.exe"`
12204             fi
12205             if test -n "$LO_CLANG_CC"; then
12206                 dnl explicitly set -m32/-m64
12207                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
12208                 LO_CLANG_CXX="$LO_CLANG_CC"
12209                 AC_MSG_RESULT([$LO_CLANG_CC])
12210             else
12211                 AC_MSG_RESULT([no])
12212             fi
12214             AC_MSG_CHECKING([the dependency generation prefix (clang.exe -showIncludes)])
12215             echo "#include <stdlib.h>" > conftest.c
12216             LO_CLANG_SHOWINCLUDES_PREFIX=`VSLANG=1033 $LO_CLANG_CC $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
12217                 grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
12218             rm -f conftest.c conftest.obj
12219             if test -z "$LO_CLANG_SHOWINCLUDES_PREFIX"; then
12220                 AC_MSG_ERROR([cannot determine the -showIncludes prefix])
12221             else
12222                 AC_MSG_RESULT(["$LO_CLANG_SHOWINCLUDES_PREFIX"])
12223             fi
12224         else
12225             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
12226             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
12227         fi
12228     fi
12229     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12230         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
12231         clang2_ver=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
12232         if test "$clang2_ver" -lt 50002; then
12233             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
12234             LO_CLANG_CC=
12235             LO_CLANG_CXX=
12236         fi
12237     fi
12238     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX" -a "$_os" = "WINNT"; then
12239         save_CXX="$CXX"
12240         CXX="$LO_CLANG_CXX"
12241         AC_MSG_CHECKING([whether $CXX supports -Zc:dllexportInlines-])
12242         AC_LANG_PUSH([C++])
12243         save_CXXFLAGS=$CXXFLAGS
12244         CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
12245         AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
12246                 HAVE_LO_CLANG_DLLEXPORTINLINES=TRUE
12247                 AC_MSG_RESULT([yes])
12248             ], [AC_MSG_RESULT([no])])
12249         CXXFLAGS=$save_CXXFLAGS
12250         AC_LANG_POP([C++])
12251         CXX="$save_CXX"
12252         if test -z "$HAVE_LO_CLANG_DLLEXPORTINLINES"; then
12253             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.])
12254         fi
12255     fi
12256     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
12257         # Skia is the default on Windows and Mac, so hard-require Clang.
12258         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
12259         if test "$_os" = "WINNT" -o "$_os" = "Darwin"; then
12260             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang, or use --disable-skia.])
12261         else
12262             AC_MSG_WARN([Clang compiler not found.])
12263         fi
12264     else
12266         save_CXX="$CXX"
12267         CXX="$LO_CLANG_CXX"
12268         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
12269         flag_sse2=-msse2
12270         flag_ssse3=-mssse3
12271         flag_sse41=-msse4.1
12272         flag_sse42=-msse4.2
12273         flag_avx=-mavx
12274         flag_avx2=-mavx2
12275         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
12276         flag_avx512f=-mavx512f
12277         flag_f16c=-mf16c
12278         flag_fma=-mfma
12280         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
12281         AC_LANG_PUSH([C++])
12282         save_CXXFLAGS=$CXXFLAGS
12283         CXXFLAGS="$CXXFLAGS $flag_sse2"
12284         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12285             #include <emmintrin.h>
12286             int main () {
12287                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12288                 c = _mm_xor_si128 (a, b);
12289                 return 0;
12290             }
12291             ])],
12292             [can_compile_sse2=yes],
12293             [can_compile_sse2=no])
12294         AC_LANG_POP([C++])
12295         CXXFLAGS=$save_CXXFLAGS
12296         AC_MSG_RESULT([${can_compile_sse2}])
12297         if test "${can_compile_sse2}" = "yes" ; then
12298             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
12299         fi
12301         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
12302         AC_LANG_PUSH([C++])
12303         save_CXXFLAGS=$CXXFLAGS
12304         CXXFLAGS="$CXXFLAGS $flag_ssse3"
12305         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12306             #include <tmmintrin.h>
12307             int main () {
12308                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12309                 c = _mm_maddubs_epi16 (a, b);
12310                 return 0;
12311             }
12312             ])],
12313             [can_compile_ssse3=yes],
12314             [can_compile_ssse3=no])
12315         AC_LANG_POP([C++])
12316         CXXFLAGS=$save_CXXFLAGS
12317         AC_MSG_RESULT([${can_compile_ssse3}])
12318         if test "${can_compile_ssse3}" = "yes" ; then
12319             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
12320         fi
12322         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
12323         AC_LANG_PUSH([C++])
12324         save_CXXFLAGS=$CXXFLAGS
12325         CXXFLAGS="$CXXFLAGS $flag_sse41"
12326         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12327             #include <smmintrin.h>
12328             int main () {
12329                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12330                 c = _mm_cmpeq_epi64 (a, b);
12331                 return 0;
12332             }
12333             ])],
12334             [can_compile_sse41=yes],
12335             [can_compile_sse41=no])
12336         AC_LANG_POP([C++])
12337         CXXFLAGS=$save_CXXFLAGS
12338         AC_MSG_RESULT([${can_compile_sse41}])
12339         if test "${can_compile_sse41}" = "yes" ; then
12340             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12341         fi
12343         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12344         AC_LANG_PUSH([C++])
12345         save_CXXFLAGS=$CXXFLAGS
12346         CXXFLAGS="$CXXFLAGS $flag_sse42"
12347         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12348             #include <nmmintrin.h>
12349             int main () {
12350                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12351                 c = _mm_cmpgt_epi64 (a, b);
12352                 return 0;
12353             }
12354             ])],
12355             [can_compile_sse42=yes],
12356             [can_compile_sse42=no])
12357         AC_LANG_POP([C++])
12358         CXXFLAGS=$save_CXXFLAGS
12359         AC_MSG_RESULT([${can_compile_sse42}])
12360         if test "${can_compile_sse42}" = "yes" ; then
12361             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12362         fi
12364         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12365         AC_LANG_PUSH([C++])
12366         save_CXXFLAGS=$CXXFLAGS
12367         CXXFLAGS="$CXXFLAGS $flag_avx"
12368         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12369             #include <immintrin.h>
12370             int main () {
12371                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12372                 c = _mm256_xor_ps(a, b);
12373                 return 0;
12374             }
12375             ])],
12376             [can_compile_avx=yes],
12377             [can_compile_avx=no])
12378         AC_LANG_POP([C++])
12379         CXXFLAGS=$save_CXXFLAGS
12380         AC_MSG_RESULT([${can_compile_avx}])
12381         if test "${can_compile_avx}" = "yes" ; then
12382             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12383         fi
12385         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12386         AC_LANG_PUSH([C++])
12387         save_CXXFLAGS=$CXXFLAGS
12388         CXXFLAGS="$CXXFLAGS $flag_avx2"
12389         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12390             #include <immintrin.h>
12391             int main () {
12392                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12393                 c = _mm256_maddubs_epi16(a, b);
12394                 return 0;
12395             }
12396             ])],
12397             [can_compile_avx2=yes],
12398             [can_compile_avx2=no])
12399         AC_LANG_POP([C++])
12400         CXXFLAGS=$save_CXXFLAGS
12401         AC_MSG_RESULT([${can_compile_avx2}])
12402         if test "${can_compile_avx2}" = "yes" ; then
12403             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12404         fi
12406         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12407         AC_LANG_PUSH([C++])
12408         save_CXXFLAGS=$CXXFLAGS
12409         CXXFLAGS="$CXXFLAGS $flag_avx512"
12410         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12411             #include <immintrin.h>
12412             int main () {
12413                 __m512i a = _mm512_loadu_si512(0);
12414                 __m512d v1 = _mm512_load_pd(0);
12415                 // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
12416                 __m512d v2 = _mm512_abs_pd(v1);
12417                 return 0;
12418             }
12419             ])],
12420             [can_compile_avx512=yes],
12421             [can_compile_avx512=no])
12422         AC_LANG_POP([C++])
12423         CXXFLAGS=$save_CXXFLAGS
12424         AC_MSG_RESULT([${can_compile_avx512}])
12425         if test "${can_compile_avx512}" = "yes" ; then
12426             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12427             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
12428         fi
12430         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12431         AC_LANG_PUSH([C++])
12432         save_CXXFLAGS=$CXXFLAGS
12433         CXXFLAGS="$CXXFLAGS $flag_f16c"
12434         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12435             #include <immintrin.h>
12436             int main () {
12437                 __m128i a = _mm_set1_epi32 (0);
12438                 __m128 c;
12439                 c = _mm_cvtph_ps(a);
12440                 return 0;
12441             }
12442             ])],
12443             [can_compile_f16c=yes],
12444             [can_compile_f16c=no])
12445         AC_LANG_POP([C++])
12446         CXXFLAGS=$save_CXXFLAGS
12447         AC_MSG_RESULT([${can_compile_f16c}])
12448         if test "${can_compile_f16c}" = "yes" ; then
12449             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12450         fi
12452         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12453         AC_LANG_PUSH([C++])
12454         save_CXXFLAGS=$CXXFLAGS
12455         CXXFLAGS="$CXXFLAGS $flag_fma"
12456         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12457             #include <immintrin.h>
12458             int main () {
12459                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12460                 d = _mm256_fmadd_ps(a, b, c);
12461                 return 0;
12462             }
12463             ])],
12464             [can_compile_fma=yes],
12465             [can_compile_fma=no])
12466         AC_LANG_POP([C++])
12467         CXXFLAGS=$save_CXXFLAGS
12468         AC_MSG_RESULT([${can_compile_fma}])
12469         if test "${can_compile_fma}" = "yes" ; then
12470             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12471         fi
12473         CXX="$save_CXX"
12474     fi
12477 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12479 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12480     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12481     AC_LANG_PUSH([C])
12482     save_CC="$CC"
12483     CC="$LO_CLANG_CC"
12484     save_CFLAGS=$CFLAGS
12485     CFLAGS="$CFLAGS --ccache-skip -O2 -Werror"
12486     dnl an empty program will do, we're checking the compiler flags
12487     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12488                       [use_ccache=yes], [use_ccache=no])
12489     CFLAGS=$save_CFLAGS
12490     CC=$save_CC
12491     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12492         AC_MSG_RESULT([yes])
12493     else
12494         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12495         AC_MSG_RESULT([no])
12496     fi
12497     AC_LANG_POP([C])
12499     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12500     AC_LANG_PUSH([C++])
12501     save_CXX="$CXX"
12502     CXX="$LO_CLANG_CXX"
12503     save_CXXFLAGS=$CXXFLAGS
12504     CXXFLAGS="$CXXFLAGS --ccache-skip -O2 -Werror"
12505     dnl an empty program will do, we're checking the compiler flags
12506     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12507                       [use_ccache=yes], [use_ccache=no])
12508     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12509         AC_MSG_RESULT([yes])
12510     else
12511         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12512         AC_MSG_RESULT([no])
12513     fi
12514     CXXFLAGS=$save_CXXFLAGS
12515     CXX=$save_CXX
12516     AC_LANG_POP([C++])
12519 AC_SUBST(LO_CLANG_CC)
12520 AC_SUBST(LO_CLANG_CXX)
12521 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12522 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12523 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12524 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12525 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12526 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12527 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12528 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F)
12529 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12530 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12531 AC_SUBST(LO_CLANG_SHOWINCLUDES_PREFIX)
12532 AC_SUBST(CLANG_USE_LD)
12533 AC_SUBST([HAVE_LO_CLANG_DLLEXPORTINLINES])
12535 SYSTEM_GPGMEPP=
12537 AC_MSG_CHECKING([whether to enable gpgmepp])
12538 if test "$enable_gpgmepp" = no; then
12539     AC_MSG_RESULT([no])
12540 elif test "$enable_mpl_subset" = "yes"; then
12541     AC_MSG_RESULT([no (MPL only])
12542 elif test "$enable_fuzzers" = "yes"; then
12543     AC_MSG_RESULT([no (oss-fuzz)])
12544 elif test \( \( "$_os" = "Linux" -o "$_os" = "Darwin" \) -a "$ENABLE_NSS" = TRUE \) -o "$_os" = "WINNT" ; then
12545     AC_MSG_RESULT([yes])
12546     dnl ===================================================================
12547     dnl Check for system gpgme
12548     dnl ===================================================================
12549     AC_MSG_CHECKING([which gpgmepp to use])
12550     if test "$with_system_gpgmepp" = "yes"; then
12551         AC_MSG_RESULT([external])
12552         SYSTEM_GPGMEPP=TRUE
12554         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12555         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12556             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp >= 1.14 development package])], [])
12557         AC_CHECK_HEADER(gpgme.h, [],
12558             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12559         AC_CHECK_LIB(gpgmepp, main, [],
12560             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12561         GPGMEPP_LIBS=-lgpgmepp
12562     else
12563         AC_MSG_RESULT([internal])
12564         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12566         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12567         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12568         if test "$_os" != "WINNT"; then
12569             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12570             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12571         fi
12572     fi
12573     ENABLE_GPGMEPP=TRUE
12574     AC_DEFINE([HAVE_FEATURE_GPGME])
12575     AC_PATH_PROG(GPG, gpg)
12576     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12577     # so let's exclude that manually for the moment
12578     if test -n "$GPG" -a "$_os" != "WINNT"; then
12579         # make sure we not only have a working gpgme, but a full working
12580         # gpg installation to run OpenPGP signature verification
12581         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12582     fi
12583     if test "$_os" = "Linux"; then
12584       uid=`id -u`
12585       AC_MSG_CHECKING([for /run/user/$uid])
12586       if test -d /run/user/$uid; then
12587         AC_MSG_RESULT([yes])
12588         AC_PATH_PROG(GPGCONF, gpgconf)
12590         # Older versions of gpgconf are not working as expected, since
12591         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12592         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12593         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12594         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12595         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12596         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12597         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12598           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12599           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12600           if $GPGCONF --dump-options > /dev/null ; then
12601             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12602               AC_MSG_RESULT([yes])
12603               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12604               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12605             else
12606               AC_MSG_RESULT([no])
12607             fi
12608           else
12609             AC_MSG_RESULT([no. missing or broken gpgconf?])
12610           fi
12611         else
12612           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12613         fi
12614       else
12615         AC_MSG_RESULT([no])
12616      fi
12617    fi
12618 else
12619     AC_MSG_RESULT([no (unsupported OS or missing NSS)])
12621 AC_SUBST(ENABLE_GPGMEPP)
12622 AC_SUBST(SYSTEM_GPGMEPP)
12623 AC_SUBST(GPG_ERROR_CFLAGS)
12624 AC_SUBST(GPG_ERROR_LIBS)
12625 AC_SUBST(LIBASSUAN_CFLAGS)
12626 AC_SUBST(LIBASSUAN_LIBS)
12627 AC_SUBST(GPGMEPP_CFLAGS)
12628 AC_SUBST(GPGMEPP_LIBS)
12630 AC_MSG_CHECKING([whether to build Java Websocket for the UNO remote websocket client])
12631 if test "$with_java" != "no"; then
12632     AC_MSG_RESULT([yes])
12633     ENABLE_JAVA_WEBSOCKET=TRUE
12634     BUILD_TYPE="$BUILD_TYPE JAVA_WEBSOCKET"
12635 else
12636     AC_MSG_RESULT([no])
12637     ENABLE_JAVA_WEBSOCKET=
12639 AC_SUBST(ENABLE_JAVA_WEBSOCKET)
12641 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12642 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12643     AC_MSG_RESULT([yes])
12644     ENABLE_MEDIAWIKI=TRUE
12645     BUILD_TYPE="$BUILD_TYPE XSLTML"
12646     if test  "x$with_java" = "xno"; then
12647         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12648     fi
12649 else
12650     AC_MSG_RESULT([no])
12651     ENABLE_MEDIAWIKI=
12652     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12654 AC_SUBST(ENABLE_MEDIAWIKI)
12656 AC_MSG_CHECKING([whether to build the Report Builder])
12657 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12658     AC_MSG_RESULT([yes])
12659     ENABLE_REPORTBUILDER=TRUE
12660     AC_MSG_CHECKING([which jfreereport libs to use])
12661     if test "$with_system_jfreereport" = "yes"; then
12662         SYSTEM_JFREEREPORT=TRUE
12663         AC_MSG_RESULT([external])
12664         if test -z $SAC_JAR; then
12665             SAC_JAR=/usr/share/java/sac.jar
12666         fi
12667         if ! test -f $SAC_JAR; then
12668              AC_MSG_ERROR(sac.jar not found.)
12669         fi
12671         if test -z $LIBXML_JAR; then
12672             if test -f /usr/share/java/libxml-1.0.0.jar; then
12673                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12674             elif test -f /usr/share/java/libxml.jar; then
12675                 LIBXML_JAR=/usr/share/java/libxml.jar
12676             else
12677                 AC_MSG_ERROR(libxml.jar replacement not found.)
12678             fi
12679         elif ! test -f $LIBXML_JAR; then
12680             AC_MSG_ERROR(libxml.jar not found.)
12681         fi
12683         if test -z $FLUTE_JAR; then
12684             if test -f /usr/share/java/flute-1.3.0.jar; then
12685                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12686             elif test -f /usr/share/java/flute.jar; then
12687                 FLUTE_JAR=/usr/share/java/flute.jar
12688             else
12689                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12690             fi
12691         elif ! test -f $FLUTE_JAR; then
12692             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12693         fi
12695         if test -z $JFREEREPORT_JAR; then
12696             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12697                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12698             elif test -f /usr/share/java/flow-engine.jar; then
12699                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12700             else
12701                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12702             fi
12703         elif ! test -f  $JFREEREPORT_JAR; then
12704                 AC_MSG_ERROR(jfreereport.jar not found.)
12705         fi
12707         if test -z $LIBLAYOUT_JAR; then
12708             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12709                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12710             elif test -f /usr/share/java/liblayout.jar; then
12711                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12712             else
12713                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12714             fi
12715         elif ! test -f $LIBLAYOUT_JAR; then
12716                 AC_MSG_ERROR(liblayout.jar not found.)
12717         fi
12719         if test -z $LIBLOADER_JAR; then
12720             if test -f /usr/share/java/libloader-1.0.0.jar; then
12721                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
12722             elif test -f /usr/share/java/libloader.jar; then
12723                 LIBLOADER_JAR=/usr/share/java/libloader.jar
12724             else
12725                 AC_MSG_ERROR(libloader.jar replacement not found.)
12726             fi
12727         elif ! test -f  $LIBLOADER_JAR; then
12728             AC_MSG_ERROR(libloader.jar not found.)
12729         fi
12731         if test -z $LIBFORMULA_JAR; then
12732             if test -f /usr/share/java/libformula-0.2.0.jar; then
12733                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
12734             elif test -f /usr/share/java/libformula.jar; then
12735                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
12736             else
12737                 AC_MSG_ERROR(libformula.jar replacement not found.)
12738             fi
12739         elif ! test -f $LIBFORMULA_JAR; then
12740                 AC_MSG_ERROR(libformula.jar not found.)
12741         fi
12743         if test -z $LIBREPOSITORY_JAR; then
12744             if test -f /usr/share/java/librepository-1.0.0.jar; then
12745                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
12746             elif test -f /usr/share/java/librepository.jar; then
12747                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
12748             else
12749                 AC_MSG_ERROR(librepository.jar replacement not found.)
12750             fi
12751         elif ! test -f $LIBREPOSITORY_JAR; then
12752             AC_MSG_ERROR(librepository.jar not found.)
12753         fi
12755         if test -z $LIBFONTS_JAR; then
12756             if test -f /usr/share/java/libfonts-1.0.0.jar; then
12757                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
12758             elif test -f /usr/share/java/libfonts.jar; then
12759                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
12760             else
12761                 AC_MSG_ERROR(libfonts.jar replacement not found.)
12762             fi
12763         elif ! test -f $LIBFONTS_JAR; then
12764                 AC_MSG_ERROR(libfonts.jar not found.)
12765         fi
12767         if test -z $LIBSERIALIZER_JAR; then
12768             if test -f /usr/share/java/libserializer-1.0.0.jar; then
12769                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
12770             elif test -f /usr/share/java/libserializer.jar; then
12771                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
12772             else
12773                 AC_MSG_ERROR(libserializer.jar replacement not found.)
12774             fi
12775         elif ! test -f $LIBSERIALIZER_JAR; then
12776                 AC_MSG_ERROR(libserializer.jar not found.)
12777         fi
12779         if test -z $LIBBASE_JAR; then
12780             if test -f /usr/share/java/libbase-1.0.0.jar; then
12781                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
12782             elif test -f /usr/share/java/libbase.jar; then
12783                 LIBBASE_JAR=/usr/share/java/libbase.jar
12784             else
12785                 AC_MSG_ERROR(libbase.jar replacement not found.)
12786             fi
12787         elif ! test -f $LIBBASE_JAR; then
12788             AC_MSG_ERROR(libbase.jar not found.)
12789         fi
12791     else
12792         AC_MSG_RESULT([internal])
12793         SYSTEM_JFREEREPORT=
12794         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
12795         NEED_ANT=TRUE
12796     fi
12797 else
12798     AC_MSG_RESULT([no])
12799     ENABLE_REPORTBUILDER=
12800     SYSTEM_JFREEREPORT=
12802 AC_SUBST(ENABLE_REPORTBUILDER)
12803 AC_SUBST(SYSTEM_JFREEREPORT)
12804 AC_SUBST(SAC_JAR)
12805 AC_SUBST(LIBXML_JAR)
12806 AC_SUBST(FLUTE_JAR)
12807 AC_SUBST(JFREEREPORT_JAR)
12808 AC_SUBST(LIBBASE_JAR)
12809 AC_SUBST(LIBLAYOUT_JAR)
12810 AC_SUBST(LIBLOADER_JAR)
12811 AC_SUBST(LIBFORMULA_JAR)
12812 AC_SUBST(LIBREPOSITORY_JAR)
12813 AC_SUBST(LIBFONTS_JAR)
12814 AC_SUBST(LIBSERIALIZER_JAR)
12816 # scripting provider for BeanShell?
12817 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
12818 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
12819     AC_MSG_RESULT([yes])
12820     ENABLE_SCRIPTING_BEANSHELL=TRUE
12822     dnl ===================================================================
12823     dnl Check for system beanshell
12824     dnl ===================================================================
12825     AC_MSG_CHECKING([which beanshell to use])
12826     if test "$with_system_beanshell" = "yes"; then
12827         AC_MSG_RESULT([external])
12828         SYSTEM_BSH=TRUE
12829         if test -z $BSH_JAR; then
12830             BSH_JAR=/usr/share/java/bsh.jar
12831         fi
12832         if ! test -f $BSH_JAR; then
12833             AC_MSG_ERROR(bsh.jar not found.)
12834         fi
12835     else
12836         AC_MSG_RESULT([internal])
12837         SYSTEM_BSH=
12838         BUILD_TYPE="$BUILD_TYPE BSH"
12839     fi
12840 else
12841     AC_MSG_RESULT([no])
12842     ENABLE_SCRIPTING_BEANSHELL=
12843     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
12845 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
12846 AC_SUBST(SYSTEM_BSH)
12847 AC_SUBST(BSH_JAR)
12849 # scripting provider for JavaScript?
12850 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
12851 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
12852     AC_MSG_RESULT([yes])
12853     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
12855     dnl ===================================================================
12856     dnl Check for system rhino
12857     dnl ===================================================================
12858     AC_MSG_CHECKING([which rhino to use])
12859     if test "$with_system_rhino" = "yes"; then
12860         AC_MSG_RESULT([external])
12861         SYSTEM_RHINO=TRUE
12862         if test -z $RHINO_JAR; then
12863             RHINO_JAR=/usr/share/java/js.jar
12864         fi
12865         if ! test -f $RHINO_JAR; then
12866             AC_MSG_ERROR(js.jar not found.)
12867         fi
12868     else
12869         AC_MSG_RESULT([internal])
12870         SYSTEM_RHINO=
12871         BUILD_TYPE="$BUILD_TYPE RHINO"
12872         NEED_ANT=TRUE
12873     fi
12874 else
12875     AC_MSG_RESULT([no])
12876     ENABLE_SCRIPTING_JAVASCRIPT=
12877     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
12879 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
12880 AC_SUBST(SYSTEM_RHINO)
12881 AC_SUBST(RHINO_JAR)
12883 # This is only used in Qt5/Qt6/KF5 checks to determine if /usr/lib64
12884 # paths should be added to library search path. So lets put all 64-bit
12885 # platforms there.
12886 supports_multilib=
12887 case "$host_cpu" in
12888 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el | loongarch64 | riscv64)
12889     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
12890         supports_multilib="yes"
12891     fi
12892     ;;
12894     ;;
12895 esac
12897 dnl ===================================================================
12898 dnl QT5 Integration
12899 dnl ===================================================================
12901 QT5_CFLAGS=""
12902 QT5_LIBS=""
12903 QMAKE5="qmake"
12904 MOC5="moc"
12905 QT5_GOBJECT_CFLAGS=""
12906 QT5_GOBJECT_LIBS=""
12907 QT5_HAVE_GOBJECT=""
12908 QT5_PLATFORMS_SRCDIR=""
12909 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12910         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
12911         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12912 then
12913     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
12914     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
12916     if test -n "$supports_multilib"; then
12917         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
12918     fi
12920     qt5_test_include="QtWidgets/qapplication.h"
12921     if test "$_os" = "Emscripten"; then
12922         qt5_test_library="libQt5Widgets.a"
12923     else
12924         qt5_test_library="libQt5Widgets.so"
12925     fi
12927     dnl Check for qmake5
12928     if test -n "$QT5DIR"; then
12929         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
12930     else
12931         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
12932     fi
12933     if test "$QMAKE5" = "no"; then
12934         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12935     else
12936         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
12937         if test -z "$qmake5_test_ver"; then
12938             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12939         fi
12940         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
12941         qt5_minimal_minor="6"
12942         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
12943             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
12944         else
12945             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
12946         fi
12947     fi
12949     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
12950     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
12951     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
12952     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
12954     AC_MSG_CHECKING([for Qt5 headers])
12955     qt5_incdir="no"
12956     for inc_dir in $qt5_incdirs; do
12957         if test -r "$inc_dir/$qt5_test_include"; then
12958             qt5_incdir="$inc_dir"
12959             break
12960         fi
12961     done
12962     AC_MSG_RESULT([$qt5_incdir])
12963     if test "x$qt5_incdir" = "xno"; then
12964         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12965     fi
12966     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
12967     AC_LANG_PUSH([C++])
12968     save_CPPFLAGS=$CPPFLAGS
12969     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
12970     AC_CHECK_HEADER(QtCore/qconfig.h, [],
12971         [AC_MSG_ERROR(qconfig.h header not found.)], [])
12972     CPPFLAGS=$save_CPPFLAGS
12973     AC_LANG_POP([C++])
12975     AC_MSG_CHECKING([for Qt5 libraries])
12976     qt5_libdir="no"
12977     for lib_dir in $qt5_libdirs; do
12978         if test -r "$lib_dir/$qt5_test_library"; then
12979             qt5_libdir="$lib_dir"
12980             break
12981         fi
12982     done
12983     AC_MSG_RESULT([$qt5_libdir])
12984     if test "x$qt5_libdir" = "xno"; then
12985         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12986     fi
12988     if test "$_os" = "Emscripten"; then
12989         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
12990             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
12991         fi
12992         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
12993             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
12994         fi
12996         EMSDK_LLVM_NM="$(em-config LLVM_ROOT)"/llvm-nm
12997         if ! test -x "$EMSDK_LLVM_NM"; then
12998             AC_MSG_ERROR([Missing llvm-nm expected to be found at "$EMSDK_LLVM_NM".])
12999         fi
13000         if test ! -f "${qt5_libdir}"/libQt5Gui.a; then
13001             AC_MSG_ERROR([No Qt5 WASM libQt5Gui.a in ${qt5_libdir}])
13002         fi
13003         QT5_WASM_SJLJ="`${EMSDK_LLVM_NM} "${qt5_libdir}"/libQt5Gui.a 2>/dev/null | $GREP emscripten_longjmp`"
13004         if test "$ENABLE_WASM_EXCEPTIONS" = TRUE -a -n "$QT5_WASM_SJLJ"; then
13005             AC_MSG_ERROR(['emscripten_longjmp' symbol found in libQt5Gui.a (missing '-s SUPPORT_LONGJMP=wasm'). See static/README.wasm.md.])
13006         fi
13007         if test "$ENABLE_WASM_EXCEPTIONS" != TRUE -a -z "$QT5_WASM_SJLJ"; then
13008             AC_MSG_ERROR(['emscripten_longjmp' symbol not found in libQt5Gui.a. You probably use an incompatible Qt build with '-s SUPPORT_LONGJMP=wasm'.])
13009         fi
13010     fi
13012     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13013     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13014     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13015     if test "$_os" = "Emscripten"; then
13016         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
13017     fi
13019     if test "$USING_X11" = TRUE; then
13020         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
13021         PKG_CHECK_MODULES(QT5_XCB_ICCCM,[xcb-icccm],[
13022             QT5_HAVE_XCB_ICCCM=1
13023             AC_DEFINE(QT5_HAVE_XCB_ICCCM)
13024         ],[
13025             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)])
13026             add_warning "XCB ICCCM not found, which is needed for Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)"
13027         ])
13028         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
13029         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
13030         QT5_USING_X11=1
13031         AC_DEFINE(QT5_USING_X11)
13032     fi
13034     dnl Check for Meta Object Compiler
13036     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
13037     if test "$MOC5" = "no"; then
13038         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13039 the root of your Qt installation by exporting QT5DIR before running "configure".])
13040     fi
13042     if test "$test_gstreamer_1_0" = yes; then
13043         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
13044                 QT5_HAVE_GOBJECT=1
13045                 AC_DEFINE(QT5_HAVE_GOBJECT)
13046             ],
13047             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
13048         )
13049     fi
13051 AC_SUBST(QT5_CFLAGS)
13052 AC_SUBST(QT5_LIBS)
13053 AC_SUBST(MOC5)
13054 AC_SUBST(QT5_GOBJECT_CFLAGS)
13055 AC_SUBST(QT5_GOBJECT_LIBS)
13056 AC_SUBST(QT5_HAVE_GOBJECT)
13057 AC_SUBST(QT5_PLATFORMS_SRCDIR)
13059 dnl ===================================================================
13060 dnl QT6 Integration
13061 dnl ===================================================================
13063 QT6_CFLAGS=""
13064 QT6_LIBS=""
13065 QMAKE6="qmake"
13066 MOC6="moc"
13067 QT6_PLATFORMS_SRCDIR=""
13068 if test \( "$test_qt6" = "yes" -a "$ENABLE_QT6" = "TRUE" \)
13069 then
13070     qt6_incdirs="$QT6INC /usr/include/qt6 /usr/include $x_includes"
13071     qt6_libdirs="$QT6LIB /usr/lib/qt6 /usr/lib $x_libraries"
13073     if test -n "$supports_multilib"; then
13074         qt6_libdirs="$qt6_libdirs /usr/lib64/qt6 /usr/lib64/qt /usr/lib64"
13075     fi
13077     qt6_test_include="QtWidgets/qapplication.h"
13078     if test "$_os" = "Emscripten"; then
13079         qt6_test_library="libQt6Widgets.a"
13080     else
13081         qt6_test_library="libQt6Widgets.so"
13082     fi
13084     dnl Check for qmake6
13085     if test -n "$QT6DIR"; then
13086         AC_PATH_PROG(QMAKE6, [qmake], no, [$QT6DIR/bin])
13087     else
13088         AC_PATH_PROGS(QMAKE6, [qmake-qt6 qmake6 qmake], no)
13089     fi
13090     if test "$QMAKE6" = "no"; then
13091         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13092     else
13093         qmake6_test_ver="`$QMAKE6 -v 2>&1 | $SED -n -e 's/^Using Qt version \(6\.[[0-9.]]\+\).*$/\1/p'`"
13094         if test -z "$qmake6_test_ver"; then
13095             AC_MSG_ERROR([Wrong qmake for Qt6 found. Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13096         fi
13097         AC_MSG_NOTICE([Detected Qt6 version: $qmake6_test_ver])
13098     fi
13100     qt6_incdirs="`$QMAKE6 -query QT_INSTALL_HEADERS` $qt6_incdirs"
13101     qt6_libdirs="`$QMAKE6 -query QT_INSTALL_LIBS` $qt6_libdirs"
13102     qt6_platformsdir="`$QMAKE6 -query QT_INSTALL_PLUGINS`/platforms"
13103     QT6_PLATFORMS_SRCDIR="$qt6_platformsdir"
13105     AC_MSG_CHECKING([for Qt6 headers])
13106     qt6_incdir="no"
13107     for inc_dir in $qt6_incdirs; do
13108         if test -r "$inc_dir/$qt6_test_include"; then
13109             qt6_incdir="$inc_dir"
13110             break
13111         fi
13112     done
13113     AC_MSG_RESULT([$qt6_incdir])
13114     if test "x$qt6_incdir" = "xno"; then
13115         AC_MSG_ERROR([Qt6 headers not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13116     fi
13117     # check for scenario: qt6-qtbase-devel-*.86_64 installed but host is i686
13118     AC_LANG_PUSH([C++])
13119     save_CPPFLAGS=$CPPFLAGS
13120     CPPFLAGS="${CPPFLAGS} -I${qt6_incdir}"
13121     AC_CHECK_HEADER(QtCore/qconfig.h, [],
13122         [AC_MSG_ERROR(qconfig.h header not found.)], [])
13123     CPPFLAGS=$save_CPPFLAGS
13124     AC_LANG_POP([C++])
13126     AC_MSG_CHECKING([for Qt6 libraries])
13127     qt6_libdir="no"
13128     for lib_dir in $qt6_libdirs; do
13129         if test -r "$lib_dir/$qt6_test_library"; then
13130             qt6_libdir="$lib_dir"
13131             break
13132         fi
13133     done
13134     AC_MSG_RESULT([$qt6_libdir])
13135     if test "x$qt6_libdir" = "xno"; then
13136         AC_MSG_ERROR([Qt6 libraries not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13137     fi
13139     if test "$_os" = "Emscripten"; then
13140         if test ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html ; then
13141             QT6_PLATFORMS_SRCDIR="${QT6_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
13142         fi
13143         if test ! -f "${qt6_platformsdir}"/libqwasm.a -o ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html; then
13144             AC_MSG_ERROR([No Qt6 WASM QPA plugin found in ${qt6_platformsdir} or ${QT6_PLATFORMS_SRCDIR}])
13145         fi
13146     fi
13148     QT6_CFLAGS="-I$qt6_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13149     QT6_CFLAGS=$(printf '%s' "$QT6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13150     QT6_LIBS="-L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
13151     if test "$_os" = "Emscripten"; then
13152         QT6_LIBS="$QT6_LIBS -lqtpcre2 -lQt6EventDispatcherSupport -lQt6FontDatabaseSupport -L${qt6_platformsdir} -lqwasm"
13153     fi
13155     if test "$USING_X11" = TRUE; then
13156         PKG_CHECK_MODULES(QT6_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for key modifier handling in X11.])])
13157         QT6_CFLAGS="$QT6_CFLAGS $QT6_XCB_CFLAGS"
13158         QT6_LIBS="$QT6_LIBS $QT6_XCB_LIBS"
13159         QT6_USING_X11=1
13160         AC_DEFINE(QT6_USING_X11)
13161     fi
13163     dnl Check for Meta Object Compiler
13165     for lib_dir in $qt6_libdirs; do
13166         if test -z "$qt6_libexec_dirs"; then
13167             qt6_libexec_dirs="$lib_dir/libexec"
13168         else
13169             qt6_libexec_dirs="$qt6_libexec_dirs:$lib_dir/libexec"
13170         fi
13171     done
13172     AC_PATH_PROGS( MOC6, [moc-qt6 moc], no, [`dirname $qt6_libdir`/libexec:$QT6DIR/libexec:$qt6_libexec_dirs:$PATH])
13173     if test "$MOC6" = "no"; then
13174         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13175 the root of your Qt installation by exporting QT6DIR before running "configure".])
13176     fi
13178 AC_SUBST(QT6_CFLAGS)
13179 AC_SUBST(QT6_LIBS)
13180 AC_SUBST(MOC6)
13181 AC_SUBST(QT6_PLATFORMS_SRCDIR)
13183 dnl ===================================================================
13184 dnl KF5 Integration
13185 dnl ===================================================================
13187 KF5_CFLAGS=""
13188 KF5_LIBS=""
13189 KF5_CONFIG="kf5-config"
13190 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13191         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13192 then
13193     if test "$OS" = "HAIKU"; then
13194         haiku_arch="`echo $RTL_ARCH | tr X x`"
13195         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13196         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13197     fi
13199     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
13200     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
13201     if test -n "$supports_multilib"; then
13202         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
13203     fi
13205     kf5_test_include="KF5/KIOFileWidgets/KFileWidget"
13206     kf5_test_library="libKF5KIOFileWidgets.so"
13207     kf5_libdirs="$qt5_libdir $kf5_libdirs"
13209     dnl kf5 KDE4 support compatibility installed
13210     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
13211     if test "$KF5_CONFIG" != "no"; then
13212         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
13213         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
13214     fi
13216     dnl Check for KF5 headers
13217     AC_MSG_CHECKING([for KF5 headers])
13218     kf5_incdir="no"
13219     for kf5_check in $kf5_incdirs; do
13220         if test -r "$kf5_check/$kf5_test_include"; then
13221             kf5_incdir="$kf5_check/KF5"
13222             break
13223         fi
13224     done
13225     AC_MSG_RESULT([$kf5_incdir])
13226     if test "x$kf5_incdir" = "xno"; then
13227         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13228     fi
13230     dnl Check for KF5 libraries
13231     AC_MSG_CHECKING([for KF5 libraries])
13232     kf5_libdir="no"
13233     for kf5_check in $kf5_libdirs; do
13234         if test -r "$kf5_check/$kf5_test_library"; then
13235             kf5_libdir="$kf5_check"
13236             break
13237         fi
13238     done
13240     AC_MSG_RESULT([$kf5_libdir])
13241     if test "x$kf5_libdir" = "xno"; then
13242         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13243     fi
13245     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"
13246     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13247     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13249     if test "$USING_X11" = TRUE; then
13250         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
13251     fi
13253     AC_LANG_PUSH([C++])
13254     save_CXXFLAGS=$CXXFLAGS
13255     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
13256     AC_MSG_CHECKING([whether KDE is >= 5.0])
13257        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13258 #include <kcoreaddons_version.h>
13260 int main(int argc, char **argv) {
13261        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
13262        else return 1;
13264        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13265     CXXFLAGS=$save_CXXFLAGS
13266     AC_LANG_POP([C++])
13268 AC_SUBST(KF5_CFLAGS)
13269 AC_SUBST(KF5_LIBS)
13271 dnl ===================================================================
13272 dnl Test whether to include Evolution 2 support
13273 dnl ===================================================================
13274 AC_MSG_CHECKING([whether to enable evolution 2 support])
13275 if test "$enable_evolution2" = yes; then
13276     AC_MSG_RESULT([yes])
13277     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
13278     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13279     FilterLibs "${GOBJECT_LIBS}"
13280     GOBJECT_LIBS="${filteredlibs}"
13281     ENABLE_EVOAB2="TRUE"
13282 else
13283     AC_MSG_RESULT([no])
13285 AC_SUBST(ENABLE_EVOAB2)
13286 AC_SUBST(GOBJECT_CFLAGS)
13287 AC_SUBST(GOBJECT_LIBS)
13289 dnl ===================================================================
13290 dnl Test which themes to include
13291 dnl ===================================================================
13292 AC_MSG_CHECKING([which themes to include])
13293 # if none given use default subset of available themes
13294 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
13295     with_theme="breeze breeze_dark breeze_dark_svg breeze_svg colibre colibre_svg colibre_dark colibre_dark_svg elementary elementary_svg karasa_jaga karasa_jaga_svg sifr sifr_svg sifr_dark sifr_dark_svg sukapura sukapura_dark sukapura_dark_svg sukapura_svg"
13298 WITH_THEMES=""
13299 if test "x$with_theme" != "xno"; then
13300     for theme in $with_theme; do
13301         case $theme in
13302         breeze|breeze_dark|breeze_dark_svg|breeze_svg|colibre|colibre_svg|colibre_dark|colibre_dark_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg|sifr|sifr_svg|sifr_dark|sifr_dark_svg|sukapura|sukapura_dark|sukapura_dark_svg|sukapura_svg) real_theme="$theme" ;;
13303         default) real_theme=colibre ;;
13304         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
13305         esac
13306         WITH_THEMES=`echo "$WITH_THEMES $real_theme"|tr '\ ' '\n'|sort|uniq|tr '\n' '\ '`
13307     done
13309 AC_MSG_RESULT([$WITH_THEMES])
13310 AC_SUBST([WITH_THEMES])
13311 # FIXME: remove this, and the convenience default->colibre remapping after a grace period
13312 for theme in $with_theme; do
13313     case $theme in
13314     default) AC_MSG_WARN([--with-theme=default is deprecated and will be removed, use --with-theme=colibre]) ;;
13315     *) ;;
13316     esac
13317 done
13319 ###############################################################################
13320 # Extensions checking
13321 ###############################################################################
13322 AC_MSG_CHECKING([for extensions integration])
13323 if test "x$enable_extension_integration" != "xno"; then
13324     WITH_EXTENSION_INTEGRATION=TRUE
13325     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
13326     AC_MSG_RESULT([yes, use integration])
13327 else
13328     WITH_EXTENSION_INTEGRATION=
13329     AC_MSG_RESULT([no, do not integrate])
13331 AC_SUBST(WITH_EXTENSION_INTEGRATION)
13333 dnl Should any extra extensions be included?
13334 dnl There are standalone tests for each of these below.
13335 WITH_EXTRA_EXTENSIONS=
13336 AC_SUBST([WITH_EXTRA_EXTENSIONS])
13338 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
13339 if test "x$with_java" != "xno"; then
13340     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
13343 AC_MSG_CHECKING([whether to build opens___.ttf])
13344 if test "$enable_build_opensymbol" = "yes"; then
13345     AC_MSG_RESULT([yes])
13346     AC_PATH_PROG(FONTFORGE, fontforge)
13347     if test -z "$FONTFORGE"; then
13348         AC_MSG_ERROR([fontforge not installed])
13349     fi
13350 else
13351     AC_MSG_RESULT([no])
13352     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
13354 AC_SUBST(FONTFORGE)
13356 dnl ===================================================================
13357 dnl Test whether to include fonts
13358 dnl ===================================================================
13359 AC_MSG_CHECKING([whether to include third-party fonts])
13360 if test "$with_fonts" != "no"; then
13361     AC_MSG_RESULT([yes])
13362     WITH_FONTS=TRUE
13363     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
13364     AC_DEFINE(HAVE_MORE_FONTS)
13365 else
13366     AC_MSG_RESULT([no])
13367     WITH_FONTS=
13368     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
13370 AC_SUBST(WITH_FONTS)
13372 dnl Test whether to include more Google Noto fonts
13373 dnl ===================================================================
13374 AC_MSG_CHECKING([whether to include more Google Noto fonts])
13375 if test "$enable_noto_font" = "" -o "$enable_noto_font" = "no" -o "$with_fonts" = "no"; then
13376     AC_MSG_RESULT([no])
13377     WITH_NOTO_FONT=
13378 else
13379     AC_MSG_RESULT([yes])
13380     WITH_NOTO_FONT=TRUE
13381     BUILD_TYPE="$BUILD_TYPE NOTO_FONT"
13382     SCPDEFS="$SCPDEFS -DWITH_NOTO_FONT"
13384 AC_SUBST(WITH_NOTO_FONT)
13386 dnl ===================================================================
13387 dnl Test whether to enable online update service
13388 dnl ===================================================================
13389 AC_MSG_CHECKING([whether to enable online update])
13390 ENABLE_ONLINE_UPDATE=
13391 ENABLE_ONLINE_UPDATE_MAR=
13392 UPDATE_CONFIG=
13393 if test "$enable_online_update" = ""; then
13394     AC_MSG_RESULT([no])
13395 else
13396     if test "$enable_online_update" = "mar"; then
13397         AC_MSG_RESULT([yes - MAR-based online update])
13398         ENABLE_ONLINE_UPDATE_MAR="TRUE"
13399         if test "$with_update_config" = ""; then
13400             AC_MSG_ERROR([mar based online updater needs an update config specified with "with-update-config])
13401         fi
13402         UPDATE_CONFIG="$with_update_config"
13403         AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
13404     elif test "$enable_online_update" = "yes"; then
13405         AC_MSG_RESULT([yes])
13406         ENABLE_ONLINE_UPDATE="TRUE"
13407     else
13408         AC_MSG_RESULT([no])
13409     fi
13411 AC_SUBST(ENABLE_ONLINE_UPDATE)
13412 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
13413 AC_SUBST(UPDATE_CONFIG)
13416 PRIVACY_POLICY_URL="$with_privacy_policy_url"
13417 if test "$ENABLE_ONLINE_UPDATE" = TRUE -o "$ENABLE_BREAKPAD" = "TRUE"; then
13418     if test "x$with_privacy_policy_url" = "xundefined"; then
13419         AC_MSG_FAILURE([online update or breakpad/crashreporting are enabled, but no --with-privacy-policy-url=... was provided])
13420     fi
13422 AC_SUBST(PRIVACY_POLICY_URL)
13423 dnl ===================================================================
13424 dnl Test whether we need bzip2
13425 dnl ===================================================================
13426 SYSTEM_BZIP2=
13427 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE"; then
13428     AC_MSG_CHECKING([whether to use system bzip2])
13429     if test "$with_system_bzip2" = yes; then
13430         SYSTEM_BZIP2=TRUE
13431         AC_MSG_RESULT([yes])
13432         PKG_CHECK_MODULES(BZIP2, bzip2)
13433         FilterLibs "${BZIP2_LIBS}"
13434         BZIP2_LIBS="${filteredlibs}"
13435     else
13436         AC_MSG_RESULT([no])
13437         BUILD_TYPE="$BUILD_TYPE BZIP2"
13438     fi
13440 AC_SUBST(SYSTEM_BZIP2)
13441 AC_SUBST(BZIP2_CFLAGS)
13442 AC_SUBST(BZIP2_LIBS)
13444 dnl ===================================================================
13445 dnl Test whether to enable extension update
13446 dnl ===================================================================
13447 AC_MSG_CHECKING([whether to enable extension update])
13448 ENABLE_EXTENSION_UPDATE=
13449 if test "x$enable_extension_update" = "xno"; then
13450     AC_MSG_RESULT([no])
13451 else
13452     AC_MSG_RESULT([yes])
13453     ENABLE_EXTENSION_UPDATE="TRUE"
13454     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
13455     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
13457 AC_SUBST(ENABLE_EXTENSION_UPDATE)
13460 dnl ===================================================================
13461 dnl Test whether to create MSI with LIMITUI=1 (silent install)
13462 dnl ===================================================================
13463 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
13464 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
13465     AC_MSG_RESULT([no])
13466     ENABLE_SILENT_MSI=
13467 else
13468     AC_MSG_RESULT([yes])
13469     ENABLE_SILENT_MSI=TRUE
13470     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
13472 AC_SUBST(ENABLE_SILENT_MSI)
13474 AC_MSG_CHECKING([whether and how to use Xinerama])
13475 if test "$_os" = "Linux" -o "$_os" = "FreeBSD"; then
13476     if test "$x_libraries" = "default_x_libraries"; then
13477         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
13478         if test "x$XINERAMALIB" = x; then
13479            XINERAMALIB="/usr/lib"
13480         fi
13481     else
13482         XINERAMALIB="$x_libraries"
13483     fi
13484     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13485         # we have both versions, let the user decide but use the dynamic one
13486         # per default
13487         USE_XINERAMA=TRUE
13488         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13489             XINERAMA_LINK=dynamic
13490         else
13491             XINERAMA_LINK=static
13492         fi
13493     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13494         # we have only the dynamic version
13495         USE_XINERAMA=TRUE
13496         XINERAMA_LINK=dynamic
13497     elif test -e "$XINERAMALIB/libXinerama.a"; then
13498         # static version
13499         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13500             USE_XINERAMA=TRUE
13501             XINERAMA_LINK=static
13502         else
13503             USE_XINERAMA=
13504             XINERAMA_LINK=none
13505         fi
13506     else
13507         # no Xinerama
13508         USE_XINERAMA=
13509         XINERAMA_LINK=none
13510     fi
13511     if test "$USE_XINERAMA" = "TRUE"; then
13512         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13513         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13514             [AC_MSG_ERROR(Xinerama header not found.)], [])
13515         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13516         if test "x$XEXTLIB" = x; then
13517            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13518         fi
13519         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13520         if test "$_os" = "FreeBSD"; then
13521             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13522         fi
13523         if test "$_os" = "Linux"; then
13524             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13525         fi
13526         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13527             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13528     else
13529         AC_MSG_RESULT([no, libXinerama not found or wrong architecture.])
13530     fi
13531 else
13532     USE_XINERAMA=
13533     XINERAMA_LINK=none
13534     AC_MSG_RESULT([no])
13536 AC_SUBST(USE_XINERAMA)
13537 AC_SUBST(XINERAMA_LINK)
13539 AC_MSG_CHECKING([whether to use non-standard RGBA32 cairo pixel order])
13540 if test -z "$enable_cairo_rgba" -a "$_os" = "Android"; then
13541     enable_cairo_rgba=yes
13543 if test "$enable_cairo_rgba" = yes; then
13544     AC_DEFINE(ENABLE_CAIRO_RGBA)
13545     ENABLE_CAIRO_RGBA=TRUE
13546     AC_MSG_RESULT([yes])
13547 else
13548     ENABLE_CAIRO_RGBA=
13549     AC_MSG_RESULT([no])
13551 AC_SUBST(ENABLE_CAIRO_RGBA)
13553 dnl ===================================================================
13554 dnl Test whether to build cairo or rely on the system version
13555 dnl ===================================================================
13557 if test "$test_cairo" = "yes"; then
13558     AC_MSG_CHECKING([whether to use the system cairo])
13560     : ${with_system_cairo:=$with_system_libs}
13561     if test "$with_system_cairo" = "yes" -a "$enable_cairo_rgba" != "yes"; then
13562         SYSTEM_CAIRO=TRUE
13563         AC_MSG_RESULT([yes])
13565         PKG_CHECK_MODULES( CAIRO, cairo >= 1.12.0 )
13566         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13567         FilterLibs "${CAIRO_LIBS}"
13568         CAIRO_LIBS="${filteredlibs}"
13570         if test "$test_xrender" = "yes"; then
13571             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13572             AC_LANG_PUSH([C])
13573             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13574 #ifdef PictStandardA8
13575 #else
13576       return fail;
13577 #endif
13578 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13580             AC_LANG_POP([C])
13581         fi
13582     else
13583         AC_MSG_RESULT([no])
13584         BUILD_TYPE="$BUILD_TYPE CAIRO"
13585     fi
13587     if test "$enable_cairo_canvas" != no; then
13588         AC_DEFINE(ENABLE_CAIRO_CANVAS)
13589         ENABLE_CAIRO_CANVAS=TRUE
13590     fi
13593 AC_SUBST(CAIRO_CFLAGS)
13594 AC_SUBST(CAIRO_LIBS)
13595 AC_SUBST(ENABLE_CAIRO_CANVAS)
13596 AC_SUBST(SYSTEM_CAIRO)
13598 dnl ===================================================================
13599 dnl Test whether to use avahi
13600 dnl ===================================================================
13601 if test "$_os" = "WINNT"; then
13602     # Windows uses bundled mDNSResponder
13603     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13604 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13605     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13606                       [ENABLE_AVAHI="TRUE"])
13607     AC_DEFINE(HAVE_FEATURE_AVAHI)
13608     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13609     FilterLibs "${AVAHI_LIBS}"
13610     AVAHI_LIBS="${filteredlibs}"
13613 AC_SUBST(ENABLE_AVAHI)
13614 AC_SUBST(AVAHI_CFLAGS)
13615 AC_SUBST(AVAHI_LIBS)
13617 dnl ===================================================================
13618 dnl Test whether to use liblangtag
13619 dnl ===================================================================
13620 SYSTEM_LIBLANGTAG=
13621 AC_MSG_CHECKING([whether to use system liblangtag])
13622 if test "$with_system_liblangtag" = yes; then
13623     SYSTEM_LIBLANGTAG=TRUE
13624     AC_MSG_RESULT([yes])
13625     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
13626     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
13627     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
13628     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13629     FilterLibs "${LIBLANGTAG_LIBS}"
13630     LIBLANGTAG_LIBS="${filteredlibs}"
13631 else
13632     SYSTEM_LIBLANGTAG=
13633     AC_MSG_RESULT([no])
13634     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
13635     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
13636     if test "$COM" = "MSC"; then
13637         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
13638     else
13639         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
13640     fi
13642 AC_SUBST(SYSTEM_LIBLANGTAG)
13643 AC_SUBST(LIBLANGTAG_CFLAGS)
13644 AC_SUBST(LIBLANGTAG_LIBS)
13646 dnl ===================================================================
13647 dnl Test whether to build libpng or rely on the system version
13648 dnl ===================================================================
13650 LIBPNG_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/libpng"
13651 LIBPNG_LIBS_internal="-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"
13652 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng])
13654 dnl ===================================================================
13655 dnl Test whether to build libtiff or rely on the system version
13656 dnl ===================================================================
13658 libo_CHECK_SYSTEM_MODULE([libtiff],[LIBTIFF],[libtiff-4])
13660 dnl ===================================================================
13661 dnl Test whether to build libwebp or rely on the system version
13662 dnl ===================================================================
13664 libo_CHECK_SYSTEM_MODULE([libwebp],[LIBWEBP],[libwebp])
13666 dnl ===================================================================
13667 dnl Check for runtime JVM search path
13668 dnl ===================================================================
13669 if test "$ENABLE_JAVA" != ""; then
13670     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
13671     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
13672         AC_MSG_RESULT([yes])
13673         if ! test -d "$with_jvm_path"; then
13674             AC_MSG_ERROR(["$with_jvm_path" not a directory])
13675         fi
13676         if ! test -d "$with_jvm_path"jvm; then
13677             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
13678         fi
13679         JVM_ONE_PATH_CHECK="$with_jvm_path"
13680         AC_SUBST(JVM_ONE_PATH_CHECK)
13681     else
13682         AC_MSG_RESULT([no])
13683     fi
13686 dnl ===================================================================
13687 dnl Test for the presence of Ant and that it works
13688 dnl ===================================================================
13690 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
13691     ANT_HOME=; export ANT_HOME
13692     WITH_ANT_HOME=; export WITH_ANT_HOME
13693     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
13694         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
13695             if test "$_os" = "WINNT"; then
13696                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
13697             else
13698                 with_ant_home="$LODE_HOME/opt/ant"
13699             fi
13700         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
13701             with_ant_home="$LODE_HOME/opt/ant"
13702         fi
13703     fi
13704     if test -z "$with_ant_home"; then
13705         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
13706     else
13707         if test "$_os" = "WINNT"; then
13708             # AC_PATH_PROGS needs unix path
13709             with_ant_home=`cygpath -u "$with_ant_home"`
13710         fi
13711         AbsolutePath "$with_ant_home"
13712         with_ant_home=$absolute_path
13713         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
13714         WITH_ANT_HOME=$with_ant_home
13715         ANT_HOME=$with_ant_home
13716     fi
13718     if test -z "$ANT"; then
13719         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
13720     else
13721         # resolve relative or absolute symlink
13722         while test -h "$ANT"; do
13723             a_cwd=`pwd`
13724             a_basename=`basename "$ANT"`
13725             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
13726             cd "`dirname "$ANT"`"
13727             cd "`dirname "$a_script"`"
13728             ANT="`pwd`"/"`basename "$a_script"`"
13729             cd "$a_cwd"
13730         done
13732         AC_MSG_CHECKING([if $ANT works])
13733         mkdir -p conftest.dir
13734         a_cwd=$(pwd)
13735         cd conftest.dir
13736         cat > conftest.java << EOF
13737         public class conftest {
13738             int testmethod(int a, int b) {
13739                     return a + b;
13740             }
13741         }
13744         cat > conftest.xml << EOF
13745         <project name="conftest" default="conftest">
13746         <target name="conftest">
13747             <javac srcdir="." includes="conftest.java">
13748             </javac>
13749         </target>
13750         </project>
13753         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
13754         if test $? = 0 -a -f ./conftest.class; then
13755             AC_MSG_RESULT([Ant works])
13756             if test -z "$WITH_ANT_HOME"; then
13757                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
13758                 if test -z "$ANT_HOME"; then
13759                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
13760                 fi
13761             else
13762                 ANT_HOME="$WITH_ANT_HOME"
13763             fi
13764         else
13765             echo "configure: Ant test failed" >&5
13766             cat conftest.java >&5
13767             cat conftest.xml >&5
13768             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
13769         fi
13770         cd "$a_cwd"
13771         rm -fr conftest.dir
13772     fi
13773     if test -z "$ANT_HOME"; then
13774         ANT_HOME="NO_ANT_HOME"
13775     else
13776         PathFormat "$ANT_HOME"
13777         ANT_HOME="$formatted_path"
13778         PathFormat "$ANT"
13779         ANT="$formatted_path"
13780     fi
13782     dnl Checking for ant.jar
13783     if test "$ANT_HOME" != "NO_ANT_HOME"; then
13784         AC_MSG_CHECKING([Ant lib directory])
13785         if test -f $ANT_HOME/lib/ant.jar; then
13786             ANT_LIB="$ANT_HOME/lib"
13787         else
13788             if test -f $ANT_HOME/ant.jar; then
13789                 ANT_LIB="$ANT_HOME"
13790             else
13791                 if test -f /usr/share/java/ant.jar; then
13792                     ANT_LIB=/usr/share/java
13793                 else
13794                     if test -f /usr/share/ant-core/lib/ant.jar; then
13795                         ANT_LIB=/usr/share/ant-core/lib
13796                     else
13797                         if test -f $ANT_HOME/lib/ant/ant.jar; then
13798                             ANT_LIB="$ANT_HOME/lib/ant"
13799                         else
13800                             if test -f /usr/share/lib/ant/ant.jar; then
13801                                 ANT_LIB=/usr/share/lib/ant
13802                             else
13803                                 AC_MSG_ERROR([Ant libraries not found!])
13804                             fi
13805                         fi
13806                     fi
13807                 fi
13808             fi
13809         fi
13810         PathFormat "$ANT_LIB"
13811         ANT_LIB="$formatted_path"
13812         AC_MSG_RESULT([Ant lib directory found.])
13813     fi
13815     ant_minver=1.6.0
13816     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
13818     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
13819     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
13820     ant_version_major=`echo $ant_version | cut -d. -f1`
13821     ant_version_minor=`echo $ant_version | cut -d. -f2`
13822     echo "configure: ant_version $ant_version " >&5
13823     echo "configure: ant_version_major $ant_version_major " >&5
13824     echo "configure: ant_version_minor $ant_version_minor " >&5
13825     if test "$ant_version_major" -ge "2"; then
13826         AC_MSG_RESULT([yes, $ant_version])
13827     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
13828         AC_MSG_RESULT([yes, $ant_version])
13829     else
13830         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
13831     fi
13833     rm -f conftest* core core.* *.core
13835 AC_SUBST(ANT)
13836 AC_SUBST(ANT_HOME)
13837 AC_SUBST(ANT_LIB)
13839 OOO_JUNIT_JAR=
13840 HAMCREST_JAR=
13841 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
13842     AC_MSG_CHECKING([for JUnit 4])
13843     if test "$with_junit" = "yes"; then
13844         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
13845             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
13846         elif test -e /usr/share/java/junit4.jar; then
13847             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
13848         else
13849            if test -e /usr/share/lib/java/junit.jar; then
13850               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
13851            else
13852               OOO_JUNIT_JAR=/usr/share/java/junit.jar
13853            fi
13854         fi
13855     else
13856         OOO_JUNIT_JAR=$with_junit
13857     fi
13858     if test "$_os" = "WINNT"; then
13859         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
13860     fi
13861     printf 'import org.junit.Before;' > conftest.java
13862     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13863         AC_MSG_RESULT([$OOO_JUNIT_JAR])
13864     else
13865         AC_MSG_ERROR(
13866 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
13867  specify its pathname via --with-junit=..., or disable it via --without-junit])
13868     fi
13869     rm -f conftest.class conftest.java
13870     if test $OOO_JUNIT_JAR != ""; then
13871         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
13872     fi
13874     AC_MSG_CHECKING([for included Hamcrest])
13875     printf 'import org.hamcrest.BaseDescription;' > conftest.java
13876     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13877         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
13878     else
13879         AC_MSG_RESULT([Not included])
13880         AC_MSG_CHECKING([for standalone hamcrest jar.])
13881         if test "$with_hamcrest" = "yes"; then
13882             if test -e /usr/share/lib/java/hamcrest.jar; then
13883                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
13884             elif test -e /usr/share/java/hamcrest/core.jar; then
13885                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
13886             elif test -e /usr/share/java/hamcrest/hamcrest.jar; then
13887                 HAMCREST_JAR=/usr/share/java/hamcrest/hamcrest.jar
13888             else
13889                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
13890             fi
13891         else
13892             HAMCREST_JAR=$with_hamcrest
13893         fi
13894         if test "$_os" = "WINNT"; then
13895             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
13896         fi
13897         if "$JAVACOMPILER" -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
13898             AC_MSG_RESULT([$HAMCREST_JAR])
13899         else
13900             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),
13901                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
13902         fi
13903     fi
13904     rm -f conftest.class conftest.java
13906 AC_SUBST(OOO_JUNIT_JAR)
13907 AC_SUBST(HAMCREST_JAR)
13910 AC_SUBST(SCPDEFS)
13913 # check for wget and curl
13915 WGET=
13916 CURL=
13918 if test "$enable_fetch_external" != "no"; then
13920 CURL=`which curl 2>/dev/null`
13922 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
13923     # wget new enough?
13924     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
13925     if test $? -eq 0; then
13926         WGET=$i
13927         break
13928     fi
13929 done
13931 if test -z "$WGET" -a -z "$CURL"; then
13932     AC_MSG_ERROR([neither wget nor curl found!])
13937 AC_SUBST(WGET)
13938 AC_SUBST(CURL)
13941 # check for sha256sum
13943 SHA256SUM=
13945 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
13946     eval "$i -a 256 --version" > /dev/null 2>&1
13947     ret=$?
13948     if test $ret -eq 0; then
13949         SHA256SUM="$i -a 256"
13950         break
13951     fi
13952 done
13954 if test -z "$SHA256SUM"; then
13955     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
13956         eval "$i --version" > /dev/null 2>&1
13957         ret=$?
13958         if test $ret -eq 0; then
13959             SHA256SUM=$i
13960             break
13961         fi
13962     done
13965 if test -z "$SHA256SUM"; then
13966     AC_MSG_ERROR([no sha256sum found!])
13969 AC_SUBST(SHA256SUM)
13971 dnl ===================================================================
13972 dnl Dealing with l10n options
13973 dnl ===================================================================
13974 AC_MSG_CHECKING([which languages to be built])
13975 # get list of all languages
13976 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
13977 # the sed command does the following:
13978 #   + if a line ends with a backslash, append the next line to it
13979 #   + adds " on the beginning of the value (after =)
13980 #   + adds " at the end of the value
13981 #   + removes en-US; we want to put it on the beginning
13982 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
13983 [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)]
13984 ALL_LANGS="en-US $completelangiso"
13985 # check the configured localizations
13986 WITH_LANG="$with_lang"
13988 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
13989 # (Norwegian is "nb" and "nn".)
13990 if test "$WITH_LANG" = "no"; then
13991     WITH_LANG=
13994 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
13995     AC_MSG_RESULT([en-US])
13996 else
13997     AC_MSG_RESULT([$WITH_LANG])
13998     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
13999     if test -z "$MSGFMT"; then
14000         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
14001             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
14002         elif test -x "/opt/lo/bin/msgfmt"; then
14003             MSGFMT="/opt/lo/bin/msgfmt"
14004         else
14005             AC_CHECK_PROGS(MSGFMT, [msgfmt])
14006             if test -z "$MSGFMT"; then
14007                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
14008             fi
14009         fi
14010     fi
14011     if test -z "$MSGUNIQ"; then
14012         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
14013             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
14014         elif test -x "/opt/lo/bin/msguniq"; then
14015             MSGUNIQ="/opt/lo/bin/msguniq"
14016         else
14017             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
14018             if test -z "$MSGUNIQ"; then
14019                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
14020             fi
14021         fi
14022     fi
14024 AC_SUBST(MSGFMT)
14025 AC_SUBST(MSGUNIQ)
14026 # check that the list is valid
14027 for lang in $WITH_LANG; do
14028     test "$lang" = "ALL" && continue
14029     # need to check for the exact string, so add space before and after the list of all languages
14030     for vl in $ALL_LANGS; do
14031         if test "$vl" = "$lang"; then
14032            break
14033         fi
14034     done
14035     if test "$vl" != "$lang"; then
14036         # if you're reading this - you prolly quoted your languages remove the quotes ...
14037         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
14038     fi
14039 done
14040 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
14041     echo $WITH_LANG | grep -q en-US
14042     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
14044 # list with substituted ALL
14045 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
14046 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
14047 test "$WITH_LANG" = "en-US" && WITH_LANG=
14048 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
14049     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
14050     ALL_LANGS=`echo $ALL_LANGS qtz`
14052 AC_SUBST(ALL_LANGS)
14053 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
14054 AC_SUBST(WITH_LANG)
14055 AC_SUBST(WITH_LANG_LIST)
14056 AC_SUBST(GIT_NEEDED_SUBMODULES)
14058 WITH_POOR_HELP_LOCALIZATIONS=
14059 if test -d "$SRC_ROOT/translations/source"; then
14060     for l in `ls -1 $SRC_ROOT/translations/source`; do
14061         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
14062             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
14063         fi
14064     done
14066 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
14068 if test -n "$with_locales" -a "$with_locales" != ALL; then
14069     WITH_LOCALES="$with_locales"
14071     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
14072     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
14073     # config_host/config_locales.h.in
14074     for locale in $WITH_LOCALES; do
14075         lang=${locale%_*}
14077         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
14079         case $lang in
14080         hi|mr*ne)
14081             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
14082             ;;
14083         bg|ru)
14084             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
14085             ;;
14086         esac
14087     done
14088 else
14089     AC_DEFINE(WITH_LOCALE_ALL)
14091 AC_SUBST(WITH_LOCALES)
14093 dnl git submodule update --reference
14094 dnl ===================================================================
14095 if test -n "${GIT_REFERENCE_SRC}"; then
14096     for repo in ${GIT_NEEDED_SUBMODULES}; do
14097         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
14098             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
14099         fi
14100     done
14102 AC_SUBST(GIT_REFERENCE_SRC)
14104 dnl git submodules linked dirs
14105 dnl ===================================================================
14106 if test -n "${GIT_LINK_SRC}"; then
14107     for repo in ${GIT_NEEDED_SUBMODULES}; do
14108         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
14109             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
14110         fi
14111     done
14113 AC_SUBST(GIT_LINK_SRC)
14115 dnl branding
14116 dnl ===================================================================
14117 AC_MSG_CHECKING([for alternative branding images directory])
14118 # initialize mapped arrays
14119 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
14120 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
14122 if test -z "$with_branding" -o "$with_branding" = "no"; then
14123     AC_MSG_RESULT([none])
14124     DEFAULT_BRAND_IMAGES="$brand_files"
14125 else
14126     if ! test -d $with_branding ; then
14127         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
14128     else
14129         AC_MSG_RESULT([$with_branding])
14130         CUSTOM_BRAND_DIR="$with_branding"
14131         for lfile in $brand_files
14132         do
14133             if ! test -f $with_branding/$lfile ; then
14134                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
14135                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
14136             else
14137                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
14138             fi
14139         done
14140         check_for_progress="yes"
14141     fi
14143 AC_SUBST([BRAND_INTRO_IMAGES])
14144 AC_SUBST([CUSTOM_BRAND_DIR])
14145 AC_SUBST([CUSTOM_BRAND_IMAGES])
14146 AC_SUBST([DEFAULT_BRAND_IMAGES])
14149 AC_MSG_CHECKING([for 'intro' progress settings])
14150 PROGRESSBARCOLOR=
14151 PROGRESSSIZE=
14152 PROGRESSPOSITION=
14153 PROGRESSFRAMECOLOR=
14154 PROGRESSTEXTCOLOR=
14155 PROGRESSTEXTBASELINE=
14157 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
14158     source "$with_branding/progress.conf"
14159     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
14160 else
14161     AC_MSG_RESULT([none])
14164 AC_SUBST(PROGRESSBARCOLOR)
14165 AC_SUBST(PROGRESSSIZE)
14166 AC_SUBST(PROGRESSPOSITION)
14167 AC_SUBST(PROGRESSFRAMECOLOR)
14168 AC_SUBST(PROGRESSTEXTCOLOR)
14169 AC_SUBST(PROGRESSTEXTBASELINE)
14172 dnl ===================================================================
14173 dnl Custom build version
14174 dnl ===================================================================
14175 AC_MSG_CHECKING([for extra build ID])
14176 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
14177     EXTRA_BUILDID="$with_extra_buildid"
14179 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
14180 if test -n "$EXTRA_BUILDID" ; then
14181     AC_MSG_RESULT([$EXTRA_BUILDID])
14182 else
14183     AC_MSG_RESULT([not set])
14185 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
14187 OOO_VENDOR=
14188 AC_MSG_CHECKING([for vendor])
14189 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
14190     OOO_VENDOR="$USERNAME"
14192     if test -z "$OOO_VENDOR"; then
14193         OOO_VENDOR="$USER"
14194     fi
14196     if test -z "$OOO_VENDOR"; then
14197         OOO_VENDOR="`id -u -n`"
14198     fi
14200     AC_MSG_RESULT([not set, using $OOO_VENDOR])
14201 else
14202     OOO_VENDOR="$with_vendor"
14203     AC_MSG_RESULT([$OOO_VENDOR])
14205 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
14206 AC_SUBST(OOO_VENDOR)
14208 if test "$_os" = "Android" ; then
14209     ANDROID_PACKAGE_NAME=
14210     AC_MSG_CHECKING([for Android package name])
14211     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
14212         if test -n "$ENABLE_DEBUG"; then
14213             # Default to the package name that makes ndk-gdb happy.
14214             ANDROID_PACKAGE_NAME="org.libreoffice"
14215         else
14216             ANDROID_PACKAGE_NAME="org.example.libreoffice"
14217         fi
14219         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
14220     else
14221         ANDROID_PACKAGE_NAME="$with_android_package_name"
14222         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
14223     fi
14224     AC_SUBST(ANDROID_PACKAGE_NAME)
14227 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
14228 if test "$with_compat_oowrappers" = "yes"; then
14229     WITH_COMPAT_OOWRAPPERS=TRUE
14230     AC_MSG_RESULT(yes)
14231 else
14232     WITH_COMPAT_OOWRAPPERS=
14233     AC_MSG_RESULT(no)
14235 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
14237 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{gsub(" ", "", $0);print tolower($0)}'`
14238 AC_MSG_CHECKING([for install dirname])
14239 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
14240     INSTALLDIRNAME="$with_install_dirname"
14242 AC_MSG_RESULT([$INSTALLDIRNAME])
14243 AC_SUBST(INSTALLDIRNAME)
14245 AC_MSG_CHECKING([for prefix])
14246 test "x$prefix" = xNONE && prefix=$ac_default_prefix
14247 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
14248 PREFIXDIR="$prefix"
14249 AC_MSG_RESULT([$PREFIXDIR])
14250 AC_SUBST(PREFIXDIR)
14252 LIBDIR=[$(eval echo $(eval echo $libdir))]
14253 AC_SUBST(LIBDIR)
14255 DATADIR=[$(eval echo $(eval echo $datadir))]
14256 AC_SUBST(DATADIR)
14258 MANDIR=[$(eval echo $(eval echo $mandir))]
14259 AC_SUBST(MANDIR)
14261 DOCDIR=[$(eval echo $(eval echo $docdir))]
14262 AC_SUBST(DOCDIR)
14264 BINDIR=[$(eval echo $(eval echo $bindir))]
14265 AC_SUBST(BINDIR)
14267 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
14268 AC_SUBST(INSTALLDIR)
14270 TESTINSTALLDIR="${BUILDDIR}/test-install"
14271 AC_SUBST(TESTINSTALLDIR)
14274 # ===================================================================
14275 # OAuth2 id and secrets
14276 # ===================================================================
14278 AC_MSG_CHECKING([for Google Drive client id and secret])
14279 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
14280     AC_MSG_RESULT([not set])
14281     GDRIVE_CLIENT_ID="\"\""
14282     GDRIVE_CLIENT_SECRET="\"\""
14283 else
14284     AC_MSG_RESULT([set])
14285     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
14286     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
14288 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
14289 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
14291 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
14292 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
14293     AC_MSG_RESULT([not set])
14294     ALFRESCO_CLOUD_CLIENT_ID="\"\""
14295     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
14296 else
14297     AC_MSG_RESULT([set])
14298     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
14299     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
14301 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
14302 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
14304 AC_MSG_CHECKING([for OneDrive client id and secret])
14305 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
14306     AC_MSG_RESULT([not set])
14307     ONEDRIVE_CLIENT_ID="\"\""
14308     ONEDRIVE_CLIENT_SECRET="\"\""
14309 else
14310     AC_MSG_RESULT([set])
14311     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
14312     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
14314 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
14315 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
14318 dnl ===================================================================
14319 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
14320 dnl --enable-dependency-tracking configure option
14321 dnl ===================================================================
14322 AC_MSG_CHECKING([whether to enable dependency tracking])
14323 if test "$enable_dependency_tracking" = "no"; then
14324     nodep=TRUE
14325     AC_MSG_RESULT([no])
14326 else
14327     AC_MSG_RESULT([yes])
14329 AC_SUBST(nodep)
14331 dnl ===================================================================
14332 dnl Number of CPUs to use during the build
14333 dnl ===================================================================
14334 AC_MSG_CHECKING([for number of processors to use])
14335 # plain --with-parallelism is just the default
14336 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
14337     if test "$with_parallelism" = "no"; then
14338         PARALLELISM=0
14339     else
14340         PARALLELISM=$with_parallelism
14341     fi
14342 else
14343     if test "$enable_icecream" = "yes"; then
14344         PARALLELISM="40"
14345     else
14346         case `uname -s` in
14348         Darwin|FreeBSD|NetBSD|OpenBSD)
14349             PARALLELISM=`sysctl -n hw.ncpu`
14350             ;;
14352         Linux)
14353             PARALLELISM=`getconf _NPROCESSORS_ONLN`
14354         ;;
14355         # what else than above does profit here *and* has /proc?
14356         *)
14357             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
14358             ;;
14359         esac
14361         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
14362         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
14363     fi
14366 if test $PARALLELISM -eq 0; then
14367     AC_MSG_RESULT([explicit make -j option needed])
14368 else
14369     AC_MSG_RESULT([$PARALLELISM])
14371 AC_SUBST(PARALLELISM)
14374 # Set up ILIB for MSVC build
14376 ILIB1=
14377 if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
14378     ILIB="."
14379     if test -n "$JAVA_HOME"; then
14380         ILIB="$ILIB;$JAVA_HOME/lib"
14381     fi
14382     ILIB1=-link
14383     PathFormat "${COMPATH}/lib/$WIN_HOST_ARCH"
14384     ILIB="$ILIB;$formatted_path"
14385     ILIB1="$ILIB1 -LIBPATH:$formatted_path"
14386     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14387     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14388     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
14389         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14390         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14391     fi
14392     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
14393     ucrtlibpath_formatted=$formatted_path
14394     ILIB="$ILIB;$ucrtlibpath_formatted"
14395     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
14396     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
14397         PathFormat "$DOTNET_FRAMEWORK_HOME/lib"
14398         ILIB="$ILIB;$formatted_path"
14399     else
14400         PathFormat "$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
14401         ILIB="$ILIB;$formatted_path"
14402     fi
14404     if test "$cross_compiling" != "yes"; then
14405         ILIB_FOR_BUILD="$ILIB"
14406     fi
14408 AC_SUBST(ILIB)
14409 AC_SUBST(ILIB_FOR_BUILD)
14411 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
14412 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
14413 dnl from consteval constructor initializing const variable",
14414 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
14415 dnl expression' with consteval constructor", <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
14416 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
14417 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'",
14418 dnl <https://developercommunity.visualstudio.com/t/1581879> "Bogus error C7595 with consteval
14419 dnl constructor in ternary expression (/std:c++latest)", or
14420 dnl <https://github.com/llvm/llvm-project/issues/54612> "C++20, consteval, anonymous union:
14421 dnl llvm/lib/IR/Instructions.cpp:1491: void llvm::StoreInst::AssertOK(): Assertion
14422 dnl `cast<PointerType>(getOperand(1)->getType())->isOpaqueOrPointeeTypeMatches(getOperand(0)->getType())
14423 dnl && "Ptr must be a pointer to Val type!"' failed.":
14424 AC_LANG_PUSH([C++])
14425 save_CXX=$CXX
14426 if test "$COM" = MSC && test "$COM_IS_CLANG" != TRUE; then
14427     CXX="env LIB=$ILIB $CXX"
14429 save_CXXFLAGS=$CXXFLAGS
14430 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
14431 AC_RUN_IFELSE([AC_LANG_PROGRAM([
14432         struct S {
14433             consteval S() { i = 1; }
14434             int i = 0;
14435         };
14436         S const s;
14438         struct S1 { consteval S1(int) {} };
14439         struct S2 {
14440             S1 x;
14441             S2(): x(0) {}
14442         };
14444         struct S3 {
14445             consteval S3() {}
14446             union {
14447                 int a;
14448                 unsigned b = 0;
14449             };
14450         };
14451         void f() { S3(); }
14453         struct S4 { consteval S4() = default; };
14454         void f4(bool b) { b ? S4() : S4(); }
14456         struct S5 {
14457             consteval S5() { c = 0; }
14458             char * f() { return &c; }
14459             union {
14460                 char c;
14461                 int i;
14462             };
14463         };
14464         auto s5 = S5().f();
14465     ], [
14466         return (s.i == 1) ? 0 : 1;
14467     ])], [
14468         AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
14469         AC_MSG_RESULT([yes])
14470     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
14471 CXX=$save_CXX
14472 CXXFLAGS=$save_CXXFLAGS
14473 AC_LANG_POP([C++])
14475 # ===================================================================
14476 # Creating bigger shared library to link against
14477 # ===================================================================
14478 AC_MSG_CHECKING([whether to create huge library])
14479 MERGELIBS=
14481 if test $_os = iOS -o $_os = Android; then
14482     # Never any point in mergelibs for these as we build just static
14483     # libraries anyway...
14484     enable_mergelibs=no
14487 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
14488     if test $_os != Linux -a $_os != WINNT; then
14489         add_warning "--enable-mergelibs is not tested for this platform"
14490     fi
14491     MERGELIBS="TRUE"
14492     AC_MSG_RESULT([yes])
14493     AC_DEFINE(ENABLE_MERGELIBS)
14494 else
14495     AC_MSG_RESULT([no])
14497 AC_SUBST([MERGELIBS])
14499 dnl ===================================================================
14500 dnl icerun is a wrapper that stops us spawning tens of processes
14501 dnl locally - for tools that can't be executed on the compile cluster
14502 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
14503 dnl ===================================================================
14504 AC_MSG_CHECKING([whether to use icerun wrapper])
14505 ICECREAM_RUN=
14506 if test "$enable_icecream" = "yes" && which icerun >/dev/null 2>&1 ; then
14507     ICECREAM_RUN=icerun
14508     AC_MSG_RESULT([yes])
14509 else
14510     AC_MSG_RESULT([no])
14512 AC_SUBST(ICECREAM_RUN)
14514 dnl ===================================================================
14515 dnl Setup the ICECC_VERSION for the build the same way it was set for
14516 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
14517 dnl ===================================================================
14518 x_ICECC_VERSION=[\#]
14519 if test -n "$ICECC_VERSION" ; then
14520     x_ICECC_VERSION=
14522 AC_SUBST(x_ICECC_VERSION)
14523 AC_SUBST(ICECC_VERSION)
14525 dnl ===================================================================
14527 AC_MSG_CHECKING([MPL subset])
14528 MPL_SUBSET=
14529 LICENSE="LGPL"
14531 if test "$enable_mpl_subset" = "yes"; then
14532     warn_report=false
14533     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
14534         warn_report=true
14535     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
14536         warn_report=true
14537     fi
14538     if test "$warn_report" = "true"; then
14539         AC_MSG_ERROR([need to --disable-report-builder - extended database report builder.])
14540     fi
14541     if test "x$enable_postgresql_sdbc" != "xno"; then
14542         AC_MSG_ERROR([need to --disable-postgresql-sdbc - the PostgreSQL database backend.])
14543     fi
14544     if test "$enable_lotuswordpro" = "yes"; then
14545         AC_MSG_ERROR([need to --disable-lotuswordpro - a Lotus Word Pro file format import filter.])
14546     fi
14547     if test -n "$ENABLE_POPPLER"; then
14548         if test "x$SYSTEM_POPPLER" = "x"; then
14549             AC_MSG_ERROR([need to disable PDF import via poppler or use system library])
14550         fi
14551     fi
14552     # cf. m4/libo_check_extension.m4
14553     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
14554         AC_MSG_ERROR([need to disable extra extensions '$WITH_EXTRA_EXTENSIONS'])
14555     fi
14556     for theme in $WITH_THEMES; do
14557         case $theme in
14558         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
14559             AC_MSG_ERROR([need to disable icon themes from '$WITH_THEMES': $theme present, use --with-theme=colibre]) ;;
14560         *) : ;;
14561         esac
14562     done
14564     ENABLE_OPENGL_TRANSITIONS=
14566     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
14567         AC_MSG_ERROR([need to --disable-lpsolve - calc linear programming solver.])
14568     fi
14570     MPL_SUBSET="TRUE"
14571     LICENSE="MPL-2.0"
14572     AC_DEFINE(MPL_HAVE_SUBSET)
14573     AC_MSG_RESULT([only])
14574 else
14575     AC_MSG_RESULT([no restrictions])
14577 AC_SUBST(MPL_SUBSET)
14578 AC_SUBST(LICENSE)
14580 dnl ===================================================================
14582 AC_MSG_CHECKING([formula logger])
14583 ENABLE_FORMULA_LOGGER=
14585 if test "x$enable_formula_logger" = "xyes"; then
14586     AC_MSG_RESULT([yes])
14587     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14588     ENABLE_FORMULA_LOGGER=TRUE
14589 elif test -n "$ENABLE_DBGUTIL" ; then
14590     AC_MSG_RESULT([yes])
14591     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14592     ENABLE_FORMULA_LOGGER=TRUE
14593 else
14594     AC_MSG_RESULT([no])
14597 AC_SUBST(ENABLE_FORMULA_LOGGER)
14599 dnl ===================================================================
14600 dnl Checking for active Antivirus software.
14601 dnl ===================================================================
14603 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
14604     AC_MSG_CHECKING([for active Antivirus software])
14605     PathFormat "$SRC_ROOT/antivirusDetection.vbs"
14606     ANTIVIRUS_LIST=`cscript.exe //Nologo ${formatted_path}`
14607     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
14608         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
14609             AC_MSG_RESULT([found])
14610             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
14611             echo $EICAR_STRING > $SRC_ROOT/eicar
14612             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
14613             rm $SRC_ROOT/eicar
14614             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14615                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14616             fi
14617             echo $EICAR_STRING > $BUILDDIR/eicar
14618             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
14619             rm $BUILDDIR/eicar
14620             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14621                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14622             fi
14623             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"
14624         else
14625             AC_MSG_RESULT([not found])
14626         fi
14627     else
14628         AC_MSG_RESULT([n/a])
14629     fi
14632 dnl ===================================================================
14633 dnl Setting up the environment.
14634 dnl ===================================================================
14635 AC_MSG_NOTICE([setting up the build environment variables...])
14637 AC_SUBST(COMPATH)
14639 if test "$build_os" = "cygwin" -o "$build_os" = wsl; then
14640     if test -d "$COMPATH/atlmfc/lib/spectre"; then
14641         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
14642         ATL_INCLUDE="$COMPATH/atlmfc/include"
14643     elif test -d "$COMPATH/atlmfc/lib"; then
14644         ATL_LIB="$COMPATH/atlmfc/lib"
14645         ATL_INCLUDE="$COMPATH/atlmfc/include"
14646     else
14647         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
14648         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
14649     fi
14650     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
14651     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
14652     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
14655 if test "$build_os" = "cygwin"; then
14656     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
14657     PathFormat "/usr/bin/find.exe"
14658     FIND="$formatted_path"
14659     PathFormat "/usr/bin/sort.exe"
14660     SORT="$formatted_path"
14661     PathFormat "/usr/bin/grep.exe"
14662     WIN_GREP="$formatted_path"
14663     PathFormat "/usr/bin/ls.exe"
14664     WIN_LS="$formatted_path"
14665     PathFormat "/usr/bin/touch.exe"
14666     WIN_TOUCH="$formatted_path"
14667 else
14668     FIND=find
14669     SORT=sort
14672 AC_SUBST(ATL_INCLUDE)
14673 AC_SUBST(ATL_LIB)
14674 AC_SUBST(FIND)
14675 AC_SUBST(SORT)
14676 AC_SUBST(WIN_GREP)
14677 AC_SUBST(WIN_LS)
14678 AC_SUBST(WIN_TOUCH)
14680 AC_SUBST(BUILD_TYPE)
14682 AC_SUBST(SOLARINC)
14684 PathFormat "$PERL"
14685 PERL="$formatted_path"
14686 AC_SUBST(PERL)
14688 if test -n "$TMPDIR"; then
14689     TEMP_DIRECTORY="$TMPDIR"
14690 else
14691     TEMP_DIRECTORY="/tmp"
14693 if test "$build_os" = "cygwin"; then
14694     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
14696 AC_SUBST(TEMP_DIRECTORY)
14698 # setup the PATH for the environment
14699 if test -n "$LO_PATH_FOR_BUILD"; then
14700     LO_PATH="$LO_PATH_FOR_BUILD"
14701     case "$host_os" in
14702     cygwin*|wsl*)
14703         pathmunge "$MSVC_HOST_PATH" "before"
14704         ;;
14705     esac
14706 else
14707     LO_PATH="$PATH"
14709     case "$host_os" in
14711     aix*|dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
14712         if test "$ENABLE_JAVA" != ""; then
14713             pathmunge "$JAVA_HOME/bin" "after"
14714         fi
14715         ;;
14717     cygwin*|wsl*)
14718         # Win32 make needs native paths
14719         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
14720             LO_PATH=`cygpath -p -m "$PATH"`
14721         fi
14722         if test "$WIN_BUILD_ARCH" = "x64"; then
14723             # needed for msi packaging
14724             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
14725         fi
14726         # .NET 4.6 and higher don't have bin directory
14727         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
14728             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
14729         fi
14730         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
14731         pathmunge "$CSC_PATH" "before"
14732         pathmunge "$MIDL_PATH" "before"
14733         pathmunge "$AL_PATH" "before"
14734         pathmunge "$MSVC_MULTI_PATH" "before"
14735         pathmunge "$MSVC_BUILD_PATH" "before"
14736         if test -n "$MSBUILD_PATH" ; then
14737             pathmunge "$MSBUILD_PATH" "before"
14738         fi
14739         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
14740         if test "$ENABLE_JAVA" != ""; then
14741             if test -d "$JAVA_HOME/jre/bin/client"; then
14742                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
14743             fi
14744             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
14745                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
14746             fi
14747             pathmunge "$JAVA_HOME/bin" "before"
14748         fi
14749         pathmunge "$MSVC_HOST_PATH" "before"
14750         ;;
14752     solaris*)
14753         pathmunge "/usr/css/bin" "before"
14754         if test "$ENABLE_JAVA" != ""; then
14755             pathmunge "$JAVA_HOME/bin" "after"
14756         fi
14757         ;;
14758     esac
14761 AC_SUBST(LO_PATH)
14763 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
14764 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
14765     x_LO_ELFCHECK_ALLOWLIST=
14766 else
14767     x_LO_ELFCHECK_ALLOWLIST=[\#]
14769 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
14770 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
14772 libo_FUZZ_SUMMARY
14774 # Generate a configuration sha256 we can use for deps
14775 if test -f config_host.mk; then
14776     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
14778 if test -f config_host_lang.mk; then
14779     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
14782 CFLAGS=$my_original_CFLAGS
14783 CXXFLAGS=$my_original_CXXFLAGS
14784 CPPFLAGS=$my_original_CPPFLAGS
14786 AC_CONFIG_LINKS([include:include])
14788 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
14789 # BUILD platform configuration] - otherwise breaks cross building
14790 AC_CONFIG_FILES([config_host.mk
14791                  config_host_lang.mk
14792                  Makefile
14793                  lo.xcent
14794                  bin/bffvalidator.sh
14795                  bin/odfvalidator.sh
14796                  bin/officeotron.sh
14797                  hardened_runtime.xcent
14798                  instsetoo_native/util/openoffice.lst
14799                  sysui/desktop/macosx/Info.plist
14800                  vs-code.code-workspace.template:.vscode/vs-code-template.code-workspace.in])
14802 AC_CONFIG_HEADERS([config_host/config_buildconfig.h])
14803 AC_CONFIG_HEADERS([config_host/config_buildid.h])
14804 AC_CONFIG_HEADERS([config_host/config_box2d.h])
14805 AC_CONFIG_HEADERS([config_host/config_clang.h])
14806 AC_CONFIG_HEADERS([config_host/config_crypto.h])
14807 AC_CONFIG_HEADERS([config_host/config_dconf.h])
14808 AC_CONFIG_HEADERS([config_host/config_eot.h])
14809 AC_CONFIG_HEADERS([config_host/config_extensions.h])
14810 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
14811 AC_CONFIG_HEADERS([config_host/config_cairo_rgba.h])
14812 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
14813 AC_CONFIG_HEADERS([config_host/config_dbus.h])
14814 AC_CONFIG_HEADERS([config_host/config_features.h])
14815 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
14816 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
14817 AC_CONFIG_HEADERS([config_host/config_firebird.h])
14818 AC_CONFIG_HEADERS([config_host/config_folders.h])
14819 AC_CONFIG_HEADERS([config_host/config_fonts.h])
14820 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
14821 AC_CONFIG_HEADERS([config_host/config_gio.h])
14822 AC_CONFIG_HEADERS([config_host/config_global.h])
14823 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
14824 AC_CONFIG_HEADERS([config_host/config_java.h])
14825 AC_CONFIG_HEADERS([config_host/config_langs.h])
14826 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
14827 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
14828 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
14829 AC_CONFIG_HEADERS([config_host/config_locales.h])
14830 AC_CONFIG_HEADERS([config_host/config_mpl.h])
14831 AC_CONFIG_HEADERS([config_host/config_oox.h])
14832 AC_CONFIG_HEADERS([config_host/config_options.h])
14833 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
14834 AC_CONFIG_HEADERS([config_host/config_zxing.h])
14835 AC_CONFIG_HEADERS([config_host/config_skia.h])
14836 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
14837 AC_CONFIG_HEADERS([config_host/config_validation.h])
14838 AC_CONFIG_HEADERS([config_host/config_vendor.h])
14839 AC_CONFIG_HEADERS([config_host/config_vcl.h])
14840 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
14841 AC_CONFIG_HEADERS([config_host/config_version.h])
14842 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
14843 AC_CONFIG_HEADERS([config_host/config_poppler.h])
14844 AC_CONFIG_HEADERS([config_host/config_python.h])
14845 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
14846 AC_CONFIG_HEADERS([config_host/config_wasm_strip.h])
14847 AC_CONFIG_HEADERS([solenv/lockfile/autoconf.h])
14848 AC_OUTPUT
14850 if test "$CROSS_COMPILING" = TRUE; then
14851     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
14854 # touch the config timestamp file
14855 if test ! -f config_host.mk.stamp; then
14856     echo > config_host.mk.stamp
14857 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
14858     echo "Host Configuration unchanged - avoiding scp2 stamp update"
14859 else
14860     echo > config_host.mk.stamp
14863 # touch the config lang timestamp file
14864 if test ! -f config_host_lang.mk.stamp; then
14865     echo > config_host_lang.mk.stamp
14866 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
14867     echo "Language Configuration unchanged - avoiding scp2 stamp update"
14868 else
14869     echo > config_host_lang.mk.stamp
14873 if test \( "$STALE_MAKE" = "TRUE" \) \
14874         -a "$build_os" = "cygwin"; then
14876 cat << _EOS
14877 ****************************************************************************
14878 WARNING:
14879 Your make version is known to be horribly slow, and hard to debug
14880 problems with. To get a reasonably functional make please do:
14882 to install a pre-compiled binary make for Win32
14884  mkdir -p /opt/lo/bin
14885  cd /opt/lo/bin
14886  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
14887  cp make-4.2.1-msvc.exe make
14888  chmod +x make
14890 to install from source:
14891 place yourself in a working directory of you choice.
14893  git clone git://git.savannah.gnu.org/make.git
14895  [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"]
14896  set PATH=%PATH%;C:\Cygwin\bin
14897  [or Cygwin64, if that is what you have]
14898  cd path-to-make-repo-you-cloned-above
14899  build_w32.bat --without-guile
14901 should result in a WinRel/gnumake.exe.
14902 Copy it to the Cygwin /opt/lo/bin directory as make.exe
14904 Then re-run autogen.sh
14906 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
14907 Alternatively, you can install the 'new' make where ever you want and make sure that `which make` finds it.
14909 _EOS
14913 cat << _EOF
14914 ****************************************************************************
14916 To show information on various make targets and make flags, run:
14917 $GNUMAKE help
14919 To just build, run:
14920 $GNUMAKE
14922 _EOF
14924 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
14925     cat << _EOF
14926 After the build has finished successfully, you can immediately run what you built using the command:
14927 _EOF
14929     if test $_os = Darwin; then
14930         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
14931     else
14932         echo instdir/program/soffice
14933     fi
14934     cat << _EOF
14936 If you want to run the unit tests, run:
14937 $GNUMAKE check
14939 _EOF
14942 if test -s "$WARNINGS_FILE_FOR_BUILD"; then
14943     echo "BUILD / cross-toolset config, repeated ($WARNINGS_FILE_FOR_BUILD)"
14944     cat "$WARNINGS_FILE_FOR_BUILD"
14945     echo
14948 if test -s "$WARNINGS_FILE"; then
14949     echo "HOST config ($WARNINGS_FILE)"
14950     cat "$WARNINGS_FILE"
14953 # Remove unneeded emconfigure artifacts
14954 rm -f a.out a.wasm a.out.js a.out.wasm
14956 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: