Schedule conditional formating repaint after filtering is completed
[LibreOffice.git] / configure.ac
blob57026f568ef87f513b18769b36aa8941798276c6
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],[22.05.19.1],[],[],[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=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --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     local rel="$1"
206     absolute_path=""
207     test ! -e "$rel" && mkdir -p "$rel"
208     if test -d "$rel" ; then
209         cd "$rel" || AC_MSG_ERROR([absolute path resolution failed for "$rel".])
210         absolute_path="$(pwd)"
211         cd - > /dev/null
212     else
213         AC_MSG_ERROR([Failed to resolve absolute path.  "$rel" does not exist or is not a directory.])
214     fi
217 WARNINGS_FILE=config.warn
218 WARNINGS_FILE_FOR_BUILD=config.Build.warn
219 rm -f "$WARNINGS_FILE" "$WARNINGS_FILE_FOR_BUILD"
220 have_WARNINGS="no"
221 add_warning()
223     if test "$have_WARNINGS" = "no"; then
224         echo "*************************************" > "$WARNINGS_FILE"
225         have_WARNINGS="yes"
226         if which tput >/dev/null && test "`tput colors 2>/dev/null || echo 0`" -ge 8; then
227             dnl <esc> as actual byte (U+1b), [ escaped using quadrigraph @<:@
228             COLORWARN='*\e@<:@1;33;40m WARNING \e@<:@0m:'
229         else
230             COLORWARN="* WARNING :"
231         fi
232     fi
233     echo "$COLORWARN $@" >> "$WARNINGS_FILE"
236 dnl Some Mac User have the bad habit of letting a lot of crap
237 dnl accumulate in their PATH and even adding stuff in /usr/local/bin
238 dnl that confuse the build.
239 dnl For the ones that use LODE, let's be nice and protect them
240 dnl from themselves
242 mac_sanitize_path()
244     mac_path="$LODE_HOME/opt/bin:/usr/bin:/bin:/usr/sbin:/sbin"
245 dnl a common but nevertheless necessary thing that may be in a fancy
246 dnl path location is git, so make sure we have it
247     mac_git_path=`which git 2>/dev/null`
248     if test -n "$mac_git_path" -a -x "$mac_git_path" -a "$mac_git_path" != "/usr/bin/git" ; then
249         mac_path="$mac_path:`dirname $mac_git_path`"
250     fi
251 dnl a not so common but nevertheless quite helpful thing that may be in a fancy
252 dnl path location is gpg, so make sure we find it
253     mac_gpg_path=`which gpg 2>/dev/null`
254     if test -n "$mac_gpg_path" -a -x "$mac_gpg_path" -a "$mac_gpg_path" != "/usr/bin/gpg" ; then
255         mac_path="$mac_path:`dirname $mac_gpg_path`"
256     fi
257     PATH="$mac_path"
258     unset mac_path
259     unset mac_git_path
260     unset mac_gpg_path
263 echo "********************************************************************"
264 echo "*"
265 echo "*   Running ${PACKAGE_NAME} build configuration."
266 echo "*"
267 echo "********************************************************************"
268 echo ""
270 dnl ===================================================================
271 dnl checks build and host OSes
272 dnl do this before argument processing to allow for platform dependent defaults
273 dnl ===================================================================
275 # Check for WSL (version 2, at least). But if --host is explicitly specified (to really do build for
276 # Linux on WSL) trust that.
277 if test -z "$host" -a -z "$build" -a "`wslsys -v 2>/dev/null`" != ""; then
278     ac_cv_host="x86_64-pc-wsl"
279     ac_cv_host_cpu="x86_64"
280     ac_cv_host_os="wsl"
281     ac_cv_build="$ac_cv_host"
282     ac_cv_build_cpu="$ac_cv_host_cpu"
283     ac_cv_build_os="$ac_cv_host_os"
285     # Emulation of Cygwin's cygpath command for WSL.
286     cygpath()
287     {
288         if test -n "$UNITTEST_WSL_CYGPATH"; then
289             echo -n cygpath "$@" "==> "
290         fi
292         # Cygwin's real cygpath has a plethora of options but we use only a few here.
293         local args="$@"
294         local opt
295         local opt_d opt_m opt_u opt_w opt_l opt_s opt_p
296         OPTIND=1
298         while getopts dmuwlsp opt; do
299             case "$opt" in
300                 \?)
301                     AC_MSG_ERROR([Unimplemented cygpath emulation option in invocation: cygpath $args])
302                     ;;
303                 ?)
304                     eval opt_$opt=yes
305                     ;;
306             esac
307         done
309         shift $((OPTIND-1))
311         if test $# -ne 1; then
312             AC_MSG_ERROR([Invalid cygpath emulation invocation: Pathname missing]);
313         fi
315         local input="$1"
317         local result
319         if test -n "$opt_d" -o -n "$opt_m" -o -n "$opt_w"; then
320             # Print Windows path, possibly in 8.3 form (-d) or with forward slashes (-m)
322             if test -n "$opt_u"; then
323                 AC_MSG_ERROR([Invalid cygpath invocation: Both Windows and Unix path output requested])
324             fi
326             case "$input" in
327                 /mnt/*)
328                     # A Windows file in WSL format
329                     input=$(wslpath -w "$input")
330                     ;;
331                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
332                     # Already in Windows format
333                     ;;
334                 /*)
335                     input=$(wslpath -w "$input")
336                     ;;
337                 *)
338                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
339                     ;;
340             esac
341             if test -n "$opt_d" -o -n "$opt_s"; then
342                 input=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --8.3 "$input")
343             fi
344             if test -n "$opt_m"; then
345                 input="${input//\\//}"
346             fi
347             echo "$input"
348         else
349             # Print Unix path
351             case "$input" in
352                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
353                     wslpath -u "$input"
354                     ;;
355                 /)
356                     echo "$input"
357                     ;;
358                 *)
359                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
360                     ;;
361             esac
362         fi
363     }
365     if test -n "$UNITTEST_WSL_CYGPATH"; then
366         BUILDDIR=.
368         # Nothing special with these file names, just arbitrary ones picked to test with
369         cygpath -d /usr/lib64/ld-linux-x86-64.so.2
370         cygpath -w /usr/lib64/ld-linux-x86-64.so.2
371         cygpath -m /usr/lib64/ld-linux-x86-64.so.2
372         cygpath -m -s /usr/lib64/ld-linux-x86-64.so.2
373         # At least on my machine for instance this file does have an 8.3 name
374         cygpath -d /mnt/c/windows/WindowsUpdate.log
375         # But for instance this one doesn't
376         cygpath -w /mnt/c/windows/system32/AboutSettingsHandlers.dll
377         cygpath -ws /mnt/c/windows/WindowsUpdate.log
378         cygpath -m /mnt/c/windows/system32/AboutSettingsHandlers.dll
379         cygpath -ms /mnt/c/windows/WindowsUpdate.log
381         cygpath -u 'c:\windows\system32\AboutSettingsHandlers.dll'
382         cygpath -u 'c:/windows/system32/AboutSettingsHandlers.dll'
384         exit 0
385     fi
388 AC_CANONICAL_HOST
389 AC_CANONICAL_BUILD
391 if test -n "$UNITTEST_WSL_PATHFORMAT"; then
392     BUILDDIR=.
393     GREP=grep
395     # Use of PathFormat must be after AC_CANONICAL_BUILD above
396     PathFormat /
397     printf "$formatted_path , $formatted_path_unix\n"
399     PathFormat $PWD
400     printf "$formatted_path , $formatted_path_unix\n"
402     PathFormat "$PROGRAMFILESX86"
403     printf "$formatted_path , $formatted_path_unix\n"
405     exit 0
408 AC_MSG_CHECKING([for product name])
409 PRODUCTNAME="AC_PACKAGE_NAME"
410 if test -n "$with_product_name" -a "$with_product_name" != no; then
411     PRODUCTNAME="$with_product_name"
413 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
414     PRODUCTNAME="${PRODUCTNAME}Dev"
415     PRODUCTNAME=AC_PACKAGE_NAME
417 AC_MSG_RESULT([$PRODUCTNAME])
418 AC_SUBST(PRODUCTNAME)
419 PRODUCTNAME_WITHOUT_SPACES=$(printf %s "$PRODUCTNAME" | sed 's/ //g')
420 AC_SUBST(PRODUCTNAME_WITHOUT_SPACES)
422 dnl ===================================================================
423 dnl Our version is defined by the AC_INIT() at the top of this script.
424 dnl ===================================================================
426 AC_MSG_CHECKING([for package version])
427 if test -n "$with_package_version" -a "$with_package_version" != no; then
428     PACKAGE_VERSION="$with_package_version"
430 AC_MSG_RESULT([$PACKAGE_VERSION])
432 set `echo "$PACKAGE_VERSION" | sed "s/\./ /g"`
434 LIBO_VERSION_MAJOR=$1
435 LIBO_VERSION_MINOR=$2
436 LIBO_VERSION_MICRO=$3
437 LIBO_VERSION_PATCH=$4
439 LIBO_VERSION_SUFFIX=$5
441 # Split out LIBO_VERSION_SUFFIX_SUFFIX... horrible crack. But apparently wanted separately in
442 # openoffice.lst as ABOUTBOXPRODUCTVERSIONSUFFIX. Note that the double brackets are for m4's sake,
443 # they get undoubled before actually passed to sed.
444 LIBO_VERSION_SUFFIX_SUFFIX=`echo "$LIBO_VERSION_SUFFIX" | sed -e 's/.*[[a-zA-Z0-9]]\([[^a-zA-Z0-9]]*\)$/\1/'`
445 test -n "$LIBO_VERSION_SUFFIX_SUFFIX" && LIBO_VERSION_SUFFIX="${LIBO_VERSION_SUFFIX%${LIBO_VERSION_SUFFIX_SUFFIX}}"
446 # LIBO_VERSION_SUFFIX, if non-empty, should include the period separator
447 test -n "$LIBO_VERSION_SUFFIX" && LIBO_VERSION_SUFFIX=".$LIBO_VERSION_SUFFIX"
449 # The value for key CFBundleVersion in the Info.plist file must be a period-separated list of at most
450 # three non-negative integers. Please find more information about CFBundleVersion at
451 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleversion
453 # The value for key CFBundleShortVersionString in the Info.plist file must be a period-separated list
454 # of at most three non-negative integers. Please find more information about
455 # CFBundleShortVersionString at
456 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring
458 MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.`expr $LIBO_VERSION_MICRO '*' 1000 + $LIBO_VERSION_PATCH`
459 MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION
461 AC_SUBST(LIBO_VERSION_MAJOR)
462 AC_SUBST(LIBO_VERSION_MINOR)
463 AC_SUBST(LIBO_VERSION_MICRO)
464 AC_SUBST(LIBO_VERSION_PATCH)
465 AC_SUBST(LIBO_VERSION_SUFFIX)
466 AC_SUBST(LIBO_VERSION_SUFFIX_SUFFIX)
467 AC_SUBST(MACOSX_BUNDLE_SHORTVERSION)
468 AC_SUBST(MACOSX_BUNDLE_VERSION)
470 AC_DEFINE_UNQUOTED(LIBO_VERSION_MAJOR,$LIBO_VERSION_MAJOR)
471 AC_DEFINE_UNQUOTED(LIBO_VERSION_MINOR,$LIBO_VERSION_MINOR)
472 AC_DEFINE_UNQUOTED(LIBO_VERSION_MICRO,$LIBO_VERSION_MICRO)
473 AC_DEFINE_UNQUOTED(LIBO_VERSION_PATCH,$LIBO_VERSION_PATCH)
475 LIBO_THIS_YEAR=`date +%Y`
476 AC_DEFINE_UNQUOTED(LIBO_THIS_YEAR,$LIBO_THIS_YEAR)
478 AC_DEFINE_UNQUOTED([BUILDCONFIG],[["$ac_configure_args"]],[Options passed to configure script])
480 dnl ===================================================================
481 dnl Product version
482 dnl ===================================================================
483 AC_MSG_CHECKING([for product version])
484 PRODUCTVERSION="$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR"
485 AC_MSG_RESULT([$PRODUCTVERSION])
486 AC_SUBST(PRODUCTVERSION)
488 AC_PROG_EGREP
489 # AC_PROG_EGREP doesn't set GREP on all systems as well
490 AC_PATH_PROG(GREP, grep)
492 BUILDDIR=`pwd`
493 cd $srcdir
494 SRC_ROOT=`pwd`
495 cd $BUILDDIR
496 x_Cygwin=[\#]
498 dnl ======================================
499 dnl Required GObject introspection version
500 dnl ======================================
501 INTROSPECTION_REQUIRED_VERSION=1.32.0
503 dnl ===================================================================
504 dnl Search all the common names for GNU Make
505 dnl ===================================================================
506 AC_MSG_CHECKING([for GNU Make])
508 # try to use our own make if it is available and GNUMAKE was not already defined
509 if test -z "$GNUMAKE"; then
510     if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/make" ; then
511         GNUMAKE="$LODE_HOME/opt/bin/make"
512     elif test -x "/opt/lo/bin/make"; then
513         GNUMAKE="/opt/lo/bin/make"
514     fi
517 GNUMAKE_WIN_NATIVE=
518 for a in "$MAKE" "$GNUMAKE" make gmake gnumake; do
519     if test -n "$a"; then
520         $a --version 2> /dev/null | grep GNU  2>&1 > /dev/null
521         if test $? -eq 0;  then
522             if test "$build_os" = "cygwin"; then
523                 if test -n "$($a -v | grep 'Built for Windows')" ; then
524                     GNUMAKE="$(cygpath -m "$(which "$(cygpath -u $a)")")"
525                     GNUMAKE_WIN_NATIVE="TRUE"
526                 else
527                     GNUMAKE=`which $a`
528                 fi
529             else
530                 GNUMAKE=`which $a`
531             fi
532             break
533         fi
534     fi
535 done
536 AC_MSG_RESULT($GNUMAKE)
537 if test -z "$GNUMAKE"; then
538     AC_MSG_ERROR([not found. install GNU Make.])
539 else
540     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
541         AC_MSG_NOTICE([Using a native Win32 GNU Make version.])
542     fi
545 win_short_path_for_make()
547     local short_path="$1"
548     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
549         cygpath -sm "$short_path"
550     else
551         cygpath -u "$(cygpath -d "$short_path")"
552     fi
556 if test "$build_os" = "cygwin"; then
557     PathFormat "$SRC_ROOT"
558     SRC_ROOT="$formatted_path"
559     PathFormat "$BUILDDIR"
560     BUILDDIR="$formatted_path"
561     x_Cygwin=
562     AC_MSG_CHECKING(for explicit COMSPEC)
563     if test -z "$COMSPEC"; then
564         AC_MSG_ERROR([COMSPEC not set in environment, please set it and rerun])
565     else
566         AC_MSG_RESULT([found: $COMSPEC])
567     fi
570 AC_SUBST(SRC_ROOT)
571 AC_SUBST(BUILDDIR)
572 AC_SUBST(x_Cygwin)
573 AC_DEFINE_UNQUOTED(SRCDIR,"$SRC_ROOT")
574 AC_DEFINE_UNQUOTED(SRC_ROOT,"$SRC_ROOT")
575 AC_DEFINE_UNQUOTED(BUILDDIR,"$BUILDDIR")
577 if test "z$EUID" = "z0" -a "`uname -o 2>/dev/null`" = "Cygwin"; then
578     AC_MSG_ERROR([You must build LibreOffice as a normal user - not using an administrative account])
581 # need sed in os checks...
582 AC_PATH_PROGS(SED, sed)
583 if test -z "$SED"; then
584     AC_MSG_ERROR([install sed to run this script])
587 # Set the ENABLE_LTO variable
588 # ===================================================================
589 AC_MSG_CHECKING([whether to use link-time optimization])
590 if test -n "$enable_lto" -a "$enable_lto" != "no"; then
591     ENABLE_LTO="TRUE"
592     AC_MSG_RESULT([yes])
593 else
594     ENABLE_LTO=""
595     AC_MSG_RESULT([no])
597 AC_SUBST(ENABLE_LTO)
599 AC_ARG_ENABLE(fuzz-options,
600     AS_HELP_STRING([--enable-fuzz-options],
601         [Randomly enable or disable each of those configurable options
602          that are supposed to be freely selectable without interdependencies,
603          or where bad interaction from interdependencies is automatically avoided.])
606 dnl ===================================================================
607 dnl When building for Android, --with-android-ndk,
608 dnl --with-android-ndk-toolchain-version and --with-android-sdk are
609 dnl mandatory
610 dnl ===================================================================
612 AC_ARG_WITH(android-ndk,
613     AS_HELP_STRING([--with-android-ndk],
614         [Specify location of the Android Native Development Kit. Mandatory when building for Android.]),
617 AC_ARG_WITH(android-ndk-toolchain-version,
618     AS_HELP_STRING([--with-android-ndk-toolchain-version],
619         [Specify which toolchain version to use, of those present in the
620         Android NDK you are using. The default (and only supported version currently) is "clang5.0"]),,
621         with_android_ndk_toolchain_version=clang5.0)
623 AC_ARG_WITH(android-sdk,
624     AS_HELP_STRING([--with-android-sdk],
625         [Specify location of the Android SDK. Mandatory when building for Android.]),
628 AC_ARG_WITH(android-api-level,
629     AS_HELP_STRING([--with-android-api-level],
630         [Specify the API level when building for Android. Defaults to 16 for ARM and x86 and to 21 for ARM64 and x86-64]),
633 ANDROID_NDK_HOME=
634 if test -z "$with_android_ndk" -a -e "$SRC_ROOT/external/android-ndk" -a "$build" != "$host"; then
635     with_android_ndk="$SRC_ROOT/external/android-ndk"
637 if test -n "$with_android_ndk"; then
638     eval ANDROID_NDK_HOME=$with_android_ndk
640     # Set up a lot of pre-canned defaults
642     if test ! -f $ANDROID_NDK_HOME/RELEASE.TXT; then
643         if test ! -f $ANDROID_NDK_HOME/source.properties; then
644             AC_MSG_ERROR([Unrecognized Android NDK. Missing RELEASE.TXT or source.properties file in $ANDROID_NDK_HOME.])
645         fi
646         ANDROID_NDK_VERSION=`sed -n -e 's/Pkg.Revision = //p' $ANDROID_NDK_HOME/source.properties`
647     else
648         ANDROID_NDK_VERSION=`cut -f1 -d' ' <$ANDROID_NDK_HOME/RELEASE.TXT`
649     fi
650     if test -z "$ANDROID_NDK_VERSION";  then
651         AC_MSG_ERROR([Failed to determine Android NDK version. Please check your installation.])
652     fi
653     case $ANDROID_NDK_VERSION in
654     r9*|r10*)
655         AC_MSG_ERROR([Building for Android is only supported with NDK versions above 16.x*])
656         ;;
657     11.1.*|12.1.*|13.1.*|14.1.*)
658         AC_MSG_ERROR([Building for Android is only supported with NDK versions above 16.x.*])
659         ;;
660     16.*|17.*|18.*|19.*|20.*)
661         ;;
662     *)
663         AC_MSG_WARN([Untested Android NDK version $ANDROID_NDK_VERSION, only versions 16.* til 20.* have been used successfully. Proceed at your own risk.])
664         add_warning "Untested Android NDK version $ANDROID_NDK_VERSION, only versions 16.* til 20.* have been used successfully. Proceed at your own risk."
665         ;;
666     esac
668     ANDROID_API_LEVEL=16
669     if test -n "$with_android_api_level" ; then
670         ANDROID_API_LEVEL="$with_android_api_level"
671     fi
673     android_cpu=$host_cpu
674     if test $host_cpu = arm; then
675         android_platform_prefix=arm-linux-androideabi
676         android_gnu_prefix=$android_platform_prefix
677         LLVM_TRIPLE=armv7a-linux-androideabi
678         ANDROID_APP_ABI=armeabi-v7a
679         ANDROIDCFLAGS="-mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=neon -Wl,--fix-cortex-a8"
680     elif test $host_cpu = aarch64; then
681         android_platform_prefix=aarch64-linux-android
682         android_gnu_prefix=$android_platform_prefix
683         LLVM_TRIPLE=$android_platform_prefix
684         # minimum android version that supports aarch64
685         if test "$ANDROID_API_LEVEL" -lt "21" ; then
686             ANDROID_API_LEVEL=21
687         fi
688         ANDROID_APP_ABI=arm64-v8a
689     elif test $host_cpu = x86_64; then
690         android_platform_prefix=x86_64-linux-android
691         android_gnu_prefix=$android_platform_prefix
692         LLVM_TRIPLE=$android_platform_prefix
693         # minimum android version that supports x86_64
694         ANDROID_API_LEVEL=21
695         ANDROID_APP_ABI=x86_64
696     else
697         # host_cpu is something like "i386" or "i686" I guess, NDK uses
698         # "x86" in some contexts
699         android_cpu=x86
700         android_platform_prefix=$android_cpu
701         android_gnu_prefix=i686-linux-android
702         LLVM_TRIPLE=$android_gnu_prefix
703         ANDROID_APP_ABI=x86
704     fi
706     case "$with_android_ndk_toolchain_version" in
707     clang5.0)
708         ANDROID_GCC_TOOLCHAIN_VERSION=4.9
709         ;;
710     *)
711         AC_MSG_ERROR([Unrecognized value for the --with-android-ndk-toolchain-version option. Building for Android is only supported with Clang 5.*])
712     esac
714     AC_MSG_NOTICE([using the Android API level... $ANDROID_API_LEVEL])
716     # NDK 15 or later toolchain is 64bit-only, except for Windows that we don't support. Using a 64-bit
717     # linker is required if you compile large parts of the code with -g. A 32-bit linker just won't
718     # manage to link the (app-specific) single huge .so that is built for the app in
719     # android/source/ if there is debug information in a significant part of the object files.
720     # (A 64-bit ld.gold grows too much over 10 gigabytes of virtual space when linking such a .so if
721     # all objects have been built with debug information.)
722     case $build_os in
723     linux-gnu*)
724         android_HOST_TAG=linux-x86_64
725         ;;
726     darwin*)
727         android_HOST_TAG=darwin-x86_64
728         ;;
729     *)
730         AC_MSG_ERROR([We only support building for Android from Linux or macOS])
731         # ndk would also support windows and windows-x86_64
732         ;;
733     esac
734     android_TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/$android_HOST_TAG
735     ANDROID_COMPILER_BIN=$android_TOOLCHAIN/bin
736     dnl TODO: NSS build uses it...
737     ANDROID_BINUTILS_PREBUILT_ROOT=$ANDROID_NDK_HOME/toolchains/$android_platform_prefix-$ANDROID_GCC_TOOLCHAIN_VERSION/prebuilt/$android_HOST_TAG
738     AC_SUBST(ANDROID_BINUTILS_PREBUILT_ROOT)
740     test -z "$AR" && AR=$ANDROID_COMPILER_BIN/$android_gnu_prefix-ar
741     test -z "$NM" && NM=$ANDROID_COMPILER_BIN/$android_gnu_prefix-nm
742     test -z "$OBJDUMP" && OBJDUMP=$ANDROID_COMPILER_BIN/$android_gnu_prefix-objdump
743     test -z "$RANLIB" && RANLIB=$ANDROID_COMPILER_BIN/$android_gnu_prefix-ranlib
744     test -z "$STRIP" && STRIP=$ANDROID_COMPILER_BIN/$android_gnu_prefix-strip
746     ANDROIDCFLAGS="$ANDROIDCFLAGS -target ${LLVM_TRIPLE}${ANDROID_API_LEVEL}"
747     ANDROIDCFLAGS="$ANDROIDCFLAGS -no-canonical-prefixes -ffunction-sections -fdata-sections -Qunused-arguments"
748     if test "$ENABLE_LTO" = TRUE; then
749         # -flto comes from com_GCC_defs.mk, too, but we need to make sure it gets passed as part of
750         # $CC and $CXX when building external libraries
751         ANDROIDCFLAGS="$ANDROIDCFLAGS -flto -fuse-linker-plugin -O2"
752     fi
754     ANDROIDCXXFLAGS="$ANDROIDCFLAGS -stdlib=libc++"
756     if test -z "$CC"; then
757         CC="$ANDROID_COMPILER_BIN/clang $ANDROIDCFLAGS"
758         CC_BASE="clang"
759     fi
760     if test -z "$CXX"; then
761         CXX="$ANDROID_COMPILER_BIN/clang++ $ANDROIDCXXFLAGS"
762         CXX_BASE="clang++"
763     fi
765 AC_SUBST(ANDROID_NDK_HOME)
766 AC_SUBST(ANDROID_APP_ABI)
767 AC_SUBST(ANDROID_GCC_TOOLCHAIN_VERSION)
769 dnl ===================================================================
770 dnl --with-android-sdk
771 dnl ===================================================================
772 ANDROID_SDK_HOME=
773 if test -z "$with_android_sdk" -a -e "$SRC_ROOT/external/android-sdk-linux" -a "$build" != "$host"; then
774     with_android_sdk="$SRC_ROOT/external/android-sdk-linux"
776 if test -n "$with_android_sdk"; then
777     eval ANDROID_SDK_HOME=$with_android_sdk
778     PATH="$ANDROID_SDK_HOME/platform-tools:$ANDROID_SDK_HOME/tools:$PATH"
780 AC_SUBST(ANDROID_SDK_HOME)
782 AC_ARG_ENABLE([android-lok],
783     AS_HELP_STRING([--enable-android-lok],
784         [The Android app from the android/ subdir needs several tweaks all
785          over the place that break the LOK when used in the Online-based
786          Android app.  This switch indicates that the intent of this build is
787          actually the Online-based, non-modified LOK.])
789 ENABLE_ANDROID_LOK=
790 if test -n "$ANDROID_NDK_HOME" ; then
791     if test "$enable_android_lok" = yes; then
792         ENABLE_ANDROID_LOK=TRUE
793         AC_DEFINE(HAVE_FEATURE_ANDROID_LOK)
794         AC_MSG_NOTICE([building the Android version... for the Online-based Android app])
795     else
796         AC_MSG_NOTICE([building the Android version... for the app from the android/ subdir])
797     fi
799 AC_SUBST([ENABLE_ANDROID_LOK])
801 libo_FUZZ_ARG_ENABLE([android-editing],
802     AS_HELP_STRING([--enable-android-editing],
803         [Enable the experimental editing feature on Android.])
805 ENABLE_ANDROID_EDITING=
806 if test "$enable_android_editing" = yes; then
807     ENABLE_ANDROID_EDITING=TRUE
809 AC_SUBST([ENABLE_ANDROID_EDITING])
811 disable_database_connectivity_dependencies()
813     enable_evolution2=no
814     enable_firebird_sdbc=no
815     enable_mariadb_sdbc=no
816     enable_postgresql_sdbc=no
817     enable_report_builder=no
820 # ===================================================================
822 # Start initial platform setup
824 # The using_* variables reflect platform support and should not be
825 # changed after the "End initial platform setup" block.
826 # This is also true for most test_* variables.
827 # ===================================================================
828 build_crypto=yes
829 test_cmis=yes
830 test_clucene=no
831 test_gdb_index=no
832 test_openldap=yes
833 test_split_debug=no
834 test_webdav=yes
836 # There is currently just iOS not using salplug, so this explicitly enables it.
837 # must: using_freetype_fontconfig
838 #  may: using_headless_plugin defaults to $using_freetype_fontconfig
839 using_vclplug=yes
840 # must: using_x11
842 # Default values, as such probably valid just for Linux, set
843 # differently below just for Mac OSX, but at least better than
844 # hardcoding these as we used to do. Much of this is duplicated also
845 # in solenv for old build system and for gbuild, ideally we should
846 # perhaps define stuff like this only here in configure.ac?
848 LINKFLAGSSHL="-shared"
849 PICSWITCH="-fpic"
850 DLLPOST=".so"
852 LINKFLAGSNOUNDEFS="-Wl,-z,defs"
854 INSTROOTBASESUFFIX=
855 INSTROOTCONTENTSUFFIX=
856 SDKDIRNAME=sdk
858 HOST_PLATFORM="$host"
860 host_cpu_for_clang="$host_cpu"
862 case "$host_os" in
864 solaris*)
865     using_freetype_fontconfig=yes
866     using_x11=yes
867     build_skia=yes
868     _os=SunOS
870     dnl ===========================================================
871     dnl Check whether we're using Solaris 10 - SPARC or Intel.
872     dnl ===========================================================
873     AC_MSG_CHECKING([the Solaris operating system release])
874     _os_release=`echo $host_os | $SED -e s/solaris2\.//`
875     if test "$_os_release" -lt "10"; then
876         AC_MSG_ERROR([use Solaris >= 10 to build LibreOffice])
877     else
878         AC_MSG_RESULT([ok ($_os_release)])
879     fi
881     dnl Check whether we're using a SPARC or i386 processor
882     AC_MSG_CHECKING([the processor type])
883     if test "$host_cpu" = "sparc" -o "$host_cpu" = "i386"; then
884         AC_MSG_RESULT([ok ($host_cpu)])
885     else
886         AC_MSG_ERROR([only SPARC and i386 processors are supported])
887     fi
888     ;;
890 linux-gnu*|k*bsd*-gnu*|linux-musl*)
891     using_freetype_fontconfig=yes
892     using_x11=yes
893     build_skia=yes
894     test_gdb_index=yes
895     test_split_debug=yes
896     if test "$enable_fuzzers" = yes; then
897         test_system_freetype=no
898     fi
899     _os=Linux
900     ;;
902 gnu)
903     using_freetype_fontconfig=yes
904     using_x11=no
905     _os=GNU
906      ;;
908 cygwin*|wsl*)
909     # When building on Windows normally with MSVC under Cygwin,
910     # configure thinks that the host platform (the platform the
911     # built code will run on) is Cygwin, even if it obviously is
912     # Windows, which in Autoconf terminology is called
913     # "mingw32". (Which is misleading as MinGW is the name of the
914     # tool-chain, not an operating system.)
916     # Somewhat confusing, yes. But this configure script doesn't
917     # look at $host etc that much, it mostly uses its own $_os
918     # variable, set here in this case statement.
920     using_freetype_fontconfig=no
921     using_x11=no
922     test_openldap=no
923     build_skia=yes
924     _os=WINNT
926     DLLPOST=".dll"
927     LINKFLAGSNOUNDEFS=
929     if test "$host_cpu" = "aarch64"; then
930         build_skia=no
931         enable_gpgmepp=no
932         enable_coinmp=no
933         enable_firebird_sdbc=no
934     fi
935     ;;
937 darwin*|macos*) # macOS
938     using_freetype_fontconfig=no
939     using_x11=no
940     build_skia=yes
941     if test -n "$LODE_HOME" ; then
942         mac_sanitize_path
943         AC_MSG_NOTICE([sanitized the PATH to $PATH])
944     fi
945     _os=Darwin
946     INSTROOTBASESUFFIX=/$PRODUCTNAME_WITHOUT_SPACES.app
947     INSTROOTCONTENTSUFFIX=/Contents
948     SDKDIRNAME=${PRODUCTNAME_WITHOUT_SPACES}${PRODUCTVERSION}_SDK
949     # See comment above the case "$host_os"
950     LINKFLAGSSHL="-dynamiclib -single_module"
952     # -fPIC is default
953     PICSWITCH=""
955     DLLPOST=".dylib"
957     # -undefined error is the default
958     LINKFLAGSNOUNDEFS=""
959     case "$host_cpu" in
960     aarch64|arm64)
961         case "$host_os" in
962         macos*)
963             # HOST_PLATFORM is used for external projects and their configury occasionally doesn't like
964             # the "macos" part so be sure to use aarch64-apple-darwin for now.
965             HOST_PLATFORM=aarch64-apple-darwin
966             ;;
967         esac
969         # Apple's Clang uses "arm64"
970         host_cpu_for_clang=arm64
971     esac
974 ios*) # iOS
975     using_freetype_fontconfig=no
976     using_vclplug=no
977     using_x11=no
978     build_crypto=no
979     test_cmis=no
980     test_openldap=no
981     test_webdav=no
982     if test -n "$LODE_HOME" ; then
983         mac_sanitize_path
984         AC_MSG_NOTICE([sanitized the PATH to $PATH])
985     fi
986     enable_gpgmepp=no
987     _os=iOS
988     enable_mpl_subset=yes
989     enable_lotuswordpro=no
990     disable_database_connectivity_dependencies
991     enable_coinmp=no
992     enable_lpsolve=no
993     enable_extension_integration=no
994     enable_xmlhelp=no
995     with_ppds=no
996     if test "$enable_ios_simulator" = "yes"; then
997         host=x86_64-apple-darwin
998     fi
999     # See comment above the case "$host_os"
1000     LINKFLAGSSHL="-dynamiclib -single_module"
1002     # -fPIC is default
1003     PICSWITCH=""
1005     DLLPOST=".dylib"
1007     # -undefined error is the default
1008     LINKFLAGSNOUNDEFS=""
1010     # HOST_PLATFORM is used for external projects and their configury typically doesn't like the "ios"
1011     # part, so use aarch64-apple-darwin for now.
1012     HOST_PLATFORM=aarch64-apple-darwin
1014     # Apple's Clang uses "arm64"
1015     host_cpu_for_clang=arm64
1018 freebsd*)
1019     using_freetype_fontconfig=yes
1020     using_x11=yes
1021     build_skia=yes
1022     AC_MSG_CHECKING([the FreeBSD operating system release])
1023     if test -n "$with_os_version"; then
1024         OSVERSION="$with_os_version"
1025     else
1026         OSVERSION=`/sbin/sysctl -n kern.osreldate`
1027     fi
1028     AC_MSG_RESULT([found OSVERSION=$OSVERSION])
1029     AC_MSG_CHECKING([which thread library to use])
1030     if test "$OSVERSION" -lt "500016"; then
1031         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1032         PTHREAD_LIBS="-pthread"
1033     elif test "$OSVERSION" -lt "502102"; then
1034         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1035         PTHREAD_LIBS="-lc_r"
1036     else
1037         PTHREAD_CFLAGS=""
1038         PTHREAD_LIBS="-pthread"
1039     fi
1040     AC_MSG_RESULT([$PTHREAD_LIBS])
1041     _os=FreeBSD
1042     ;;
1044 *netbsd*)
1045     using_freetype_fontconfig=yes
1046     using_x11=yes
1047     test_gtk3_kde5=no
1048     build_skia=yes
1049     PTHREAD_LIBS="-pthread -lpthread"
1050     _os=NetBSD
1051     ;;
1053 aix*)
1054     using_freetype_fontconfig=yes
1055     using_x11=yes
1056     test_randr=no
1057     test_gstreamer_1_0=no
1058     PTHREAD_LIBS=-pthread
1059     _os=AIX
1060     ;;
1062 openbsd*)
1063     using_freetype_fontconfig=yes
1064     using_x11=yes
1065     PTHREAD_CFLAGS="-D_THREAD_SAFE"
1066     PTHREAD_LIBS="-pthread"
1067     _os=OpenBSD
1068     ;;
1070 dragonfly*)
1071     using_freetype_fontconfig=yes
1072     using_x11=yes
1073     build_skia=yes
1074     PTHREAD_LIBS="-pthread"
1075     _os=DragonFly
1076     ;;
1078 linux-android*)
1079     using_freetype_fontconfig=yes
1080     using_headless_plugin=no
1081     using_x11=no
1082     build_crypto=no
1083     test_openldap=no
1084     test_system_freetype=no
1085     test_webdav=no
1086     disable_database_connectivity_dependencies
1087     enable_lotuswordpro=no
1088     enable_mpl_subset=yes
1089     enable_cairo_canvas=no
1090     enable_coinmp=yes
1091     enable_lpsolve=no
1092     enable_odk=no
1093     enable_python=no
1094     enable_xmlhelp=no
1095     _os=Android
1097     AC_DEFINE(HAVE_FT_FACE_GETCHARVARIANTINDEX)
1098     ;;
1100 haiku*)
1101     using_freetype_fontconfig=yes
1102     using_x11=no
1103     test_gtk3_kde5=no
1104     test_kf5=yes
1105     enable_odk=no
1106     enable_coinmp=no
1107     enable_pdfium=no
1108     enable_sdremote=no
1109     enable_postgresql_sdbc=no
1110     enable_firebird_sdbc=no
1111     _os=Haiku
1112     ;;
1114 emscripten)
1115     using_freetype_fontconfig=yes
1116     using_x11=no
1117     test_openldap=no
1118     enable_compiler_plugins=no
1119     test_cmis=no
1120     test_webdav=no
1121     enable_database_connectivity=no
1122     enable_lpsolve=no
1123     enable_xmlhelp=no
1124     with_system_zlib=no
1125     with_theme="breeze"
1126     _os=Emscripten
1127     ;;
1130     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
1131     ;;
1132 esac
1134 AC_SUBST(HOST_PLATFORM)
1136 if test -z "$using_x11" -o -z "$using_freetype_fontconfig"; then
1137     AC_MSG_ERROR([You must set \$using_freetype_fontconfig and \$using_x11 for your platform])
1140 # Set defaults, if not set by platform
1141 test "${test_cups+set}" = set || test_cups="$using_x11"
1142 test "${test_dbus+set}" = set || test_dbus="$using_x11"
1143 test "${test_gstreamer_1_0+set}" = set || test_gstreamer_1_0="$using_x11"
1144 test "${test_gtk3+set}" = set || test_gtk3="$using_x11"
1145 test "${test_gtk4+set}" = set || test_gtk4="$using_x11"
1146 test "${test_kf5+set}" = set || test_kf5="$using_x11"
1147 # don't handle test_qt5, so it can disable test_kf5 later
1148 test "${test_qt6+set}" = set || test_qt6="$using_x11"
1149 test "${test_randr+set}" = set || test_randr="$using_x11"
1150 test "${test_xrender+set}" = set || test_xrender="$using_x11"
1151 test "${using_headless_plugin+set}" = set || using_headless_plugin="$using_freetype_fontconfig"
1153 test "${test_gtk3_kde5+set}" != set -a "$test_kf5" = yes -a "$test_gtk3" = yes && test_gtk3_kde5="yes"
1154 test "${test_system_fontconfig+set}" != set -a "${test_system_freetype+set}" = set && test_system_fontconfig="$test_system_freetype"
1155 test "${test_system_freetype+set}" != set -a "${test_system_fontconfig+set}" = set && test_system_freetype="$test_system_fontconfig"
1157 # convenience / platform overriding "fixes"
1158 # Don't sort!
1159 test "$test_kf5" = yes -a "$test_qt5" = no && test_kf5=no
1160 test "$test_kf5" = yes && test_qt5=yes
1161 test "$test_gtk3" != yes -o "$test_kf5" != yes && test_gtk3_kde5=no
1162 test "$using_freetype_fontconfig" = no && using_headless_plugin=no
1163 test "$using_freetype_fontconfig" = yes && test_cairo=yes
1165 # Keep in sync with the above $using_x11 depending test default list
1166 disable_x11_tests()
1168     test_cups=no
1169     test_dbus=no
1170     test_gstreamer_1_0=no
1171     test_gtk3_kde5=no
1172     test_gtk3=no
1173     test_gtk4=no
1174     test_kf5=no
1175     test_qt5=no
1176     test_qt6=no
1177     test_randr=no
1178     test_xrender=no
1181 test "$using_x11" = yes && USING_X11=TRUE
1183 if test "$using_freetype_fontconfig" = yes; then
1184     if test "$using_headless_plugin" = yes; then
1185         AC_DEFINE(ENABLE_HEADLESS)
1186         ENABLE_HEADLESS=TRUE
1187     fi
1188 else
1189     test_fontconfig=no
1190     test_freetype=no
1193 AC_SUBST(ENABLE_HEADLESS)
1195 AC_MSG_NOTICE([VCL platform uses freetype+fontconfig: $using_freetype_fontconfig])
1196 AC_MSG_NOTICE([VCL platform uses headless plugin: $using_headless_plugin])
1197 AC_MSG_NOTICE([VCL platform uses vclplug: $using_vclplug])
1198 AC_MSG_NOTICE([VCL platform uses X11: $using_x11])
1200 # ===================================================================
1202 # End initial platform setup
1204 # ===================================================================
1206 if test "$_os" = "Android" ; then
1207     # Verify that the NDK and SDK options are proper
1208     if test -z "$with_android_ndk"; then
1209         AC_MSG_ERROR([the --with-android-ndk option is mandatory, unless it is available at external/android-ndk/.])
1210     elif test ! -f "$ANDROID_NDK_HOME/meta/abis.json"; then
1211         AC_MSG_ERROR([the --with-android-ndk option does not point to an Android NDK])
1212     fi
1214     if test -z "$ANDROID_SDK_HOME"; then
1215         AC_MSG_ERROR([the --with-android-sdk option is mandatory, unless it is available at external/android-sdk-linux/.])
1216     elif test ! -d "$ANDROID_SDK_HOME/platforms"; then
1217         AC_MSG_ERROR([the --with-android-sdk option does not point to an Android SDK])
1218     fi
1220     BUILD_TOOLS_VERSION=`$SED -n -e 's/.*buildToolsVersion "\(.*\)"/\1/p' $SRC_ROOT/android/source/build.gradle`
1221     if test ! -d "$ANDROID_SDK_HOME/build-tools/$BUILD_TOOLS_VERSION"; then
1222         AC_MSG_WARN([android build-tools $BUILD_TOOLS_VERSION not found - install with
1223                          $ANDROID_SDK_HOME/tools/android update sdk -u --all --filter build-tools-$BUILD_TOOLS_VERSION
1224                     or adjust change $SRC_ROOT/android/source/build.gradle accordingly])
1225         add_warning "android build-tools $BUILD_TOOLS_VERSION not found - install with"
1226         add_warning "    $ANDROID_SDK_HOME/tools/android update sdk -u --all --filter build-tools-$BUILD_TOOLS_VERSION"
1227         add_warning "or adjust $SRC_ROOT/android/source/build.gradle accordingly"
1228     fi
1229     if test ! -f "$ANDROID_SDK_HOME/extras/android/m2repository/source.properties"; then
1230         AC_MSG_WARN([android support repository not found - install with
1231                          $ANDROID_SDK_HOME/tools/android update sdk -u --filter extra-android-m2repository
1232                      to allow the build to download the specified version of the android support libraries])
1233         add_warning "android support repository not found - install with"
1234         add_warning "    $ANDROID_SDK_HOME/tools/android update sdk -u --filter extra-android-m2repository"
1235         add_warning "to allow the build to download the specified version of the android support libraries"
1236     fi
1239 if test "$_os" = "AIX"; then
1240     AC_PATH_PROG(GAWK, gawk)
1241     if test -z "$GAWK"; then
1242         AC_MSG_ERROR([gawk not found in \$PATH])
1243     fi
1246 AC_SUBST(SDKDIRNAME)
1248 AC_SUBST(PTHREAD_CFLAGS)
1249 AC_SUBST(PTHREAD_LIBS)
1251 # Check for explicit A/C/CXX/OBJC/OBJCXX/LDFLAGS.
1252 # By default use the ones specified by our build system,
1253 # but explicit override is possible.
1254 AC_MSG_CHECKING(for explicit AFLAGS)
1255 if test -n "$AFLAGS"; then
1256     AC_MSG_RESULT([$AFLAGS])
1257     x_AFLAGS=
1258 else
1259     AC_MSG_RESULT(no)
1260     x_AFLAGS=[\#]
1262 AC_MSG_CHECKING(for explicit CFLAGS)
1263 if test -n "$CFLAGS"; then
1264     AC_MSG_RESULT([$CFLAGS])
1265     x_CFLAGS=
1266 else
1267     AC_MSG_RESULT(no)
1268     x_CFLAGS=[\#]
1270 AC_MSG_CHECKING(for explicit CXXFLAGS)
1271 if test -n "$CXXFLAGS"; then
1272     AC_MSG_RESULT([$CXXFLAGS])
1273     x_CXXFLAGS=
1274 else
1275     AC_MSG_RESULT(no)
1276     x_CXXFLAGS=[\#]
1278 AC_MSG_CHECKING(for explicit OBJCFLAGS)
1279 if test -n "$OBJCFLAGS"; then
1280     AC_MSG_RESULT([$OBJCFLAGS])
1281     x_OBJCFLAGS=
1282 else
1283     AC_MSG_RESULT(no)
1284     x_OBJCFLAGS=[\#]
1286 AC_MSG_CHECKING(for explicit OBJCXXFLAGS)
1287 if test -n "$OBJCXXFLAGS"; then
1288     AC_MSG_RESULT([$OBJCXXFLAGS])
1289     x_OBJCXXFLAGS=
1290 else
1291     AC_MSG_RESULT(no)
1292     x_OBJCXXFLAGS=[\#]
1294 AC_MSG_CHECKING(for explicit LDFLAGS)
1295 if test -n "$LDFLAGS"; then
1296     AC_MSG_RESULT([$LDFLAGS])
1297     x_LDFLAGS=
1298 else
1299     AC_MSG_RESULT(no)
1300     x_LDFLAGS=[\#]
1302 AC_SUBST(AFLAGS)
1303 AC_SUBST(CFLAGS)
1304 AC_SUBST(CXXFLAGS)
1305 AC_SUBST(OBJCFLAGS)
1306 AC_SUBST(OBJCXXFLAGS)
1307 AC_SUBST(LDFLAGS)
1308 AC_SUBST(x_AFLAGS)
1309 AC_SUBST(x_CFLAGS)
1310 AC_SUBST(x_CXXFLAGS)
1311 AC_SUBST(x_OBJCFLAGS)
1312 AC_SUBST(x_OBJCXXFLAGS)
1313 AC_SUBST(x_LDFLAGS)
1315 dnl These are potentially set for MSVC, in the code checking for UCRT below:
1316 my_original_CFLAGS=$CFLAGS
1317 my_original_CXXFLAGS=$CXXFLAGS
1318 my_original_CPPFLAGS=$CPPFLAGS
1320 dnl The following checks for gcc, cc and then cl (if it weren't guarded for win32)
1321 dnl Needs to precede the AC_C_BIGENDIAN and AC_SEARCH_LIBS calls below, which apparently call
1322 dnl AC_PROG_CC internally.
1323 if test "$_os" != "WINNT"; then
1324     # AC_PROG_CC sets CFLAGS to -g -O2 if not set, avoid that
1325     save_CFLAGS=$CFLAGS
1326     AC_PROG_CC
1327     CFLAGS=$save_CFLAGS
1328     if test -z "$CC_BASE"; then
1329         CC_BASE=`first_arg_basename "$CC"`
1330     fi
1333 if test "$_os" != "WINNT"; then
1334     AC_C_BIGENDIAN([ENDIANNESS=big], [ENDIANNESS=little])
1335 else
1336     ENDIANNESS=little
1338 AC_SUBST(ENDIANNESS)
1340 if test $_os != "WINNT"; then
1341     save_LIBS="$LIBS"
1342     AC_SEARCH_LIBS([dlsym], [dl],
1343         [case "$ac_cv_search_dlsym" in -l*) DLOPEN_LIBS="$ac_cv_search_dlsym";; esac],
1344         [AC_MSG_ERROR([dlsym not found in either libc nor libdl])])
1345     LIBS="$save_LIBS"
1347 AC_SUBST(DLOPEN_LIBS)
1349 # Check for a (GNU) backtrace implementation
1350 AC_ARG_VAR([BACKTRACE_CFLAGS], [Compiler flags needed to use backtrace(3)])
1351 AC_ARG_VAR([BACKTRACE_LIBS], [Linker flags needed to use backtrace(3)])
1352 AS_IF([test "x$BACKTRACE_LIBS$BACKTRACE_CFLAGS" = x], [
1353     save_LIBS="$LIBS"
1354     AC_SEARCH_LIBS([backtrace], [libexecinfo],
1355         [case "$ac_cv_search_backtrace" in -l*) BACKTRACE_LIBS="$ac_cv_search_backtrace";; esac],
1356         [PKG_CHECK_MODULES([BACKTRACE], [libexecinfo], [ac_cv_search_backtrace=], [:])])
1357     LIBS="$save_LIBS"
1359 AS_IF([test "x$ac_cv_search_backtrace" != xno ], [
1360     AC_DEFINE([HAVE_FEATURE_BACKTRACE])
1363 dnl ===================================================================
1364 dnl Sanity checks for Emscripten SDK setup
1365 dnl ===================================================================
1367 if test "$_os" = "Emscripten"; then
1368     EMSCRIPTEN_ERROR=0
1369     if ! which emconfigure >/dev/null 2>&1; then
1370         AC_MSG_WARN([emconfigure must be in your \$PATH])
1371         EMSCRIPTEN_ERROR=1
1372     fi
1373     if test -z "$EMMAKEN_JUST_CONFIGURE"; then
1374         AC_MSG_WARN(["\$EMMAKEN_JUST_CONFIGURE wasn't set by emconfigure. Prefix configure or use autogen.sh])
1375         EMSCRIPTEN_ERROR=1
1376     fi
1377     if test $EMSCRIPTEN_ERROR -ne 0; then
1378         AC_MSG_ERROR(["Please fix your EMSDK setup to build with Emscripten!"])
1379     fi
1382 ###############################################################################
1383 # Extensions switches --enable/--disable
1384 ###############################################################################
1385 # By default these should be enabled unless having extra dependencies.
1386 # If there is extra dependency over configure options then the enable should
1387 # be automagic based on whether the requiring feature is enabled or not.
1388 # All this options change anything only with --enable-extension-integration.
1390 # The name of this option and its help string makes it sound as if
1391 # extensions are built anyway, just not integrated in the installer,
1392 # if you use --disable-extension-integration. Is that really the
1393 # case?
1395 AC_ARG_ENABLE(ios-simulator,
1396     AS_HELP_STRING([--enable-ios-simulator],
1397         [build for iOS simulator])
1400 libo_FUZZ_ARG_ENABLE(extension-integration,
1401     AS_HELP_STRING([--disable-extension-integration],
1402         [Disable integration of the built extensions in the installer of the
1403          product. Use this switch to disable the integration.])
1406 AC_ARG_ENABLE(avmedia,
1407     AS_HELP_STRING([--disable-avmedia],
1408         [Disable displaying and inserting AV media in documents. Work in progress, use only if you are hacking on it.])
1411 AC_ARG_ENABLE(database-connectivity,
1412     AS_HELP_STRING([--disable-database-connectivity],
1413         [Disable various database connectivity. Work in progress, use only if you are hacking on it.])
1416 # This doesn't mean not building (or "integrating") extensions
1417 # (although it probably should; i.e. it should imply
1418 # --disable-extension-integration I guess), it means not supporting
1419 # any extension mechanism at all
1420 libo_FUZZ_ARG_ENABLE(extensions,
1421     AS_HELP_STRING([--disable-extensions],
1422         [Disable all add-on extension functionality. Work in progress, use only if you are hacking on it.])
1425 AC_ARG_ENABLE(scripting,
1426     AS_HELP_STRING([--disable-scripting],
1427         [Disable BASIC, Java and Python. Work in progress, use only if you are hacking on it.])
1430 # This is mainly for Android and iOS, but could potentially be used in some
1431 # special case otherwise, too, so factored out as a separate setting
1433 AC_ARG_ENABLE(dynamic-loading,
1434     AS_HELP_STRING([--disable-dynamic-loading],
1435         [Disable any use of dynamic loading of code. Work in progress, use only if you are hacking on it.])
1438 libo_FUZZ_ARG_ENABLE(report-builder,
1439     AS_HELP_STRING([--disable-report-builder],
1440         [Disable the Report Builder.])
1443 libo_FUZZ_ARG_ENABLE(ext-wiki-publisher,
1444     AS_HELP_STRING([--enable-ext-wiki-publisher],
1445         [Enable the Wiki Publisher extension.])
1448 libo_FUZZ_ARG_ENABLE(lpsolve,
1449     AS_HELP_STRING([--disable-lpsolve],
1450         [Disable compilation of the lp solve solver ])
1452 libo_FUZZ_ARG_ENABLE(coinmp,
1453     AS_HELP_STRING([--disable-coinmp],
1454         [Disable compilation of the CoinMP solver ])
1457 libo_FUZZ_ARG_ENABLE(pdfimport,
1458     AS_HELP_STRING([--disable-pdfimport],
1459         [Disable building the PDF import feature.])
1462 libo_FUZZ_ARG_ENABLE(pdfium,
1463     AS_HELP_STRING([--disable-pdfium],
1464         [Disable building PDFium. Results in unsecure PDF signature verification.])
1467 libo_FUZZ_ARG_ENABLE(skia,
1468     AS_HELP_STRING([--disable-skia],
1469         [Disable building Skia. Use --enable-skia=debug to build without optimizations.])
1472 ###############################################################################
1474 dnl ---------- *** ----------
1476 libo_FUZZ_ARG_ENABLE(mergelibs,
1477     AS_HELP_STRING([--enable-mergelibs],
1478         [Merge several of the smaller libraries into one big, "merged", one.])
1481 libo_FUZZ_ARG_ENABLE(breakpad,
1482     AS_HELP_STRING([--enable-breakpad],
1483         [Enables breakpad for crash reporting.])
1486 libo_FUZZ_ARG_ENABLE(crashdump,
1487     AS_HELP_STRING([--disable-crashdump],
1488         [Disable dump.ini and dump-file, when --enable-breakpad])
1491 AC_ARG_ENABLE(fetch-external,
1492     AS_HELP_STRING([--disable-fetch-external],
1493         [Disables fetching external tarballs from web sources.])
1496 AC_ARG_ENABLE(fuzzers,
1497     AS_HELP_STRING([--enable-fuzzers],
1498         [Enables building libfuzzer targets for fuzz testing.])
1501 libo_FUZZ_ARG_ENABLE(pch,
1502     AS_HELP_STRING([--enable-pch=<yes/no/system/base/normal/full>],
1503         [Enables precompiled header support for C++. Forced default on Windows/VC build.
1504          Using 'system' will include only external headers, 'base' will add also headers
1505          from base modules, 'normal' will also add all headers except from the module built,
1506          'full' will use all suitable headers even from a module itself.])
1509 libo_FUZZ_ARG_ENABLE(epm,
1510     AS_HELP_STRING([--enable-epm],
1511         [LibreOffice includes self-packaging code, that requires epm, however epm is
1512          useless for large scale package building.])
1515 libo_FUZZ_ARG_ENABLE(odk,
1516     AS_HELP_STRING([--enable-odk],
1517         [Enable building the Office Development Kit, the part that extensions need to build against])
1520 AC_ARG_ENABLE(mpl-subset,
1521     AS_HELP_STRING([--enable-mpl-subset],
1522         [Don't compile any pieces which are not MPL or more liberally licensed])
1525 libo_FUZZ_ARG_ENABLE(evolution2,
1526     AS_HELP_STRING([--enable-evolution2],
1527         [Allows the built-in evolution 2 addressbook connectivity build to be
1528          enabled.])
1531 AC_ARG_ENABLE(avahi,
1532     AS_HELP_STRING([--enable-avahi],
1533         [Determines whether to use Avahi to advertise Impress to remote controls.])
1536 libo_FUZZ_ARG_ENABLE(werror,
1537     AS_HELP_STRING([--enable-werror],
1538         [Turn warnings to errors. (Has no effect in modules where the treating
1539          of warnings as errors is disabled explicitly.)]),
1542 libo_FUZZ_ARG_ENABLE(assert-always-abort,
1543     AS_HELP_STRING([--enable-assert-always-abort],
1544         [make assert() failures abort even when building without --enable-debug or --enable-dbgutil.]),
1547 libo_FUZZ_ARG_ENABLE(dbgutil,
1548     AS_HELP_STRING([--enable-dbgutil],
1549         [Provide debugging support from --enable-debug and include additional debugging
1550          utilities such as object counting or more expensive checks.
1551          This is the recommended option for developers.
1552          Note that this makes the build ABI incompatible, it is not possible to mix object
1553          files or libraries from a --enable-dbgutil and a --disable-dbgutil build.]))
1555 libo_FUZZ_ARG_ENABLE(debug,
1556     AS_HELP_STRING([--enable-debug],
1557         [Include debugging information, disable compiler optimization and inlining plus
1558          extra debugging code like assertions. Extra large build! (enables -g compiler flag).]))
1560 libo_FUZZ_ARG_ENABLE(split-debug,
1561     AS_HELP_STRING([--disable-split-debug],
1562         [Disable using split debug information (-gsplit-dwarf compile flag). Split debug information
1563          saves disk space and build time, but requires tools that support it (both build tools and debuggers).]))
1565 libo_FUZZ_ARG_ENABLE(gdb-index,
1566     AS_HELP_STRING([--disable-gdb-index],
1567         [Disables creating debug information in the gdb index format, which makes gdb start faster.
1568          The feature requires the gold or lld linker.]))
1570 libo_FUZZ_ARG_ENABLE(sal-log,
1571     AS_HELP_STRING([--enable-sal-log],
1572         [Make SAL_INFO and SAL_WARN calls do something even in a non-debug build.]))
1574 libo_FUZZ_ARG_ENABLE(symbols,
1575     AS_HELP_STRING([--enable-symbols],
1576         [Generate debug information.
1577          By default, enabled for --enable-debug and --enable-dbgutil, disabled
1578          otherwise. It is possible to explicitly specify gbuild build targets
1579          (where 'all' means everything, '-' prepended means to not enable, '/' appended means
1580          everything in the directory; there is no ordering, more specific overrides
1581          more general, and disabling takes precedence).
1582          Example: --enable-symbols="all -sw/ -Library_sc".]))
1584 libo_FUZZ_ARG_ENABLE(optimized,
1585     AS_HELP_STRING([--enable-optimized=<yes/no/debug>],
1586         [Whether to compile with optimization flags.
1587          By default, disabled for --enable-debug and --enable-dbgutil, enabled
1588          otherwise. Using 'debug' will try to use only optimizations that should
1589          not interfere with debugging. For Emscripten we default to optimized (-O1)
1590          debug build, as otherwise binaries become too large.]))
1592 libo_FUZZ_ARG_ENABLE(runtime-optimizations,
1593     AS_HELP_STRING([--disable-runtime-optimizations],
1594         [Statically disable certain runtime optimizations (like rtl/alloc.h or
1595          JVM JIT) that are known to interact badly with certain dynamic analysis
1596          tools (like -fsanitize=address or Valgrind).  By default, disabled iff
1597          CC contains "-fsanitize=*".  (For Valgrind, those runtime optimizations
1598          are typically disabled dynamically via RUNNING_ON_VALGRIND.)]))
1600 AC_ARG_WITH(valgrind,
1601     AS_HELP_STRING([--with-valgrind],
1602         [Make availability of Valgrind headers a hard requirement.]))
1604 libo_FUZZ_ARG_ENABLE(compiler-plugins,
1605     AS_HELP_STRING([--enable-compiler-plugins],
1606         [Enable compiler plugins that will perform additional checks during
1607          building. Enabled automatically by --enable-dbgutil.
1608          Use --enable-compiler-plugins=debug to also enable debug code in the plugins.]))
1609 COMPILER_PLUGINS_DEBUG=
1610 if test "$enable_compiler_plugins" = debug; then
1611     enable_compiler_plugins=yes
1612     COMPILER_PLUGINS_DEBUG=TRUE
1615 libo_FUZZ_ARG_ENABLE(compiler-plugins-analyzer-pch,
1616     AS_HELP_STRING([--disable-compiler-plugins-analyzer-pch],
1617         [Disable use of precompiled headers when running the Clang compiler plugin analyzer.  Not
1618          relevant in the --disable-compiler-plugins case.]))
1620 libo_FUZZ_ARG_ENABLE(ooenv,
1621     AS_HELP_STRING([--enable-ooenv],
1622         [Enable ooenv for the instdir installation.]))
1624 AC_ARG_ENABLE(lto,
1625     AS_HELP_STRING([--enable-lto],
1626         [Enable link-time optimization. Suitable for (optimised) product builds. Building might take
1627          longer but libraries and executables are optimized for speed. For GCC, best to use the 'gold'
1628          linker.)]))
1630 AC_ARG_ENABLE(python,
1631     AS_HELP_STRING([--enable-python=<no/auto/system/internal/fully-internal>],
1632         [Enables or disables Python support at run-time.
1633          Also specifies what Python to use at build-time.
1634          'fully-internal' even forces the internal version for uses of Python
1635          during the build.
1636          On macOS the only choices are
1637          'internal' (default) or 'fully-internal'. Otherwise the default is 'auto'.
1638          ]))
1640 libo_FUZZ_ARG_ENABLE(gtk3,
1641     AS_HELP_STRING([--disable-gtk3],
1642         [Determines whether to use Gtk+ 3.0 vclplug on platforms where Gtk+ 3.0 is available.]),
1643 ,test "${enable_gtk3+set}" = set || enable_gtk3=yes)
1645 AC_ARG_ENABLE(gtk4,
1646     AS_HELP_STRING([--enable-gtk4],
1647         [Determines whether to use Gtk+ 4.0 vclplug on platforms where Gtk+ 4.0 is available.]))
1649 AC_ARG_ENABLE(introspection,
1650     AS_HELP_STRING([--enable-introspection],
1651         [Generate files for GObject introspection.  Requires --enable-gtk3.  (Typically used by
1652          Linux distributions.)]))
1654 AC_ARG_ENABLE(split-app-modules,
1655     AS_HELP_STRING([--enable-split-app-modules],
1656         [Split file lists for app modules, e.g. base, calc.
1657          Has effect only with make distro-pack-install]),
1660 AC_ARG_ENABLE(split-opt-features,
1661     AS_HELP_STRING([--enable-split-opt-features],
1662         [Split file lists for some optional features, e.g. pyuno, testtool.
1663          Has effect only with make distro-pack-install]),
1666 libo_FUZZ_ARG_ENABLE(cairo-canvas,
1667     AS_HELP_STRING([--disable-cairo-canvas],
1668         [Determines whether to build the Cairo canvas on platforms where Cairo is available.]),
1671 libo_FUZZ_ARG_ENABLE(dbus,
1672     AS_HELP_STRING([--disable-dbus],
1673         [Determines whether to enable features that depend on dbus.
1674          e.g. Presentation mode screensaver control, bluetooth presentation control, automatic font install]),
1675 ,test "${enable_dbus+set}" = set || enable_dbus=yes)
1677 libo_FUZZ_ARG_ENABLE(sdremote,
1678     AS_HELP_STRING([--disable-sdremote],
1679         [Determines whether to enable Impress remote control (i.e. the server component).]),
1680 ,test "${enable_sdremote+set}" = set || enable_sdremote=yes)
1682 libo_FUZZ_ARG_ENABLE(sdremote-bluetooth,
1683     AS_HELP_STRING([--disable-sdremote-bluetooth],
1684         [Determines whether to build sdremote with bluetooth support.
1685          Requires dbus on Linux.]))
1687 libo_FUZZ_ARG_ENABLE(gio,
1688     AS_HELP_STRING([--disable-gio],
1689         [Determines whether to use the GIO support.]),
1690 ,test "${enable_gio+set}" = set || enable_gio=yes)
1692 AC_ARG_ENABLE(qt5,
1693     AS_HELP_STRING([--enable-qt5],
1694         [Determines whether to use Qt5 vclplug on platforms where Qt5 is
1695          available.]),
1698 AC_ARG_ENABLE(qt6,
1699     AS_HELP_STRING([--enable-qt6],
1700         [Determines whether to use Qt6 vclplug on platforms where Qt6 is
1701          available.]),
1704 AC_ARG_ENABLE(kf5,
1705     AS_HELP_STRING([--enable-kf5],
1706         [Determines whether to use Qt5/KF5 vclplug on platforms where Qt5 and
1707          KF5 are available.]),
1710 AC_ARG_ENABLE(gtk3_kde5,
1711     AS_HELP_STRING([--enable-gtk3-kde5],
1712         [Determines whether to use Gtk3 vclplug with KF5 file dialogs on
1713          platforms where Gtk3, Qt5 and Plasma is available.]),
1716 AC_ARG_ENABLE(gui,
1717     AS_HELP_STRING([--disable-gui],
1718         [Disable use of X11 or Wayland to reduce dependencies (e.g. for building LibreOfficeKit).]),
1719 ,enable_gui=yes)
1721 libo_FUZZ_ARG_ENABLE(randr,
1722     AS_HELP_STRING([--disable-randr],
1723         [Disable RandR support in the vcl project.]),
1724 ,test "${enable_randr+set}" = set || enable_randr=yes)
1726 libo_FUZZ_ARG_ENABLE(gstreamer-1-0,
1727     AS_HELP_STRING([--disable-gstreamer-1-0],
1728         [Disable building with the gstreamer 1.0 avmedia backend.]),
1729 ,test "${enable_gstreamer_1_0+set}" = set || enable_gstreamer_1_0=yes)
1731 libo_FUZZ_ARG_ENABLE([eot],
1732     [AS_HELP_STRING([--enable-eot],
1733         [Enable support for Embedded OpenType fonts.])],
1734 ,test "${enable_eot+set}" = set || enable_eot=no)
1736 libo_FUZZ_ARG_ENABLE(cve-tests,
1737     AS_HELP_STRING([--disable-cve-tests],
1738         [Prevent CVE tests to be executed]),
1741 libo_FUZZ_ARG_ENABLE(chart-tests,
1742     AS_HELP_STRING([--enable-chart-tests],
1743         [Executes chart XShape tests. In a perfect world these tests would be
1744          stable and everyone could run them, in reality it is best to run them
1745          only on a few machines that are known to work and maintained by people
1746          who can judge if a test failure is a regression or not.]),
1749 AC_ARG_ENABLE(build-opensymbol,
1750     AS_HELP_STRING([--enable-build-opensymbol],
1751         [Do not use the prebuilt opens___.ttf. Build it instead. This needs
1752          fontforge installed.]),
1755 AC_ARG_ENABLE(dependency-tracking,
1756     AS_HELP_STRING([--enable-dependency-tracking],
1757         [Do not reject slow dependency extractors.])[
1758   --disable-dependency-tracking
1759                           Disables generation of dependency information.
1760                           Speed up one-time builds.],
1763 AC_ARG_ENABLE(icecream,
1764     AS_HELP_STRING([--enable-icecream],
1765         [Use the 'icecream' distributed compiling tool to speedup the compilation.
1766          It defaults to /opt/icecream for the location of the icecream gcc/g++
1767          wrappers, you can override that using --with-gcc-home=/the/path switch.]),
1770 AC_ARG_ENABLE(ld,
1771     AS_HELP_STRING([--enable-ld=<linker>],
1772         [Use the specified linker. Both 'gold' and 'lld' linkers generally use less memory and link faster.
1773          By default tries to use the best linker possible, use --disable-ld to use the default linker.
1774          If <linker> contains any ':', the part before the first ':' is used as the value of
1775          -fuse-ld, while the part after the first ':' is used as the value of --ld-path (which is
1776          needed for Clang 12).]),
1779 libo_FUZZ_ARG_ENABLE(cups,
1780     AS_HELP_STRING([--disable-cups],
1781         [Do not build cups support.])
1784 AC_ARG_ENABLE(ccache,
1785     AS_HELP_STRING([--disable-ccache],
1786         [Do not try to use ccache automatically.
1787          By default we will try to detect if ccache is available; in that case if
1788          CC/CXX are not yet set, and --enable-icecream is not given, we
1789          attempt to use ccache. --disable-ccache disables ccache completely.
1790          Additionally ccache's depend mode is enabled if possible,
1791          use --enable-ccache=nodepend to enable ccache without depend mode.
1795 AC_ARG_ENABLE(z7-debug,
1796     AS_HELP_STRING([--enable-z7-debug],
1797         [Makes the MSVC compiler use -Z7 for debugging instead of the default -Zi. Using this option takes
1798          more disk spaces but allows to use ccache. Final PDB files are created even with this option enabled.
1799          Enabled by default if ccache is detected.]))
1801 libo_FUZZ_ARG_ENABLE(online-update,
1802     AS_HELP_STRING([--enable-online-update],
1803         [Enable the online update service that will check for new versions of
1804          LibreOffice. Disabled by default. Requires --with-privacy-policy-url to be set.
1805          If the value is "mar", the experimental Mozilla-like update will be
1806          enabled instead of the traditional update mechanism.]),
1809 AC_ARG_WITH(update-config,
1810     AS_HELP_STRING([--with-update-config=/tmp/update.ini],
1811                    [Path to the update config ini file]))
1813 libo_FUZZ_ARG_ENABLE(extension-update,
1814     AS_HELP_STRING([--disable-extension-update],
1815         [Disable possibility to update installed extensions.]),
1818 libo_FUZZ_ARG_ENABLE(release-build,
1819     AS_HELP_STRING([--enable-release-build],
1820         [Enable release build. Note that the "release build" choice is orthogonal to
1821          whether symbols are present, debug info is generated, or optimization
1822          is done.
1823          See http://wiki.documentfoundation.org/Development/DevBuild]),
1826 AC_ARG_ENABLE(windows-build-signing,
1827     AS_HELP_STRING([--enable-windows-build-signing],
1828         [Enable signing of windows binaries (*.exe, *.dll)]),
1831 AC_ARG_ENABLE(silent-msi,
1832     AS_HELP_STRING([--enable-silent-msi],
1833         [Enable MSI with LIMITUI=1 (silent install).]),
1836 AC_ARG_ENABLE(macosx-code-signing,
1837     AS_HELP_STRING([--enable-macosx-code-signing=<identity>],
1838         [Sign executables, dylibs, frameworks and the app bundle. If you
1839          don't provide an identity the first suitable certificate
1840          in your keychain is used.]),
1843 AC_ARG_ENABLE(macosx-package-signing,
1844     AS_HELP_STRING([--enable-macosx-package-signing=<identity>],
1845         [Create a .pkg suitable for uploading to the Mac App Store and sign
1846          it. If you don't provide an identity the first suitable certificate
1847          in your keychain is used.]),
1850 AC_ARG_ENABLE(macosx-sandbox,
1851     AS_HELP_STRING([--enable-macosx-sandbox],
1852         [Make the app bundle run in a sandbox. Requires code signing.
1853          Is required by apps distributed in the Mac App Store, and implies
1854          adherence to App Store rules.]),
1857 AC_ARG_WITH(macosx-bundle-identifier,
1858     AS_HELP_STRING([--with-macosx-bundle-identifier=tld.mumble.orifice.TheOffice],
1859         [Define the macOS bundle identifier. Default is the somewhat weird
1860          org.libreoffice.script ("script", huh?).]),
1861 ,with_macosx_bundle_identifier=org.libreoffice.script)
1863 AC_ARG_WITH(macosx-provisioning-profile,
1864     AS_HELP_STRING([--with-macosx-provisioning-profile=/path/to/mac.provisionprofile],
1865         [Specify the path to a provisioning profile to use]),
1868 AC_ARG_WITH(product-name,
1869     AS_HELP_STRING([--with-product-name='My Own Office Suite'],
1870         [Define the product name. Default is AC_PACKAGE_NAME.]),
1871 ,with_product_name=$PRODUCTNAME)
1873 libo_FUZZ_ARG_ENABLE(community-flavor,
1874     AS_HELP_STRING([--disable-community-flavor],
1875         [Disable the Community branding.]),
1878 AC_ARG_WITH(package-version,
1879     AS_HELP_STRING([--with-package-version='3.1.4.5'],
1880         [Define the package version. Default is AC_PACKAGE_VERSION. Use only if you distribute an own build for macOS.]),
1883 libo_FUZZ_ARG_ENABLE(readonly-installset,
1884     AS_HELP_STRING([--enable-readonly-installset],
1885         [Prevents any attempts by LibreOffice to write into its installation. That means
1886          at least that no "system-wide" extensions can be added. Partly experimental work in
1887          progress, probably not fully implemented. Always enabled for macOS.]),
1890 libo_FUZZ_ARG_ENABLE(mariadb-sdbc,
1891     AS_HELP_STRING([--disable-mariadb-sdbc],
1892         [Disable the build of the MariaDB/MySQL-SDBC driver.])
1895 libo_FUZZ_ARG_ENABLE(postgresql-sdbc,
1896     AS_HELP_STRING([--disable-postgresql-sdbc],
1897         [Disable the build of the PostgreSQL-SDBC driver.])
1900 libo_FUZZ_ARG_ENABLE(lotuswordpro,
1901     AS_HELP_STRING([--disable-lotuswordpro],
1902         [Disable the build of the Lotus Word Pro filter.]),
1903 ,test "${enable_lotuswordpro+set}" = set || enable_lotuswordpro=yes)
1905 libo_FUZZ_ARG_ENABLE(firebird-sdbc,
1906     AS_HELP_STRING([--disable-firebird-sdbc],
1907         [Disable the build of the Firebird-SDBC driver if it doesn't compile for you.]),
1908 ,test "${enable_firebird_sdbc+set}" = set || enable_firebird_sdbc=yes)
1910 AC_ARG_ENABLE(bogus-pkg-config,
1911     AS_HELP_STRING([--enable-bogus-pkg-config],
1912         [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.]),
1915 AC_ARG_ENABLE(openssl,
1916     AS_HELP_STRING([--disable-openssl],
1917         [Disable using libssl/libcrypto from OpenSSL. If disabled,
1918          components will either use GNUTLS or NSS. Work in progress,
1919          use only if you are hacking on it.]),
1920 ,enable_openssl=yes)
1922 libo_FUZZ_ARG_ENABLE(cipher-openssl-backend,
1923     AS_HELP_STRING([--enable-cipher-openssl-backend],
1924         [Enable using OpenSSL as the actual implementation of the rtl/cipher.h functionality.
1925          Requires --enable-openssl.]))
1927 AC_ARG_ENABLE(nss,
1928     AS_HELP_STRING([--disable-nss],
1929         [Disable using NSS. If disabled,
1930          components will either use GNUTLS or openssl. Work in progress,
1931          use only if you are hacking on it.]),
1932 ,enable_nss=yes)
1934 AC_ARG_ENABLE(library-bin-tar,
1935     AS_HELP_STRING([--enable-library-bin-tar],
1936         [Enable the building and reused of tarball of binary build for some 'external' libraries.
1937         Some libraries can save their build result in a tarball
1938         stored in TARFILE_LOCATION. That binary tarball is
1939         uniquely identified by the source tarball,
1940         the content of the config_host.mk file and the content
1941         of the top-level directory in core for that library
1942         If this option is enabled, then if such a tarfile exist, it will be untarred
1943         instead of the source tarfile, and the build step will be skipped for that
1944         library.
1945         If a proper tarfile does not exist, then the normal source-based
1946         build is done for that library and a proper binary tarfile is created
1947         for the next time.]),
1950 AC_ARG_ENABLE(dconf,
1951     AS_HELP_STRING([--disable-dconf],
1952         [Disable the dconf configuration backend (enabled by default where
1953          available).]))
1955 libo_FUZZ_ARG_ENABLE(formula-logger,
1956     AS_HELP_STRING(
1957         [--enable-formula-logger],
1958         [Enable formula logger for logging formula calculation flow in Calc.]
1959     )
1962 AC_ARG_ENABLE(ldap,
1963     AS_HELP_STRING([--disable-ldap],
1964         [Disable LDAP support.]),
1965 ,enable_ldap=yes)
1967 AC_ARG_ENABLE(opencl,
1968     AS_HELP_STRING([--disable-opencl],
1969         [Disable OpenCL support.]),
1970 ,enable_opencl=yes)
1972 libo_FUZZ_ARG_ENABLE(librelogo,
1973     AS_HELP_STRING([--disable-librelogo],
1974         [Do not build LibreLogo.]),
1975 ,enable_librelogo=yes)
1977 AC_ARG_ENABLE(cmis,
1978     AS_HELP_STRING([--disable-cmis],
1979         [Disable CMIS support.]),
1980 ,enable_cmis=yes)
1982 AC_ARG_ENABLE(curl,
1983     AS_HELP_STRING([--disable-curl],
1984         [Disable CURL support.]),
1985 ,enable_curl=yes)
1987 AC_ARG_ENABLE(wasm-strip,
1988     AS_HELP_STRING([--enable-wasm-strip],
1989         [Strip the static build like for WASM/emscripten platform.]),
1990 ,enable_wasm_strip=yes)
1992 AC_ARG_ENABLE(xmlhelp,
1993     AS_HELP_STRING([--disable-xmlhelp],
1994         [Disable XML help support]),
1995 ,enable_xmlhelp=yes)
1998 dnl ===================================================================
1999 dnl Optional Packages (--with/without-)
2000 dnl ===================================================================
2002 AC_ARG_WITH(gcc-home,
2003     AS_HELP_STRING([--with-gcc-home],
2004         [Specify the location of gcc/g++ manually. This can be used in conjunction
2005          with --enable-icecream when icecream gcc/g++ wrappers are installed in a
2006          non-default path.]),
2009 AC_ARG_WITH(gnu-patch,
2010     AS_HELP_STRING([--with-gnu-patch],
2011         [Specify location of GNU patch on Solaris or FreeBSD.]),
2014 AC_ARG_WITH(build-platform-configure-options,
2015     AS_HELP_STRING([--with-build-platform-configure-options],
2016         [Specify options for the configure script run for the *build* platform in a cross-compilation]),
2019 AC_ARG_WITH(gnu-cp,
2020     AS_HELP_STRING([--with-gnu-cp],
2021         [Specify location of GNU cp on Solaris or FreeBSD.]),
2024 AC_ARG_WITH(external-tar,
2025     AS_HELP_STRING([--with-external-tar=<TARFILE_PATH>],
2026         [Specify an absolute path of where to find (and store) tarfiles.]),
2027     TARFILE_LOCATION=$withval ,
2030 AC_ARG_WITH(referenced-git,
2031     AS_HELP_STRING([--with-referenced-git=<OTHER_CHECKOUT_DIR>],
2032         [Specify another checkout directory to reference. This makes use of
2033                  git submodule update --reference, and saves a lot of diskspace
2034                  when having multiple trees side-by-side.]),
2035     GIT_REFERENCE_SRC=$withval ,
2038 AC_ARG_WITH(linked-git,
2039     AS_HELP_STRING([--with-linked-git=<submodules repo basedir>],
2040         [Specify a directory where the repositories of submodules are located.
2041          This uses a method similar to git-new-workdir to get submodules.]),
2042     GIT_LINK_SRC=$withval ,
2045 AC_ARG_WITH(galleries,
2046     AS_HELP_STRING([--with-galleries],
2047         [Specify how galleries should be built. It is possible either to
2048          build these internally from source ("build"),
2049          or to disable them ("no")]),
2052 AC_ARG_WITH(theme,
2053     AS_HELP_STRING([--with-theme="theme1 theme2..."],
2054         [Choose which themes to include. By default those themes with an '*' are included.
2055          Possible choices: *breeze, *breeze_dark, *breeze_dark_svg, *breeze_svg, *colibre, *colibre_svg, *elementary,
2056          *elementary_svg, *karasa_jaga, *karasa_jaga_svg, *sifr, *sifr_dark, *sifr_dark_svg, *sifr_svg, *sukapura, *sukapura_svg.]),
2059 libo_FUZZ_ARG_WITH(helppack-integration,
2060     AS_HELP_STRING([--without-helppack-integration],
2061         [It will not integrate the helppacks to the installer
2062          of the product. Please use this switch to use the online help
2063          or separate help packages.]),
2066 libo_FUZZ_ARG_WITH(fonts,
2067     AS_HELP_STRING([--without-fonts],
2068         [LibreOffice includes some third-party fonts to provide a reliable basis for
2069          help content, templates, samples, etc. When these fonts are already
2070          known to be available on the system then you should use this option.]),
2073 AC_ARG_ENABLE(noto-font,
2074     AS_HELP_STRING([--enable-noto-font],
2075         [Add more Google Noto fonts.]),
2078 AC_ARG_WITH(epm,
2079     AS_HELP_STRING([--with-epm],
2080         [Decides which epm to use. Default is to use the one from the system if
2081          one is built. When either this is not there or you say =internal epm
2082          will be built.]),
2085 AC_ARG_WITH(package-format,
2086     AS_HELP_STRING([--with-package-format],
2087         [Specify package format(s) for LibreOffice installation sets. The
2088          implicit --without-package-format leads to no installation sets being
2089          generated. Possible values: aix, archive, bsd, deb, dmg,
2090          installed, msi, pkg, and rpm.
2091          Example: --with-package-format='deb rpm']),
2094 AC_ARG_WITH(tls,
2095     AS_HELP_STRING([--with-tls],
2096         [Decides which TLS/SSL and cryptographic implementations to use for
2097          LibreOffice's code. Notice that this doesn't apply for depending
2098          libraries like "neon", for example. Default is to use NSS
2099          although OpenSSL is also possible. Notice that selecting NSS restricts
2100          the usage of OpenSSL in LO's code but selecting OpenSSL doesn't
2101          restrict by now the usage of NSS in LO's code. Possible values:
2102          openssl, nss. Example: --with-tls="nss"]),
2105 AC_ARG_WITH(system-libs,
2106     AS_HELP_STRING([--with-system-libs],
2107         [Use libraries already on system -- enables all --with-system-* flags.]),
2110 AC_ARG_WITH(system-bzip2,
2111     AS_HELP_STRING([--with-system-bzip2],
2112         [Use bzip2 already on system. Used only when --enable-online-update=mar]),,
2113     [with_system_bzip2="$with_system_libs"])
2115 AC_ARG_WITH(system-headers,
2116     AS_HELP_STRING([--with-system-headers],
2117         [Use headers already on system -- enables all --with-system-* flags for
2118          external packages whose headers are the only entities used i.e.
2119          boost/odbc/sane-header(s).]),,
2120     [with_system_headers="$with_system_libs"])
2122 AC_ARG_WITH(system-jars,
2123     AS_HELP_STRING([--without-system-jars],
2124         [When building with --with-system-libs, also the needed jars are expected
2125          on the system. Use this to disable that]),,
2126     [with_system_jars="$with_system_libs"])
2128 AC_ARG_WITH(system-cairo,
2129     AS_HELP_STRING([--with-system-cairo],
2130         [Use cairo libraries already on system.  Happens automatically for
2131          (implicit) --enable-gtk3.]))
2133 AC_ARG_WITH(system-epoxy,
2134     AS_HELP_STRING([--with-system-epoxy],
2135         [Use epoxy libraries already on system.  Happens automatically for
2136          (implicit) --enable-gtk3.]),,
2137        [with_system_epoxy="$with_system_libs"])
2139 AC_ARG_WITH(myspell-dicts,
2140     AS_HELP_STRING([--with-myspell-dicts],
2141         [Adds myspell dictionaries to the LibreOffice installation set]),
2144 AC_ARG_WITH(system-dicts,
2145     AS_HELP_STRING([--without-system-dicts],
2146         [Do not use dictionaries from system paths.]),
2149 AC_ARG_WITH(external-dict-dir,
2150     AS_HELP_STRING([--with-external-dict-dir],
2151         [Specify external dictionary dir.]),
2154 AC_ARG_WITH(external-hyph-dir,
2155     AS_HELP_STRING([--with-external-hyph-dir],
2156         [Specify external hyphenation pattern dir.]),
2159 AC_ARG_WITH(external-thes-dir,
2160     AS_HELP_STRING([--with-external-thes-dir],
2161         [Specify external thesaurus dir.]),
2164 AC_ARG_WITH(system-zlib,
2165     AS_HELP_STRING([--with-system-zlib],
2166         [Use zlib already on system.]),,
2167     [with_system_zlib=auto])
2169 AC_ARG_WITH(system-jpeg,
2170     AS_HELP_STRING([--with-system-jpeg],
2171         [Use jpeg already on system.]),,
2172     [with_system_jpeg="$with_system_libs"])
2174 AC_ARG_WITH(system-clucene,
2175     AS_HELP_STRING([--with-system-clucene],
2176         [Use clucene already on system.]),,
2177     [with_system_clucene="$with_system_libs"])
2179 AC_ARG_WITH(system-expat,
2180     AS_HELP_STRING([--with-system-expat],
2181         [Use expat already on system.]),,
2182     [with_system_expat="$with_system_libs"])
2184 AC_ARG_WITH(system-libxml,
2185     AS_HELP_STRING([--with-system-libxml],
2186         [Use libxml/libxslt already on system.]),,
2187     [with_system_libxml=auto])
2189 AC_ARG_WITH(system-icu,
2190     AS_HELP_STRING([--with-system-icu],
2191         [Use icu already on system.]),,
2192     [with_system_icu="$with_system_libs"])
2194 AC_ARG_WITH(system-ucpp,
2195     AS_HELP_STRING([--with-system-ucpp],
2196         [Use ucpp already on system.]),,
2197     [])
2199 AC_ARG_WITH(system-openldap,
2200     AS_HELP_STRING([--with-system-openldap],
2201         [Use the OpenLDAP LDAP SDK already on system.]),,
2202     [with_system_openldap="$with_system_libs"])
2204 libo_FUZZ_ARG_ENABLE(poppler,
2205     AS_HELP_STRING([--disable-poppler],
2206         [Disable building Poppler.])
2209 AC_ARG_WITH(system-poppler,
2210     AS_HELP_STRING([--with-system-poppler],
2211         [Use system poppler (only needed for PDF import).]),,
2212     [with_system_poppler="$with_system_libs"])
2214 AC_ARG_WITH(system-abseil,
2215     AS_HELP_STRING([--with-system-abseil],
2216         [Use the abseil libraries already on system.]),,
2217     [with_system_abseil="$with_system_libs"])
2219 AC_ARG_WITH(system-openjpeg,
2220     AS_HELP_STRING([--with-system-openjpeg],
2221         [Use the OpenJPEG library already on system.]),,
2222     [with_system_openjpeg="$with_system_libs"])
2224 libo_FUZZ_ARG_ENABLE(gpgmepp,
2225     AS_HELP_STRING([--disable-gpgmepp],
2226         [Disable building gpgmepp. Do not use in normal cases unless you want to fix potential problems it causes.])
2229 AC_ARG_WITH(system-gpgmepp,
2230     AS_HELP_STRING([--with-system-gpgmepp],
2231         [Use gpgmepp already on system]),,
2232     [with_system_gpgmepp="$with_system_libs"])
2234 AC_ARG_WITH(system-mariadb,
2235     AS_HELP_STRING([--with-system-mariadb],
2236         [Use MariaDB/MySQL libraries already on system.]),,
2237     [with_system_mariadb="$with_system_libs"])
2239 AC_ARG_ENABLE(bundle-mariadb,
2240     AS_HELP_STRING([--enable-bundle-mariadb],
2241         [When using MariaDB/MySQL libraries already on system, bundle them with the MariaDB Connector/LibreOffice.])
2244 AC_ARG_WITH(system-postgresql,
2245     AS_HELP_STRING([--with-system-postgresql],
2246         [Use PostgreSQL libraries already on system, for building the PostgreSQL-SDBC
2247          driver. If pg_config is not in PATH, use PGCONFIG to point to it.]),,
2248     [with_system_postgresql="$with_system_libs"])
2250 AC_ARG_WITH(libpq-path,
2251     AS_HELP_STRING([--with-libpq-path=<absolute path to your libpq installation>],
2252         [Use this PostgreSQL C interface (libpq) installation for building
2253          the PostgreSQL-SDBC extension.]),
2256 AC_ARG_WITH(system-firebird,
2257     AS_HELP_STRING([--with-system-firebird],
2258         [Use Firebird libraries already on system, for building the Firebird-SDBC
2259          driver. If fb_config is not in PATH, use FBCONFIG to point to it.]),,
2260     [with_system_firebird="$with_system_libs"])
2262 AC_ARG_WITH(system-libtommath,
2263             AS_HELP_STRING([--with-system-libtommath],
2264                            [Use libtommath already on system]),,
2265             [with_system_libtommath="$with_system_libs"])
2267 AC_ARG_WITH(system-hsqldb,
2268     AS_HELP_STRING([--with-system-hsqldb],
2269         [Use hsqldb already on system.]))
2271 AC_ARG_WITH(hsqldb-jar,
2272     AS_HELP_STRING([--with-hsqldb-jar=JARFILE],
2273         [Specify path to jarfile manually.]),
2274     HSQLDB_JAR=$withval)
2276 libo_FUZZ_ARG_ENABLE(scripting-beanshell,
2277     AS_HELP_STRING([--disable-scripting-beanshell],
2278         [Disable support for scripts in BeanShell.]),
2282 AC_ARG_WITH(system-beanshell,
2283     AS_HELP_STRING([--with-system-beanshell],
2284         [Use beanshell already on system.]),,
2285     [with_system_beanshell="$with_system_jars"])
2287 AC_ARG_WITH(beanshell-jar,
2288     AS_HELP_STRING([--with-beanshell-jar=JARFILE],
2289         [Specify path to jarfile manually.]),
2290     BSH_JAR=$withval)
2292 libo_FUZZ_ARG_ENABLE(scripting-javascript,
2293     AS_HELP_STRING([--disable-scripting-javascript],
2294         [Disable support for scripts in JavaScript.]),
2298 AC_ARG_WITH(system-rhino,
2299     AS_HELP_STRING([--with-system-rhino],
2300         [Use rhino already on system.]),,)
2301 #    [with_system_rhino="$with_system_jars"])
2302 # Above is not used as we have different debug interface
2303 # patched into internal rhino. This code needs to be fixed
2304 # before we can enable it by default.
2306 AC_ARG_WITH(rhino-jar,
2307     AS_HELP_STRING([--with-rhino-jar=JARFILE],
2308         [Specify path to jarfile manually.]),
2309     RHINO_JAR=$withval)
2311 AC_ARG_WITH(system-jfreereport,
2312     AS_HELP_STRING([--with-system-jfreereport],
2313         [Use JFreeReport already on system.]),,
2314     [with_system_jfreereport="$with_system_jars"])
2316 AC_ARG_WITH(sac-jar,
2317     AS_HELP_STRING([--with-sac-jar=JARFILE],
2318         [Specify path to jarfile manually.]),
2319     SAC_JAR=$withval)
2321 AC_ARG_WITH(libxml-jar,
2322     AS_HELP_STRING([--with-libxml-jar=JARFILE],
2323         [Specify path to jarfile manually.]),
2324     LIBXML_JAR=$withval)
2326 AC_ARG_WITH(flute-jar,
2327     AS_HELP_STRING([--with-flute-jar=JARFILE],
2328         [Specify path to jarfile manually.]),
2329     FLUTE_JAR=$withval)
2331 AC_ARG_WITH(jfreereport-jar,
2332     AS_HELP_STRING([--with-jfreereport-jar=JARFILE],
2333         [Specify path to jarfile manually.]),
2334     JFREEREPORT_JAR=$withval)
2336 AC_ARG_WITH(liblayout-jar,
2337     AS_HELP_STRING([--with-liblayout-jar=JARFILE],
2338         [Specify path to jarfile manually.]),
2339     LIBLAYOUT_JAR=$withval)
2341 AC_ARG_WITH(libloader-jar,
2342     AS_HELP_STRING([--with-libloader-jar=JARFILE],
2343         [Specify path to jarfile manually.]),
2344     LIBLOADER_JAR=$withval)
2346 AC_ARG_WITH(libformula-jar,
2347     AS_HELP_STRING([--with-libformula-jar=JARFILE],
2348         [Specify path to jarfile manually.]),
2349     LIBFORMULA_JAR=$withval)
2351 AC_ARG_WITH(librepository-jar,
2352     AS_HELP_STRING([--with-librepository-jar=JARFILE],
2353         [Specify path to jarfile manually.]),
2354     LIBREPOSITORY_JAR=$withval)
2356 AC_ARG_WITH(libfonts-jar,
2357     AS_HELP_STRING([--with-libfonts-jar=JARFILE],
2358         [Specify path to jarfile manually.]),
2359     LIBFONTS_JAR=$withval)
2361 AC_ARG_WITH(libserializer-jar,
2362     AS_HELP_STRING([--with-libserializer-jar=JARFILE],
2363         [Specify path to jarfile manually.]),
2364     LIBSERIALIZER_JAR=$withval)
2366 AC_ARG_WITH(libbase-jar,
2367     AS_HELP_STRING([--with-libbase-jar=JARFILE],
2368         [Specify path to jarfile manually.]),
2369     LIBBASE_JAR=$withval)
2371 AC_ARG_WITH(system-odbc,
2372     AS_HELP_STRING([--with-system-odbc],
2373         [Use the odbc headers already on system.]),,
2374     [with_system_odbc="auto"])
2376 AC_ARG_WITH(system-sane,
2377     AS_HELP_STRING([--with-system-sane],
2378         [Use sane.h already on system.]),,
2379     [with_system_sane="$with_system_headers"])
2381 AC_ARG_WITH(system-bluez,
2382     AS_HELP_STRING([--with-system-bluez],
2383         [Use bluetooth.h already on system.]),,
2384     [with_system_bluez="$with_system_headers"])
2386 AC_ARG_WITH(system-curl,
2387     AS_HELP_STRING([--with-system-curl],
2388         [Use curl already on system.]),,
2389     [with_system_curl=auto])
2391 AC_ARG_WITH(system-boost,
2392     AS_HELP_STRING([--with-system-boost],
2393         [Use boost already on system.]),,
2394     [with_system_boost="$with_system_headers"])
2396 AC_ARG_WITH(system-glm,
2397     AS_HELP_STRING([--with-system-glm],
2398         [Use glm already on system.]),,
2399     [with_system_glm="$with_system_headers"])
2401 AC_ARG_WITH(system-hunspell,
2402     AS_HELP_STRING([--with-system-hunspell],
2403         [Use libhunspell already on system.]),,
2404     [with_system_hunspell="$with_system_libs"])
2406 libo_FUZZ_ARG_ENABLE(zxing,
2407     AS_HELP_STRING([--disable-zxing],
2408        [Disable use of zxing external library.]))
2410 AC_ARG_WITH(system-zxing,
2411     AS_HELP_STRING([--with-system-zxing],
2412         [Use libzxing already on system.]),,
2413     [with_system_zxing="$with_system_libs"])
2415 AC_ARG_WITH(system-box2d,
2416     AS_HELP_STRING([--with-system-box2d],
2417         [Use box2d already on system.]),,
2418     [with_system_box2d="$with_system_libs"])
2420 AC_ARG_WITH(system-mythes,
2421     AS_HELP_STRING([--with-system-mythes],
2422         [Use mythes already on system.]),,
2423     [with_system_mythes="$with_system_libs"])
2425 AC_ARG_WITH(system-altlinuxhyph,
2426     AS_HELP_STRING([--with-system-altlinuxhyph],
2427         [Use ALTLinuxhyph already on system.]),,
2428     [with_system_altlinuxhyph="$with_system_libs"])
2430 AC_ARG_WITH(system-lpsolve,
2431     AS_HELP_STRING([--with-system-lpsolve],
2432         [Use lpsolve already on system.]),,
2433     [with_system_lpsolve="$with_system_libs"])
2435 AC_ARG_WITH(system-coinmp,
2436     AS_HELP_STRING([--with-system-coinmp],
2437         [Use CoinMP already on system.]),,
2438     [with_system_coinmp="$with_system_libs"])
2440 AC_ARG_WITH(system-liblangtag,
2441     AS_HELP_STRING([--with-system-liblangtag],
2442         [Use liblangtag library already on system.]),,
2443     [with_system_liblangtag="$with_system_libs"])
2445 AC_ARG_WITH(webdav,
2446     AS_HELP_STRING([--with-webdav],
2447         [Specify which library to use for webdav implementation.
2448          Possible values: "neon", "serf", "curl", "no". The default value is "neon".
2449          Example: --with-webdav="serf"]))
2451 AC_ARG_WITH(linker-hash-style,
2452     AS_HELP_STRING([--with-linker-hash-style],
2453         [Use linker with --hash-style=<style> when linking shared objects.
2454          Possible values: "sysv", "gnu", "both". The default value is "gnu"
2455          if supported on the build system, and "sysv" otherwise.]))
2457 AC_ARG_WITH(jdk-home,
2458     AS_HELP_STRING([--with-jdk-home=<absolute path to JDK home>],
2459         [If you have installed JDK 9 or later on your system please supply the
2460          path here. Note that this is not the location of the java command but the
2461          location of the entire distribution. In case of cross-compiling, this
2462          is the JDK of the host os. Use --with-build-platform-configure-options
2463          to point to a different build platform JDK.]),
2466 AC_ARG_WITH(help,
2467     AS_HELP_STRING([--with-help],
2468         [Enable the build of help. There is a special parameter "common" that
2469          can be used to bundle only the common part, .e.g help-specific icons.
2470          This is useful when you build the helpcontent separately.])
2471     [
2472                           Usage:     --with-help    build the old local help
2473                                  --without-help     no local help (default)
2474                                  --with-help=html   build the new HTML local help
2475                                  --with-help=online build the new HTML online help
2476     ],
2479 AC_ARG_WITH(omindex,
2480    AS_HELP_STRING([--with-omindex],
2481         [Enable the support of xapian-omega index for online help.])
2482    [
2483                          Usage: --with-omindex=server prepare the pages for omindex
2484                                 but let xapian-omega be built in server.
2485                                 --with-omindex=noxap do not prepare online pages
2486                                 for xapian-omega
2487   ],
2490 libo_FUZZ_ARG_WITH(java,
2491     AS_HELP_STRING([--with-java=<java command>],
2492         [Specify the name of the Java interpreter command. Typically "java"
2493          which is the default.
2495          To build without support for Java components, applets, accessibility
2496          or the XML filters written in Java, use --without-java or --with-java=no.]),
2497     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ],
2498     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ]
2501 AC_ARG_WITH(jvm-path,
2502     AS_HELP_STRING([--with-jvm-path=<absolute path to parent of jvm home>],
2503         [Use a specific JVM search path at runtime.
2504          e.g. use --with-jvm-path=/usr/lib/ to find JRE/JDK in /usr/lib/jvm/]),
2507 AC_ARG_WITH(ant-home,
2508     AS_HELP_STRING([--with-ant-home=<absolute path to Ant home>],
2509         [If you have installed Apache Ant on your system, please supply the path here.
2510          Note that this is not the location of the Ant binary but the location
2511          of the entire distribution.]),
2514 AC_ARG_WITH(symbol-config,
2515     AS_HELP_STRING([--with-symbol-config],
2516         [Configuration for the crashreport symbol upload]),
2517         [],
2518         [with_symbol_config=no])
2520 AC_ARG_WITH(export-validation,
2521     AS_HELP_STRING([--without-export-validation],
2522         [Disable validating OOXML and ODF files as exported from in-tree tests.]),
2523 ,with_export_validation=auto)
2525 AC_ARG_WITH(bffvalidator,
2526     AS_HELP_STRING([--with-bffvalidator=<absolute path to BFFValidator>],
2527         [Enables export validation for Microsoft Binary formats (doc, xls, ppt).
2528          Requires installed Microsoft Office Binary File Format Validator.
2529          Note: export-validation (--with-export-validation) is required to be turned on.
2530          See https://www.microsoft.com/en-us/download/details.aspx?id=26794]),
2531 ,with_bffvalidator=no)
2533 libo_FUZZ_ARG_WITH(junit,
2534     AS_HELP_STRING([--with-junit=<absolute path to JUnit 4 jar>],
2535         [Specifies the JUnit 4 jar file to use for JUnit-based tests.
2536          --without-junit disables those tests. Not relevant in the --without-java case.]),
2537 ,with_junit=yes)
2539 AC_ARG_WITH(hamcrest,
2540     AS_HELP_STRING([--with-hamcrest=<absolute path to hamcrest jar>],
2541         [Specifies the hamcrest jar file to use for JUnit-based tests.
2542          --without-junit disables those tests. Not relevant in the --without-java case.]),
2543 ,with_hamcrest=yes)
2545 AC_ARG_WITH(perl-home,
2546     AS_HELP_STRING([--with-perl-home=<abs. path to Perl 5 home>],
2547         [If you have installed Perl 5 Distribution, on your system, please
2548          supply the path here. Note that this is not the location of the Perl
2549          binary but the location of the entire distribution.]),
2552 libo_FUZZ_ARG_WITH(doxygen,
2553     AS_HELP_STRING(
2554         [--with-doxygen=<absolute path to doxygen executable>],
2555         [Specifies the doxygen executable to use when generating ODK C/C++
2556          documentation. --without-doxygen disables generation of ODK C/C++
2557          documentation. Not relevant in the --disable-odk case.]),
2558 ,with_doxygen=yes)
2560 AC_ARG_WITH(visual-studio,
2561     AS_HELP_STRING([--with-visual-studio=<2019/2022>],
2562         [Specify which Visual Studio version to use in case several are
2563          installed. Currently 2019 (default) and 2022 are supported.]),
2566 AC_ARG_WITH(windows-sdk,
2567     AS_HELP_STRING([--with-windows-sdk=<8.0(A)/8.1(A)/10.0>],
2568         [Specify which Windows SDK, or "Windows Kit", version to use
2569          in case the one that came with the selected Visual Studio
2570          is not what you want for some reason. Note that not all compiler/SDK
2571          combinations are supported. The intent is that this option should not
2572          be needed.]),
2575 AC_ARG_WITH(lang,
2576     AS_HELP_STRING([--with-lang="es sw tu cs sk"],
2577         [Use this option to build LibreOffice with additional UI language support.
2578          English (US) is always included by default.
2579          Separate multiple languages with space.
2580          For all languages, use --with-lang=ALL.]),
2583 AC_ARG_WITH(locales,
2584     AS_HELP_STRING([--with-locales="en es pt fr zh kr ja"],
2585         [Use this option to limit the locale information built in.
2586          Separate multiple locales with space.
2587          Very experimental and might well break stuff.
2588          Just a desperate measure to shrink code and data size.
2589          By default all the locales available is included.
2590          This option is completely unrelated to --with-lang.])
2591     [
2592                           Affects also our character encoding conversion
2593                           tables for encodings mainly targeted for a
2594                           particular locale, like EUC-CN and EUC-TW for
2595                           zh, ISO-2022-JP for ja.
2597                           Affects also our add-on break iterator data for
2598                           some languages.
2600                           For the default, all locales, don't use this switch at all.
2601                           Specifying just the language part of a locale means all matching
2602                           locales will be included.
2603     ],
2606 # Kerberos and GSSAPI used only by PostgreSQL as of LibO 3.5
2607 libo_FUZZ_ARG_WITH(krb5,
2608     AS_HELP_STRING([--with-krb5],
2609         [Enable MIT Kerberos 5 support in modules that support it.
2610          By default automatically enabled on platforms
2611          where a good system Kerberos 5 is available.]),
2614 libo_FUZZ_ARG_WITH(gssapi,
2615     AS_HELP_STRING([--with-gssapi],
2616         [Enable GSSAPI support in modules that support it.
2617          By default automatically enabled on platforms
2618          where a good system GSSAPI is available.]),
2621 AC_ARG_WITH(iwyu,
2622     AS_HELP_STRING([--with-iwyu],
2623         [Use given IWYU binary path to check unneeded includes instead of building.
2624          Use only if you are hacking on it.]),
2627 libo_FUZZ_ARG_WITH(lxml,
2628     AS_HELP_STRING([--without-lxml],
2629         [gla11y will use python lxml when available, potentially building a local copy if necessary.
2630          --without-lxml tells it to not use python lxml at all, which means that gla11y will only
2631          report widget classes and ids.]),
2634 libo_FUZZ_ARG_WITH(latest-c++,
2635     AS_HELP_STRING([--with-latest-c++],
2636         [Try to enable the latest features of the C++ compiler, even if they are not yet part of a
2637          published standard.]),,
2638         [with_latest_c__=no])
2640 AC_ARG_WITH(gtk3-build,
2641     AS_HELP_STRING([--with-gtk3-build=<absolute path to GTK3 build>],
2642         [(Windows-only) In order to build GtkTiledViewer on Windows, pass the path
2643          to a GTK3 build, like '--with-gtk3-build=C:/gtk-build/gtk/x64/release'.]))
2645 dnl ===================================================================
2646 dnl Branding
2647 dnl ===================================================================
2649 AC_ARG_WITH(branding,
2650     AS_HELP_STRING([--with-branding=/path/to/images],
2651         [Use given path to retrieve branding images set.])
2652     [
2653                           Search for intro.png about.svg and logo.svg.
2654                           If any is missing, default ones will be used instead.
2656                           Search also progress.conf for progress
2657                           settings on intro screen :
2659                           PROGRESSBARCOLOR="255,255,255" Set color of
2660                           progress bar. Comma separated RGB decimal values.
2661                           PROGRESSSIZE="407,6" Set size of progress bar.
2662                           Comma separated decimal values (width, height).
2663                           PROGRESSPOSITION="61,317" Set position of progress
2664                           bar from left,top. Comma separated decimal values.
2665                           PROGRESSFRAMECOLOR="20,136,3" Set color of progress
2666                           bar frame. Comma separated RGB decimal values.
2667                           PROGRESSTEXTCOLOR="0,0,0" Set color of progress
2668                           bar text. Comma separated RGB decimal values.
2669                           PROGRESSTEXTBASELINE="287" Set vertical position of
2670                           progress bar text from top. Decimal value.
2672                           Default values will be used if not found.
2673     ],
2677 AC_ARG_WITH(extra-buildid,
2678     AS_HELP_STRING([--with-extra-buildid="Tinderbox: Win-x86@6, Branch:master, Date:2012-11-26_00.29.34"],
2679         [Show addition build identification in about dialog.]),
2683 AC_ARG_WITH(vendor,
2684     AS_HELP_STRING([--with-vendor="John the Builder"],
2685         [Set vendor of the build.]),
2688 AC_ARG_WITH(privacy-policy-url,
2689     AS_HELP_STRING([--with-privacy-policy-url="https://yourdomain/privacy-policy"],
2690         [The URL to your privacy policy (needed when
2691          enabling online-update or crashreporting via breakpad)]),
2692         [if test "x$with_privacy_policy_url" = "xyes"; then
2693             AC_MSG_FAILURE([you need to specify an argument when using --with-privacy-policy-url])
2694          elif test "x$with_privacy_policy_url" = "xno"; then
2695             with_privacy_policy_url="undefined"
2696          fi]
2697 ,[with_privacy_policy_url="undefined"])
2699 AC_ARG_WITH(android-package-name,
2700     AS_HELP_STRING([--with-android-package-name="org.libreoffice"],
2701         [Set Android package name of the build.]),
2704 AC_ARG_WITH(compat-oowrappers,
2705     AS_HELP_STRING([--with-compat-oowrappers],
2706         [Install oo* wrappers in parallel with
2707          lo* ones to keep backward compatibility.
2708          Has effect only with make distro-pack-install]),
2711 AC_ARG_WITH(os-version,
2712     AS_HELP_STRING([--with-os-version=<OSVERSION>],
2713         [For FreeBSD users, use this option to override the detected OSVERSION.]),
2716 AC_ARG_WITH(idlc-cpp,
2717     AS_HELP_STRING([--with-idlc-cpp=<cpp/ucpp>],
2718         [Specify the C Preprocessor to use for idlc. Default is ucpp.]),
2721 AC_ARG_WITH(parallelism,
2722     AS_HELP_STRING([--with-parallelism],
2723         [Number of jobs to run simultaneously during build. Parallel builds can
2724         save a lot of time on multi-cpu machines. Defaults to the number of
2725         CPUs on the machine, unless you configure --enable-icecream - then to
2726         40.]),
2729 AC_ARG_WITH(all-tarballs,
2730     AS_HELP_STRING([--with-all-tarballs],
2731         [Download all external tarballs unconditionally]))
2733 AC_ARG_WITH(gdrive-client-id,
2734     AS_HELP_STRING([--with-gdrive-client-id],
2735         [Provides the client id of the application for OAuth2 authentication
2736         on Google Drive. If either this or --with-gdrive-client-secret is
2737         empty, the feature will be disabled]),
2740 AC_ARG_WITH(gdrive-client-secret,
2741     AS_HELP_STRING([--with-gdrive-client-secret],
2742         [Provides the client secret of the application for OAuth2
2743         authentication on Google Drive. If either this or
2744         --with-gdrive-client-id is empty, the feature will be disabled]),
2747 AC_ARG_WITH(alfresco-cloud-client-id,
2748     AS_HELP_STRING([--with-alfresco-cloud-client-id],
2749         [Provides the client id of the application for OAuth2 authentication
2750         on Alfresco Cloud. If either this or --with-alfresco-cloud-client-secret is
2751         empty, the feature will be disabled]),
2754 AC_ARG_WITH(alfresco-cloud-client-secret,
2755     AS_HELP_STRING([--with-alfresco-cloud-client-secret],
2756         [Provides the client secret of the application for OAuth2
2757         authentication on Alfresco Cloud. If either this or
2758         --with-alfresco-cloud-client-id is empty, the feature will be disabled]),
2761 AC_ARG_WITH(onedrive-client-id,
2762     AS_HELP_STRING([--with-onedrive-client-id],
2763         [Provides the client id of the application for OAuth2 authentication
2764         on OneDrive. If either this or --with-onedrive-client-secret is
2765         empty, the feature will be disabled]),
2768 AC_ARG_WITH(onedrive-client-secret,
2769     AS_HELP_STRING([--with-onedrive-client-secret],
2770         [Provides the client secret of the application for OAuth2
2771         authentication on OneDrive. If either this or
2772         --with-onedrive-client-id is empty, the feature will be disabled]),
2774 dnl ===================================================================
2775 dnl Do we want to use pre-build binary tarball for recompile
2776 dnl ===================================================================
2778 if test "$enable_library_bin_tar" = "yes" ; then
2779     USE_LIBRARY_BIN_TAR=TRUE
2780 else
2781     USE_LIBRARY_BIN_TAR=
2783 AC_SUBST(USE_LIBRARY_BIN_TAR)
2785 dnl ===================================================================
2786 dnl Test whether build target is Release Build
2787 dnl ===================================================================
2788 AC_MSG_CHECKING([whether build target is Release Build])
2789 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
2790     AC_MSG_RESULT([no])
2791     ENABLE_RELEASE_BUILD=
2792     GET_TASK_ALLOW_ENTITLEMENT='
2793         <!-- We want to be able to debug a hardened process when not building for release -->
2794         <key>com.apple.security.get-task-allow</key>
2795         <true/>'
2796 else
2797     AC_MSG_RESULT([yes])
2798     ENABLE_RELEASE_BUILD=TRUE
2799     GET_TASK_ALLOW_ENTITLEMENT=''
2801 AC_SUBST(ENABLE_RELEASE_BUILD)
2802 AC_SUBST(GET_TASK_ALLOW_ENTITLEMENT)
2804 AC_MSG_CHECKING([whether to build a Community flavor])
2805 if test -z "$enable_community_flavor" -o "$enable_community_flavor" = "yes"; then
2806     AC_DEFINE(HAVE_FEATURE_COMMUNITY_FLAVOR)
2807     AC_MSG_RESULT([yes])
2808 else
2809     AC_MSG_RESULT([no])
2812 dnl ===================================================================
2813 dnl Test whether to sign Windows Build
2814 dnl ===================================================================
2815 AC_MSG_CHECKING([whether to sign windows build])
2816 if test "$enable_windows_build_signing" = "yes" -a "$_os" = "WINNT"; then
2817     AC_MSG_RESULT([yes])
2818     WINDOWS_BUILD_SIGNING="TRUE"
2819 else
2820     AC_MSG_RESULT([no])
2821     WINDOWS_BUILD_SIGNING="FALSE"
2823 AC_SUBST(WINDOWS_BUILD_SIGNING)
2825 dnl ===================================================================
2826 dnl MacOSX build and runtime environment options
2827 dnl ===================================================================
2829 AC_ARG_WITH(macosx-version-min-required,
2830     AS_HELP_STRING([--with-macosx-version-min-required=<version>],
2831         [set the minimum OS version needed to run the built LibreOffice])
2832     [
2833                           e. g.: --with-macosx-version-min-required=10.12
2834     ],
2838 dnl ===================================================================
2839 dnl options for stuff used during cross-compilation build
2840 dnl Not quite superseded by --with-build-platform-configure-options.
2841 dnl TODO: check, if the "force" option is still needed anywhere.
2842 dnl ===================================================================
2844 AC_ARG_WITH(system-icu-for-build,
2845     AS_HELP_STRING([--with-system-icu-for-build=yes/no/force],
2846         [Use icu already on system for build tools (cross-compilation only).]))
2849 dnl ===================================================================
2850 dnl Check for incompatible options set by fuzzing, and reset those
2851 dnl automatically to working combinations
2852 dnl ===================================================================
2854 if test "$libo_fuzzed_enable_dbus" = yes -a "$libo_fuzzed_enable_avahi" -a \
2855         "$enable_dbus" != "$enable_avahi"; then
2856     AC_MSG_NOTICE([Resetting --enable-avahi=$enable_dbus])
2857     enable_avahi=$enable_dbus
2860 add_lopath_after ()
2862     if ! echo "$LO_PATH" | $EGREP -q "(^|${P_SEP})$1($|${P_SEP})"; then
2863         LO_PATH="${LO_PATH:+$LO_PATH$P_SEP}$1"
2864     fi
2867 add_lopath_before ()
2869     local IFS=${P_SEP}
2870     local path_cleanup
2871     local dir
2872     for dir in $LO_PATH ; do
2873         if test "$dir" != "$1" ; then
2874             path_cleanup=${path_cleanup:+$path_cleanup$P_SEP}$dir
2875         fi
2876     done
2877     LO_PATH="$1${path_cleanup:+$P_SEP$path_cleanup}"
2880 dnl ===================================================================
2881 dnl check for required programs (grep, awk, sed, bash)
2882 dnl ===================================================================
2884 pathmunge ()
2886     local new_path
2887     if test -n "$1"; then
2888         if test "$build_os" = "cygwin"; then
2889             if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
2890                 PathFormat "$1"
2891                 new_path=`cygpath -sm "$formatted_path"`
2892             else
2893                 PathFormat "$1"
2894                 new_path=`cygpath -u "$formatted_path"`
2895             fi
2896         else
2897             new_path="$1"
2898         fi
2899         if test "$2" = "after"; then
2900             add_lopath_after "$new_path"
2901         else
2902             add_lopath_before "$new_path"
2903         fi
2904     fi
2907 AC_PROG_AWK
2908 AC_PATH_PROG( AWK, $AWK)
2909 if test -z "$AWK"; then
2910     AC_MSG_ERROR([install awk to run this script])
2913 AC_PATH_PROG(BASH, bash)
2914 if test -z "$BASH"; then
2915     AC_MSG_ERROR([bash not found in \$PATH])
2917 AC_SUBST(BASH)
2919 # prefer parallel comression tools, if available
2920 AC_PATH_PROG(COMPRESSIONTOOL, pigz)
2921 if test -z "$COMPRESSIONTOOL"; then
2922     AC_PATH_PROG(COMPRESSIONTOOL, gzip)
2923     if test -z "$COMPRESSIONTOOL"; then
2924         AC_MSG_ERROR([gzip not found in \$PATH])
2925     fi
2927 AC_SUBST(COMPRESSIONTOOL)
2929 # use GNU parallel for packaging, if available
2930 AC_PATH_PROG(GNUPARALLEL, parallel)
2931 AC_SUBST(GNUPARALLEL)
2933 AC_MSG_CHECKING([for GNU or BSD tar])
2934 for a in $GNUTAR gtar gnutar bsdtar tar /usr/sfw/bin/gtar; do
2935     $a --version 2> /dev/null | egrep "GNU|bsdtar"  2>&1 > /dev/null
2936     if test $? -eq 0;  then
2937         GNUTAR=$a
2938         break
2939     fi
2940 done
2941 AC_MSG_RESULT($GNUTAR)
2942 if test -z "$GNUTAR"; then
2943     AC_MSG_ERROR([not found. install GNU or BSD tar.])
2945 AC_SUBST(GNUTAR)
2947 AC_MSG_CHECKING([for tar's option to strip components])
2948 $GNUTAR --help 2> /dev/null | egrep "bsdtar|strip-components" 2>&1 >/dev/null
2949 if test $? -eq 0; then
2950     STRIP_COMPONENTS="--strip-components"
2951 else
2952     $GNUTAR --help 2> /dev/null | egrep "strip-path" 2>&1 >/dev/null
2953     if test $? -eq 0; then
2954         STRIP_COMPONENTS="--strip-path"
2955     else
2956         STRIP_COMPONENTS="unsupported"
2957     fi
2959 AC_MSG_RESULT($STRIP_COMPONENTS)
2960 if test x$STRIP_COMPONENTS = xunsupported; then
2961     AC_MSG_ERROR([you need a tar that is able to strip components.])
2963 AC_SUBST(STRIP_COMPONENTS)
2965 dnl It is useful to have a BUILD_TYPE keyword to distinguish "normal"
2966 dnl desktop OSes from "mobile" ones.
2968 dnl We assume that a non-DESKTOP build type is also a non-NATIVE one.
2969 dnl In other words, that when building for an OS that is not a
2970 dnl "desktop" one but a "mobile" one, we are always cross-compiling.
2972 dnl Note the direction of the implication; there is no assumption that
2973 dnl cross-compiling would imply a non-desktop OS.
2975 if test $_os != iOS -a $_os != Android -a $_os != Emscripten -a "$enable_fuzzers" != "yes"; then
2976     BUILD_TYPE="$BUILD_TYPE DESKTOP"
2977     AC_DEFINE(HAVE_FEATURE_DESKTOP)
2978     AC_DEFINE(HAVE_FEATURE_MULTIUSER_ENVIRONMENT)
2981 # Whether to build "avmedia" functionality or not.
2983 if test -z "$enable_avmedia"; then
2984     enable_avmedia=yes
2987 BUILD_TYPE="$BUILD_TYPE AVMEDIA"
2988 if test "$enable_avmedia" = yes; then
2989     AC_DEFINE(HAVE_FEATURE_AVMEDIA)
2990 else
2991     USE_AVMEDIA_DUMMY='TRUE'
2993 AC_SUBST(USE_AVMEDIA_DUMMY)
2995 # Decide whether to build database connectivity stuff (including Base) or not.
2996 if test "$enable_database_connectivity" != no; then
2997     BUILD_TYPE="$BUILD_TYPE DBCONNECTIVITY"
2998     AC_DEFINE(HAVE_FEATURE_DBCONNECTIVITY)
2999 else
3000     if test "$_os" = iOS; then
3001         AC_MSG_ERROR([Presumly can't disable DB connectivity on iOS.])
3002     fi
3003     disable_database_connectivity_dependencies
3006 if test -z "$enable_extensions"; then
3007     # For iOS and Android Viewer, disable extensions unless specifically overridden with --enable-extensions.
3008     if test $_os != iOS && test $_os != Android -o "$ENABLE_ANDROID_LOK" = TRUE ; then
3009         enable_extensions=yes
3010     fi
3013 if test "$enable_extensions" = yes; then
3014     BUILD_TYPE="$BUILD_TYPE EXTENSIONS"
3015     AC_DEFINE(HAVE_FEATURE_EXTENSIONS)
3016 else
3017     enable_extension_integration=no
3018     enable_extension_update=no
3021 if test -z "$enable_scripting"; then
3022     enable_scripting=yes
3025 DISABLE_SCRIPTING=''
3026 if test "$enable_scripting" = yes; then
3027     BUILD_TYPE="$BUILD_TYPE SCRIPTING"
3028     AC_DEFINE(HAVE_FEATURE_SCRIPTING)
3029 else
3030     DISABLE_SCRIPTING='TRUE'
3031     SCPDEFS="$SCPDEFS -DDISABLE_SCRIPTING"
3034 if test $_os = iOS -o $_os = Android -o $_os = Emscripten; then
3035     # Disable dynamic_loading always for iOS and Android
3036     enable_dynamic_loading=no
3037 elif test -z "$enable_dynamic_loading"; then
3038     # Otherwise enable it unless specifically disabled
3039     enable_dynamic_loading=yes
3042 DISABLE_DYNLOADING=''
3043 if test "$enable_dynamic_loading" = yes; then
3044     BUILD_TYPE="$BUILD_TYPE DYNLOADING"
3045 else
3046     DISABLE_DYNLOADING='TRUE'
3048 AC_SUBST(DISABLE_DYNLOADING)
3050 # remember SYSBASE value
3051 AC_SUBST(SYSBASE)
3053 dnl ===================================================================
3054 dnl  Sort out various gallery compilation options
3055 dnl ===================================================================
3056 WITH_GALLERY_BUILD=TRUE
3057 AC_MSG_CHECKING([how to build and package galleries])
3058 if test -n "${with_galleries}"; then
3059     if test "$with_galleries" = "build"; then
3060         if test "$enable_database_connectivity" = no; then
3061             AC_MSG_ERROR([DB connectivity is needed for gengal / svx])
3062         fi
3063         AC_MSG_RESULT([build from source images internally])
3064     elif test "$with_galleries" = "no"; then
3065         WITH_GALLERY_BUILD=
3066         AC_MSG_RESULT([disable non-internal gallery build])
3067     else
3068         AC_MSG_ERROR([unknown value --with-galleries=$with_galleries])
3069     fi
3070 else
3071     if test $_os != iOS -a $_os != Android; then
3072         AC_MSG_RESULT([internal src images for desktop])
3073     else
3074         WITH_GALLERY_BUILD=
3075         AC_MSG_RESULT([disable src image build])
3076     fi
3078 AC_SUBST(WITH_GALLERY_BUILD)
3080 dnl ===================================================================
3081 dnl  Checks if ccache is available
3082 dnl ===================================================================
3083 CCACHE_DEPEND_MODE=
3084 if test "$enable_ccache" = "no"; then
3085     CCACHE=""
3086 elif test -n "$enable_ccache" -o \( "$enable_ccache" = "" -a "$enable_icecream" != "yes" \); then
3087     case "%$CC%$CXX%" in
3088     # If $CC and/or $CXX already contain "ccache" (possibly suffixed with some version number etc),
3089     # assume that's good then
3090     *%ccache[[-_' ']]*|*/ccache[[-_' ']]*)
3091         AC_MSG_NOTICE([ccache seems to be included in a pre-defined CC and/or CXX])
3092         CCACHE_DEPEND_MODE=1
3093         ;;
3094     *)
3095         # try to use our own ccache if it is available and CCACHE was not already defined
3096         if test -z "$CCACHE"; then
3097             if test "$_os" = "WINNT"; then
3098                 ccache_ext=.exe # e.g. openssl build needs ccache.exe, not just ccache
3099             fi
3100             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/ccache$ccache_ext" ; then
3101                 CCACHE="$LODE_HOME/opt/bin/ccache$ccache_ext"
3102             elif test -x "/opt/lo/bin/ccache$ccache_ext"; then
3103                 CCACHE="/opt/lo/bin/ccache$ccache_ext"
3104             fi
3105         fi
3106         AC_PATH_PROG([CCACHE],[ccache],[not found])
3107         if test "$CCACHE" != "not found" -a "$_os" = "WINNT"; then
3108             CCACHE=`win_short_path_for_make "$CCACHE"`
3109             # check that it has MSVC support (it should recognize it in CCACHE_COMPILERTYPE)
3110             rm -f conftest.txt
3111             AC_MSG_CHECKING([whether $CCACHE has MSVC support])
3112             CCACHE_COMPILERTYPE=cl CCACHE_LOGFILE=conftest.txt $CCACHE echo >/dev/null 2>/dev/null
3113             if grep -q 'Config: (environment) compiler_type = cl' conftest.txt; then
3114                 AC_MSG_RESULT(yes)
3115             else
3116                 AC_MSG_RESULT(no)
3117                 CCACHE="not found"
3118             fi
3119             rm -f conftest.txt
3120         fi
3121         if test "$CCACHE" = "not found" -a "$_os" = "WINNT"; then
3122             # on windows/VC perhaps sccache is around?
3123             case "%$CC%$CXX%" in
3124             # If $CC and/or $CXX already contain "sccache" (possibly suffixed with some version number etc),
3125             # assume that's good then
3126             *%sccache[[-_' ']]*|*/sccache[[-_' ']]*)
3127                 AC_MSG_NOTICE([sccache seems to be included in a pre-defined CC and/or CXX])
3128                 CCACHE_DEPEND_MODE=1
3129                 SCCACHE=1
3130                 ;;
3131             *)
3132                 # for sharing code below, reuse CCACHE env var
3133                 AC_PATH_PROG([CCACHE],[sccache],[not found])
3134                 if test "$CCACHE" != "not found"; then
3135                     CCACHE=`win_short_path_for_make "$CCACHE"`
3136                     SCCACHE=1
3137                     CCACHE_DEPEND_MODE=1
3138                 fi
3139                 ;;
3140             esac
3141         fi
3142         if test "$CCACHE" = "not found"; then
3143             CCACHE=""
3144         fi
3145         if test -n "$CCACHE" -a -z "$SCCACHE"; then
3146             CCACHE_DEPEND_MODE=1
3147             # Need to check for ccache version: otherwise prevents
3148             # caching of the results (like "-x objective-c++" for Mac)
3149             if test $_os = Darwin -o $_os = iOS; then
3150                 # Check ccache version
3151                 AC_MSG_CHECKING([whether version of ccache is suitable])
3152                 CCACHE_VERSION=`"$CCACHE" -V | "$AWK" '/^ccache version/{print $3}'`
3153                 CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
3154                 if test "$CCACHE_VERSION" = "2.4_OOo" -o "$CCACHE_NUMVER" -ge "030100"; then
3155                     AC_MSG_RESULT([yes, $CCACHE_VERSION])
3156                 else
3157                     AC_MSG_RESULT([no, $CCACHE_VERSION])
3158                     CCACHE=""
3159                     CCACHE_DEPEND_MODE=
3160                 fi
3161             fi
3162         fi
3163         ;;
3164     esac
3165 else
3166     CCACHE=""
3168 if test "$enable_ccache" = "nodepend"; then
3169     CCACHE_DEPEND_MODE=""
3171 AC_SUBST(CCACHE_DEPEND_MODE)
3173 # sccache defaults are good enough
3174 if test "$CCACHE" != "" -a -z "$SCCACHE"; then
3175     # e.g. (/home/rene/.config/ccache/ccache.conf) max_size = 20.0G
3176     # -p works with both 4.2 and 4.4
3177     ccache_size_msg=$([ccache -p | $AWK /max_size/'{ print $4 }' | sed -e 's/\.[0-9]*//'])
3178     ccache_size=$(echo "$ccache_size_msg" | grep "G" | sed -e 's/G.*$//')
3179     if test "$ccache_size" = ""; then
3180         ccache_size=$(echo "$ccache_size_msg" | grep "M" | sed -e 's/\ M.*$//')
3181         if test "$ccache_size" = ""; then
3182             ccache_size=0
3183         fi
3184         # we could not determine the size or it was less than 1GB -> disable auto-ccache
3185         if test $ccache_size -lt 1024; then
3186             CCACHE=""
3187             AC_MSG_WARN([ccache's cache size is less than 1GB using it is counter-productive: Disabling auto-ccache detection])
3188             add_warning "ccache's cache size is less than 1GB using it is counter-productive: auto-ccache detection disabled"
3189         else
3190             # warn that ccache may be too small for debug build
3191             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3192             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3193         fi
3194     else
3195         if test $ccache_size -lt 5; then
3196             #warn that ccache may be too small for debug build
3197             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3198             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3199         fi
3200     fi
3203 ENABLE_Z7_DEBUG=
3204 if test "$enable_z7_debug" != no; then
3205     if test "$enable_z7_debug" = yes -o -n "$CCACHE"; then
3206         ENABLE_Z7_DEBUG=TRUE
3207     fi
3208 else
3209     AC_MSG_WARN([ccache will not work with --disable-z7-debug])
3210     add_warning "ccache will not work with --disable-z7-debug"
3212 AC_SUBST(ENABLE_Z7_DEBUG)
3214 dnl ===================================================================
3215 dnl  Checks for C compiler,
3216 dnl  The check for the C++ compiler is later on.
3217 dnl ===================================================================
3218 if test "$_os" != "WINNT"; then
3219     GCC_HOME_SET="true"
3220     AC_MSG_CHECKING([gcc home])
3221     if test -z "$with_gcc_home"; then
3222         if test "$enable_icecream" = "yes"; then
3223             if test -d "/usr/lib/icecc/bin"; then
3224                 GCC_HOME="/usr/lib/icecc/"
3225             elif test -d "/usr/libexec/icecc/bin"; then
3226                 GCC_HOME="/usr/libexec/icecc/"
3227             elif test -d "/opt/icecream/bin"; then
3228                 GCC_HOME="/opt/icecream/"
3229             else
3230                 AC_MSG_ERROR([Could not figure out the location of icecream GCC wrappers, manually use --with-gcc-home])
3232             fi
3233         else
3234             GCC_HOME=`which gcc | $SED -e s,/bin/gcc,,`
3235             GCC_HOME_SET="false"
3236         fi
3237     else
3238         GCC_HOME="$with_gcc_home"
3239     fi
3240     AC_MSG_RESULT($GCC_HOME)
3241     AC_SUBST(GCC_HOME)
3243     if test "$GCC_HOME_SET" = "true"; then
3244         if test -z "$CC"; then
3245             CC="$GCC_HOME/bin/gcc"
3246             CC_BASE="gcc"
3247         fi
3248         if test -z "$CXX"; then
3249             CXX="$GCC_HOME/bin/g++"
3250             CXX_BASE="g++"
3251         fi
3252     fi
3255 COMPATH=`dirname "$CC"`
3256 if test "$COMPATH" = "."; then
3257     AC_PATH_PROGS(COMPATH, $CC)
3258     dnl double square bracket to get single because of M4 quote...
3259     COMPATH=`echo $COMPATH | $SED "s@/[[^/:]]*\\\$@@"`
3261 COMPATH=`echo $COMPATH | $SED "s@/[[Bb]][[Ii]][[Nn]]\\\$@@"`
3263 dnl ===================================================================
3264 dnl Java support
3265 dnl ===================================================================
3266 AC_MSG_CHECKING([whether to build with Java support])
3267 if test "$with_java" != "no"; then
3268     if test "$DISABLE_SCRIPTING" = TRUE; then
3269         AC_MSG_RESULT([no, overridden by --disable-scripting])
3270         ENABLE_JAVA=""
3271         with_java=no
3272     else
3273         AC_MSG_RESULT([yes])
3274         ENABLE_JAVA="TRUE"
3275         AC_DEFINE(HAVE_FEATURE_JAVA)
3276     fi
3277 else
3278     AC_MSG_RESULT([no])
3279     ENABLE_JAVA=""
3282 AC_SUBST(ENABLE_JAVA)
3284 dnl ENABLE_JAVA="TRUE" if we want there to be *run-time* (and build-time) support for Java
3286 dnl ENABLE_JAVA="" indicate no Java support at all
3288 dnl ===================================================================
3289 dnl Check macOS SDK and compiler
3290 dnl ===================================================================
3292 if test $_os = Darwin; then
3294     # The SDK in the currently selected Xcode should be found.
3296     AC_MSG_CHECKING([what macOS SDK to use])
3297     # XCode only ships with a single SDK for a while now, and using older SDKs alongside is not
3298     # really supported anymore, instead you'd use different copies of Xcode, each with their own
3299     # SDK, and thus xcrun will pick the SDK that matches the currently selected Xcode version
3300     # also restricting the SDK version to "known good" versions doesn't seem necessary anyomre, the
3301     # problems that existed in the PPC days with target versions not being respected or random
3302     # failures seems to be a thing of the past or rather: limiting either the Xcode version or the
3303     # SDK version is enough, no need to do both...
3304     MACOSX_SDK_PATH=`xcrun --sdk macosx --show-sdk-path 2> /dev/null`
3305     if test ! -d "$MACOSX_SDK_PATH"; then
3306         AC_MSG_ERROR([Could not find an appropriate macOS SDK])
3307     fi
3308     macosx_sdk=`xcodebuild -version -sdk "$MACOSX_SDK_PATH" SDKVersion`
3309     MACOSX_SDK_BUILD_VERSION=$(xcodebuild -version -sdk "$MACOSX_SDK_PATH" ProductBuildVersion)
3310     # format changed between 10.9 and 10.10 - up to 10.9 it was just four digits (1090), starting
3311     # with macOS 10.10 it was switched to account for x.y.z with six digits, 10.10 is 101000,
3312     # 10.10.2 is 101002
3313     # we don't target the lower versions anymore, so it doesn't matter that we don't generate the
3314     # correct version in case such an old SDK is specified, it will be rejected later anyway
3315     MACOSX_SDK_VERSION=$(echo $macosx_sdk | $AWK -F. '{ print $1*10000+$2*100+$3 }')
3316     if test $MACOSX_SDK_VERSION -lt 101400; then
3317         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported, lowest supported version is 10.14])
3318     fi
3319     if test "$host_cpu" = arm64 -a $MACOSX_SDK_VERSION -lt 110000; then
3320         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported for Apple Silicon (need at least 11.0)])
3321     fi
3322     AC_MSG_RESULT([macOS SDK $macosx_sdk at $MACOSX_SDK_PATH])
3324     AC_MSG_CHECKING([what minimum version of macOS to require])
3325     if test "$with_macosx_version_min_required" = "" ; then
3326         if test "$host_cpu" = x86_64; then
3327             with_macosx_version_min_required="10.12";
3328         else
3329             with_macosx_version_min_required="11.0";
3330         fi
3331     fi
3332     # see same notes about MACOSX_SDK_VERSION above
3333     MAC_OS_X_VERSION_MIN_REQUIRED=$(echo $with_macosx_version_min_required | $AWK -F. '{ print $1*10000+$2*100+$3 }')
3334     if test $MAC_OS_X_VERSION_MIN_REQUIRED -lt 101200; then
3335         AC_MSG_ERROR([with-macosx-version-min-required $with_macosx_version_min_required is not a supported value, minimum supported version is 10.12])
3336     fi
3337     AC_MSG_RESULT([$with_macosx_version_min_required])
3339     AC_MSG_CHECKING([that macosx-version-min-required is coherent with macos-with-sdk])
3340     if test $MAC_OS_X_VERSION_MIN_REQUIRED -gt $MACOSX_SDK_VERSION; then
3341         AC_MSG_ERROR([the version minimum required ($with_macosx_version_min_required) cannot be greater than the sdk level ($macosx_sdk)])
3342     else
3343         AC_MSG_RESULT([yes])
3344     fi
3346     # export this so that "xcrun" invocations later return matching values
3347     DEVELOPER_DIR="${MACOSX_SDK_PATH%/SDKs*}"
3348     DEVELOPER_DIR="${DEVELOPER_DIR%/Platforms*}"
3349     export DEVELOPER_DIR
3350     FRAMEWORKSHOME="$MACOSX_SDK_PATH/System/Library/Frameworks"
3351     MACOSX_DEPLOYMENT_TARGET="$with_macosx_version_min_required"
3353     AC_MSG_CHECKING([whether Xcode is new enough])
3354     my_xcode_ver1=$(xcrun xcodebuild -version | head -n 1)
3355     my_xcode_ver2=${my_xcode_ver1#Xcode }
3356     my_xcode_ver3=$(printf %s "$my_xcode_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
3357     if test "$my_xcode_ver3" -ge 1103; then
3358         AC_MSG_RESULT([yes ($my_xcode_ver2)])
3359     else
3360         AC_MSG_ERROR(["$my_xcode_ver1" is too old or unrecognized, must be at least Xcode 11.3])
3361     fi
3363     my_xcode_ver1=$(xcrun xcodebuild -version | tail -n 1)
3364     MACOSX_XCODE_BUILD_VERSION=${my_xcode_ver1#Build version }
3366     LIBTOOL=/usr/bin/libtool
3367     INSTALL_NAME_TOOL=install_name_tool
3368     if test -z "$save_CC"; then
3369         stdlib=-stdlib=libc++
3371         AC_MSG_CHECKING([what C compiler to use])
3372         CC="`xcrun -find clang`"
3373         CC_BASE=`first_arg_basename "$CC"`
3374         if test "$host_cpu" = x86_64; then
3375             CC+=" -target x86_64-apple-macos"
3376         else
3377             CC+=" -target arm64-apple-macos"
3378         fi
3379         CC+=" -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3380         AC_MSG_RESULT([$CC])
3382         AC_MSG_CHECKING([what C++ compiler to use])
3383         CXX="`xcrun -find clang++`"
3384         CXX_BASE=`first_arg_basename "$CXX"`
3385         if test "$host_cpu" = x86_64; then
3386             CXX+=" -target x86_64-apple-macos"
3387         else
3388             CXX+=" -target arm64-apple-macos"
3389         fi
3390         CXX+=" $stdlib -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3391         AC_MSG_RESULT([$CXX])
3393         INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3394         AR=`xcrun -find ar`
3395         NM=`xcrun -find nm`
3396         STRIP=`xcrun -find strip`
3397         LIBTOOL=`xcrun -find libtool`
3398         RANLIB=`xcrun -find ranlib`
3399     fi
3401     AC_MSG_CHECKING([whether to do code signing])
3403     if test -z "$enable_macosx_code_signing" -o "$enable_macosx_code_signing" == "no" ; then
3404         AC_MSG_RESULT([no])
3405     else
3406         if test "$enable_macosx_code_signing" = yes; then
3407             # By default use the first suitable certificate (?).
3409             # http://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3410             # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3411             # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3412             # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3413             # "Developer ID Application" one.
3414             identity="Developer ID Application:"
3415         else
3416             identity=$enable_macosx_code_signing
3417         fi
3418         identity=`security find-identity -p codesigning -v 2>/dev/null | $AWK "/$identity/{print \\$2; exit}"`
3419         if test -n "$identity"; then
3420             MACOSX_CODESIGNING_IDENTITY=$identity
3421             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3422             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3423         else
3424             AC_MSG_ERROR([cannot determine identity to use])
3425         fi
3426     fi
3428     AC_MSG_CHECKING([whether to create a Mac App Store package])
3430     if test -z "$enable_macosx_package_signing" || test "$enable_macosx_package_signing" == no; then
3431         AC_MSG_RESULT([no])
3432     elif test -z "$MACOSX_CODESIGNING_IDENTITY"; then
3433         AC_MSG_ERROR([You forgot --enable-macosx-code-signing])
3434     else
3435         if test "$enable_macosx_package_signing" = yes; then
3436             # By default use the first suitable certificate.
3437             # It should be a "3rd Party Mac Developer Installer" one
3438             identity="3rd Party Mac Developer Installer:"
3439         else
3440             identity=$enable_macosx_package_signing
3441         fi
3442         identity=`security find-identity -v 2>/dev/null | $AWK "/$identity/ {print \\$2; exit}"`
3443         if test -n "$identity"; then
3444             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3445             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3446             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3447         else
3448             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3449         fi
3450     fi
3452     if test -n "$MACOSX_CODESIGNING_IDENTITY" -a -n "$MACOSX_PACKAGE_SIGNING_IDENTITY" -a "$MACOSX_CODESIGNING_IDENTITY" = "$MACOSX_PACKAGE_SIGNING_IDENTITY"; then
3453         AC_MSG_ERROR([You should not use the same identity for code and package signing])
3454     fi
3456     AC_MSG_CHECKING([whether to sandbox the application])
3458     if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then
3459         AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java])
3460     elif test "$enable_macosx_sandbox" = yes; then
3461         ENABLE_MACOSX_SANDBOX=TRUE
3462         AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX)
3463         AC_MSG_RESULT([yes])
3464     else
3465         AC_MSG_RESULT([no])
3466     fi
3468     AC_MSG_CHECKING([what macOS app bundle identifier to use])
3469     MACOSX_BUNDLE_IDENTIFIER=$with_macosx_bundle_identifier
3470     AC_MSG_RESULT([$MACOSX_BUNDLE_IDENTIFIER])
3472     if test -n "$with_macosx_provisioning_profile" ; then
3473         if test ! -f "$with_macosx_provisioning_profile"; then
3474             AC_MSG_ERROR([provisioning profile not found at $with_macosx_provisioning_profile])
3475         else
3476             MACOSX_PROVISIONING_PROFILE=$with_macosx_provisioning_profile
3477             MACOSX_PROVISIONING_INFO=$([security cms -D -i "$MACOSX_PROVISIONING_PROFILE" | \
3478                 xmllint --xpath "//key[.='com.apple.application-identifier' or .='com.apple.developer.team-identifier'] \
3479                     | //key[.='com.apple.application-identifier' or .='com.apple.developer.team-identifier']/following-sibling::string[1]" - | \
3480                 sed -e 's#><#>\n\t<#g' -e 's#^#\t#'])
3481         fi
3482     fi
3484 AC_SUBST(MACOSX_SDK_PATH)
3485 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3486 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3487 AC_SUBST(INSTALL_NAME_TOOL)
3488 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3489 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3490 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3491 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3492 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3493 AC_SUBST(MACOSX_PROVISIONING_INFO)
3494 AC_SUBST(MACOSX_PROVISIONING_PROFILE)
3495 AC_SUBST(MACOSX_SDK_BUILD_VERSION)
3496 AC_SUBST(MACOSX_XCODE_BUILD_VERSION)
3498 dnl ===================================================================
3499 dnl Check iOS SDK and compiler
3500 dnl ===================================================================
3502 if test $_os = iOS; then
3503     AC_MSG_CHECKING([what iOS SDK to use])
3504     current_sdk_ver=16.5
3505     older_sdk_vers="16.4 16.3 16.2 16.1 16.0 15.6 15.5 15.4 15.2 15.0"
3506     if test "$enable_ios_simulator" = "yes"; then
3507         platform=iPhoneSimulator
3508         versionmin=-mios-simulator-version-min=14.5
3509     else
3510         platform=iPhoneOS
3511         versionmin=-miphoneos-version-min=14.5
3512     fi
3513     xcode_developer=`xcode-select -print-path`
3515     for sdkver in $current_sdk_ver $older_sdk_vers; do
3516         t=$xcode_developer/Platforms/$platform.platform/Developer/SDKs/$platform$sdkver.sdk
3517         if test -d $t; then
3518             sysroot=$t
3519             break
3520         fi
3521     done
3523     if test -z "$sysroot"; then
3524         AC_MSG_ERROR([Could not find iOS SDK, expected something like $xcode_developer/Platforms/$platform.platform/Developer/SDKs/${platform}${current_sdk_ver}.sdk])
3525     fi
3527     AC_MSG_RESULT($sysroot)
3529     stdlib="-stdlib=libc++"
3531     AC_MSG_CHECKING([what C compiler to use])
3532     CC="`xcrun -find clang`"
3533     CC_BASE=`first_arg_basename "$CC"`
3534     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3535     AC_MSG_RESULT([$CC])
3537     AC_MSG_CHECKING([what C++ compiler to use])
3538     CXX="`xcrun -find clang++`"
3539     CXX_BASE=`first_arg_basename "$CXX"`
3540     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3541     AC_MSG_RESULT([$CXX])
3543     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3544     AR=`xcrun -find ar`
3545     NM=`xcrun -find nm`
3546     STRIP=`xcrun -find strip`
3547     LIBTOOL=`xcrun -find libtool`
3548     RANLIB=`xcrun -find ranlib`
3551 AC_MSG_CHECKING([whether to treat the installation as read-only])
3553 if test $_os = Darwin; then
3554     enable_readonly_installset=yes
3555 elif test "$enable_extensions" != yes; then
3556     enable_readonly_installset=yes
3558 if test "$enable_readonly_installset" = yes; then
3559     AC_MSG_RESULT([yes])
3560     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3561 else
3562     AC_MSG_RESULT([no])
3565 dnl ===================================================================
3566 dnl Structure of install set
3567 dnl ===================================================================
3569 if test $_os = Darwin; then
3570     LIBO_BIN_FOLDER=MacOS
3571     LIBO_ETC_FOLDER=Resources
3572     LIBO_LIBEXEC_FOLDER=MacOS
3573     LIBO_LIB_FOLDER=Frameworks
3574     LIBO_LIB_PYUNO_FOLDER=Resources
3575     LIBO_SHARE_FOLDER=Resources
3576     LIBO_SHARE_HELP_FOLDER=Resources/help
3577     LIBO_SHARE_JAVA_FOLDER=Resources/java
3578     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3579     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3580     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3581     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3582     LIBO_URE_BIN_FOLDER=MacOS
3583     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3584     LIBO_URE_LIB_FOLDER=Frameworks
3585     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3586     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3587 elif test $_os = WINNT; then
3588     LIBO_BIN_FOLDER=program
3589     LIBO_ETC_FOLDER=program
3590     LIBO_LIBEXEC_FOLDER=program
3591     LIBO_LIB_FOLDER=program
3592     LIBO_LIB_PYUNO_FOLDER=program
3593     LIBO_SHARE_FOLDER=share
3594     LIBO_SHARE_HELP_FOLDER=help
3595     LIBO_SHARE_JAVA_FOLDER=program/classes
3596     LIBO_SHARE_PRESETS_FOLDER=presets
3597     LIBO_SHARE_READMES_FOLDER=readmes
3598     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3599     LIBO_SHARE_SHELL_FOLDER=program/shell
3600     LIBO_URE_BIN_FOLDER=program
3601     LIBO_URE_ETC_FOLDER=program
3602     LIBO_URE_LIB_FOLDER=program
3603     LIBO_URE_MISC_FOLDER=program
3604     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3605 else
3606     LIBO_BIN_FOLDER=program
3607     LIBO_ETC_FOLDER=program
3608     LIBO_LIBEXEC_FOLDER=program
3609     LIBO_LIB_FOLDER=program
3610     LIBO_LIB_PYUNO_FOLDER=program
3611     LIBO_SHARE_FOLDER=share
3612     LIBO_SHARE_HELP_FOLDER=help
3613     LIBO_SHARE_JAVA_FOLDER=program/classes
3614     LIBO_SHARE_PRESETS_FOLDER=presets
3615     LIBO_SHARE_READMES_FOLDER=readmes
3616     if test "$enable_fuzzers" != yes; then
3617         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3618     else
3619         LIBO_SHARE_RESOURCE_FOLDER=resource
3620     fi
3621     LIBO_SHARE_SHELL_FOLDER=program/shell
3622     LIBO_URE_BIN_FOLDER=program
3623     LIBO_URE_ETC_FOLDER=program
3624     LIBO_URE_LIB_FOLDER=program
3625     LIBO_URE_MISC_FOLDER=program
3626     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3628 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3629 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3630 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3631 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3632 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3633 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3634 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3635 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3636 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3637 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3638 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3639 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3640 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3641 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3642 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3643 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3645 # Not all of them needed in config_host.mk, add more if need arises
3646 AC_SUBST(LIBO_BIN_FOLDER)
3647 AC_SUBST(LIBO_ETC_FOLDER)
3648 AC_SUBST(LIBO_LIB_FOLDER)
3649 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3650 AC_SUBST(LIBO_SHARE_FOLDER)
3651 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3652 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3653 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3654 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3655 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3656 AC_SUBST(LIBO_URE_BIN_FOLDER)
3657 AC_SUBST(LIBO_URE_ETC_FOLDER)
3658 AC_SUBST(LIBO_URE_LIB_FOLDER)
3659 AC_SUBST(LIBO_URE_MISC_FOLDER)
3660 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3662 dnl ===================================================================
3663 dnl Windows specific tests and stuff
3664 dnl ===================================================================
3666 reg_get_value()
3668     # Return value: $regvalue
3669     unset regvalue
3671     if test "$build_os" = "wsl"; then
3672         regvalue=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --read-registry $1 "$2" 2>/dev/null)
3673         return
3674     fi
3676     local _regentry="/proc/registry${1}/${2}"
3677     if test -f "$_regentry"; then
3678         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3679         # Registry keys read via /proc/registry* are always \0 terminated!
3680         local _regvalue=$(tr -d '\0' < "$_regentry")
3681         if test $? -eq 0; then
3682             regvalue=$_regvalue
3683         fi
3684     fi
3687 # Get a value from the 32-bit side of the Registry
3688 reg_get_value_32()
3690     reg_get_value "32" "$1"
3693 # Get a value from the 64-bit side of the Registry
3694 reg_get_value_64()
3696     reg_get_value "64" "$1"
3699 case "$host_os" in
3700 cygwin*|wsl*)
3701     COM=MSC
3702     OS=WNT
3703     RTL_OS=Windows
3704     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3705         P_SEP=";"
3706     else
3707         P_SEP=:
3708     fi
3709     case "$host_cpu" in
3710     x86_64)
3711         CPUNAME=X86_64
3712         RTL_ARCH=X86_64
3713         PLATFORMID=windows_x86_64
3714         WINDOWS_X64=1
3715         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
3716         WIN_HOST_ARCH="x64"
3717         WIN_MULTI_ARCH="x86"
3718         WIN_HOST_BITS=64
3719         ;;
3720     i*86)
3721         CPUNAME=INTEL
3722         RTL_ARCH=x86
3723         PLATFORMID=windows_x86
3724         WIN_HOST_ARCH="x86"
3725         WIN_HOST_BITS=32
3726         WIN_OTHER_ARCH="x64"
3727         ;;
3728     aarch64)
3729         CPUNAME=AARCH64
3730         RTL_ARCH=AARCH64
3731         PLATFORMID=windows_aarch64
3732         WINDOWS_X64=1
3733         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
3734         WIN_HOST_ARCH="arm64"
3735         WIN_HOST_BITS=64
3736         with_ucrt_dir=no
3737         ;;
3738     *)
3739         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
3740         ;;
3741     esac
3743     case "$build_cpu" in
3744     x86_64) WIN_BUILD_ARCH="x64" ;;
3745     i*86) WIN_BUILD_ARCH="x86" ;;
3746     aarch64) WIN_BUILD_ARCH="arm64" ;;
3747     *)
3748         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
3749         ;;
3750     esac
3752     SCPDEFS="$SCPDEFS -D_MSC_VER"
3753     ;;
3754 esac
3756 # multi-arch is an arch, which can execute on the host (x86 on x64), while
3757 # other-arch won't, but wouldn't break the build (x64 on x86).
3758 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
3759     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
3763 if test "$_os" = "iOS" -o "$build_cpu" != "$host_cpu"; then
3764     # To allow building Windows multi-arch releases without cross-tooling
3765     if test -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH"; then
3766         cross_compiling="yes"
3767     fi
3770 ENABLE_WASM_STRIP=''
3771 if test "$cross_compiling" = "yes"; then
3772     export CROSS_COMPILING=TRUE
3773     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
3774         ENABLE_WASM_STRIP=TRUE
3775     fi
3776 else
3777     CROSS_COMPILING=
3778     BUILD_TYPE="$BUILD_TYPE NATIVE"
3780 AC_SUBST(CROSS_COMPILING)
3781 AC_SUBST(ENABLE_WASM_STRIP)
3783 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
3784 # NOTE: must _not_ be used for bundled external libraries!
3785 ISYSTEM=
3786 if test "$GCC" = "yes"; then
3787     AC_MSG_CHECKING( for -isystem )
3788     save_CFLAGS=$CFLAGS
3789     CFLAGS="$CFLAGS -isystem /usr/include -Werror"
3790     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
3791     CFLAGS=$save_CFLAGS
3792     if test -n "$ISYSTEM"; then
3793         AC_MSG_RESULT(yes)
3794     else
3795         AC_MSG_RESULT(no)
3796     fi
3798 if test -z "$ISYSTEM"; then
3799     # fall back to using -I
3800     ISYSTEM=-I
3802 AC_SUBST(ISYSTEM)
3804 dnl ===================================================================
3805 dnl  Check which Visual Studio compiler is used
3806 dnl ===================================================================
3808 map_vs_year_to_version()
3810     # Return value: $vsversion
3812     unset vsversion
3814     case $1 in
3815     2019)
3816         vsversion=16;;
3817     2022)
3818         vsversion=17;;
3819     *)
3820         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
3821     esac
3824 vs_versions_to_check()
3826     # Args: $1 (optional) : versions to check, in the order of preference
3827     # Return value: $vsversions
3829     unset vsversions
3831     if test -n "$1"; then
3832         map_vs_year_to_version "$1"
3833         vsversions=$vsversion
3834     else
3835         # Default version is 2019
3836         vsversions="16"
3837     fi
3840 win_get_env_from_vsvars32bat()
3842     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
3843     # Also seems to be located in another directory under the same name: vsvars32.bat
3844     # https://github.com/bazelbuild/bazel/blob/master/src/main/native/build_windows_jni.sh#L56-L57
3845     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$(cygpath -w $VC_PRODUCT_DIR)" > $WRAPPERBATCHFILEPATH
3846     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
3847     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
3848     local result
3849     if test "$build_os" = "wsl"; then
3850         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
3851     else
3852         chmod +x $WRAPPERBATCHFILEPATH
3853         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
3854     fi
3855     rm -f $WRAPPERBATCHFILEPATH
3856     printf '%s' "$result"
3859 find_ucrt()
3861     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/InstallationFolder"
3862     if test -n "$regvalue"; then
3863         PathFormat "$regvalue"
3864         UCRTSDKDIR=$formatted_path_unix
3865         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion"
3866         UCRTVERSION=$regvalue
3867         # Rest if not exist
3868         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
3869           UCRTSDKDIR=
3870         fi
3871     fi
3872     if test -z "$UCRTSDKDIR"; then
3873         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
3874         ide_env_file="${ide_env_dir}VsDevCmd.bat"
3875         if test -f "$ide_env_file"; then
3876             PathFormat "$(win_get_env_from_vsvars32bat UniversalCRTSdkDir)"
3877             UCRTSDKDIR=$formatted_path
3878             UCRTVERSION=$(win_get_env_from_vsvars32bat UCRTVersion)
3879             dnl Hack needed at least by tml:
3880             if test "$UCRTVERSION" = 10.0.15063.0 \
3881                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
3882                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
3883             then
3884                 UCRTVERSION=10.0.14393.0
3885             fi
3886         else
3887           AC_MSG_ERROR([No UCRT found])
3888         fi
3889     fi
3892 find_msvc()
3894     # Find Visual C++
3895     # Args: $1 (optional) : The VS version year
3896     # Return values: $vctest, $vcyear, $vctoolset, $vcnumwithdot, $vcbuildnumber
3898     unset vctest vctoolset vcnumwithdot vcbuildnumber
3900     vs_versions_to_check "$1"
3901     if test "$build_os" = wsl; then
3902         vswhere="$PROGRAMFILESX86"
3903     else
3904         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
3905     fi
3906     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
3907     PathFormat "$vswhere"
3908     vswhere=$formatted_path_unix
3909     for ver in $vsversions; do
3910         vswhereoutput=`$vswhere -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3911         if test -z "$vswhereoutput"; then
3912             vswhereoutput=`$vswhere -prerelease -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3913         fi
3914         # Fall back to all MS products (this includes VC++ Build Tools)
3915         if ! test -n "$vswhereoutput"; then
3916             AC_MSG_CHECKING([VC++ Build Tools and similar])
3917             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3918         fi
3919         if test -n "$vswhereoutput"; then
3920             PathFormat "$vswhereoutput"
3921             vctest=$formatted_path_unix
3922             break
3923         fi
3924     done
3926     if test -n "$vctest"; then
3927         vcnumwithdot="$ver.0"
3928         case "$vcnumwithdot" in
3929         16.0)
3930             vcyear=2019
3931             vctoolset=v142
3932             ;;
3933         17.0)
3934             vcyear=2022
3935             vctoolset=v143
3936             ;;
3937         esac
3938         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
3940     fi
3943 test_cl_exe()
3945     AC_MSG_CHECKING([$1 compiler])
3947     CL_EXE_PATH="$2/cl.exe"
3949     if test ! -f "$CL_EXE_PATH"; then
3950         if test "$1" = "multi-arch"; then
3951             AC_MSG_WARN([no compiler (cl.exe) in $2])
3952             return 1
3953         else
3954             AC_MSG_ERROR([no compiler (cl.exe) in $2])
3955         fi
3956     fi
3958     dnl ===========================================================
3959     dnl  Check for the corresponding mspdb*.dll
3960     dnl ===========================================================
3962     # MSVC 15.0 has libraries from 14.0?
3963     mspdbnum="140"
3965     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
3966         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
3967     fi
3969     # The compiles has to find its shared libraries
3970     OLD_PATH="$PATH"
3971     TEMP_PATH=`cygpath -d "$2"`
3972     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
3974     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
3975         AC_MSG_ERROR([no compiler (cl.exe) in $2])
3976     fi
3978     PATH="$OLD_PATH"
3980     AC_MSG_RESULT([$CL_EXE_PATH])
3983 SOLARINC=
3984 MSBUILD_PATH=
3985 DEVENV=
3986 if test "$_os" = "WINNT"; then
3987     AC_MSG_CHECKING([Visual C++])
3988     find_msvc "$with_visual_studio"
3989     if test -z "$vctest"; then
3990         if test -n "$with_visual_studio"; then
3991             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
3992         else
3993             AC_MSG_ERROR([no Visual Studio installation found])
3994         fi
3995     fi
3996     AC_MSG_RESULT([])
3998     VC_PRODUCT_DIR="$vctest/VC"
3999     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
4001     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
4002     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
4003         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
4004         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
4005         if test $? -ne 0; then
4006             WIN_MULTI_ARCH=""
4007             WIN_OTHER_ARCH=""
4008         fi
4009     fi
4011     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
4012         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
4013         test_cl_exe "build" "$MSVC_BUILD_PATH"
4014     fi
4016     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
4017         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
4018         test_cl_exe "host" "$MSVC_HOST_PATH"
4019     else
4020         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
4021     fi
4023     AC_MSG_CHECKING([for short pathname of VC product directory])
4024     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
4025     AC_MSG_RESULT([$VC_PRODUCT_DIR])
4027     UCRTSDKDIR=
4028     UCRTVERSION=
4030     AC_MSG_CHECKING([for UCRT location])
4031     find_ucrt
4032     # find_ucrt errors out if it doesn't find it
4033     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
4034     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
4035     ucrtincpath_formatted=$formatted_path
4036     # SOLARINC is used for external modules and must be set too.
4037     # And no, it's not sufficient to set SOLARINC only, as configure
4038     # itself doesn't honour it.
4039     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
4040     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
4041     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
4042     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4044     AC_SUBST(UCRTSDKDIR)
4045     AC_SUBST(UCRTVERSION)
4047     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4048     # Find the proper version of MSBuild.exe to use based on the VS version
4049     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath
4050     if test -z "$regvalue" ; then
4051         if test "$WIN_BUILD_ARCH" != "x64"; then
4052             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4053         else
4054             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4055         fi
4056     fi
4057     if test -d "$regvalue" ; then
4058         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4059         AC_MSG_RESULT([$regvalue])
4060     else
4061         AC_MSG_ERROR([MSBuild.exe location not found])
4062     fi
4064     # Find the version of devenv.exe
4065     # MSVC 2017 devenv does not start properly from a DOS 8.3 path
4066     DEVENV=$(cygpath -lm "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe")
4067     DEVENV_unix=$(cygpath -u "$DEVENV")
4068     if test ! -e "$DEVENV_unix"; then
4069         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4070     fi
4072     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4073     dnl needed when building CLR code:
4074     if test -z "$MSVC_CXX"; then
4075         # This gives us a posix path with 8.3 filename restrictions
4076         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4077     fi
4079     if test -z "$CC"; then
4080         CC=$MSVC_CXX
4081         CC_BASE=`first_arg_basename "$CC"`
4082     fi
4083     if test -z "$CXX"; then
4084         CXX=$MSVC_CXX
4085         CXX_BASE=`first_arg_basename "$CXX"`
4086     fi
4088     if test -n "$CC"; then
4089         # Remove /cl.exe from CC case insensitive
4090         AC_MSG_NOTICE([found Visual C++ $vcyear])
4092         main_include_dir=`cygpath -d -m "$COMPATH/Include"`
4093         CPPFLAGS="$CPPFLAGS -I$main_include_dir"
4095         PathFormat "$COMPATH"
4096         COMPATH=`win_short_path_for_make "$formatted_path"`
4098         VCVER=$vcnumwithdot
4099         VCTOOLSET=$vctoolset
4101         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4102         # are always "better", we list them in reverse chronological order.
4104         case "$vcnumwithdot" in
4105         16.0 | 17.0)
4106             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4107             ;;
4108         esac
4110         # The expectation is that --with-windows-sdk should not need to be used
4111         if test -n "$with_windows_sdk"; then
4112             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4113             *" "$with_windows_sdk" "*)
4114                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4115                 ;;
4116             *)
4117                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4118                 ;;
4119             esac
4120         fi
4122         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4123         ac_objext=obj
4124         ac_exeext=exe
4126     else
4127         AC_MSG_ERROR([Visual C++ not found after all, huh])
4128     fi
4130     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4131     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4132         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4133         // between Visual Studio versions and _MSC_VER:
4134         #if _MSC_VER < 1925
4135         #error
4136         #endif
4137     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4139     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4140     # version of the Explorer extension (and maybe other small
4141     # bits, too) needed when installing a 32-bit LibreOffice on a
4142     # 64-bit OS. The 64-bit Explorer extension is a feature that
4143     # has been present since long in OOo. Don't confuse it with
4144     # building LibreOffice itself as 64-bit code.
4146     BUILD_X64=
4147     CXX_X64_BINARY=
4149     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4150         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4151         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4152              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4153         then
4154             BUILD_X64=TRUE
4155             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4156             AC_MSG_RESULT([found])
4157         else
4158             AC_MSG_RESULT([not found])
4159             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4160         fi
4161     elif test "$WIN_HOST_ARCH" = "x64"; then
4162         CXX_X64_BINARY=$CXX
4163     fi
4164     AC_SUBST(BUILD_X64)
4166     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4167     AC_SUBST(CXX_X64_BINARY)
4169     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4170     # needed to support TWAIN scan on both 32- and 64-bit systems
4172     case "$WIN_HOST_ARCH" in
4173     x64)
4174         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4175         if test -n "$CXX_X86_BINARY"; then
4176             BUILD_X86=TRUE
4177             AC_MSG_RESULT([preset])
4178         elif test -n "$WIN_MULTI_ARCH"; then
4179             BUILD_X86=TRUE
4180             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4181             CXX_X86_BINARY+=" /arch:SSE"
4182             AC_MSG_RESULT([found])
4183         else
4184             AC_MSG_RESULT([not found])
4185             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4186         fi
4187         ;;
4188     x86)
4189         BUILD_X86=TRUE
4190         CXX_X86_BINARY=$MSVC_CXX
4191         ;;
4192     esac
4193     AC_SUBST(BUILD_X86)
4194     AC_SUBST(CXX_X86_BINARY)
4196 AC_SUBST(VCVER)
4197 AC_SUBST(VCTOOLSET)
4198 AC_SUBST(DEVENV)
4199 AC_SUBST(MSVC_CXX)
4201 COM_IS_CLANG=
4202 AC_MSG_CHECKING([whether the compiler is actually Clang])
4203 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4204     #ifndef __clang__
4205     you lose
4206     #endif
4207     int foo=42;
4208     ]])],
4209     [AC_MSG_RESULT([yes])
4210      COM_IS_CLANG=TRUE],
4211     [AC_MSG_RESULT([no])])
4212 AC_SUBST(COM_IS_CLANG)
4214 CC_PLAIN=$CC
4215 CLANGVER=
4216 if test "$COM_IS_CLANG" = TRUE; then
4217     AC_MSG_CHECKING([whether Clang is new enough])
4218     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4219         #if !defined __apple_build_version__
4220         #error
4221         #endif
4222         ]])],
4223         [my_apple_clang=yes],[my_apple_clang=])
4224     if test "$my_apple_clang" = yes; then
4225         AC_MSG_RESULT([assumed yes (Apple Clang)])
4226     elif test "$_os" = Emscripten; then
4227         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4228     else
4229         if test "$_os" = WINNT; then
4230             dnl In which case, assume clang-cl:
4231             my_args="/EP /TC"
4232             dnl Filter out -FIIntrin.h, which needs to be explicitly stated for
4233             dnl clang-cl:
4234             CC_PLAIN=
4235             for i in $CC; do
4236                 case $i in
4237                 -FIIntrin.h)
4238                     ;;
4239                 *)
4240                     CC_PLAIN="$CC_PLAIN $i"
4241                     ;;
4242                 esac
4243             done
4244         else
4245             my_args="-E -P"
4246         fi
4247         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC_PLAIN $my_args - | sed 's/ //g'`
4248         CLANG_FULL_VERSION=`echo __clang_version__ | $CC_PLAIN $my_args -`
4249         CLANGVER=`echo $clang_version \
4250             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4251         if test "$CLANGVER" -ge 50002; then
4252             AC_MSG_RESULT([yes ($clang_version)])
4253         else
4254             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 5.0.2])
4255         fi
4256         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4257         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4258     fi
4261 SHOWINCLUDES_PREFIX=
4262 if test "$_os" = WINNT; then
4263     dnl We need to guess the prefix of the -showIncludes output, it can be
4264     dnl localized
4265     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4266     echo "#include <stdlib.h>" > conftest.c
4267     SHOWINCLUDES_PREFIX=`$CC_PLAIN $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4268         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4269     rm -f conftest.c conftest.obj
4270     if test -z "$SHOWINCLUDES_PREFIX"; then
4271         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4272     else
4273         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4274     fi
4276 AC_SUBST(SHOWINCLUDES_PREFIX)
4279 # prefix C with ccache if needed
4281 if test "$CCACHE" != ""; then
4282     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4284     AC_LANG_PUSH([C])
4285     save_CFLAGS=$CFLAGS
4286     CFLAGS="$CFLAGS --ccache-skip -O2"
4287     # msvc does not fail on unknown options, check stdout
4288     if test "$COM" = MSC; then
4289         CFLAGS="$CFLAGS -nologo"
4290     fi
4291     save_ac_c_werror_flag=$ac_c_werror_flag
4292     ac_c_werror_flag=yes
4293     dnl an empty program will do, we're checking the compiler flags
4294     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4295                       [use_ccache=yes], [use_ccache=no])
4296     CFLAGS=$save_CFLAGS
4297     ac_c_werror_flag=$save_ac_c_werror_flag
4298     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4299         AC_MSG_RESULT([yes])
4300     else
4301         CC="$CCACHE $CC"
4302         CC_BASE="ccache $CC_BASE"
4303         AC_MSG_RESULT([no])
4304     fi
4305     AC_LANG_POP([C])
4308 # ===================================================================
4309 # check various GCC options that Clang does not support now but maybe
4310 # will somewhen in the future, check them even for GCC, so that the
4311 # flags are set
4312 # ===================================================================
4314 HAVE_GCC_GGDB2=
4315 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4316     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4317     save_CFLAGS=$CFLAGS
4318     CFLAGS="$CFLAGS -Werror -ggdb2"
4319     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4320     CFLAGS=$save_CFLAGS
4321     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4322         AC_MSG_RESULT([yes])
4323     else
4324         AC_MSG_RESULT([no])
4325     fi
4327     if test "$host_cpu" = "m68k"; then
4328         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4329         save_CFLAGS=$CFLAGS
4330         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4331         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4332         CFLAGS=$save_CFLAGS
4333         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4334             AC_MSG_RESULT([yes])
4335         else
4336             AC_MSG_ERROR([no])
4337         fi
4338     fi
4340 AC_SUBST(HAVE_GCC_GGDB2)
4342 dnl ===================================================================
4343 dnl  Test the gcc version
4344 dnl ===================================================================
4345 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4346     AC_MSG_CHECKING([the GCC version])
4347     _gcc_version=`$CC -dumpfullversion`
4348     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4349         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4350     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4352     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4354     if test "$gcc_full_version" -lt 70000; then
4355         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 7.0.0])
4356     fi
4357 else
4358     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4359     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4360     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4361     # (which reports itself as GCC 4.2.1).
4362     GCC_VERSION=
4364 AC_SUBST(GCC_VERSION)
4366 dnl Set the ENABLE_DBGUTIL variable
4367 dnl ===================================================================
4368 AC_MSG_CHECKING([whether to build with additional debug utilities])
4369 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4370     ENABLE_DBGUTIL="TRUE"
4371     # this is an extra var so it can have different default on different MSVC
4372     # versions (in case there are version specific problems with it)
4373     MSVC_USE_DEBUG_RUNTIME="TRUE"
4375     AC_MSG_RESULT([yes])
4376     # cppunit and graphite expose STL in public headers
4377     if test "$with_system_cppunit" = "yes"; then
4378         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4379     else
4380         with_system_cppunit=no
4381     fi
4382     if test "$with_system_graphite" = "yes"; then
4383         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4384     else
4385         with_system_graphite=no
4386         if test -z "$with_system_harfbuzz"; then
4387             with_system_harfbuzz=no
4388         fi
4389         if test -z "$with_system_cairo"; then
4390             with_system_cairo=no
4391         fi
4392         if test -z "$with_system_fontconfig"; then
4393             with_system_fontconfig=no
4394         fi
4395         if test -z "$with_system_freetype"; then
4396             with_system_freetype=no
4397         fi
4398     fi
4399     if test "$with_system_orcus" = "yes"; then
4400         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4401     else
4402         with_system_orcus=no
4403     fi
4404     if test "$with_system_libcmis" = "yes"; then
4405         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4406     else
4407         with_system_libcmis=no
4408     fi
4409     if test "$with_system_hunspell" = "yes"; then
4410         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4411     else
4412         with_system_hunspell=no
4413     fi
4414     if test "$with_system_gpgmepp" = "yes"; then
4415         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4416     else
4417         with_system_gpgmepp=no
4418     fi
4419     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4420     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4421     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4422     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4423     # of those two is using the system variant:
4424     if test "$with_system_libnumbertext" = "yes"; then
4425         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4426     else
4427         with_system_libnumbertext=no
4428     fi
4429     if test "$with_system_libwps" = "yes"; then
4430         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4431     else
4432         with_system_libwps=no
4433     fi
4434 else
4435     ENABLE_DBGUTIL=""
4436     MSVC_USE_DEBUG_RUNTIME=""
4437     AC_MSG_RESULT([no])
4439 AC_SUBST(ENABLE_DBGUTIL)
4440 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4442 dnl Set the ENABLE_DEBUG variable.
4443 dnl ===================================================================
4444 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4445     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4447 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4448     if test -z "$libo_fuzzed_enable_debug"; then
4449         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4450     else
4451         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4452         enable_debug=yes
4453     fi
4456 AC_MSG_CHECKING([whether to do a debug build])
4457 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4458     ENABLE_DEBUG="TRUE"
4459     if test -n "$ENABLE_DBGUTIL" ; then
4460         AC_MSG_RESULT([yes (dbgutil)])
4461     else
4462         AC_MSG_RESULT([yes])
4463     fi
4464 else
4465     ENABLE_DEBUG=""
4466     AC_MSG_RESULT([no])
4468 AC_SUBST(ENABLE_DEBUG)
4470 dnl ===================================================================
4471 dnl Select the linker to use (gold/lld/ld.bfd).
4472 dnl This is done only after compiler checks (need to know if Clang is
4473 dnl used, for different defaults) and after checking if a debug build
4474 dnl is wanted (non-debug builds get the default linker if not explicitly
4475 dnl specified otherwise).
4476 dnl All checks for linker features/options should come after this.
4477 dnl ===================================================================
4478 check_use_ld()
4480     use_ld=-fuse-ld=${1%%:*}
4481     use_ld_path=${1#*:}
4482     if test "$use_ld_path" != "$1"; then
4483         use_ld="$use_ld --ld-path=$use_ld_path"
4484     fi
4485     use_ld_fail_if_error=$2
4486     use_ld_ok=
4487     AC_MSG_CHECKING([for $use_ld linker support])
4488     use_ld_ldflags_save="$LDFLAGS"
4489     LDFLAGS="$LDFLAGS $use_ld"
4490     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4491 #include <stdio.h>
4492         ],[
4493 printf ("hello world\n");
4494         ])], USE_LD=$use_ld, [])
4495     if test -n "$USE_LD"; then
4496         AC_MSG_RESULT( yes )
4497         use_ld_ok=yes
4498     else
4499         if test -n "$use_ld_fail_if_error"; then
4500             AC_MSG_ERROR( no )
4501         else
4502             AC_MSG_RESULT( no )
4503         fi
4504     fi
4505     if test -n "$use_ld_ok"; then
4506         dnl keep the value of LDFLAGS
4507         return 0
4508     fi
4509     LDFLAGS="$use_ld_ldflags_save"
4510     return 1
4512 USE_LD=
4513 if test "$enable_ld" != "no"; then
4514     if test "$GCC" = "yes"; then
4515         if test -n "$enable_ld"; then
4516             check_use_ld "$enable_ld" fail_if_error
4517         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4518             dnl non-debug builds default to the default linker
4519             true
4520         elif test -n "$COM_IS_CLANG"; then
4521             check_use_ld lld
4522             if test $? -ne 0; then
4523                 check_use_ld gold
4524             fi
4525         else
4526             # For gcc first try gold, new versions also support lld.
4527             check_use_ld gold
4528             if test $? -ne 0; then
4529                 check_use_ld lld
4530             fi
4531         fi
4532         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4533         rm conftest.out
4534         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD)')
4535         if test -z "$ld_used"; then
4536             ld_used="unknown"
4537         fi
4538         AC_MSG_CHECKING([for linker that is used])
4539         AC_MSG_RESULT([$ld_used])
4540         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4541             if echo "$ld_used" | grep -q "^GNU ld"; then
4542                 AC_MSG_WARN([The default GNU linker is slow, consider using the LLD or the GNU gold linker.])
4543                 add_warning "The default GNU linker is slow, consider using the LLD or the GNU gold linker."
4544             fi
4545         fi
4546     else
4547         if test "$enable_ld" = "yes"; then
4548             AC_MSG_ERROR([--enable-ld not supported])
4549         fi
4550     fi
4552 AC_SUBST(USE_LD)
4554 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4555 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4556     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4557     bsymbolic_functions_ldflags_save=$LDFLAGS
4558     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4559     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4560 #include <stdio.h>
4561         ],[
4562 printf ("hello world\n");
4563         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4564     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4565         AC_MSG_RESULT( found )
4566     else
4567         AC_MSG_RESULT( not found )
4568     fi
4569     LDFLAGS=$bsymbolic_functions_ldflags_save
4571 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4573 LD_GC_SECTIONS=
4574 if test "$GCC" = "yes"; then
4575     for flag in "--gc-sections" "-dead_strip"; do
4576         AC_MSG_CHECKING([for $flag linker support])
4577         ldflags_save=$LDFLAGS
4578         LDFLAGS="$LDFLAGS -Wl,$flag"
4579         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4580 #include <stdio.h>
4581             ],[
4582 printf ("hello world\n");
4583             ])],[
4584             LD_GC_SECTIONS="-Wl,$flag"
4585             AC_MSG_RESULT( found )
4586             ], [
4587             AC_MSG_RESULT( not found )
4588             ])
4589         LDFLAGS=$ldflags_save
4590         if test -n "$LD_GC_SECTIONS"; then
4591             break
4592         fi
4593     done
4595 AC_SUBST(LD_GC_SECTIONS)
4597 HAVE_GSPLIT_DWARF=
4598 if test "$enable_split_debug" != no; then
4599     use_split_debug=
4600     if test -n "$ENABLE_LTO"; then
4601         true # Inherently incompatible, since no debug info is created while compiling, GCC complains.
4602     elif test "$enable_split_debug" = yes; then
4603         use_split_debug=1
4604     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4605     elif test "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4606         use_split_debug=1
4607     fi
4608     if test -n "$use_split_debug"; then
4609         AC_MSG_CHECKING([whether $CC_BASE supports -gsplit-dwarf])
4610         save_CFLAGS=$CFLAGS
4611         CFLAGS="$CFLAGS -Werror -gsplit-dwarf"
4612         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_SPLIT_DWARF=TRUE ],[])
4613         CFLAGS=$save_CFLAGS
4614         if test "$HAVE_GCC_SPLIT_DWARF" = "TRUE"; then
4615             AC_MSG_RESULT([yes])
4616         else
4617             if test "$enable_split_debug" = yes; then
4618                 AC_MSG_ERROR([no])
4619             else
4620                 AC_MSG_RESULT([no])
4621             fi
4622         fi
4623     fi
4624     if test -z "$HAVE_GCC_SPLIT_DWARF" -a "$test_split_debug" = "yes" -a -n "$use_split_debug"; then
4625         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4626         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4627     fi
4629 AC_SUBST(HAVE_GCC_SPLIT_DWARF)
4631 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4632 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4633 save_CFLAGS=$CFLAGS
4634 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4635 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4636 CFLAGS=$save_CFLAGS
4637 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4638     AC_MSG_RESULT([yes])
4639 else
4640     AC_MSG_RESULT([no])
4642 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4644 ENABLE_GDB_INDEX=
4645 if test "$enable_gdb_index" != "no"; then
4646     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4647     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4648         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4649         save_CFLAGS=$CFLAGS
4650         CFLAGS="$CFLAGS -Werror -ggnu-pubnames"
4651         have_ggnu_pubnames=
4652         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4653         if test "$have_ggnu_pubnames" != "TRUE"; then
4654             if test "$enable_gdb_index" = "yes"; then
4655                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4656             else
4657                 AC_MSG_RESULT( no )
4658             fi
4659         else
4660             AC_MSG_RESULT( yes )
4661             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4662             ldflags_save=$LDFLAGS
4663             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4664             AC_LINK_IFELSE([AC_LANG_PROGRAM([
4665 #include <stdio.h>
4666                 ],[
4667 printf ("hello world\n");
4668                 ])], ENABLE_GDB_INDEX=TRUE, [])
4669             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
4670                 AC_MSG_RESULT( yes )
4671             else
4672                 if test "$enable_gdb_index" = "yes"; then
4673                     AC_MSG_ERROR( no )
4674                 else
4675                     AC_MSG_RESULT( no )
4676                 fi
4677             fi
4678             LDFLAGS=$ldflags_save
4679         fi
4680         CFLAGS=$save_CFLAGS
4681         fi
4682     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4683         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
4684         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
4685     fi
4687 AC_SUBST(ENABLE_GDB_INDEX)
4689 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
4690     enable_sal_log=yes
4692 if test "$enable_sal_log" = yes; then
4693     ENABLE_SAL_LOG=TRUE
4695 AC_SUBST(ENABLE_SAL_LOG)
4697 dnl Check for enable symbols option
4698 dnl ===================================================================
4699 AC_MSG_CHECKING([whether to generate debug information])
4700 if test -z "$enable_symbols"; then
4701     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4702         enable_symbols=yes
4703     else
4704         enable_symbols=no
4705     fi
4707 if test "$enable_symbols" = yes; then
4708     ENABLE_SYMBOLS_FOR=all
4709     AC_MSG_RESULT([yes])
4710 elif test "$enable_symbols" = no; then
4711     ENABLE_SYMBOLS_FOR=
4712     AC_MSG_RESULT([no])
4713 else
4714     # Selective debuginfo.
4715     ENABLE_SYMBOLS_FOR="$enable_symbols"
4716     AC_MSG_RESULT([for "$enable_symbols"])
4718 AC_SUBST(ENABLE_SYMBOLS_FOR)
4719 if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then
4720     # Building on Android with full symbols: without enough memory the linker never finishes currently.
4721     AC_MSG_CHECKING([whether enough memory is available for linking])
4722     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
4723     # Check for 15GB, as Linux reports a bit less than the physical memory size.
4724     if test -n "$mem_size" -a $mem_size -lt 15728640; then
4725         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
4726     else
4727         AC_MSG_RESULT([yes])
4728     fi
4731 ENABLE_OPTIMIZED=
4732 ENABLE_OPTIMIZED_DEBUG=
4733 AC_MSG_CHECKING([whether to compile with optimization flags])
4734 if test -z "$enable_optimized"; then
4735     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4736         enable_optimized=no
4737     else
4738         enable_optimized=yes
4739     fi
4741 if test "$enable_optimized" = yes; then
4742     ENABLE_OPTIMIZED=TRUE
4743     AC_MSG_RESULT([yes])
4744 elif test "$enable_optimized" = debug; then
4745     ENABLE_OPTIMIZED_DEBUG=TRUE
4746     AC_MSG_RESULT([yes (debug)])
4747     HAVE_GCC_OG=
4748     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4749         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
4750         save_CFLAGS=$CFLAGS
4751         CFLAGS="$CFLAGS -Werror -Og"
4752         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
4753         CFLAGS=$save_CFLAGS
4754         if test "$HAVE_GCC_OG" = "TRUE"; then
4755             AC_MSG_RESULT([yes])
4756         else
4757             AC_MSG_RESULT([no])
4758         fi
4759     fi
4760     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
4761         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
4762     fi
4763 else
4764     AC_MSG_RESULT([no])
4766 AC_SUBST(ENABLE_OPTIMIZED)
4767 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
4770 # determine CPUNAME, OS, ...
4772 case "$host_os" in
4774 aix*)
4775     COM=GCC
4776     CPUNAME=POWERPC
4777     OS=AIX
4778     RTL_OS=AIX
4779     RTL_ARCH=PowerPC
4780     PLATFORMID=aix_powerpc
4781     P_SEP=:
4782     ;;
4784 cygwin*|wsl*)
4785     # Already handled
4786     ;;
4788 darwin*|macos*)
4789     COM=GCC
4790     OS=MACOSX
4791     RTL_OS=MacOSX
4792     P_SEP=:
4794     case "$host_cpu" in
4795     aarch64|arm64)
4796         if test "$enable_ios_simulator" = "yes"; then
4797             OS=iOS
4798         else
4799             CPUNAME=AARCH64
4800             RTL_ARCH=AARCH64
4801             PLATFORMID=macosx_aarch64
4802         fi
4803         ;;
4804     x86_64)
4805         if test "$enable_ios_simulator" = "yes"; then
4806             OS=iOS
4807         fi
4808         CPUNAME=X86_64
4809         RTL_ARCH=X86_64
4810         PLATFORMID=macosx_x86_64
4811         ;;
4812     *)
4813         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4814         ;;
4815     esac
4816     ;;
4818 ios*)
4819     COM=GCC
4820     OS=iOS
4821     RTL_OS=iOS
4822     P_SEP=:
4824     case "$host_cpu" in
4825     aarch64|arm64)
4826         if test "$enable_ios_simulator" = "yes"; then
4827             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
4828         fi
4829         ;;
4830     *)
4831         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4832         ;;
4833     esac
4834     CPUNAME=AARCH64
4835     RTL_ARCH=AARCH64
4836     PLATFORMID=ios_arm64
4837     ;;
4839 dragonfly*)
4840     COM=GCC
4841     OS=DRAGONFLY
4842     RTL_OS=DragonFly
4843     P_SEP=:
4845     case "$host_cpu" in
4846     i*86)
4847         CPUNAME=INTEL
4848         RTL_ARCH=x86
4849         PLATFORMID=dragonfly_x86
4850         ;;
4851     x86_64)
4852         CPUNAME=X86_64
4853         RTL_ARCH=X86_64
4854         PLATFORMID=dragonfly_x86_64
4855         ;;
4856     *)
4857         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4858         ;;
4859     esac
4860     ;;
4862 freebsd*)
4863     COM=GCC
4864     RTL_OS=FreeBSD
4865     OS=FREEBSD
4866     P_SEP=:
4868     case "$host_cpu" in
4869     aarch64)
4870         CPUNAME=AARCH64
4871         PLATFORMID=freebsd_aarch64
4872         RTL_ARCH=AARCH64
4873         ;;
4874     i*86)
4875         CPUNAME=INTEL
4876         RTL_ARCH=x86
4877         PLATFORMID=freebsd_x86
4878         ;;
4879     x86_64|amd64)
4880         CPUNAME=X86_64
4881         RTL_ARCH=X86_64
4882         PLATFORMID=freebsd_x86_64
4883         ;;
4884     powerpc64)
4885         CPUNAME=POWERPC64
4886         RTL_ARCH=PowerPC_64
4887         PLATFORMID=freebsd_powerpc64
4888         ;;
4889     powerpc|powerpcspe)
4890         CPUNAME=POWERPC
4891         RTL_ARCH=PowerPC
4892         PLATFORMID=freebsd_powerpc
4893         ;;
4894     *)
4895         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4896         ;;
4897     esac
4898     ;;
4900 haiku*)
4901     COM=GCC
4902     GUIBASE=haiku
4903     RTL_OS=Haiku
4904     OS=HAIKU
4905     P_SEP=:
4907     case "$host_cpu" in
4908     i*86)
4909         CPUNAME=INTEL
4910         RTL_ARCH=x86
4911         PLATFORMID=haiku_x86
4912         ;;
4913     x86_64|amd64)
4914         CPUNAME=X86_64
4915         RTL_ARCH=X86_64
4916         PLATFORMID=haiku_x86_64
4917         ;;
4918     *)
4919         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4920         ;;
4921     esac
4922     ;;
4924 kfreebsd*)
4925     COM=GCC
4926     OS=LINUX
4927     RTL_OS=kFreeBSD
4928     P_SEP=:
4930     case "$host_cpu" in
4932     i*86)
4933         CPUNAME=INTEL
4934         RTL_ARCH=x86
4935         PLATFORMID=kfreebsd_x86
4936         ;;
4937     x86_64)
4938         CPUNAME=X86_64
4939         RTL_ARCH=X86_64
4940         PLATFORMID=kfreebsd_x86_64
4941         ;;
4942     *)
4943         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4944         ;;
4945     esac
4946     ;;
4948 linux-gnu*|linux-musl*)
4949     COM=GCC
4950     OS=LINUX
4951     RTL_OS=Linux
4952     P_SEP=:
4954     case "$host_cpu" in
4956     aarch64)
4957         CPUNAME=AARCH64
4958         PLATFORMID=linux_aarch64
4959         RTL_ARCH=AARCH64
4960         EPM_FLAGS="-a arm64"
4961         ;;
4962     alpha)
4963         CPUNAME=AXP
4964         RTL_ARCH=ALPHA
4965         PLATFORMID=linux_alpha
4966         ;;
4967     arm*)
4968         CPUNAME=ARM
4969         EPM_FLAGS="-a arm"
4970         RTL_ARCH=ARM_EABI
4971         PLATFORMID=linux_arm_eabi
4972         case "$host_cpu" in
4973         arm*-linux)
4974             RTL_ARCH=ARM_OABI
4975             PLATFORMID=linux_arm_oabi
4976             ;;
4977         esac
4978         ;;
4979     hppa)
4980         CPUNAME=HPPA
4981         RTL_ARCH=HPPA
4982         EPM_FLAGS="-a hppa"
4983         PLATFORMID=linux_hppa
4984         ;;
4985     i*86)
4986         CPUNAME=INTEL
4987         RTL_ARCH=x86
4988         PLATFORMID=linux_x86
4989         ;;
4990     ia64)
4991         CPUNAME=IA64
4992         RTL_ARCH=IA64
4993         PLATFORMID=linux_ia64
4994         ;;
4995     mips)
4996         CPUNAME=GODSON
4997         RTL_ARCH=MIPS_EB
4998         EPM_FLAGS="-a mips"
4999         PLATFORMID=linux_mips_eb
5000         ;;
5001     mips64)
5002         CPUNAME=GODSON64
5003         RTL_ARCH=MIPS64_EB
5004         EPM_FLAGS="-a mips64"
5005         PLATFORMID=linux_mips64_eb
5006         ;;
5007     mips64el)
5008         CPUNAME=GODSON64
5009         RTL_ARCH=MIPS64_EL
5010         EPM_FLAGS="-a mips64el"
5011         PLATFORMID=linux_mips64_el
5012         ;;
5013     mipsel)
5014         CPUNAME=GODSON
5015         RTL_ARCH=MIPS_EL
5016         EPM_FLAGS="-a mipsel"
5017         PLATFORMID=linux_mips_el
5018         ;;
5019     m68k)
5020         CPUNAME=M68K
5021         RTL_ARCH=M68K
5022         PLATFORMID=linux_m68k
5023         ;;
5024     powerpc)
5025         CPUNAME=POWERPC
5026         RTL_ARCH=PowerPC
5027         PLATFORMID=linux_powerpc
5028         ;;
5029     powerpc64)
5030         CPUNAME=POWERPC64
5031         RTL_ARCH=PowerPC_64
5032         PLATFORMID=linux_powerpc64
5033         ;;
5034     powerpc64le)
5035         CPUNAME=POWERPC64
5036         RTL_ARCH=PowerPC_64_LE
5037         PLATFORMID=linux_powerpc64_le
5038         ;;
5039     sparc)
5040         CPUNAME=SPARC
5041         RTL_ARCH=SPARC
5042         PLATFORMID=linux_sparc
5043         ;;
5044     sparc64)
5045         CPUNAME=SPARC64
5046         RTL_ARCH=SPARC64
5047         PLATFORMID=linux_sparc64
5048         ;;
5049     s390)
5050         CPUNAME=S390
5051         RTL_ARCH=S390
5052         PLATFORMID=linux_s390
5053         ;;
5054     s390x)
5055         CPUNAME=S390X
5056         RTL_ARCH=S390x
5057         PLATFORMID=linux_s390x
5058         ;;
5059     x86_64)
5060         CPUNAME=X86_64
5061         RTL_ARCH=X86_64
5062         PLATFORMID=linux_x86_64
5063         ;;
5064     *)
5065         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5066         ;;
5067     esac
5068     ;;
5070 linux-android*)
5071     COM=GCC
5072     OS=ANDROID
5073     RTL_OS=Android
5074     P_SEP=:
5076     case "$host_cpu" in
5078     arm|armel)
5079         CPUNAME=ARM
5080         RTL_ARCH=ARM_EABI
5081         PLATFORMID=android_arm_eabi
5082         ;;
5083     aarch64)
5084         CPUNAME=AARCH64
5085         RTL_ARCH=AARCH64
5086         PLATFORMID=android_aarch64
5087         ;;
5088     i*86)
5089         CPUNAME=INTEL
5090         RTL_ARCH=x86
5091         PLATFORMID=android_x86
5092         ;;
5093     x86_64)
5094         CPUNAME=X86_64
5095         RTL_ARCH=X86_64
5096         PLATFORMID=android_x86_64
5097         ;;
5098     *)
5099         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5100         ;;
5101     esac
5102     ;;
5104 *netbsd*)
5105     COM=GCC
5106     OS=NETBSD
5107     RTL_OS=NetBSD
5108     P_SEP=:
5110     case "$host_cpu" in
5111     i*86)
5112         CPUNAME=INTEL
5113         RTL_ARCH=x86
5114         PLATFORMID=netbsd_x86
5115         ;;
5116     powerpc)
5117         CPUNAME=POWERPC
5118         RTL_ARCH=PowerPC
5119         PLATFORMID=netbsd_powerpc
5120         ;;
5121     sparc)
5122         CPUNAME=SPARC
5123         RTL_ARCH=SPARC
5124         PLATFORMID=netbsd_sparc
5125         ;;
5126     x86_64)
5127         CPUNAME=X86_64
5128         RTL_ARCH=X86_64
5129         PLATFORMID=netbsd_x86_64
5130         ;;
5131     *)
5132         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5133         ;;
5134     esac
5135     ;;
5137 openbsd*)
5138     COM=GCC
5139     OS=OPENBSD
5140     RTL_OS=OpenBSD
5141     P_SEP=:
5143     case "$host_cpu" in
5144     i*86)
5145         CPUNAME=INTEL
5146         RTL_ARCH=x86
5147         PLATFORMID=openbsd_x86
5148         ;;
5149     x86_64)
5150         CPUNAME=X86_64
5151         RTL_ARCH=X86_64
5152         PLATFORMID=openbsd_x86_64
5153         ;;
5154     *)
5155         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5156         ;;
5157     esac
5158     SOLARINC="$SOLARINC -I/usr/local/include"
5159     ;;
5161 solaris*)
5162     COM=GCC
5163     OS=SOLARIS
5164     RTL_OS=Solaris
5165     P_SEP=:
5167     case "$host_cpu" in
5168     i*86)
5169         CPUNAME=INTEL
5170         RTL_ARCH=x86
5171         PLATFORMID=solaris_x86
5172         ;;
5173     sparc)
5174         CPUNAME=SPARC
5175         RTL_ARCH=SPARC
5176         PLATFORMID=solaris_sparc
5177         ;;
5178     sparc64)
5179         CPUNAME=SPARC64
5180         RTL_ARCH=SPARC64
5181         PLATFORMID=solaris_sparc64
5182         ;;
5183     *)
5184         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5185         ;;
5186     esac
5187     SOLARINC="$SOLARINC -I/usr/local/include"
5188     ;;
5190 emscripten*)
5191     COM=GCC
5192     OS=EMSCRIPTEN
5193     RTL_OS=Emscripten
5194     P_SEP=:
5196     case "$host_cpu" in
5197     wasm32|wasm64)
5198         ;;
5199     *)
5200         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5201         ;;
5202     esac
5203     CPUNAME=INTEL
5204     RTL_ARCH=x86
5205     PLATFORMID=linux_x86
5206     ;;
5209     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5210     ;;
5211 esac
5213 if test "$with_x" = "no"; then
5214     AC_MSG_ERROR([Use --disable-gui instead. How can we get rid of this option? No idea where it comes from.])
5217 DISABLE_GUI=""
5218 if test "$enable_gui" = "no"; then
5219     if test "$using_x11" != yes; then
5220         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5221     fi
5222     USING_X11=
5223     DISABLE_GUI=TRUE
5224 else
5225     AC_DEFINE(HAVE_FEATURE_UI)
5227 AC_SUBST(DISABLE_GUI)
5229 if test "$using_x11" = yes; then
5230     if test "$USING_X11" = TRUE; then
5231         AC_DEFINE(USING_X11)
5232     else
5233         disable_x11_tests
5234     fi
5235 else
5236     if test "$USING_X11" = TRUE; then
5237         AC_MSG_ERROR([Platform doesn't support X11 (\$using_x11), but \$USING_X11 is set!])
5238     fi
5241 WORKDIR="${BUILDDIR}/workdir"
5242 INSTDIR="${BUILDDIR}/instdir"
5243 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5244 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5245 SOLARINC="-I$SRC_ROOT/include $SOLARINC"
5246 AC_SUBST(COM)
5247 AC_SUBST(CPUNAME)
5248 AC_SUBST(RTL_OS)
5249 AC_SUBST(RTL_ARCH)
5250 AC_SUBST(EPM_FLAGS)
5251 AC_SUBST(USING_X11)
5252 AC_SUBST([INSTDIR])
5253 AC_SUBST([INSTROOT])
5254 AC_SUBST([INSTROOTBASE])
5255 AC_SUBST(OS)
5256 AC_SUBST(P_SEP)
5257 AC_SUBST(WORKDIR)
5258 AC_SUBST(PLATFORMID)
5259 AC_SUBST(WINDOWS_X64)
5260 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5262 if test "$OS" = WNT -a "$COM" = MSC; then
5263     case "$CPUNAME" in
5264     INTEL) CPPU_ENV=msci ;;
5265     X86_64) CPPU_ENV=mscx ;;
5266     AARCH64) CPPU_ENV=msca ;;
5267     *)
5268         AC_MSG_ERROR([Unknown \$CPUNAME '$CPUNAME' for $OS / $COM"])
5269         ;;
5270     esac
5271 else
5272     CPPU_ENV=gcc3
5274 AC_SUBST(CPPU_ENV)
5276 dnl ===================================================================
5277 dnl Test which package format to use
5278 dnl ===================================================================
5279 AC_MSG_CHECKING([which package format to use])
5280 if test -n "$with_package_format" -a "$with_package_format" != no; then
5281     for i in $with_package_format; do
5282         case "$i" in
5283         aix | bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5284             ;;
5285         *)
5286             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5287 aix - AIX software distribution
5288 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5289 deb - Debian software distribution
5290 pkg - Solaris software distribution
5291 rpm - RedHat software distribution
5293 LibreOffice additionally supports:
5294 archive - .tar.gz or .zip
5295 dmg - macOS .dmg
5296 installed - installation tree
5297 msi - Windows .msi
5298         ])
5299             ;;
5300         esac
5301     done
5302     # fakeroot is needed to ensure correct file ownerships/permissions
5303     # inside deb packages and tar archives created on Linux and Solaris.
5304     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5305         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5306         if test "$FAKEROOT" = "no"; then
5307             AC_MSG_ERROR(
5308                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5309         fi
5310     fi
5311     PKGFORMAT="$with_package_format"
5312     AC_MSG_RESULT([$PKGFORMAT])
5313 else
5314     PKGFORMAT=
5315     AC_MSG_RESULT([none])
5317 AC_SUBST(PKGFORMAT)
5319 dnl ===================================================================
5320 dnl handle help related options
5322 dnl If you change help related options, please update README.help
5323 dnl ===================================================================
5325 ENABLE_HTMLHELP=
5326 HELP_OMINDEX_PAGE=
5327 HELP_ONLINE=
5328 WITH_HELPPACKS=
5330 AC_MSG_CHECKING([which help to build])
5331 if test -n "$with_help" -a "$with_help" != "no"; then
5332     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5333     BUILD_TYPE="$BUILD_TYPE HELP"
5334     case "$with_help" in
5335     "html")
5336         ENABLE_HTMLHELP=TRUE
5337         WITH_HELPPACKS=TRUE
5338         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5339         AC_MSG_RESULT([HTML (local)])
5340         ;;
5341     "online")
5342         ENABLE_HTMLHELP=TRUE
5343         HELP_ONLINE=TRUE
5344         AC_MSG_RESULT([HTML (online)])
5345         ;;
5346     yes)
5347         WITH_HELPPACKS=TRUE
5348         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5349         AC_MSG_RESULT([XML (local)])
5350         ;;
5351     *)
5352         AC_MSG_ERROR([Unknown --with-help=$with_help])
5353         ;;
5354     esac
5355 else
5356     AC_MSG_RESULT([no])
5359 AC_MSG_CHECKING([if we need to build the help index tooling])
5360 if test "$cross_compiling" != yes -a \( "$with_help" = yes -o "$enable_extension_integration" != no \); then
5361     BUILD_TYPE="$BUILD_TYPE HELPTOOLS"
5362     test_clucene=yes
5363     AC_MSG_RESULT([yes])
5364 else
5365     AC_MSG_RESULT([no])
5368 AC_MSG_CHECKING([whether to enable xapian-omega support for online help])
5369 if test -n "$with_omindex" -a "$with_omindex" != "no"; then
5370     if test "$HELP_ONLINE" != TRUE; then
5371         AC_MSG_ERROR([Can't build xapian-omega index without --help=online])
5372     fi
5373     case "$with_omindex" in
5374     "server")
5375         HELP_OMINDEX_PAGE=TRUE
5376         AC_MSG_RESULT([SERVER])
5377         ;;
5378     "noxap")
5379         AC_MSG_RESULT([NOXAP])
5380         ;;
5381     *)
5382         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5383         ;;
5384     esac
5385 else
5386     AC_MSG_RESULT([no])
5389 AC_MSG_CHECKING([whether to include the XML-help support])
5390 if test "$enable_xmlhelp" = yes; then
5391     BUILD_TYPE="$BUILD_TYPE XMLHELP"
5392     test_clucene=yes
5393     AC_DEFINE(HAVE_FEATURE_XMLHELP)
5394     AC_MSG_RESULT([yes])
5395 else
5396     if test "$with_help" = yes; then
5397         add_warning "Building the XML help, but LO with disabled xmlhelp support. Generated help can't be accessed from this LO build!"
5398     fi
5399     AC_MSG_RESULT([no])
5402 dnl Test whether to integrate helppacks into the product's installer
5403 AC_MSG_CHECKING([for helppack integration])
5404 if test -z "$WITH_HELPPACKS" -o "$with_helppack_integration" = no; then
5405     AC_MSG_RESULT([no integration])
5406 else
5407     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
5408     AC_MSG_RESULT([integration])
5411 AC_SUBST([ENABLE_HTMLHELP])
5412 AC_SUBST([HELP_OMINDEX_PAGE])
5413 AC_SUBST([HELP_ONLINE])
5414 # WITH_HELPPACKS is used only in configure
5416 dnl ===================================================================
5417 dnl Set up a different compiler to produce tools to run on the build
5418 dnl machine when doing cross-compilation
5419 dnl ===================================================================
5421 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5422 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5423 if test "$cross_compiling" = "yes"; then
5424     AC_MSG_CHECKING([for BUILD platform configuration])
5425     echo
5426     rm -rf CONF-FOR-BUILD config_build.mk
5427     mkdir CONF-FOR-BUILD
5428     # Here must be listed all files needed when running the configure script. In particular, also
5429     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5430     # keep them in the same order as there.
5431     (cd $SRC_ROOT && tar cf - \
5432         config.guess \
5433         bin/get_config_variables \
5434         solenv/bin/getcompver.awk \
5435         solenv/inc/langlist.mk \
5436         download.lst \
5437         config_host.mk.in \
5438         config_host_lang.mk.in \
5439         Makefile.in \
5440         lo.xcent.in \
5441         bin/bffvalidator.sh.in \
5442         bin/odfvalidator.sh.in \
5443         bin/officeotron.sh.in \
5444         hardened_runtime.xcent.in \
5445         instsetoo_native/util/openoffice.lst.in \
5446         config_host/*.in \
5447         sysui/desktop/macosx/Info.plist.in \
5448         .vscode/vs-code-template.code-workspace.in \
5449         ) \
5450     | (cd CONF-FOR-BUILD && tar xf -)
5451     cp configure CONF-FOR-BUILD
5452     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5453     (
5454     unset COM USING_X11 OS CPUNAME
5455     unset CC CXX SYSBASE CFLAGS
5456     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5457     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5458     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5459     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5460     if test -n "$CC_FOR_BUILD"; then
5461         export CC="$CC_FOR_BUILD"
5462         CC_BASE=`first_arg_basename "$CC"`
5463     fi
5464     if test -n "$CXX_FOR_BUILD"; then
5465         export CXX="$CXX_FOR_BUILD"
5466         CXX_BASE=`first_arg_basename "$CXX"`
5467     fi
5468     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5469     cd CONF-FOR-BUILD
5471     # Handle host configuration, which affects the cross-toolset too
5472     sub_conf_opts=""
5473     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5474     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5475     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5476     if test -n "$ENABLE_JAVA"; then
5477         case "$_os" in
5478         iOS) sub_conf_opts="$sub_conf_opts --without-java" ;; # force it off, like it used to be
5479         Android)
5480             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5481             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5482             ;;
5483         *)
5484             if test -z "$with_jdk_home"; then
5485                 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.])
5486             fi
5487             ;;
5488         esac
5489     else
5490         sub_conf_opts="$sub_conf_opts --without-java"
5491     fi
5492     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5493     test "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" && sub_conf_opts="$sub_conf_opts --with-system-icu"
5494     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no --disable-database-connectivity"
5495     test -n "$with_help" -a "$with_help" != "no" && sub_conf_opts="$sub_conf_opts --with-help=$with_help"
5496     test "$enable_extensions" = yes || sub_conf_opts="$sub_conf_opts --disable-extensions"
5497     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5499     # Don't bother having configure look for stuff not needed for the build platform anyway
5500     sub_conf_defaults=" \
5501         --build="$build_alias" \
5502         --disable-cairo-canvas \
5503         --disable-cups \
5504         --disable-customtarget-components \
5505         --disable-firebird-sdbc \
5506         --disable-gpgmepp \
5507         --disable-gstreamer-1-0 \
5508         --disable-gtk3 \
5509         --disable-gtk4 \
5510         --disable-mariadb-sdbc \
5511         --disable-nss \
5512         --disable-online-update \
5513         --disable-opencl \
5514         --disable-pdfimport \
5515         --disable-postgresql-sdbc \
5516         --disable-skia \
5517         --disable-xmlhelp \
5518         --enable-icecream="$enable_icecream" \
5519         --without-doxygen \
5520         --without-webdav \
5521         --with-parallelism="$with_parallelism" \
5522         --with-theme="$with_theme" \
5523         --with-tls=openssl \
5525     echo "    Running CONF-FOR-BUILD/configure" $sub_conf_defaults $sub_conf_opts $with_build_platform_configure_options --srcdir=$srcdir
5526     ./configure \
5527         $sub_conf_defaults \
5528         $sub_conf_opts \
5529         $with_build_platform_configure_options \
5530         --srcdir=$srcdir \
5531         2>&1 | sed -e 's/^/    /'
5532     if test [${PIPESTATUS[0]}] -ne 0; then
5533         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5534     fi
5536     # filter permitted build targets
5537     PERMITTED_BUILD_TARGETS="
5538         AVMEDIA
5539         BOOST
5540         CAIRO
5541         CLUCENE
5542         CURL
5543         DBCONNECTIVITY
5544         DESKTOP
5545         DYNLOADING
5546         EPOXY
5547         EXPAT
5548         GLM
5549         GRAPHITE
5550         HARFBUZZ
5551         HELPTOOLS
5552         ICU
5553         LCMS2
5554         LIBJPEG_TURBO
5555         LIBLANGTAG
5556         LibO
5557         LIBFFI
5558         LIBPN
5559         LIBTIFF
5560         LIBXML2
5561         LIBXSLT
5562         MDDS
5563         NATIVE
5564         OPENSSL
5565         ORCUS
5566         PYTHON
5567         SCRIPTING
5568         ZLIB
5570     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5571     # newlined lists, to use grep as a filter
5572     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5573     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5574     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5575     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5577     cp config_host.mk ../config_build.mk
5578     cp config_host_lang.mk ../config_build_lang.mk
5579     mv config.log ../config.Build.log
5580     mkdir -p ../config_build
5581     mv config_host/*.h ../config_build
5582     test -f "$WARNINGS_FILE" && mv "$WARNINGS_FILE" "../$WARNINGS_FILE_FOR_BUILD"
5584     # all these will get a _FOR_BUILD postfix
5585     DIRECT_FOR_BUILD_SETTINGS="
5586         CC
5587         CPPU_ENV
5588         CXX
5589         ILIB
5590         JAVA_HOME
5591         JAVAIFLAGS
5592         JDK
5593         LIBO_BIN_FOLDER
5594         LIBO_LIB_FOLDER
5595         LIBO_URE_LIB_FOLDER
5596         LIBO_URE_MISC_FOLDER
5597         OS
5598         SDKDIRNAME
5599         SYSTEM_LIBXML
5600         SYSTEM_LIBXSLT
5602     # these overwrite host config with build config
5603     OVERWRITING_SETTINGS="
5604         ANT
5605         ANT_HOME
5606         ANT_LIB
5607         HSQLDB_USE_JDBC_4_1
5608         JAVA_CLASSPATH_NOT_SET
5609         JAVA_SOURCE_VER
5610         JAVA_TARGET_VER
5611         JAVACFLAGS
5612         JAVACOMPILER
5613         JAVADOC
5614         JAVADOCISGJDOC
5616     # these need some special handling
5617     EXTRA_HANDLED_SETTINGS="
5618         INSTDIR
5619         INSTROOT
5620         PATH
5621         WORKDIR
5623     OLD_PATH=$PATH
5624     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
5625     BUILD_PATH=$PATH
5626     PATH=$OLD_PATH
5628     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
5629     echo "$line" >>build-config
5631     for V in $DIRECT_FOR_BUILD_SETTINGS; do
5632         VV='$'$V
5633         VV=`eval "echo $VV"`
5634         if test -n "$VV"; then
5635             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
5636             echo "$line" >>build-config
5637         fi
5638     done
5640     for V in $OVERWRITING_SETTINGS; do
5641         VV='$'$V
5642         VV=`eval "echo $VV"`
5643         if test -n "$VV"; then
5644             line=${V}='${'${V}:-$VV'}'
5645             echo "$line" >>build-config
5646         fi
5647     done
5649     for V in INSTDIR INSTROOT WORKDIR; do
5650         VV='$'$V
5651         VV=`eval "echo $VV"`
5652         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
5653         if test -n "$VV"; then
5654             line="${V}_FOR_BUILD='$VV'"
5655             echo "$line" >>build-config
5656         fi
5657     done
5659     )
5660     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
5661     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])
5662     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
5663              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
5665     eval `cat CONF-FOR-BUILD/build-config`
5667     AC_MSG_RESULT([checking for BUILD platform configuration... done])
5669     rm -rf CONF-FOR-BUILD
5670 else
5671     OS_FOR_BUILD="$OS"
5672     CC_FOR_BUILD="$CC"
5673     CPPU_ENV_FOR_BUILD="$CPPU_ENV"
5674     CXX_FOR_BUILD="$CXX"
5675     INSTDIR_FOR_BUILD="$INSTDIR"
5676     INSTROOT_FOR_BUILD="$INSTROOT"
5677     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
5678     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
5679     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
5680     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
5681     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
5682     WORKDIR_FOR_BUILD="$WORKDIR"
5684 AC_SUBST(OS_FOR_BUILD)
5685 AC_SUBST(INSTDIR_FOR_BUILD)
5686 AC_SUBST(INSTROOT_FOR_BUILD)
5687 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
5688 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
5689 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
5690 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
5691 AC_SUBST(SDKDIRNAME_FOR_BUILD)
5692 AC_SUBST(WORKDIR_FOR_BUILD)
5693 AC_SUBST(CC_FOR_BUILD)
5694 AC_SUBST(CXX_FOR_BUILD)
5695 AC_SUBST(CPPU_ENV_FOR_BUILD)
5697 dnl ===================================================================
5698 dnl Check for syslog header
5699 dnl ===================================================================
5700 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
5702 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
5703 dnl ===================================================================
5704 AC_MSG_CHECKING([whether to turn warnings to errors])
5705 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
5706     ENABLE_WERROR="TRUE"
5707     PYTHONWARNINGS="error"
5708     AC_MSG_RESULT([yes])
5709 else
5710     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
5711         ENABLE_WERROR="TRUE"
5712         PYTHONWARNINGS="error"
5713         AC_MSG_RESULT([yes])
5714     else
5715         AC_MSG_RESULT([no])
5716     fi
5718 AC_SUBST(ENABLE_WERROR)
5719 AC_SUBST(PYTHONWARNINGS)
5721 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
5722 dnl ===================================================================
5723 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
5724 if test -z "$enable_assert_always_abort"; then
5725    if test "$ENABLE_DEBUG" = TRUE; then
5726        enable_assert_always_abort=yes
5727    else
5728        enable_assert_always_abort=no
5729    fi
5731 if test "$enable_assert_always_abort" = "yes"; then
5732     ASSERT_ALWAYS_ABORT="TRUE"
5733     AC_MSG_RESULT([yes])
5734 else
5735     ASSERT_ALWAYS_ABORT="FALSE"
5736     AC_MSG_RESULT([no])
5738 AC_SUBST(ASSERT_ALWAYS_ABORT)
5740 # Determine whether to use ooenv for the instdir installation
5741 # ===================================================================
5742 if test $_os != "WINNT" -a $_os != "Darwin"; then
5743     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
5744     if test -z "$enable_ooenv"; then
5745         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5746             enable_ooenv=yes
5747         else
5748             enable_ooenv=no
5749         fi
5750     fi
5751     if test "$enable_ooenv" = "no"; then
5752         AC_MSG_RESULT([no])
5753     else
5754         ENABLE_OOENV="TRUE"
5755         AC_MSG_RESULT([yes])
5756     fi
5758 AC_SUBST(ENABLE_OOENV)
5760 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
5761     if test "$enable_qt5" = "no"; then
5762         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
5763     else
5764         enable_qt5=yes
5765     fi
5768 dnl ===================================================================
5769 dnl check for cups support
5770 dnl ===================================================================
5772 AC_MSG_CHECKING([whether to enable CUPS support])
5773 if test "$test_cups" = yes -a "$enable_cups" != no; then
5774     ENABLE_CUPS=TRUE
5775     AC_MSG_RESULT([yes])
5777     AC_MSG_CHECKING([whether cups support is present])
5778     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
5779     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
5780     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
5781         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
5782     fi
5783 else
5784     AC_MSG_RESULT([no])
5787 AC_SUBST(ENABLE_CUPS)
5789 libo_CHECK_SYSTEM_MODULE([fontconfig],[FONTCONFIG],[fontconfig >= 2.4.1],,,TRUE)
5791 dnl whether to find & fetch external tarballs?
5792 dnl ===================================================================
5793 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
5794    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
5795        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
5796    else
5797        TARFILE_LOCATION="$LODE_HOME/ext_tar"
5798    fi
5800 if test -z "$TARFILE_LOCATION"; then
5801     if test -d "$SRC_ROOT/src" ; then
5802         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
5803         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
5804     fi
5805     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
5806 else
5807     AbsolutePath "$TARFILE_LOCATION"
5808     PathFormat "${absolute_path}"
5809     TARFILE_LOCATION="${formatted_path}"
5811 AC_SUBST(TARFILE_LOCATION)
5813 AC_MSG_CHECKING([whether we want to fetch tarballs])
5814 if test "$enable_fetch_external" != "no"; then
5815     if test "$with_all_tarballs" = "yes"; then
5816         AC_MSG_RESULT([yes, all of them])
5817         DO_FETCH_TARBALLS="ALL"
5818     else
5819         AC_MSG_RESULT([yes, if we use them])
5820         DO_FETCH_TARBALLS="TRUE"
5821     fi
5822 else
5823     AC_MSG_RESULT([no])
5824     DO_FETCH_TARBALLS=
5826 AC_SUBST(DO_FETCH_TARBALLS)
5828 dnl Test whether to include MySpell dictionaries
5829 dnl ===================================================================
5830 AC_MSG_CHECKING([whether to include MySpell dictionaries])
5831 if test "$with_myspell_dicts" = "yes"; then
5832     AC_MSG_RESULT([yes])
5833     WITH_MYSPELL_DICTS=TRUE
5834     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
5835     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
5836 else
5837     AC_MSG_RESULT([no])
5838     WITH_MYSPELL_DICTS=
5840 AC_SUBST(WITH_MYSPELL_DICTS)
5842 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
5843 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
5844     if test "$with_system_dicts" = yes; then
5845         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
5846     fi
5847     with_system_dicts=no
5850 AC_MSG_CHECKING([whether to use dicts from external paths])
5851 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
5852     AC_MSG_RESULT([yes])
5853     SYSTEM_DICTS=TRUE
5854     AC_MSG_CHECKING([for spelling dictionary directory])
5855     if test -n "$with_external_dict_dir"; then
5856         DICT_SYSTEM_DIR=file://$with_external_dict_dir
5857     else
5858         DICT_SYSTEM_DIR=file:///usr/share/hunspell
5859         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
5860             DICT_SYSTEM_DIR=file:///usr/share/myspell
5861         fi
5862     fi
5863     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
5864     AC_MSG_CHECKING([for hyphenation patterns directory])
5865     if test -n "$with_external_hyph_dir"; then
5866         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
5867     else
5868         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
5869     fi
5870     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
5871     AC_MSG_CHECKING([for thesaurus directory])
5872     if test -n "$with_external_thes_dir"; then
5873         THES_SYSTEM_DIR=file://$with_external_thes_dir
5874     else
5875         THES_SYSTEM_DIR=file:///usr/share/mythes
5876     fi
5877     AC_MSG_RESULT([$THES_SYSTEM_DIR])
5878 else
5879     AC_MSG_RESULT([no])
5880     SYSTEM_DICTS=
5882 AC_SUBST(SYSTEM_DICTS)
5883 AC_SUBST(DICT_SYSTEM_DIR)
5884 AC_SUBST(HYPH_SYSTEM_DIR)
5885 AC_SUBST(THES_SYSTEM_DIR)
5887 dnl ===================================================================
5888 dnl Precompiled headers.
5889 ENABLE_PCH=""
5890 AC_MSG_CHECKING([whether to enable pch feature])
5891 if test -z "$enable_pch"; then
5892     if test "$_os" = "WINNT"; then
5893         # Enabled by default on Windows.
5894         enable_pch=yes
5895         # never use sccache on auto-enabled PCH builds, except if requested explicitely
5896         if test -z "$enable_ccache" -a "$SCCACHE"; then
5897             CCACHE=""
5898         fi
5899     else
5900         enable_pch=no
5901     fi
5903 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
5904     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
5906 if test "$enable_pch" = "system"; then
5907     ENABLE_PCH="1"
5908     AC_MSG_RESULT([yes (system headers)])
5909 elif test "$enable_pch" = "base"; then
5910     ENABLE_PCH="2"
5911     AC_MSG_RESULT([yes (system and base headers)])
5912 elif test "$enable_pch" = "normal"; then
5913     ENABLE_PCH="3"
5914     AC_MSG_RESULT([yes (normal)])
5915 elif test "$enable_pch" = "full"; then
5916     ENABLE_PCH="4"
5917     AC_MSG_RESULT([yes (full)])
5918 elif test "$enable_pch" = "yes"; then
5919     # Pick a suitable default.
5920     if test "$GCC" = "yes"; then
5921         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
5922         # while making the PCHs larger and rebuilds more likely.
5923         ENABLE_PCH="2"
5924         AC_MSG_RESULT([yes (system and base headers)])
5925     else
5926         # With MSVC the highest level makes a significant difference,
5927         # and it was the default when there used to be no PCH levels.
5928         ENABLE_PCH="4"
5929         AC_MSG_RESULT([yes (full)])
5930     fi
5931 elif test "$enable_pch" = "no"; then
5932     AC_MSG_RESULT([no])
5933 else
5934     AC_MSG_ERROR([Unknown value for --enable-pch])
5936 AC_SUBST(ENABLE_PCH)
5937 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
5938 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
5939     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
5940     if test "$CCACHE_BIN" != "not found"; then
5941         AC_MSG_CHECKING([ccache version])
5942         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
5943         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
5944         AC_MSG_RESULT([$CCACHE_VERSION])
5945         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
5946         if test "$CCACHE_NUMVER" -gt "030701"; then
5947             AC_MSG_RESULT([yes])
5948         else
5949             AC_MSG_RESULT([no (not newer than 3.7.1)])
5950             CCACHE_DEPEND_MODE=
5951         fi
5952     fi
5955 PCH_INSTANTIATE_TEMPLATES=
5956 if test -n "$ENABLE_PCH"; then
5957     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
5958     save_CFLAGS=$CFLAGS
5959     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
5960     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
5961     CFLAGS=$save_CFLAGS
5962     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
5963         AC_MSG_RESULT(yes)
5964     else
5965         AC_MSG_RESULT(no)
5966     fi
5968 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
5970 BUILDING_PCH_WITH_OBJ=
5971 if test -n "$ENABLE_PCH"; then
5972     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
5973     save_CFLAGS=$CFLAGS
5974     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
5975     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
5976     CFLAGS=$save_CFLAGS
5977     if test -n "$BUILDING_PCH_WITH_OBJ"; then
5978         AC_MSG_RESULT(yes)
5979     else
5980         AC_MSG_RESULT(no)
5981     fi
5983 AC_SUBST(BUILDING_PCH_WITH_OBJ)
5985 PCH_CODEGEN=
5986 PCH_NO_CODEGEN=
5987 fpch_prefix=
5988 if test "$COM" = MSC; then
5989     fpch_prefix="-Xclang "
5991 if test -n "$BUILDING_PCH_WITH_OBJ"; then
5992     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-codegen])
5993     save_CFLAGS=$CFLAGS
5994     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-codegen"
5995     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
5996         [
5997         PCH_CODEGEN="${fpch_prefix}-fpch-codegen"
5998         PCH_NO_CODEGEN="${fpch_prefix}-fno-pch-codegen"
5999         ],[])
6000     CFLAGS=$save_CFLAGS
6001     if test -n "$PCH_CODEGEN"; then
6002         AC_MSG_RESULT(yes)
6003     else
6004         AC_MSG_RESULT(no)
6005     fi
6007 AC_SUBST(PCH_CODEGEN)
6008 AC_SUBST(PCH_NO_CODEGEN)
6009 PCH_DEBUGINFO=
6010 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6011     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-debuginfo])
6012     save_CFLAGS=$CFLAGS
6013     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-debuginfo"
6014     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="${fpch_prefix}-fpch-debuginfo" ],[])
6015     CFLAGS=$save_CFLAGS
6016     if test -n "$PCH_DEBUGINFO"; then
6017         AC_MSG_RESULT(yes)
6018     else
6019         AC_MSG_RESULT(no)
6020     fi
6022 AC_SUBST(PCH_DEBUGINFO)
6024 TAB=`printf '\t'`
6026 AC_MSG_CHECKING([the GNU Make version])
6027 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
6028 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6029 if test "$_make_longver" -ge "038200"; then
6030     AC_MSG_RESULT([$GNUMAKE $_make_version])
6032 elif test "$_make_longver" -ge "038100"; then
6033     if test "$build_os" = "cygwin"; then
6034         AC_MSG_ERROR([failed ($GNUMAKE version >= 3.82 needed])
6035     fi
6036     AC_MSG_RESULT([$GNUMAKE $_make_version])
6038     dnl ===================================================================
6039     dnl Search all the common names for sha1sum
6040     dnl ===================================================================
6041     AC_CHECK_PROGS(SHA1SUM, sha1sum sha1 shasum openssl)
6042     if test -z "$SHA1SUM"; then
6043         AC_MSG_ERROR([install the appropriate SHA-1 checksumming program for this OS])
6044     elif test "$SHA1SUM" = "openssl"; then
6045         SHA1SUM="openssl sha1"
6046     fi
6047     AC_MSG_CHECKING([for GNU Make bug 20033])
6048     TESTGMAKEBUG20033=`mktemp -d tmp.XXXXXX`
6049     $SED -e "s/<TAB>/$TAB/g" > $TESTGMAKEBUG20033/Makefile << EOF
6050 A := \$(wildcard *.a)
6052 .PHONY: all
6053 all: \$(A:.a=.b)
6054 <TAB>@echo survived bug20033.
6056 .PHONY: setup
6057 setup:
6058 <TAB>@touch 1.a 2.a 3.a 4.a 5.a 6.a
6060 define d1
6061 @echo lala \$(1)
6062 @sleep 1
6063 endef
6065 define d2
6066 @echo tyty \$(1)
6067 @sleep 1
6068 endef
6070 %.b : %.a
6071 <TAB>\$(eval CHECKSUM := \$(word 1,\$(shell cat \$^ | $SHA1SUM))) \$(if \$(wildcard \$(CACHEDIR)/\$(CHECKSUM)),\
6072 <TAB>\$(call d1,\$(CHECKSUM)),\
6073 <TAB>\$(call d2,\$(CHECKSUM)))
6075     if test -z "`(cd $TESTGMAKEBUG20033 && $GNUMAKE setup && $GNUMAKE -j)|grep survived`"; then
6076         no_parallelism_make="YES"
6077         AC_MSG_RESULT([yes, disable parallelism])
6078     else
6079         AC_MSG_RESULT([no, keep parallelism enabled])
6080     fi
6081     rm -rf $TESTGMAKEBUG20033
6082 else
6083     AC_MSG_ERROR([failed ($GNUMAKE version >= 3.81 needed])
6086 # find if gnumake support file function
6087 AC_MSG_CHECKING([whether GNU Make supports the 'file' function])
6088 TESTGMAKEFILEFUNC="`mktemp -d -t tst.XXXXXX`"
6089 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6090     TESTGMAKEFILEFUNC=`cygpath -m $TESTGMAKEFILEFUNC`
6092 $SED -e "s/<TAB>/$TAB/" > $TESTGMAKEFILEFUNC/Makefile << EOF
6093 \$(file >test.txt,Success )
6095 .PHONY: all
6096 all:
6097 <TAB>@cat test.txt
6100 $GNUMAKE -C $TESTGMAKEFILEFUNC 2>/dev/null 1>&2
6101 if test -f $TESTGMAKEFILEFUNC/test.txt; then
6102     HAVE_GNUMAKE_FILE_FUNC=TRUE
6103     AC_MSG_RESULT([yes])
6104 else
6105     AC_MSG_RESULT([no])
6107 rm -rf $TESTGMAKEFILEFUNC
6108 AC_SUBST(HAVE_GNUMAKE_FILE_FUNC)
6110 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6111 STALE_MAKE=
6112 if test "$_make_ver_check" = ""; then
6113    STALE_MAKE=TRUE
6116 HAVE_LD_HASH_STYLE=FALSE
6117 WITH_LINKER_HASH_STYLE=
6118 AC_MSG_CHECKING([for --hash-style gcc linker support])
6119 if test "$GCC" = "yes"; then
6120     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6121         hash_styles="gnu sysv"
6122     elif test "$with_linker_hash_style" = "no"; then
6123         hash_styles=
6124     else
6125         hash_styles="$with_linker_hash_style"
6126     fi
6128     for hash_style in $hash_styles; do
6129         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6130         hash_style_ldflags_save=$LDFLAGS
6131         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6133         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6134             [
6135 #include <stdio.h>
6136             ],[
6137 printf ("");
6138             ])],
6139             [
6140                   HAVE_LD_HASH_STYLE=TRUE
6141                   WITH_LINKER_HASH_STYLE=$hash_style
6142             ],
6143             [HAVE_LD_HASH_STYLE=FALSE],
6144             [HAVE_LD_HASH_STYLE=FALSE])
6145         LDFLAGS=$hash_style_ldflags_save
6146     done
6148     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6149         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6150     else
6151         AC_MSG_RESULT( no )
6152     fi
6153     LDFLAGS=$hash_style_ldflags_save
6154 else
6155     AC_MSG_RESULT( no )
6157 AC_SUBST(HAVE_LD_HASH_STYLE)
6158 AC_SUBST(WITH_LINKER_HASH_STYLE)
6160 dnl ===================================================================
6161 dnl Check whether there's a Perl version available.
6162 dnl ===================================================================
6163 if test -z "$with_perl_home"; then
6164     AC_PATH_PROG(PERL, perl)
6165 else
6166     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6167     _perl_path="$with_perl_home/bin/perl"
6168     if test -x "$_perl_path"; then
6169         PERL=$_perl_path
6170     else
6171         AC_MSG_ERROR([$_perl_path not found])
6172     fi
6175 dnl ===================================================================
6176 dnl Testing for Perl version 5 or greater.
6177 dnl $] is the Perl version variable, it is returned as an integer
6178 dnl ===================================================================
6179 if test "$PERL"; then
6180     AC_MSG_CHECKING([the Perl version])
6181     ${PERL} -e "exit($]);"
6182     _perl_version=$?
6183     if test "$_perl_version" -lt 5; then
6184         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6185     fi
6186     AC_MSG_RESULT([Perl $_perl_version])
6187 else
6188     AC_MSG_ERROR([Perl not found, install Perl 5])
6191 dnl ===================================================================
6192 dnl Testing for required Perl modules
6193 dnl ===================================================================
6195 AC_MSG_CHECKING([for required Perl modules])
6196 perl_use_string="use Cwd ; use Digest::MD5"
6197 if test "$_os" = "WINNT"; then
6198     if test -n "$PKGFORMAT"; then
6199         for i in $PKGFORMAT; do
6200             case "$i" in
6201             msi)
6202                 # for getting fonts versions to use in MSI
6203                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6204                 ;;
6205             esac
6206         done
6207     fi
6209 if test "$with_system_hsqldb" = "yes"; then
6210     perl_use_string="$perl_use_string ; use Archive::Zip"
6212 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6213     # OpenSSL needs that to build
6214     perl_use_string="$perl_use_string ; use FindBin"
6216 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6217     AC_MSG_RESULT([all modules found])
6218 else
6219     AC_MSG_RESULT([failed to find some modules])
6220     # Find out which modules are missing.
6221     for i in $perl_use_string; do
6222         if test "$i" != "use" -a "$i" != ";"; then
6223             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6224                 missing_perl_modules="$missing_perl_modules $i"
6225             fi
6226         fi
6227     done
6228     AC_MSG_ERROR([
6229     The missing Perl modules are: $missing_perl_modules
6230     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6233 dnl ===================================================================
6234 dnl Check for pkg-config
6235 dnl ===================================================================
6236 if test "$_os" != "WINNT"; then
6237     PKG_PROG_PKG_CONFIG
6240 if test "$_os" != "WINNT"; then
6242     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6243     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6244     # explicitly. Or put /path/to/compiler in PATH yourself.
6246     # Use wrappers for LTO
6247     if test "$ENABLE_LTO" = "TRUE" -a "$COM_IS_CLANG" != "TRUE"; then
6248         AC_CHECK_TOOL(AR,gcc-ar)
6249         AC_CHECK_TOOL(NM,gcc-nm)
6250         AC_CHECK_TOOL(RANLIB,gcc-ranlib)
6251     else
6252         AC_CHECK_TOOL(AR,ar)
6253         AC_CHECK_TOOL(NM,nm)
6254         AC_CHECK_TOOL(RANLIB,ranlib)
6255     fi
6256     AC_CHECK_TOOL(OBJDUMP,objdump)
6257     AC_CHECK_TOOL(READELF,readelf)
6258     AC_CHECK_TOOL(STRIP,strip)
6260 AC_SUBST(AR)
6261 AC_SUBST(LD)
6262 AC_SUBST(NM)
6263 AC_SUBST(OBJDUMP)
6264 AC_SUBST(PKG_CONFIG)
6265 AC_SUBST(PKG_CONFIG_PATH)
6266 AC_SUBST(PKG_CONFIG_LIBDIR)
6267 AC_SUBST(RANLIB)
6268 AC_SUBST(READELF)
6269 AC_SUBST(STRIP)
6271 dnl ===================================================================
6272 dnl pkg-config checks on macOS
6273 dnl ===================================================================
6275 if test $_os = Darwin; then
6276     AC_MSG_CHECKING([for bogus pkg-config])
6277     if test -n "$PKG_CONFIG"; then
6278         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6279             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6280         else
6281             if test "$enable_bogus_pkg_config" = "yes"; then
6282                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6283             else
6284                 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.])
6285             fi
6286         fi
6287     else
6288         AC_MSG_RESULT([no, good])
6289     fi
6292 find_csc()
6294     # Return value: $csctest
6296     unset csctest
6298     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client/InstallPath"
6299     if test -n "$regvalue"; then
6300         csctest=$regvalue
6301         return
6302     fi
6305 find_al()
6307     # Return value: $altest
6309     unset altest
6311     # We need this check to detect 4.6.1 or above.
6312     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6313         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools/InstallationFolder"
6314         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6315             altest=$regvalue
6316             return
6317         fi
6318     done
6320     for x in `ls /proc/registry32/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft\ SDKs/Windows`; do
6321         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools/InstallationFolder"
6322         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6323             altest=$regvalue
6324             return
6325         fi
6326     done
6329 find_dotnetsdk46()
6331     unset frametest
6333     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6; do
6334         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder"
6335         if test -n "$regvalue"; then
6336             frametest=$regvalue
6337             return
6338         fi
6339     done
6342 find_winsdk_version()
6344     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6345     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6347     unset winsdktest winsdkbinsubdir winsdklibsubdir
6349     case "$1" in
6350     8.0|8.0A)
6351         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
6352         if test -n "$regvalue"; then
6353             winsdktest=$regvalue
6354             winsdklibsubdir=win8
6355             return
6356         fi
6357         ;;
6358     8.1|8.1A)
6359         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot81"
6360         if test -n "$regvalue"; then
6361             winsdktest=$regvalue
6362             winsdklibsubdir=winv6.3
6363             return
6364         fi
6365         ;;
6366     10.0)
6367         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/InstallationFolder"
6368         if test -n "$regvalue"; then
6369             winsdktest=$regvalue
6370             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion"
6371             if test -n "$regvalue"; then
6372                 winsdkbinsubdir="$regvalue".0
6373                 winsdklibsubdir=$winsdkbinsubdir
6374                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6375                 local tmppath_unix=$(cygpath -u "$tmppath")
6376                 # test exist the SDK path
6377                 if test -d "$tmppath_unix"; then
6378                    # when path is convertible to a short path then path is okay
6379                    cygpath -d "$tmppath" >/dev/null 2>&1
6380                    if test $? -ne 0; then
6381                       AC_MSG_ERROR([Windows SDK doesn't have a 8.3 name, see NtfsDisable8dot3NameCreation])
6382                    fi
6383                 else
6384                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6385                 fi
6386             fi
6387             return
6388         fi
6389         ;;
6390     esac
6393 find_winsdk()
6395     # Return value: From find_winsdk_version
6397     unset winsdktest
6399     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6400         find_winsdk_version $ver
6401         if test -n "$winsdktest"; then
6402             return
6403         fi
6404     done
6407 find_msms()
6409     # Return value: $msmdir
6411     AC_MSG_CHECKING([for MSVC merge modules directory])
6412     local my_msm_files
6413     local my_msm_dir
6415     dnl Order my_msm_files in increasing order. Then check the directories returned
6416     dnl by ls in an inner loop; assuming they are also ordered in increasing order,
6417     dnl the result will be the highest MSM version found in the highest directory.
6419     case "$VCVER" in
6420         16.0 | 17.0)
6421         my_msm_files="Microsoft_VC141_CRT_x86.msm Microsoft_VC142_CRT_x86.msm ${my_msm_files}"
6422         ;;
6423     esac
6424     for f in $my_msm_files; do
6425         echo "$as_me:$LINENO: searching for $f" >&5
6426     done
6428     msmdir=
6429     case "$VCVER" in
6430     16.0 | 17.0)
6431         for f in ${my_msm_files}; do
6432             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6433                 my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6434                 echo "$as_me:$LINENO: looking for $my_msm_dir${f}])" >&5
6435                 if test -e "$my_msm_dir${f}"; then
6436                     msmdir=$my_msm_dir
6437                 fi
6438             done
6439         done
6440         ;;
6441     esac
6443     if test -n "$msmdir"; then
6444         msmdir=`cygpath -m "$msmdir"`
6445         AC_MSG_RESULT([$msmdir])
6446     else
6447         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6448             AC_MSG_FAILURE([not found])
6449         else
6450             AC_MSG_WARN([not found (check config.log)])
6451             add_warning "MSM none of ${my_msm_files} found"
6452         fi
6453     fi
6456 find_msvc_x64_dlls()
6458     # Return value: $msvcdllpath, $msvcdlls
6460     AC_MSG_CHECKING([for MSVC x64 DLL path])
6462     dnl Order crtver in increasing order. Then check the directories returned by
6463     dnl ls in an inner loop; assuming they are also ordered in increasing order,
6464     dnl the result will be the highest CRT version found in the highest directory.
6466     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6467     case "$VCVER" in
6468     16.0 | 17.0)
6469         for crtver in 141 142 143; do
6470             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6471                 echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT" >&5
6472                 if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"; then
6473                     msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"
6474                 fi
6475             done
6476         done
6477         ;;
6478     esac
6479     AC_MSG_RESULT([$msvcdllpath])
6480     AC_MSG_CHECKING([for MSVC x64 DLLs])
6481     msvcdlls="msvcp140.dll vcruntime140.dll"
6482     for dll in $msvcdlls; do
6483         if ! test -f "$msvcdllpath/$dll"; then
6484             AC_MSG_FAILURE([missing $dll])
6485         fi
6486     done
6487     AC_MSG_RESULT([found all ($msvcdlls)])
6490 dnl =========================================
6491 dnl Check for the Windows  SDK.
6492 dnl =========================================
6493 if test "$_os" = "WINNT"; then
6494     AC_MSG_CHECKING([for Windows SDK])
6495     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6496         find_winsdk
6497         WINDOWS_SDK_HOME=$winsdktest
6499         # normalize if found
6500         if test -n "$WINDOWS_SDK_HOME"; then
6501             WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
6502             WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
6503         fi
6505         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6506     fi
6508     if test -n "$WINDOWS_SDK_HOME"; then
6509         # Remove a possible trailing backslash
6510         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6512         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6513              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6514              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6515             have_windows_sdk_headers=yes
6516         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6517              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6518              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6519             have_windows_sdk_headers=yes
6520         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6521              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6522              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6523             have_windows_sdk_headers=yes
6524         else
6525             have_windows_sdk_headers=no
6526         fi
6528         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6529             have_windows_sdk_libs=yes
6530         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6531             have_windows_sdk_libs=yes
6532         else
6533             have_windows_sdk_libs=no
6534         fi
6536         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6537             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6538 the  Windows SDK are installed.])
6539         fi
6540     fi
6542     if test -z "$WINDOWS_SDK_HOME"; then
6543         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6544     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6545         WINDOWS_SDK_VERSION=80
6546         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6547     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6548         WINDOWS_SDK_VERSION=81
6549         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6550     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6551         WINDOWS_SDK_VERSION=10
6552         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6553     else
6554         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6555     fi
6556     PathFormat "$WINDOWS_SDK_HOME"
6557     WINDOWS_SDK_HOME="$formatted_path"
6558     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6559     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6560         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6561         if test -d "$WINDOWS_SDK_HOME/include/um"; then
6562             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6563         elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then
6564             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6565         fi
6566     fi
6568     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6569     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6570     dnl but not in v8.0), so allow this to be overridden with a
6571     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6572     dnl and configuration error if no WiLangId.vbs is found would arguably be
6573     dnl better, but I do not know under which conditions exactly it is needed by
6574     dnl msiglobal.pm:
6575     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6576         WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6577         WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6578         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6579             WINDOWS_SDK_WILANGID="${WINDOWS_SDK_HOME}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6580             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6581         fi
6582         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6583             WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6584             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6585         fi
6586         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6587             WINDOWS_SDK_WILANGID=$(cygpath -sm "C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs")
6588             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6589         fi
6590     fi
6591     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6592         if test -n "$with_package_format" -a "$with_package_format" != no; then
6593             for i in "$with_package_format"; do
6594                 if test "$i" = "msi"; then
6595                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6596                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6597                     fi
6598                 fi
6599             done
6600         fi
6601     fi
6603 AC_SUBST(WINDOWS_SDK_HOME)
6604 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6605 AC_SUBST(WINDOWS_SDK_VERSION)
6606 AC_SUBST(WINDOWS_SDK_WILANGID)
6608 if test "$build_os" = "cygwin"; then
6609     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6610     dnl dir, it also determines that dir's path w/o an arch segment if any,
6611     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6612     AC_MSG_CHECKING([for midl.exe])
6614     find_winsdk
6615     if test -n "$winsdkbinsubdir" \
6616         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6617     then
6618         MIDL_PATH=$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6619         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin/$winsdkbinsubdir
6620     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6621         MIDL_PATH=$winsdktest/Bin/$WIN_BUILD_ARCH
6622         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6623     elif test -f "$winsdktest/Bin/midl.exe"; then
6624         MIDL_PATH=$winsdktest/Bin
6625         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6626     fi
6627     if test ! -f "$MIDL_PATH/midl.exe"; then
6628         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6629     else
6630         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6631     fi
6633     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6634     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6636     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6637          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6638          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6639          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6640     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6641          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6642          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6643          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
6644     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
6645          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
6646          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6647          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
6648     else
6649         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
6650     fi
6652     dnl Check csc.exe
6653     AC_MSG_CHECKING([for csc.exe])
6654     find_csc
6655     if test -f "$csctest/csc.exe"; then
6656         CSC_PATH="$csctest"
6657     fi
6658     if test ! -f "$CSC_PATH/csc.exe"; then
6659         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
6660     else
6661         AC_MSG_RESULT([$CSC_PATH/csc.exe])
6662     fi
6664     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
6666     dnl Check al.exe
6667     AC_MSG_CHECKING([for al.exe])
6668     find_winsdk
6669     if test -n "$winsdkbinsubdir" \
6670         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
6671     then
6672         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
6673     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/al.exe"; then
6674         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
6675     elif test -f "$winsdktest/Bin/al.exe"; then
6676         AL_PATH="$winsdktest/Bin"
6677     fi
6679     if test -z "$AL_PATH"; then
6680         find_al
6681         if test -f "$altest/bin/al.exe"; then
6682             AL_PATH="$altest/bin"
6683         elif test -f "$altest/al.exe"; then
6684             AL_PATH="$altest"
6685         fi
6686     fi
6687     if test ! -f "$AL_PATH/al.exe"; then
6688         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
6689     else
6690         AC_MSG_RESULT([$AL_PATH/al.exe])
6691     fi
6693     AL_PATH=`win_short_path_for_make "$AL_PATH"`
6695     dnl Check mscoree.lib / .NET Framework dir
6696     AC_MSG_CHECKING(.NET Framework)
6697     find_dotnetsdk46
6698     PathFormat "$frametest"
6699     frametest="$formatted_path"
6700     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6701         DOTNET_FRAMEWORK_HOME="$frametest"
6702     else
6703         find_winsdk
6704         if test -f "$winsdktest/lib/mscoree.lib" -o -f "$winsdktest/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6705             DOTNET_FRAMEWORK_HOME="$winsdktest"
6706         fi
6707     fi
6708     if test ! -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib" -a ! -f "$DOTNET_FRAMEWORK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib" -a ! -f "$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6709         AC_MSG_ERROR([mscoree.lib not found])
6710     fi
6711     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
6713     PathFormat "$MIDL_PATH"
6714     MIDL_PATH="$formatted_path"
6716     PathFormat "$AL_PATH"
6717     AL_PATH="$formatted_path"
6719     PathFormat "$DOTNET_FRAMEWORK_HOME"
6720     DOTNET_FRAMEWORK_HOME="$formatted_path"
6722     PathFormat "$CSC_PATH"
6723     CSC_PATH="$formatted_path"
6726 dnl ===================================================================
6727 dnl Testing for C++ compiler and version...
6728 dnl ===================================================================
6730 if test "$_os" != "WINNT"; then
6731     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that
6732     save_CXXFLAGS=$CXXFLAGS
6733     AC_PROG_CXX
6734     CXXFLAGS=$save_CXXFLAGS
6735     if test -z "$CXX_BASE"; then
6736         CXX_BASE=`first_arg_basename "$CXX"`
6737     fi
6740 dnl check for GNU C++ compiler version
6741 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
6742     AC_MSG_CHECKING([the GNU C++ compiler version])
6744     _gpp_version=`$CXX -dumpversion`
6745     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
6747     if test "$_gpp_majmin" -lt "700"; then
6748         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
6749     else
6750         AC_MSG_RESULT([ok (g++ $_gpp_version)])
6751     fi
6753     dnl see https://code.google.com/p/android/issues/detail?id=41770
6754         glibcxx_threads=no
6755         AC_LANG_PUSH([C++])
6756         AC_REQUIRE_CPP
6757         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
6758         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
6759             #include <bits/c++config.h>]],[[
6760             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
6761             && !defined(_GLIBCXX__PTHREADS) \
6762             && !defined(_GLIBCXX_HAS_GTHREADS)
6763             choke me
6764             #endif
6765         ]])],[AC_MSG_RESULT([yes])
6766         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
6767         AC_LANG_POP([C++])
6768         if test $glibcxx_threads = yes; then
6769             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
6770         fi
6772 AC_SUBST(BOOST_CXXFLAGS)
6775 # prefx CXX with ccache if needed
6777 if test "$CCACHE" != ""; then
6778     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
6779     AC_LANG_PUSH([C++])
6780     save_CXXFLAGS=$CXXFLAGS
6781     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
6782     # msvc does not fail on unknown options, check stdout
6783     if test "$COM" = MSC; then
6784         CXXFLAGS="$CXXFLAGS -nologo"
6785     fi
6786     save_ac_cxx_werror_flag=$ac_cxx_werror_flag
6787     ac_cxx_werror_flag=yes
6788     dnl an empty program will do, we're checking the compiler flags
6789     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
6790                       [use_ccache=yes], [use_ccache=no])
6791     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
6792         AC_MSG_RESULT([yes])
6793     else
6794         CXX="$CCACHE $CXX"
6795         CXX_BASE="ccache $CXX_BASE"
6796         AC_MSG_RESULT([no])
6797     fi
6798     CXXFLAGS=$save_CXXFLAGS
6799     ac_cxx_werror_flag=$save_ac_cxx_werror_flag
6800     AC_LANG_POP([C++])
6803 dnl ===================================================================
6804 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
6805 dnl ===================================================================
6807 if test "$_os" != "WINNT"; then
6808     AC_PROG_CXXCPP
6810     dnl Check whether there's a C pre-processor.
6811     AC_PROG_CPP
6815 dnl ===================================================================
6816 dnl Find integral type sizes and alignments
6817 dnl ===================================================================
6819 if test "$_os" != "WINNT"; then
6821     AC_CHECK_SIZEOF(long)
6822     AC_CHECK_SIZEOF(short)
6823     AC_CHECK_SIZEOF(int)
6824     AC_CHECK_SIZEOF(long long)
6825     AC_CHECK_SIZEOF(double)
6826     AC_CHECK_SIZEOF(void*)
6827     AC_CHECK_SIZEOF(size_t)
6829     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
6830     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
6831     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
6832     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
6833     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
6834     SIZEOF_SIZE_T=$ac_cv_sizeof_size_t
6836     dnl Allow build without AC_CHECK_ALIGNOF, grrr
6837     m4_pattern_allow([AC_CHECK_ALIGNOF])
6838     m4_ifdef([AC_CHECK_ALIGNOF],
6839         [
6840             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
6841             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
6842             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
6843             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
6844         ],
6845         [
6846             case "$_os-$host_cpu" in
6847             Linux-i686)
6848                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6849                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6850                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
6851                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
6852                 ;;
6853             Linux-x86_64)
6854                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6855                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6856                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
6857                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
6858                 ;;
6859             *)
6860                 if test -z "$ac_cv_alignof_short" -o \
6861                         -z "$ac_cv_alignof_int" -o \
6862                         -z "$ac_cv_alignof_long" -o \
6863                         -z "$ac_cv_alignof_double"; then
6864                    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.])
6865                 fi
6866                 ;;
6867             esac
6868         ])
6870     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
6871     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
6872     if test $ac_cv_sizeof_long -eq 8; then
6873         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
6874     elif test $ac_cv_sizeof_double -eq 8; then
6875         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
6876     else
6877         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
6878     fi
6880     dnl Check for large file support
6881     AC_SYS_LARGEFILE
6882     if test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
6883         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
6884     fi
6885     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
6886         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
6887     fi
6888 else
6889     # Hardcode for MSVC
6890     SAL_TYPES_SIZEOFSHORT=2
6891     SAL_TYPES_SIZEOFINT=4
6892     SAL_TYPES_SIZEOFLONG=4
6893     SAL_TYPES_SIZEOFLONGLONG=8
6894     if test $WIN_HOST_BITS -eq 32; then
6895         SAL_TYPES_SIZEOFPOINTER=4
6896         SIZEOF_SIZE_T=4
6897     else
6898         SAL_TYPES_SIZEOFPOINTER=8
6899         SIZEOF_SIZE_T=8
6900     fi
6901     SAL_TYPES_ALIGNMENT2=2
6902     SAL_TYPES_ALIGNMENT4=4
6903     SAL_TYPES_ALIGNMENT8=8
6904     LFS_CFLAGS=''
6906 AC_SUBST(LFS_CFLAGS)
6907 AC_SUBST(SIZEOF_SIZE_T)
6909 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
6910 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
6911 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
6912 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
6913 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
6914 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
6915 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
6916 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
6918 dnl Calc jumbo sheets (1m+ rows) depend on 64 bit tools::Long .
6919 AC_MSG_CHECKING([whether jumbo sheets are supported])
6920 if test "$_os" != "WINNT"; then
6921     if test $SAL_TYPES_SIZEOFLONG -gt 4; then
6922         AC_MSG_RESULT([yes])
6923         ENABLE_JUMBO_SHEETS=TRUE
6924         AC_DEFINE(HAVE_FEATURE_JUMBO_SHEETS)
6925     else
6926         AC_MSG_RESULT([no])
6927     fi
6928 else
6929     if test $WIN_HOST_BITS -gt 32; then
6930         # 64bit windows is special-cased for tools::Long because long is 32bit
6931         AC_MSG_RESULT([yes])
6932         ENABLE_JUMBO_SHEETS=TRUE
6933         AC_DEFINE(HAVE_FEATURE_JUMBO_SHEETS)
6934     else
6935         AC_MSG_RESULT([no])
6936     fi
6938 AC_SUBST(ENABLE_JUMBO_SHEETS)
6940 dnl ===================================================================
6941 dnl Check whether to enable runtime optimizations
6942 dnl ===================================================================
6943 ENABLE_RUNTIME_OPTIMIZATIONS=
6944 AC_MSG_CHECKING([whether to enable runtime optimizations])
6945 if test -z "$enable_runtime_optimizations"; then
6946     for i in $CC; do
6947         case $i in
6948         -fsanitize=*)
6949             enable_runtime_optimizations=no
6950             break
6951             ;;
6952         esac
6953     done
6955 if test "$enable_runtime_optimizations" != no; then
6956     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
6957     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
6958     AC_MSG_RESULT([yes])
6959 else
6960     AC_MSG_RESULT([no])
6962 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
6964 dnl ===================================================================
6965 dnl Check if valgrind headers are available
6966 dnl ===================================================================
6967 ENABLE_VALGRIND=
6968 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
6969     prev_cppflags=$CPPFLAGS
6970     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
6971     # or where does it come from?
6972     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
6973     AC_CHECK_HEADER([valgrind/valgrind.h],
6974         [ENABLE_VALGRIND=TRUE])
6975     CPPFLAGS=$prev_cppflags
6977 AC_SUBST([ENABLE_VALGRIND])
6978 if test -z "$ENABLE_VALGRIND"; then
6979     if test "$with_valgrind" = yes; then
6980         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
6981     fi
6982     VALGRIND_CFLAGS=
6984 AC_SUBST([VALGRIND_CFLAGS])
6987 dnl ===================================================================
6988 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
6989 dnl ===================================================================
6991 # We need at least the sys/sdt.h include header.
6992 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
6993 if test "$SDT_H_FOUND" = "TRUE"; then
6994     # Found sys/sdt.h header, now make sure the c++ compiler works.
6995     # Old g++ versions had problems with probes in constructors/destructors.
6996     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
6997     AC_LANG_PUSH([C++])
6998     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
6999     #include <sys/sdt.h>
7000     class ProbeClass
7001     {
7002     private:
7003       int& ref;
7004       const char *name;
7006     public:
7007       ProbeClass(int& v, const char *n) : ref(v), name(n)
7008       {
7009         DTRACE_PROBE2(_test_, cons, name, ref);
7010       }
7012       void method(int min)
7013       {
7014         DTRACE_PROBE3(_test_, meth, name, ref, min);
7015         ref -= min;
7016       }
7018       ~ProbeClass()
7019       {
7020         DTRACE_PROBE2(_test_, dest, name, ref);
7021       }
7022     };
7023     ]],[[
7024     int i = 64;
7025     DTRACE_PROBE1(_test_, call, i);
7026     ProbeClass inst = ProbeClass(i, "call");
7027     inst.method(24);
7028     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
7029           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
7030     AC_LANG_POP([C++])
7032 AC_CONFIG_HEADERS([config_host/config_probes.h])
7034 dnl ===================================================================
7035 dnl GCC features
7036 dnl ===================================================================
7037 HAVE_GCC_STACK_CLASH_PROTECTION=
7038 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7039     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
7040     save_CFLAGS=$CFLAGS
7041     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
7042     AC_LINK_IFELSE(
7043         [AC_LANG_PROGRAM(, [[return 0;]])],
7044         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
7045         [AC_MSG_RESULT([no])])
7046     CFLAGS=$save_CFLAGS
7048     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
7049     save_CFLAGS=$CFLAGS
7050     CFLAGS="$CFLAGS -Werror -mno-avx"
7051     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
7052     CFLAGS=$save_CFLAGS
7053     if test "$HAVE_GCC_AVX" = "TRUE"; then
7054         AC_MSG_RESULT([yes])
7055     else
7056         AC_MSG_RESULT([no])
7057     fi
7059     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
7060     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7061     int v = 0;
7062     if (__sync_add_and_fetch(&v, 1) != 1 ||
7063         __sync_sub_and_fetch(&v, 1) != 0)
7064         return 1;
7065     __sync_synchronize();
7066     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
7067         v != 1)
7068         return 1;
7069     return 0;
7070 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
7071     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
7072         AC_MSG_RESULT([yes])
7073         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
7074     else
7075         AC_MSG_RESULT([no])
7076     fi
7078     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
7079     AC_LANG_PUSH([C++])
7080     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7081             #include <cstddef>
7082             #include <cxxabi.h>
7083             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
7084         ])], [
7085             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
7086             AC_MSG_RESULT([yes])
7087         ], [AC_MSG_RESULT([no])])
7088     AC_LANG_POP([C++])
7090     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
7091     AC_LANG_PUSH([C++])
7092     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7093             #include <cstddef>
7094             #include <cxxabi.h>
7095             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7096         ])], [
7097             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7098             AC_MSG_RESULT([yes])
7099         ], [AC_MSG_RESULT([no])])
7100     AC_LANG_POP([C++])
7102     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7103     AC_LANG_PUSH([C++])
7104     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7105             #include <cxxabi.h>
7106             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7107         ])], [
7108             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7109             AC_MSG_RESULT([yes])
7110         ], [AC_MSG_RESULT([no])])
7111     AC_LANG_POP([C++])
7113     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7114     AC_LANG_PUSH([C++])
7115     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7116             #include <cstddef>
7117             #include <cxxabi.h>
7118             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7119         ])], [
7120             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7121             AC_MSG_RESULT([yes])
7122         ], [AC_MSG_RESULT([no])])
7123     AC_LANG_POP([C++])
7125     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7126     AC_LANG_PUSH([C++])
7127     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7128             #include <cstddef>
7129             #include <cxxabi.h>
7130             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7131         ])], [
7132             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7133             AC_MSG_RESULT([yes])
7134         ], [AC_MSG_RESULT([no])])
7135     AC_LANG_POP([C++])
7137     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7138     AC_LANG_PUSH([C++])
7139     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7140             #include <cxxabi.h>
7141             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7142         ])], [
7143             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7144             AC_MSG_RESULT([yes])
7145         ], [AC_MSG_RESULT([no])])
7146     AC_LANG_POP([C++])
7148     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7149     AC_LANG_PUSH([C++])
7150     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7151             #include <cxxabi.h>
7152             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7153         ])], [
7154             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7155             AC_MSG_RESULT([yes])
7156         ], [AC_MSG_RESULT([no])])
7157     AC_LANG_POP([C++])
7159     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7160     AC_LANG_PUSH([C++])
7161     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7162             #include <cxxabi.h>
7163             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7164         ])], [
7165             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7166             AC_MSG_RESULT([yes])
7167         ], [AC_MSG_RESULT([no])])
7168     AC_LANG_POP([C++])
7170     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info in cxxabi.h])
7171     AC_LANG_PUSH([C++])
7172     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7173             #include <cstddef>
7174             #include <cxxabi.h>
7175             std::size_t f() { return sizeof(__cxxabiv1::__si_class_type_info); }
7176         ])], [
7177             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7178             AC_MSG_RESULT([yes])
7179         ], [AC_MSG_RESULT([no])])
7180     AC_LANG_POP([C++])
7182     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7183     AC_LANG_PUSH([C++])
7184     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7185             #include <cstddef>
7186             #include <cxxabi.h>
7187             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7188         ])], [
7189             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7190             AC_MSG_RESULT([yes])
7191         ], [AC_MSG_RESULT([no])])
7192     AC_LANG_POP([C++])
7195 AC_SUBST(HAVE_GCC_AVX)
7196 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7197 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7199 dnl ===================================================================
7200 dnl Identify the C++ library
7201 dnl ===================================================================
7203 AC_MSG_CHECKING([what the C++ library is])
7204 HAVE_LIBSTDCPP=
7205 AC_LANG_PUSH([C++])
7206 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7207 #include <utility>
7208 #ifndef __GLIBCXX__
7209 foo bar
7210 #endif
7211 ]])],
7212     [CPP_LIBRARY=GLIBCXX
7213      cpp_library_name="GNU libstdc++"
7214      HAVE_LIBSTDCPP=TRUE
7215     ],
7216     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7217 #include <utility>
7218 #ifndef _LIBCPP_VERSION
7219 foo bar
7220 #endif
7221 ]])],
7222     [CPP_LIBRARY=LIBCPP
7223      cpp_library_name="LLVM libc++"
7224      AC_DEFINE([HAVE_LIBCXX])
7225     ],
7226     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7227 #include <utility>
7228 #ifndef _MSC_VER
7229 foo bar
7230 #endif
7231 ]])],
7232     [CPP_LIBRARY=MSVCRT
7233      cpp_library_name="Microsoft"
7234     ],
7235     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7236 AC_MSG_RESULT([$cpp_library_name])
7237 AC_LANG_POP([C++])
7238 AC_SUBST([HAVE_LIBSTDCPP])
7240 dnl ===================================================================
7241 dnl Check for gperf
7242 dnl ===================================================================
7243 AC_PATH_PROG(GPERF, gperf)
7244 if test -z "$GPERF"; then
7245     AC_MSG_ERROR([gperf not found but needed. Install it.])
7247 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7248     GPERF=`cygpath -m $GPERF`
7250 AC_MSG_CHECKING([whether gperf is new enough])
7251 my_gperf_ver1=$($GPERF --version | head -n 1)
7252 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7253 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7254 if test "$my_gperf_ver3" -ge 301; then
7255     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7256 else
7257     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7259 AC_SUBST(GPERF)
7261 dnl ===================================================================
7262 dnl Check for system libcmis
7263 dnl ===================================================================
7264 # libcmis requires curl and we can't build curl for iOS
7265 if test "$test_cmis" = "yes" -a "$enable_cmis" = "yes"; then
7266     libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.5 >= 0.5.2])
7267     ENABLE_LIBCMIS=TRUE
7268 else
7269     ENABLE_LIBCMIS=
7271 AC_SUBST(ENABLE_LIBCMIS)
7273 dnl ===================================================================
7274 dnl C++11
7275 dnl ===================================================================
7277 AC_MSG_CHECKING([whether $CXX_BASE supports C++17])
7278 CXXFLAGS_CXX11=
7279 if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7280     if test "$with_latest_c__" = yes; then
7281         CXXFLAGS_CXX11=-std:c++latest
7282     else
7283         CXXFLAGS_CXX11=-std:c++17
7284     fi
7285     CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus"
7286 elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7287     my_flags='-std=c++17 -std=c++1z'
7288     if test "$with_latest_c__" = yes; then
7289         my_flags="-std=c++23 -std=c++2b -std=c++20 -std=c++2a $my_flags"
7290     fi
7291     for flag in $my_flags; do
7292         if test "$COM" = MSC; then
7293             flag="-Xclang $flag"
7294         fi
7295         save_CXXFLAGS=$CXXFLAGS
7296         CXXFLAGS="$CXXFLAGS $flag -Werror"
7297         if test "$SYSTEM_LIBCMIS" = TRUE; then
7298             CXXFLAGS="$CXXFLAGS -DSYSTEM_LIBCMIS $LIBCMIS_CFLAGS"
7299         fi
7300         AC_LANG_PUSH([C++])
7301         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7302             #include <algorithm>
7303             #include <functional>
7304             #include <vector>
7306             #if defined SYSTEM_LIBCMIS
7307             // See ucb/source/ucp/cmis/auth_provider.hxx:
7308             #if !defined __clang__
7309             #pragma GCC diagnostic push
7310             #pragma GCC diagnostic ignored "-Wdeprecated"
7311             #pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
7312             #endif
7313             #include <libcmis/libcmis.hxx>
7314             #if !defined __clang__
7315             #pragma GCC diagnostic pop
7316             #endif
7317             #endif
7319             void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7320                 std::sort(v.begin(), v.end(), fn);
7321             }
7322             ]])],[CXXFLAGS_CXX11=$flag])
7323         AC_LANG_POP([C++])
7324         CXXFLAGS=$save_CXXFLAGS
7325         if test -n "$CXXFLAGS_CXX11"; then
7326             break
7327         fi
7328     done
7330 if test -n "$CXXFLAGS_CXX11"; then
7331     AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7332 else
7333     AC_MSG_ERROR(no)
7335 AC_SUBST(CXXFLAGS_CXX11)
7337 if test "$GCC" = "yes"; then
7338     save_CXXFLAGS=$CXXFLAGS
7339     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7340     CHECK_L_ATOMIC
7341     CXXFLAGS=$save_CXXFLAGS
7342     AC_SUBST(ATOMIC_LIB)
7345 dnl Test for temporarily incompatible libstdc++ 4.7.{0,1}, where
7346 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=179528> introduced
7347 dnl an additional member _M_size into C++11 std::list towards 4.7.0 and
7348 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=189186> removed it
7349 dnl again towards 4.7.2:
7350 if test $CPP_LIBRARY = GLIBCXX; then
7351     AC_MSG_CHECKING([whether using C++11 causes libstdc++ 4.7.0/4.7.1 ABI breakage])
7352     AC_LANG_PUSH([C++])
7353     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7354 #include <list>
7355 #if !defined __GLIBCXX__ || (__GLIBCXX__ != 20120322 && __GLIBCXX__ != 20120614)
7356     // according to <https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html>:
7357     //   GCC 4.7.0: 20120322
7358     //   GCC 4.7.1: 20120614
7359     // and using a range check is not possible as the mapping between
7360     // __GLIBCXX__ values and GCC versions is not monotonic
7361 /* ok */
7362 #else
7363 abi broken
7364 #endif
7365         ]])], [AC_MSG_RESULT(no, ok)],
7366         [AC_MSG_ERROR(yes)])
7367     AC_LANG_POP([C++])
7370 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7371 save_CXXFLAGS=$CXXFLAGS
7372 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7373 AC_LANG_PUSH([C++])
7375 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7376 #include <stddef.h>
7378 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7380 namespace
7382         struct b
7383         {
7384                 int i;
7385                 int j;
7386         };
7388 ]], [[
7389 struct a
7391         int i;
7392         int j;
7394 a thinga[]={{0,0}, {1,1}};
7395 b thingb[]={{0,0}, {1,1}};
7396 size_t i = sizeof(sal_n_array_size(thinga));
7397 size_t j = sizeof(sal_n_array_size(thingb));
7398 return !(i != 0 && j != 0);
7400     ], [ AC_MSG_RESULT(yes) ],
7401     [ AC_MSG_ERROR(no)])
7402 AC_LANG_POP([C++])
7403 CXXFLAGS=$save_CXXFLAGS
7405 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7406 if test "$GCC" = yes; then
7407     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7408     AC_LANG_PUSH([C++])
7409     save_CXXFLAGS=$CXXFLAGS
7410     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7411     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7412     CXXFLAGS=$save_CXXFLAGS
7413     AC_LANG_POP([C++])
7414     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7415         AC_MSG_RESULT([yes])
7416     else
7417         AC_MSG_RESULT([no])
7418     fi
7420 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7422 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7423 AC_LANG_PUSH([C++])
7424 save_CXXFLAGS=$CXXFLAGS
7425 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7426 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7427         #include <algorithm>
7428         #include <initializer_list>
7429         #include <vector>
7430         template<typename T> class S {
7431         private:
7432             std::vector<T> v_;
7433         public:
7434             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7435         };
7436         constinit S<int> s{3, 2, 1};
7437     ])], [
7438         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7439         AC_MSG_RESULT([yes])
7440     ], [AC_MSG_RESULT([no])])
7441 CXXFLAGS=$save_CXXFLAGS
7442 AC_LANG_POP([C++])
7444 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a <span> with unsigned size_type])
7445 AC_LANG_PUSH([C++])
7446 save_CXXFLAGS=$CXXFLAGS
7447 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7448 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7449         #include <span>
7450         #include <type_traits>
7451         // Don't check size_type directly, as it was called index_type before P1872R0:
7452         void f(std::span<int> s) { static_assert(std::is_unsigned_v<decltype(s.size())>); };
7453     ])], [
7454         AC_DEFINE([HAVE_CPP_SPAN],[1])
7455         AC_MSG_RESULT([yes])
7456     ], [AC_MSG_RESULT([no])])
7457 CXXFLAGS=$save_CXXFLAGS
7458 AC_LANG_POP([C++])
7460 AC_MSG_CHECKING([whether $CXX_BASE implements C++ DR P1155R3])
7461 AC_LANG_PUSH([C++])
7462 save_CXXFLAGS=$CXXFLAGS
7463 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7464 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7465         struct S1 { S1(S1 &&); };
7466         struct S2: S1 {};
7467         S1 f(S2 s) { return s; }
7468     ])], [
7469         AC_DEFINE([HAVE_P1155R3],[1])
7470         AC_MSG_RESULT([yes])
7471     ], [AC_MSG_RESULT([no])])
7472 CXXFLAGS=$save_CXXFLAGS
7473 AC_LANG_POP([C++])
7475 AC_MSG_CHECKING([whether $CXX_BASE supports C++20 std::atomic_ref])
7476 HAVE_CXX20_ATOMIC_REF=
7477 AC_LANG_PUSH([C++])
7478 save_CXXFLAGS=$CXXFLAGS
7479 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7480 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7481         #include <atomic>
7482         int x;
7483         std::atomic_ref<int> y(x);
7484     ])], [
7485         HAVE_CXX20_ATOMIC_REF=TRUE
7486         AC_MSG_RESULT([yes])
7487     ], [AC_MSG_RESULT([no])])
7488 CXXFLAGS=$save_CXXFLAGS
7489 AC_LANG_POP([C++])
7490 AC_SUBST([HAVE_CXX20_ATOMIC_REF])
7492 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7493 dnl which is included in -Wextra anyway):
7494 HAVE_WDEPRECATED_COPY_DTOR=
7495 if test "$GCC" = yes; then
7496     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7497     AC_LANG_PUSH([C++])
7498     save_CXXFLAGS=$CXXFLAGS
7499     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7500     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7501             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7502             AC_MSG_RESULT([yes])
7503         ], [AC_MSG_RESULT([no])])
7504     CXXFLAGS=$save_CXXFLAGS
7505     AC_LANG_POP([C++])
7507 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7509 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7510 dnl uninitialized warning for code like
7512 dnl   OString f();
7513 dnl   boost::optional<OString> * g(bool b) {
7514 dnl       boost::optional<OString> o;
7515 dnl       if (b) o = f();
7516 dnl       return new boost::optional<OString>(o);
7517 dnl   }
7519 dnl (as is e.g. present, in a slightly more elaborate form, in
7520 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7521 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7522 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7523 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7524     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7525     AC_LANG_PUSH([C++])
7526     save_CXXFLAGS=$CXXFLAGS
7527     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7528     if test "$ENABLE_OPTIMIZED" = TRUE; then
7529         CXXFLAGS="$CXXFLAGS -O2"
7530     else
7531         CXXFLAGS="$CXXFLAGS -O0"
7532     fi
7533     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7534             #include <new>
7535             void f1(int);
7536             struct S1 {
7537                 ~S1() { f1(n); }
7538                 int n = 0;
7539             };
7540             struct S2 {
7541                 S2() {}
7542                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7543                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7544                 void set(S1 s) {
7545                     new (stg) S1(s);
7546                     init = true;
7547                 }
7548                 bool init = false;
7549                 char stg[sizeof (S1)];
7550             } ;
7551             S1 f2();
7552             S2 * f3(bool b) {
7553                 S2 o;
7554                 if (b) o.set(f2());
7555                 return new S2(o);
7556             }
7557         ]])], [AC_MSG_RESULT([no])], [
7558             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7559             AC_MSG_RESULT([yes])
7560         ])
7561     CXXFLAGS=$save_CXXFLAGS
7562     AC_LANG_POP([C++])
7564 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7566 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7567 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7568 dnl hits us e.g. with GCC 10 and --enable-optimized at
7570 dnl   In file included from include/rtl/string.hxx:49,
7571 dnl                    from include/rtl/ustring.hxx:43,
7572 dnl                    from include/osl/file.hxx:35,
7573 dnl                    from include/codemaker/global.hxx:28,
7574 dnl                    from include/codemaker/options.hxx:23,
7575 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7576 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7577 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,
7578 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,
7579 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,
7580 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7581 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7582 dnl      78 |         memcpy( buffer, data, length );
7583 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7584 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7585 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7586     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7587     AC_LANG_PUSH([C++])
7588     save_CXXFLAGS=$CXXFLAGS
7589     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7590     if test "$ENABLE_OPTIMIZED" = TRUE; then
7591         CXXFLAGS="$CXXFLAGS -O2"
7592     else
7593         CXXFLAGS="$CXXFLAGS -O0"
7594     fi
7595     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7596     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7597             void fill(char const * begin, char const * end, char c);
7598             struct q {
7599                 char ids[4];
7600                 char username[6];
7601             };
7602             void test(q & c) {
7603                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
7604                 __builtin_strncpy(c.username, "root", sizeof(c.username));
7605             }
7606         ]])], [AC_MSG_RESULT([no])], [
7607             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
7608             AC_MSG_RESULT([yes])
7609         ])
7610     CXXFLAGS=$save_CXXFLAGS
7611     AC_LANG_POP([C++])
7613 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
7615 HAVE_DLLEXPORTINLINES=
7616 dnl At least for Clang 14 trunk, -Zc:dllexportInlines- would cause lots of unresolved symbols when
7617 dnl linking e.g. Library_cppuhelper, for whatever reason:
7618 if test "$_os" = "WINNT" && test "$COM_IS_CLANG" != TRUE; then
7619     AC_MSG_CHECKING([whether $CXX_BASE supports -Zc:dllexportInlines-])
7620     AC_LANG_PUSH([C++])
7621     save_CXXFLAGS=$CXXFLAGS
7622     CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
7623     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7624             HAVE_DLLEXPORTINLINES=TRUE
7625             AC_MSG_RESULT([yes])
7626         ], [AC_MSG_RESULT([no])])
7627     CXXFLAGS=$save_CXXFLAGS
7628     AC_LANG_POP([C++])
7630 AC_SUBST([HAVE_DLLEXPORTINLINES])
7632 dnl ===================================================================
7633 dnl CPU Intrinsics support - SSE, AVX
7634 dnl ===================================================================
7636 CXXFLAGS_INTRINSICS_SSE2=
7637 CXXFLAGS_INTRINSICS_SSSE3=
7638 CXXFLAGS_INTRINSICS_SSE41=
7639 CXXFLAGS_INTRINSICS_SSE42=
7640 CXXFLAGS_INTRINSICS_AVX=
7641 CXXFLAGS_INTRINSICS_AVX2=
7642 CXXFLAGS_INTRINSICS_AVX512=
7643 CXXFLAGS_INTRINSICS_AVX512F=
7644 CXXFLAGS_INTRINSICS_F16C=
7645 CXXFLAGS_INTRINSICS_FMA=
7647 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7648     # GCC, Clang or Clang-cl (clang-cl + MSVC's -arch options don't work well together)
7649     flag_sse2=-msse2
7650     flag_ssse3=-mssse3
7651     flag_sse41=-msse4.1
7652     flag_sse42=-msse4.2
7653     flag_avx=-mavx
7654     flag_avx2=-mavx2
7655     flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
7656     flag_avx512f=-mavx512f
7657     flag_f16c=-mf16c
7658     flag_fma=-mfma
7659 else
7660     # With MSVC using -arch is in fact not necessary for being able
7661     # to use CPU intrinsics, code using AVX512F intrinsics will compile
7662     # even if compiled with -arch:AVX, the -arch option really only affects
7663     # instructions generated for C/C++ code.
7664     # So use the matching same (or lower) -arch options, but only in order
7665     # to generate the best matching instructions for the C++ code surrounding
7666     # the intrinsics.
7667     # SSE2 is the default for x86/x64, so no need to specify the option.
7668     flag_sse2=
7669     # No specific options for these, use the next lower.
7670     flag_ssse3="$flag_sse2"
7671     flag_sse41="$flag_sse2"
7672     flag_sse42="$flag_sse2"
7673     flag_avx=-arch:AVX
7674     flag_avx2=-arch:AVX2
7675     flag_avx512=-arch:AVX512
7676     # Using -arch:AVX512 would enable more than just AVX512F, so use only AVX2.
7677     flag_avx512f=-arch:AVX2
7678     # No MSVC options for these.
7679     flag_f16c="$flag_sse2"
7680     flag_fma="$flag_sse2"
7683 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
7684 AC_LANG_PUSH([C++])
7685 save_CXXFLAGS=$CXXFLAGS
7686 CXXFLAGS="$CXXFLAGS $flag_sse2"
7687 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7688     #include <emmintrin.h>
7689     int main () {
7690         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7691         c = _mm_xor_si128 (a, b);
7692         return 0;
7693     }
7694     ])],
7695     [can_compile_sse2=yes],
7696     [can_compile_sse2=no])
7697 AC_LANG_POP([C++])
7698 CXXFLAGS=$save_CXXFLAGS
7699 AC_MSG_RESULT([${can_compile_sse2}])
7700 if test "${can_compile_sse2}" = "yes" ; then
7701     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
7704 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
7705 AC_LANG_PUSH([C++])
7706 save_CXXFLAGS=$CXXFLAGS
7707 CXXFLAGS="$CXXFLAGS $flag_ssse3"
7708 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7709     #include <tmmintrin.h>
7710     int main () {
7711         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7712         c = _mm_maddubs_epi16 (a, b);
7713         return 0;
7714     }
7715     ])],
7716     [can_compile_ssse3=yes],
7717     [can_compile_ssse3=no])
7718 AC_LANG_POP([C++])
7719 CXXFLAGS=$save_CXXFLAGS
7720 AC_MSG_RESULT([${can_compile_ssse3}])
7721 if test "${can_compile_ssse3}" = "yes" ; then
7722     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
7725 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
7726 AC_LANG_PUSH([C++])
7727 save_CXXFLAGS=$CXXFLAGS
7728 CXXFLAGS="$CXXFLAGS $flag_sse41"
7729 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7730     #include <smmintrin.h>
7731     int main () {
7732         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7733         c = _mm_cmpeq_epi64 (a, b);
7734         return 0;
7735     }
7736     ])],
7737     [can_compile_sse41=yes],
7738     [can_compile_sse41=no])
7739 AC_LANG_POP([C++])
7740 CXXFLAGS=$save_CXXFLAGS
7741 AC_MSG_RESULT([${can_compile_sse41}])
7742 if test "${can_compile_sse41}" = "yes" ; then
7743     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
7746 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
7747 AC_LANG_PUSH([C++])
7748 save_CXXFLAGS=$CXXFLAGS
7749 CXXFLAGS="$CXXFLAGS $flag_sse42"
7750 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7751     #include <nmmintrin.h>
7752     int main () {
7753         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7754         c = _mm_cmpgt_epi64 (a, b);
7755         return 0;
7756     }
7757     ])],
7758     [can_compile_sse42=yes],
7759     [can_compile_sse42=no])
7760 AC_LANG_POP([C++])
7761 CXXFLAGS=$save_CXXFLAGS
7762 AC_MSG_RESULT([${can_compile_sse42}])
7763 if test "${can_compile_sse42}" = "yes" ; then
7764     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
7767 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
7768 AC_LANG_PUSH([C++])
7769 save_CXXFLAGS=$CXXFLAGS
7770 CXXFLAGS="$CXXFLAGS $flag_avx"
7771 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7772     #include <immintrin.h>
7773     int main () {
7774         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
7775         c = _mm256_xor_ps(a, b);
7776         return 0;
7777     }
7778     ])],
7779     [can_compile_avx=yes],
7780     [can_compile_avx=no])
7781 AC_LANG_POP([C++])
7782 CXXFLAGS=$save_CXXFLAGS
7783 AC_MSG_RESULT([${can_compile_avx}])
7784 if test "${can_compile_avx}" = "yes" ; then
7785     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
7788 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
7789 AC_LANG_PUSH([C++])
7790 save_CXXFLAGS=$CXXFLAGS
7791 CXXFLAGS="$CXXFLAGS $flag_avx2"
7792 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7793     #include <immintrin.h>
7794     int main () {
7795         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
7796         c = _mm256_maddubs_epi16(a, b);
7797         return 0;
7798     }
7799     ])],
7800     [can_compile_avx2=yes],
7801     [can_compile_avx2=no])
7802 AC_LANG_POP([C++])
7803 CXXFLAGS=$save_CXXFLAGS
7804 AC_MSG_RESULT([${can_compile_avx2}])
7805 if test "${can_compile_avx2}" = "yes" ; then
7806     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
7809 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
7810 AC_LANG_PUSH([C++])
7811 save_CXXFLAGS=$CXXFLAGS
7812 CXXFLAGS="$CXXFLAGS $flag_avx512"
7813 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7814     #include <immintrin.h>
7815     int main () {
7816         __m512i a = _mm512_loadu_si512(0);
7817         __m512d v1 = _mm512_load_pd(0);
7818         // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
7819         __m512d v2 = _mm512_abs_pd(v1);
7820         return 0;
7821     }
7822     ])],
7823     [can_compile_avx512=yes],
7824     [can_compile_avx512=no])
7825 AC_LANG_POP([C++])
7826 CXXFLAGS=$save_CXXFLAGS
7827 AC_MSG_RESULT([${can_compile_avx512}])
7828 if test "${can_compile_avx512}" = "yes" ; then
7829     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
7830     CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
7833 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
7834 AC_LANG_PUSH([C++])
7835 save_CXXFLAGS=$CXXFLAGS
7836 CXXFLAGS="$CXXFLAGS $flag_f16c"
7837 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7838     #include <immintrin.h>
7839     int main () {
7840         __m128i a = _mm_set1_epi32 (0);
7841         __m128 c;
7842         c = _mm_cvtph_ps(a);
7843         return 0;
7844     }
7845     ])],
7846     [can_compile_f16c=yes],
7847     [can_compile_f16c=no])
7848 AC_LANG_POP([C++])
7849 CXXFLAGS=$save_CXXFLAGS
7850 AC_MSG_RESULT([${can_compile_f16c}])
7851 if test "${can_compile_f16c}" = "yes" ; then
7852     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
7855 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
7856 AC_LANG_PUSH([C++])
7857 save_CXXFLAGS=$CXXFLAGS
7858 CXXFLAGS="$CXXFLAGS $flag_fma"
7859 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7860     #include <immintrin.h>
7861     int main () {
7862         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
7863         d = _mm256_fmadd_ps(a, b, c);
7864         return 0;
7865     }
7866     ])],
7867     [can_compile_fma=yes],
7868     [can_compile_fma=no])
7869 AC_LANG_POP([C++])
7870 CXXFLAGS=$save_CXXFLAGS
7871 AC_MSG_RESULT([${can_compile_fma}])
7872 if test "${can_compile_fma}" = "yes" ; then
7873     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
7876 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
7877 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
7878 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
7879 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
7880 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
7881 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
7882 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
7883 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512F])
7884 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
7885 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
7887 dnl ===================================================================
7888 dnl system stl sanity tests
7889 dnl ===================================================================
7890 if test "$_os" != "WINNT"; then
7892     AC_LANG_PUSH([C++])
7894     save_CPPFLAGS="$CPPFLAGS"
7895     if test -n "$MACOSX_SDK_PATH"; then
7896         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
7897     fi
7899     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
7900     # only.
7901     if test "$CPP_LIBRARY" = GLIBCXX; then
7902         dnl gcc#19664, gcc#22482, rhbz#162935
7903         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
7904         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
7905         AC_MSG_RESULT([$stlvisok])
7906         if test "$stlvisok" = "no"; then
7907             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
7908         fi
7909     fi
7911     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
7912     # when we don't make any dynamic libraries?
7913     if test "$DISABLE_DYNLOADING" = ""; then
7914         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
7915         cat > conftestlib1.cc <<_ACEOF
7916 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7917 struct S2: S1<int> { virtual ~S2(); };
7918 S2::~S2() {}
7919 _ACEOF
7920         cat > conftestlib2.cc <<_ACEOF
7921 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7922 struct S2: S1<int> { virtual ~S2(); };
7923 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
7924 _ACEOF
7925         gccvisinlineshiddenok=yes
7926         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
7927             gccvisinlineshiddenok=no
7928         else
7929             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
7930             dnl known to not work with -z defs (unsetting which makes the test
7931             dnl moot, though):
7932             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
7933             if test "$COM_IS_CLANG" = TRUE; then
7934                 for i in $CXX $CXXFLAGS; do
7935                     case $i in
7936                     -fsanitize=*)
7937                         my_linkflagsnoundefs=
7938                         break
7939                         ;;
7940                     esac
7941                 done
7942             fi
7943             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
7944                 gccvisinlineshiddenok=no
7945             fi
7946         fi
7948         rm -fr libconftest*
7949         AC_MSG_RESULT([$gccvisinlineshiddenok])
7950         if test "$gccvisinlineshiddenok" = "no"; then
7951             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
7952         fi
7953     fi
7955    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
7956     cat >visibility.cxx <<_ACEOF
7957 #pragma GCC visibility push(hidden)
7958 struct __attribute__ ((visibility ("default"))) TestStruct {
7959   static void Init();
7961 __attribute__ ((visibility ("default"))) void TestFunc() {
7962   TestStruct::Init();
7964 _ACEOF
7965     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
7966         gccvisbroken=yes
7967     else
7968         case "$host_cpu" in
7969         i?86|x86_64)
7970             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
7971                 gccvisbroken=no
7972             else
7973                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
7974                     gccvisbroken=no
7975                 else
7976                     gccvisbroken=yes
7977                 fi
7978             fi
7979             ;;
7980         *)
7981             gccvisbroken=no
7982             ;;
7983         esac
7984     fi
7985     rm -f visibility.s visibility.cxx
7987     AC_MSG_RESULT([$gccvisbroken])
7988     if test "$gccvisbroken" = "yes"; then
7989         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
7990     fi
7992     CPPFLAGS="$save_CPPFLAGS"
7994     AC_MSG_CHECKING([if CET endbranch is recognized])
7995 cat > endbr.s <<_ACEOF
7996 endbr32
7997 _ACEOF
7998     HAVE_ASM_END_BRANCH_INS_SUPPORT=
7999     if $CXX -c endbr.s -o endbr.o >/dev/null 2>&5; then
8000         AC_MSG_RESULT([yes])
8001         HAVE_ASM_END_BRANCH_INS_SUPPORT=TRUE
8002     else
8003         AC_MSG_RESULT([no])
8004     fi
8005     rm -f endbr.s endbr.o
8006     AC_SUBST(HAVE_ASM_END_BRANCH_INS_SUPPORT)
8008     AC_LANG_POP([C++])
8011 dnl ===================================================================
8012 dnl  Clang++ tests
8013 dnl ===================================================================
8015 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
8016 if test "$GCC" = "yes"; then
8017     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
8018     AC_LANG_PUSH([C++])
8019     save_CXXFLAGS=$CXXFLAGS
8020     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
8021     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
8022     CXXFLAGS=$save_CXXFLAGS
8023     AC_LANG_POP([C++])
8024     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
8025         AC_MSG_RESULT([yes])
8026     else
8027         AC_MSG_RESULT([no])
8028     fi
8030 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
8032 dnl ===================================================================
8033 dnl Compiler plugins
8034 dnl ===================================================================
8036 COMPILER_PLUGINS=
8037 # currently only Clang
8039 if test "$COM_IS_CLANG" != "TRUE"; then
8040     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
8041         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
8042         enable_compiler_plugins=no
8043     fi
8046 COMPILER_PLUGINS_COM_IS_CLANG=
8047 if test "$COM_IS_CLANG" = "TRUE"; then
8048     if test -n "$enable_compiler_plugins"; then
8049         compiler_plugins="$enable_compiler_plugins"
8050     elif test -n "$ENABLE_DBGUTIL"; then
8051         compiler_plugins=test
8052     else
8053         compiler_plugins=no
8054     fi
8055     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
8056         if test "$CLANGVER" -lt 50002; then
8057             if test "$compiler_plugins" = yes; then
8058                 AC_MSG_ERROR([Clang $CLANGVER is too old to build compiler plugins; need >= 5.0.2.])
8059             else
8060                 compiler_plugins=no
8061             fi
8062         fi
8063     fi
8064     if test "$compiler_plugins" != "no"; then
8065         dnl The prefix where Clang resides, override to where Clang resides if
8066         dnl using a source build:
8067         if test -z "$CLANGDIR"; then
8068             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
8069         fi
8070         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
8071         if test -z "$COMPILER_PLUGINS_CXX"; then
8072             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
8073         fi
8074         clangbindir=$CLANGDIR/bin
8075         if test "$build_os" = "cygwin"; then
8076             clangbindir=$(cygpath -u "$clangbindir")
8077         fi
8078         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
8079         if test -n "$LLVM_CONFIG"; then
8080             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
8081             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
8082             if test -z "$CLANGLIBDIR"; then
8083                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
8084             fi
8085             # Try if clang is built from source (in which case its includes are not together with llvm includes).
8086             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
8087             clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
8088             if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
8089                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
8090             fi
8091             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
8092             clangobjdir=$($LLVM_CONFIG --obj-root)
8093             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
8094                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
8095             fi
8096         fi
8097         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
8098         AC_LANG_PUSH([C++])
8099         save_CXX=$CXX
8100         save_CXXCPP=$CXXCPP
8101         save_CPPFLAGS=$CPPFLAGS
8102         save_CXXFLAGS=$CXXFLAGS
8103         save_LDFLAGS=$LDFLAGS
8104         save_LIBS=$LIBS
8105         CXX=$COMPILER_PLUGINS_CXX
8106         CXXCPP="$COMPILER_PLUGINS_CXX -E"
8107         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8108         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8109         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
8110             [COMPILER_PLUGINS=TRUE],
8111             [
8112             if test "$compiler_plugins" = "yes"; then
8113                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
8114             else
8115                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
8116                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
8117             fi
8118             ])
8119         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8120         dnl comment in compilerplugins/Makefile-clang.mk:
8121         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8122             LDFLAGS=""
8123             AC_MSG_CHECKING([for clang libraries to use])
8124             if test -z "$CLANGTOOLLIBS"; then
8125                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8126  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8127                 AC_LINK_IFELSE([
8128                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8129                         [[ clang::FullSourceLoc().dump(); ]])
8130                 ],[CLANGTOOLLIBS="$LIBS"],[])
8131             fi
8132             if test -z "$CLANGTOOLLIBS"; then
8133                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8134                 AC_LINK_IFELSE([
8135                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8136                         [[ clang::FullSourceLoc().dump(); ]])
8137                 ],[CLANGTOOLLIBS="$LIBS"],[])
8138             fi
8139             AC_MSG_RESULT([$CLANGTOOLLIBS])
8140             if test -z "$CLANGTOOLLIBS"; then
8141                 if test "$compiler_plugins" = "yes"; then
8142                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8143                 else
8144                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8145                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8146                 fi
8147                 COMPILER_PLUGINS=
8148             fi
8149             if test -n "$COMPILER_PLUGINS"; then
8150                 if test -z "$CLANGSYSINCLUDE"; then
8151                     if test -n "$LLVM_CONFIG"; then
8152                         # Path to the clang system headers (no idea if there's a better way to get it).
8153                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8154                     fi
8155                 fi
8156             fi
8157         fi
8158         CXX=$save_CXX
8159         CXXCPP=$save_CXXCPP
8160         CPPFLAGS=$save_CPPFLAGS
8161         CXXFLAGS=$save_CXXFLAGS
8162         LDFLAGS=$save_LDFLAGS
8163         LIBS="$save_LIBS"
8164         AC_LANG_POP([C++])
8166         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8167         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8168             #ifndef __clang__
8169             you lose
8170             #endif
8171             int foo=42;
8172             ]])],
8173             [AC_MSG_RESULT([yes])
8174              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8175             [AC_MSG_RESULT([no])])
8176         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8177     fi
8178 else
8179     if test "$enable_compiler_plugins" = "yes"; then
8180         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8181     fi
8183 COMPILER_PLUGINS_ANALYZER_PCH=
8184 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8185     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8187 AC_SUBST(COMPILER_PLUGINS)
8188 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8189 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8190 AC_SUBST(COMPILER_PLUGINS_CXX)
8191 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8192 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8193 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8194 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8195 AC_SUBST(CLANGDIR)
8196 AC_SUBST(CLANGLIBDIR)
8197 AC_SUBST(CLANGTOOLLIBS)
8198 AC_SUBST(CLANGSYSINCLUDE)
8200 # Plugin to help linker.
8201 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8202 # This makes --enable-lto build with clang work.
8203 AC_SUBST(LD_PLUGIN)
8205 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8206 AC_SUBST(HAVE_POSIX_FALLOCATE)
8208 JITC_PROCESSOR_TYPE=""
8209 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8210     # IBMs JDK needs this...
8211     JITC_PROCESSOR_TYPE=6
8212     export JITC_PROCESSOR_TYPE
8214 AC_SUBST([JITC_PROCESSOR_TYPE])
8216 # Misc Windows Stuff
8217 AC_ARG_WITH(ucrt-dir,
8218     AS_HELP_STRING([--with-ucrt-dir],
8219         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8220         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8221         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8222             Windows6.1-KB2999226-x64.msu
8223             Windows6.1-KB2999226-x86.msu
8224             Windows8.1-KB2999226-x64.msu
8225             Windows8.1-KB2999226-x86.msu
8226             Windows8-RT-KB2999226-x64.msu
8227             Windows8-RT-KB2999226-x86.msu
8228         A zip archive including those files is available from Microsoft site:
8229         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8232 UCRT_REDISTDIR="$with_ucrt_dir"
8233 if test $_os = "WINNT"; then
8234     find_msvc_x64_dlls
8235     for i in $PKGFORMAT; do
8236         if test "$i" = msi; then
8237             find_msms
8238             break
8239         fi
8240     done
8241     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8242     MSVC_DLLS="$msvcdlls"
8243     test -n "$msmdir" && MSM_PATH=`win_short_path_for_make "$msmdir"`
8244     # MSVC 15.3 changed it to VC141
8245     if echo "$msvcdllpath" | grep -q "VC143.CRT$"; then
8246         SCPDEFS="$SCPDEFS -DWITH_VC143_REDIST"
8247     elif echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8248         SCPDEFS="$SCPDEFS -DWITH_VC142_REDIST"
8249     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8250         SCPDEFS="$SCPDEFS -DWITH_VC141_REDIST"
8251     else
8252         SCPDEFS="$SCPDEFS -DWITH_VC${VCVER}_REDIST"
8253     fi
8255     if test "$UCRT_REDISTDIR" = "no"; then
8256         dnl explicitly disabled
8257         UCRT_REDISTDIR=""
8258     else
8259         if ! test -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x64.msu" -a \
8260                   -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x86.msu" -a \
8261                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x64.msu" -a \
8262                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x86.msu" -a \
8263                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x64.msu" -a \
8264                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x86.msu"; then
8265             UCRT_REDISTDIR=""
8266             if test -n "$PKGFORMAT"; then
8267                for i in $PKGFORMAT; do
8268                    case "$i" in
8269                    msi)
8270                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8271                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8272                        ;;
8273                    esac
8274                done
8275             fi
8276         fi
8277     fi
8280 AC_SUBST(UCRT_REDISTDIR)
8281 AC_SUBST(MSVC_DLL_PATH)
8282 AC_SUBST(MSVC_DLLS)
8283 AC_SUBST(MSM_PATH)
8286 dnl ===================================================================
8287 dnl Checks for Java
8288 dnl ===================================================================
8289 if test "$ENABLE_JAVA" != ""; then
8291     # Windows-specific tests
8292     if test "$build_os" = "cygwin"; then
8293         if test -z "$with_jdk_home"; then
8294             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8295             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8296             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/CurrentVersion"
8297             if test -n "$regvalue"; then
8298                 ver=$regvalue
8299                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver/JavaHome"
8300                 with_jdk_home=$regvalue
8301             fi
8302             howfound="found automatically"
8303         else
8304             with_jdk_home=`win_short_path_for_make "$with_jdk_home"`
8305             howfound="you passed"
8306         fi
8308         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8309             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])
8310         fi
8311     fi
8313     # 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.
8314     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8315     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8316         with_jdk_home=`/usr/libexec/java_home`
8317     fi
8319     JAVA_HOME=; export JAVA_HOME
8320     if test -z "$with_jdk_home"; then
8321         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8322     else
8323         _java_path="$with_jdk_home/bin/$with_java"
8324         dnl Check if there is a Java interpreter at all.
8325         if test -x "$_java_path"; then
8326             JAVAINTERPRETER=$_java_path
8327         else
8328             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8329         fi
8330     fi
8332     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8333     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8334     dnl loaded by java to run JunitTests:
8335     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8336         shortjdkhome=`cygpath -d "$with_jdk_home"`
8337         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
8338             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8339             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8340         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
8341             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8342             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8343         fi
8345         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8346             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8347         fi
8348         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8349     elif test "$cross_compiling" != "yes"; then
8350         case $CPUNAME in
8351             AARCH64|AXP|X86_64|HPPA|IA64|POWERPC64|S390X|SPARC64|GODSON64)
8352                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8353                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8354                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8355                 fi
8356                 ;;
8357             *) # assumption: everything else 32-bit
8358                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8359                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8360                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8361                 fi
8362                 ;;
8363         esac
8364     fi
8367 dnl ===================================================================
8368 dnl Checks for JDK.
8369 dnl ===================================================================
8371 # Whether all the complexity here actually is needed any more or not, no idea.
8373 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8374     _gij_longver=0
8375     AC_MSG_CHECKING([the installed JDK])
8376     if test -n "$JAVAINTERPRETER"; then
8377         dnl java -version sends output to stderr!
8378         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8379             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8380         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8381             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8382         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8383             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8384         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8385             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8386         else
8387             JDK=sun
8389             dnl Sun JDK specific tests
8390             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8391             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8393             if test "$_jdk_ver" -lt 10900; then
8394                 AC_MSG_ERROR([JDK is too old, you need at least 9 ($_jdk_ver < 10900)])
8395             fi
8396             if test "$_jdk_ver" -gt 10900; then
8397                 JAVA_CLASSPATH_NOT_SET=TRUE
8398             fi
8400             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8401             if test "$_os" = "WINNT"; then
8402                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8403             fi
8404             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8406             # set to limit VM usage for JunitTests
8407             JAVAIFLAGS=-Xmx64M
8408             # set to limit VM usage for javac
8409             JAVACFLAGS=-J-Xmx128M
8410         fi
8411     else
8412         AC_MSG_ERROR([Java not found. You need at least JDK 9])
8413     fi
8414 else
8415     if test -z "$ENABLE_JAVA"; then
8416         dnl Java disabled
8417         JAVA_HOME=
8418         export JAVA_HOME
8419     elif test "$cross_compiling" = "yes"; then
8420         # Just assume compatibility of build and host JDK
8421         JDK=$JDK_FOR_BUILD
8422         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8423     fi
8426 dnl ===================================================================
8427 dnl Checks for javac
8428 dnl ===================================================================
8429 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8430     javacompiler="javac"
8431     : ${JAVA_SOURCE_VER=8}
8432     : ${JAVA_TARGET_VER=8}
8433     if test -z "$with_jdk_home"; then
8434         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8435     else
8436         _javac_path="$with_jdk_home/bin/$javacompiler"
8437         dnl Check if there is a Java compiler at all.
8438         if test -x "$_javac_path"; then
8439             JAVACOMPILER=$_javac_path
8440         fi
8441     fi
8442     if test -z "$JAVACOMPILER"; then
8443         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8444     fi
8445     if test "$build_os" = "cygwin"; then
8446         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8447             JAVACOMPILER="${JAVACOMPILER}.exe"
8448         fi
8449         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8450     fi
8453 dnl ===================================================================
8454 dnl Checks for javadoc
8455 dnl ===================================================================
8456 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8457     if test -z "$with_jdk_home"; then
8458         AC_PATH_PROG(JAVADOC, javadoc)
8459     else
8460         _javadoc_path="$with_jdk_home/bin/javadoc"
8461         dnl Check if there is a javadoc at all.
8462         if test -x "$_javadoc_path"; then
8463             JAVADOC=$_javadoc_path
8464         else
8465             AC_PATH_PROG(JAVADOC, javadoc)
8466         fi
8467     fi
8468     if test -z "$JAVADOC"; then
8469         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8470     fi
8471     if test "$build_os" = "cygwin"; then
8472         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8473             JAVADOC="${JAVADOC}.exe"
8474         fi
8475         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8476     fi
8478     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8479     JAVADOCISGJDOC="yes"
8480     fi
8482 AC_SUBST(JAVADOC)
8483 AC_SUBST(JAVADOCISGJDOC)
8485 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8486     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8487     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8488         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8489            # try to recover first by looking whether we have an alternative
8490            # system as in Debian or newer SuSEs where following /usr/bin/javac
8491            # over /etc/alternatives/javac leads to the right bindir where we
8492            # just need to strip a bit away to get a valid JAVA_HOME
8493            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8494         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8495             # maybe only one level of symlink (e.g. on Mac)
8496             JAVA_HOME=$(readlink $JAVACOMPILER)
8497             if test "$(dirname $JAVA_HOME)" = "."; then
8498                 # we've got no path to trim back
8499                 JAVA_HOME=""
8500             fi
8501         else
8502             # else warn
8503             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8504             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8505             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8506             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8507         fi
8508         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8509         if test "$JAVA_HOME" != "/usr"; then
8510             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8511                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8512                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8513                 dnl Tiger already returns a JDK path...
8514                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8515             else
8516                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8517                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8518                 dnl that checks which version to run
8519                 if test -f "$JAVA_HOME"; then
8520                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8521                 fi
8522             fi
8523         fi
8524     fi
8525     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8527     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8528     if test -z "$JAVA_HOME"; then
8529         if test "x$with_jdk_home" = "x"; then
8530             cat > findhome.java <<_ACEOF
8531 [import java.io.File;
8533 class findhome
8535     public static void main(String args[])
8536     {
8537         String jrelocation = System.getProperty("java.home");
8538         File jre = new File(jrelocation);
8539         System.out.println(jre.getParent());
8540     }
8542 _ACEOF
8543             AC_MSG_CHECKING([if javac works])
8544             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8545             AC_TRY_EVAL(javac_cmd)
8546             if test $? = 0 -a -f ./findhome.class; then
8547                 AC_MSG_RESULT([javac works])
8548             else
8549                 echo "configure: javac test failed" >&5
8550                 cat findhome.java >&5
8551                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8552             fi
8553             AC_MSG_CHECKING([if gij knows its java.home])
8554             JAVA_HOME=`$JAVAINTERPRETER findhome`
8555             if test $? = 0 -a "$JAVA_HOME" != ""; then
8556                 AC_MSG_RESULT([$JAVA_HOME])
8557             else
8558                 echo "configure: java test failed" >&5
8559                 cat findhome.java >&5
8560                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8561             fi
8562             # clean-up after ourselves
8563             rm -f ./findhome.java ./findhome.class
8564         else
8565             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8566         fi
8567     fi
8569     # now check if $JAVA_HOME is really valid
8570     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8571         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8572             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8573             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8574             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
8575             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
8576             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
8577             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
8578         fi
8579     fi
8580     PathFormat "$JAVA_HOME"
8581     JAVA_HOME="$formatted_path"
8584 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
8585     "$_os" != Darwin
8586 then
8587     AC_MSG_CHECKING([for JAWT lib])
8588     if test "$_os" = WINNT; then
8589         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
8590         JAWTLIB=jawt.lib
8591     else
8592         case "$host_cpu" in
8593         arm*)
8594             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
8595             JAVA_ARCH=$my_java_arch
8596             ;;
8597         i*86)
8598             my_java_arch=i386
8599             ;;
8600         m68k)
8601             my_java_arch=m68k
8602             ;;
8603         powerpc)
8604             my_java_arch=ppc
8605             ;;
8606         powerpc64)
8607             my_java_arch=ppc64
8608             ;;
8609         powerpc64le)
8610             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
8611             JAVA_ARCH=$my_java_arch
8612             ;;
8613         sparc64)
8614             my_java_arch=sparcv9
8615             ;;
8616         x86_64)
8617             my_java_arch=amd64
8618             ;;
8619         *)
8620             my_java_arch=$host_cpu
8621             ;;
8622         esac
8623         # This is where JDK9 puts the library
8624         if test -e "$JAVA_HOME/lib/libjawt.so"; then
8625             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
8626         else
8627             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
8628         fi
8629         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
8630     fi
8631     AC_MSG_RESULT([$JAWTLIB])
8633 AC_SUBST(JAWTLIB)
8635 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
8636     case "$host_os" in
8638     aix*)
8639         JAVAINC="-I$JAVA_HOME/include"
8640         JAVAINC="$JAVAINC -I$JAVA_HOME/include/aix"
8641         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8642         ;;
8644     cygwin*|wsl*)
8645         JAVAINC="-I$JAVA_HOME/include/win32"
8646         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
8647         ;;
8649     darwin*|macos*)
8650         if test -d "$JAVA_HOME/include/darwin"; then
8651             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
8652         else
8653             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
8654         fi
8655         ;;
8657     dragonfly*)
8658         JAVAINC="-I$JAVA_HOME/include"
8659         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8660         ;;
8662     freebsd*)
8663         JAVAINC="-I$JAVA_HOME/include"
8664         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
8665         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
8666         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8667         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8668         ;;
8670     k*bsd*-gnu*)
8671         JAVAINC="-I$JAVA_HOME/include"
8672         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8673         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8674         ;;
8676     linux-gnu*)
8677         JAVAINC="-I$JAVA_HOME/include"
8678         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8679         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8680         ;;
8682     *netbsd*)
8683         JAVAINC="-I$JAVA_HOME/include"
8684         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
8685         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8686        ;;
8688     openbsd*)
8689         JAVAINC="-I$JAVA_HOME/include"
8690         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
8691         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8692         ;;
8694     solaris*)
8695         JAVAINC="-I$JAVA_HOME/include"
8696         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
8697         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8698         ;;
8699     esac
8701 SOLARINC="$SOLARINC $JAVAINC"
8703 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8704     JAVA_HOME_FOR_BUILD=$JAVA_HOME
8705     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
8706     JDK_FOR_BUILD=$JDK
8709 AC_SUBST(JAVACFLAGS)
8710 AC_SUBST(JAVACOMPILER)
8711 AC_SUBST(JAVAINTERPRETER)
8712 AC_SUBST(JAVAIFLAGS)
8713 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
8714 AC_SUBST(JAVA_CLASSPATH_NOT_SET)
8715 AC_SUBST(JAVA_HOME)
8716 AC_SUBST(JAVA_HOME_FOR_BUILD)
8717 AC_SUBST(JDK)
8718 AC_SUBST(JDK_FOR_BUILD)
8719 AC_SUBST(JAVA_SOURCE_VER)
8720 AC_SUBST(JAVA_TARGET_VER)
8723 dnl ===================================================================
8724 dnl Export file validation
8725 dnl ===================================================================
8726 AC_MSG_CHECKING([whether to enable export file validation])
8727 if test "$with_export_validation" != "no"; then
8728     if test -z "$ENABLE_JAVA"; then
8729         if test "$with_export_validation" = "yes"; then
8730             AC_MSG_ERROR([requested, but Java is disabled])
8731         else
8732             AC_MSG_RESULT([no, as Java is disabled])
8733         fi
8734     elif ! test -d "${SRC_ROOT}/schema"; then
8735         if test "$with_export_validation" = "yes"; then
8736             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
8737         else
8738             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
8739         fi
8740     else
8741         AC_MSG_RESULT([yes])
8742         AC_DEFINE(HAVE_EXPORT_VALIDATION)
8744         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
8745         if test -z "$ODFVALIDATOR"; then
8746             # remember to download the ODF toolkit with validator later
8747             AC_MSG_NOTICE([no odfvalidator found, will download it])
8748             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
8749             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
8751             # and fetch name of odfvalidator jar name from download.lst
8752             ODFVALIDATOR_JAR=`$SED -n -e "s/export *ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8753             AC_SUBST(ODFVALIDATOR_JAR)
8755             if test -z "$ODFVALIDATOR_JAR"; then
8756                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
8757             fi
8758         fi
8759         if test "$build_os" = "cygwin"; then
8760             # In case of Cygwin it will be executed from Windows,
8761             # so we need to run bash and absolute path to validator
8762             # so instead of "odfvalidator" it will be
8763             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8764             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
8765         else
8766             ODFVALIDATOR="sh $ODFVALIDATOR"
8767         fi
8768         AC_SUBST(ODFVALIDATOR)
8771         AC_PATH_PROGS(OFFICEOTRON, officeotron)
8772         if test -z "$OFFICEOTRON"; then
8773             # remember to download the officeotron with validator later
8774             AC_MSG_NOTICE([no officeotron found, will download it])
8775             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
8776             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
8778             # and fetch name of officeotron jar name from download.lst
8779             OFFICEOTRON_JAR=`$SED -n -e "s/export *OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8780             AC_SUBST(OFFICEOTRON_JAR)
8782             if test -z "$OFFICEOTRON_JAR"; then
8783                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
8784             fi
8785         else
8786             # check version of existing officeotron
8787             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
8788             if test 0"$OFFICEOTRON_VER" -lt 704; then
8789                 AC_MSG_ERROR([officeotron too old])
8790             fi
8791         fi
8792         if test "$build_os" = "cygwin"; then
8793             # In case of Cygwin it will be executed from Windows,
8794             # so we need to run bash and absolute path to validator
8795             # so instead of "odfvalidator" it will be
8796             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8797             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
8798         else
8799             OFFICEOTRON="sh $OFFICEOTRON"
8800         fi
8801     fi
8802     AC_SUBST(OFFICEOTRON)
8803 else
8804     AC_MSG_RESULT([no])
8807 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
8808 if test "$with_bffvalidator" != "no"; then
8809     AC_DEFINE(HAVE_BFFVALIDATOR)
8811     if test "$with_export_validation" = "no"; then
8812         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
8813     fi
8815     if test "$with_bffvalidator" = "yes"; then
8816         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
8817     else
8818         BFFVALIDATOR="$with_bffvalidator"
8819     fi
8821     if test "$build_os" = "cygwin"; then
8822         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
8823             AC_MSG_RESULT($BFFVALIDATOR)
8824         else
8825             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8826         fi
8827     elif test -n "$BFFVALIDATOR"; then
8828         # We are not in Cygwin but need to run Windows binary with wine
8829         AC_PATH_PROGS(WINE, wine)
8831         # so swap in a shell wrapper that converts paths transparently
8832         BFFVALIDATOR_EXE="$BFFVALIDATOR"
8833         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
8834         AC_SUBST(BFFVALIDATOR_EXE)
8835         AC_MSG_RESULT($BFFVALIDATOR)
8836     else
8837         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8838     fi
8839     AC_SUBST(BFFVALIDATOR)
8840 else
8841     AC_MSG_RESULT([no])
8844 dnl ===================================================================
8845 dnl Check for C preprocessor to use
8846 dnl ===================================================================
8847 AC_MSG_CHECKING([which C preprocessor to use in idlc])
8848 SYSTEM_UCPP_IS_GCC=
8849 if test -n "$with_idlc_cpp"; then
8850     AC_MSG_RESULT([$with_idlc_cpp])
8851     AC_PATH_PROG(SYSTEM_UCPP, $with_idlc_cpp)
8852     AC_MSG_CHECKING([if $with_idlc_cpp is GCC CPP])
8853     # ucpp will accept -v (to output version), warn about the others as unknown
8854     # and return 1 (due to -v)
8855     # gcc will accept -v (as verbose), --version (to output version) and -nostdinc
8856     # and return 0 (due to --version ) if all options are supported
8857     $SYSTEM_UCPP -v --version -nostdinc >/dev/null 2>/dev/null
8858     if test $? -eq 0;  then
8859         SYSTEM_UCPP_IS_GCC=TRUE
8860         AC_MSG_RESULT([yes])
8861     else
8862         AC_MSG_RESULT([no])
8863     fi
8864 else
8865     AC_MSG_RESULT([ucpp])
8866     AC_MSG_CHECKING([which ucpp to use])
8867     if test -n "$with_system_ucpp" -a "$with_system_ucpp" != "no"; then
8868         AC_MSG_RESULT([external])
8869         AC_PATH_PROG(SYSTEM_UCPP, ucpp)
8870     else
8871         AC_MSG_RESULT([internal])
8872         BUILD_TYPE="$BUILD_TYPE UCPP"
8873     fi
8875 AC_SUBST(SYSTEM_UCPP)
8876 AC_SUBST(SYSTEM_UCPP_IS_GCC)
8878 dnl ===================================================================
8879 dnl Check for epm (not needed for Windows)
8880 dnl ===================================================================
8881 AC_MSG_CHECKING([whether to enable EPM for packing])
8882 if test "$enable_epm" = "yes"; then
8883     AC_MSG_RESULT([yes])
8884     if test "$_os" != "WINNT"; then
8885         if test $_os = Darwin; then
8886             EPM=internal
8887         elif test -n "$with_epm"; then
8888             EPM=$with_epm
8889         else
8890             AC_PATH_PROG(EPM, epm, no)
8891         fi
8892         if test "$EPM" = "no" -o "$EPM" = "internal"; then
8893             AC_MSG_NOTICE([EPM will be built.])
8894             BUILD_TYPE="$BUILD_TYPE EPM"
8895             EPM=${WORKDIR}/UnpackedTarball/epm/epm
8896         else
8897             # Gentoo has some epm which is something different...
8898             AC_MSG_CHECKING([whether the found epm is the right epm])
8899             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
8900                 AC_MSG_RESULT([yes])
8901             else
8902                 AC_MSG_ERROR([no. Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8903             fi
8904             AC_MSG_CHECKING([epm version])
8905             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
8906             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
8907                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
8908                 AC_MSG_RESULT([OK, >= 3.7])
8909             else
8910                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
8911                 AC_MSG_ERROR([Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8912             fi
8913         fi
8914     fi
8916     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
8917         AC_MSG_CHECKING([for rpm])
8918         for a in "$RPM" rpmbuild rpm; do
8919             $a --usage >/dev/null 2> /dev/null
8920             if test $? -eq 0; then
8921                 RPM=$a
8922                 break
8923             else
8924                 $a --version >/dev/null 2> /dev/null
8925                 if test $? -eq 0; then
8926                     RPM=$a
8927                     break
8928                 fi
8929             fi
8930         done
8931         if test -z "$RPM"; then
8932             AC_MSG_ERROR([not found])
8933         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
8934             RPM_PATH=`which $RPM`
8935             AC_MSG_RESULT([$RPM_PATH])
8936             SCPDEFS="$SCPDEFS -DWITH_RPM"
8937         else
8938             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
8939         fi
8940     fi
8941     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
8942         AC_PATH_PROG(DPKG, dpkg, no)
8943         if test "$DPKG" = "no"; then
8944             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
8945         fi
8946     fi
8947     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
8948        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
8949         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
8950             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
8951                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
8952                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
8953                     AC_MSG_RESULT([yes])
8954                 else
8955                     AC_MSG_RESULT([no])
8956                     if echo "$PKGFORMAT" | $GREP -q rpm; then
8957                         _pt="rpm"
8958                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
8959                         add_warning "the rpms will need to be installed with --nodeps"
8960                     else
8961                         _pt="pkg"
8962                     fi
8963                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
8964                     add_warning "the ${_pt}s will not be relocatable"
8965                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
8966                                  relocation will work, you need to patch your epm with the
8967                                  patch in epm/epm-3.7.patch or build with
8968                                  --with-epm=internal which will build a suitable epm])
8969                 fi
8970             fi
8971         fi
8972     fi
8973     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
8974         AC_PATH_PROG(PKGMK, pkgmk, no)
8975         if test "$PKGMK" = "no"; then
8976             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
8977         fi
8978     fi
8979     AC_SUBST(RPM)
8980     AC_SUBST(DPKG)
8981     AC_SUBST(PKGMK)
8982 else
8983     for i in $PKGFORMAT; do
8984         case "$i" in
8985         aix | bsd | deb | pkg | rpm | native | portable)
8986             AC_MSG_ERROR(
8987                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
8988             ;;
8989         esac
8990     done
8991     AC_MSG_RESULT([no])
8992     EPM=NO
8994 AC_SUBST(EPM)
8996 ENABLE_LWP=
8997 if test "$enable_lotuswordpro" = "yes"; then
8998     ENABLE_LWP="TRUE"
9000 AC_SUBST(ENABLE_LWP)
9002 dnl ===================================================================
9003 dnl Check for building ODK
9004 dnl ===================================================================
9005 if test "$enable_odk" != yes; then
9006     unset DOXYGEN
9007 else
9008     if test "$with_doxygen" = no; then
9009         AC_MSG_CHECKING([for doxygen])
9010         unset DOXYGEN
9011         AC_MSG_RESULT([no])
9012     else
9013         if test "$with_doxygen" = yes; then
9014             AC_PATH_PROG([DOXYGEN], [doxygen])
9015             if test -z "$DOXYGEN"; then
9016                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
9017             fi
9018             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
9019                 if ! dot -V 2>/dev/null; then
9020                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
9021                 fi
9022             fi
9023         else
9024             AC_MSG_CHECKING([for doxygen])
9025             DOXYGEN=$with_doxygen
9026             AC_MSG_RESULT([$DOXYGEN])
9027         fi
9028         if test -n "$DOXYGEN"; then
9029             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
9030             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
9031             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
9032                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
9033             fi
9034         fi
9035     fi
9037 AC_SUBST([DOXYGEN])
9039 AC_MSG_CHECKING([whether to build the ODK])
9040 if test "$enable_odk" = yes; then
9041     AC_MSG_RESULT([yes])
9042     BUILD_TYPE="$BUILD_TYPE ODK"
9043 else
9044     AC_MSG_RESULT([no])
9047 dnl ===================================================================
9048 dnl Check for system zlib
9049 dnl ===================================================================
9050 if test "$with_system_zlib" = "auto"; then
9051     case "$_os" in
9052     WINNT)
9053         with_system_zlib="$with_system_libs"
9054         ;;
9055     *)
9056         if test "$enable_fuzzers" != "yes"; then
9057             with_system_zlib=yes
9058         else
9059             with_system_zlib=no
9060         fi
9061         ;;
9062     esac
9065 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
9066 dnl and has no pkg-config for it at least on some tinderboxes,
9067 dnl so leaving that out for now
9068 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
9069 AC_MSG_CHECKING([which zlib to use])
9070 if test "$with_system_zlib" = "yes"; then
9071     AC_MSG_RESULT([external])
9072     SYSTEM_ZLIB=TRUE
9073     AC_CHECK_HEADER(zlib.h, [],
9074         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
9075     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
9076         [AC_MSG_ERROR(zlib not found or functional)], [])
9077 else
9078     AC_MSG_RESULT([internal])
9079     SYSTEM_ZLIB=
9080     BUILD_TYPE="$BUILD_TYPE ZLIB"
9081     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
9082     if test "$COM" = "MSC"; then
9083         ZLIB_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/zlib.lib"
9084     else
9085         ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
9086     fi
9088 AC_SUBST(ZLIB_CFLAGS)
9089 AC_SUBST(ZLIB_LIBS)
9090 AC_SUBST(SYSTEM_ZLIB)
9092 dnl ===================================================================
9093 dnl Check for system jpeg
9094 dnl ===================================================================
9095 AC_MSG_CHECKING([which libjpeg to use])
9096 if test "$with_system_jpeg" = "yes"; then
9097     AC_MSG_RESULT([external])
9098     SYSTEM_LIBJPEG=TRUE
9099     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
9100         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
9101     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
9102         [AC_MSG_ERROR(jpeg library not found or functional)], [])
9103 else
9104     SYSTEM_LIBJPEG=
9105     AC_MSG_RESULT([internal, libjpeg-turbo])
9106     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
9108     case "$host_cpu" in
9109     x86_64 | amd64 | i*86 | x86 | ia32)
9110         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
9111         if test -z "$NASM" -a "$build_os" = "cygwin"; then
9112             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
9113                 NASM="$LODE_HOME/opt/bin/nasm"
9114             elif test -x "/opt/lo/bin/nasm"; then
9115                 NASM="/opt/lo/bin/nasm"
9116             fi
9117         fi
9119         if test -n "$NASM"; then
9120             AC_MSG_CHECKING([for object file format of host system])
9121             case "$host_os" in
9122               cygwin* | mingw* | pw32* | wsl*)
9123                 case "$host_cpu" in
9124                   x86_64)
9125                     objfmt='Win64-COFF'
9126                     ;;
9127                   *)
9128                     objfmt='Win32-COFF'
9129                     ;;
9130                 esac
9131               ;;
9132               msdosdjgpp* | go32*)
9133                 objfmt='COFF'
9134               ;;
9135               os2-emx*) # not tested
9136                 objfmt='MSOMF' # obj
9137               ;;
9138               linux*coff* | linux*oldld*)
9139                 objfmt='COFF' # ???
9140               ;;
9141               linux*aout*)
9142                 objfmt='a.out'
9143               ;;
9144               linux*)
9145                 case "$host_cpu" in
9146                   x86_64)
9147                     objfmt='ELF64'
9148                     ;;
9149                   *)
9150                     objfmt='ELF'
9151                     ;;
9152                 esac
9153               ;;
9154               kfreebsd* | freebsd* | netbsd* | openbsd*)
9155                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9156                   objfmt='BSD-a.out'
9157                 else
9158                   case "$host_cpu" in
9159                     x86_64 | amd64)
9160                       objfmt='ELF64'
9161                       ;;
9162                     *)
9163                       objfmt='ELF'
9164                       ;;
9165                   esac
9166                 fi
9167               ;;
9168               solaris* | sunos* | sysv* | sco*)
9169                 case "$host_cpu" in
9170                   x86_64)
9171                     objfmt='ELF64'
9172                     ;;
9173                   *)
9174                     objfmt='ELF'
9175                     ;;
9176                 esac
9177               ;;
9178               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9179                 case "$host_cpu" in
9180                   x86_64)
9181                     objfmt='Mach-O64'
9182                     ;;
9183                   *)
9184                     objfmt='Mach-O'
9185                     ;;
9186                 esac
9187               ;;
9188               *)
9189                 objfmt='ELF ?'
9190               ;;
9191             esac
9193             AC_MSG_RESULT([$objfmt])
9194             if test "$objfmt" = 'ELF ?'; then
9195               objfmt='ELF'
9196               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9197             fi
9199             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9200             case "$objfmt" in
9201               MSOMF)      NAFLAGS='-fobj -DOBJ32 -DPIC';;
9202               Win32-COFF) NAFLAGS='-fwin32 -DWIN32 -DPIC';;
9203               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__ -DPIC';;
9204               COFF)       NAFLAGS='-fcoff -DCOFF -DPIC';;
9205               a.out)      NAFLAGS='-faout -DAOUT -DPIC';;
9206               BSD-a.out)  NAFLAGS='-faoutb -DAOUT -DPIC';;
9207               ELF)        NAFLAGS='-felf -DELF -DPIC';;
9208               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__ -DPIC';;
9209               RDF)        NAFLAGS='-frdf -DRDF -DPIC';;
9210               Mach-O)     NAFLAGS='-fmacho -DMACHO -DPIC';;
9211               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__ -DPIC';;
9212             esac
9213             AC_MSG_RESULT([$NAFLAGS])
9215             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9216             cat > conftest.asm << EOF
9217             [%line __oline__ "configure"
9218                     section .text
9219                     global  _main,main
9220             _main:
9221             main:   xor     eax,eax
9222                     ret
9223             ]
9225             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9226             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9227               AC_MSG_RESULT(yes)
9228             else
9229               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9230               cat conftest.asm >&AS_MESSAGE_LOG_FD
9231               rm -rf conftest*
9232               AC_MSG_RESULT(no)
9233               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9234               NASM=""
9235             fi
9237         fi
9239         if test -z "$NASM"; then
9240 cat << _EOS
9241 ****************************************************************************
9242 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9243 To get one please:
9245 _EOS
9246             if test "$build_os" = "cygwin"; then
9247 cat << _EOS
9248 install a pre-compiled binary for Win32
9250 mkdir -p /opt/lo/bin
9251 cd /opt/lo/bin
9252 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9253 chmod +x nasm
9255 or get and install one from http://www.nasm.us/
9257 Then re-run autogen.sh
9259 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9260 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`which nasm\` finds it.
9262 _EOS
9263             else
9264 cat << _EOS
9265 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md
9267 _EOS
9268             fi
9269             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9270             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9271         fi
9272       ;;
9273     esac
9276 AC_SUBST(NASM)
9277 AC_SUBST(NAFLAGS)
9278 AC_SUBST(LIBJPEG_CFLAGS)
9279 AC_SUBST(LIBJPEG_LIBS)
9280 AC_SUBST(SYSTEM_LIBJPEG)
9282 dnl ===================================================================
9283 dnl Check for system clucene
9284 dnl ===================================================================
9285 dnl we should rather be using
9286 dnl libo_CHECK_SYSTEM_MODULE([clucence],[CLUCENE],[liblucence-core]) here
9287 dnl but the contribs-lib check seems tricky
9288 AC_MSG_CHECKING([which clucene to use])
9289 if test "$test_clucene" = yes; then
9290 if test "$with_system_clucene" = "yes"; then
9291     AC_MSG_RESULT([external])
9292     SYSTEM_CLUCENE=TRUE
9293     PKG_CHECK_MODULES(CLUCENE, libclucene-core)
9294     CLUCENE_CFLAGS=[$(printf '%s' "$CLUCENE_CFLAGS" | sed -e 's@-I[^ ]*/CLucene/ext@@' -e "s/-I/${ISYSTEM?}/g")]
9295     FilterLibs "${CLUCENE_LIBS}"
9296     CLUCENE_LIBS="${filteredlibs}"
9297     AC_LANG_PUSH([C++])
9298     save_CXXFLAGS=$CXXFLAGS
9299     save_CPPFLAGS=$CPPFLAGS
9300     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9301     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9302     dnl http://sourceforge.net/tracker/index.php?func=detail&aid=3392466&group_id=80013&atid=558446
9303     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9304     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9305                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9306     CXXFLAGS=$save_CXXFLAGS
9307     CPPFLAGS=$save_CPPFLAGS
9308     AC_LANG_POP([C++])
9310     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9311 else
9312     AC_MSG_RESULT([internal])
9313     SYSTEM_CLUCENE=
9314     BUILD_TYPE="$BUILD_TYPE CLUCENE"
9316 else
9317     AC_MSG_RESULT([not needed])
9319 AC_SUBST(SYSTEM_CLUCENE)
9320 AC_SUBST(CLUCENE_CFLAGS)
9321 AC_SUBST(CLUCENE_LIBS)
9323 dnl ===================================================================
9324 dnl Check for system expat
9325 dnl ===================================================================
9326 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9328 dnl ===================================================================
9329 dnl Check for system xmlsec
9330 dnl ===================================================================
9331 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.28])
9333 AC_MSG_CHECKING([whether to enable Embedded OpenType support])
9334 if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_eot" = "yes"; then
9335     ENABLE_EOT="TRUE"
9336     AC_DEFINE([ENABLE_EOT])
9337     AC_MSG_RESULT([yes])
9339     libo_CHECK_SYSTEM_MODULE([libeot],[LIBEOT],[libeot >= 0.01])
9340 else
9341     ENABLE_EOT=
9342     AC_MSG_RESULT([no])
9344 AC_SUBST([ENABLE_EOT])
9346 dnl ===================================================================
9347 dnl Check for DLP libs
9348 dnl ===================================================================
9349 AS_IF([test "$COM" = "MSC"],
9350       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9351       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9353 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1],["-I${WORKDIR}/UnpackedTarball/librevenge/inc"],["-L${librevenge_libdir} -lrevenge-0.0"])
9355 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9357 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9359 AS_IF([test "$COM" = "MSC"],
9360       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9361       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9363 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10],["-I${WORKDIR}/UnpackedTarball/libwpd/inc"],["-L${libwpd_libdir} -lwpd-0.10"])
9365 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9367 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9368 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.12])
9370 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9372 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9374 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9376 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.1])
9377 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.21])
9379 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9380 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10])
9382 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9384 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9385 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9387 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9389 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9391 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9393 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9395 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9396 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9398 dnl ===================================================================
9399 dnl Check for system lcms2
9400 dnl ===================================================================
9401 if test "$with_system_lcms2" != "yes"; then
9402     SYSTEM_LCMS2=
9404 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2],["-I${WORKDIR}/UnpackedTarball/lcms2/include"],["-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"])
9405 if test "$GCC" = "yes"; then
9406     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9408 if test "$COM" = "MSC"; then # override the above
9409     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9412 dnl ===================================================================
9413 dnl Check for system cppunit
9414 dnl ===================================================================
9415 if test "$_os" != "Android" ; then
9416     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9419 dnl ===================================================================
9420 dnl Check whether freetype is available
9422 dnl FreeType has 3 different kinds of versions
9423 dnl * release, like 2.4.10
9424 dnl * libtool, like 13.0.7 (this what pkg-config returns)
9425 dnl * soname
9426 dnl FreeType's docs/VERSION.DLL provides a table mapping between the three
9428 dnl 9.9.3 is 2.2.0
9429 dnl When the minimal version is at least 2.8.1, remove Skia's check down below.
9430 dnl ===================================================================
9431 if test "$test_freetype" != no; then
9432     if test "x$ac_config_site_64bit_host" = xYES; then
9433         FREETYPE_LIBS_INTERNAL="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9434     else
9435         FREETYPE_LIBS_INTERNAL="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9436     fi
9438 libo_CHECK_SYSTEM_MODULE([freetype],[FREETYPE],[freetype2 >= 9.9.3],
9439     ["${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"],["$FREETYPE_LIBS_INTERNAL"],TRUE)
9441 # ===================================================================
9442 # Check for system libxslt
9443 # to prevent incompatibilities between internal libxml2 and external libxslt,
9444 # or vice versa, use with_system_libxml here
9445 # ===================================================================
9446 if test "$with_system_libxml" = "auto"; then
9447     case "$_os" in
9448     WINNT|iOS|Android)
9449         with_system_libxml="$with_system_libs"
9450         ;;
9451     Emscripten)
9452         with_system_libxml=no
9453         ;;
9454     *)
9455         if test "$enable_fuzzers" != "yes"; then
9456             with_system_libxml=yes
9457         else
9458             with_system_libxml=no
9459         fi
9460         ;;
9461     esac
9464 AC_MSG_CHECKING([which libxslt to use])
9465 if test "$with_system_libxml" = "yes"; then
9466     AC_MSG_RESULT([external])
9467     SYSTEM_LIBXSLT=TRUE
9468     if test "$_os" = "Darwin"; then
9469         dnl make sure to use SDK path
9470         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9471         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9472         dnl omit -L/usr/lib
9473         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9474         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9475     else
9476         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9477         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9478         FilterLibs "${LIBXSLT_LIBS}"
9479         LIBXSLT_LIBS="${filteredlibs}"
9480         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9481         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9482         FilterLibs "${LIBEXSLT_LIBS}"
9483         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9484     fi
9486     dnl Check for xsltproc
9487     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9488     if test "$XSLTPROC" = "no"; then
9489         AC_MSG_ERROR([xsltproc is required])
9490     fi
9491 else
9492     AC_MSG_RESULT([internal])
9493     SYSTEM_LIBXSLT=
9494     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9496 AC_SUBST(SYSTEM_LIBXSLT)
9497 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9498     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9500 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9502 AC_SUBST(LIBEXSLT_CFLAGS)
9503 AC_SUBST(LIBEXSLT_LIBS)
9504 AC_SUBST(LIBXSLT_CFLAGS)
9505 AC_SUBST(LIBXSLT_LIBS)
9506 AC_SUBST(XSLTPROC)
9508 # ===================================================================
9509 # Check for system libxml
9510 # ===================================================================
9511 AC_MSG_CHECKING([which libxml to use])
9512 if test "$with_system_libxml" = "yes"; then
9513     AC_MSG_RESULT([external])
9514     SYSTEM_LIBXML=TRUE
9515     if test "$_os" = "Darwin"; then
9516         dnl make sure to use SDK path
9517         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9518         dnl omit -L/usr/lib
9519         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9520     elif test $_os = iOS; then
9521         dnl make sure to use SDK path
9522         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9523         LIBXML_CFLAGS="-I$usr/include/libxml2"
9524         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9525     else
9526         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9527         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9528         FilterLibs "${LIBXML_LIBS}"
9529         LIBXML_LIBS="${filteredlibs}"
9530     fi
9532     dnl Check for xmllint
9533     AC_PATH_PROG(XMLLINT, xmllint, no)
9534     if test "$XMLLINT" = "no"; then
9535         AC_MSG_ERROR([xmllint is required])
9536     fi
9537 else
9538     AC_MSG_RESULT([internal])
9539     SYSTEM_LIBXML=
9540     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9541     if test "$COM" = "MSC"; then
9542         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9543     fi
9544     if test "$COM" = "MSC"; then
9545         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9546     else
9547         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9548         if test "$DISABLE_DYNLOADING" = TRUE; then
9549             LIBXML_LIBS="$LIBXML_LIBS -lm"
9550         fi
9551     fi
9552     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9554 AC_SUBST(SYSTEM_LIBXML)
9555 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9556     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9558 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9559 AC_SUBST(LIBXML_CFLAGS)
9560 AC_SUBST(LIBXML_LIBS)
9561 AC_SUBST(XMLLINT)
9563 # =====================================================================
9564 # Checking for a Python interpreter with version >= 3.3.
9565 # Optionally user can pass an option to configure, i. e.
9566 # ./configure PYTHON=/usr/bin/python
9567 # =====================================================================
9568 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9569     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9570     # unless PYTHON is defined as above which allows 'system'
9571     enable_python=internal
9573 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9574     if test -n "$PYTHON"; then
9575         PYTHON_FOR_BUILD=$PYTHON
9576     else
9577         # This allows a lack of system python with no error, we use internal one in that case.
9578         AM_PATH_PYTHON([3.3],, [:])
9579         # Clean PYTHON_VERSION checked below if cross-compiling
9580         PYTHON_VERSION=""
9581         if test "$PYTHON" != ":"; then
9582             PYTHON_FOR_BUILD=$PYTHON
9583         fi
9584     fi
9586 AC_SUBST(PYTHON_FOR_BUILD)
9588 # Checks for Python to use for Pyuno
9589 AC_MSG_CHECKING([which Python to use for Pyuno])
9590 case "$enable_python" in
9591 no|disable)
9592     if test -z $PYTHON_FOR_BUILD; then
9593         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9594         # requirement from the choice whether to include Python stuff in the installer, but why
9595         # bother?
9596         if test "$cross_compiling" = yes; then
9597             enable_python=system
9598         else
9599             AC_MSG_ERROR([Python is required at build time.])
9600         fi
9601     fi
9602     enable_python=no
9603     AC_MSG_RESULT([none])
9604     ;;
9605 ""|yes|auto)
9606     if test "$DISABLE_SCRIPTING" = TRUE -a -n "$PYTHON_FOR_BUILD"; then
9607         AC_MSG_RESULT([no, overridden by --disable-scripting])
9608         enable_python=no
9609     elif test $build_os = cygwin; then
9610         dnl When building on Windows we don't attempt to use any installed
9611         dnl "system"  Python.
9612         AC_MSG_RESULT([fully internal])
9613         enable_python=internal
9614     elif test "$cross_compiling" = yes; then
9615         AC_MSG_RESULT([system])
9616         enable_python=system
9617     else
9618         # Unset variables set by the above AM_PATH_PYTHON so that
9619         # we actually do check anew.
9620         AC_MSG_RESULT([])
9621         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
9622         AM_PATH_PYTHON([3.3],, [:])
9623         AC_MSG_CHECKING([which Python to use for Pyuno])
9624         if test "$PYTHON" = ":"; then
9625             if test -z "$PYTHON_FOR_BUILD"; then
9626                 AC_MSG_RESULT([fully internal])
9627             else
9628                 AC_MSG_RESULT([internal])
9629             fi
9630             enable_python=internal
9631         else
9632             AC_MSG_RESULT([system])
9633             enable_python=system
9634         fi
9635     fi
9636     ;;
9637 internal)
9638     AC_MSG_RESULT([internal])
9639     ;;
9640 fully-internal)
9641     AC_MSG_RESULT([fully internal])
9642     enable_python=internal
9643     ;;
9644 system)
9645     AC_MSG_RESULT([system])
9646     if test "$_os" = Darwin -a -z "$PYTHON"; then
9647         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
9648     fi
9649     ;;
9651     AC_MSG_ERROR([Incorrect --enable-python option])
9652     ;;
9653 esac
9655 if test $enable_python != no; then
9656     BUILD_TYPE="$BUILD_TYPE PYUNO"
9659 if test $enable_python = system; then
9660     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
9661         # Fallback: Accept these in the environment, or as set above
9662         # for MacOSX.
9663         :
9664     elif test "$cross_compiling" != yes; then
9665         # Unset variables set by the above AM_PATH_PYTHON so that
9666         # we actually do check anew.
9667         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
9668         # This causes an error if no python command is found
9669         AM_PATH_PYTHON([3.3])
9670         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
9671         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
9672         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
9673         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
9674         if test -z "$PKG_CONFIG"; then
9675             PYTHON_CFLAGS="-I$python_include"
9676             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9677         elif $PKG_CONFIG --exists python-$python_version-embed; then
9678             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
9679             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
9680         elif $PKG_CONFIG --exists python-$python_version; then
9681             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
9682             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
9683         else
9684             PYTHON_CFLAGS="-I$python_include"
9685             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9686         fi
9687         FilterLibs "${PYTHON_LIBS}"
9688         PYTHON_LIBS="${filteredlibs}"
9689     else
9690         dnl How to find out the cross-compilation Python installation path?
9691         AC_MSG_CHECKING([for python version])
9692         AS_IF([test -n "$PYTHON_VERSION"],
9693               [AC_MSG_RESULT([$PYTHON_VERSION])],
9694               [AC_MSG_RESULT([not found])
9695                AC_MSG_ERROR([no usable python found])])
9696         test -n "$PYTHON_CFLAGS" && break
9697     fi
9699     dnl Check if the headers really work
9700     save_CPPFLAGS="$CPPFLAGS"
9701     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
9702     AC_CHECK_HEADER(Python.h)
9703     CPPFLAGS="$save_CPPFLAGS"
9705     # let the PYTHON_FOR_BUILD match the same python installation that
9706     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
9707     # better for PythonTests.
9708     PYTHON_FOR_BUILD=$PYTHON
9711 if test "$with_lxml" != no; then
9712     if test -z "$PYTHON_FOR_BUILD"; then
9713         case $build_os in
9714             cygwin)
9715                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
9716                 ;;
9717             *)
9718                 if test "$cross_compiling" != yes ; then
9719                     BUILD_TYPE="$BUILD_TYPE LXML"
9720                 fi
9721                 ;;
9722         esac
9723     else
9724         AC_MSG_CHECKING([for python lxml])
9725         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
9726             AC_MSG_RESULT([yes])
9727         else
9728             case $build_os in
9729                 cygwin)
9730                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
9731                     ;;
9732                 *)
9733                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
9734                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
9735                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
9736                         else
9737                             BUILD_TYPE="$BUILD_TYPE LXML"
9738                             AC_MSG_RESULT([no, using internal lxml])
9739                         fi
9740                     else
9741                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
9742                     fi
9743                     ;;
9744             esac
9745         fi
9746     fi
9749 dnl By now enable_python should be "system", "internal" or "no"
9750 case $enable_python in
9751 system)
9752     SYSTEM_PYTHON=TRUE
9754     if test "x$ac_cv_header_Python_h" != "xyes"; then
9755        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
9756     fi
9758     AC_LANG_PUSH(C)
9759     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
9760     AC_MSG_CHECKING([for correct python library version])
9761        AC_RUN_IFELSE([AC_LANG_SOURCE([[
9762 #include <Python.h>
9764 int main(int argc, char **argv) {
9765    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
9766    else return 1;
9768        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
9769     AC_LANG_POP(C)
9771     dnl FIXME Check if the Python library can be linked with, too?
9772     ;;
9774 internal)
9775     SYSTEM_PYTHON=
9776     PYTHON_VERSION_MAJOR=3
9777     PYTHON_VERSION_MINOR=8
9778     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.16
9779     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
9780         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
9781     fi
9782     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
9783     BUILD_TYPE="$BUILD_TYPE PYTHON"
9784     if test "$OS" = LINUX -o "$OS" = WNT ; then
9785         BUILD_TYPE="$BUILD_TYPE LIBFFI"
9786     fi
9787     # Embedded Python dies without Home set
9788     if test "$HOME" = ""; then
9789         export HOME=""
9790     fi
9791     ;;
9793     DISABLE_PYTHON=TRUE
9794     SYSTEM_PYTHON=
9795     ;;
9797     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
9798     ;;
9799 esac
9801 AC_SUBST(DISABLE_PYTHON)
9802 AC_SUBST(SYSTEM_PYTHON)
9803 AC_SUBST(PYTHON_CFLAGS)
9804 AC_SUBST(PYTHON_LIBS)
9805 AC_SUBST(PYTHON_VERSION)
9806 AC_SUBST(PYTHON_VERSION_MAJOR)
9807 AC_SUBST(PYTHON_VERSION_MINOR)
9809 AC_MSG_CHECKING([whether to build LibreLogo])
9810 case "$enable_python" in
9811 no|disable)
9812     AC_MSG_RESULT([no; Python disabled])
9813     ;;
9815     if test "${enable_librelogo}" = "no"; then
9816         AC_MSG_RESULT([no])
9817     else
9818         AC_MSG_RESULT([yes])
9819         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
9820         AC_DEFINE([ENABLE_LIBRELOGO],1)
9821     fi
9822     ;;
9823 esac
9824 AC_SUBST(ENABLE_LIBRELOGO)
9826 ENABLE_MARIADBC=
9827 MARIADBC_MAJOR=1
9828 MARIADBC_MINOR=0
9829 MARIADBC_MICRO=2
9830 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
9831 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
9832     ENABLE_MARIADBC=TRUE
9833     AC_MSG_RESULT([yes])
9834     BUILD_TYPE="$BUILD_TYPE MARIADBC"
9835 else
9836     AC_MSG_RESULT([no])
9838 AC_SUBST(ENABLE_MARIADBC)
9839 AC_SUBST(MARIADBC_MAJOR)
9840 AC_SUBST(MARIADBC_MINOR)
9841 AC_SUBST(MARIADBC_MICRO)
9843 if test "$ENABLE_MARIADBC" = "TRUE"; then
9844     dnl ===================================================================
9845     dnl Check for system MariaDB
9846     dnl ===================================================================
9847     AC_MSG_CHECKING([which MariaDB to use])
9848     if test "$with_system_mariadb" = "yes"; then
9849         AC_MSG_RESULT([external])
9850         SYSTEM_MARIADB_CONNECTOR_C=TRUE
9851         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
9852         if test -z "$MARIADBCONFIG"; then
9853             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
9854             if test -z "$MARIADBCONFIG"; then
9855                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
9856                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
9857             fi
9858         fi
9859         AC_MSG_CHECKING([MariaDB version])
9860         MARIADB_VERSION=`$MARIADBCONFIG --version`
9861         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
9862         if test "$MARIADB_MAJOR" -ge "5"; then
9863             AC_MSG_RESULT([OK])
9864         else
9865             AC_MSG_ERROR([too old, use 5.0.x or later])
9866         fi
9867         AC_MSG_CHECKING([for MariaDB Client library])
9868         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
9869         if test "$COM_IS_CLANG" = TRUE; then
9870             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
9871         fi
9872         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
9873         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
9874         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
9875         dnl linux32:
9876         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
9877             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
9878             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
9879                 | sed -e 's|/lib64/|/lib/|')
9880         fi
9881         FilterLibs "${MARIADB_LIBS}"
9882         MARIADB_LIBS="${filteredlibs}"
9883         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
9884         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
9885         if test "$enable_bundle_mariadb" = "yes"; then
9886             AC_MSG_RESULT([yes])
9887             BUNDLE_MARIADB_CONNECTOR_C=TRUE
9888             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
9890 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
9892 /g' | grep -E '(mysqlclient|mariadb)')
9893             if test "$_os" = "Darwin"; then
9894                 LIBMARIADB=${LIBMARIADB}.dylib
9895             elif test "$_os" = "WINNT"; then
9896                 LIBMARIADB=${LIBMARIADB}.dll
9897             else
9898                 LIBMARIADB=${LIBMARIADB}.so
9899             fi
9900             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
9901             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
9902             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
9903                 AC_MSG_RESULT([found.])
9904                 PathFormat "$LIBMARIADB_PATH"
9905                 LIBMARIADB_PATH="$formatted_path"
9906             else
9907                 AC_MSG_ERROR([not found.])
9908             fi
9909         else
9910             AC_MSG_RESULT([no])
9911             BUNDLE_MARIADB_CONNECTOR_C=
9912         fi
9913     else
9914         AC_MSG_RESULT([internal])
9915         SYSTEM_MARIADB_CONNECTOR_C=
9916         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
9917         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
9918         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
9919     fi
9921     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
9922     AC_SUBST(MARIADB_CFLAGS)
9923     AC_SUBST(MARIADB_LIBS)
9924     AC_SUBST(LIBMARIADB)
9925     AC_SUBST(LIBMARIADB_PATH)
9926     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
9929 dnl ===================================================================
9930 dnl Check for system hsqldb
9931 dnl ===================================================================
9932 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
9933     HSQLDB_USE_JDBC_4_1=
9934     AC_MSG_CHECKING([which hsqldb to use])
9935     if test "$with_system_hsqldb" = "yes"; then
9936         AC_MSG_RESULT([external])
9937         SYSTEM_HSQLDB=TRUE
9938         if test -z $HSQLDB_JAR; then
9939             HSQLDB_JAR=/usr/share/java/hsqldb.jar
9940         fi
9941         if ! test -f $HSQLDB_JAR; then
9942                AC_MSG_ERROR(hsqldb.jar not found.)
9943         fi
9944         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
9945         export HSQLDB_JAR
9946         if $PERL -e \
9947            'use Archive::Zip;
9948             my $file = "$ENV{'HSQLDB_JAR'}";
9949             my $zip = Archive::Zip->new( $file );
9950             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
9951             if ( $mf =~ m/Specification-Version: 1.8.*/ )
9952             {
9953                 push @l, split(/\n/, $mf);
9954                 foreach my $line (@l)
9955                 {
9956                     if ($line =~ m/Specification-Version:/)
9957                     {
9958                         ($t, $version) = split (/:/,$line);
9959                         $version =~ s/^\s//;
9960                         ($a, $b, $c, $d) = split (/\./,$version);
9961                         if ($c == "0" && $d > "8")
9962                         {
9963                             exit 0;
9964                         }
9965                         else
9966                         {
9967                             exit 1;
9968                         }
9969                     }
9970                 }
9971             }
9972             else
9973             {
9974                 exit 1;
9975             }'; then
9976             AC_MSG_RESULT([yes])
9977         else
9978             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
9979         fi
9980     else
9981         AC_MSG_RESULT([internal])
9982         SYSTEM_HSQLDB=
9983         BUILD_TYPE="$BUILD_TYPE HSQLDB"
9984         NEED_ANT=TRUE
9985         AC_MSG_CHECKING([whether hsqldb should be built with JDBC 4.1])
9986         javanumver=`$JAVAINTERPRETER -version 2>&1 | $AWK -v num=true -f $SRC_ROOT/solenv/bin/getcompver.awk`
9987         if expr "$javanumver" '>=' 000100060000 > /dev/null; then
9988             AC_MSG_RESULT([yes])
9989             HSQLDB_USE_JDBC_4_1=TRUE
9990         else
9991             AC_MSG_RESULT([no])
9992         fi
9993     fi
9994 else
9995     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
9996         BUILD_TYPE="$BUILD_TYPE HSQLDB"
9997     fi
9999 AC_SUBST(SYSTEM_HSQLDB)
10000 AC_SUBST(HSQLDB_JAR)
10001 AC_SUBST([HSQLDB_USE_JDBC_4_1])
10003 dnl ===================================================================
10004 dnl Check for PostgreSQL stuff
10005 dnl ===================================================================
10006 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
10007 if test "x$enable_postgresql_sdbc" != "xno"; then
10008     AC_MSG_RESULT([yes])
10009     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
10011     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
10012         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
10013     fi
10014     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
10015         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
10016     fi
10018     postgres_interface=""
10019     if test "$with_system_postgresql" = "yes"; then
10020         postgres_interface="external PostgreSQL"
10021         SYSTEM_POSTGRESQL=TRUE
10022         if test "$_os" = Darwin; then
10023             supp_path=''
10024             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
10025                 pg_supp_path="$P_SEP$d$pg_supp_path"
10026             done
10027         fi
10028         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
10029         if test -n "$PGCONFIG"; then
10030             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
10031             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
10032         else
10033             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
10034               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
10035               POSTGRESQL_LIB=$POSTGRESQL_LIBS
10036             ],[
10037               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
10038             ])
10039         fi
10040         FilterLibs "${POSTGRESQL_LIB}"
10041         POSTGRESQL_LIB="${filteredlibs}"
10042     else
10043         # if/when anything else than PostgreSQL uses Kerberos,
10044         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
10045         WITH_KRB5=
10046         WITH_GSSAPI=
10047         case "$_os" in
10048         Darwin)
10049             # macOS has system MIT Kerberos 5 since 10.4
10050             if test "$with_krb5" != "no"; then
10051                 WITH_KRB5=TRUE
10052                 save_LIBS=$LIBS
10053                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
10054                 # that the libraries where these functions are located on macOS will change, is it?
10055                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10056                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10057                 KRB5_LIBS=$LIBS
10058                 LIBS=$save_LIBS
10059                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10060                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10061                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10062                 LIBS=$save_LIBS
10063             fi
10064             if test "$with_gssapi" != "no"; then
10065                 WITH_GSSAPI=TRUE
10066                 save_LIBS=$LIBS
10067                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10068                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10069                 GSSAPI_LIBS=$LIBS
10070                 LIBS=$save_LIBS
10071             fi
10072             ;;
10073         WINNT)
10074             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
10075                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
10076             fi
10077             ;;
10078         Linux|GNU|*BSD|DragonFly)
10079             if test "$with_krb5" != "no"; then
10080                 WITH_KRB5=TRUE
10081                 save_LIBS=$LIBS
10082                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10083                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10084                 KRB5_LIBS=$LIBS
10085                 LIBS=$save_LIBS
10086                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10087                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10088                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10089                 LIBS=$save_LIBS
10090             fi
10091             if test "$with_gssapi" != "no"; then
10092                 WITH_GSSAPI=TRUE
10093                 save_LIBS=$LIBS
10094                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10095                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10096                 GSSAPI_LIBS=$LIBS
10097                 LIBS=$save_LIBS
10098             fi
10099             ;;
10100         *)
10101             if test "$with_krb5" = "yes"; then
10102                 WITH_KRB5=TRUE
10103                 save_LIBS=$LIBS
10104                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10105                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10106                 KRB5_LIBS=$LIBS
10107                 LIBS=$save_LIBS
10108                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10109                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10110                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10111                 LIBS=$save_LIBS
10112             fi
10113             if test "$with_gssapi" = "yes"; then
10114                 WITH_GSSAPI=TRUE
10115                 save_LIBS=$LIBS
10116                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10117                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10118                 LIBS=$save_LIBS
10119                 GSSAPI_LIBS=$LIBS
10120             fi
10121         esac
10123         if test -n "$with_libpq_path"; then
10124             SYSTEM_POSTGRESQL=TRUE
10125             postgres_interface="external libpq"
10126             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
10127             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
10128         else
10129             SYSTEM_POSTGRESQL=
10130             postgres_interface="internal"
10131             POSTGRESQL_LIB=""
10132             POSTGRESQL_INC="%OVERRIDE_ME%"
10133             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10134         fi
10135     fi
10137     AC_MSG_CHECKING([PostgreSQL C interface])
10138     AC_MSG_RESULT([$postgres_interface])
10140     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10141         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10142         save_CFLAGS=$CFLAGS
10143         save_CPPFLAGS=$CPPFLAGS
10144         save_LIBS=$LIBS
10145         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10146         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10147         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10148         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10149             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10150         CFLAGS=$save_CFLAGS
10151         CPPFLAGS=$save_CPPFLAGS
10152         LIBS=$save_LIBS
10153     fi
10154     BUILD_POSTGRESQL_SDBC=TRUE
10155 else
10156     AC_MSG_RESULT([no])
10158 AC_SUBST(WITH_KRB5)
10159 AC_SUBST(WITH_GSSAPI)
10160 AC_SUBST(GSSAPI_LIBS)
10161 AC_SUBST(KRB5_LIBS)
10162 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10163 AC_SUBST(SYSTEM_POSTGRESQL)
10164 AC_SUBST(POSTGRESQL_INC)
10165 AC_SUBST(POSTGRESQL_LIB)
10167 dnl ===================================================================
10168 dnl Check for Firebird stuff
10169 dnl ===================================================================
10170 ENABLE_FIREBIRD_SDBC=
10171 if test "$enable_firebird_sdbc" = "yes" ; then
10172     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10174     dnl ===================================================================
10175     dnl Check for system Firebird
10176     dnl ===================================================================
10177     AC_MSG_CHECKING([which Firebird to use])
10178     if test "$with_system_firebird" = "yes"; then
10179         AC_MSG_RESULT([external])
10180         SYSTEM_FIREBIRD=TRUE
10181         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10182         if test -z "$FIREBIRDCONFIG"; then
10183             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10184             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10185                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10186             ])
10187             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10188         else
10189             AC_MSG_NOTICE([fb_config found])
10190             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10191             AC_MSG_CHECKING([for Firebird Client library])
10192             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10193             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10194             FilterLibs "${FIREBIRD_LIBS}"
10195             FIREBIRD_LIBS="${filteredlibs}"
10196         fi
10197         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10198         AC_MSG_CHECKING([Firebird version])
10199         if test -n "${FIREBIRD_VERSION}"; then
10200             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10201             if test "$FIREBIRD_MAJOR" -ge "3"; then
10202                 AC_MSG_RESULT([OK])
10203             else
10204                 AC_MSG_ERROR([Ensure firebird >= 3 is installed])
10205             fi
10206         else
10207             save_CFLAGS="${CFLAGS}"
10208             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10209             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10210 #if defined(FB_API_VER) && FB_API_VER == 30
10211 int fb_api_is_30(void) { return 0; }
10212 #else
10213 #error "Wrong Firebird API version"
10214 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10215             CFLAGS="$save_CFLAGS"
10216         fi
10217         ENABLE_FIREBIRD_SDBC=TRUE
10218         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10219     elif test "$enable_database_connectivity" = no; then
10220         AC_MSG_RESULT([none])
10221     elif test "$cross_compiling" = "yes"; then
10222         AC_MSG_RESULT([none])
10223     else
10224         dnl Embedded Firebird has version 3.0
10225         dnl We need libatomic_ops for any non X86/X64 system
10226         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10227             dnl ===================================================================
10228             dnl Check for system libatomic_ops
10229             dnl ===================================================================
10230             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10231             if test "$with_system_libatomic_ops" = "yes"; then
10232                 SYSTEM_LIBATOMIC_OPS=TRUE
10233                 AC_CHECK_HEADERS(atomic_ops.h, [],
10234                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10235             else
10236                 SYSTEM_LIBATOMIC_OPS=
10237                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10238                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10239                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10240             fi
10241         fi
10243         AC_MSG_RESULT([internal])
10244         SYSTEM_FIREBIRD=
10245         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10246         FIREBIRD_LIBS="-lfbclient"
10248         if test "$with_system_libtommath" = "yes"; then
10249             SYSTEM_LIBTOMMATH=TRUE
10250             dnl check for tommath presence
10251             save_LIBS=$LIBS
10252             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10253             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10254             LIBS=$save_LIBS
10255         else
10256             SYSTEM_LIBTOMMATH=
10257             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10258             LIBTOMMATH_LIBS="-ltommath"
10259             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10260         fi
10262         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10263         ENABLE_FIREBIRD_SDBC=TRUE
10264         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10265     fi
10267 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10268 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10269 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10270 AC_SUBST(LIBATOMIC_OPS_LIBS)
10271 AC_SUBST(SYSTEM_FIREBIRD)
10272 AC_SUBST(FIREBIRD_CFLAGS)
10273 AC_SUBST(FIREBIRD_LIBS)
10274 AC_SUBST(SYSTEM_LIBTOMMATH)
10275 AC_SUBST(LIBTOMMATH_CFLAGS)
10276 AC_SUBST(LIBTOMMATH_LIBS)
10278 dnl ===================================================================
10279 dnl Check for system curl
10280 dnl ===================================================================
10281 AC_MSG_CHECKING([which libcurl to use])
10282 if test "$with_system_curl" = "auto"; then
10283     with_system_curl="$with_system_libs"
10286 if test "$enable_curl" = "yes" -a "$with_system_curl" = "yes"; then
10287     AC_MSG_RESULT([external])
10288     SYSTEM_CURL=TRUE
10290     PKG_CHECK_MODULES(CURL, libcurl >= 7.68.0)
10292     ENABLE_CURL=TRUE
10293 elif test "$enable_curl" = "no"; then
10294     AC_MSG_RESULT([none])
10295 else
10296     AC_MSG_RESULT([internal])
10297     SYSTEM_CURL=
10298     BUILD_TYPE="$BUILD_TYPE CURL"
10299     ENABLE_CURL=TRUE
10301 AC_SUBST(SYSTEM_CURL)
10302 AC_SUBST(CURL_CFLAGS)
10303 AC_SUBST(CURL_LIBS)
10304 AC_SUBST(ENABLE_CURL)
10306 dnl ===================================================================
10307 dnl Check for system boost
10308 dnl ===================================================================
10309 AC_MSG_CHECKING([which boost to use])
10310 if test "$with_system_boost" = "yes"; then
10311     AC_MSG_RESULT([external])
10312     SYSTEM_BOOST=TRUE
10313     AX_BOOST_BASE([1.66],,[AC_MSG_ERROR([no suitable Boost found])])
10314     AX_BOOST_DATE_TIME
10315     AX_BOOST_FILESYSTEM
10316     AX_BOOST_IOSTREAMS
10317     AX_BOOST_LOCALE
10318     AC_LANG_PUSH([C++])
10319     save_CXXFLAGS=$CXXFLAGS
10320     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10321     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10322        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10323     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10324        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10325     CXXFLAGS=$save_CXXFLAGS
10326     AC_LANG_POP([C++])
10327     # this is in m4/ax_boost_base.m4
10328     FilterLibs "${BOOST_LDFLAGS}"
10329     BOOST_LDFLAGS="${filteredlibs}"
10330 else
10331     AC_MSG_RESULT([internal])
10332     BUILD_TYPE="$BUILD_TYPE BOOST"
10333     SYSTEM_BOOST=
10334     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10335         # use warning-suppressing wrapper headers
10336         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10337     else
10338         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10339     fi
10341 AC_SUBST(SYSTEM_BOOST)
10343 dnl ===================================================================
10344 dnl Check for system mdds
10345 dnl ===================================================================
10346 libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-2.0 >= 2.0.0], ["-I${WORKDIR}/UnpackedTarball/mdds/include"])
10348 dnl ===================================================================
10349 dnl Check for system glm
10350 dnl ===================================================================
10351 AC_MSG_CHECKING([which glm to use])
10352 if test "$with_system_glm" = "yes"; then
10353     AC_MSG_RESULT([external])
10354     SYSTEM_GLM=TRUE
10355     AC_LANG_PUSH([C++])
10356     AC_CHECK_HEADER([glm/glm.hpp], [],
10357        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10358     AC_LANG_POP([C++])
10359 else
10360     AC_MSG_RESULT([internal])
10361     BUILD_TYPE="$BUILD_TYPE GLM"
10362     SYSTEM_GLM=
10363     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10365 AC_SUBST([GLM_CFLAGS])
10366 AC_SUBST([SYSTEM_GLM])
10368 dnl ===================================================================
10369 dnl Check for system odbc
10370 dnl ===================================================================
10371 AC_MSG_CHECKING([which odbc headers to use])
10372 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
10373     AC_MSG_RESULT([external])
10374     SYSTEM_ODBC_HEADERS=TRUE
10376     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10377         save_CPPFLAGS=$CPPFLAGS
10378         find_winsdk
10379         PathFormat "$winsdktest"
10380         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"
10381         AC_CHECK_HEADER(sqlext.h, [],
10382             [AC_MSG_ERROR(odbc not found. install odbc)],
10383             [#include <windows.h>])
10384         CPPFLAGS=$save_CPPFLAGS
10385     else
10386         AC_CHECK_HEADER(sqlext.h, [],
10387             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10388     fi
10389 elif test "$enable_database_connectivity" = no; then
10390     AC_MSG_RESULT([none])
10391 else
10392     AC_MSG_RESULT([internal])
10393     SYSTEM_ODBC_HEADERS=
10394     BUILD_TYPE="$BUILD_TYPE IODBC"
10396 AC_SUBST(SYSTEM_ODBC_HEADERS)
10398 dnl ===================================================================
10399 dnl Check for system NSS
10400 dnl ===================================================================
10401 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10402     case "$_os" in
10403         Linux)
10404             libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8],,,TRUE)
10405         ;;
10406         *)
10407             libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8])
10408         ;;
10409     esac
10410     AC_DEFINE(HAVE_FEATURE_NSS)
10411     ENABLE_NSS=TRUE
10412 elif test $_os != iOS ; then
10413     with_tls=openssl
10415 AC_SUBST(ENABLE_NSS)
10417 dnl ===================================================================
10418 dnl Enable LDAP support
10419 dnl ===================================================================
10421 if test "$test_openldap" = yes; then
10422     AC_MSG_CHECKING([whether to enable LDAP support])
10423     if test "$enable_ldap" = yes -a \( "$ENABLE_NSS" = TRUE -o "$with_system_openldap" = yes \); then
10424         AC_MSG_RESULT([yes])
10425         ENABLE_LDAP=TRUE
10426     else
10427         if test "$enable_ldap" != "yes"; then
10428             AC_MSG_RESULT([no])
10429         else
10430             AC_MSG_RESULT([no (needs NSS or system openldap)])
10431         fi
10432     fi
10434 dnl ===================================================================
10435 dnl Check for system openldap
10436 dnl ===================================================================
10438     if test "$ENABLE_LDAP" = TRUE; then
10439         AC_MSG_CHECKING([which openldap library to use])
10440         if test "$with_system_openldap" = yes; then
10441             AC_MSG_RESULT([external])
10442             SYSTEM_OPENLDAP=TRUE
10443             AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10444             AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10445             AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10446         else
10447             AC_MSG_RESULT([internal])
10448             BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10449         fi
10450     fi
10453 AC_SUBST(ENABLE_LDAP)
10454 AC_SUBST(SYSTEM_OPENLDAP)
10456 dnl ===================================================================
10457 dnl Check for TLS/SSL and cryptographic implementation to use
10458 dnl ===================================================================
10459 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10460 if test -n "$with_tls"; then
10461     case $with_tls in
10462     openssl)
10463         AC_DEFINE(USE_TLS_OPENSSL)
10464         TLS=OPENSSL
10465         AC_MSG_RESULT([$TLS])
10467         if test "$enable_openssl" != "yes"; then
10468             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10469         fi
10471         # warn that OpenSSL has been selected but not all TLS code has this option
10472         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS])
10473         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS"
10474         ;;
10475     nss)
10476         AC_DEFINE(USE_TLS_NSS)
10477         TLS=NSS
10478         AC_MSG_RESULT([$TLS])
10479         ;;
10480     no)
10481         AC_MSG_RESULT([none])
10482         AC_MSG_WARN([Skipping TLS/SSL])
10483         ;;
10484     *)
10485         AC_MSG_RESULT([])
10486         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10487 openssl - OpenSSL
10488 nss - Mozilla's Network Security Services (NSS)
10489     ])
10490         ;;
10491     esac
10492 else
10493     # default to using NSS, it results in smaller oox lib
10494     AC_DEFINE(USE_TLS_NSS)
10495     TLS=NSS
10496     AC_MSG_RESULT([$TLS])
10498 AC_SUBST(TLS)
10500 dnl ===================================================================
10501 dnl Check for system sane
10502 dnl ===================================================================
10503 AC_MSG_CHECKING([which sane header to use])
10504 if test "$with_system_sane" = "yes"; then
10505     AC_MSG_RESULT([external])
10506     AC_CHECK_HEADER(sane/sane.h, [],
10507       [AC_MSG_ERROR(sane not found. install sane)], [])
10508 else
10509     AC_MSG_RESULT([internal])
10510     BUILD_TYPE="$BUILD_TYPE SANE"
10513 dnl ===================================================================
10514 dnl Check for system icu
10515 dnl ===================================================================
10516 SYSTEM_GENBRK=
10517 SYSTEM_GENCCODE=
10518 SYSTEM_GENCMN=
10520 ICU_MAJOR=70
10521 ICU_MINOR=1
10522 ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10523 ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10524 ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10525 AC_MSG_CHECKING([which icu to use])
10526 if test "$with_system_icu" = "yes"; then
10527     AC_MSG_RESULT([external])
10528     SYSTEM_ICU=TRUE
10529     AC_LANG_PUSH([C++])
10530     AC_MSG_CHECKING([for unicode/rbbi.h])
10531     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10532     AC_LANG_POP([C++])
10534     if test "$cross_compiling" != "yes"; then
10535         PKG_CHECK_MODULES(ICU, icu-i18n >= 4.6)
10536         ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10537         ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10538         ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10539     fi
10541     if test "$cross_compiling" = "yes" -a \( "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" \); then
10542         ICU_VERSION_FOR_BUILD=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10543         ICU_MAJOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f1`
10544         ICU_MINOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f2`
10545         AC_MSG_CHECKING([if MinGW and system versions of ICU are compatible])
10546         if test "$ICU_MAJOR" -eq "$ICU_MAJOR_FOR_BUILD" -a "$ICU_MINOR" -eq "$ICU_MINOR_FOR_BUILD"; then
10547             AC_MSG_RESULT([yes])
10548         else
10549             AC_MSG_RESULT([no])
10550             if test "$with_system_icu_for_build" != "force"; then
10551                 AC_MSG_ERROR([System ICU is not version-compatible with MinGW ICU.
10552 You can use --with-system-icu-for-build=force to use it anyway.])
10553             fi
10554         fi
10555     fi
10557     if test "$cross_compiling" != "yes" -o "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force"; then
10558         # using the system icu tools can lead to version confusion, use the
10559         # ones from the build environment when cross-compiling
10560         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10561         if test -z "$SYSTEM_GENBRK"; then
10562             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10563         fi
10564         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10565         if test -z "$SYSTEM_GENCCODE"; then
10566             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10567         fi
10568         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10569         if test -z "$SYSTEM_GENCMN"; then
10570             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10571         fi
10572         if test "$ICU_MAJOR" -ge "49"; then
10573             ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10574             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10575             ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10576         else
10577             ICU_RECLASSIFIED_PREPEND_SET_EMPTY=
10578             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER=
10579             ICU_RECLASSIFIED_HEBREW_LETTER=
10580         fi
10581     fi
10583     if test "$cross_compiling" = "yes"; then
10584         if test "$ICU_MAJOR" -ge "50"; then
10585             AC_MSG_RESULT([Ignore ICU_MINOR as obviously the libraries don't include the minor version in their names any more])
10586             ICU_MINOR=""
10587         fi
10588     fi
10589 else
10590     AC_MSG_RESULT([internal])
10591     SYSTEM_ICU=
10592     BUILD_TYPE="$BUILD_TYPE ICU"
10593     # surprisingly set these only for "internal" (to be used by various other
10594     # external libs): the system icu-config is quite unhelpful and spits out
10595     # dozens of weird flags and also default path -I/usr/include
10596     ICU_CFLAGS="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10597     ICU_LIBS="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10599 if test "$ICU_MAJOR" -ge "59"; then
10600     # As of ICU 59 it defaults to typedef char16_t UChar; which is available
10601     # with -std=c++11 but not all external libraries can be built with that,
10602     # for those use a bit-compatible typedef uint16_t UChar; see
10603     # icu/source/common/unicode/umachine.h
10604     ICU_UCHAR_TYPE="-DUCHAR_TYPE=uint16_t"
10605 else
10606     ICU_UCHAR_TYPE=""
10608 AC_SUBST(SYSTEM_ICU)
10609 AC_SUBST(SYSTEM_GENBRK)
10610 AC_SUBST(SYSTEM_GENCCODE)
10611 AC_SUBST(SYSTEM_GENCMN)
10612 AC_SUBST(ICU_MAJOR)
10613 AC_SUBST(ICU_MINOR)
10614 AC_SUBST(ICU_RECLASSIFIED_PREPEND_SET_EMPTY)
10615 AC_SUBST(ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER)
10616 AC_SUBST(ICU_RECLASSIFIED_HEBREW_LETTER)
10617 AC_SUBST(ICU_CFLAGS)
10618 AC_SUBST(ICU_LIBS)
10619 AC_SUBST(ICU_UCHAR_TYPE)
10621 dnl ==================================================================
10622 dnl Breakpad
10623 dnl ==================================================================
10624 DEFAULT_CRASHDUMP_VALUE="true"
10625 AC_MSG_CHECKING([whether to enable breakpad])
10626 if test "$enable_breakpad" != yes; then
10627     AC_MSG_RESULT([no])
10628 else
10629     AC_MSG_RESULT([yes])
10630     ENABLE_BREAKPAD="TRUE"
10631     AC_DEFINE(ENABLE_BREAKPAD)
10632     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
10633     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
10635     AC_MSG_CHECKING([for disable crash dump])
10636     if test "$enable_crashdump" = no; then
10637         DEFAULT_CRASHDUMP_VALUE="false"
10638         AC_MSG_RESULT([yes])
10639     else
10640        AC_MSG_RESULT([no])
10641     fi
10643     AC_MSG_CHECKING([for crashreport config])
10644     if test "$with_symbol_config" = "no"; then
10645         BREAKPAD_SYMBOL_CONFIG="invalid"
10646         AC_MSG_RESULT([no])
10647     else
10648         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
10649         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
10650         AC_MSG_RESULT([yes])
10651     fi
10652     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
10654 AC_SUBST(ENABLE_BREAKPAD)
10655 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
10657 dnl ==================================================================
10658 dnl libfuzzer
10659 dnl ==================================================================
10660 AC_MSG_CHECKING([whether to enable fuzzers])
10661 if test "$enable_fuzzers" != yes; then
10662     AC_MSG_RESULT([no])
10663 else
10664     if test -z $LIB_FUZZING_ENGINE; then
10665       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
10666     fi
10667     AC_MSG_RESULT([yes])
10668     ENABLE_FUZZERS="TRUE"
10669     AC_DEFINE([ENABLE_FUZZERS],1)
10670     BUILD_TYPE="$BUILD_TYPE FUZZERS"
10672 AC_SUBST(LIB_FUZZING_ENGINE)
10673 AC_SUBST(ENABLE_FUZZERS)
10675 dnl ===================================================================
10676 dnl Orcus
10677 dnl ===================================================================
10678 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.17 >= 0.17.2])
10679 if test "$with_system_orcus" != "yes"; then
10680     if test "$SYSTEM_BOOST" = "TRUE"; then
10681         dnl Link with Boost.System
10682         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
10683         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
10684         dnl in documentation has no effect.
10685         AX_BOOST_SYSTEM
10686     fi
10688 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
10689 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
10690 AC_SUBST([BOOST_SYSTEM_LIB])
10691 AC_SUBST(SYSTEM_LIBORCUS)
10693 dnl ===================================================================
10694 dnl HarfBuzz
10695 dnl ===================================================================
10696 case "$_os" in
10697     Linux)
10698         libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3],
10699                          ["-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"],
10700                          ["-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"],
10701                          TRUE)
10702         libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 0.9.42],
10703                                  ["-I${WORKDIR}/UnpackedTarball/harfbuzz/src"],
10704                                  ["-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"],
10705                                  TRUE)
10706         ;;
10707     *)
10708         libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3],
10709                          ["-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"],
10710                          ["-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"])
10711         libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 0.9.42],
10712                                  ["-I${WORKDIR}/UnpackedTarball/harfbuzz/src"],
10713                                  ["-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"])
10714         ;;
10715 esac
10718 if test "$COM" = "MSC"; then # override the above
10719     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
10720     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
10723 if test "$with_system_harfbuzz" = "yes"; then
10724     if test "$with_system_graphite" = "no"; then
10725         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
10726     fi
10727     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
10728     save_LIBS="$LIBS"
10729     save_CFLAGS="$CFLAGS"
10730     LIBS="$LIBS $HARFBUZZ_LIBS"
10731     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
10732     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
10733     LIBS="$save_LIBS"
10734     CFLAGS="$save_CFLAGS"
10735 else
10736     if test "$with_system_graphite" = "yes"; then
10737         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
10738     fi
10741 if test "$USING_X11" = TRUE; then
10742     AC_PATH_X
10743     AC_PATH_XTRA
10744     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
10746     if test -z "$x_includes"; then
10747         x_includes="default_x_includes"
10748     fi
10749     if test -z "$x_libraries"; then
10750         x_libraries="default_x_libraries"
10751     fi
10752     CFLAGS="$CFLAGS $X_CFLAGS"
10753     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
10754     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
10755 else
10756     x_includes="no_x_includes"
10757     x_libraries="no_x_libraries"
10760 if test "$USING_X11" = TRUE; then
10761     dnl ===================================================================
10762     dnl Check for extension headers
10763     dnl ===================================================================
10764     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
10765      [#include <X11/extensions/shape.h>])
10767     # vcl needs ICE and SM
10768     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
10769     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
10770         [AC_MSG_ERROR(ICE library not found)])
10771     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
10772     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
10773         [AC_MSG_ERROR(SM library not found)])
10776 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
10777     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
10778     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
10781 dnl ===================================================================
10782 dnl Check for system Xrender
10783 dnl ===================================================================
10784 AC_MSG_CHECKING([whether to use Xrender])
10785 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
10786     AC_MSG_RESULT([yes])
10787     PKG_CHECK_MODULES(XRENDER, xrender)
10788     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10789     FilterLibs "${XRENDER_LIBS}"
10790     XRENDER_LIBS="${filteredlibs}"
10791     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
10792       [AC_MSG_ERROR(libXrender not found or functional)], [])
10793     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
10794       [AC_MSG_ERROR(Xrender not found. install X)], [])
10795 else
10796     AC_MSG_RESULT([no])
10798 AC_SUBST(XRENDER_CFLAGS)
10799 AC_SUBST(XRENDER_LIBS)
10801 dnl ===================================================================
10802 dnl Check for XRandr
10803 dnl ===================================================================
10804 AC_MSG_CHECKING([whether to enable RandR support])
10805 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
10806     AC_MSG_RESULT([yes])
10807     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
10808     if test "$ENABLE_RANDR" != "TRUE"; then
10809         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
10810                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
10811         XRANDR_CFLAGS=" "
10812         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
10813           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
10814         XRANDR_LIBS="-lXrandr "
10815         ENABLE_RANDR="TRUE"
10816     fi
10817     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10818     FilterLibs "${XRANDR_LIBS}"
10819     XRANDR_LIBS="${filteredlibs}"
10820 else
10821     ENABLE_RANDR=""
10822     AC_MSG_RESULT([no])
10824 AC_SUBST(XRANDR_CFLAGS)
10825 AC_SUBST(XRANDR_LIBS)
10826 AC_SUBST(ENABLE_RANDR)
10828 if test "$test_webdav" = yes; then
10829     if test -z "$with_webdav"; then
10830         WITH_WEBDAV=curl
10831     else
10832         WITH_WEBDAV="$with_webdav"
10833     fi
10836 AC_MSG_CHECKING([for webdav library])
10837 case "$WITH_WEBDAV" in
10838 curl)
10839     AC_MSG_RESULT([curl])
10840     # curl is already mandatory (almost) and checked elsewhere
10841     if test "$enable_curl" = "no"; then
10842         AC_MSG_ERROR(["--with-webdav=curl conflicts with --disable-curl"])
10843     fi
10844     ;;
10845 serf)
10846     AC_MSG_RESULT([serf])
10847     # Check for system apr-util
10848     libo_CHECK_SYSTEM_MODULE([apr],[APR],[apr-util-1],
10849                              ["-I${WORKDIR}/UnpackedTarball/apr/include -I${WORKDIR}/UnpackedTarball/apr_util/include"],
10850                              ["-L${WORKDIR}/UnpackedTarball/apr/.libs -lapr-1 -L${WORKDIR}/UnpackedTarball/apr_util/.libs -laprutil-1"])
10851     if test "$COM" = "MSC"; then
10852         APR_LIB_DIR="LibR"
10853         test -n "${MSVC_USE_DEBUG_RUNTIME}" && APR_LIB_DIR="LibD"
10854         APR_LIBS="${WORKDIR}/UnpackedTarball/apr/${APR_LIB_DIR}/apr-1.lib ${WORKDIR}/UnpackedTarball/apr_util/${APR_LIB_DIR}/aprutil-1.lib"
10855     fi
10857     # Check for system serf
10858     libo_CHECK_SYSTEM_MODULE([serf],[SERF],[serf-1 >= 1.3.9])
10859     ;;
10860 neon)
10861     AC_MSG_RESULT([neon])
10862     # Check for system neon
10863     libo_CHECK_SYSTEM_MODULE([neon],[NEON],[neon >= 0.31.2])
10864     if test "$with_system_neon" = "yes"; then
10865         NEON_VERSION="`$PKG_CONFIG --modversion neon | $SED 's/\.//g'`"
10866     else
10867         NEON_VERSION=0312
10868     fi
10869     AC_SUBST(NEON_VERSION)
10870     ;;
10872     AC_MSG_RESULT([none, disabled])
10873     WITH_WEBDAV=""
10874     ;;
10875 esac
10876 AC_SUBST(WITH_WEBDAV)
10878 dnl ===================================================================
10879 dnl Check for disabling cve_tests
10880 dnl ===================================================================
10881 AC_MSG_CHECKING([whether to execute CVE tests])
10882 # If not explicitly enabled or disabled, default
10883 if test -z "$enable_cve_tests"; then
10884     case "$OS" in
10885     WNT)
10886         # Default cves off for Windows with its wild and wonderful
10887         # variety of AV software kicking in and panicking
10888         enable_cve_tests=no
10889         ;;
10890     *)
10891         # otherwise yes
10892         enable_cve_tests=yes
10893         ;;
10894     esac
10896 if test "$enable_cve_tests" = "no"; then
10897     AC_MSG_RESULT([no])
10898     DISABLE_CVE_TESTS=TRUE
10899     AC_SUBST(DISABLE_CVE_TESTS)
10900 else
10901     AC_MSG_RESULT([yes])
10904 dnl ===================================================================
10905 dnl Check for enabling chart XShape tests
10906 dnl ===================================================================
10907 AC_MSG_CHECKING([whether to execute chart XShape tests])
10908 if test "$enable_chart_tests" = "yes" -o '(' "$_os" = "WINNT" -a "$enable_chart_tests" != "no" ')'; then
10909     AC_MSG_RESULT([yes])
10910     ENABLE_CHART_TESTS=TRUE
10911     AC_SUBST(ENABLE_CHART_TESTS)
10912 else
10913     AC_MSG_RESULT([no])
10916 dnl ===================================================================
10917 dnl Check for system openssl
10918 dnl ===================================================================
10919 ENABLE_OPENSSL=
10920 AC_MSG_CHECKING([whether to disable OpenSSL usage])
10921 if test "$enable_openssl" = "yes"; then
10922     AC_MSG_RESULT([no])
10923     ENABLE_OPENSSL=TRUE
10924     if test "$_os" = Darwin ; then
10925         # OpenSSL is deprecated when building for 10.7 or later.
10926         #
10927         # http://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
10928         # http://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
10930         with_system_openssl=no
10931         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10932     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
10933             && test "$with_system_openssl" != "no"; then
10934         with_system_openssl=yes
10935         SYSTEM_OPENSSL=TRUE
10936         OPENSSL_CFLAGS=
10937         OPENSSL_LIBS="-lssl -lcrypto"
10938     else
10939         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10940     fi
10941     if test "$with_system_openssl" = "yes"; then
10942         AC_MSG_CHECKING([whether openssl supports SHA512])
10943         AC_LANG_PUSH([C])
10944         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
10945             SHA512_CTX context;
10946 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
10947         AC_LANG_POP(C)
10948     fi
10949 else
10950     AC_MSG_RESULT([yes])
10952     # warn that although OpenSSL is disabled, system libraries may depend on it
10953     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
10954     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
10957 AC_SUBST([ENABLE_OPENSSL])
10959 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
10960     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
10961         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
10962         enable_cipher_openssl_backend=no
10963     else
10964         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
10965     fi
10967 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
10968 ENABLE_CIPHER_OPENSSL_BACKEND=
10969 if test "$enable_cipher_openssl_backend" = yes; then
10970     AC_MSG_RESULT([yes])
10971     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
10972 else
10973     AC_MSG_RESULT([no])
10975 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
10977 dnl ===================================================================
10978 dnl Select the crypto backends used by LO
10979 dnl ===================================================================
10981 if test "$build_crypto" = yes; then
10982     if test "$OS" = WNT; then
10983         BUILD_TYPE="$BUILD_TYPE CRYPTO_MSCAPI"
10984         AC_DEFINE([USE_CRYPTO_MSCAPI])
10985     elif test "$ENABLE_NSS" = TRUE; then
10986         BUILD_TYPE="$BUILD_TYPE CRYPTO_NSS"
10987         AC_DEFINE([USE_CRYPTO_NSS])
10988     fi
10991 dnl ===================================================================
10992 dnl Check for building gnutls
10993 dnl ===================================================================
10994 AC_MSG_CHECKING([whether to use gnutls])
10995 if test "$WITH_WEBDAV" = "neon" -a "$with_system_neon" = no -a "$enable_openssl" = "no"; then
10996     AC_MSG_RESULT([yes])
10997     AM_PATH_LIBGCRYPT()
10998     PKG_CHECK_MODULES(GNUTLS, [gnutls],,
10999         AC_MSG_ERROR([[Disabling OpenSSL was requested, but GNUTLS is not
11000                       available in the system to use as replacement.]]))
11001     FilterLibs "${LIBGCRYPT_LIBS}"
11002     LIBGCRYPT_LIBS="${filteredlibs}"
11003 else
11004     AC_MSG_RESULT([no])
11007 AC_SUBST([LIBGCRYPT_CFLAGS])
11008 AC_SUBST([LIBGCRYPT_LIBS])
11010 dnl ===================================================================
11011 dnl Check for system redland
11012 dnl ===================================================================
11013 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
11014 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
11015 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
11016 if test "$with_system_redland" = "yes"; then
11017     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
11018             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
11019 else
11020     RAPTOR_MAJOR="0"
11021     RASQAL_MAJOR="3"
11022     REDLAND_MAJOR="0"
11024 AC_SUBST(RAPTOR_MAJOR)
11025 AC_SUBST(RASQAL_MAJOR)
11026 AC_SUBST(REDLAND_MAJOR)
11028 dnl ===================================================================
11029 dnl Check for system hunspell
11030 dnl ===================================================================
11031 AC_MSG_CHECKING([which libhunspell to use])
11032 if test "$with_system_hunspell" = "yes"; then
11033     AC_MSG_RESULT([external])
11034     SYSTEM_HUNSPELL=TRUE
11035     AC_LANG_PUSH([C++])
11036     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
11037     if test "$HUNSPELL_PC" != "TRUE"; then
11038         AC_CHECK_HEADER(hunspell.hxx, [],
11039             [
11040             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
11041             [AC_MSG_ERROR(hunspell headers not found.)], [])
11042             ], [])
11043         AC_CHECK_LIB([hunspell], [main], [:],
11044            [ AC_MSG_ERROR(hunspell library not found.) ], [])
11045         HUNSPELL_LIBS=-lhunspell
11046     fi
11047     AC_LANG_POP([C++])
11048     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11049     FilterLibs "${HUNSPELL_LIBS}"
11050     HUNSPELL_LIBS="${filteredlibs}"
11051 else
11052     AC_MSG_RESULT([internal])
11053     SYSTEM_HUNSPELL=
11054     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
11055     if test "$COM" = "MSC"; then
11056         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
11057     else
11058         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
11059     fi
11060     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
11062 AC_SUBST(SYSTEM_HUNSPELL)
11063 AC_SUBST(HUNSPELL_CFLAGS)
11064 AC_SUBST(HUNSPELL_LIBS)
11066 dnl ===================================================================
11067 dnl Check for system zxing
11068 dnl ===================================================================
11069 AC_MSG_CHECKING([whether to use zxing])
11070 if test "$enable_zxing" = "no"; then
11071     AC_MSG_RESULT([no])
11072     ENABLE_ZXING=
11073     SYSTEM_ZXING=
11074 else
11075     AC_MSG_RESULT([yes])
11076     ENABLE_ZXING=TRUE
11077     AC_MSG_CHECKING([which libzxing to use])
11078     if test "$with_system_zxing" = "yes"; then
11079         AC_MSG_RESULT([external])
11080         SYSTEM_ZXING=TRUE
11081         ZXING_CFLAGS=
11082         AC_LANG_PUSH([C++])
11083         save_CXXFLAGS=$CXXFLAGS
11084         save_IFS=$IFS
11085         IFS=$P_SEP
11086         for i in $CPLUS_INCLUDE_PATH /usr/include; do
11087             dnl Reset IFS as soon as possible, to avoid unexpected side effects (and the
11088             dnl "/usr/include" fallback makes sure we get here at least once; resetting rather than
11089             dnl unsetting follows the advice at <http://git.savannah.gnu.org/gitweb/?p=autoconf.git;
11090             dnl a=commit;h=e51c9919f2cf70185b7916ac040bc0bbfd0f743b> "Add recommendation on (not)
11091             dnl unsetting IFS."):
11092             IFS=$save_IFS
11093             dnl TODO: GCC and Clang treat empty paths in CPLUS_INCLUDE_PATH like ".", but we simply
11094             dnl ignore them here:
11095             if test -z "$i"; then
11096                 continue
11097             fi
11098             dnl TODO: White space in $i would cause problems:
11099             CXXFLAGS="$save_CXXFLAGS -I$i/ZXing"
11100             AC_CHECK_HEADER(MultiFormatWriter.h, [ZXING_CFLAGS=-I$i/ZXing; break],
11101                 [unset ac_cv_header_MultiFormatWriter_h], [#include <stdexcept>])
11102         done
11103         CXXFLAGS=$save_CXXFLAGS
11104         if test -z "$ZXING_CFLAGS"; then
11105             AC_MSG_ERROR(zxing headers not found.)
11106         fi
11107         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
11108             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
11109             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
11110         AC_LANG_POP([C++])
11111         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11112         FilterLibs "${ZXING_LIBS}"
11113         ZXING_LIBS="${filteredlibs}"
11114     else
11115         AC_MSG_RESULT([internal])
11116         SYSTEM_ZXING=
11117         BUILD_TYPE="$BUILD_TYPE ZXING"
11118     fi
11119     if test "$ENABLE_ZXING" = TRUE; then
11120         AC_DEFINE(ENABLE_ZXING)
11121     fi
11123 AC_SUBST(SYSTEM_ZXING)
11124 AC_SUBST(ENABLE_ZXING)
11125 AC_SUBST(ZXING_CFLAGS)
11126 AC_SUBST(ZXING_LIBS)
11128 dnl ===================================================================
11129 dnl Check for system box2d
11130 dnl ===================================================================
11131 AC_MSG_CHECKING([which box2d to use])
11132 if test "$with_system_box2d" = "yes"; then
11133     AC_MSG_RESULT([external])
11134     SYSTEM_BOX2D=TRUE
11135     AC_LANG_PUSH([C++])
11136     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
11137         [BOX2D_H_FOUND='FALSE'])
11138     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
11139         _BOX2D_LIB=box2d
11140         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
11141     else
11142         # fail this. there's no other alternative to check when we are here.
11143         AC_CHECK_HEADER([Box2D/Box2D.h], [],
11144             [AC_MSG_ERROR(box2d headers not found.)])
11145         _BOX2D_LIB=Box2D
11146         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11147     fi
11148     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11149         [ AC_MSG_ERROR(box2d library not found.) ], [])
11150     BOX2D_LIBS=-l$_BOX2D_LIB
11151     AC_LANG_POP([C++])
11152     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11153     FilterLibs "${BOX2D_LIBS}"
11154     BOX2D_LIBS="${filteredlibs}"
11155 else
11156     AC_MSG_RESULT([internal])
11157     SYSTEM_BOX2D=
11158     BUILD_TYPE="$BUILD_TYPE BOX2D"
11160 AC_SUBST(SYSTEM_BOX2D)
11161 AC_SUBST(BOX2D_CFLAGS)
11162 AC_SUBST(BOX2D_LIBS)
11164 dnl ===================================================================
11165 dnl Checking for altlinuxhyph
11166 dnl ===================================================================
11167 AC_MSG_CHECKING([which altlinuxhyph to use])
11168 if test "$with_system_altlinuxhyph" = "yes"; then
11169     AC_MSG_RESULT([external])
11170     SYSTEM_HYPH=TRUE
11171     AC_CHECK_HEADER(hyphen.h, [],
11172        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11173     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11174        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11175        [#include <hyphen.h>])
11176     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11177         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11178     if test -z "$HYPHEN_LIB"; then
11179         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11180            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11181     fi
11182     if test -z "$HYPHEN_LIB"; then
11183         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11184            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11185     fi
11186 else
11187     AC_MSG_RESULT([internal])
11188     SYSTEM_HYPH=
11189     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11190     if test "$COM" = "MSC"; then
11191         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11192     else
11193         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11194     fi
11196 AC_SUBST(SYSTEM_HYPH)
11197 AC_SUBST(HYPHEN_LIB)
11199 dnl ===================================================================
11200 dnl Checking for mythes
11201 dnl ===================================================================
11202 AC_MSG_CHECKING([which mythes to use])
11203 if test "$with_system_mythes" = "yes"; then
11204     AC_MSG_RESULT([external])
11205     SYSTEM_MYTHES=TRUE
11206     AC_LANG_PUSH([C++])
11207     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11208     if test "$MYTHES_PKGCONFIG" = "no"; then
11209         AC_CHECK_HEADER(mythes.hxx, [],
11210             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11211         AC_CHECK_LIB([mythes-1.2], [main], [:],
11212             [ MYTHES_FOUND=no], [])
11213     if test "$MYTHES_FOUND" = "no"; then
11214         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11215                 [ MYTHES_FOUND=no], [])
11216     fi
11217     if test "$MYTHES_FOUND" = "no"; then
11218         AC_MSG_ERROR([mythes library not found!.])
11219     fi
11220     fi
11221     AC_LANG_POP([C++])
11222     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11223     FilterLibs "${MYTHES_LIBS}"
11224     MYTHES_LIBS="${filteredlibs}"
11225 else
11226     AC_MSG_RESULT([internal])
11227     SYSTEM_MYTHES=
11228     BUILD_TYPE="$BUILD_TYPE MYTHES"
11229     if test "$COM" = "MSC"; then
11230         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11231     else
11232         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11233     fi
11235 AC_SUBST(SYSTEM_MYTHES)
11236 AC_SUBST(MYTHES_CFLAGS)
11237 AC_SUBST(MYTHES_LIBS)
11239 dnl ===================================================================
11240 dnl How should we build the linear programming solver ?
11241 dnl ===================================================================
11243 ENABLE_COINMP=
11244 AC_MSG_CHECKING([whether to build with CoinMP])
11245 if test "$enable_coinmp" != "no"; then
11246     ENABLE_COINMP=TRUE
11247     AC_MSG_RESULT([yes])
11248     if test "$with_system_coinmp" = "yes"; then
11249         SYSTEM_COINMP=TRUE
11250         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11251         FilterLibs "${COINMP_LIBS}"
11252         COINMP_LIBS="${filteredlibs}"
11253     else
11254         BUILD_TYPE="$BUILD_TYPE COINMP"
11255     fi
11256 else
11257     AC_MSG_RESULT([no])
11259 AC_SUBST(ENABLE_COINMP)
11260 AC_SUBST(SYSTEM_COINMP)
11261 AC_SUBST(COINMP_CFLAGS)
11262 AC_SUBST(COINMP_LIBS)
11264 ENABLE_LPSOLVE=
11265 AC_MSG_CHECKING([whether to build with lpsolve])
11266 if test "$enable_lpsolve" != "no"; then
11267     ENABLE_LPSOLVE=TRUE
11268     AC_MSG_RESULT([yes])
11269 else
11270     AC_MSG_RESULT([no])
11272 AC_SUBST(ENABLE_LPSOLVE)
11274 if test "$ENABLE_LPSOLVE" = TRUE; then
11275     AC_MSG_CHECKING([which lpsolve to use])
11276     if test "$with_system_lpsolve" = "yes"; then
11277         AC_MSG_RESULT([external])
11278         SYSTEM_LPSOLVE=TRUE
11279         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11280            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11281         save_LIBS=$LIBS
11282         # some systems need this. Like Ubuntu...
11283         AC_CHECK_LIB(m, floor)
11284         AC_CHECK_LIB(dl, dlopen)
11285         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11286             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11287         LIBS=$save_LIBS
11288     else
11289         AC_MSG_RESULT([internal])
11290         SYSTEM_LPSOLVE=
11291         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11292     fi
11294 AC_SUBST(SYSTEM_LPSOLVE)
11296 dnl ===================================================================
11297 dnl Checking for libexttextcat
11298 dnl ===================================================================
11299 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11300 if test "$with_system_libexttextcat" = "yes"; then
11301     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11303 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11305 dnl ===================================================================
11306 dnl Checking for libnumbertext
11307 dnl ===================================================================
11308 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11309 if test "$with_system_libnumbertext" = "yes"; then
11310     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11311     SYSTEM_LIBNUMBERTEXT=YES
11312 else
11313     SYSTEM_LIBNUMBERTEXT=
11314     AC_LANG_PUSH([C++])
11315     save_CPPFLAGS=$CPPFLAGS
11316     CPPFLAGS="$CPPFLAGS $CXXFLAGS_CXX11"
11317     AC_CHECK_HEADERS([codecvt regex])
11318     AS_IF([test "x$ac_cv_header_codecvt" != xyes -o "x$ac_cv_header_regex" != xyes],
11319             [ LIBNUMBERTEXT_CFLAGS=''
11320               AC_MSG_WARN([No system-provided libnumbertext or codecvt/regex C++11 headers (min. libstdc++ 4.9).
11321                            Enable libnumbertext fallback (missing number to number name conversion).])
11322             ])
11323     CPPFLAGS=$save_CPPFLAGS
11324     AC_LANG_POP([C++])
11326 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11327 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11328 AC_SUBST(LIBNUMBERTEXT_CFLAGS)
11330 dnl ***************************************
11331 dnl testing libc version for Linux...
11332 dnl ***************************************
11333 if test "$_os" = "Linux"; then
11334     AC_MSG_CHECKING([whether the libc is recent enough])
11335     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
11336     #include <features.h>
11337     #if defined(__GNU_LIBRARY__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1))
11338     #error glibc >= 2.1 is required
11339     #endif
11340     ]])],, [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([no, upgrade libc])])
11343 dnl =========================================
11344 dnl Check for uuidgen
11345 dnl =========================================
11346 if test "$_os" = "WINNT"; then
11347     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11348     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11349     UUIDGEN=uuidgen.exe
11350     AC_SUBST(UUIDGEN)
11351 else
11352     AC_PATH_PROG([UUIDGEN], [uuidgen])
11353     if test -z "$UUIDGEN"; then
11354         AC_MSG_WARN([uuid is needed for building installation sets])
11355     fi
11358 dnl ***************************************
11359 dnl Checking for bison and flex
11360 dnl ***************************************
11361 AC_PATH_PROG(BISON, bison)
11362 if test -z "$BISON"; then
11363     AC_MSG_ERROR([no bison found in \$PATH, install it])
11364 else
11365     AC_MSG_CHECKING([the bison version])
11366     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11367     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11368     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11369     dnl cause
11370     dnl
11371     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]
11372     dnl   typedef union YYSTYPE
11373     dnl           ~~~~~~^~~~~~~
11374     dnl
11375     dnl while at least 3.4.1 is know to be good:
11376     if test "$COMPILER_PLUGINS" = TRUE; then
11377         if test "$_bison_longver" -lt 2004; then
11378             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11379         fi
11380     else
11381         if test "$_bison_longver" -lt 2000; then
11382             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11383         fi
11384     fi
11386 AC_SUBST([BISON])
11388 AC_PATH_PROG(FLEX, flex)
11389 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11390     FLEX=`cygpath -m $FLEX`
11392 if test -z "$FLEX"; then
11393     AC_MSG_ERROR([no flex found in \$PATH, install it])
11394 else
11395     AC_MSG_CHECKING([the flex version])
11396     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11397     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11398         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11399     fi
11401 AC_SUBST([FLEX])
11402 dnl ***************************************
11403 dnl Checking for patch
11404 dnl ***************************************
11405 AC_PATH_PROG(PATCH, patch)
11406 if test -z "$PATCH"; then
11407     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11410 dnl On Solaris or macOS, check if --with-gnu-patch was used
11411 if test "$_os" = "SunOS" -o "$_os" = "Darwin" -o "$_os" = "FreeBSD"; then
11412     if test -z "$with_gnu_patch"; then
11413         GNUPATCH=$PATCH
11414     else
11415         if test -x "$with_gnu_patch"; then
11416             GNUPATCH=$with_gnu_patch
11417         else
11418             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11419         fi
11420     fi
11422     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11423     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11424         AC_MSG_RESULT([yes])
11425     else
11426         if $GNUPATCH --version | grep "2\.0-.*-Apple" >/dev/null 2>/dev/null; then
11427             AC_MSG_RESULT([no, but accepted (Apple patch)])
11428             add_warning "patch utility is not GNU patch. Apple's patch should work OK, but it might experience issues where GNU patch doesn't."
11429         else
11430             AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11431         fi
11432     fi
11433 else
11434     GNUPATCH=$PATCH
11437 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11438     GNUPATCH=`cygpath -m $GNUPATCH`
11441 dnl We also need to check for --with-gnu-cp
11443 if test -z "$with_gnu_cp"; then
11444     # check the place where the good stuff is hidden on Solaris...
11445     if test -x /usr/gnu/bin/cp; then
11446         GNUCP=/usr/gnu/bin/cp
11447     else
11448         AC_PATH_PROGS(GNUCP, gnucp cp)
11449     fi
11450     if test -z $GNUCP; then
11451         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11452     fi
11453 else
11454     if test -x "$with_gnu_cp"; then
11455         GNUCP=$with_gnu_cp
11456     else
11457         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11458     fi
11461 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11462     GNUCP=`cygpath -m $GNUCP`
11465 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11466 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11467     AC_MSG_RESULT([yes])
11468 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11469     AC_MSG_RESULT([yes])
11470 else
11471     case "$build_os" in
11472     darwin*|macos*|netbsd*|openbsd*|freebsd*|dragonfly*|aix*)
11473         x_GNUCP=[\#]
11474         GNUCP=''
11475         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11476         ;;
11477     *)
11478         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11479         ;;
11480     esac
11483 AC_SUBST(GNUPATCH)
11484 AC_SUBST(GNUCP)
11485 AC_SUBST(x_GNUCP)
11487 dnl ***************************************
11488 dnl testing assembler path
11489 dnl ***************************************
11490 ML_EXE=""
11491 if test "$_os" = "WINNT"; then
11492     case "$WIN_HOST_ARCH" in
11493     x86) assembler=ml.exe ;;
11494     x64) assembler=ml64.exe ;;
11495     arm64) assembler=armasm64.exe ;;
11496     esac
11498     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11499     if test -f "$MSVC_HOST_PATH/$assembler"; then
11500         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11501         AC_MSG_RESULT([$ML_EXE])
11502     else
11503         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11504     fi
11507 AC_SUBST(ML_EXE)
11509 dnl ===================================================================
11510 dnl We need zip and unzip
11511 dnl ===================================================================
11512 AC_PATH_PROG(ZIP, zip)
11513 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11514 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11515     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],,)
11518 AC_PATH_PROG(UNZIP, unzip)
11519 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11521 dnl ===================================================================
11522 dnl Zip must be a specific type for different build types.
11523 dnl ===================================================================
11524 if test $build_os = cygwin; then
11525     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11526         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11527     fi
11530 dnl ===================================================================
11531 dnl We need touch with -h option support.
11532 dnl ===================================================================
11533 AC_PATH_PROG(TOUCH, touch)
11534 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11535 touch "$WARNINGS_FILE"
11536 if ! "$TOUCH" -h "$WARNINGS_FILE" 2>/dev/null > /dev/null; then
11537     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],,)
11540 dnl ===================================================================
11541 dnl Check for system epoxy
11542 dnl ===================================================================
11543 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2], ["-I${WORKDIR}/UnpackedTarball/epoxy/include"])
11545 dnl ===================================================================
11546 dnl Set vcl option: coordinate device in double or sal_Int32
11547 dnl ===================================================================
11549 dnl disabled for now, we don't want subtle differences between OSs
11550 dnl AC_MSG_CHECKING([Type to use for Device Pixel coordinates])
11551 dnl if test "$_os" = "Darwin" -o  $_os = iOS ; then
11552 dnl     AC_DEFINE(VCL_FLOAT_DEVICE_PIXEL)
11553 dnl     AC_MSG_RESULT([double])
11554 dnl else
11555 dnl     AC_MSG_RESULT([sal_Int32])
11556 dnl fi
11558 dnl ===================================================================
11559 dnl Show which vclplugs will be built.
11560 dnl ===================================================================
11561 R=""
11562 if test "$USING_X11" != TRUE; then
11563     enable_gtk3=no
11566 ENABLE_GTK3=""
11567 if test "x$enable_gtk3" = "xyes"; then
11568     ENABLE_GTK3="TRUE"
11569     AC_DEFINE(ENABLE_GTK3)
11570     R="$R gtk3"
11572 AC_SUBST(ENABLE_GTK3)
11574 ENABLE_GTK3_KDE5=""
11575 if test "x$enable_gtk3_kde5" = "xyes"; then
11576     ENABLE_GTK3_KDE5="TRUE"
11577     AC_DEFINE(ENABLE_GTK3_KDE5)
11578     R="$R gtk3_kde5"
11580 AC_SUBST(ENABLE_GTK3_KDE5)
11582 ENABLE_GTK4=""
11583 if test "x$enable_gtk4" = "xyes"; then
11584     ENABLE_GTK4="TRUE"
11585     AC_DEFINE(ENABLE_GTK4)
11586     R="$R gtk4"
11588 AC_SUBST(ENABLE_GTK4)
11590 ENABLE_QT5=""
11591 if test "x$enable_qt5" = "xyes"; then
11592     ENABLE_QT5="TRUE"
11593     AC_DEFINE(ENABLE_QT5)
11594     R="$R qt5"
11596 AC_SUBST(ENABLE_QT5)
11598 ENABLE_QT6=""
11599 if test "x$enable_qt6" = "xyes"; then
11600     ENABLE_QT6="TRUE"
11601     AC_DEFINE(ENABLE_QT6)
11602     R="$R qt6"
11604 AC_SUBST(ENABLE_QT6)
11607 ENABLE_KF5=""
11608 if test "x$enable_kf5" = "xyes"; then
11609     ENABLE_KF5="TRUE"
11610     AC_DEFINE(ENABLE_KF5)
11611     R="$R kf5"
11613 AC_SUBST(ENABLE_KF5)
11615 if test "x$USING_X11" = "xyes"; then
11616     R="$R gen"
11619 if test "$_os" = "WINNT"; then
11620     R="$R win"
11621 elif test "$_os" = "Darwin"; then
11622     R="$R osx"
11623 elif test "$_os" = "iOS"; then
11624     R="ios"
11625 elif test "$_os" = Android; then
11626     R="android"
11629 build_vcl_plugins="$R"
11630 if test -z "$build_vcl_plugins"; then
11631     build_vcl_plugins=" none"
11633 AC_MSG_NOTICE([VCLplugs to be built:${build_vcl_plugins}])
11634 VCL_PLUGIN_INFO=$R
11635 AC_SUBST([VCL_PLUGIN_INFO])
11637 dnl ===================================================================
11638 dnl Check for GTK libraries
11639 dnl ===================================================================
11641 GTK3_CFLAGS=""
11642 GTK3_LIBS=""
11643 ENABLE_GTKTILEDVIEWER=""
11644 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11645     if test "$with_system_cairo" = no; then
11646         add_warning 'Non-system cairo combined with gtk3 is assumed to cause trouble; proceed at your own risk.'
11647     fi
11648     : ${with_system_cairo:=yes}
11649     PKG_CHECK_MODULES(GTK3, gtk+-3.0 >= 3.20 gtk+-unix-print-3.0 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo)
11650     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11651     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11652     FilterLibs "${GTK3_LIBS}"
11653     GTK3_LIBS="${filteredlibs}"
11655     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11656     if test "$with_system_epoxy" != "yes"; then
11657         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11658         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11659                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11660     fi
11661 elif test -n "$with_gtk3_build" -a "$OS" = "WNT"; then
11662     PathFormat "${with_gtk3_build}/lib/pkgconfig"
11663     if test "$build_os" = "cygwin"; then
11664         dnl cygwin's pkg-config does not recognize "C:/..."-style paths, only "/cygdrive/c/..."
11665         formatted_path_unix=`cygpath -au "$formatted_path_unix"`
11666     fi
11668     PKG_CONFIG_PATH="$formatted_path_unix"; export PKG_CONFIG_PATH
11669     PKG_CHECK_MODULES(GTK3, cairo gdk-3.0 gio-2.0 glib-2.0 gobject-2.0 gtk+-3.0)
11670     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11671     FilterLibs "${GTK3_LIBS}"
11672     GTK3_LIBS="${filteredlibs}"
11673     ENABLE_GTKTILEDVIEWER="yes"
11675 AC_SUBST(GTK3_LIBS)
11676 AC_SUBST(GTK3_CFLAGS)
11677 AC_SUBST(ENABLE_GTKTILEDVIEWER)
11679 GTK4_CFLAGS=""
11680 GTK4_LIBS=""
11681 if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then
11682     if test "$with_system_cairo" = no; then
11683         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11684     fi
11685     : ${with_system_cairo:=yes}
11686     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11687     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11688     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11689     FilterLibs "${GTK4_LIBS}"
11690     GTK4_LIBS="${filteredlibs}"
11692     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11693     if test "$with_system_epoxy" != "yes"; then
11694         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11695         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11696                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11697     fi
11699 AC_SUBST(GTK4_LIBS)
11700 AC_SUBST(GTK4_CFLAGS)
11702 if test "$enable_introspection" = yes; then
11703     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11704         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11705     else
11706         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
11707     fi
11710 dnl ===================================================================
11711 dnl check for dbus support
11712 dnl ===================================================================
11713 ENABLE_DBUS=""
11714 DBUS_CFLAGS=""
11715 DBUS_LIBS=""
11716 DBUS_GLIB_CFLAGS=""
11717 DBUS_GLIB_LIBS=""
11718 DBUS_HAVE_GLIB=""
11720 if test "$enable_dbus" = "no"; then
11721     test_dbus=no
11724 AC_MSG_CHECKING([whether to enable DBUS support])
11725 if test "$test_dbus" = "yes"; then
11726     ENABLE_DBUS="TRUE"
11727     AC_MSG_RESULT([yes])
11728     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
11729     AC_DEFINE(ENABLE_DBUS)
11730     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11731     FilterLibs "${DBUS_LIBS}"
11732     DBUS_LIBS="${filteredlibs}"
11734     # Glib is needed for BluetoothServer
11735     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
11736     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
11737         [
11738             DBUS_HAVE_GLIB="TRUE"
11739             AC_DEFINE(DBUS_HAVE_GLIB,1)
11740         ],
11741         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
11742     )
11743 else
11744     AC_MSG_RESULT([no])
11747 AC_SUBST(ENABLE_DBUS)
11748 AC_SUBST(DBUS_CFLAGS)
11749 AC_SUBST(DBUS_LIBS)
11750 AC_SUBST(DBUS_GLIB_CFLAGS)
11751 AC_SUBST(DBUS_GLIB_LIBS)
11752 AC_SUBST(DBUS_HAVE_GLIB)
11754 AC_MSG_CHECKING([whether to enable Impress remote control])
11755 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
11756     AC_MSG_RESULT([yes])
11757     ENABLE_SDREMOTE=TRUE
11758     SDREMOTE_ENTITLEMENT="      <key>com.apple.security.network.server</key>
11759         <true/>"
11760     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
11762     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
11763         # The Bluetooth code doesn't compile with macOS SDK 10.15
11764         if test "$enable_sdremote_bluetooth" = yes; then
11765             AC_MSG_ERROR([macOS SDK $macosx_sdk does not currently support --enable-sdremote-bluetooth])
11766         fi
11767         add_warning "not building the bluetooth part of the sdremote - used api was removed from macOS SDK 10.15"
11768         enable_sdremote_bluetooth=no
11769     fi
11770     # If not explicitly enabled or disabled, default
11771     if test -z "$enable_sdremote_bluetooth"; then
11772         case "$OS" in
11773         LINUX|MACOSX|WNT)
11774             # Default to yes for these
11775             enable_sdremote_bluetooth=yes
11776             ;;
11777         *)
11778             # otherwise no
11779             enable_sdremote_bluetooth=no
11780             ;;
11781         esac
11782     fi
11783     # $enable_sdremote_bluetooth is guaranteed non-empty now
11785     if test "$enable_sdremote_bluetooth" != "no"; then
11786         if test "$OS" = "LINUX"; then
11787             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
11788                 AC_MSG_RESULT([yes])
11789                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
11790                 dnl ===================================================================
11791                 dnl Check for system bluez
11792                 dnl ===================================================================
11793                 AC_MSG_CHECKING([which Bluetooth header to use])
11794                 if test "$with_system_bluez" = "yes"; then
11795                     AC_MSG_RESULT([external])
11796                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
11797                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
11798                     SYSTEM_BLUEZ=TRUE
11799                 else
11800                     AC_MSG_RESULT([internal])
11801                     SYSTEM_BLUEZ=
11802                 fi
11803             else
11804                 AC_MSG_RESULT([no, dbus disabled])
11805                 ENABLE_SDREMOTE_BLUETOOTH=
11806                 SYSTEM_BLUEZ=
11807             fi
11808         else
11809             AC_MSG_RESULT([yes])
11810             ENABLE_SDREMOTE_BLUETOOTH=TRUE
11811             SYSTEM_BLUEZ=
11812             SDREMOTE_ENTITLEMENT="$SDREMOTE_ENTITLEMENT
11813         <key>com.apple.security.device.bluetooth</key>
11814         <true/>"
11815         fi
11816     else
11817         AC_MSG_RESULT([no])
11818         ENABLE_SDREMOTE_BLUETOOTH=
11819         SYSTEM_BLUEZ=
11820     fi
11821 else
11822     ENABLE_SDREMOTE=
11823     SYSTEM_BLUEZ=
11824     AC_MSG_RESULT([no])
11826 AC_SUBST(ENABLE_SDREMOTE)
11827 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
11828 AC_SUBST(SDREMOTE_ENTITLEMENT)
11829 AC_SUBST(SYSTEM_BLUEZ)
11831 dnl ===================================================================
11832 dnl Check whether to enable GIO support
11833 dnl ===================================================================
11834 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11835     AC_MSG_CHECKING([whether to enable GIO support])
11836     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
11837         dnl Need at least 2.26 for the dbus support.
11838         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
11839                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
11840         if test "$ENABLE_GIO" = "TRUE"; then
11841             AC_DEFINE(ENABLE_GIO)
11842             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11843             FilterLibs "${GIO_LIBS}"
11844             GIO_LIBS="${filteredlibs}"
11845         fi
11846     else
11847         AC_MSG_RESULT([no])
11848     fi
11850 AC_SUBST(ENABLE_GIO)
11851 AC_SUBST(GIO_CFLAGS)
11852 AC_SUBST(GIO_LIBS)
11855 dnl ===================================================================
11857 SPLIT_APP_MODULES=""
11858 if test "$enable_split_app_modules" = "yes"; then
11859     SPLIT_APP_MODULES="TRUE"
11861 AC_SUBST(SPLIT_APP_MODULES)
11863 SPLIT_OPT_FEATURES=""
11864 if test "$enable_split_opt_features" = "yes"; then
11865     SPLIT_OPT_FEATURES="TRUE"
11867 AC_SUBST(SPLIT_OPT_FEATURES)
11869 dnl ===================================================================
11870 dnl Check whether the GStreamer libraries are available.
11871 dnl ===================================================================
11873 ENABLE_GSTREAMER_1_0=""
11875 if test "$test_gstreamer_1_0" = yes; then
11877     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
11878     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
11879         ENABLE_GSTREAMER_1_0="TRUE"
11880         AC_MSG_RESULT([yes])
11881         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
11882         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11883         FilterLibs "${GSTREAMER_1_0_LIBS}"
11884         GSTREAMER_1_0_LIBS="${filteredlibs}"
11885         AC_DEFINE(ENABLE_GSTREAMER_1_0)
11886     else
11887         AC_MSG_RESULT([no])
11888     fi
11890 AC_SUBST(GSTREAMER_1_0_CFLAGS)
11891 AC_SUBST(GSTREAMER_1_0_LIBS)
11892 AC_SUBST(ENABLE_GSTREAMER_1_0)
11894 ENABLE_OPENGL_TRANSITIONS=
11895 ENABLE_OPENGL_CANVAS=
11896 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
11897    : # disable
11898 elif test "$_os" = "Darwin"; then
11899     # We use frameworks on macOS, no need for detail checks
11900     ENABLE_OPENGL_TRANSITIONS=TRUE
11901     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11902     ENABLE_OPENGL_CANVAS=TRUE
11903 elif test $_os = WINNT; then
11904     ENABLE_OPENGL_TRANSITIONS=TRUE
11905     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11906     ENABLE_OPENGL_CANVAS=TRUE
11907 else
11908     if test "$USING_X11" = TRUE; then
11909         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
11910         ENABLE_OPENGL_TRANSITIONS=TRUE
11911         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11912         ENABLE_OPENGL_CANVAS=TRUE
11913     fi
11916 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
11917 AC_SUBST(ENABLE_OPENGL_CANVAS)
11919 dnl =================================================
11920 dnl Check whether to build with OpenCL support.
11921 dnl =================================================
11923 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
11924     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
11925     # platform (optional at run-time, used through clew).
11926     BUILD_TYPE="$BUILD_TYPE OPENCL"
11927     AC_DEFINE(HAVE_FEATURE_OPENCL)
11930 dnl =================================================
11931 dnl Check whether to build with dconf support.
11932 dnl =================================================
11934 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
11935     PKG_CHECK_MODULES([DCONF], [dconf >= 0.15.2], [], [
11936         if test "$enable_dconf" = yes; then
11937             AC_MSG_ERROR([dconf not found])
11938         else
11939             enable_dconf=no
11940         fi])
11942 AC_MSG_CHECKING([whether to enable dconf])
11943 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
11944     DCONF_CFLAGS=
11945     DCONF_LIBS=
11946     ENABLE_DCONF=
11947     AC_MSG_RESULT([no])
11948 else
11949     ENABLE_DCONF=TRUE
11950     AC_DEFINE(ENABLE_DCONF)
11951     AC_MSG_RESULT([yes])
11953 AC_SUBST([DCONF_CFLAGS])
11954 AC_SUBST([DCONF_LIBS])
11955 AC_SUBST([ENABLE_DCONF])
11957 # pdf import?
11958 AC_MSG_CHECKING([whether to build the PDF import feature])
11959 ENABLE_PDFIMPORT=
11960 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
11961     AC_MSG_RESULT([yes])
11962     ENABLE_PDFIMPORT=TRUE
11963     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
11964 else
11965     AC_MSG_RESULT([no])
11968 # Pdfium?
11969 AC_MSG_CHECKING([whether to build PDFium])
11970 ENABLE_PDFIUM=
11971 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
11972     AC_MSG_RESULT([yes])
11973     ENABLE_PDFIUM=TRUE
11974     BUILD_TYPE="$BUILD_TYPE PDFIUM"
11975 else
11976     AC_MSG_RESULT([no])
11978 AC_SUBST(ENABLE_PDFIUM)
11980 if test "$ENABLE_PDFIUM" = "TRUE"; then
11981         AC_MSG_CHECKING([which OpenJPEG library to use])
11982         if test "$with_system_openjpeg" = "yes"; then
11983                 SYSTEM_OPENJPEG2=TRUE
11984                 AC_MSG_RESULT([external])
11985                 PKG_CHECK_MODULES( OPENJPEG2, libopenjp2 )
11986                 OPENJPEG2_CFLAGS=$(printf '%s' "$OPENJPEG2_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11987                 FilterLibs "${OPENJPEG2_LIBS}"
11988                 OPENJPEG2_LIBS="${filteredlibs}"
11989         else
11990                 SYSTEM_OPENJPEG2=FALSE
11991                 AC_MSG_RESULT([internal])
11992         fi
11993         AC_MSG_CHECKING([which Abseil library to use])
11994         if test "$with_system_abseil" = "yes"; then
11995                 AC_MSG_RESULT([external])
11996                 SYSTEM_ABSEIL=TRUE
11997                 AC_LANG_PUSH([C++])
11998                 AC_CHECK_HEADER(absl/types/bad_optional_access.h, [],
11999                         [AC_MSG_ERROR(abseil headers not found.)], [])
12000                 #ABSEIL_CFLAGS=-I/usr/include
12001                 AC_CHECK_LIB([absl_bad_optional_access], [main], [ABSEIL_LIBS=-labsl_bad_optional_access],
12002                         [ AC_MSG_ERROR([libabsl_bad_optional_access library not found.]) ])
12003                 AC_LANG_POP([C++])
12004                 ABSEIL_CFLAGS=$(printf '%s' "$ABSEIL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12005                 FilterLibs "${ABSEIL_LIBS}"
12006                 ABSEIL_LIBS="${filteredlibs}"
12007         else
12008                 AC_MSG_RESULT([internal])
12009         fi
12011 AC_SUBST(SYSTEM_OPENJPEG2)
12012 AC_SUBST(SYSTEM_ABSEIL)
12013 AC_SUBST(ABSEIL_CFLAGS)
12014 AC_SUBST(ABSEIL_LIBS)
12016 dnl ===================================================================
12017 dnl Check for poppler
12018 dnl ===================================================================
12019 ENABLE_POPPLER=
12020 AC_MSG_CHECKING([whether to build Poppler])
12021 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
12022     AC_MSG_RESULT([yes])
12023     ENABLE_POPPLER=TRUE
12024     AC_DEFINE(HAVE_FEATURE_POPPLER)
12025 else
12026     AC_MSG_RESULT([no])
12028 AC_SUBST(ENABLE_POPPLER)
12030 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
12031     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
12034 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
12035     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
12038 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
12039     dnl ===================================================================
12040     dnl Check for system poppler
12041     dnl ===================================================================
12042     AC_MSG_CHECKING([which PDF import poppler to use])
12043     if test "$with_system_poppler" = "yes"; then
12044         AC_MSG_RESULT([external])
12045         SYSTEM_POPPLER=TRUE
12046         PKG_CHECK_MODULES(POPPLER,[poppler >= 0.14 poppler-cpp])
12047         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12048         FilterLibs "${POPPLER_LIBS}"
12049         POPPLER_LIBS="${filteredlibs}"
12050     else
12051         AC_MSG_RESULT([internal])
12052         SYSTEM_POPPLER=
12053         BUILD_TYPE="$BUILD_TYPE POPPLER"
12054     fi
12055     AC_DEFINE([ENABLE_PDFIMPORT],1)
12057 AC_SUBST(ENABLE_PDFIMPORT)
12058 AC_SUBST(SYSTEM_POPPLER)
12059 AC_SUBST(POPPLER_CFLAGS)
12060 AC_SUBST(POPPLER_LIBS)
12062 # Skia?
12063 ENABLE_SKIA=
12064 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
12065     # Skia now requires at least freetype2 >= 2.8.1, which is less that what LO requires as system freetype.
12066     if test "$SYSTEM_FREETYPE" = TRUE; then
12067         PKG_CHECK_EXISTS(freetype2 >= 21.0.15, # 21.0.15 = 2.8.1
12068             [skia_freetype_ok=yes],
12069             [skia_freetype_ok=no])
12070     else # internal is ok
12071         skia_freetype_ok=yes
12072     fi
12073     AC_MSG_CHECKING([whether to build Skia])
12074     if test "$skia_freetype_ok" = "yes"; then
12075         if test "$enable_skia" = "debug"; then
12076             AC_MSG_RESULT([yes (debug)])
12077             ENABLE_SKIA_DEBUG=TRUE
12078         else
12079             AC_MSG_RESULT([yes])
12080             ENABLE_SKIA_DEBUG=
12081         fi
12082         ENABLE_SKIA=TRUE
12083         AC_DEFINE(HAVE_FEATURE_SKIA)
12084         BUILD_TYPE="$BUILD_TYPE SKIA"
12086         if test "$OS" = "MACOSX"; then
12087             AC_DEFINE(SK_SUPPORT_GPU,1)
12088             AC_DEFINE(SK_METAL,1)
12089             SKIA_GPU=METAL
12090             AC_SUBST(SKIA_GPU)
12091         else
12092             AC_DEFINE(SK_SUPPORT_GPU,1)
12093             AC_DEFINE(SK_VULKAN,1)
12094             SKIA_GPU=VULKAN
12095             AC_SUBST(SKIA_GPU)
12096         fi
12098         if test -n "$MAC_OS_X_VERSION_MIN_REQUIRED" && test "$MAC_OS_X_VERSION_MIN_REQUIRED" -lt "101200"; then
12099             SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX=1
12100             AC_SUBST(SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX)
12101         fi
12102     else
12103         AC_MSG_RESULT([no (freetype too old)])
12104         add_warning "freetype version is too old for Skia library, at least 2.8.1 required, Skia support disabled"
12105     fi
12107 else
12108     AC_MSG_CHECKING([whether to build Skia])
12109     AC_MSG_RESULT([no])
12111 AC_SUBST(ENABLE_SKIA)
12112 AC_SUBST(ENABLE_SKIA_DEBUG)
12114 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
12115 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
12116 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
12117 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
12118 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
12119 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
12120 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
12121 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F=
12122 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
12123 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
12124 HAVE_LO_CLANG_DLLEXPORTINLINES=
12126 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE; then
12127     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12128         AC_MSG_CHECKING([for Clang])
12129         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
12130     else
12131         if test "$_os" = "WINNT"; then
12132             AC_MSG_CHECKING([for clang-cl])
12133             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
12134                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
12135                 dnl explicitly set -m32/-m64
12136                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
12137                 LO_CLANG_CXX="$LO_CLANG_CC"
12138                 AC_MSG_RESULT([$LO_CLANG_CC])
12139             else
12140                 AC_MSG_RESULT([no])
12141             fi
12142         else
12143             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
12144             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
12145         fi
12146     fi
12147     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12148         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
12149         clang2_ver=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
12150         if test "$clang2_ver" -lt 50002; then
12151             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
12152             LO_CLANG_CC=
12153             LO_CLANG_CXX=
12154         fi
12155     fi
12156     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX" -a "$_os" = "WINNT"; then
12157         save_CXX="$CXX"
12158         CXX="$LO_CLANG_CXX"
12159         AC_MSG_CHECKING([whether $CXX supports -Zc:dllexportInlines-])
12160         AC_LANG_PUSH([C++])
12161         save_CXXFLAGS=$CXXFLAGS
12162         CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
12163         AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
12164                 HAVE_LO_CLANG_DLLEXPORTINLINES=TRUE
12165                 AC_MSG_RESULT([yes])
12166             ], [AC_MSG_RESULT([no])])
12167         CXXFLAGS=$save_CXXFLAGS
12168         AC_LANG_POP([C++])
12169         CXX="$save_CXX"
12170         if test -z "$HAVE_LO_CLANG_DLLEXPORTINLINES"; then
12171             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.])
12172         fi
12173     fi
12174     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
12175         # Skia is the default on Windows and Mac, so hard-require Clang.
12176         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
12177         if test "$_os" = "WINNT" -o "$_os" = "Darwin"; then
12178             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang, or use --disable-skia.])
12179         else
12180             AC_MSG_WARN([Clang compiler not found.])
12181         fi
12182     else
12184         save_CXX="$CXX"
12185         CXX="$LO_CLANG_CXX"
12186         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
12187         flag_sse2=-msse2
12188         flag_ssse3=-mssse3
12189         flag_sse41=-msse4.1
12190         flag_sse42=-msse4.2
12191         flag_avx=-mavx
12192         flag_avx2=-mavx2
12193         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
12194         flag_avx512f=-mavx512f
12195         flag_f16c=-mf16c
12196         flag_fma=-mfma
12198         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
12199         AC_LANG_PUSH([C++])
12200         save_CXXFLAGS=$CXXFLAGS
12201         CXXFLAGS="$CXXFLAGS $flag_sse2"
12202         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12203             #include <emmintrin.h>
12204             int main () {
12205                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12206                 c = _mm_xor_si128 (a, b);
12207                 return 0;
12208             }
12209             ])],
12210             [can_compile_sse2=yes],
12211             [can_compile_sse2=no])
12212         AC_LANG_POP([C++])
12213         CXXFLAGS=$save_CXXFLAGS
12214         AC_MSG_RESULT([${can_compile_sse2}])
12215         if test "${can_compile_sse2}" = "yes" ; then
12216             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
12217         fi
12219         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
12220         AC_LANG_PUSH([C++])
12221         save_CXXFLAGS=$CXXFLAGS
12222         CXXFLAGS="$CXXFLAGS $flag_ssse3"
12223         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12224             #include <tmmintrin.h>
12225             int main () {
12226                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12227                 c = _mm_maddubs_epi16 (a, b);
12228                 return 0;
12229             }
12230             ])],
12231             [can_compile_ssse3=yes],
12232             [can_compile_ssse3=no])
12233         AC_LANG_POP([C++])
12234         CXXFLAGS=$save_CXXFLAGS
12235         AC_MSG_RESULT([${can_compile_ssse3}])
12236         if test "${can_compile_ssse3}" = "yes" ; then
12237             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
12238         fi
12240         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
12241         AC_LANG_PUSH([C++])
12242         save_CXXFLAGS=$CXXFLAGS
12243         CXXFLAGS="$CXXFLAGS $flag_sse41"
12244         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12245             #include <smmintrin.h>
12246             int main () {
12247                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12248                 c = _mm_cmpeq_epi64 (a, b);
12249                 return 0;
12250             }
12251             ])],
12252             [can_compile_sse41=yes],
12253             [can_compile_sse41=no])
12254         AC_LANG_POP([C++])
12255         CXXFLAGS=$save_CXXFLAGS
12256         AC_MSG_RESULT([${can_compile_sse41}])
12257         if test "${can_compile_sse41}" = "yes" ; then
12258             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12259         fi
12261         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12262         AC_LANG_PUSH([C++])
12263         save_CXXFLAGS=$CXXFLAGS
12264         CXXFLAGS="$CXXFLAGS $flag_sse42"
12265         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12266             #include <nmmintrin.h>
12267             int main () {
12268                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12269                 c = _mm_cmpgt_epi64 (a, b);
12270                 return 0;
12271             }
12272             ])],
12273             [can_compile_sse42=yes],
12274             [can_compile_sse42=no])
12275         AC_LANG_POP([C++])
12276         CXXFLAGS=$save_CXXFLAGS
12277         AC_MSG_RESULT([${can_compile_sse42}])
12278         if test "${can_compile_sse42}" = "yes" ; then
12279             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12280         fi
12282         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12283         AC_LANG_PUSH([C++])
12284         save_CXXFLAGS=$CXXFLAGS
12285         CXXFLAGS="$CXXFLAGS $flag_avx"
12286         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12287             #include <immintrin.h>
12288             int main () {
12289                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12290                 c = _mm256_xor_ps(a, b);
12291                 return 0;
12292             }
12293             ])],
12294             [can_compile_avx=yes],
12295             [can_compile_avx=no])
12296         AC_LANG_POP([C++])
12297         CXXFLAGS=$save_CXXFLAGS
12298         AC_MSG_RESULT([${can_compile_avx}])
12299         if test "${can_compile_avx}" = "yes" ; then
12300             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12301         fi
12303         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12304         AC_LANG_PUSH([C++])
12305         save_CXXFLAGS=$CXXFLAGS
12306         CXXFLAGS="$CXXFLAGS $flag_avx2"
12307         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12308             #include <immintrin.h>
12309             int main () {
12310                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12311                 c = _mm256_maddubs_epi16(a, b);
12312                 return 0;
12313             }
12314             ])],
12315             [can_compile_avx2=yes],
12316             [can_compile_avx2=no])
12317         AC_LANG_POP([C++])
12318         CXXFLAGS=$save_CXXFLAGS
12319         AC_MSG_RESULT([${can_compile_avx2}])
12320         if test "${can_compile_avx2}" = "yes" ; then
12321             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12322         fi
12324         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12325         AC_LANG_PUSH([C++])
12326         save_CXXFLAGS=$CXXFLAGS
12327         CXXFLAGS="$CXXFLAGS $flag_avx512"
12328         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12329             #include <immintrin.h>
12330             int main () {
12331                 __m512i a = _mm512_loadu_si512(0);
12332                 __m512d v1 = _mm512_load_pd(0);
12333                 // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
12334                 __m512d v2 = _mm512_abs_pd(v1);
12335                 return 0;
12336             }
12337             ])],
12338             [can_compile_avx512=yes],
12339             [can_compile_avx512=no])
12340         AC_LANG_POP([C++])
12341         CXXFLAGS=$save_CXXFLAGS
12342         AC_MSG_RESULT([${can_compile_avx512}])
12343         if test "${can_compile_avx512}" = "yes" ; then
12344             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12345             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
12346         fi
12348         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12349         AC_LANG_PUSH([C++])
12350         save_CXXFLAGS=$CXXFLAGS
12351         CXXFLAGS="$CXXFLAGS $flag_f16c"
12352         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12353             #include <immintrin.h>
12354             int main () {
12355                 __m128i a = _mm_set1_epi32 (0);
12356                 __m128 c;
12357                 c = _mm_cvtph_ps(a);
12358                 return 0;
12359             }
12360             ])],
12361             [can_compile_f16c=yes],
12362             [can_compile_f16c=no])
12363         AC_LANG_POP([C++])
12364         CXXFLAGS=$save_CXXFLAGS
12365         AC_MSG_RESULT([${can_compile_f16c}])
12366         if test "${can_compile_f16c}" = "yes" ; then
12367             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12368         fi
12370         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12371         AC_LANG_PUSH([C++])
12372         save_CXXFLAGS=$CXXFLAGS
12373         CXXFLAGS="$CXXFLAGS $flag_fma"
12374         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12375             #include <immintrin.h>
12376             int main () {
12377                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12378                 d = _mm256_fmadd_ps(a, b, c);
12379                 return 0;
12380             }
12381             ])],
12382             [can_compile_fma=yes],
12383             [can_compile_fma=no])
12384         AC_LANG_POP([C++])
12385         CXXFLAGS=$save_CXXFLAGS
12386         AC_MSG_RESULT([${can_compile_fma}])
12387         if test "${can_compile_fma}" = "yes" ; then
12388             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12389         fi
12391         CXX="$save_CXX"
12392     fi
12395 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12397 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12398     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12399     AC_LANG_PUSH([C])
12400     save_CC="$CC"
12401     CC="$LO_CLANG_CC"
12402     save_CFLAGS=$CFLAGS
12403     CFLAGS="$CFLAGS --ccache-skip -O2 -Werror"
12404     dnl an empty program will do, we're checking the compiler flags
12405     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12406                       [use_ccache=yes], [use_ccache=no])
12407     CFLAGS=$save_CFLAGS
12408     CC=$save_CC
12409     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12410         AC_MSG_RESULT([yes])
12411     else
12412         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12413         AC_MSG_RESULT([no])
12414     fi
12415     AC_LANG_POP([C])
12417     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12418     AC_LANG_PUSH([C++])
12419     save_CXX="$CXX"
12420     CXX="$LO_CLANG_CXX"
12421     save_CXXFLAGS=$CXXFLAGS
12422     CXXFLAGS="$CXXFLAGS --ccache-skip -O2 -Werror"
12423     dnl an empty program will do, we're checking the compiler flags
12424     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12425                       [use_ccache=yes], [use_ccache=no])
12426     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12427         AC_MSG_RESULT([yes])
12428     else
12429         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12430         AC_MSG_RESULT([no])
12431     fi
12432     CXXFLAGS=$save_CXXFLAGS
12433     CXX=$save_CXX
12434     AC_LANG_POP([C++])
12437 AC_SUBST(LO_CLANG_CC)
12438 AC_SUBST(LO_CLANG_CXX)
12439 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12440 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12441 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12442 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12443 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12444 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12445 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12446 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F)
12447 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12448 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12449 AC_SUBST(CLANG_USE_LD)
12450 AC_SUBST([HAVE_LO_CLANG_DLLEXPORTINLINES])
12452 SYSTEM_GPGMEPP=
12454 if test "$enable_gpgmepp" = no; then
12455     AC_MSG_CHECKING([whether to enable gpgmepp])
12456     AC_MSG_RESULT([no])
12457 elif test "$enable_mpl_subset" = "yes"; then
12458     AC_MSG_CHECKING([whether gpgmepp should be disabled due to building just MPL])
12459     AC_MSG_RESULT([yes])
12460 elif test "$enable_fuzzers" = "yes"; then
12461     AC_MSG_CHECKING([whether gpgmepp should be disabled due to oss-fuzz])
12462     AC_MSG_RESULT([yes])
12463 elif test "$_os" = "Linux" -o "$_os" = "Darwin" -o "$_os" = "WINNT" ; then
12464     dnl ===================================================================
12465     dnl Check for system gpgme
12466     dnl ===================================================================
12467     AC_MSG_CHECKING([which gpgmepp to use])
12468     if test "$with_system_gpgmepp" = "yes"; then
12469         AC_MSG_RESULT([external])
12470         SYSTEM_GPGMEPP=TRUE
12472         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12473         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12474             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp >= 1.14 development package])], [])
12475         # progress_callback is the only func with plain C linkage
12476         # checking for it also filters out older, KDE-dependent libgpgmepp versions
12477         AC_CHECK_LIB(gpgmepp, progress_callback, [ GPGMEPP_LIBS=-lgpgmepp ],
12478             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12479         AC_CHECK_HEADER(gpgme.h, [],
12480             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12481     else
12482         AC_MSG_RESULT([internal])
12483         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12485         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12486         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12487         if test "$_os" != "WINNT"; then
12488             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12489             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12490         fi
12491     fi
12492     ENABLE_GPGMEPP=TRUE
12493     AC_DEFINE([HAVE_FEATURE_GPGME])
12494     AC_PATH_PROG(GPG, gpg)
12495     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12496     # so let's exclude that manually for the moment
12497     if test -n "$GPG" -a "$_os" != "WINNT"; then
12498         # make sure we not only have a working gpgme, but a full working
12499         # gpg installation to run OpenPGP signature verification
12500         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12501     fi
12502     if test "$_os" = "Linux"; then
12503       uid=`id -u`
12504       AC_MSG_CHECKING([for /run/user/$uid])
12505       if test -d /run/user/$uid; then
12506         AC_MSG_RESULT([yes])
12507         AC_PATH_PROG(GPGCONF, gpgconf)
12509         # Older versions of gpgconf are not working as expected, since
12510         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12511         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12512         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12513         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12514         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12515         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12516         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12517           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12518           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12519           if $GPGCONF --dump-options > /dev/null ; then
12520             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12521               AC_MSG_RESULT([yes])
12522               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12523               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12524             else
12525               AC_MSG_RESULT([no])
12526             fi
12527           else
12528             AC_MSG_RESULT([no. missing or broken gpgconf?])
12529           fi
12530         else
12531           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12532         fi
12533       else
12534         AC_MSG_RESULT([no])
12535      fi
12536    fi
12538 AC_SUBST(ENABLE_GPGMEPP)
12539 AC_SUBST(SYSTEM_GPGMEPP)
12540 AC_SUBST(GPG_ERROR_CFLAGS)
12541 AC_SUBST(GPG_ERROR_LIBS)
12542 AC_SUBST(LIBASSUAN_CFLAGS)
12543 AC_SUBST(LIBASSUAN_LIBS)
12544 AC_SUBST(GPGMEPP_CFLAGS)
12545 AC_SUBST(GPGMEPP_LIBS)
12547 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12548 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12549     AC_MSG_RESULT([yes])
12550     ENABLE_MEDIAWIKI=TRUE
12551     BUILD_TYPE="$BUILD_TYPE XSLTML"
12552     if test  "x$with_java" = "xno"; then
12553         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12554     fi
12555 else
12556     AC_MSG_RESULT([no])
12557     ENABLE_MEDIAWIKI=
12558     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12560 AC_SUBST(ENABLE_MEDIAWIKI)
12562 AC_MSG_CHECKING([whether to build the Report Builder])
12563 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12564     AC_MSG_RESULT([yes])
12565     ENABLE_REPORTBUILDER=TRUE
12566     AC_MSG_CHECKING([which jfreereport libs to use])
12567     if test "$with_system_jfreereport" = "yes"; then
12568         SYSTEM_JFREEREPORT=TRUE
12569         AC_MSG_RESULT([external])
12570         if test -z $SAC_JAR; then
12571             SAC_JAR=/usr/share/java/sac.jar
12572         fi
12573         if ! test -f $SAC_JAR; then
12574              AC_MSG_ERROR(sac.jar not found.)
12575         fi
12577         if test -z $LIBXML_JAR; then
12578             if test -f /usr/share/java/libxml-1.0.0.jar; then
12579                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12580             elif test -f /usr/share/java/libxml.jar; then
12581                 LIBXML_JAR=/usr/share/java/libxml.jar
12582             else
12583                 AC_MSG_ERROR(libxml.jar replacement not found.)
12584             fi
12585         elif ! test -f $LIBXML_JAR; then
12586             AC_MSG_ERROR(libxml.jar not found.)
12587         fi
12589         if test -z $FLUTE_JAR; then
12590             if test -f /usr/share/java/flute-1.3.0.jar; then
12591                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12592             elif test -f /usr/share/java/flute.jar; then
12593                 FLUTE_JAR=/usr/share/java/flute.jar
12594             else
12595                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12596             fi
12597         elif ! test -f $FLUTE_JAR; then
12598             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12599         fi
12601         if test -z $JFREEREPORT_JAR; then
12602             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12603                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12604             elif test -f /usr/share/java/flow-engine.jar; then
12605                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12606             else
12607                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12608             fi
12609         elif ! test -f  $JFREEREPORT_JAR; then
12610                 AC_MSG_ERROR(jfreereport.jar not found.)
12611         fi
12613         if test -z $LIBLAYOUT_JAR; then
12614             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12615                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12616             elif test -f /usr/share/java/liblayout.jar; then
12617                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12618             else
12619                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12620             fi
12621         elif ! test -f $LIBLAYOUT_JAR; then
12622                 AC_MSG_ERROR(liblayout.jar not found.)
12623         fi
12625         if test -z $LIBLOADER_JAR; then
12626             if test -f /usr/share/java/libloader-1.0.0.jar; then
12627                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
12628             elif test -f /usr/share/java/libloader.jar; then
12629                 LIBLOADER_JAR=/usr/share/java/libloader.jar
12630             else
12631                 AC_MSG_ERROR(libloader.jar replacement not found.)
12632             fi
12633         elif ! test -f  $LIBLOADER_JAR; then
12634             AC_MSG_ERROR(libloader.jar not found.)
12635         fi
12637         if test -z $LIBFORMULA_JAR; then
12638             if test -f /usr/share/java/libformula-0.2.0.jar; then
12639                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
12640             elif test -f /usr/share/java/libformula.jar; then
12641                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
12642             else
12643                 AC_MSG_ERROR(libformula.jar replacement not found.)
12644             fi
12645         elif ! test -f $LIBFORMULA_JAR; then
12646                 AC_MSG_ERROR(libformula.jar not found.)
12647         fi
12649         if test -z $LIBREPOSITORY_JAR; then
12650             if test -f /usr/share/java/librepository-1.0.0.jar; then
12651                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
12652             elif test -f /usr/share/java/librepository.jar; then
12653                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
12654             else
12655                 AC_MSG_ERROR(librepository.jar replacement not found.)
12656             fi
12657         elif ! test -f $LIBREPOSITORY_JAR; then
12658             AC_MSG_ERROR(librepository.jar not found.)
12659         fi
12661         if test -z $LIBFONTS_JAR; then
12662             if test -f /usr/share/java/libfonts-1.0.0.jar; then
12663                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
12664             elif test -f /usr/share/java/libfonts.jar; then
12665                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
12666             else
12667                 AC_MSG_ERROR(libfonts.jar replacement not found.)
12668             fi
12669         elif ! test -f $LIBFONTS_JAR; then
12670                 AC_MSG_ERROR(libfonts.jar not found.)
12671         fi
12673         if test -z $LIBSERIALIZER_JAR; then
12674             if test -f /usr/share/java/libserializer-1.0.0.jar; then
12675                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
12676             elif test -f /usr/share/java/libserializer.jar; then
12677                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
12678             else
12679                 AC_MSG_ERROR(libserializer.jar replacement not found.)
12680             fi
12681         elif ! test -f $LIBSERIALIZER_JAR; then
12682                 AC_MSG_ERROR(libserializer.jar not found.)
12683         fi
12685         if test -z $LIBBASE_JAR; then
12686             if test -f /usr/share/java/libbase-1.0.0.jar; then
12687                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
12688             elif test -f /usr/share/java/libbase.jar; then
12689                 LIBBASE_JAR=/usr/share/java/libbase.jar
12690             else
12691                 AC_MSG_ERROR(libbase.jar replacement not found.)
12692             fi
12693         elif ! test -f $LIBBASE_JAR; then
12694             AC_MSG_ERROR(libbase.jar not found.)
12695         fi
12697     else
12698         AC_MSG_RESULT([internal])
12699         SYSTEM_JFREEREPORT=
12700         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
12701         NEED_ANT=TRUE
12702     fi
12703 else
12704     AC_MSG_RESULT([no])
12705     ENABLE_REPORTBUILDER=
12706     SYSTEM_JFREEREPORT=
12708 AC_SUBST(ENABLE_REPORTBUILDER)
12709 AC_SUBST(SYSTEM_JFREEREPORT)
12710 AC_SUBST(SAC_JAR)
12711 AC_SUBST(LIBXML_JAR)
12712 AC_SUBST(FLUTE_JAR)
12713 AC_SUBST(JFREEREPORT_JAR)
12714 AC_SUBST(LIBBASE_JAR)
12715 AC_SUBST(LIBLAYOUT_JAR)
12716 AC_SUBST(LIBLOADER_JAR)
12717 AC_SUBST(LIBFORMULA_JAR)
12718 AC_SUBST(LIBREPOSITORY_JAR)
12719 AC_SUBST(LIBFONTS_JAR)
12720 AC_SUBST(LIBSERIALIZER_JAR)
12722 # scripting provider for BeanShell?
12723 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
12724 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
12725     AC_MSG_RESULT([yes])
12726     ENABLE_SCRIPTING_BEANSHELL=TRUE
12728     dnl ===================================================================
12729     dnl Check for system beanshell
12730     dnl ===================================================================
12731     AC_MSG_CHECKING([which beanshell to use])
12732     if test "$with_system_beanshell" = "yes"; then
12733         AC_MSG_RESULT([external])
12734         SYSTEM_BSH=TRUE
12735         if test -z $BSH_JAR; then
12736             BSH_JAR=/usr/share/java/bsh.jar
12737         fi
12738         if ! test -f $BSH_JAR; then
12739             AC_MSG_ERROR(bsh.jar not found.)
12740         fi
12741     else
12742         AC_MSG_RESULT([internal])
12743         SYSTEM_BSH=
12744         BUILD_TYPE="$BUILD_TYPE BSH"
12745     fi
12746 else
12747     AC_MSG_RESULT([no])
12748     ENABLE_SCRIPTING_BEANSHELL=
12749     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
12751 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
12752 AC_SUBST(SYSTEM_BSH)
12753 AC_SUBST(BSH_JAR)
12755 # scripting provider for JavaScript?
12756 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
12757 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
12758     AC_MSG_RESULT([yes])
12759     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
12761     dnl ===================================================================
12762     dnl Check for system rhino
12763     dnl ===================================================================
12764     AC_MSG_CHECKING([which rhino to use])
12765     if test "$with_system_rhino" = "yes"; then
12766         AC_MSG_RESULT([external])
12767         SYSTEM_RHINO=TRUE
12768         if test -z $RHINO_JAR; then
12769             RHINO_JAR=/usr/share/java/js.jar
12770         fi
12771         if ! test -f $RHINO_JAR; then
12772             AC_MSG_ERROR(js.jar not found.)
12773         fi
12774     else
12775         AC_MSG_RESULT([internal])
12776         SYSTEM_RHINO=
12777         BUILD_TYPE="$BUILD_TYPE RHINO"
12778         NEED_ANT=TRUE
12779     fi
12780 else
12781     AC_MSG_RESULT([no])
12782     ENABLE_SCRIPTING_JAVASCRIPT=
12783     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
12785 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
12786 AC_SUBST(SYSTEM_RHINO)
12787 AC_SUBST(RHINO_JAR)
12789 # This is only used in Qt5/Qt6/KF5 checks to determine if /usr/lib64
12790 # paths should be added to library search path. So lets put all 64-bit
12791 # platforms there.
12792 supports_multilib=
12793 case "$host_cpu" in
12794 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el)
12795     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
12796         supports_multilib="yes"
12797     fi
12798     ;;
12800     ;;
12801 esac
12803 dnl ===================================================================
12804 dnl QT5 Integration
12805 dnl ===================================================================
12807 QT5_CFLAGS=""
12808 QT5_LIBS=""
12809 QMAKE5="qmake"
12810 MOC5="moc"
12811 QT5_GOBJECT_CFLAGS=""
12812 QT5_GOBJECT_LIBS=""
12813 QT5_HAVE_GOBJECT=""
12814 QT5_PLATFORMS_SRCDIR=""
12815 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12816         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
12817         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12818 then
12819     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
12820     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
12822     if test -n "$supports_multilib"; then
12823         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
12824     fi
12826     qt5_test_include="QtWidgets/qapplication.h"
12827     if test "$_os" = "Emscripten"; then
12828         qt5_test_library="libQt5Widgets.a"
12829     else
12830         qt5_test_library="libQt5Widgets.so"
12831     fi
12833     dnl Check for qmake5
12834     if test -n "$QT5DIR"; then
12835         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
12836     else
12837         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
12838     fi
12839     if test "$QMAKE5" = "no"; then
12840         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12841     else
12842         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
12843         if test -z "$qmake5_test_ver"; then
12844             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12845         fi
12846         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
12847         qt5_minimal_minor="6"
12848         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
12849             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
12850         else
12851             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
12852         fi
12853     fi
12855     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
12856     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
12857     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
12858     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
12860     AC_MSG_CHECKING([for Qt5 headers])
12861     qt5_incdir="no"
12862     for inc_dir in $qt5_incdirs; do
12863         if test -r "$inc_dir/$qt5_test_include"; then
12864             qt5_incdir="$inc_dir"
12865             break
12866         fi
12867     done
12868     AC_MSG_RESULT([$qt5_incdir])
12869     if test "x$qt5_incdir" = "xno"; then
12870         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12871     fi
12872     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
12873     AC_LANG_PUSH([C++])
12874     save_CPPFLAGS=$CPPFLAGS
12875     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
12876     AC_CHECK_HEADER(QtCore/qconfig.h, [],
12877         [AC_MSG_ERROR(qconfig.h header not found.)], [])
12878     CPPFLAGS=$save_CPPFLAGS
12879     AC_LANG_POP([C++])
12881     AC_MSG_CHECKING([for Qt5 libraries])
12882     qt5_libdir="no"
12883     for lib_dir in $qt5_libdirs; do
12884         if test -r "$lib_dir/$qt5_test_library"; then
12885             qt5_libdir="$lib_dir"
12886             break
12887         fi
12888     done
12889     AC_MSG_RESULT([$qt5_libdir])
12890     if test "x$qt5_libdir" = "xno"; then
12891         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12892     fi
12894     if test "$_os" = "Emscripten"; then
12895         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
12896             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
12897         fi
12898         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
12899             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
12900         fi
12901     fi
12903     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
12904     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12905     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
12906     if test "$_os" = "Emscripten"; then
12907         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
12908     fi
12910     if test "$USING_X11" = TRUE; then
12911         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
12912         PKG_CHECK_MODULES(QT5_XCB_ICCCM,[xcb-icccm],[
12913             QT5_HAVE_XCB_ICCCM=1
12914             AC_DEFINE(QT5_HAVE_XCB_ICCCM)
12915         ],[
12916             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)])
12917             add_warning "XCB ICCCM not found, which is needed for Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)"
12918         ])
12919         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
12920         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
12921         QT5_USING_X11=1
12922         AC_DEFINE(QT5_USING_X11)
12923     fi
12925     dnl Check for Meta Object Compiler
12927     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
12928     if test "$MOC5" = "no"; then
12929         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
12930 the root of your Qt installation by exporting QT5DIR before running "configure".])
12931     fi
12933     if test "$test_gstreamer_1_0" = yes; then
12934         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
12935                 QT5_HAVE_GOBJECT=1
12936                 AC_DEFINE(QT5_HAVE_GOBJECT)
12937             ],
12938             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
12939         )
12940     fi
12942 AC_SUBST(QT5_CFLAGS)
12943 AC_SUBST(QT5_LIBS)
12944 AC_SUBST(MOC5)
12945 AC_SUBST(QT5_GOBJECT_CFLAGS)
12946 AC_SUBST(QT5_GOBJECT_LIBS)
12947 AC_SUBST(QT5_HAVE_GOBJECT)
12948 AC_SUBST(QT5_PLATFORMS_SRCDIR)
12950 dnl ===================================================================
12951 dnl QT6 Integration
12952 dnl ===================================================================
12954 QT6_CFLAGS=""
12955 QT6_LIBS=""
12956 QMAKE6="qmake"
12957 MOC6="moc"
12958 QT6_PLATFORMS_SRCDIR=""
12959 if test \( "$test_qt6" = "yes" -a "$ENABLE_QT6" = "TRUE" \)
12960 then
12961     qt6_incdirs="$QT6INC /usr/include/qt6 /usr/include $x_includes"
12962     qt6_libdirs="$QT6LIB /usr/lib/qt6 /usr/lib $x_libraries"
12964     if test -n "$supports_multilib"; then
12965         qt6_libdirs="$qt6_libdirs /usr/lib64/qt6 /usr/lib64/qt /usr/lib64"
12966     fi
12968     qt6_test_include="QtWidgets/qapplication.h"
12969     if test "$_os" = "Emscripten"; then
12970         qt6_test_library="libQt6Widgets.a"
12971     else
12972         qt6_test_library="libQt6Widgets.so"
12973     fi
12975     dnl Check for qmake6
12976     if test -n "$QT6DIR"; then
12977         AC_PATH_PROG(QMAKE6, [qmake], no, [$QT6DIR/bin])
12978     else
12979         AC_PATH_PROGS(QMAKE6, [qmake-qt6 qmake], no)
12980     fi
12981     if test "$QMAKE6" = "no"; then
12982         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
12983     else
12984         qmake6_test_ver="`$QMAKE6 -v 2>&1 | $SED -n -e 's/^Using Qt version \(6\.[[0-9.]]\+\).*$/\1/p'`"
12985         if test -z "$qmake6_test_ver"; then
12986             AC_MSG_ERROR([Wrong qmake for Qt6 found. Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
12987         fi
12988         AC_MSG_NOTICE([Detected Qt6 version: $qmake6_test_ver])
12989     fi
12991     qt6_incdirs="`$QMAKE6 -query QT_INSTALL_HEADERS` $qt6_incdirs"
12992     qt6_libdirs="`$QMAKE6 -query QT_INSTALL_LIBS` $qt6_libdirs"
12993     qt6_platformsdir="`$QMAKE6 -query QT_INSTALL_PLUGINS`/platforms"
12994     QT6_PLATFORMS_SRCDIR="$qt6_platformsdir"
12996     AC_MSG_CHECKING([for Qt6 headers])
12997     qt6_incdir="no"
12998     for inc_dir in $qt6_incdirs; do
12999         if test -r "$inc_dir/$qt6_test_include"; then
13000             qt6_incdir="$inc_dir"
13001             break
13002         fi
13003     done
13004     AC_MSG_RESULT([$qt6_incdir])
13005     if test "x$qt6_incdir" = "xno"; then
13006         AC_MSG_ERROR([Qt6 headers not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13007     fi
13008     # check for scenario: qt6-qtbase-devel-*.86_64 installed but host is i686
13009     AC_LANG_PUSH([C++])
13010     save_CPPFLAGS=$CPPFLAGS
13011     CPPFLAGS="${CPPFLAGS} -I${qt6_incdir}"
13012     AC_CHECK_HEADER(QtCore/qconfig.h, [],
13013         [AC_MSG_ERROR(qconfig.h header not found.)], [])
13014     CPPFLAGS=$save_CPPFLAGS
13015     AC_LANG_POP([C++])
13017     AC_MSG_CHECKING([for Qt6 libraries])
13018     qt6_libdir="no"
13019     for lib_dir in $qt6_libdirs; do
13020         if test -r "$lib_dir/$qt6_test_library"; then
13021             qt6_libdir="$lib_dir"
13022             break
13023         fi
13024     done
13025     AC_MSG_RESULT([$qt6_libdir])
13026     if test "x$qt6_libdir" = "xno"; then
13027         AC_MSG_ERROR([Qt6 libraries not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13028     fi
13030     if test "$_os" = "Emscripten"; then
13031         if test ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html ; then
13032             QT6_PLATFORMS_SRCDIR="${QT6_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
13033         fi
13034         if test ! -f "${qt6_platformsdir}"/libqwasm.a -o ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html; then
13035             AC_MSG_ERROR([No Qt6 WASM QPA plugin found in ${qt6_platformsdir} or ${QT6_PLATFORMS_SRCDIR}])
13036         fi
13037     fi
13039     QT6_CFLAGS="-I$qt6_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13040     QT6_CFLAGS=$(printf '%s' "$QT6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13041     QT6_LIBS="-L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
13042     if test "$_os" = "Emscripten"; then
13043         QT6_LIBS="$QT6_LIBS -lqtpcre2 -lQt6EventDispatcherSupport -lQt6FontDatabaseSupport -L${qt6_platformsdir} -lqwasm"
13044     fi
13046     if test "$USING_X11" = TRUE; then
13047         PKG_CHECK_MODULES(QT6_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for key modifier handling in X11.])])
13048         QT6_CFLAGS="$QT6_CFLAGS $QT6_XCB_CFLAGS"
13049         QT6_LIBS="$QT6_LIBS $QT6_XCB_LIBS"
13050         QT6_USING_X11=1
13051         AC_DEFINE(QT6_USING_X11)
13052     fi
13054     dnl Check for Meta Object Compiler
13056     AC_PATH_PROGS( MOC6, [moc-qt6 moc], no, [`dirname $qt6_libdir`/libexec:$QT6DIR/libexec:$PATH])
13057     if test "$MOC6" = "no"; then
13058         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13059 the root of your Qt installation by exporting QT6DIR before running "configure".])
13060     fi
13062 AC_SUBST(QT6_CFLAGS)
13063 AC_SUBST(QT6_LIBS)
13064 AC_SUBST(MOC6)
13065 AC_SUBST(QT6_PLATFORMS_SRCDIR)
13067 dnl ===================================================================
13068 dnl KF5 Integration
13069 dnl ===================================================================
13071 KF5_CFLAGS=""
13072 KF5_LIBS=""
13073 KF5_CONFIG="kf5-config"
13074 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13075         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13076 then
13077     if test "$OS" = "HAIKU"; then
13078         haiku_arch="`echo $RTL_ARCH | tr X x`"
13079         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13080         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13081     fi
13083     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
13084     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
13085     if test -n "$supports_multilib"; then
13086         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
13087     fi
13089     kf5_test_include="KF5/KIOFileWidgets/KFileWidget"
13090     kf5_test_library="libKF5KIOFileWidgets.so"
13091     kf5_libdirs="$qt5_libdir $kf5_libdirs"
13093     dnl kf5 KDE4 support compatibility installed
13094     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
13095     if test "$KF5_CONFIG" != "no"; then
13096         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
13097         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
13098     fi
13100     dnl Check for KF5 headers
13101     AC_MSG_CHECKING([for KF5 headers])
13102     kf5_incdir="no"
13103     for kf5_check in $kf5_incdirs; do
13104         if test -r "$kf5_check/$kf5_test_include"; then
13105             kf5_incdir="$kf5_check/KF5"
13106             break
13107         fi
13108     done
13109     AC_MSG_RESULT([$kf5_incdir])
13110     if test "x$kf5_incdir" = "xno"; then
13111         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13112     fi
13114     dnl Check for KF5 libraries
13115     AC_MSG_CHECKING([for KF5 libraries])
13116     kf5_libdir="no"
13117     for kf5_check in $kf5_libdirs; do
13118         if test -r "$kf5_check/$kf5_test_library"; then
13119             kf5_libdir="$kf5_check"
13120             break
13121         fi
13122     done
13124     AC_MSG_RESULT([$kf5_libdir])
13125     if test "x$kf5_libdir" = "xno"; then
13126         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13127     fi
13129     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"
13130     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13131     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13133     if test "$USING_X11" = TRUE; then
13134         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
13135     fi
13137     AC_LANG_PUSH([C++])
13138     save_CXXFLAGS=$CXXFLAGS
13139     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
13140     AC_MSG_CHECKING([whether KDE is >= 5.0])
13141        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13142 #include <kcoreaddons_version.h>
13144 int main(int argc, char **argv) {
13145        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
13146        else return 1;
13148        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13149     CXXFLAGS=$save_CXXFLAGS
13150     AC_LANG_POP([C++])
13152 AC_SUBST(KF5_CFLAGS)
13153 AC_SUBST(KF5_LIBS)
13155 dnl ===================================================================
13156 dnl Test whether to include Evolution 2 support
13157 dnl ===================================================================
13158 AC_MSG_CHECKING([whether to enable evolution 2 support])
13159 if test "$enable_evolution2" = yes; then
13160     AC_MSG_RESULT([yes])
13161     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
13162     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13163     FilterLibs "${GOBJECT_LIBS}"
13164     GOBJECT_LIBS="${filteredlibs}"
13165     ENABLE_EVOAB2="TRUE"
13166 else
13167     AC_MSG_RESULT([no])
13169 AC_SUBST(ENABLE_EVOAB2)
13170 AC_SUBST(GOBJECT_CFLAGS)
13171 AC_SUBST(GOBJECT_LIBS)
13173 dnl ===================================================================
13174 dnl Test which themes to include
13175 dnl ===================================================================
13176 AC_MSG_CHECKING([which themes to include])
13177 # if none given use default subset of available themes
13178 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
13179     with_theme="breeze breeze_dark breeze_dark_svg breeze_svg colibre colibre_svg elementary elementary_svg karasa_jaga karasa_jaga_svg sifr sifr_svg sifr_dark sifr_dark_svg sukapura sukapura_svg"
13182 WITH_THEMES=""
13183 if test "x$with_theme" != "xno"; then
13184     for theme in $with_theme; do
13185         case $theme in
13186         breeze|breeze_dark|breeze_dark_svg|breeze_svg|colibre|colibre_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg|sifr|sifr_svg|sifr_dark|sifr_dark_svg|sukapura|sukapura_svg) real_theme="$theme" ;;
13187         default) real_theme=colibre ;;
13188         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
13189         esac
13190         WITH_THEMES=`echo "$WITH_THEMES $real_theme"|tr '\ ' '\n'|sort|uniq|tr '\n' '\ '`
13191     done
13193 AC_MSG_RESULT([$WITH_THEMES])
13194 AC_SUBST([WITH_THEMES])
13195 # FIXME: remove this, and the convenience default->colibre remapping after a grace period
13196 for theme in $with_theme; do
13197     case $theme in
13198     default) AC_MSG_WARN([--with-theme=default is deprecated and will be removed, use --with-theme=colibre]) ;;
13199     *) ;;
13200     esac
13201 done
13203 ###############################################################################
13204 # Extensions checking
13205 ###############################################################################
13206 AC_MSG_CHECKING([for extensions integration])
13207 if test "x$enable_extension_integration" != "xno"; then
13208     WITH_EXTENSION_INTEGRATION=TRUE
13209     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
13210     AC_MSG_RESULT([yes, use integration])
13211 else
13212     WITH_EXTENSION_INTEGRATION=
13213     AC_MSG_RESULT([no, do not integrate])
13215 AC_SUBST(WITH_EXTENSION_INTEGRATION)
13217 dnl Should any extra extensions be included?
13218 dnl There are standalone tests for each of these below.
13219 WITH_EXTRA_EXTENSIONS=
13220 AC_SUBST([WITH_EXTRA_EXTENSIONS])
13222 libo_CHECK_EXTENSION([ConvertTextToNumber],[CT2N],[ct2n],[ct2n],[])
13223 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
13224 if test "x$with_java" != "xno"; then
13225     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
13226     libo_CHECK_EXTENSION([LanguageTool],[LANGUAGETOOL],[languagetool],[languagetool],[])
13229 AC_MSG_CHECKING([whether to build opens___.ttf])
13230 if test "$enable_build_opensymbol" = "yes"; then
13231     AC_MSG_RESULT([yes])
13232     AC_PATH_PROG(FONTFORGE, fontforge)
13233     if test -z "$FONTFORGE"; then
13234         AC_MSG_ERROR([fontforge not installed])
13235     fi
13236 else
13237     AC_MSG_RESULT([no])
13238     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
13240 AC_SUBST(FONTFORGE)
13242 dnl ===================================================================
13243 dnl Test whether to include fonts
13244 dnl ===================================================================
13245 AC_MSG_CHECKING([whether to include third-party fonts])
13246 if test "$with_fonts" != "no"; then
13247     AC_MSG_RESULT([yes])
13248     WITH_FONTS=TRUE
13249     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
13250     AC_DEFINE(HAVE_MORE_FONTS)
13251 else
13252     AC_MSG_RESULT([no])
13253     WITH_FONTS=
13254     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
13256 AC_SUBST(WITH_FONTS)
13258 dnl Test whether to include more Google Noto fonts
13259 dnl ===================================================================
13260 AC_MSG_CHECKING([whether to include more Google Noto fonts])
13261 if test "$enable_noto_font" = "" -o "$enable_noto_font" = "no" -o "$with_fonts" = "no"; then
13262     AC_MSG_RESULT([no])
13263     WITH_NOTO_FONT=
13264 else
13265     AC_MSG_RESULT([yes])
13266     WITH_NOTO_FONT=TRUE
13267     BUILD_TYPE="$BUILD_TYPE NOTO_FONT"
13268     SCPDEFS="$SCPDEFS -DWITH_NOTO_FONT"
13270 AC_SUBST(WITH_NOTO_FONT)
13272 dnl ===================================================================
13273 dnl Test whether to enable online update service
13274 dnl ===================================================================
13275 AC_MSG_CHECKING([whether to enable online update])
13276 ENABLE_ONLINE_UPDATE=
13277 ENABLE_ONLINE_UPDATE_MAR=
13278 UPDATE_CONFIG=
13279 if test "$enable_online_update" = ""; then
13280     AC_MSG_RESULT([no])
13281 else
13282     if test "$enable_online_update" = "mar"; then
13283         AC_MSG_RESULT([yes - MAR-based online update])
13284         ENABLE_ONLINE_UPDATE_MAR="TRUE"
13285         if test "$with_update_config" = ""; then
13286             AC_MSG_ERROR([mar based online updater needs an update config specified with "with-update-config])
13287         fi
13288         UPDATE_CONFIG="$with_update_config"
13289         AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
13290     elif test "$enable_online_update" = "yes"; then
13291         AC_MSG_RESULT([yes])
13292         ENABLE_ONLINE_UPDATE="TRUE"
13293     else
13294         AC_MSG_RESULT([no])
13295     fi
13297 AC_SUBST(ENABLE_ONLINE_UPDATE)
13298 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
13299 AC_SUBST(UPDATE_CONFIG)
13302 PRIVACY_POLICY_URL="$with_privacy_policy_url"
13303 if test "$ENABLE_ONLINE_UPDATE" = TRUE -o "$ENABLE_BREAKPAD" = "TRUE"; then
13304     if test "x$with_privacy_policy_url" = "xundefined"; then
13305         AC_MSG_FAILURE([online update or breakpad/crashreporting are enabled, but no --with-privacy-policy-url=... was provided])
13306     fi
13308 AC_SUBST(PRIVACY_POLICY_URL)
13309 dnl ===================================================================
13310 dnl Test whether we need bzip2
13311 dnl ===================================================================
13312 SYSTEM_BZIP2=
13313 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE"; then
13314     AC_MSG_CHECKING([whether to use system bzip2])
13315     if test "$with_system_bzip2" = yes; then
13316         SYSTEM_BZIP2=TRUE
13317         AC_MSG_RESULT([yes])
13318         PKG_CHECK_MODULES(BZIP2, bzip2)
13319         FilterLibs "${BZIP2_LIBS}"
13320         BZIP2_LIBS="${filteredlibs}"
13321     else
13322         AC_MSG_RESULT([no])
13323         BUILD_TYPE="$BUILD_TYPE BZIP2"
13324     fi
13326 AC_SUBST(SYSTEM_BZIP2)
13327 AC_SUBST(BZIP2_CFLAGS)
13328 AC_SUBST(BZIP2_LIBS)
13330 dnl ===================================================================
13331 dnl Test whether to enable extension update
13332 dnl ===================================================================
13333 AC_MSG_CHECKING([whether to enable extension update])
13334 ENABLE_EXTENSION_UPDATE=
13335 if test "x$enable_extension_update" = "xno"; then
13336     AC_MSG_RESULT([no])
13337 else
13338     AC_MSG_RESULT([yes])
13339     ENABLE_EXTENSION_UPDATE="TRUE"
13340     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
13341     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
13343 AC_SUBST(ENABLE_EXTENSION_UPDATE)
13346 dnl ===================================================================
13347 dnl Test whether to create MSI with LIMITUI=1 (silent install)
13348 dnl ===================================================================
13349 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
13350 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
13351     AC_MSG_RESULT([no])
13352     ENABLE_SILENT_MSI=
13353 else
13354     AC_MSG_RESULT([yes])
13355     ENABLE_SILENT_MSI=TRUE
13356     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
13358 AC_SUBST(ENABLE_SILENT_MSI)
13360 AC_MSG_CHECKING([whether and how to use Xinerama])
13361 if test "$_os" = "Linux" -o "$_os" = "FreeBSD"; then
13362     if test "$x_libraries" = "default_x_libraries"; then
13363         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
13364         if test "x$XINERAMALIB" = x; then
13365            XINERAMALIB="/usr/lib"
13366         fi
13367     else
13368         XINERAMALIB="$x_libraries"
13369     fi
13370     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13371         # we have both versions, let the user decide but use the dynamic one
13372         # per default
13373         USE_XINERAMA=TRUE
13374         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13375             XINERAMA_LINK=dynamic
13376         else
13377             XINERAMA_LINK=static
13378         fi
13379     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13380         # we have only the dynamic version
13381         USE_XINERAMA=TRUE
13382         XINERAMA_LINK=dynamic
13383     elif test -e "$XINERAMALIB/libXinerama.a"; then
13384         # static version
13385         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13386             USE_XINERAMA=TRUE
13387             XINERAMA_LINK=static
13388         else
13389             USE_XINERAMA=
13390             XINERAMA_LINK=none
13391         fi
13392     else
13393         # no Xinerama
13394         USE_XINERAMA=
13395         XINERAMA_LINK=none
13396     fi
13397     if test "$USE_XINERAMA" = "TRUE"; then
13398         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13399         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13400             [AC_MSG_ERROR(Xinerama header not found.)], [])
13401         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13402         if test "x$XEXTLIB" = x; then
13403            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13404         fi
13405         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13406         if test "$_os" = "FreeBSD"; then
13407             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13408         fi
13409         if test "$_os" = "Linux"; then
13410             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13411         fi
13412         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13413             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13414     else
13415         AC_MSG_RESULT([no, libXinerama not found or wrong architecture.])
13416     fi
13417 else
13418     USE_XINERAMA=
13419     XINERAMA_LINK=none
13420     AC_MSG_RESULT([no])
13422 AC_SUBST(USE_XINERAMA)
13423 AC_SUBST(XINERAMA_LINK)
13425 dnl ===================================================================
13426 dnl Test whether to build cairo or rely on the system version
13427 dnl ===================================================================
13429 if test "$test_cairo" = "yes"; then
13430     AC_MSG_CHECKING([whether to use the system cairo])
13432     : ${with_system_cairo:=$with_system_libs}
13433     if test "$with_system_cairo" = "yes"; then
13434         SYSTEM_CAIRO=TRUE
13435         AC_MSG_RESULT([yes])
13437         PKG_CHECK_MODULES( CAIRO, cairo >= 1.8.0 )
13438         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13439         FilterLibs "${CAIRO_LIBS}"
13440         CAIRO_LIBS="${filteredlibs}"
13442         if test "$test_xrender" = "yes"; then
13443             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13444             AC_LANG_PUSH([C])
13445             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13446 #ifdef PictStandardA8
13447 #else
13448       return fail;
13449 #endif
13450 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13452             AC_LANG_POP([C])
13453         fi
13454     else
13455         AC_MSG_RESULT([no])
13456         BUILD_TYPE="$BUILD_TYPE CAIRO"
13457     fi
13459     if test "$enable_cairo_canvas" != no; then
13460         AC_DEFINE(ENABLE_CAIRO_CANVAS)
13461         ENABLE_CAIRO_CANVAS=TRUE
13462     fi
13465 AC_SUBST(CAIRO_CFLAGS)
13466 AC_SUBST(CAIRO_LIBS)
13467 AC_SUBST(ENABLE_CAIRO_CANVAS)
13468 AC_SUBST(SYSTEM_CAIRO)
13470 dnl ===================================================================
13471 dnl Test whether to use avahi
13472 dnl ===================================================================
13473 if test "$_os" = "WINNT"; then
13474     # Windows uses bundled mDNSResponder
13475     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13476 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13477     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13478                       [ENABLE_AVAHI="TRUE"])
13479     AC_DEFINE(HAVE_FEATURE_AVAHI)
13480     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13481     FilterLibs "${AVAHI_LIBS}"
13482     AVAHI_LIBS="${filteredlibs}"
13485 AC_SUBST(ENABLE_AVAHI)
13486 AC_SUBST(AVAHI_CFLAGS)
13487 AC_SUBST(AVAHI_LIBS)
13489 dnl ===================================================================
13490 dnl Test whether to use liblangtag
13491 dnl ===================================================================
13492 SYSTEM_LIBLANGTAG=
13493 AC_MSG_CHECKING([whether to use system liblangtag])
13494 if test "$with_system_liblangtag" = yes; then
13495     SYSTEM_LIBLANGTAG=TRUE
13496     AC_MSG_RESULT([yes])
13497     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
13498     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
13499     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
13500     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13501     FilterLibs "${LIBLANGTAG_LIBS}"
13502     LIBLANGTAG_LIBS="${filteredlibs}"
13503 else
13504     SYSTEM_LIBLANGTAG=
13505     AC_MSG_RESULT([no])
13506     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
13507     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
13508     if test "$COM" = "MSC"; then
13509         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
13510     else
13511         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
13512     fi
13514 AC_SUBST(SYSTEM_LIBLANGTAG)
13515 AC_SUBST(LIBLANGTAG_CFLAGS)
13516 AC_SUBST(LIBLANGTAG_LIBS)
13518 dnl ===================================================================
13519 dnl Test whether to build libpng or rely on the system version
13520 dnl ===================================================================
13522 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng],["-I${WORKDIR}/UnpackedTarball/libpng"],["-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"])
13524 dnl ===================================================================
13525 dnl Test whether to build libtiff or rely on the system version
13526 dnl ===================================================================
13528 libo_CHECK_SYSTEM_MODULE([libtiff],[LIBTIFF],[libtiff-4])
13530 dnl ===================================================================
13531 dnl Test whether to build libwebp or rely on the system version
13532 dnl ===================================================================
13534 libo_CHECK_SYSTEM_MODULE([libwebp],[LIBWEBP],[libwebp])
13536 dnl ===================================================================
13537 dnl Check for runtime JVM search path
13538 dnl ===================================================================
13539 if test "$ENABLE_JAVA" != ""; then
13540     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
13541     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
13542         AC_MSG_RESULT([yes])
13543         if ! test -d "$with_jvm_path"; then
13544             AC_MSG_ERROR(["$with_jvm_path" not a directory])
13545         fi
13546         if ! test -d "$with_jvm_path"jvm; then
13547             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
13548         fi
13549         JVM_ONE_PATH_CHECK="$with_jvm_path"
13550         AC_SUBST(JVM_ONE_PATH_CHECK)
13551     else
13552         AC_MSG_RESULT([no])
13553     fi
13556 dnl ===================================================================
13557 dnl Test for the presence of Ant and that it works
13558 dnl ===================================================================
13560 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
13561     ANT_HOME=; export ANT_HOME
13562     WITH_ANT_HOME=; export WITH_ANT_HOME
13563     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
13564         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
13565             if test "$_os" = "WINNT"; then
13566                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
13567             else
13568                 with_ant_home="$LODE_HOME/opt/ant"
13569             fi
13570         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
13571             with_ant_home="$LODE_HOME/opt/ant"
13572         fi
13573     fi
13574     if test -z "$with_ant_home"; then
13575         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
13576     else
13577         if test "$_os" = "WINNT"; then
13578             # AC_PATH_PROGS needs unix path
13579             with_ant_home=`cygpath -u "$with_ant_home"`
13580         fi
13581         AbsolutePath "$with_ant_home"
13582         with_ant_home=$absolute_path
13583         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
13584         WITH_ANT_HOME=$with_ant_home
13585         ANT_HOME=$with_ant_home
13586     fi
13588     if test -z "$ANT"; then
13589         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
13590     else
13591         # resolve relative or absolute symlink
13592         while test -h "$ANT"; do
13593             a_cwd=`pwd`
13594             a_basename=`basename "$ANT"`
13595             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
13596             cd "`dirname "$ANT"`"
13597             cd "`dirname "$a_script"`"
13598             ANT="`pwd`"/"`basename "$a_script"`"
13599             cd "$a_cwd"
13600         done
13602         AC_MSG_CHECKING([if $ANT works])
13603         mkdir -p conftest.dir
13604         a_cwd=$(pwd)
13605         cd conftest.dir
13606         cat > conftest.java << EOF
13607         public class conftest {
13608             int testmethod(int a, int b) {
13609                     return a + b;
13610             }
13611         }
13614         cat > conftest.xml << EOF
13615         <project name="conftest" default="conftest">
13616         <target name="conftest">
13617             <javac srcdir="." includes="conftest.java">
13618             </javac>
13619         </target>
13620         </project>
13623         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
13624         if test $? = 0 -a -f ./conftest.class; then
13625             AC_MSG_RESULT([Ant works])
13626             if test -z "$WITH_ANT_HOME"; then
13627                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
13628                 if test -z "$ANT_HOME"; then
13629                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
13630                 fi
13631             else
13632                 ANT_HOME="$WITH_ANT_HOME"
13633             fi
13634         else
13635             echo "configure: Ant test failed" >&5
13636             cat conftest.java >&5
13637             cat conftest.xml >&5
13638             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
13639         fi
13640         cd "$a_cwd"
13641         rm -fr conftest.dir
13642     fi
13643     if test -z "$ANT_HOME"; then
13644         ANT_HOME="NO_ANT_HOME"
13645     else
13646         PathFormat "$ANT_HOME"
13647         ANT_HOME="$formatted_path"
13648         PathFormat "$ANT"
13649         ANT="$formatted_path"
13650     fi
13652     dnl Checking for ant.jar
13653     if test "$ANT_HOME" != "NO_ANT_HOME"; then
13654         AC_MSG_CHECKING([Ant lib directory])
13655         if test -f $ANT_HOME/lib/ant.jar; then
13656             ANT_LIB="$ANT_HOME/lib"
13657         else
13658             if test -f $ANT_HOME/ant.jar; then
13659                 ANT_LIB="$ANT_HOME"
13660             else
13661                 if test -f /usr/share/java/ant.jar; then
13662                     ANT_LIB=/usr/share/java
13663                 else
13664                     if test -f /usr/share/ant-core/lib/ant.jar; then
13665                         ANT_LIB=/usr/share/ant-core/lib
13666                     else
13667                         if test -f $ANT_HOME/lib/ant/ant.jar; then
13668                             ANT_LIB="$ANT_HOME/lib/ant"
13669                         else
13670                             if test -f /usr/share/lib/ant/ant.jar; then
13671                                 ANT_LIB=/usr/share/lib/ant
13672                             else
13673                                 AC_MSG_ERROR([Ant libraries not found!])
13674                             fi
13675                         fi
13676                     fi
13677                 fi
13678             fi
13679         fi
13680         PathFormat "$ANT_LIB"
13681         ANT_LIB="$formatted_path"
13682         AC_MSG_RESULT([Ant lib directory found.])
13683     fi
13685     ant_minver=1.6.0
13686     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
13688     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
13689     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
13690     ant_version_major=`echo $ant_version | cut -d. -f1`
13691     ant_version_minor=`echo $ant_version | cut -d. -f2`
13692     echo "configure: ant_version $ant_version " >&5
13693     echo "configure: ant_version_major $ant_version_major " >&5
13694     echo "configure: ant_version_minor $ant_version_minor " >&5
13695     if test "$ant_version_major" -ge "2"; then
13696         AC_MSG_RESULT([yes, $ant_version])
13697     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
13698         AC_MSG_RESULT([yes, $ant_version])
13699     else
13700         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
13701     fi
13703     rm -f conftest* core core.* *.core
13705 AC_SUBST(ANT)
13706 AC_SUBST(ANT_HOME)
13707 AC_SUBST(ANT_LIB)
13709 OOO_JUNIT_JAR=
13710 HAMCREST_JAR=
13711 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
13712     AC_MSG_CHECKING([for JUnit 4])
13713     if test "$with_junit" = "yes"; then
13714         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
13715             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
13716         elif test -e /usr/share/java/junit4.jar; then
13717             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
13718         else
13719            if test -e /usr/share/lib/java/junit.jar; then
13720               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
13721            else
13722               OOO_JUNIT_JAR=/usr/share/java/junit.jar
13723            fi
13724         fi
13725     else
13726         OOO_JUNIT_JAR=$with_junit
13727     fi
13728     if test "$_os" = "WINNT"; then
13729         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
13730     fi
13731     printf 'import org.junit.Before;' > conftest.java
13732     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13733         AC_MSG_RESULT([$OOO_JUNIT_JAR])
13734     else
13735         AC_MSG_ERROR(
13736 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
13737  specify its pathname via --with-junit=..., or disable it via --without-junit])
13738     fi
13739     rm -f conftest.class conftest.java
13740     if test $OOO_JUNIT_JAR != ""; then
13741         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
13742     fi
13744     AC_MSG_CHECKING([for included Hamcrest])
13745     printf 'import org.hamcrest.BaseDescription;' > conftest.java
13746     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13747         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
13748     else
13749         AC_MSG_RESULT([Not included])
13750         AC_MSG_CHECKING([for standalone hamcrest jar.])
13751         if test "$with_hamcrest" = "yes"; then
13752             if test -e /usr/share/lib/java/hamcrest.jar; then
13753                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
13754             elif test -e /usr/share/java/hamcrest/core.jar; then
13755                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
13756             elif test -e /usr/share/java/hamcrest/hamcrest.jar; then
13757                 HAMCREST_JAR=/usr/share/java/hamcrest/hamcrest.jar
13758             else
13759                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
13760             fi
13761         else
13762             HAMCREST_JAR=$with_hamcrest
13763         fi
13764         if test "$_os" = "WINNT"; then
13765             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
13766         fi
13767         if "$JAVACOMPILER" -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
13768             AC_MSG_RESULT([$HAMCREST_JAR])
13769         else
13770             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),
13771                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
13772         fi
13773     fi
13774     rm -f conftest.class conftest.java
13776 AC_SUBST(OOO_JUNIT_JAR)
13777 AC_SUBST(HAMCREST_JAR)
13780 AC_SUBST(SCPDEFS)
13783 # check for wget and curl
13785 WGET=
13786 CURL=
13788 if test "$enable_fetch_external" != "no"; then
13790 CURL=`which curl 2>/dev/null`
13792 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
13793     # wget new enough?
13794     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
13795     if test $? -eq 0; then
13796         WGET=$i
13797         break
13798     fi
13799 done
13801 if test -z "$WGET" -a -z "$CURL"; then
13802     AC_MSG_ERROR([neither wget nor curl found!])
13807 AC_SUBST(WGET)
13808 AC_SUBST(CURL)
13811 # check for sha256sum
13813 SHA256SUM=
13815 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
13816     eval "$i -a 256 --version" > /dev/null 2>&1
13817     ret=$?
13818     if test $ret -eq 0; then
13819         SHA256SUM="$i -a 256"
13820         break
13821     fi
13822 done
13824 if test -z "$SHA256SUM"; then
13825     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
13826         eval "$i --version" > /dev/null 2>&1
13827         ret=$?
13828         if test $ret -eq 0; then
13829             SHA256SUM=$i
13830             break
13831         fi
13832     done
13835 if test -z "$SHA256SUM"; then
13836     AC_MSG_ERROR([no sha256sum found!])
13839 AC_SUBST(SHA256SUM)
13841 dnl ===================================================================
13842 dnl Dealing with l10n options
13843 dnl ===================================================================
13844 AC_MSG_CHECKING([which languages to be built])
13845 # get list of all languages
13846 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
13847 # the sed command does the following:
13848 #   + if a line ends with a backslash, append the next line to it
13849 #   + adds " on the beginning of the value (after =)
13850 #   + adds " at the end of the value
13851 #   + removes en-US; we want to put it on the beginning
13852 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
13853 [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)]
13854 ALL_LANGS="en-US $completelangiso"
13855 # check the configured localizations
13856 WITH_LANG="$with_lang"
13858 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
13859 # (Norwegian is "nb" and "nn".)
13860 if test "$WITH_LANG" = "no"; then
13861     WITH_LANG=
13864 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
13865     AC_MSG_RESULT([en-US])
13866 else
13867     AC_MSG_RESULT([$WITH_LANG])
13868     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
13869     if test -z "$MSGFMT"; then
13870         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
13871             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
13872         elif test -x "/opt/lo/bin/msgfmt"; then
13873             MSGFMT="/opt/lo/bin/msgfmt"
13874         else
13875             AC_CHECK_PROGS(MSGFMT, [msgfmt])
13876             if test -z "$MSGFMT"; then
13877                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
13878             fi
13879         fi
13880     fi
13881     if test -z "$MSGUNIQ"; then
13882         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
13883             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
13884         elif test -x "/opt/lo/bin/msguniq"; then
13885             MSGUNIQ="/opt/lo/bin/msguniq"
13886         else
13887             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
13888             if test -z "$MSGUNIQ"; then
13889                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
13890             fi
13891         fi
13892     fi
13894 AC_SUBST(MSGFMT)
13895 AC_SUBST(MSGUNIQ)
13896 # check that the list is valid
13897 for lang in $WITH_LANG; do
13898     test "$lang" = "ALL" && continue
13899     # need to check for the exact string, so add space before and after the list of all languages
13900     for vl in $ALL_LANGS; do
13901         if test "$vl" = "$lang"; then
13902            break
13903         fi
13904     done
13905     if test "$vl" != "$lang"; then
13906         # if you're reading this - you prolly quoted your languages remove the quotes ...
13907         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
13908     fi
13909 done
13910 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
13911     echo $WITH_LANG | grep -q en-US
13912     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
13914 # list with substituted ALL
13915 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
13916 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
13917 test "$WITH_LANG" = "en-US" && WITH_LANG=
13918 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
13919     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
13920     ALL_LANGS=`echo $ALL_LANGS qtz`
13922 AC_SUBST(ALL_LANGS)
13923 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
13924 AC_SUBST(WITH_LANG)
13925 AC_SUBST(WITH_LANG_LIST)
13926 AC_SUBST(GIT_NEEDED_SUBMODULES)
13928 WITH_POOR_HELP_LOCALIZATIONS=
13929 if test -d "$SRC_ROOT/translations/source"; then
13930     for l in `ls -1 $SRC_ROOT/translations/source`; do
13931         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
13932             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
13933         fi
13934     done
13936 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
13938 if test -n "$with_locales"; then
13939     WITH_LOCALES="$with_locales"
13941     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
13942     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
13943     # config_host/config_locales.h.in
13944     for locale in $WITH_LOCALES; do
13945         lang=${locale%_*}
13947         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
13949         case $lang in
13950         hi|mr*ne)
13951             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
13952             ;;
13953         bg|ru)
13954             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
13955             ;;
13956         esac
13957     done
13958 else
13959     AC_DEFINE(WITH_LOCALE_ALL)
13961 AC_SUBST(WITH_LOCALES)
13963 dnl git submodule update --reference
13964 dnl ===================================================================
13965 if test -n "${GIT_REFERENCE_SRC}"; then
13966     for repo in ${GIT_NEEDED_SUBMODULES}; do
13967         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
13968             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
13969         fi
13970     done
13972 AC_SUBST(GIT_REFERENCE_SRC)
13974 dnl git submodules linked dirs
13975 dnl ===================================================================
13976 if test -n "${GIT_LINK_SRC}"; then
13977     for repo in ${GIT_NEEDED_SUBMODULES}; do
13978         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
13979             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
13980         fi
13981     done
13983 AC_SUBST(GIT_LINK_SRC)
13985 dnl branding
13986 dnl ===================================================================
13987 AC_MSG_CHECKING([for alternative branding images directory])
13988 # initialize mapped arrays
13989 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
13990 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
13992 if test -z "$with_branding" -o "$with_branding" = "no"; then
13993     AC_MSG_RESULT([none])
13994     DEFAULT_BRAND_IMAGES="$brand_files"
13995 else
13996     if ! test -d $with_branding ; then
13997         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
13998     else
13999         AC_MSG_RESULT([$with_branding])
14000         CUSTOM_BRAND_DIR="$with_branding"
14001         for lfile in $brand_files
14002         do
14003             if ! test -f $with_branding/$lfile ; then
14004                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
14005                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
14006             else
14007                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
14008             fi
14009         done
14010         check_for_progress="yes"
14011     fi
14013 AC_SUBST([BRAND_INTRO_IMAGES])
14014 AC_SUBST([CUSTOM_BRAND_DIR])
14015 AC_SUBST([CUSTOM_BRAND_IMAGES])
14016 AC_SUBST([DEFAULT_BRAND_IMAGES])
14019 AC_MSG_CHECKING([for 'intro' progress settings])
14020 PROGRESSBARCOLOR=
14021 PROGRESSSIZE=
14022 PROGRESSPOSITION=
14023 PROGRESSFRAMECOLOR=
14024 PROGRESSTEXTCOLOR=
14025 PROGRESSTEXTBASELINE=
14027 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
14028     source "$with_branding/progress.conf"
14029     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
14030 else
14031     AC_MSG_RESULT([none])
14034 AC_SUBST(PROGRESSBARCOLOR)
14035 AC_SUBST(PROGRESSSIZE)
14036 AC_SUBST(PROGRESSPOSITION)
14037 AC_SUBST(PROGRESSFRAMECOLOR)
14038 AC_SUBST(PROGRESSTEXTCOLOR)
14039 AC_SUBST(PROGRESSTEXTBASELINE)
14042 dnl ===================================================================
14043 dnl Custom build version
14044 dnl ===================================================================
14045 AC_MSG_CHECKING([for extra build ID])
14046 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
14047     EXTRA_BUILDID="$with_extra_buildid"
14049 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
14050 if test -n "$EXTRA_BUILDID" ; then
14051     AC_MSG_RESULT([$EXTRA_BUILDID])
14052 else
14053     AC_MSG_RESULT([not set])
14055 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
14057 OOO_VENDOR=
14058 AC_MSG_CHECKING([for vendor])
14059 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
14060     OOO_VENDOR="$USERNAME"
14062     if test -z "$OOO_VENDOR"; then
14063         OOO_VENDOR="$USER"
14064     fi
14066     if test -z "$OOO_VENDOR"; then
14067         OOO_VENDOR="`id -u -n`"
14068     fi
14070     AC_MSG_RESULT([not set, using $OOO_VENDOR])
14071 else
14072     OOO_VENDOR="$with_vendor"
14073     AC_MSG_RESULT([$OOO_VENDOR])
14075 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
14076 AC_SUBST(OOO_VENDOR)
14078 if test "$_os" = "Android" ; then
14079     ANDROID_PACKAGE_NAME=
14080     AC_MSG_CHECKING([for Android package name])
14081     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
14082         if test -n "$ENABLE_DEBUG"; then
14083             # Default to the package name that makes ndk-gdb happy.
14084             ANDROID_PACKAGE_NAME="org.libreoffice"
14085         else
14086             ANDROID_PACKAGE_NAME="org.example.libreoffice"
14087         fi
14089         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
14090     else
14091         ANDROID_PACKAGE_NAME="$with_android_package_name"
14092         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
14093     fi
14094     AC_SUBST(ANDROID_PACKAGE_NAME)
14097 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
14098 if test "$with_compat_oowrappers" = "yes"; then
14099     WITH_COMPAT_OOWRAPPERS=TRUE
14100     AC_MSG_RESULT(yes)
14101 else
14102     WITH_COMPAT_OOWRAPPERS=
14103     AC_MSG_RESULT(no)
14105 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
14107 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{gsub(" ", "", $0);print tolower($0)}'`
14108 AC_MSG_CHECKING([for install dirname])
14109 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
14110     INSTALLDIRNAME="$with_install_dirname"
14112 AC_MSG_RESULT([$INSTALLDIRNAME])
14113 AC_SUBST(INSTALLDIRNAME)
14115 AC_MSG_CHECKING([for prefix])
14116 test "x$prefix" = xNONE && prefix=$ac_default_prefix
14117 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
14118 PREFIXDIR="$prefix"
14119 AC_MSG_RESULT([$PREFIXDIR])
14120 AC_SUBST(PREFIXDIR)
14122 LIBDIR=[$(eval echo $(eval echo $libdir))]
14123 AC_SUBST(LIBDIR)
14125 DATADIR=[$(eval echo $(eval echo $datadir))]
14126 AC_SUBST(DATADIR)
14128 MANDIR=[$(eval echo $(eval echo $mandir))]
14129 AC_SUBST(MANDIR)
14131 DOCDIR=[$(eval echo $(eval echo $docdir))]
14132 AC_SUBST(DOCDIR)
14134 BINDIR=[$(eval echo $(eval echo $bindir))]
14135 AC_SUBST(BINDIR)
14137 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
14138 AC_SUBST(INSTALLDIR)
14140 TESTINSTALLDIR="${BUILDDIR}/test-install"
14141 AC_SUBST(TESTINSTALLDIR)
14144 # ===================================================================
14145 # OAuth2 id and secrets
14146 # ===================================================================
14148 AC_MSG_CHECKING([for Google Drive client id and secret])
14149 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
14150     AC_MSG_RESULT([not set])
14151     GDRIVE_CLIENT_ID="\"\""
14152     GDRIVE_CLIENT_SECRET="\"\""
14153 else
14154     AC_MSG_RESULT([set])
14155     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
14156     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
14158 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
14159 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
14161 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
14162 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
14163     AC_MSG_RESULT([not set])
14164     ALFRESCO_CLOUD_CLIENT_ID="\"\""
14165     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
14166 else
14167     AC_MSG_RESULT([set])
14168     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
14169     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
14171 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
14172 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
14174 AC_MSG_CHECKING([for OneDrive client id and secret])
14175 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
14176     AC_MSG_RESULT([not set])
14177     ONEDRIVE_CLIENT_ID="\"\""
14178     ONEDRIVE_CLIENT_SECRET="\"\""
14179 else
14180     AC_MSG_RESULT([set])
14181     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
14182     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
14184 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
14185 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
14188 dnl ===================================================================
14189 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
14190 dnl --enable-dependency-tracking configure option
14191 dnl ===================================================================
14192 AC_MSG_CHECKING([whether to enable dependency tracking])
14193 if test "$enable_dependency_tracking" = "no"; then
14194     nodep=TRUE
14195     AC_MSG_RESULT([no])
14196 else
14197     AC_MSG_RESULT([yes])
14199 AC_SUBST(nodep)
14201 dnl ===================================================================
14202 dnl Number of CPUs to use during the build
14203 dnl ===================================================================
14204 AC_MSG_CHECKING([for number of processors to use])
14205 # plain --with-parallelism is just the default
14206 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
14207     if test "$with_parallelism" = "no"; then
14208         PARALLELISM=0
14209     else
14210         PARALLELISM=$with_parallelism
14211     fi
14212 else
14213     if test "$enable_icecream" = "yes"; then
14214         PARALLELISM="40"
14215     else
14216         case `uname -s` in
14218         Darwin|FreeBSD|NetBSD|OpenBSD)
14219             PARALLELISM=`sysctl -n hw.ncpu`
14220             ;;
14222         Linux)
14223             PARALLELISM=`getconf _NPROCESSORS_ONLN`
14224         ;;
14225         # what else than above does profit here *and* has /proc?
14226         *)
14227             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
14228             ;;
14229         esac
14231         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
14232         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
14233     fi
14236 if test "$no_parallelism_make" = "YES" && test $PARALLELISM -gt 1; then
14237     if test -z "$with_parallelism"; then
14238             AC_MSG_WARN([gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this.])
14239             add_warning "gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this."
14240             PARALLELISM="1"
14241     else
14242         add_warning "make 3.81 is prone to crashes with parallelism > 1. Since --with-parallelism was explicitly given, it is honored, but do not complain when make segfaults on you."
14243     fi
14246 if test $PARALLELISM -eq 0; then
14247     AC_MSG_RESULT([explicit make -j option needed])
14248 else
14249     AC_MSG_RESULT([$PARALLELISM])
14251 AC_SUBST(PARALLELISM)
14253 IWYU_PATH="$with_iwyu"
14254 AC_SUBST(IWYU_PATH)
14255 if test ! -z "$IWYU_PATH"; then
14256     if test ! -f "$IWYU_PATH"; then
14257         AC_MSG_ERROR([cannot find include-what-you-use binary specified by --with-iwyu])
14258     fi
14262 # Set up ILIB for MSVC build
14264 ILIB1=
14265 if test "$build_os" = "cygwin"; then
14266     ILIB="."
14267     if test -n "$JAVA_HOME"; then
14268         ILIB="$ILIB;$JAVA_HOME/lib"
14269     fi
14270     ILIB1=-link
14271     ILIB="$ILIB;$COMPATH/lib/$WIN_HOST_ARCH"
14272     ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/$WIN_HOST_ARCH"
14273     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14274     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14275     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
14276         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14277         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14278     fi
14279     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
14280     ucrtlibpath_formatted=$formatted_path
14281     ILIB="$ILIB;$ucrtlibpath_formatted"
14282     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
14283     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
14284         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/lib"
14285     else
14286         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
14287     fi
14289     if test "$cross_compiling" != "yes"; then
14290         ILIB_FOR_BUILD="$ILIB"
14291     fi
14293 AC_SUBST(ILIB)
14294 AC_SUBST(ILIB_FOR_BUILD)
14296 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
14297 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
14298 dnl from consteval constructor initializing const variable",
14299 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
14300 dnl expression' with consteval constructor", <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
14301 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
14302 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'", or
14303 dnl <https://developercommunity.visualstudio.com/t/1581879> "Bogus error C7595 with consteval
14304 dnl constructor in ternary expression (/std:c++latest)":
14305 AC_LANG_PUSH([C++])
14306 save_CXX=$CXX
14307 if test "$COM" = MSC && test "$COM_IS_CLANG" != TRUE; then
14308     CXX="env LIB=$ILIB $CXX"
14310 save_CXXFLAGS=$CXXFLAGS
14311 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
14312 AC_RUN_IFELSE([AC_LANG_PROGRAM([
14313         struct S {
14314             consteval S() { i = 1; }
14315             int i = 0;
14316         };
14317         S const s;
14319         struct S1 { consteval S1(int) {} };
14320         struct S2 {
14321             S1 x;
14322             S2(): x(0) {}
14323         };
14325         struct S3 {
14326             consteval S3() {}
14327             union {
14328                 int a;
14329                 unsigned b = 0;
14330             };
14331         };
14332         void f() { S3(); }
14334         struct S4 { consteval S4() = default; };
14335         void f4(bool b) { b ? S4() : S4(); }
14336     ], [
14337         return (s.i == 1) ? 0 : 1;
14338     ])], [
14339         AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
14340         AC_MSG_RESULT([yes])
14341     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
14342 CXX=$save_CXX
14343 CXXFLAGS=$save_CXXFLAGS
14344 AC_LANG_POP([C++])
14346 # ===================================================================
14347 # Creating bigger shared library to link against
14348 # ===================================================================
14349 AC_MSG_CHECKING([whether to create huge library])
14350 MERGELIBS=
14352 if test $_os = iOS -o $_os = Android; then
14353     # Never any point in mergelibs for these as we build just static
14354     # libraries anyway...
14355     enable_mergelibs=no
14358 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
14359     if test $_os != Linux -a $_os != WINNT; then
14360         add_warning "--enable-mergelibs is not tested for this platform"
14361     fi
14362     MERGELIBS="TRUE"
14363     AC_MSG_RESULT([yes])
14364     AC_DEFINE(ENABLE_MERGELIBS)
14365 else
14366     AC_MSG_RESULT([no])
14368 AC_SUBST([MERGELIBS])
14370 dnl ===================================================================
14371 dnl icerun is a wrapper that stops us spawning tens of processes
14372 dnl locally - for tools that can't be executed on the compile cluster
14373 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
14374 dnl ===================================================================
14375 AC_MSG_CHECKING([whether to use icerun wrapper])
14376 ICECREAM_RUN=
14377 if test "$enable_icecream" = "yes" && which icerun >/dev/null 2>&1 ; then
14378     ICECREAM_RUN=icerun
14379     AC_MSG_RESULT([yes])
14380 else
14381     AC_MSG_RESULT([no])
14383 AC_SUBST(ICECREAM_RUN)
14385 dnl ===================================================================
14386 dnl Setup the ICECC_VERSION for the build the same way it was set for
14387 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
14388 dnl ===================================================================
14389 x_ICECC_VERSION=[\#]
14390 if test -n "$ICECC_VERSION" ; then
14391     x_ICECC_VERSION=
14393 AC_SUBST(x_ICECC_VERSION)
14394 AC_SUBST(ICECC_VERSION)
14396 dnl ===================================================================
14398 AC_MSG_CHECKING([MPL subset])
14399 MPL_SUBSET=
14401 if test "$enable_mpl_subset" = "yes"; then
14402     warn_report=false
14403     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
14404         warn_report=true
14405     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
14406         warn_report=true
14407     fi
14408     if test "$warn_report" = "true"; then
14409         AC_MSG_ERROR([need to --disable-report-builder - extended database report builder.])
14410     fi
14411     if test "x$enable_postgresql_sdbc" != "xno"; then
14412         AC_MSG_ERROR([need to --disable-postgresql-sdbc - the PostgreSQL database backend.])
14413     fi
14414     if test "$enable_lotuswordpro" = "yes"; then
14415         AC_MSG_ERROR([need to --disable-lotuswordpro - a Lotus Word Pro file format import filter.])
14416     fi
14417     if test "$WITH_WEBDAV" = "neon"; then
14418         AC_MSG_ERROR([need --with-webdav=serf or --without-webdav - webdav support.])
14419     fi
14420     if test -n "$ENABLE_POPPLER"; then
14421         if test "x$SYSTEM_POPPLER" = "x"; then
14422             AC_MSG_ERROR([need to disable PDF import via poppler or use system library])
14423         fi
14424     fi
14425     # cf. m4/libo_check_extension.m4
14426     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
14427         AC_MSG_ERROR([need to disable extra extensions '$WITH_EXTRA_EXTENSIONS'])
14428     fi
14429     for theme in $WITH_THEMES; do
14430         case $theme in
14431         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
14432             AC_MSG_ERROR([need to disable icon themes from '$WITH_THEMES': $theme present, use --with-theme=colibre]) ;;
14433         *) : ;;
14434         esac
14435     done
14437     ENABLE_OPENGL_TRANSITIONS=
14439     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
14440         AC_MSG_ERROR([need to --disable-lpsolve - calc linear programming solver.])
14441     fi
14443     MPL_SUBSET="TRUE"
14444     AC_DEFINE(MPL_HAVE_SUBSET)
14445     AC_MSG_RESULT([only])
14446 else
14447     AC_MSG_RESULT([no restrictions])
14449 AC_SUBST(MPL_SUBSET)
14451 dnl ===================================================================
14453 AC_MSG_CHECKING([formula logger])
14454 ENABLE_FORMULA_LOGGER=
14456 if test "x$enable_formula_logger" = "xyes"; then
14457     AC_MSG_RESULT([yes])
14458     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14459     ENABLE_FORMULA_LOGGER=TRUE
14460 elif test -n "$ENABLE_DBGUTIL" ; then
14461     AC_MSG_RESULT([yes])
14462     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14463     ENABLE_FORMULA_LOGGER=TRUE
14464 else
14465     AC_MSG_RESULT([no])
14468 AC_SUBST(ENABLE_FORMULA_LOGGER)
14470 dnl ===================================================================
14471 dnl Checking for active Antivirus software.
14472 dnl ===================================================================
14474 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
14475     AC_MSG_CHECKING([for active Antivirus software])
14476     ANTIVIRUS_LIST=`cscript.exe //Nologo $SRC_ROOT/antivirusDetection.vbs`
14477     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
14478         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
14479             AC_MSG_RESULT([found])
14480             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
14481             echo $EICAR_STRING > $SRC_ROOT/eicar
14482             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
14483             rm $SRC_ROOT/eicar
14484             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14485                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14486             fi
14487             echo $EICAR_STRING > $BUILDDIR/eicar
14488             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
14489             rm $BUILDDIR/eicar
14490             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14491                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14492             fi
14493             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"
14494         else
14495             AC_MSG_RESULT([not found])
14496         fi
14497     else
14498         AC_MSG_RESULT([n/a])
14499     fi
14502 dnl ===================================================================
14503 dnl Setting up the environment.
14504 dnl ===================================================================
14505 AC_MSG_NOTICE([setting up the build environment variables...])
14507 AC_SUBST(COMPATH)
14509 if test "$build_os" = "cygwin"; then
14510     if test -d "$COMPATH/atlmfc/lib/spectre"; then
14511         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
14512         ATL_INCLUDE="$COMPATH/atlmfc/include"
14513     elif test -d "$COMPATH/atlmfc/lib"; then
14514         ATL_LIB="$COMPATH/atlmfc/lib"
14515         ATL_INCLUDE="$COMPATH/atlmfc/include"
14516     else
14517         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
14518         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
14519     fi
14520     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
14521     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
14522     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
14524     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
14525     PathFormat "/usr/bin/find.exe"
14526     FIND="$formatted_path"
14527     PathFormat "/usr/bin/sort.exe"
14528     SORT="$formatted_path"
14529     PathFormat "/usr/bin/grep.exe"
14530     WIN_GREP="$formatted_path"
14531     PathFormat "/usr/bin/ls.exe"
14532     WIN_LS="$formatted_path"
14533     PathFormat "/usr/bin/touch.exe"
14534     WIN_TOUCH="$formatted_path"
14535 else
14536     FIND=find
14537     SORT=sort
14540 AC_SUBST(ATL_INCLUDE)
14541 AC_SUBST(ATL_LIB)
14542 AC_SUBST(FIND)
14543 AC_SUBST(SORT)
14544 AC_SUBST(WIN_GREP)
14545 AC_SUBST(WIN_LS)
14546 AC_SUBST(WIN_TOUCH)
14548 AC_SUBST(BUILD_TYPE)
14550 AC_SUBST(SOLARINC)
14552 PathFormat "$PERL"
14553 PERL="$formatted_path"
14554 AC_SUBST(PERL)
14556 if test -n "$TMPDIR"; then
14557     TEMP_DIRECTORY="$TMPDIR"
14558 else
14559     TEMP_DIRECTORY="/tmp"
14561 if test "$build_os" = "cygwin"; then
14562     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
14564 AC_SUBST(TEMP_DIRECTORY)
14566 # setup the PATH for the environment
14567 if test -n "$LO_PATH_FOR_BUILD"; then
14568     LO_PATH="$LO_PATH_FOR_BUILD"
14569     case "$host_os" in
14570     cygwin*|wsl*)
14571         pathmunge "$MSVC_HOST_PATH" "before"
14572         ;;
14573     esac
14574 else
14575     LO_PATH="$PATH"
14577     case "$host_os" in
14579     aix*|dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
14580         if test "$ENABLE_JAVA" != ""; then
14581             pathmunge "$JAVA_HOME/bin" "after"
14582         fi
14583         ;;
14585     cygwin*|wsl*)
14586         # Win32 make needs native paths
14587         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
14588             LO_PATH=`cygpath -p -m "$PATH"`
14589         fi
14590         if test "$WIN_BUILD_ARCH" = "x64"; then
14591             # needed for msi packaging
14592             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
14593         fi
14594         # .NET 4.6 and higher don't have bin directory
14595         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
14596             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
14597         fi
14598         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
14599         pathmunge "$CSC_PATH" "before"
14600         pathmunge "$MIDL_PATH" "before"
14601         pathmunge "$AL_PATH" "before"
14602         pathmunge "$MSVC_MULTI_PATH" "before"
14603         pathmunge "$MSVC_BUILD_PATH" "before"
14604         if test -n "$MSBUILD_PATH" ; then
14605             pathmunge "$MSBUILD_PATH" "before"
14606         fi
14607         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
14608         if test "$ENABLE_JAVA" != ""; then
14609             if test -d "$JAVA_HOME/jre/bin/client"; then
14610                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
14611             fi
14612             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
14613                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
14614             fi
14615             pathmunge "$JAVA_HOME/bin" "before"
14616         fi
14617         pathmunge "$MSVC_HOST_PATH" "before"
14618         ;;
14620     solaris*)
14621         pathmunge "/usr/css/bin" "before"
14622         if test "$ENABLE_JAVA" != ""; then
14623             pathmunge "$JAVA_HOME/bin" "after"
14624         fi
14625         ;;
14626     esac
14629 AC_SUBST(LO_PATH)
14631 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
14632 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
14633     x_LO_ELFCHECK_ALLOWLIST=
14634 else
14635     x_LO_ELFCHECK_ALLOWLIST=[\#]
14637 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
14638 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
14640 libo_FUZZ_SUMMARY
14642 # Generate a configuration sha256 we can use for deps
14643 if test -f config_host.mk; then
14644     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
14646 if test -f config_host_lang.mk; then
14647     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
14650 CFLAGS=$my_original_CFLAGS
14651 CXXFLAGS=$my_original_CXXFLAGS
14652 CPPFLAGS=$my_original_CPPFLAGS
14654 AC_CONFIG_LINKS([include:include])
14656 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
14657 # BUILD platform configuration] - otherwise breaks cross building
14658 AC_CONFIG_FILES([config_host.mk
14659                  config_host_lang.mk
14660                  Makefile
14661                  lo.xcent
14662                  bin/bffvalidator.sh
14663                  bin/odfvalidator.sh
14664                  bin/officeotron.sh
14665                  hardened_runtime.xcent
14666                  instsetoo_native/util/openoffice.lst
14667                  sysui/desktop/macosx/Info.plist
14668                  vs-code-template.code-workspace:.vscode/vs-code-template.code-workspace.in])
14669 AC_CONFIG_HEADERS([config_host/config_buildconfig.h])
14670 AC_CONFIG_HEADERS([config_host/config_buildid.h])
14671 AC_CONFIG_HEADERS([config_host/config_box2d.h])
14672 AC_CONFIG_HEADERS([config_host/config_clang.h])
14673 AC_CONFIG_HEADERS([config_host/config_crypto.h])
14674 AC_CONFIG_HEADERS([config_host/config_dconf.h])
14675 AC_CONFIG_HEADERS([config_host/config_eot.h])
14676 AC_CONFIG_HEADERS([config_host/config_extensions.h])
14677 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
14678 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
14679 AC_CONFIG_HEADERS([config_host/config_dbus.h])
14680 AC_CONFIG_HEADERS([config_host/config_features.h])
14681 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
14682 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
14683 AC_CONFIG_HEADERS([config_host/config_firebird.h])
14684 AC_CONFIG_HEADERS([config_host/config_folders.h])
14685 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
14686 AC_CONFIG_HEADERS([config_host/config_gio.h])
14687 AC_CONFIG_HEADERS([config_host/config_global.h])
14688 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
14689 AC_CONFIG_HEADERS([config_host/config_java.h])
14690 AC_CONFIG_HEADERS([config_host/config_langs.h])
14691 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
14692 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
14693 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
14694 AC_CONFIG_HEADERS([config_host/config_locales.h])
14695 AC_CONFIG_HEADERS([config_host/config_mpl.h])
14696 AC_CONFIG_HEADERS([config_host/config_oox.h])
14697 AC_CONFIG_HEADERS([config_host/config_options.h])
14698 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
14699 AC_CONFIG_HEADERS([config_host/config_zxing.h])
14700 AC_CONFIG_HEADERS([config_host/config_skia.h])
14701 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
14702 AC_CONFIG_HEADERS([config_host/config_vendor.h])
14703 AC_CONFIG_HEADERS([config_host/config_vcl.h])
14704 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
14705 AC_CONFIG_HEADERS([config_host/config_version.h])
14706 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
14707 AC_CONFIG_HEADERS([config_host/config_poppler.h])
14708 AC_CONFIG_HEADERS([config_host/config_python.h])
14709 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
14710 AC_OUTPUT
14712 if test "$CROSS_COMPILING" = TRUE; then
14713     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
14716 # touch the config timestamp file
14717 if test ! -f config_host.mk.stamp; then
14718     echo > config_host.mk.stamp
14719 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
14720     echo "Host Configuration unchanged - avoiding scp2 stamp update"
14721 else
14722     echo > config_host.mk.stamp
14725 # touch the config lang timestamp file
14726 if test ! -f config_host_lang.mk.stamp; then
14727     echo > config_host_lang.mk.stamp
14728 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
14729     echo "Language Configuration unchanged - avoiding scp2 stamp update"
14730 else
14731     echo > config_host_lang.mk.stamp
14735 if test \( "$STALE_MAKE" = "TRUE" -o "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE" \) \
14736         -a "$build_os" = "cygwin"; then
14738 cat << _EOS
14739 ****************************************************************************
14740 WARNING:
14741 Your make version is known to be horribly slow, and hard to debug
14742 problems with. To get a reasonably functional make please do:
14744 to install a pre-compiled binary make for Win32
14746  mkdir -p /opt/lo/bin
14747  cd /opt/lo/bin
14748  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
14749  cp make-4.2.1-msvc.exe make
14750  chmod +x make
14752 to install from source:
14753 place yourself in a working directory of you choice.
14755  git clone git://git.savannah.gnu.org/make.git
14757  [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"]
14758  set PATH=%PATH%;C:\Cygwin\bin
14759  [or Cygwin64, if that is what you have]
14760  cd path-to-make-repo-you-cloned-above
14761  build_w32.bat --without-guile
14763 should result in a WinRel/gnumake.exe.
14764 Copy it to the Cygwin /opt/lo/bin directory as make.exe
14766 Then re-run autogen.sh
14768 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
14769 Alternatively, you can install the 'new' make where ever you want and make sure that `which make` finds it.
14771 _EOS
14772 if test "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE"; then
14773     AC_MSG_ERROR([no file function found; the build will fail without it; use GNU make 4.0 or later])
14778 cat << _EOF
14779 ****************************************************************************
14781 To build, run:
14782 $GNUMAKE
14784 To view some help, run:
14785 $GNUMAKE help
14787 _EOF
14789 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
14790     cat << _EOF
14791 After the build has finished successfully, you can immediately run what you built using the command:
14792 _EOF
14794     if test $_os = Darwin; then
14795         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
14796     else
14797         echo instdir/program/soffice
14798     fi
14799     cat << _EOF
14801 If you want to run the smoketest, run:
14802 $GNUMAKE check
14804 _EOF
14807 if test -s "$WARNINGS_FILE_FOR_BUILD"; then
14808     echo "BUILD / cross-toolset config, repeated ($WARNINGS_FILE_FOR_BUILD)"
14809     cat "$WARNINGS_FILE_FOR_BUILD"
14810     echo
14813 if test -s "$WARNINGS_FILE"; then
14814     echo "HOST config ($WARNINGS_FILE)"
14815     cat "$WARNINGS_FILE"
14818 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: