tdf#149186: Table of contents editor not showing buttons in Dutch UI
[LibreOffice.git] / configure.ac
blob1bce50885f53611eec68a5d76192868e05751407
1 dnl -*- Mode: Autoconf; tab-width: 4; indent-tabs-mode: nil; fill-column: 100 -*-
2 dnl configure.ac serves as input for the GNU autoconf package
3 dnl in order to create a configure script.
5 # The version number in the second argument to AC_INIT should be four numbers separated by
6 # periods. Some parts of the code requires the first one to be less than 128 and the others to be less
7 # than 256. The four numbers can optionally be followed by a period and a free-form string containing
8 # no spaces or periods, like "frobozz-mumble-42" or "alpha0". If the free-form string ends with one or
9 # several non-alphanumeric characters, those are split off and used only for the
10 # ABOUTBOXPRODUCTVERSIONSUFFIX in openoffice.lst. Why that is necessary, no idea.
12 AC_INIT([LibreOffice],[7.3.5.0.0+],[],[],[http://documentfoundation.org/])
14 dnl libnumbertext needs autoconf 2.68, but that can pick up autoconf268 just fine if it is installed
15 dnl whereas aclocal (as run by autogen.sh) insists on using autoconf and fails hard
16 dnl so check for the version of autoconf that is actually used to create the configure script
17 AC_PREREQ([2.59])
18 m4_if(m4_version_compare(m4_defn([AC_AUTOCONF_VERSION]), [2.68]), -1,
19     [AC_MSG_ERROR([at least autoconf version 2.68 is needed (you can use AUTOCONF environment variable to point to a suitable one)])])
21 if test -n "$BUILD_TYPE"; then
22     AC_MSG_ERROR([You have sourced config_host.mk in this shell.  This may lead to trouble, please run in a fresh (login) shell.])
25 save_CC=$CC
26 save_CXX=$CXX
28 first_arg_basename()
30     for i in $1; do
31         basename "$i"
32         break
33     done
36 CC_BASE=`first_arg_basename "$CC"`
37 CXX_BASE=`first_arg_basename "$CXX"`
39 BUILD_TYPE="LibO"
40 SCPDEFS=""
41 GIT_NEEDED_SUBMODULES=""
42 LO_PATH= # used by path_munge to construct a PATH variable
44 FilterLibs()
46     # Return value: $filteredlibs
48     filteredlibs=
49     for f in $1; do
50         case "$f" in
51             # let's start with Fedora's paths for now
52             -L/lib|-L/lib/|-L/lib64|-L/lib64/|-L/usr/lib|-L/usr/lib/|-L/usr/lib64|-L/usr/lib64/)
53                 # ignore it: on UNIXoids it is searched by default anyway
54                 # but if it's given explicitly then it may override other paths
55                 # (on macOS it would be an error to use it instead of SDK)
56                 ;;
57             *)
58                 filteredlibs="$filteredlibs $f"
59                 ;;
60         esac
61     done
64 PathFormat()
66     # Args: $1: A pathname. On Cygwin and WSL, in either the Unix or the Windows format. Note that this
67     # function is called also on Unix.
68     #
69     # Return value: $formatted_path and $formatted_path_unix.
70     #
71     # $formatted_path is the argument in Windows format, but using forward slashes instead of
72     # backslashes, using 8.3 pathname components if necessary (if it otherwise would contains spaces
73     # or shell metacharacters).
74     #
75     # $formatted_path_unix is the argument in a form usable in Cygwin or WSL, using 8.3 components if
76     # necessary. On Cygwin, it is the same as $formatted_path, but on WSL it is $formatted_path as a
77     # Unix pathname.
78     #
79     # Errors out if 8.3 names are needed but aren't present for some of the path components.
81     # Examples:
82     #
83     # /home/tml/lo/master-optimised => C:/cygwin64/home/tml/lo/master-optimised
84     #
85     # C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe => C:/PROGRA~2/MICROS~3/INSTAL~1/vswhere.exe
86     #
87     # C:\Program Files (x86)\Microsoft Visual Studio\2019\Community => C:/PROGRA~2/MICROS~3/2019/COMMUN~1
88     #
89     # C:/PROGRA~2/WI3CF2~1/10/Include/10.0.18362.0/ucrt => C:/PROGRA~2/WI3CF2~1/10/Include/10.0.18362.0/ucrt
90     #
91     # /cygdrive/c/PROGRA~2/WI3CF2~1/10 => C:/PROGRA~2/WI3CF2~1/10
92     #
93     # C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\ => C:/PROGRA~2/WI3CF2~1/NETFXSDK/4.8/
94     #
95     # /usr/bin/find.exe => C:/cygwin64/bin/find.exe
97     if test -n "$UNITTEST_WSL_PATHFORMAT"; then
98         printf "PathFormat $1 ==> "
99     fi
101     formatted_path="$1"
102     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
103         if test "$build_os" = "wsl"; then
104             formatted_path=$(echo "$formatted_path" | tr -d '\r')
105         fi
107         pf_conv_to_dos=
108         # spaces,parentheses,brackets,braces are problematic in pathname
109         # so are backslashes
110         case "$formatted_path" in
111             *\ * | *\)* | *\(* | *\{* | *\}* | *\[* | *\]* | *\\* )
112                 pf_conv_to_dos="yes"
113             ;;
114         esac
115         if test "$pf_conv_to_dos" = "yes"; then
116             if test "$build_os" = "wsl"; then
117                 case "$formatted_path" in
118                     /*)
119                         formatted_path=$(wslpath -w "$formatted_path")
120                         ;;
121                 esac
122                 formatted_path=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --8.3 "$formatted_path")
123             elif test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
124                 formatted_path=`cygpath -sm "$formatted_path"`
125             else
126                 formatted_path=`cygpath -d "$formatted_path"`
127             fi
128             if test $? -ne 0;  then
129                 AC_MSG_ERROR([path conversion failed for "$1".])
130             fi
131         fi
132         fp_count_colon=`echo "$formatted_path" | $GREP -c "[:]"`
133         fp_count_slash=`echo "$formatted_path" | $GREP -c "[/]"`
134         if test "$fp_count_slash$fp_count_colon" != "00"; then
135             if test "$fp_count_colon" = "0"; then
136                 new_formatted_path=`realpath "$formatted_path"`
137                 if test $? -ne 0;  then
138                     AC_MSG_WARN([realpath failed for "$formatted_path", not necessarily a problem.])
139                 else
140                     formatted_path="$new_formatted_path"
141                 fi
142             fi
143             if test "$build_os" = "wsl"; then
144                 if test "$fp_count_colon" != "0"; then
145                     formatted_path=$(wslpath "$formatted_path")
146                     local final_slash=
147                     case "$formatted_path" in
148                         */)
149                             final_slash=/
150                             ;;
151                     esac
152                     formatted_path=$(wslpath -m $formatted_path)
153                     case "$formatted_path" in
154                         */)
155                             ;;
156                         *)
157                             formatted_path="$formatted_path"$final_slash
158                             ;;
159                     esac
160                 else
161                     formatted_path=$(wslpath -m "$formatted_path")
162                 fi
163             else
164                 formatted_path=`cygpath -m "$formatted_path"`
165             fi
166             if test $? -ne 0;  then
167                 AC_MSG_ERROR([path conversion failed for "$1".])
168             fi
169         fi
170         fp_count_space=`echo "$formatted_path" | $GREP -c "[ ]"`
171         if test "$fp_count_space" != "0"; then
172             AC_MSG_ERROR([converted path "$formatted_path" still contains spaces. Short filenames (8.3 filenames) support was disabled on this system?])
173         fi
174     fi
175     if test "$build_os" = "wsl"; then
176         # WSL can't run Windows binaries from Windows pathnames so we need a separate return value in Unix format
177         formatted_path_unix=$(wslpath "$formatted_path")
178     else
179         # But Cygwin can
180         formatted_path_unix="$formatted_path"
181     fi
184 AbsolutePath()
186     # There appears to be no simple and portable method to get an absolute and
187     # canonical path, so we try creating the directory if does not exist and
188     # utilizing the shell and pwd.
190     # Args: $1: A possibly relative pathname
191     # Return value: $absolute_path
193     local rel="$1"
194     absolute_path=""
195     test ! -e "$rel" && mkdir -p "$rel"
196     if test -d "$rel" ; then
197         cd "$rel" || AC_MSG_ERROR([absolute path resolution failed for "$rel".])
198         absolute_path="$(pwd)"
199         cd - > /dev/null
200     else
201         AC_MSG_ERROR([Failed to resolve absolute path.  "$rel" does not exist or is not a directory.])
202     fi
205 WARNINGS_FILE=config.warn
206 WARNINGS_FILE_FOR_BUILD=config.Build.warn
207 rm -f "$WARNINGS_FILE" "$WARNINGS_FILE_FOR_BUILD"
208 have_WARNINGS="no"
209 add_warning()
211     if test "$have_WARNINGS" = "no"; then
212         echo "*************************************" > "$WARNINGS_FILE"
213         have_WARNINGS="yes"
214         if which tput >/dev/null && test "`tput colors 2>/dev/null || echo 0`" -ge 8; then
215             dnl <esc> as actual byte (U+1b), [ escaped using quadrigraph @<:@
216             COLORWARN='*\e@<:@1;33;40m WARNING \e@<:@0m:'
217         else
218             COLORWARN="* WARNING :"
219         fi
220     fi
221     echo "$COLORWARN $@" >> "$WARNINGS_FILE"
224 dnl Some Mac User have the bad habit of letting a lot of crap
225 dnl accumulate in their PATH and even adding stuff in /usr/local/bin
226 dnl that confuse the build.
227 dnl For the ones that use LODE, let's be nice and protect them
228 dnl from themselves
230 mac_sanitize_path()
232     mac_path="$LODE_HOME/opt/bin:/usr/bin:/bin:/usr/sbin:/sbin"
233 dnl a common but nevertheless necessary thing that may be in a fancy
234 dnl path location is git, so make sure we have it
235     mac_git_path=`which git 2>/dev/null`
236     if test -n "$mac_git_path" -a -x "$mac_git_path" -a "$mac_git_path" != "/usr/bin/git" ; then
237         mac_path="$mac_path:`dirname $mac_git_path`"
238     fi
239 dnl a not so common but nevertheless quite helpful thing that may be in a fancy
240 dnl path location is gpg, so make sure we find it
241     mac_gpg_path=`which gpg 2>/dev/null`
242     if test -n "$mac_gpg_path" -a -x "$mac_gpg_path" -a "$mac_gpg_path" != "/usr/bin/gpg" ; then
243         mac_path="$mac_path:`dirname $mac_gpg_path`"
244     fi
245     PATH="$mac_path"
246     unset mac_path
247     unset mac_git_path
248     unset mac_gpg_path
251 echo "********************************************************************"
252 echo "*"
253 echo "*   Running ${PACKAGE_NAME} build configuration."
254 echo "*"
255 echo "********************************************************************"
256 echo ""
258 dnl ===================================================================
259 dnl checks build and host OSes
260 dnl do this before argument processing to allow for platform dependent defaults
261 dnl ===================================================================
263 # Check for WSL (version 2, at least). But if --host is explicitly specified (to really do build for
264 # Linux on WSL) trust that.
265 if test -z "$host" -a -z "$build" -a "`wslsys -v 2>/dev/null`" != ""; then
266     ac_cv_host="x86_64-pc-wsl"
267     ac_cv_host_cpu="x86_64"
268     ac_cv_host_os="wsl"
269     ac_cv_build="$ac_cv_host"
270     ac_cv_build_cpu="$ac_cv_host_cpu"
271     ac_cv_build_os="$ac_cv_host_os"
273     # Emulation of Cygwin's cygpath command for WSL.
274     cygpath()
275     {
276         if test -n "$UNITTEST_WSL_CYGPATH"; then
277             echo -n cygpath "$@" "==> "
278         fi
280         # Cygwin's real cygpath has a plethora of options but we use only a few here.
281         local args="$@"
282         local opt
283         local opt_d opt_m opt_u opt_w opt_l opt_s opt_p
284         OPTIND=1
286         while getopts dmuwlsp opt; do
287             case "$opt" in
288                 \?)
289                     AC_MSG_ERROR([Unimplemented cygpath emulation option in invocation: cygpath $args])
290                     ;;
291                 ?)
292                     eval opt_$opt=yes
293                     ;;
294             esac
295         done
297         shift $((OPTIND-1))
299         if test $# -ne 1; then
300             AC_MSG_ERROR([Invalid cygpath emulation invocation: Pathname missing]);
301         fi
303         local input="$1"
305         local result
307         if test -n "$opt_d" -o -n "$opt_m" -o -n "$opt_w"; then
308             # Print Windows path, possibly in 8.3 form (-d) or with forward slashes (-m)
310             if test -n "$opt_u"; then
311                 AC_MSG_ERROR([Invalid cygpath invocation: Both Windows and Unix path output requested])
312             fi
314             case "$input" in
315                 /mnt/*)
316                     # A Windows file in WSL format
317                     input=$(wslpath -w "$input")
318                     ;;
319                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
320                     # Already in Windows format
321                     ;;
322                 /*)
323                     input=$(wslpath -w "$input")
324                     ;;
325                 *)
326                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
327                     ;;
328             esac
329             if test -n "$opt_d" -o -n "$opt_s"; then
330                 input=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --8.3 "$input")
331             fi
332             if test -n "$opt_m"; then
333                 input="${input//\\//}"
334             fi
335             echo "$input"
336         else
337             # Print Unix path
339             case "$input" in
340                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
341                     wslpath -u "$input"
342                     ;;
343                 /)
344                     echo "$input"
345                     ;;
346                 *)
347                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
348                     ;;
349             esac
350         fi
351     }
353     if test -n "$UNITTEST_WSL_CYGPATH"; then
354         BUILDDIR=.
356         # Nothing special with these file names, just arbitrary ones picked to test with
357         cygpath -d /usr/lib64/ld-linux-x86-64.so.2
358         cygpath -w /usr/lib64/ld-linux-x86-64.so.2
359         cygpath -m /usr/lib64/ld-linux-x86-64.so.2
360         cygpath -m -s /usr/lib64/ld-linux-x86-64.so.2
361         # At least on my machine for instance this file does have an 8.3 name
362         cygpath -d /mnt/c/windows/WindowsUpdate.log
363         # But for instance this one doesn't
364         cygpath -w /mnt/c/windows/system32/AboutSettingsHandlers.dll
365         cygpath -ws /mnt/c/windows/WindowsUpdate.log
366         cygpath -m /mnt/c/windows/system32/AboutSettingsHandlers.dll
367         cygpath -ms /mnt/c/windows/WindowsUpdate.log
369         cygpath -u 'c:\windows\system32\AboutSettingsHandlers.dll'
370         cygpath -u 'c:/windows/system32/AboutSettingsHandlers.dll'
372         exit 0
373     fi
376 AC_CANONICAL_HOST
377 AC_CANONICAL_BUILD
379 if test -n "$UNITTEST_WSL_PATHFORMAT"; then
380     BUILDDIR=.
381     GREP=grep
383     # Use of PathFormat must be after AC_CANONICAL_BUILD above
384     PathFormat /
385     printf "$formatted_path , $formatted_path_unix\n"
387     PathFormat $PWD
388     printf "$formatted_path , $formatted_path_unix\n"
390     PathFormat "$PROGRAMFILESX86"
391     printf "$formatted_path , $formatted_path_unix\n"
393     exit 0
396 AC_MSG_CHECKING([for product name])
397 PRODUCTNAME="AC_PACKAGE_NAME"
398 if test -n "$with_product_name" -a "$with_product_name" != no; then
399     PRODUCTNAME="$with_product_name"
401 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
402     PRODUCTNAME="${PRODUCTNAME}Dev"
404 AC_MSG_RESULT([$PRODUCTNAME])
405 AC_SUBST(PRODUCTNAME)
406 PRODUCTNAME_WITHOUT_SPACES=$(printf %s "$PRODUCTNAME" | sed 's/ //g')
407 AC_SUBST(PRODUCTNAME_WITHOUT_SPACES)
409 dnl ===================================================================
410 dnl Our version is defined by the AC_INIT() at the top of this script.
411 dnl ===================================================================
413 AC_MSG_CHECKING([for package version])
414 if test -n "$with_package_version" -a "$with_package_version" != no; then
415     PACKAGE_VERSION="$with_package_version"
417 AC_MSG_RESULT([$PACKAGE_VERSION])
419 set `echo "$PACKAGE_VERSION" | sed "s/\./ /g"`
421 LIBO_VERSION_MAJOR=$1
422 LIBO_VERSION_MINOR=$2
423 LIBO_VERSION_MICRO=$3
424 LIBO_VERSION_PATCH=$4
426 LIBO_VERSION_SUFFIX=$5
428 # Split out LIBO_VERSION_SUFFIX_SUFFIX... horrible crack. But apparently wanted separately in
429 # openoffice.lst as ABOUTBOXPRODUCTVERSIONSUFFIX. Note that the double brackets are for m4's sake,
430 # they get undoubled before actually passed to sed.
431 LIBO_VERSION_SUFFIX_SUFFIX=`echo "$LIBO_VERSION_SUFFIX" | sed -e 's/.*[[a-zA-Z0-9]]\([[^a-zA-Z0-9]]*\)$/\1/'`
432 test -n "$LIBO_VERSION_SUFFIX_SUFFIX" && LIBO_VERSION_SUFFIX="${LIBO_VERSION_SUFFIX%${LIBO_VERSION_SUFFIX_SUFFIX}}"
433 # LIBO_VERSION_SUFFIX, if non-empty, should include the period separator
434 test -n "$LIBO_VERSION_SUFFIX" && LIBO_VERSION_SUFFIX=".$LIBO_VERSION_SUFFIX"
436 # The value for key CFBundleVersion in the Info.plist file must be a period-separated list of at most
437 # three non-negative integers. Please find more information about CFBundleVersion at
438 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleversion
440 # The value for key CFBundleShortVersionString in the Info.plist file must be a period-separated list
441 # of at most three non-negative integers. Please find more information about
442 # CFBundleShortVersionString at
443 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring
445 # But that is enforced only in the App Store, and we apparently want to break the rules otherwise.
447 if test "$enable_macosx_sandbox" = yes; then
448     MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.`expr $LIBO_VERSION_MICRO '*' 1000 + $LIBO_VERSION_PATCH`
449     MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION
450 else
451     MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.$LIBO_VERSION_MICRO.$LIBO_VERSION_PATCH
452     MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION$LIBO_VERSION_SUFFIX
455 AC_SUBST(LIBO_VERSION_MAJOR)
456 AC_SUBST(LIBO_VERSION_MINOR)
457 AC_SUBST(LIBO_VERSION_MICRO)
458 AC_SUBST(LIBO_VERSION_PATCH)
459 AC_SUBST(LIBO_VERSION_SUFFIX)
460 AC_SUBST(LIBO_VERSION_SUFFIX_SUFFIX)
461 AC_SUBST(MACOSX_BUNDLE_SHORTVERSION)
462 AC_SUBST(MACOSX_BUNDLE_VERSION)
464 AC_DEFINE_UNQUOTED(LIBO_VERSION_MAJOR,$LIBO_VERSION_MAJOR)
465 AC_DEFINE_UNQUOTED(LIBO_VERSION_MINOR,$LIBO_VERSION_MINOR)
466 AC_DEFINE_UNQUOTED(LIBO_VERSION_MICRO,$LIBO_VERSION_MICRO)
467 AC_DEFINE_UNQUOTED(LIBO_VERSION_PATCH,$LIBO_VERSION_PATCH)
469 LIBO_THIS_YEAR=`date +%Y`
470 AC_DEFINE_UNQUOTED(LIBO_THIS_YEAR,$LIBO_THIS_YEAR)
472 dnl ===================================================================
473 dnl Product version
474 dnl ===================================================================
475 AC_MSG_CHECKING([for product version])
476 PRODUCTVERSION="$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR"
477 AC_MSG_RESULT([$PRODUCTVERSION])
478 AC_SUBST(PRODUCTVERSION)
480 AC_PROG_EGREP
481 # AC_PROG_EGREP doesn't set GREP on all systems as well
482 AC_PATH_PROG(GREP, grep)
484 BUILDDIR=`pwd`
485 cd $srcdir
486 SRC_ROOT=`pwd`
487 cd $BUILDDIR
488 x_Cygwin=[\#]
490 dnl ======================================
491 dnl Required GObject introspection version
492 dnl ======================================
493 INTROSPECTION_REQUIRED_VERSION=1.32.0
495 dnl ===================================================================
496 dnl Search all the common names for GNU Make
497 dnl ===================================================================
498 AC_MSG_CHECKING([for GNU Make])
500 # try to use our own make if it is available and GNUMAKE was not already defined
501 if test -z "$GNUMAKE"; then
502     if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/make" ; then
503         GNUMAKE="$LODE_HOME/opt/bin/make"
504     elif test -x "/opt/lo/bin/make"; then
505         GNUMAKE="/opt/lo/bin/make"
506     fi
509 GNUMAKE_WIN_NATIVE=
510 for a in "$MAKE" "$GNUMAKE" make gmake gnumake; do
511     if test -n "$a"; then
512         $a --version 2> /dev/null | grep GNU  2>&1 > /dev/null
513         if test $? -eq 0;  then
514             if test "$build_os" = "cygwin"; then
515                 if test -n "$($a -v | grep 'Built for Windows')" ; then
516                     GNUMAKE="$(cygpath -m "$(which "$(cygpath -u $a)")")"
517                     GNUMAKE_WIN_NATIVE="TRUE"
518                 else
519                     GNUMAKE=`which $a`
520                 fi
521             else
522                 GNUMAKE=`which $a`
523             fi
524             break
525         fi
526     fi
527 done
528 AC_MSG_RESULT($GNUMAKE)
529 if test -z "$GNUMAKE"; then
530     AC_MSG_ERROR([not found. install GNU Make.])
531 else
532     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
533         AC_MSG_NOTICE([Using a native Win32 GNU Make version.])
534     fi
537 win_short_path_for_make()
539     local short_path="$1"
540     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
541         cygpath -sm "$short_path"
542     else
543         cygpath -u "$(cygpath -d "$short_path")"
544     fi
548 if test "$build_os" = "cygwin"; then
549     PathFormat "$SRC_ROOT"
550     SRC_ROOT="$formatted_path"
551     PathFormat "$BUILDDIR"
552     BUILDDIR="$formatted_path"
553     x_Cygwin=
554     AC_MSG_CHECKING(for explicit COMSPEC)
555     if test -z "$COMSPEC"; then
556         AC_MSG_ERROR([COMSPEC not set in environment, please set it and rerun])
557     else
558         AC_MSG_RESULT([found: $COMSPEC])
559     fi
562 AC_SUBST(SRC_ROOT)
563 AC_SUBST(BUILDDIR)
564 AC_SUBST(x_Cygwin)
565 AC_DEFINE_UNQUOTED(SRCDIR,"$SRC_ROOT")
566 AC_DEFINE_UNQUOTED(SRC_ROOT,"$SRC_ROOT")
567 AC_DEFINE_UNQUOTED(BUILDDIR,"$BUILDDIR")
569 if test "z$EUID" = "z0" -a "`uname -o 2>/dev/null`" = "Cygwin"; then
570     AC_MSG_ERROR([You must build LibreOffice as a normal user - not using an administrative account])
573 # need sed in os checks...
574 AC_PATH_PROGS(SED, sed)
575 if test -z "$SED"; then
576     AC_MSG_ERROR([install sed to run this script])
579 # Set the ENABLE_LTO variable
580 # ===================================================================
581 AC_MSG_CHECKING([whether to use link-time optimization])
582 if test -n "$enable_lto" -a "$enable_lto" != "no"; then
583     ENABLE_LTO="TRUE"
584     AC_MSG_RESULT([yes])
585 else
586     ENABLE_LTO=""
587     AC_MSG_RESULT([no])
589 AC_SUBST(ENABLE_LTO)
591 AC_ARG_ENABLE(fuzz-options,
592     AS_HELP_STRING([--enable-fuzz-options],
593         [Randomly enable or disable each of those configurable options
594          that are supposed to be freely selectable without interdependencies,
595          or where bad interaction from interdependencies is automatically avoided.])
598 dnl ===================================================================
599 dnl When building for Android, --with-android-ndk,
600 dnl --with-android-ndk-toolchain-version and --with-android-sdk are
601 dnl mandatory
602 dnl ===================================================================
604 AC_ARG_WITH(android-ndk,
605     AS_HELP_STRING([--with-android-ndk],
606         [Specify location of the Android Native Development Kit. Mandatory when building for Android.]),
609 AC_ARG_WITH(android-ndk-toolchain-version,
610     AS_HELP_STRING([--with-android-ndk-toolchain-version],
611         [Specify which toolchain version to use, of those present in the
612         Android NDK you are using. The default (and only supported version currently) is "clang5.0"]),,
613         with_android_ndk_toolchain_version=clang5.0)
615 AC_ARG_WITH(android-sdk,
616     AS_HELP_STRING([--with-android-sdk],
617         [Specify location of the Android SDK. Mandatory when building for Android.]),
620 AC_ARG_WITH(android-api-level,
621     AS_HELP_STRING([--with-android-api-level],
622         [Specify the API level when building for Android. Defaults to 16 for ARM and x86 and to 21 for ARM64 and x86-64]),
625 ANDROID_NDK_HOME=
626 if test -z "$with_android_ndk" -a -e "$SRC_ROOT/external/android-ndk" -a "$build" != "$host"; then
627     with_android_ndk="$SRC_ROOT/external/android-ndk"
629 if test -n "$with_android_ndk"; then
630     eval ANDROID_NDK_HOME=$with_android_ndk
632     # Set up a lot of pre-canned defaults
634     if test ! -f $ANDROID_NDK_HOME/RELEASE.TXT; then
635         if test ! -f $ANDROID_NDK_HOME/source.properties; then
636             AC_MSG_ERROR([Unrecognized Android NDK. Missing RELEASE.TXT or source.properties file in $ANDROID_NDK_HOME.])
637         fi
638         ANDROID_NDK_VERSION=`sed -n -e 's/Pkg.Revision = //p' $ANDROID_NDK_HOME/source.properties`
639     else
640         ANDROID_NDK_VERSION=`cut -f1 -d' ' <$ANDROID_NDK_HOME/RELEASE.TXT`
641     fi
642     if test -z "$ANDROID_NDK_VERSION";  then
643         AC_MSG_ERROR([Failed to determine Android NDK version. Please check your installation.])
644     fi
645     case $ANDROID_NDK_VERSION in
646     r9*|r10*)
647         AC_MSG_ERROR([Building for Android is only supported with NDK versions above 16.x*])
648         ;;
649     11.1.*|12.1.*|13.1.*|14.1.*)
650         AC_MSG_ERROR([Building for Android is only supported with NDK versions above 16.x.*])
651         ;;
652     16.*|17.*|18.*|19.*|20.*)
653         ;;
654     *)
655         AC_MSG_WARN([Untested Android NDK version $ANDROID_NDK_VERSION, only versions 16.* til 20.* have been used successfully. Proceed at your own risk.])
656         add_warning "Untested Android NDK version $ANDROID_NDK_VERSION, only versions 16.* til 20.* have been used successfully. Proceed at your own risk."
657         ;;
658     esac
660     ANDROID_API_LEVEL=16
661     if test -n "$with_android_api_level" ; then
662         ANDROID_API_LEVEL="$with_android_api_level"
663     fi
665     android_cpu=$host_cpu
666     if test $host_cpu = arm; then
667         android_platform_prefix=arm-linux-androideabi
668         android_gnu_prefix=$android_platform_prefix
669         LLVM_TRIPLE=armv7a-linux-androideabi
670         ANDROID_APP_ABI=armeabi-v7a
671         ANDROIDCFLAGS="-mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=neon -Wl,--fix-cortex-a8"
672     elif test $host_cpu = aarch64; then
673         android_platform_prefix=aarch64-linux-android
674         android_gnu_prefix=$android_platform_prefix
675         LLVM_TRIPLE=$android_platform_prefix
676         # minimum android version that supports aarch64
677         if test "$ANDROID_API_LEVEL" -lt "21" ; then
678             ANDROID_API_LEVEL=21
679         fi
680         ANDROID_APP_ABI=arm64-v8a
681     elif test $host_cpu = x86_64; then
682         android_platform_prefix=x86_64-linux-android
683         android_gnu_prefix=$android_platform_prefix
684         LLVM_TRIPLE=$android_platform_prefix
685         # minimum android version that supports x86_64
686         ANDROID_API_LEVEL=21
687         ANDROID_APP_ABI=x86_64
688     else
689         # host_cpu is something like "i386" or "i686" I guess, NDK uses
690         # "x86" in some contexts
691         android_cpu=x86
692         android_platform_prefix=$android_cpu
693         android_gnu_prefix=i686-linux-android
694         LLVM_TRIPLE=$android_gnu_prefix
695         ANDROID_APP_ABI=x86
696     fi
698     case "$with_android_ndk_toolchain_version" in
699     clang5.0)
700         ANDROID_GCC_TOOLCHAIN_VERSION=4.9
701         ;;
702     *)
703         AC_MSG_ERROR([Unrecognized value for the --with-android-ndk-toolchain-version option. Building for Android is only supported with Clang 5.*])
704     esac
706     AC_MSG_NOTICE([using the Android API level... $ANDROID_API_LEVEL])
708     # NDK 15 or later toolchain is 64bit-only, except for Windows that we don't support. Using a 64-bit
709     # linker is required if you compile large parts of the code with -g. A 32-bit linker just won't
710     # manage to link the (app-specific) single huge .so that is built for the app in
711     # android/source/ if there is debug information in a significant part of the object files.
712     # (A 64-bit ld.gold grows too much over 10 gigabytes of virtual space when linking such a .so if
713     # all objects have been built with debug information.)
714     case $build_os in
715     linux-gnu*)
716         android_HOST_TAG=linux-x86_64
717         ;;
718     darwin*)
719         android_HOST_TAG=darwin-x86_64
720         ;;
721     *)
722         AC_MSG_ERROR([We only support building for Android from Linux or macOS])
723         # ndk would also support windows and windows-x86_64
724         ;;
725     esac
726     android_TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/$android_HOST_TAG
727     ANDROID_COMPILER_BIN=$android_TOOLCHAIN/bin
728     dnl TODO: NSS build uses it...
729     ANDROID_BINUTILS_PREBUILT_ROOT=$ANDROID_NDK_HOME/toolchains/$android_platform_prefix-$ANDROID_GCC_TOOLCHAIN_VERSION/prebuilt/$android_HOST_TAG
730     AC_SUBST(ANDROID_BINUTILS_PREBUILT_ROOT)
732     test -z "$AR" && AR=$ANDROID_COMPILER_BIN/$android_gnu_prefix-ar
733     test -z "$NM" && NM=$ANDROID_COMPILER_BIN/$android_gnu_prefix-nm
734     test -z "$OBJDUMP" && OBJDUMP=$ANDROID_COMPILER_BIN/$android_gnu_prefix-objdump
735     test -z "$RANLIB" && RANLIB=$ANDROID_COMPILER_BIN/$android_gnu_prefix-ranlib
736     test -z "$STRIP" && STRIP=$ANDROID_COMPILER_BIN/$android_gnu_prefix-strip
738     ANDROIDCFLAGS="$ANDROIDCFLAGS -target ${LLVM_TRIPLE}${ANDROID_API_LEVEL}"
739     ANDROIDCFLAGS="$ANDROIDCFLAGS -no-canonical-prefixes -ffunction-sections -fdata-sections -Qunused-arguments"
740     if test "$ENABLE_LTO" = TRUE; then
741         # -flto comes from com_GCC_defs.mk, too, but we need to make sure it gets passed as part of
742         # $CC and $CXX when building external libraries
743         ANDROIDCFLAGS="$ANDROIDCFLAGS -flto -fuse-linker-plugin -O2"
744     fi
746     ANDROIDCXXFLAGS="$ANDROIDCFLAGS -stdlib=libc++"
748     if test -z "$CC"; then
749         CC="$ANDROID_COMPILER_BIN/clang $ANDROIDCFLAGS"
750         CC_BASE="clang"
751     fi
752     if test -z "$CXX"; then
753         CXX="$ANDROID_COMPILER_BIN/clang++ $ANDROIDCXXFLAGS"
754         CXX_BASE="clang++"
755     fi
757 AC_SUBST(ANDROID_NDK_HOME)
758 AC_SUBST(ANDROID_APP_ABI)
759 AC_SUBST(ANDROID_GCC_TOOLCHAIN_VERSION)
761 dnl ===================================================================
762 dnl --with-android-sdk
763 dnl ===================================================================
764 ANDROID_SDK_HOME=
765 if test -z "$with_android_sdk" -a -e "$SRC_ROOT/external/android-sdk-linux" -a "$build" != "$host"; then
766     with_android_sdk="$SRC_ROOT/external/android-sdk-linux"
768 if test -n "$with_android_sdk"; then
769     eval ANDROID_SDK_HOME=$with_android_sdk
770     PATH="$ANDROID_SDK_HOME/platform-tools:$ANDROID_SDK_HOME/tools:$PATH"
772 AC_SUBST(ANDROID_SDK_HOME)
774 AC_ARG_ENABLE([android-lok],
775     AS_HELP_STRING([--enable-android-lok],
776         [The Android app from the android/ subdir needs several tweaks all
777          over the place that break the LOK when used in the Online-based
778          Android app.  This switch indicates that the intent of this build is
779          actually the Online-based, non-modified LOK.])
781 ENABLE_ANDROID_LOK=
782 if test -n "$ANDROID_NDK_HOME" ; then
783     if test "$enable_android_lok" = yes; then
784         ENABLE_ANDROID_LOK=TRUE
785         AC_DEFINE(HAVE_FEATURE_ANDROID_LOK)
786         AC_MSG_NOTICE([building the Android version... for the Online-based Android app])
787     else
788         AC_MSG_NOTICE([building the Android version... for the app from the android/ subdir])
789     fi
791 AC_SUBST([ENABLE_ANDROID_LOK])
793 libo_FUZZ_ARG_ENABLE([android-editing],
794     AS_HELP_STRING([--enable-android-editing],
795         [Enable the experimental editing feature on Android.])
797 ENABLE_ANDROID_EDITING=
798 if test "$enable_android_editing" = yes; then
799     ENABLE_ANDROID_EDITING=TRUE
801 AC_SUBST([ENABLE_ANDROID_EDITING])
803 disable_database_connectivity_dependencies()
805     enable_evolution2=no
806     enable_firebird_sdbc=no
807     enable_mariadb_sdbc=no
808     enable_postgresql_sdbc=no
809     enable_report_builder=no
812 # ===================================================================
814 # Start initial platform setup
816 # The using_* variables reflect platform support and should not be
817 # changed after the "End initial platform setup" block.
818 # This is also true for most test_* variables.
819 # ===================================================================
820 build_crypto=yes
821 test_cmis=yes
822 test_gdb_index=no
823 test_openldap=yes
824 test_split_debug=no
825 test_webdav=yes
827 # There is currently just iOS not using salplug, so this explicitly enables it.
828 # must: using_freetype_fontconfig
829 #  may: using_headless_plugin defaults to $using_freetype_fontconfig
830 using_vclplug=yes
831 # must: using_x11
833 # Default values, as such probably valid just for Linux, set
834 # differently below just for Mac OSX, but at least better than
835 # hardcoding these as we used to do. Much of this is duplicated also
836 # in solenv for old build system and for gbuild, ideally we should
837 # perhaps define stuff like this only here in configure.ac?
839 LINKFLAGSSHL="-shared"
840 PICSWITCH="-fpic"
841 DLLPOST=".so"
843 LINKFLAGSNOUNDEFS="-Wl,-z,defs"
845 INSTROOTBASESUFFIX=
846 INSTROOTCONTENTSUFFIX=
847 SDKDIRNAME=sdk
849 HOST_PLATFORM="$host"
851 host_cpu_for_clang="$host_cpu"
853 case "$host_os" in
855 solaris*)
856     using_freetype_fontconfig=yes
857     using_x11=yes
858     build_skia=yes
859     _os=SunOS
861     dnl ===========================================================
862     dnl Check whether we're using Solaris 10 - SPARC or Intel.
863     dnl ===========================================================
864     AC_MSG_CHECKING([the Solaris operating system release])
865     _os_release=`echo $host_os | $SED -e s/solaris2\.//`
866     if test "$_os_release" -lt "10"; then
867         AC_MSG_ERROR([use Solaris >= 10 to build LibreOffice])
868     else
869         AC_MSG_RESULT([ok ($_os_release)])
870     fi
872     dnl Check whether we're using a SPARC or i386 processor
873     AC_MSG_CHECKING([the processor type])
874     if test "$host_cpu" = "sparc" -o "$host_cpu" = "i386"; then
875         AC_MSG_RESULT([ok ($host_cpu)])
876     else
877         AC_MSG_ERROR([only SPARC and i386 processors are supported])
878     fi
879     ;;
881 linux-gnu*|k*bsd*-gnu*|linux-musl*)
882     using_freetype_fontconfig=yes
883     using_x11=yes
884     build_skia=yes
885     test_gdb_index=yes
886     test_split_debug=yes
887     if test "$enable_fuzzers" = yes; then
888         test_system_freetype=no
889     fi
890     _os=Linux
891     ;;
893 gnu)
894     using_freetype_fontconfig=yes
895     using_x11=no
896     _os=GNU
897      ;;
899 cygwin*|wsl*)
900     # When building on Windows normally with MSVC under Cygwin,
901     # configure thinks that the host platform (the platform the
902     # built code will run on) is Cygwin, even if it obviously is
903     # Windows, which in Autoconf terminology is called
904     # "mingw32". (Which is misleading as MinGW is the name of the
905     # tool-chain, not an operating system.)
907     # Somewhat confusing, yes. But this configure script doesn't
908     # look at $host etc that much, it mostly uses its own $_os
909     # variable, set here in this case statement.
911     using_freetype_fontconfig=no
912     using_x11=no
913     test_openldap=no
914     build_skia=yes
915     _os=WINNT
917     DLLPOST=".dll"
918     LINKFLAGSNOUNDEFS=
920     if test "$host_cpu" = "aarch64"; then
921         build_skia=no
922         enable_gpgmepp=no
923         enable_coinmp=no
924         enable_firebird_sdbc=no
925     fi
926     ;;
928 darwin*|macos*) # macOS
929     using_freetype_fontconfig=no
930     using_x11=no
931     build_skia=yes
932     if test -n "$LODE_HOME" ; then
933         mac_sanitize_path
934         AC_MSG_NOTICE([sanitized the PATH to $PATH])
935     fi
936     _os=Darwin
937     INSTROOTBASESUFFIX=/$PRODUCTNAME_WITHOUT_SPACES.app
938     INSTROOTCONTENTSUFFIX=/Contents
939     SDKDIRNAME=${PRODUCTNAME_WITHOUT_SPACES}${PRODUCTVERSION}_SDK
940     # See comment above the case "$host_os"
941     LINKFLAGSSHL="-dynamiclib -single_module"
943     # -fPIC is default
944     PICSWITCH=""
946     DLLPOST=".dylib"
948     # -undefined error is the default
949     LINKFLAGSNOUNDEFS=""
950     case "$host_cpu" in
951     aarch64|arm64)
952         case "$host_os" in
953         macos*)
954             # HOST_PLATFORM is used for external projects and their configury occasionally doesn't like
955             # the "macos" part so be sure to use aarch64-apple-darwin for now.
956             HOST_PLATFORM=aarch64-apple-darwin
957             ;;
958         esac
960         # Apple's Clang uses "arm64"
961         host_cpu_for_clang=arm64
962     esac
965 ios*) # iOS
966     using_freetype_fontconfig=no
967     using_vclplug=no
968     using_x11=no
969     build_crypto=no
970     test_cmis=no
971     test_openldap=no
972     test_webdav=no
973     if test -n "$LODE_HOME" ; then
974         mac_sanitize_path
975         AC_MSG_NOTICE([sanitized the PATH to $PATH])
976     fi
977     enable_gpgmepp=no
978     _os=iOS
979     enable_mpl_subset=yes
980     enable_lotuswordpro=no
981     disable_database_connectivity_dependencies
982     enable_coinmp=no
983     enable_lpsolve=no
984     enable_extension_integration=no
985     enable_xmlhelp=no
986     with_ppds=no
987     if test "$enable_ios_simulator" = "yes"; then
988         host=x86_64-apple-darwin
989     fi
990     # See comment above the case "$host_os"
991     LINKFLAGSSHL="-dynamiclib -single_module"
993     # -fPIC is default
994     PICSWITCH=""
996     DLLPOST=".dylib"
998     # -undefined error is the default
999     LINKFLAGSNOUNDEFS=""
1001     # HOST_PLATFORM is used for external projects and their configury typically doesn't like the "ios"
1002     # part, so use aarch64-apple-darwin for now.
1003     HOST_PLATFORM=aarch64-apple-darwin
1005     # Apple's Clang uses "arm64"
1006     host_cpu_for_clang=arm64
1009 freebsd*)
1010     using_freetype_fontconfig=yes
1011     using_x11=yes
1012     build_skia=yes
1013     AC_MSG_CHECKING([the FreeBSD operating system release])
1014     if test -n "$with_os_version"; then
1015         OSVERSION="$with_os_version"
1016     else
1017         OSVERSION=`/sbin/sysctl -n kern.osreldate`
1018     fi
1019     AC_MSG_RESULT([found OSVERSION=$OSVERSION])
1020     AC_MSG_CHECKING([which thread library to use])
1021     if test "$OSVERSION" -lt "500016"; then
1022         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1023         PTHREAD_LIBS="-pthread"
1024     elif test "$OSVERSION" -lt "502102"; then
1025         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1026         PTHREAD_LIBS="-lc_r"
1027     else
1028         PTHREAD_CFLAGS=""
1029         PTHREAD_LIBS="-pthread"
1030     fi
1031     AC_MSG_RESULT([$PTHREAD_LIBS])
1032     _os=FreeBSD
1033     ;;
1035 *netbsd*)
1036     using_freetype_fontconfig=yes
1037     using_x11=yes
1038     test_gtk3_kde5=no
1039     build_skia=yes
1040     PTHREAD_LIBS="-pthread -lpthread"
1041     _os=NetBSD
1042     ;;
1044 aix*)
1045     using_freetype_fontconfig=yes
1046     using_x11=yes
1047     test_randr=no
1048     test_gstreamer_1_0=no
1049     PTHREAD_LIBS=-pthread
1050     _os=AIX
1051     ;;
1053 openbsd*)
1054     using_freetype_fontconfig=yes
1055     using_x11=yes
1056     PTHREAD_CFLAGS="-D_THREAD_SAFE"
1057     PTHREAD_LIBS="-pthread"
1058     _os=OpenBSD
1059     ;;
1061 dragonfly*)
1062     using_freetype_fontconfig=yes
1063     using_x11=yes
1064     build_skia=yes
1065     PTHREAD_LIBS="-pthread"
1066     _os=DragonFly
1067     ;;
1069 linux-android*)
1070     using_freetype_fontconfig=yes
1071     using_headless_plugin=no
1072     using_x11=no
1073     build_crypto=no
1074     test_openldap=no
1075     test_system_freetype=no
1076     test_webdav=no
1077     disable_database_connectivity_dependencies
1078     enable_lotuswordpro=no
1079     enable_mpl_subset=yes
1080     enable_cairo_canvas=no
1081     enable_coinmp=yes
1082     enable_lpsolve=no
1083     enable_odk=no
1084     enable_python=no
1085     enable_xmlhelp=no
1086     _os=Android
1088     AC_DEFINE(HAVE_FT_FACE_GETCHARVARIANTINDEX)
1089     ;;
1091 haiku*)
1092     using_freetype_fontconfig=yes
1093     using_x11=no
1094     test_gtk3_kde5=no
1095     test_kf5=yes
1096     enable_odk=no
1097     enable_coinmp=no
1098     enable_pdfium=no
1099     enable_sdremote=no
1100     enable_postgresql_sdbc=no
1101     enable_firebird_sdbc=no
1102     _os=Haiku
1103     ;;
1105 emscripten)
1106     using_freetype_fontconfig=yes
1107     using_x11=no
1108     test_openldap=no
1109     enable_compiler_plugins=no
1110     test_cmis=no
1111     test_webdav=no
1112     enable_database_connectivity=no
1113     enable_lpsolve=no
1114     enable_xmlhelp=no
1115     with_system_zlib=no
1116     with_theme="breeze"
1117     _os=Emscripten
1118     ;;
1121     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
1122     ;;
1123 esac
1125 AC_SUBST(HOST_PLATFORM)
1127 if test -z "$using_x11" -o -z "$using_freetype_fontconfig"; then
1128     AC_MSG_ERROR([You must set \$using_freetype_fontconfig and \$using_x11 for your platform])
1131 # Set defaults, if not set by platform
1132 test "${test_cups+set}" = set || test_cups="$using_x11"
1133 test "${test_dbus+set}" = set || test_dbus="$using_x11"
1134 test "${test_gstreamer_1_0+set}" = set || test_gstreamer_1_0="$using_x11"
1135 test "${test_gtk3+set}" = set || test_gtk3="$using_x11"
1136 test "${test_gtk4+set}" = set || test_gtk4="$using_x11"
1137 test "${test_kf5+set}" = set || test_kf5="$using_x11"
1138 # don't handle test_qt5, so it can disable test_kf5 later
1139 test "${test_qt6+set}" = set || test_qt6="$using_x11"
1140 test "${test_randr+set}" = set || test_randr="$using_x11"
1141 test "${test_xrender+set}" = set || test_xrender="$using_x11"
1142 test "${using_headless_plugin+set}" = set || using_headless_plugin="$using_freetype_fontconfig"
1144 test "${test_gtk3_kde5+set}" != set -a "$test_kf5" = yes -a "$test_gtk3" = yes && test_gtk3_kde5="yes"
1145 test "${test_system_fontconfig+set}" != set -a "${test_system_freetype+set}" = set && test_system_fontconfig="$test_system_freetype"
1146 test "${test_system_freetype+set}" != set -a "${test_system_fontconfig+set}" = set && test_system_freetype="$test_system_fontconfig"
1148 # convenience / platform overriding "fixes"
1149 # Don't sort!
1150 test "$test_kf5" = yes -a "$test_qt5" = no && test_kf5=no
1151 test "$test_kf5" = yes && test_qt5=yes
1152 test "$test_gtk3" != yes -o "$test_kf5" != yes && test_gtk3_kde5=no
1153 test "$using_freetype_fontconfig" = no && using_headless_plugin=no
1154 test "$using_freetype_fontconfig" = yes && test_cairo=yes
1156 # Keep in sync with the above $using_x11 depending test default list
1157 disable_x11_tests()
1159     test_cups=no
1160     test_dbus=no
1161     test_gstreamer_1_0=no
1162     test_gtk3_kde5=no
1163     test_gtk3=no
1164     test_gtk4=no
1165     test_kf5=no
1166     test_qt5=no
1167     test_qt6=no
1168     test_randr=no
1169     test_xrender=no
1172 test "$using_x11" = yes && USING_X11=TRUE
1174 if test "$using_freetype_fontconfig" = yes; then
1175     if test "$using_headless_plugin" = yes; then
1176         AC_DEFINE(ENABLE_HEADLESS)
1177         ENABLE_HEADLESS=TRUE
1178     fi
1181 AC_SUBST(ENABLE_HEADLESS)
1183 AC_MSG_NOTICE([VCL platform uses freetype+fontconfig: $using_freetype_fontconfig])
1184 AC_MSG_NOTICE([VCL platform uses headless plugin: $using_headless_plugin])
1185 AC_MSG_NOTICE([VCL platform uses vclplug: $using_vclplug])
1186 AC_MSG_NOTICE([VCL platform uses X11: $using_x11])
1188 # ===================================================================
1190 # End initial platform setup
1192 # ===================================================================
1194 if test "$_os" = "Android" ; then
1195     # Verify that the NDK and SDK options are proper
1196     if test -z "$with_android_ndk"; then
1197         AC_MSG_ERROR([the --with-android-ndk option is mandatory, unless it is available at external/android-ndk/.])
1198     elif test ! -f "$ANDROID_NDK_HOME/meta/abis.json"; then
1199         AC_MSG_ERROR([the --with-android-ndk option does not point to an Android NDK])
1200     fi
1202     if test -z "$ANDROID_SDK_HOME"; then
1203         AC_MSG_ERROR([the --with-android-sdk option is mandatory, unless it is available at external/android-sdk-linux/.])
1204     elif test ! -d "$ANDROID_SDK_HOME/platforms"; then
1205         AC_MSG_ERROR([the --with-android-sdk option does not point to an Android SDK])
1206     fi
1208     BUILD_TOOLS_VERSION=`$SED -n -e 's/.*buildToolsVersion "\(.*\)"/\1/p' $SRC_ROOT/android/source/build.gradle`
1209     if test ! -d "$ANDROID_SDK_HOME/build-tools/$BUILD_TOOLS_VERSION"; then
1210         AC_MSG_WARN([android build-tools $BUILD_TOOLS_VERSION not found - install with
1211                          $ANDROID_SDK_HOME/tools/android update sdk -u --all --filter build-tools-$BUILD_TOOLS_VERSION
1212                     or adjust change $SRC_ROOT/android/source/build.gradle accordingly])
1213         add_warning "android build-tools $BUILD_TOOLS_VERSION not found - install with"
1214         add_warning "    $ANDROID_SDK_HOME/tools/android update sdk -u --all --filter build-tools-$BUILD_TOOLS_VERSION"
1215         add_warning "or adjust $SRC_ROOT/android/source/build.gradle accordingly"
1216     fi
1217     if test ! -f "$ANDROID_SDK_HOME/extras/android/m2repository/source.properties"; then
1218         AC_MSG_WARN([android support repository not found - install with
1219                          $ANDROID_SDK_HOME/tools/android update sdk -u --filter extra-android-m2repository
1220                      to allow the build to download the specified version of the android support libraries])
1221         add_warning "android support repository not found - install with"
1222         add_warning "    $ANDROID_SDK_HOME/tools/android update sdk -u --filter extra-android-m2repository"
1223         add_warning "to allow the build to download the specified version of the android support libraries"
1224     fi
1227 if test "$_os" = "AIX"; then
1228     AC_PATH_PROG(GAWK, gawk)
1229     if test -z "$GAWK"; then
1230         AC_MSG_ERROR([gawk not found in \$PATH])
1231     fi
1234 AC_SUBST(SDKDIRNAME)
1236 AC_SUBST(PTHREAD_CFLAGS)
1237 AC_SUBST(PTHREAD_LIBS)
1239 # Check for explicit A/C/CXX/OBJC/OBJCXX/LDFLAGS.
1240 # By default use the ones specified by our build system,
1241 # but explicit override is possible.
1242 AC_MSG_CHECKING(for explicit AFLAGS)
1243 if test -n "$AFLAGS"; then
1244     AC_MSG_RESULT([$AFLAGS])
1245     x_AFLAGS=
1246 else
1247     AC_MSG_RESULT(no)
1248     x_AFLAGS=[\#]
1250 AC_MSG_CHECKING(for explicit CFLAGS)
1251 if test -n "$CFLAGS"; then
1252     AC_MSG_RESULT([$CFLAGS])
1253     x_CFLAGS=
1254 else
1255     AC_MSG_RESULT(no)
1256     x_CFLAGS=[\#]
1258 AC_MSG_CHECKING(for explicit CXXFLAGS)
1259 if test -n "$CXXFLAGS"; then
1260     AC_MSG_RESULT([$CXXFLAGS])
1261     x_CXXFLAGS=
1262 else
1263     AC_MSG_RESULT(no)
1264     x_CXXFLAGS=[\#]
1266 AC_MSG_CHECKING(for explicit OBJCFLAGS)
1267 if test -n "$OBJCFLAGS"; then
1268     AC_MSG_RESULT([$OBJCFLAGS])
1269     x_OBJCFLAGS=
1270 else
1271     AC_MSG_RESULT(no)
1272     x_OBJCFLAGS=[\#]
1274 AC_MSG_CHECKING(for explicit OBJCXXFLAGS)
1275 if test -n "$OBJCXXFLAGS"; then
1276     AC_MSG_RESULT([$OBJCXXFLAGS])
1277     x_OBJCXXFLAGS=
1278 else
1279     AC_MSG_RESULT(no)
1280     x_OBJCXXFLAGS=[\#]
1282 AC_MSG_CHECKING(for explicit LDFLAGS)
1283 if test -n "$LDFLAGS"; then
1284     AC_MSG_RESULT([$LDFLAGS])
1285     x_LDFLAGS=
1286 else
1287     AC_MSG_RESULT(no)
1288     x_LDFLAGS=[\#]
1290 AC_SUBST(AFLAGS)
1291 AC_SUBST(CFLAGS)
1292 AC_SUBST(CXXFLAGS)
1293 AC_SUBST(OBJCFLAGS)
1294 AC_SUBST(OBJCXXFLAGS)
1295 AC_SUBST(LDFLAGS)
1296 AC_SUBST(x_AFLAGS)
1297 AC_SUBST(x_CFLAGS)
1298 AC_SUBST(x_CXXFLAGS)
1299 AC_SUBST(x_OBJCFLAGS)
1300 AC_SUBST(x_OBJCXXFLAGS)
1301 AC_SUBST(x_LDFLAGS)
1303 dnl These are potentially set for MSVC, in the code checking for UCRT below:
1304 my_original_CFLAGS=$CFLAGS
1305 my_original_CXXFLAGS=$CXXFLAGS
1306 my_original_CPPFLAGS=$CPPFLAGS
1308 dnl The following checks for gcc, cc and then cl (if it weren't guarded for win32)
1309 dnl Needs to precede the AC_C_BIGENDIAN and AC_SEARCH_LIBS calls below, which apparently call
1310 dnl AC_PROG_CC internally.
1311 if test "$_os" != "WINNT"; then
1312     # AC_PROG_CC sets CFLAGS to -g -O2 if not set, avoid that
1313     save_CFLAGS=$CFLAGS
1314     AC_PROG_CC
1315     CFLAGS=$save_CFLAGS
1316     if test -z "$CC_BASE"; then
1317         CC_BASE=`first_arg_basename "$CC"`
1318     fi
1321 if test "$_os" != "WINNT"; then
1322     AC_C_BIGENDIAN([ENDIANNESS=big], [ENDIANNESS=little])
1323 else
1324     ENDIANNESS=little
1326 AC_SUBST(ENDIANNESS)
1328 if test $_os != "WINNT"; then
1329     save_LIBS="$LIBS"
1330     AC_SEARCH_LIBS([dlsym], [dl],
1331         [case "$ac_cv_search_dlsym" in -l*) DLOPEN_LIBS="$ac_cv_search_dlsym";; esac],
1332         [AC_MSG_ERROR([dlsym not found in either libc nor libdl])])
1333     LIBS="$save_LIBS"
1335 AC_SUBST(DLOPEN_LIBS)
1337 # Check for a (GNU) backtrace implementation
1338 AC_ARG_VAR([BACKTRACE_CFLAGS], [Compiler flags needed to use backtrace(3)])
1339 AC_ARG_VAR([BACKTRACE_LIBS], [Linker flags needed to use backtrace(3)])
1340 AS_IF([test "x$BACKTRACE_LIBS$BACKTRACE_CFLAGS" = x], [
1341     save_LIBS="$LIBS"
1342     AC_SEARCH_LIBS([backtrace], [libexecinfo],
1343         [case "$ac_cv_search_backtrace" in -l*) BACKTRACE_LIBS="$ac_cv_search_backtrace";; esac],
1344         [PKG_CHECK_MODULES([BACKTRACE], [libexecinfo], [ac_cv_search_backtrace=], [:])])
1345     LIBS="$save_LIBS"
1347 AS_IF([test "x$ac_cv_search_backtrace" != xno ], [
1348     AC_DEFINE([HAVE_FEATURE_BACKTRACE])
1351 dnl ===================================================================
1352 dnl Sanity checks for Emscripten SDK setup
1353 dnl ===================================================================
1355 if test "$_os" = "Emscripten"; then
1356     EMSCRIPTEN_ERROR=0
1357     if ! which emconfigure >/dev/null 2>&1; then
1358         AC_MSG_WARN([emconfigure must be in your \$PATH])
1359         EMSCRIPTEN_ERROR=1
1360     fi
1361     if test -z "$EMMAKEN_JUST_CONFIGURE"; then
1362         AC_MSG_WARN(["\$EMMAKEN_JUST_CONFIGURE wasn't set by emconfigure. Prefix configure or use autogen.sh])
1363         EMSCRIPTEN_ERROR=1
1364     fi
1365     if test $EMSCRIPTEN_ERROR -ne 0; then
1366         AC_MSG_ERROR(["Please fix your EMSDK setup to build with Emscripten!"])
1367     fi
1370 ###############################################################################
1371 # Extensions switches --enable/--disable
1372 ###############################################################################
1373 # By default these should be enabled unless having extra dependencies.
1374 # If there is extra dependency over configure options then the enable should
1375 # be automagic based on whether the requiring feature is enabled or not.
1376 # All this options change anything only with --enable-extension-integration.
1378 # The name of this option and its help string makes it sound as if
1379 # extensions are built anyway, just not integrated in the installer,
1380 # if you use --disable-extension-integration. Is that really the
1381 # case?
1383 AC_ARG_ENABLE(ios-simulator,
1384     AS_HELP_STRING([--enable-ios-simulator],
1385         [build for iOS simulator])
1388 libo_FUZZ_ARG_ENABLE(extension-integration,
1389     AS_HELP_STRING([--disable-extension-integration],
1390         [Disable integration of the built extensions in the installer of the
1391          product. Use this switch to disable the integration.])
1394 AC_ARG_ENABLE(avmedia,
1395     AS_HELP_STRING([--disable-avmedia],
1396         [Disable displaying and inserting AV media in documents. Work in progress, use only if you are hacking on it.])
1399 AC_ARG_ENABLE(database-connectivity,
1400     AS_HELP_STRING([--disable-database-connectivity],
1401         [Disable various database connectivity. Work in progress, use only if you are hacking on it.])
1404 # This doesn't mean not building (or "integrating") extensions
1405 # (although it probably should; i.e. it should imply
1406 # --disable-extension-integration I guess), it means not supporting
1407 # any extension mechanism at all
1408 libo_FUZZ_ARG_ENABLE(extensions,
1409     AS_HELP_STRING([--disable-extensions],
1410         [Disable all add-on extension functionality. Work in progress, use only if you are hacking on it.])
1413 AC_ARG_ENABLE(scripting,
1414     AS_HELP_STRING([--disable-scripting],
1415         [Disable BASIC, Java and Python. Work in progress, use only if you are hacking on it.])
1418 # This is mainly for Android and iOS, but could potentially be used in some
1419 # special case otherwise, too, so factored out as a separate setting
1421 AC_ARG_ENABLE(dynamic-loading,
1422     AS_HELP_STRING([--disable-dynamic-loading],
1423         [Disable any use of dynamic loading of code. Work in progress, use only if you are hacking on it.])
1426 libo_FUZZ_ARG_ENABLE(report-builder,
1427     AS_HELP_STRING([--disable-report-builder],
1428         [Disable the Report Builder.])
1431 libo_FUZZ_ARG_ENABLE(ext-wiki-publisher,
1432     AS_HELP_STRING([--enable-ext-wiki-publisher],
1433         [Enable the Wiki Publisher extension.])
1436 libo_FUZZ_ARG_ENABLE(lpsolve,
1437     AS_HELP_STRING([--disable-lpsolve],
1438         [Disable compilation of the lp solve solver ])
1440 libo_FUZZ_ARG_ENABLE(coinmp,
1441     AS_HELP_STRING([--disable-coinmp],
1442         [Disable compilation of the CoinMP solver ])
1445 libo_FUZZ_ARG_ENABLE(pdfimport,
1446     AS_HELP_STRING([--disable-pdfimport],
1447         [Disable building the PDF import feature.])
1450 libo_FUZZ_ARG_ENABLE(pdfium,
1451     AS_HELP_STRING([--disable-pdfium],
1452         [Disable building PDFium. Results in unsecure PDF signature verification.])
1455 libo_FUZZ_ARG_ENABLE(skia,
1456     AS_HELP_STRING([--disable-skia],
1457         [Disable building Skia. Use --enable-skia=debug to build without optimizations.])
1460 ###############################################################################
1462 dnl ---------- *** ----------
1464 libo_FUZZ_ARG_ENABLE(mergelibs,
1465     AS_HELP_STRING([--enable-mergelibs],
1466         [Merge several of the smaller libraries into one big, "merged", one.])
1469 libo_FUZZ_ARG_ENABLE(breakpad,
1470     AS_HELP_STRING([--enable-breakpad],
1471         [Enables breakpad for crash reporting.])
1474 libo_FUZZ_ARG_ENABLE(crashdump,
1475     AS_HELP_STRING([--disable-crashdump],
1476         [Disable dump.ini and dump-file, when --enable-breakpad])
1479 AC_ARG_ENABLE(fetch-external,
1480     AS_HELP_STRING([--disable-fetch-external],
1481         [Disables fetching external tarballs from web sources.])
1484 AC_ARG_ENABLE(fuzzers,
1485     AS_HELP_STRING([--enable-fuzzers],
1486         [Enables building libfuzzer targets for fuzz testing.])
1489 libo_FUZZ_ARG_ENABLE(pch,
1490     AS_HELP_STRING([--enable-pch=<yes/no/system/base/normal/full>],
1491         [Enables precompiled header support for C++. Forced default on Windows/VC build.
1492          Using 'system' will include only external headers, 'base' will add also headers
1493          from base modules, 'normal' will also add all headers except from the module built,
1494          'full' will use all suitable headers even from a module itself.])
1497 libo_FUZZ_ARG_ENABLE(epm,
1498     AS_HELP_STRING([--enable-epm],
1499         [LibreOffice includes self-packaging code, that requires epm, however epm is
1500          useless for large scale package building.])
1503 libo_FUZZ_ARG_ENABLE(odk,
1504     AS_HELP_STRING([--enable-odk],
1505         [Enable building the Office Development Kit, the part that extensions need to build against])
1508 AC_ARG_ENABLE(mpl-subset,
1509     AS_HELP_STRING([--enable-mpl-subset],
1510         [Don't compile any pieces which are not MPL or more liberally licensed])
1513 libo_FUZZ_ARG_ENABLE(evolution2,
1514     AS_HELP_STRING([--enable-evolution2],
1515         [Allows the built-in evolution 2 addressbook connectivity build to be
1516          enabled.])
1519 AC_ARG_ENABLE(avahi,
1520     AS_HELP_STRING([--enable-avahi],
1521         [Determines whether to use Avahi to advertise Impress to remote controls.])
1524 libo_FUZZ_ARG_ENABLE(werror,
1525     AS_HELP_STRING([--enable-werror],
1526         [Turn warnings to errors. (Has no effect in modules where the treating
1527          of warnings as errors is disabled explicitly.)]),
1530 libo_FUZZ_ARG_ENABLE(assert-always-abort,
1531     AS_HELP_STRING([--enable-assert-always-abort],
1532         [make assert() failures abort even when building without --enable-debug or --enable-dbgutil.]),
1535 libo_FUZZ_ARG_ENABLE(dbgutil,
1536     AS_HELP_STRING([--enable-dbgutil],
1537         [Provide debugging support from --enable-debug and include additional debugging
1538          utilities such as object counting or more expensive checks.
1539          This is the recommended option for developers.
1540          Note that this makes the build ABI incompatible, it is not possible to mix object
1541          files or libraries from a --enable-dbgutil and a --disable-dbgutil build.]))
1543 libo_FUZZ_ARG_ENABLE(debug,
1544     AS_HELP_STRING([--enable-debug],
1545         [Include debugging information, disable compiler optimization and inlining plus
1546          extra debugging code like assertions. Extra large build! (enables -g compiler flag).]))
1548 libo_FUZZ_ARG_ENABLE(split-debug,
1549     AS_HELP_STRING([--disable-split-debug],
1550         [Disable using split debug information (-gsplit-dwarf compile flag). Split debug information
1551          saves disk space and build time, but requires tools that support it (both build tools and debuggers).]))
1553 libo_FUZZ_ARG_ENABLE(gdb-index,
1554     AS_HELP_STRING([--disable-gdb-index],
1555         [Disables creating debug information in the gdb index format, which makes gdb start faster.
1556          The feature requires the gold or lld linker.]))
1558 libo_FUZZ_ARG_ENABLE(sal-log,
1559     AS_HELP_STRING([--enable-sal-log],
1560         [Make SAL_INFO and SAL_WARN calls do something even in a non-debug build.]))
1562 libo_FUZZ_ARG_ENABLE(symbols,
1563     AS_HELP_STRING([--enable-symbols],
1564         [Generate debug information.
1565          By default, enabled for --enable-debug and --enable-dbgutil, disabled
1566          otherwise. It is possible to explicitly specify gbuild build targets
1567          (where 'all' means everything, '-' prepended means to not enable, '/' appended means
1568          everything in the directory; there is no ordering, more specific overrides
1569          more general, and disabling takes precedence).
1570          Example: --enable-symbols="all -sw/ -Library_sc".]))
1572 libo_FUZZ_ARG_ENABLE(optimized,
1573     AS_HELP_STRING([--enable-optimized=<yes/no/debug>],
1574         [Whether to compile with optimization flags.
1575          By default, disabled for --enable-debug and --enable-dbgutil, enabled
1576          otherwise. Using 'debug' will try to use only optimizations that should
1577          not interfere with debugging. For Emscripten we default to optimized (-O1)
1578          debug build, as otherwise binaries become too large.]))
1580 libo_FUZZ_ARG_ENABLE(runtime-optimizations,
1581     AS_HELP_STRING([--disable-runtime-optimizations],
1582         [Statically disable certain runtime optimizations (like rtl/alloc.h or
1583          JVM JIT) that are known to interact badly with certain dynamic analysis
1584          tools (like -fsanitize=address or Valgrind).  By default, disabled iff
1585          CC contains "-fsanitize=*".  (For Valgrind, those runtime optimizations
1586          are typically disabled dynamically via RUNNING_ON_VALGRIND.)]))
1588 AC_ARG_WITH(valgrind,
1589     AS_HELP_STRING([--with-valgrind],
1590         [Make availability of Valgrind headers a hard requirement.]))
1592 libo_FUZZ_ARG_ENABLE(compiler-plugins,
1593     AS_HELP_STRING([--enable-compiler-plugins],
1594         [Enable compiler plugins that will perform additional checks during
1595          building. Enabled automatically by --enable-dbgutil.
1596          Use --enable-compiler-plugins=debug to also enable debug code in the plugins.]))
1597 COMPILER_PLUGINS_DEBUG=
1598 if test "$enable_compiler_plugins" = debug; then
1599     enable_compiler_plugins=yes
1600     COMPILER_PLUGINS_DEBUG=TRUE
1603 libo_FUZZ_ARG_ENABLE(compiler-plugins-analyzer-pch,
1604     AS_HELP_STRING([--disable-compiler-plugins-analyzer-pch],
1605         [Disable use of precompiled headers when running the Clang compiler plugin analyzer.  Not
1606          relevant in the --disable-compiler-plugins case.]))
1608 libo_FUZZ_ARG_ENABLE(ooenv,
1609     AS_HELP_STRING([--enable-ooenv],
1610         [Enable ooenv for the instdir installation.]))
1612 AC_ARG_ENABLE(lto,
1613     AS_HELP_STRING([--enable-lto],
1614         [Enable link-time optimization. Suitable for (optimised) product builds. Building might take
1615          longer but libraries and executables are optimized for speed. For GCC, best to use the 'gold'
1616          linker.)]))
1618 AC_ARG_ENABLE(python,
1619     AS_HELP_STRING([--enable-python=<no/auto/system/internal/fully-internal>],
1620         [Enables or disables Python support at run-time.
1621          Also specifies what Python to use at build-time.
1622          'fully-internal' even forces the internal version for uses of Python
1623          during the build.
1624          On macOS the only choices are
1625          'internal' (default) or 'fully-internal'. Otherwise the default is 'auto'.
1626          ]))
1628 libo_FUZZ_ARG_ENABLE(gtk3,
1629     AS_HELP_STRING([--disable-gtk3],
1630         [Determines whether to use Gtk+ 3.0 vclplug on platforms where Gtk+ 3.0 is available.]),
1631 ,test "${enable_gtk3+set}" = set || enable_gtk3=yes)
1633 AC_ARG_ENABLE(gtk4,
1634     AS_HELP_STRING([--enable-gtk4],
1635         [Determines whether to use Gtk+ 4.0 vclplug on platforms where Gtk+ 4.0 is available.]))
1637 AC_ARG_ENABLE(introspection,
1638     AS_HELP_STRING([--enable-introspection],
1639         [Generate files for GObject introspection.  Requires --enable-gtk3.  (Typically used by
1640          Linux distributions.)]))
1642 AC_ARG_ENABLE(split-app-modules,
1643     AS_HELP_STRING([--enable-split-app-modules],
1644         [Split file lists for app modules, e.g. base, calc.
1645          Has effect only with make distro-pack-install]),
1648 AC_ARG_ENABLE(split-opt-features,
1649     AS_HELP_STRING([--enable-split-opt-features],
1650         [Split file lists for some optional features, e.g. pyuno, testtool.
1651          Has effect only with make distro-pack-install]),
1654 libo_FUZZ_ARG_ENABLE(cairo-canvas,
1655     AS_HELP_STRING([--disable-cairo-canvas],
1656         [Determines whether to build the Cairo canvas on platforms where Cairo is available.]),
1659 libo_FUZZ_ARG_ENABLE(dbus,
1660     AS_HELP_STRING([--disable-dbus],
1661         [Determines whether to enable features that depend on dbus.
1662          e.g. Presentation mode screensaver control, bluetooth presentation control, automatic font install]),
1663 ,test "${enable_dbus+set}" = set || enable_dbus=yes)
1665 libo_FUZZ_ARG_ENABLE(sdremote,
1666     AS_HELP_STRING([--disable-sdremote],
1667         [Determines whether to enable Impress remote control (i.e. the server component).]),
1668 ,test "${enable_sdremote+set}" = set || enable_sdremote=yes)
1670 libo_FUZZ_ARG_ENABLE(sdremote-bluetooth,
1671     AS_HELP_STRING([--disable-sdremote-bluetooth],
1672         [Determines whether to build sdremote with bluetooth support.
1673          Requires dbus on Linux.]))
1675 libo_FUZZ_ARG_ENABLE(gio,
1676     AS_HELP_STRING([--disable-gio],
1677         [Determines whether to use the GIO support.]),
1678 ,test "${enable_gio+set}" = set || enable_gio=yes)
1680 AC_ARG_ENABLE(qt5,
1681     AS_HELP_STRING([--enable-qt5],
1682         [Determines whether to use Qt5 vclplug on platforms where Qt5 is
1683          available.]),
1686 AC_ARG_ENABLE(qt6,
1687     AS_HELP_STRING([--enable-qt6],
1688         [Determines whether to use Qt6 vclplug on platforms where Qt6 is
1689          available.]),
1692 AC_ARG_ENABLE(kf5,
1693     AS_HELP_STRING([--enable-kf5],
1694         [Determines whether to use Qt5/KF5 vclplug on platforms where Qt5 and
1695          KF5 are available.]),
1698 AC_ARG_ENABLE(gtk3_kde5,
1699     AS_HELP_STRING([--enable-gtk3-kde5],
1700         [Determines whether to use Gtk3 vclplug with KF5 file dialogs on
1701          platforms where Gtk3, Qt5 and Plasma is available.]),
1704 AC_ARG_ENABLE(gui,
1705     AS_HELP_STRING([--disable-gui],
1706         [Disable use of X11 or Wayland to reduce dependencies (e.g. for building LibreOfficeKit).]),
1707 ,enable_gui=yes)
1709 libo_FUZZ_ARG_ENABLE(randr,
1710     AS_HELP_STRING([--disable-randr],
1711         [Disable RandR support in the vcl project.]),
1712 ,test "${enable_randr+set}" = set || enable_randr=yes)
1714 libo_FUZZ_ARG_ENABLE(gstreamer-1-0,
1715     AS_HELP_STRING([--disable-gstreamer-1-0],
1716         [Disable building with the gstreamer 1.0 avmedia backend.]),
1717 ,test "${enable_gstreamer_1_0+set}" = set || enable_gstreamer_1_0=yes)
1719 libo_FUZZ_ARG_ENABLE([eot],
1720     [AS_HELP_STRING([--enable-eot],
1721         [Enable support for Embedded OpenType fonts.])],
1722 ,test "${enable_eot+set}" = set || enable_eot=no)
1724 libo_FUZZ_ARG_ENABLE(cve-tests,
1725     AS_HELP_STRING([--disable-cve-tests],
1726         [Prevent CVE tests to be executed]),
1729 libo_FUZZ_ARG_ENABLE(chart-tests,
1730     AS_HELP_STRING([--enable-chart-tests],
1731         [Executes chart XShape tests. In a perfect world these tests would be
1732          stable and everyone could run them, in reality it is best to run them
1733          only on a few machines that are known to work and maintained by people
1734          who can judge if a test failure is a regression or not.]),
1737 AC_ARG_ENABLE(build-opensymbol,
1738     AS_HELP_STRING([--enable-build-opensymbol],
1739         [Do not use the prebuilt opens___.ttf. Build it instead. This needs
1740          fontforge installed.]),
1743 AC_ARG_ENABLE(dependency-tracking,
1744     AS_HELP_STRING([--enable-dependency-tracking],
1745         [Do not reject slow dependency extractors.])[
1746   --disable-dependency-tracking
1747                           Disables generation of dependency information.
1748                           Speed up one-time builds.],
1751 AC_ARG_ENABLE(icecream,
1752     AS_HELP_STRING([--enable-icecream],
1753         [Use the 'icecream' distributed compiling tool to speedup the compilation.
1754          It defaults to /opt/icecream for the location of the icecream gcc/g++
1755          wrappers, you can override that using --with-gcc-home=/the/path switch.]),
1758 AC_ARG_ENABLE(ld,
1759     AS_HELP_STRING([--enable-ld=<linker>],
1760         [Use the specified linker. Both 'gold' and 'lld' linkers generally use less memory and link faster.
1761          By default tries to use the best linker possible, use --disable-ld to use the default linker.
1762          If <linker> contains any ':', the part before the first ':' is used as the value of
1763          -fuse-ld, while the part after the first ':' is used as the value of --ld-path (which is
1764          needed for Clang 12).]),
1767 libo_FUZZ_ARG_ENABLE(cups,
1768     AS_HELP_STRING([--disable-cups],
1769         [Do not build cups support.])
1772 AC_ARG_ENABLE(ccache,
1773     AS_HELP_STRING([--disable-ccache],
1774         [Do not try to use ccache automatically.
1775          By default we will try to detect if ccache is available; in that case if
1776          CC/CXX are not yet set, and --enable-icecream is not given, we
1777          attempt to use ccache. --disable-ccache disables ccache completely.
1778          Additionally ccache's depend mode is enabled if possible,
1779          use --enable-ccache=nodepend to enable ccache without depend mode.
1783 AC_ARG_ENABLE(z7-debug,
1784     AS_HELP_STRING([--enable-z7-debug],
1785         [Makes the MSVC compiler use -Z7 for debugging instead of the default -Zi. Using this option takes
1786          more disk spaces but allows to use ccache. Final PDB files are created even with this option enabled.
1787          Enabled by default if ccache is detected.]))
1789 libo_FUZZ_ARG_ENABLE(online-update,
1790     AS_HELP_STRING([--enable-online-update],
1791         [Enable the online update service that will check for new versions of
1792          LibreOffice. Disabled by default. Requires --with-privacy-policy-url to be set.
1793          If the value is "mar", the experimental Mozilla-like update will be
1794          enabled instead of the traditional update mechanism.]),
1797 AC_ARG_WITH(update-config,
1798     AS_HELP_STRING([--with-update-config=/tmp/update.ini],
1799                    [Path to the update config ini file]))
1801 libo_FUZZ_ARG_ENABLE(extension-update,
1802     AS_HELP_STRING([--disable-extension-update],
1803         [Disable possibility to update installed extensions.]),
1806 libo_FUZZ_ARG_ENABLE(release-build,
1807     AS_HELP_STRING([--enable-release-build],
1808         [Enable release build. Note that the "release build" choice is orthogonal to
1809          whether symbols are present, debug info is generated, or optimization
1810          is done.
1811          See http://wiki.documentfoundation.org/Development/DevBuild]),
1814 AC_ARG_ENABLE(windows-build-signing,
1815     AS_HELP_STRING([--enable-windows-build-signing],
1816         [Enable signing of windows binaries (*.exe, *.dll)]),
1819 AC_ARG_ENABLE(silent-msi,
1820     AS_HELP_STRING([--enable-silent-msi],
1821         [Enable MSI with LIMITUI=1 (silent install).]),
1824 AC_ARG_ENABLE(macosx-code-signing,
1825     AS_HELP_STRING([--enable-macosx-code-signing=<identity>],
1826         [Sign executables, dylibs, frameworks and the app bundle. If you
1827          don't provide an identity the first suitable certificate
1828          in your keychain is used.]),
1831 AC_ARG_ENABLE(macosx-package-signing,
1832     AS_HELP_STRING([--enable-macosx-package-signing=<identity>],
1833         [Create a .pkg suitable for uploading to the Mac App Store and sign
1834          it. If you don't provide an identity the first suitable certificate
1835          in your keychain is used.]),
1838 AC_ARG_ENABLE(macosx-sandbox,
1839     AS_HELP_STRING([--enable-macosx-sandbox],
1840         [Make the app bundle run in a sandbox. Requires code signing.
1841          Is required by apps distributed in the Mac App Store, and implies
1842          adherence to App Store rules.]),
1845 AC_ARG_WITH(macosx-bundle-identifier,
1846     AS_HELP_STRING([--with-macosx-bundle-identifier=tld.mumble.orifice.TheOffice],
1847         [Define the macOS bundle identifier. Default is the somewhat weird
1848          org.libreoffice.script ("script", huh?).]),
1849 ,with_macosx_bundle_identifier=org.libreoffice.script)
1851 AC_ARG_WITH(product-name,
1852     AS_HELP_STRING([--with-product-name='My Own Office Suite'],
1853         [Define the product name. Default is AC_PACKAGE_NAME.]),
1854 ,with_product_name=$PRODUCTNAME)
1856 libo_FUZZ_ARG_ENABLE(community-flavor,
1857     AS_HELP_STRING([--disable-community-flavor],
1858         [Disable the Community branding.]),
1861 AC_ARG_WITH(package-version,
1862     AS_HELP_STRING([--with-package-version='3.1.4.5'],
1863         [Define the package version. Default is AC_PACKAGE_VERSION. Use only if you distribute an own build for macOS.]),
1866 libo_FUZZ_ARG_ENABLE(readonly-installset,
1867     AS_HELP_STRING([--enable-readonly-installset],
1868         [Prevents any attempts by LibreOffice to write into its installation. That means
1869          at least that no "system-wide" extensions can be added. Partly experimental work in
1870          progress, probably not fully implemented. Always enabled for macOS.]),
1873 libo_FUZZ_ARG_ENABLE(mariadb-sdbc,
1874     AS_HELP_STRING([--disable-mariadb-sdbc],
1875         [Disable the build of the MariaDB/MySQL-SDBC driver.])
1878 libo_FUZZ_ARG_ENABLE(postgresql-sdbc,
1879     AS_HELP_STRING([--disable-postgresql-sdbc],
1880         [Disable the build of the PostgreSQL-SDBC driver.])
1883 libo_FUZZ_ARG_ENABLE(lotuswordpro,
1884     AS_HELP_STRING([--disable-lotuswordpro],
1885         [Disable the build of the Lotus Word Pro filter.]),
1886 ,test "${enable_lotuswordpro+set}" = set || enable_lotuswordpro=yes)
1888 libo_FUZZ_ARG_ENABLE(firebird-sdbc,
1889     AS_HELP_STRING([--disable-firebird-sdbc],
1890         [Disable the build of the Firebird-SDBC driver if it doesn't compile for you.]),
1891 ,test "${enable_firebird_sdbc+set}" = set || enable_firebird_sdbc=yes)
1893 AC_ARG_ENABLE(bogus-pkg-config,
1894     AS_HELP_STRING([--enable-bogus-pkg-config],
1895         [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.]),
1898 AC_ARG_ENABLE(openssl,
1899     AS_HELP_STRING([--disable-openssl],
1900         [Disable using libssl/libcrypto from OpenSSL. If disabled,
1901          components will either use GNUTLS or NSS. Work in progress,
1902          use only if you are hacking on it.]),
1903 ,enable_openssl=yes)
1905 libo_FUZZ_ARG_ENABLE(cipher-openssl-backend,
1906     AS_HELP_STRING([--enable-cipher-openssl-backend],
1907         [Enable using OpenSSL as the actual implementation of the rtl/cipher.h functionality.
1908          Requires --enable-openssl.]))
1910 AC_ARG_ENABLE(nss,
1911     AS_HELP_STRING([--disable-nss],
1912         [Disable using NSS. If disabled,
1913          components will either use GNUTLS or openssl. Work in progress,
1914          use only if you are hacking on it.]),
1915 ,enable_nss=yes)
1917 AC_ARG_ENABLE(library-bin-tar,
1918     AS_HELP_STRING([--enable-library-bin-tar],
1919         [Enable the building and reused of tarball of binary build for some 'external' libraries.
1920         Some libraries can save their build result in a tarball
1921         stored in TARFILE_LOCATION. That binary tarball is
1922         uniquely identified by the source tarball,
1923         the content of the config_host.mk file and the content
1924         of the top-level directory in core for that library
1925         If this option is enabled, then if such a tarfile exist, it will be untarred
1926         instead of the source tarfile, and the build step will be skipped for that
1927         library.
1928         If a proper tarfile does not exist, then the normal source-based
1929         build is done for that library and a proper binary tarfile is created
1930         for the next time.]),
1933 AC_ARG_ENABLE(dconf,
1934     AS_HELP_STRING([--disable-dconf],
1935         [Disable the dconf configuration backend (enabled by default where
1936          available).]))
1938 libo_FUZZ_ARG_ENABLE(formula-logger,
1939     AS_HELP_STRING(
1940         [--enable-formula-logger],
1941         [Enable formula logger for logging formula calculation flow in Calc.]
1942     )
1945 AC_ARG_ENABLE(ldap,
1946     AS_HELP_STRING([--disable-ldap],
1947         [Disable LDAP support.]),
1948 ,enable_ldap=yes)
1950 AC_ARG_ENABLE(opencl,
1951     AS_HELP_STRING([--disable-opencl],
1952         [Disable OpenCL support.]),
1953 ,enable_opencl=yes)
1955 libo_FUZZ_ARG_ENABLE(librelogo,
1956     AS_HELP_STRING([--disable-librelogo],
1957         [Do not build LibreLogo.]),
1958 ,enable_librelogo=yes)
1960 AC_ARG_ENABLE(cmis,
1961     AS_HELP_STRING([--disable-cmis],
1962         [Disable CMIS support.]),
1963 ,enable_cmis=yes)
1965 AC_ARG_ENABLE(curl,
1966     AS_HELP_STRING([--disable-curl],
1967         [Disable CURL support.]),
1968 ,enable_curl=yes)
1970 AC_ARG_ENABLE(wasm-strip,
1971     AS_HELP_STRING([--enable-wasm-strip],
1972         [Strip the static build like for WASM/emscripten platform.]),
1973 ,enable_wasm_strip=yes)
1975 AC_ARG_ENABLE(xmlhelp,
1976     AS_HELP_STRING([--disable-xmlhelp],
1977         [Disable XML help support]),
1978 ,enable_xmlhelp=yes)
1981 dnl ===================================================================
1982 dnl Optional Packages (--with/without-)
1983 dnl ===================================================================
1985 AC_ARG_WITH(gcc-home,
1986     AS_HELP_STRING([--with-gcc-home],
1987         [Specify the location of gcc/g++ manually. This can be used in conjunction
1988          with --enable-icecream when icecream gcc/g++ wrappers are installed in a
1989          non-default path.]),
1992 AC_ARG_WITH(gnu-patch,
1993     AS_HELP_STRING([--with-gnu-patch],
1994         [Specify location of GNU patch on Solaris or FreeBSD.]),
1997 AC_ARG_WITH(build-platform-configure-options,
1998     AS_HELP_STRING([--with-build-platform-configure-options],
1999         [Specify options for the configure script run for the *build* platform in a cross-compilation]),
2002 AC_ARG_WITH(gnu-cp,
2003     AS_HELP_STRING([--with-gnu-cp],
2004         [Specify location of GNU cp on Solaris or FreeBSD.]),
2007 AC_ARG_WITH(external-tar,
2008     AS_HELP_STRING([--with-external-tar=<TARFILE_PATH>],
2009         [Specify an absolute path of where to find (and store) tarfiles.]),
2010     TARFILE_LOCATION=$withval ,
2013 AC_ARG_WITH(referenced-git,
2014     AS_HELP_STRING([--with-referenced-git=<OTHER_CHECKOUT_DIR>],
2015         [Specify another checkout directory to reference. This makes use of
2016                  git submodule update --reference, and saves a lot of diskspace
2017                  when having multiple trees side-by-side.]),
2018     GIT_REFERENCE_SRC=$withval ,
2021 AC_ARG_WITH(linked-git,
2022     AS_HELP_STRING([--with-linked-git=<submodules repo basedir>],
2023         [Specify a directory where the repositories of submodules are located.
2024          This uses a method similar to git-new-workdir to get submodules.]),
2025     GIT_LINK_SRC=$withval ,
2028 AC_ARG_WITH(galleries,
2029     AS_HELP_STRING([--with-galleries],
2030         [Specify how galleries should be built. It is possible either to
2031          build these internally from source ("build"),
2032          or to disable them ("no")]),
2035 AC_ARG_WITH(theme,
2036     AS_HELP_STRING([--with-theme="theme1 theme2..."],
2037         [Choose which themes to include. By default those themes with an '*' are included.
2038          Possible choices: *breeze, *breeze_dark, *breeze_dark_svg, *breeze_svg, *colibre, *colibre_svg, *elementary,
2039          *elementary_svg, *karasa_jaga, *karasa_jaga_svg, *sifr, *sifr_dark, *sifr_dark_svg, *sifr_svg, *sukapura, *sukapura_svg.]),
2042 libo_FUZZ_ARG_WITH(helppack-integration,
2043     AS_HELP_STRING([--without-helppack-integration],
2044         [It will not integrate the helppacks to the installer
2045          of the product. Please use this switch to use the online help
2046          or separate help packages.]),
2049 libo_FUZZ_ARG_WITH(fonts,
2050     AS_HELP_STRING([--without-fonts],
2051         [LibreOffice includes some third-party fonts to provide a reliable basis for
2052          help content, templates, samples, etc. When these fonts are already
2053          known to be available on the system then you should use this option.]),
2056 AC_ARG_WITH(epm,
2057     AS_HELP_STRING([--with-epm],
2058         [Decides which epm to use. Default is to use the one from the system if
2059          one is built. When either this is not there or you say =internal epm
2060          will be built.]),
2063 AC_ARG_WITH(package-format,
2064     AS_HELP_STRING([--with-package-format],
2065         [Specify package format(s) for LibreOffice installation sets. The
2066          implicit --without-package-format leads to no installation sets being
2067          generated. Possible values: aix, archive, bsd, deb, dmg,
2068          installed, msi, pkg, and rpm.
2069          Example: --with-package-format='deb rpm']),
2072 AC_ARG_WITH(tls,
2073     AS_HELP_STRING([--with-tls],
2074         [Decides which TLS/SSL and cryptographic implementations to use for
2075          LibreOffice's code. Notice that this doesn't apply for depending
2076          libraries like "neon", for example. Default is to use NSS
2077          although OpenSSL is also possible. Notice that selecting NSS restricts
2078          the usage of OpenSSL in LO's code but selecting OpenSSL doesn't
2079          restrict by now the usage of NSS in LO's code. Possible values:
2080          openssl, nss. Example: --with-tls="nss"]),
2083 AC_ARG_WITH(system-libs,
2084     AS_HELP_STRING([--with-system-libs],
2085         [Use libraries already on system -- enables all --with-system-* flags.]),
2088 AC_ARG_WITH(system-bzip2,
2089     AS_HELP_STRING([--with-system-bzip2],
2090         [Use bzip2 already on system. Used only when --enable-online-update=mar]),,
2091     [with_system_bzip2="$with_system_libs"])
2093 AC_ARG_WITH(system-headers,
2094     AS_HELP_STRING([--with-system-headers],
2095         [Use headers already on system -- enables all --with-system-* flags for
2096          external packages whose headers are the only entities used i.e.
2097          boost/odbc/sane-header(s).]),,
2098     [with_system_headers="$with_system_libs"])
2100 AC_ARG_WITH(system-jars,
2101     AS_HELP_STRING([--without-system-jars],
2102         [When building with --with-system-libs, also the needed jars are expected
2103          on the system. Use this to disable that]),,
2104     [with_system_jars="$with_system_libs"])
2106 AC_ARG_WITH(system-cairo,
2107     AS_HELP_STRING([--with-system-cairo],
2108         [Use cairo libraries already on system.  Happens automatically for
2109          (implicit) --enable-gtk3.]))
2111 AC_ARG_WITH(system-epoxy,
2112     AS_HELP_STRING([--with-system-epoxy],
2113         [Use epoxy libraries already on system.  Happens automatically for
2114          (implicit) --enable-gtk3.]),,
2115        [with_system_epoxy="$with_system_libs"])
2117 AC_ARG_WITH(myspell-dicts,
2118     AS_HELP_STRING([--with-myspell-dicts],
2119         [Adds myspell dictionaries to the LibreOffice installation set]),
2122 AC_ARG_WITH(system-dicts,
2123     AS_HELP_STRING([--without-system-dicts],
2124         [Do not use dictionaries from system paths.]),
2127 AC_ARG_WITH(external-dict-dir,
2128     AS_HELP_STRING([--with-external-dict-dir],
2129         [Specify external dictionary dir.]),
2132 AC_ARG_WITH(external-hyph-dir,
2133     AS_HELP_STRING([--with-external-hyph-dir],
2134         [Specify external hyphenation pattern dir.]),
2137 AC_ARG_WITH(external-thes-dir,
2138     AS_HELP_STRING([--with-external-thes-dir],
2139         [Specify external thesaurus dir.]),
2142 AC_ARG_WITH(system-zlib,
2143     AS_HELP_STRING([--with-system-zlib],
2144         [Use zlib already on system.]),,
2145     [with_system_zlib=auto])
2147 AC_ARG_WITH(system-jpeg,
2148     AS_HELP_STRING([--with-system-jpeg],
2149         [Use jpeg already on system.]),,
2150     [with_system_jpeg="$with_system_libs"])
2152 AC_ARG_WITH(system-clucene,
2153     AS_HELP_STRING([--with-system-clucene],
2154         [Use clucene already on system.]),,
2155     [with_system_clucene="$with_system_libs"])
2157 AC_ARG_WITH(system-expat,
2158     AS_HELP_STRING([--with-system-expat],
2159         [Use expat already on system.]),,
2160     [with_system_expat="$with_system_libs"])
2162 AC_ARG_WITH(system-libxml,
2163     AS_HELP_STRING([--with-system-libxml],
2164         [Use libxml/libxslt already on system.]),,
2165     [with_system_libxml=auto])
2167 AC_ARG_WITH(system-icu,
2168     AS_HELP_STRING([--with-system-icu],
2169         [Use icu already on system.]),,
2170     [with_system_icu="$with_system_libs"])
2172 AC_ARG_WITH(system-ucpp,
2173     AS_HELP_STRING([--with-system-ucpp],
2174         [Use ucpp already on system.]),,
2175     [])
2177 AC_ARG_WITH(system-openldap,
2178     AS_HELP_STRING([--with-system-openldap],
2179         [Use the OpenLDAP LDAP SDK already on system.]),,
2180     [with_system_openldap="$with_system_libs"])
2182 libo_FUZZ_ARG_ENABLE(poppler,
2183     AS_HELP_STRING([--disable-poppler],
2184         [Disable building Poppler.])
2187 AC_ARG_WITH(system-poppler,
2188     AS_HELP_STRING([--with-system-poppler],
2189         [Use system poppler (only needed for PDF import).]),,
2190     [with_system_poppler="$with_system_libs"])
2192 AC_ARG_WITH(system-abseil,
2193     AS_HELP_STRING([--with-system-abseil],
2194         [Use the abseil libraries already on system.]),,
2195     [with_system_abseil="$with_system_libs"])
2197 AC_ARG_WITH(system-openjpeg,
2198     AS_HELP_STRING([--with-system-openjpeg],
2199         [Use the OpenJPEG library already on system.]),,
2200     [with_system_openjpeg="$with_system_libs"])
2202 libo_FUZZ_ARG_ENABLE(gpgmepp,
2203     AS_HELP_STRING([--disable-gpgmepp],
2204         [Disable building gpgmepp. Do not use in normal cases unless you want to fix potential problems it causes.])
2207 AC_ARG_WITH(system-gpgmepp,
2208     AS_HELP_STRING([--with-system-gpgmepp],
2209         [Use gpgmepp already on system]),,
2210     [with_system_gpgmepp="$with_system_libs"])
2212 AC_ARG_WITH(system-mariadb,
2213     AS_HELP_STRING([--with-system-mariadb],
2214         [Use MariaDB/MySQL libraries already on system.]),,
2215     [with_system_mariadb="$with_system_libs"])
2217 AC_ARG_ENABLE(bundle-mariadb,
2218     AS_HELP_STRING([--enable-bundle-mariadb],
2219         [When using MariaDB/MySQL libraries already on system, bundle them with the MariaDB Connector/LibreOffice.])
2222 AC_ARG_WITH(system-postgresql,
2223     AS_HELP_STRING([--with-system-postgresql],
2224         [Use PostgreSQL libraries already on system, for building the PostgreSQL-SDBC
2225          driver. If pg_config is not in PATH, use PGCONFIG to point to it.]),,
2226     [with_system_postgresql="$with_system_libs"])
2228 AC_ARG_WITH(libpq-path,
2229     AS_HELP_STRING([--with-libpq-path=<absolute path to your libpq installation>],
2230         [Use this PostgreSQL C interface (libpq) installation for building
2231          the PostgreSQL-SDBC extension.]),
2234 AC_ARG_WITH(system-firebird,
2235     AS_HELP_STRING([--with-system-firebird],
2236         [Use Firebird libraries already on system, for building the Firebird-SDBC
2237          driver. If fb_config is not in PATH, use FBCONFIG to point to it.]),,
2238     [with_system_firebird="$with_system_libs"])
2240 AC_ARG_WITH(system-libtommath,
2241             AS_HELP_STRING([--with-system-libtommath],
2242                            [Use libtommath already on system]),,
2243             [with_system_libtommath="$with_system_libs"])
2245 AC_ARG_WITH(system-hsqldb,
2246     AS_HELP_STRING([--with-system-hsqldb],
2247         [Use hsqldb already on system.]))
2249 AC_ARG_WITH(hsqldb-jar,
2250     AS_HELP_STRING([--with-hsqldb-jar=JARFILE],
2251         [Specify path to jarfile manually.]),
2252     HSQLDB_JAR=$withval)
2254 libo_FUZZ_ARG_ENABLE(scripting-beanshell,
2255     AS_HELP_STRING([--disable-scripting-beanshell],
2256         [Disable support for scripts in BeanShell.]),
2260 AC_ARG_WITH(system-beanshell,
2261     AS_HELP_STRING([--with-system-beanshell],
2262         [Use beanshell already on system.]),,
2263     [with_system_beanshell="$with_system_jars"])
2265 AC_ARG_WITH(beanshell-jar,
2266     AS_HELP_STRING([--with-beanshell-jar=JARFILE],
2267         [Specify path to jarfile manually.]),
2268     BSH_JAR=$withval)
2270 libo_FUZZ_ARG_ENABLE(scripting-javascript,
2271     AS_HELP_STRING([--disable-scripting-javascript],
2272         [Disable support for scripts in JavaScript.]),
2276 AC_ARG_WITH(system-rhino,
2277     AS_HELP_STRING([--with-system-rhino],
2278         [Use rhino already on system.]),,)
2279 #    [with_system_rhino="$with_system_jars"])
2280 # Above is not used as we have different debug interface
2281 # patched into internal rhino. This code needs to be fixed
2282 # before we can enable it by default.
2284 AC_ARG_WITH(rhino-jar,
2285     AS_HELP_STRING([--with-rhino-jar=JARFILE],
2286         [Specify path to jarfile manually.]),
2287     RHINO_JAR=$withval)
2289 AC_ARG_WITH(system-jfreereport,
2290     AS_HELP_STRING([--with-system-jfreereport],
2291         [Use JFreeReport already on system.]),,
2292     [with_system_jfreereport="$with_system_jars"])
2294 AC_ARG_WITH(sac-jar,
2295     AS_HELP_STRING([--with-sac-jar=JARFILE],
2296         [Specify path to jarfile manually.]),
2297     SAC_JAR=$withval)
2299 AC_ARG_WITH(libxml-jar,
2300     AS_HELP_STRING([--with-libxml-jar=JARFILE],
2301         [Specify path to jarfile manually.]),
2302     LIBXML_JAR=$withval)
2304 AC_ARG_WITH(flute-jar,
2305     AS_HELP_STRING([--with-flute-jar=JARFILE],
2306         [Specify path to jarfile manually.]),
2307     FLUTE_JAR=$withval)
2309 AC_ARG_WITH(jfreereport-jar,
2310     AS_HELP_STRING([--with-jfreereport-jar=JARFILE],
2311         [Specify path to jarfile manually.]),
2312     JFREEREPORT_JAR=$withval)
2314 AC_ARG_WITH(liblayout-jar,
2315     AS_HELP_STRING([--with-liblayout-jar=JARFILE],
2316         [Specify path to jarfile manually.]),
2317     LIBLAYOUT_JAR=$withval)
2319 AC_ARG_WITH(libloader-jar,
2320     AS_HELP_STRING([--with-libloader-jar=JARFILE],
2321         [Specify path to jarfile manually.]),
2322     LIBLOADER_JAR=$withval)
2324 AC_ARG_WITH(libformula-jar,
2325     AS_HELP_STRING([--with-libformula-jar=JARFILE],
2326         [Specify path to jarfile manually.]),
2327     LIBFORMULA_JAR=$withval)
2329 AC_ARG_WITH(librepository-jar,
2330     AS_HELP_STRING([--with-librepository-jar=JARFILE],
2331         [Specify path to jarfile manually.]),
2332     LIBREPOSITORY_JAR=$withval)
2334 AC_ARG_WITH(libfonts-jar,
2335     AS_HELP_STRING([--with-libfonts-jar=JARFILE],
2336         [Specify path to jarfile manually.]),
2337     LIBFONTS_JAR=$withval)
2339 AC_ARG_WITH(libserializer-jar,
2340     AS_HELP_STRING([--with-libserializer-jar=JARFILE],
2341         [Specify path to jarfile manually.]),
2342     LIBSERIALIZER_JAR=$withval)
2344 AC_ARG_WITH(libbase-jar,
2345     AS_HELP_STRING([--with-libbase-jar=JARFILE],
2346         [Specify path to jarfile manually.]),
2347     LIBBASE_JAR=$withval)
2349 AC_ARG_WITH(system-odbc,
2350     AS_HELP_STRING([--with-system-odbc],
2351         [Use the odbc headers already on system.]),,
2352     [with_system_odbc="auto"])
2354 AC_ARG_WITH(system-sane,
2355     AS_HELP_STRING([--with-system-sane],
2356         [Use sane.h already on system.]),,
2357     [with_system_sane="$with_system_headers"])
2359 AC_ARG_WITH(system-bluez,
2360     AS_HELP_STRING([--with-system-bluez],
2361         [Use bluetooth.h already on system.]),,
2362     [with_system_bluez="$with_system_headers"])
2364 AC_ARG_WITH(system-curl,
2365     AS_HELP_STRING([--with-system-curl],
2366         [Use curl already on system.]),,
2367     [with_system_curl=auto])
2369 AC_ARG_WITH(system-boost,
2370     AS_HELP_STRING([--with-system-boost],
2371         [Use boost already on system.]),,
2372     [with_system_boost="$with_system_headers"])
2374 AC_ARG_WITH(system-cuckoo,
2375     AS_HELP_STRING([--with-system-cuckoo],
2376         [Use libcuckoo already on system.]),,
2377     [with_system_cuckoo="$with_system_headers"])
2379 AC_ARG_WITH(system-glm,
2380     AS_HELP_STRING([--with-system-glm],
2381         [Use glm already on system.]),,
2382     [with_system_glm="$with_system_headers"])
2384 AC_ARG_WITH(system-hunspell,
2385     AS_HELP_STRING([--with-system-hunspell],
2386         [Use libhunspell already on system.]),,
2387     [with_system_hunspell="$with_system_libs"])
2389 libo_FUZZ_ARG_ENABLE(zxing,
2390     AS_HELP_STRING([--disable-zxing],
2391        [Disable use of zxing external library.]))
2393 AC_ARG_WITH(system-zxing,
2394     AS_HELP_STRING([--with-system-zxing],
2395         [Use libzxing already on system.]),,
2396     [with_system_zxing="$with_system_libs"])
2398 AC_ARG_WITH(system-box2d,
2399     AS_HELP_STRING([--with-system-box2d],
2400         [Use box2d already on system.]),,
2401     [with_system_box2d="$with_system_libs"])
2403 AC_ARG_WITH(system-mythes,
2404     AS_HELP_STRING([--with-system-mythes],
2405         [Use mythes already on system.]),,
2406     [with_system_mythes="$with_system_libs"])
2408 AC_ARG_WITH(system-altlinuxhyph,
2409     AS_HELP_STRING([--with-system-altlinuxhyph],
2410         [Use ALTLinuxhyph already on system.]),,
2411     [with_system_altlinuxhyph="$with_system_libs"])
2413 AC_ARG_WITH(system-lpsolve,
2414     AS_HELP_STRING([--with-system-lpsolve],
2415         [Use lpsolve already on system.]),,
2416     [with_system_lpsolve="$with_system_libs"])
2418 AC_ARG_WITH(system-coinmp,
2419     AS_HELP_STRING([--with-system-coinmp],
2420         [Use CoinMP already on system.]),,
2421     [with_system_coinmp="$with_system_libs"])
2423 AC_ARG_WITH(system-liblangtag,
2424     AS_HELP_STRING([--with-system-liblangtag],
2425         [Use liblangtag library already on system.]),,
2426     [with_system_liblangtag="$with_system_libs"])
2428 AC_ARG_WITH(webdav,
2429     AS_HELP_STRING([--with-webdav],
2430         [Specify which library to use for webdav implementation.
2431          Possible values: "neon", "serf", "curl", "no". The default value is "neon".
2432          Example: --with-webdav="serf"]))
2434 AC_ARG_WITH(linker-hash-style,
2435     AS_HELP_STRING([--with-linker-hash-style],
2436         [Use linker with --hash-style=<style> when linking shared objects.
2437          Possible values: "sysv", "gnu", "both". The default value is "gnu"
2438          if supported on the build system, and "sysv" otherwise.]))
2440 AC_ARG_WITH(jdk-home,
2441     AS_HELP_STRING([--with-jdk-home=<absolute path to JDK home>],
2442         [If you have installed JDK 9 or later on your system please supply the
2443          path here. Note that this is not the location of the java command but the
2444          location of the entire distribution. In case of cross-compiling, this
2445          is the JDK of the host os. Use --with-build-platform-configure-options
2446          to point to a different build platform JDK.]),
2449 AC_ARG_WITH(help,
2450     AS_HELP_STRING([--with-help],
2451         [Enable the build of help. There is a special parameter "common" that
2452          can be used to bundle only the common part, .e.g help-specific icons.
2453          This is useful when you build the helpcontent separately.])
2454     [
2455                           Usage:     --with-help    build the old local help
2456                                  --without-help     no local help (default)
2457                                  --with-help=html   build the new HTML local help
2458                                  --with-help=online build the new HTML online help
2459     ],
2462 AC_ARG_WITH(omindex,
2463    AS_HELP_STRING([--with-omindex],
2464         [Enable the support of xapian-omega index for online help.])
2465    [
2466                          Usage: --with-omindex=server prepare the pages for omindex
2467                                 but let xapian-omega be built in server.
2468                                 --with-omindex=noxap do not prepare online pages
2469                                 for xapian-omega
2470   ],
2473 libo_FUZZ_ARG_WITH(java,
2474     AS_HELP_STRING([--with-java=<java command>],
2475         [Specify the name of the Java interpreter command. Typically "java"
2476          which is the default.
2478          To build without support for Java components, applets, accessibility
2479          or the XML filters written in Java, use --without-java or --with-java=no.]),
2480     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ],
2481     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ]
2484 AC_ARG_WITH(jvm-path,
2485     AS_HELP_STRING([--with-jvm-path=<absolute path to parent of jvm home>],
2486         [Use a specific JVM search path at runtime.
2487          e.g. use --with-jvm-path=/usr/lib/ to find JRE/JDK in /usr/lib/jvm/]),
2490 AC_ARG_WITH(ant-home,
2491     AS_HELP_STRING([--with-ant-home=<absolute path to Ant home>],
2492         [If you have installed Apache Ant on your system, please supply the path here.
2493          Note that this is not the location of the Ant binary but the location
2494          of the entire distribution.]),
2497 AC_ARG_WITH(symbol-config,
2498     AS_HELP_STRING([--with-symbol-config],
2499         [Configuration for the crashreport symbol upload]),
2500         [],
2501         [with_symbol_config=no])
2503 AC_ARG_WITH(export-validation,
2504     AS_HELP_STRING([--without-export-validation],
2505         [Disable validating OOXML and ODF files as exported from in-tree tests.]),
2506 ,with_export_validation=auto)
2508 AC_ARG_WITH(bffvalidator,
2509     AS_HELP_STRING([--with-bffvalidator=<absolute path to BFFValidator>],
2510         [Enables export validation for Microsoft Binary formats (doc, xls, ppt).
2511          Requires installed Microsoft Office Binary File Format Validator.
2512          Note: export-validation (--with-export-validation) is required to be turned on.
2513          See https://www.microsoft.com/en-us/download/details.aspx?id=26794]),
2514 ,with_bffvalidator=no)
2516 libo_FUZZ_ARG_WITH(junit,
2517     AS_HELP_STRING([--with-junit=<absolute path to JUnit 4 jar>],
2518         [Specifies the JUnit 4 jar file to use for JUnit-based tests.
2519          --without-junit disables those tests. Not relevant in the --without-java case.]),
2520 ,with_junit=yes)
2522 AC_ARG_WITH(hamcrest,
2523     AS_HELP_STRING([--with-hamcrest=<absolute path to hamcrest jar>],
2524         [Specifies the hamcrest jar file to use for JUnit-based tests.
2525          --without-junit disables those tests. Not relevant in the --without-java case.]),
2526 ,with_hamcrest=yes)
2528 AC_ARG_WITH(perl-home,
2529     AS_HELP_STRING([--with-perl-home=<abs. path to Perl 5 home>],
2530         [If you have installed Perl 5 Distribution, on your system, please
2531          supply the path here. Note that this is not the location of the Perl
2532          binary but the location of the entire distribution.]),
2535 libo_FUZZ_ARG_WITH(doxygen,
2536     AS_HELP_STRING(
2537         [--with-doxygen=<absolute path to doxygen executable>],
2538         [Specifies the doxygen executable to use when generating ODK C/C++
2539          documentation. --without-doxygen disables generation of ODK C/C++
2540          documentation. Not relevant in the --disable-odk case.]),
2541 ,with_doxygen=yes)
2543 AC_ARG_WITH(visual-studio,
2544     AS_HELP_STRING([--with-visual-studio=<2019/2022>],
2545         [Specify which Visual Studio version to use in case several are
2546          installed. Currently 2019 (default) and 2022 are supported.]),
2549 AC_ARG_WITH(windows-sdk,
2550     AS_HELP_STRING([--with-windows-sdk=<8.0(A)/8.1(A)/10.0>],
2551         [Specify which Windows SDK, or "Windows Kit", version to use
2552          in case the one that came with the selected Visual Studio
2553          is not what you want for some reason. Note that not all compiler/SDK
2554          combinations are supported. The intent is that this option should not
2555          be needed.]),
2558 AC_ARG_WITH(lang,
2559     AS_HELP_STRING([--with-lang="es sw tu cs sk"],
2560         [Use this option to build LibreOffice with additional UI language support.
2561          English (US) is always included by default.
2562          Separate multiple languages with space.
2563          For all languages, use --with-lang=ALL.]),
2566 AC_ARG_WITH(locales,
2567     AS_HELP_STRING([--with-locales="en es pt fr zh kr ja"],
2568         [Use this option to limit the locale information built in.
2569          Separate multiple locales with space.
2570          Very experimental and might well break stuff.
2571          Just a desperate measure to shrink code and data size.
2572          By default all the locales available is included.
2573          This option is completely unrelated to --with-lang.])
2574     [
2575                           Affects also our character encoding conversion
2576                           tables for encodings mainly targeted for a
2577                           particular locale, like EUC-CN and EUC-TW for
2578                           zh, ISO-2022-JP for ja.
2580                           Affects also our add-on break iterator data for
2581                           some languages.
2583                           For the default, all locales, don't use this switch at all.
2584                           Specifying just the language part of a locale means all matching
2585                           locales will be included.
2586     ],
2589 # Kerberos and GSSAPI used only by PostgreSQL as of LibO 3.5
2590 libo_FUZZ_ARG_WITH(krb5,
2591     AS_HELP_STRING([--with-krb5],
2592         [Enable MIT Kerberos 5 support in modules that support it.
2593          By default automatically enabled on platforms
2594          where a good system Kerberos 5 is available.]),
2597 libo_FUZZ_ARG_WITH(gssapi,
2598     AS_HELP_STRING([--with-gssapi],
2599         [Enable GSSAPI support in modules that support it.
2600          By default automatically enabled on platforms
2601          where a good system GSSAPI is available.]),
2604 AC_ARG_WITH(iwyu,
2605     AS_HELP_STRING([--with-iwyu],
2606         [Use given IWYU binary path to check unneeded includes instead of building.
2607          Use only if you are hacking on it.]),
2610 libo_FUZZ_ARG_WITH(lxml,
2611     AS_HELP_STRING([--without-lxml],
2612         [gla11y will use python lxml when available, potentially building a local copy if necessary.
2613          --without-lxml tells it to not use python lxml at all, which means that gla11y will only
2614          report widget classes and ids.]),
2617 libo_FUZZ_ARG_WITH(latest-c++,
2618     AS_HELP_STRING([--with-latest-c++],
2619         [Try to enable the latest features of the C++ compiler, even if they are not yet part of a
2620          published standard.]),,
2621         [with_latest_c__=no])
2623 dnl ===================================================================
2624 dnl Branding
2625 dnl ===================================================================
2627 AC_ARG_WITH(branding,
2628     AS_HELP_STRING([--with-branding=/path/to/images],
2629         [Use given path to retrieve branding images set.])
2630     [
2631                           Search for intro.png about.svg and logo.svg.
2632                           If any is missing, default ones will be used instead.
2634                           Search also progress.conf for progress
2635                           settings on intro screen :
2637                           PROGRESSBARCOLOR="255,255,255" Set color of
2638                           progress bar. Comma separated RGB decimal values.
2639                           PROGRESSSIZE="407,6" Set size of progress bar.
2640                           Comma separated decimal values (width, height).
2641                           PROGRESSPOSITION="61,317" Set position of progress
2642                           bar from left,top. Comma separated decimal values.
2643                           PROGRESSFRAMECOLOR="20,136,3" Set color of progress
2644                           bar frame. Comma separated RGB decimal values.
2645                           PROGRESSTEXTCOLOR="0,0,0" Set color of progress
2646                           bar text. Comma separated RGB decimal values.
2647                           PROGRESSTEXTBASELINE="287" Set vertical position of
2648                           progress bar text from top. Decimal value.
2650                           Default values will be used if not found.
2651     ],
2655 AC_ARG_WITH(extra-buildid,
2656     AS_HELP_STRING([--with-extra-buildid="Tinderbox: Win-x86@6, Branch:master, Date:2012-11-26_00.29.34"],
2657         [Show addition build identification in about dialog.]),
2661 AC_ARG_WITH(vendor,
2662     AS_HELP_STRING([--with-vendor="John the Builder"],
2663         [Set vendor of the build.]),
2666 AC_ARG_WITH(privacy-policy-url,
2667     AS_HELP_STRING([--with-privacy-policy-url="https://yourdomain/privacy-policy"],
2668         [The URL to your privacy policy (needed when
2669          enabling online-update or crashreporting via breakpad)]),
2670         [if test "x$with_privacy_policy_url" = "xyes"; then
2671             AC_MSG_FAILURE([you need to specify an argument when using --with-privacy-policy-url])
2672          elif test "x$with_privacy_policy_url" = "xno"; then
2673             with_privacy_policy_url="undefined"
2674          fi]
2675 ,[with_privacy_policy_url="undefined"])
2677 AC_ARG_WITH(android-package-name,
2678     AS_HELP_STRING([--with-android-package-name="org.libreoffice"],
2679         [Set Android package name of the build.]),
2682 AC_ARG_WITH(compat-oowrappers,
2683     AS_HELP_STRING([--with-compat-oowrappers],
2684         [Install oo* wrappers in parallel with
2685          lo* ones to keep backward compatibility.
2686          Has effect only with make distro-pack-install]),
2689 AC_ARG_WITH(os-version,
2690     AS_HELP_STRING([--with-os-version=<OSVERSION>],
2691         [For FreeBSD users, use this option to override the detected OSVERSION.]),
2694 AC_ARG_WITH(idlc-cpp,
2695     AS_HELP_STRING([--with-idlc-cpp=<cpp/ucpp>],
2696         [Specify the C Preprocessor to use for idlc. Default is ucpp.]),
2699 AC_ARG_WITH(parallelism,
2700     AS_HELP_STRING([--with-parallelism],
2701         [Number of jobs to run simultaneously during build. Parallel builds can
2702         save a lot of time on multi-cpu machines. Defaults to the number of
2703         CPUs on the machine, unless you configure --enable-icecream - then to
2704         40.]),
2707 AC_ARG_WITH(all-tarballs,
2708     AS_HELP_STRING([--with-all-tarballs],
2709         [Download all external tarballs unconditionally]))
2711 AC_ARG_WITH(gdrive-client-id,
2712     AS_HELP_STRING([--with-gdrive-client-id],
2713         [Provides the client id of the application for OAuth2 authentication
2714         on Google Drive. If either this or --with-gdrive-client-secret is
2715         empty, the feature will be disabled]),
2718 AC_ARG_WITH(gdrive-client-secret,
2719     AS_HELP_STRING([--with-gdrive-client-secret],
2720         [Provides the client secret of the application for OAuth2
2721         authentication on Google Drive. If either this or
2722         --with-gdrive-client-id is empty, the feature will be disabled]),
2725 AC_ARG_WITH(alfresco-cloud-client-id,
2726     AS_HELP_STRING([--with-alfresco-cloud-client-id],
2727         [Provides the client id of the application for OAuth2 authentication
2728         on Alfresco Cloud. If either this or --with-alfresco-cloud-client-secret is
2729         empty, the feature will be disabled]),
2732 AC_ARG_WITH(alfresco-cloud-client-secret,
2733     AS_HELP_STRING([--with-alfresco-cloud-client-secret],
2734         [Provides the client secret of the application for OAuth2
2735         authentication on Alfresco Cloud. If either this or
2736         --with-alfresco-cloud-client-id is empty, the feature will be disabled]),
2739 AC_ARG_WITH(onedrive-client-id,
2740     AS_HELP_STRING([--with-onedrive-client-id],
2741         [Provides the client id of the application for OAuth2 authentication
2742         on OneDrive. If either this or --with-onedrive-client-secret is
2743         empty, the feature will be disabled]),
2746 AC_ARG_WITH(onedrive-client-secret,
2747     AS_HELP_STRING([--with-onedrive-client-secret],
2748         [Provides the client secret of the application for OAuth2
2749         authentication on OneDrive. If either this or
2750         --with-onedrive-client-id is empty, the feature will be disabled]),
2752 dnl ===================================================================
2753 dnl Do we want to use pre-build binary tarball for recompile
2754 dnl ===================================================================
2756 if test "$enable_library_bin_tar" = "yes" ; then
2757     USE_LIBRARY_BIN_TAR=TRUE
2758 else
2759     USE_LIBRARY_BIN_TAR=
2761 AC_SUBST(USE_LIBRARY_BIN_TAR)
2763 dnl ===================================================================
2764 dnl Test whether build target is Release Build
2765 dnl ===================================================================
2766 AC_MSG_CHECKING([whether build target is Release Build])
2767 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
2768     AC_MSG_RESULT([no])
2769     ENABLE_RELEASE_BUILD=
2770     GET_TASK_ALLOW_ENTITLEMENT='
2771         <!-- We want to be able to debug a hardened process when not building for release -->
2772         <key>com.apple.security.get-task-allow</key>
2773         <true/>'
2774 else
2775     AC_MSG_RESULT([yes])
2776     ENABLE_RELEASE_BUILD=TRUE
2777     GET_TASK_ALLOW_ENTITLEMENT=''
2779 AC_SUBST(ENABLE_RELEASE_BUILD)
2780 AC_SUBST(GET_TASK_ALLOW_ENTITLEMENT)
2782 AC_MSG_CHECKING([whether to build a Community flavor])
2783 if test -z "$enable_community_flavor" -o "$enable_community_flavor" = "yes"; then
2784     AC_DEFINE(HAVE_FEATURE_COMMUNITY_FLAVOR)
2785     AC_MSG_RESULT([yes])
2786 else
2787     AC_MSG_RESULT([no])
2790 dnl ===================================================================
2791 dnl Test whether to sign Windows Build
2792 dnl ===================================================================
2793 AC_MSG_CHECKING([whether to sign windows build])
2794 if test "$enable_windows_build_signing" = "yes" -a "$_os" = "WINNT"; then
2795     AC_MSG_RESULT([yes])
2796     WINDOWS_BUILD_SIGNING="TRUE"
2797 else
2798     AC_MSG_RESULT([no])
2799     WINDOWS_BUILD_SIGNING="FALSE"
2801 AC_SUBST(WINDOWS_BUILD_SIGNING)
2803 dnl ===================================================================
2804 dnl MacOSX build and runtime environment options
2805 dnl ===================================================================
2807 AC_ARG_WITH(macosx-version-min-required,
2808     AS_HELP_STRING([--with-macosx-version-min-required=<version>],
2809         [set the minimum OS version needed to run the built LibreOffice])
2810     [
2811                           e. g.: --with-macosx-version-min-required=10.12
2812     ],
2815 AC_ARG_WITH(macosx-version-max-allowed,
2816     AS_HELP_STRING([--with-macosx-version-max-allowed=<version>],
2817         [set the maximum allowed OS version the LibreOffice compilation can use APIs from])
2818     [
2819                           e. g.: --with-macosx-version-max-allowed=11.0
2820     ],
2824 dnl ===================================================================
2825 dnl options for stuff used during cross-compilation build
2826 dnl Not quite superseded by --with-build-platform-configure-options.
2827 dnl TODO: check, if the "force" option is still needed anywhere.
2828 dnl ===================================================================
2830 AC_ARG_WITH(system-icu-for-build,
2831     AS_HELP_STRING([--with-system-icu-for-build=yes/no/force],
2832         [Use icu already on system for build tools (cross-compilation only).]))
2835 dnl ===================================================================
2836 dnl Check for incompatible options set by fuzzing, and reset those
2837 dnl automatically to working combinations
2838 dnl ===================================================================
2840 if test "$libo_fuzzed_enable_dbus" = yes -a "$libo_fuzzed_enable_avahi" -a \
2841         "$enable_dbus" != "$enable_avahi"; then
2842     AC_MSG_NOTICE([Resetting --enable-avahi=$enable_dbus])
2843     enable_avahi=$enable_dbus
2846 add_lopath_after ()
2848     if ! echo "$LO_PATH" | $EGREP -q "(^|${P_SEP})$1($|${P_SEP})"; then
2849         LO_PATH="${LO_PATH:+$LO_PATH$P_SEP}$1"
2850     fi
2853 add_lopath_before ()
2855     local IFS=${P_SEP}
2856     local path_cleanup
2857     local dir
2858     for dir in $LO_PATH ; do
2859         if test "$dir" != "$1" ; then
2860             path_cleanup=${path_cleanup:+$path_cleanup$P_SEP}$dir
2861         fi
2862     done
2863     LO_PATH="$1${path_cleanup:+$P_SEP$path_cleanup}"
2866 dnl ===================================================================
2867 dnl check for required programs (grep, awk, sed, bash)
2868 dnl ===================================================================
2870 pathmunge ()
2872     local new_path
2873     if test -n "$1"; then
2874         if test "$build_os" = "cygwin"; then
2875             if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
2876                 PathFormat "$1"
2877                 new_path=`cygpath -sm "$formatted_path"`
2878             else
2879                 PathFormat "$1"
2880                 new_path=`cygpath -u "$formatted_path"`
2881             fi
2882         else
2883             new_path="$1"
2884         fi
2885         if test "$2" = "after"; then
2886             add_lopath_after "$new_path"
2887         else
2888             add_lopath_before "$new_path"
2889         fi
2890     fi
2893 AC_PROG_AWK
2894 AC_PATH_PROG( AWK, $AWK)
2895 if test -z "$AWK"; then
2896     AC_MSG_ERROR([install awk to run this script])
2899 AC_PATH_PROG(BASH, bash)
2900 if test -z "$BASH"; then
2901     AC_MSG_ERROR([bash not found in \$PATH])
2903 AC_SUBST(BASH)
2905 AC_MSG_CHECKING([for GNU or BSD tar])
2906 for a in $GNUTAR gtar gnutar bsdtar tar /usr/sfw/bin/gtar; do
2907     $a --version 2> /dev/null | egrep "GNU|bsdtar"  2>&1 > /dev/null
2908     if test $? -eq 0;  then
2909         GNUTAR=$a
2910         break
2911     fi
2912 done
2913 AC_MSG_RESULT($GNUTAR)
2914 if test -z "$GNUTAR"; then
2915     AC_MSG_ERROR([not found. install GNU or BSD tar.])
2917 AC_SUBST(GNUTAR)
2919 AC_MSG_CHECKING([for tar's option to strip components])
2920 $GNUTAR --help 2> /dev/null | egrep "bsdtar|strip-components" 2>&1 >/dev/null
2921 if test $? -eq 0; then
2922     STRIP_COMPONENTS="--strip-components"
2923 else
2924     $GNUTAR --help 2> /dev/null | egrep "strip-path" 2>&1 >/dev/null
2925     if test $? -eq 0; then
2926         STRIP_COMPONENTS="--strip-path"
2927     else
2928         STRIP_COMPONENTS="unsupported"
2929     fi
2931 AC_MSG_RESULT($STRIP_COMPONENTS)
2932 if test x$STRIP_COMPONENTS = xunsupported; then
2933     AC_MSG_ERROR([you need a tar that is able to strip components.])
2935 AC_SUBST(STRIP_COMPONENTS)
2937 dnl It is useful to have a BUILD_TYPE keyword to distinguish "normal"
2938 dnl desktop OSes from "mobile" ones.
2940 dnl We assume that a non-DESKTOP build type is also a non-NATIVE one.
2941 dnl In other words, that when building for an OS that is not a
2942 dnl "desktop" one but a "mobile" one, we are always cross-compiling.
2944 dnl Note the direction of the implication; there is no assumption that
2945 dnl cross-compiling would imply a non-desktop OS.
2947 if test $_os != iOS -a $_os != Android -a $_os != Emscripten -a "$enable_fuzzers" != "yes"; then
2948     BUILD_TYPE="$BUILD_TYPE DESKTOP"
2949     AC_DEFINE(HAVE_FEATURE_DESKTOP)
2950     AC_DEFINE(HAVE_FEATURE_MULTIUSER_ENVIRONMENT)
2953 # Whether to build "avmedia" functionality or not.
2955 if test -z "$enable_avmedia"; then
2956     enable_avmedia=yes
2959 BUILD_TYPE="$BUILD_TYPE AVMEDIA"
2960 if test "$enable_avmedia" = yes; then
2961     AC_DEFINE(HAVE_FEATURE_AVMEDIA)
2962 else
2963     USE_AVMEDIA_DUMMY='TRUE'
2965 AC_SUBST(USE_AVMEDIA_DUMMY)
2967 # Decide whether to build database connectivity stuff (including Base) or not.
2968 if test "$enable_database_connectivity" != no; then
2969     BUILD_TYPE="$BUILD_TYPE DBCONNECTIVITY"
2970     AC_DEFINE(HAVE_FEATURE_DBCONNECTIVITY)
2971 else
2972     if test "$_os" = iOS; then
2973         AC_MSG_ERROR([Presumly can't disable DB connectivity on iOS.])
2974     fi
2975     disable_database_connectivity_dependencies
2978 if test -z "$enable_extensions"; then
2979     # For iOS and Android Viewer, disable extensions unless specifically overridden with --enable-extensions.
2980     if test $_os != iOS && test $_os != Android -o "$ENABLE_ANDROID_LOK" = TRUE ; then
2981         enable_extensions=yes
2982     fi
2985 if test "$enable_extensions" = yes; then
2986     BUILD_TYPE="$BUILD_TYPE EXTENSIONS"
2987     AC_DEFINE(HAVE_FEATURE_EXTENSIONS)
2988 else
2989     enable_extension_integration=no
2990     enable_extension_update=no
2993 if test -z "$enable_scripting"; then
2994     # Disable scripting for iOS unless specifically overridden
2995     # with --enable-scripting.
2996     if test $_os != iOS -o $_os = Emscripten; then
2997         enable_scripting=yes
2998     fi
3001 DISABLE_SCRIPTING=''
3002 if test "$enable_scripting" = yes; then
3003     BUILD_TYPE="$BUILD_TYPE SCRIPTING"
3004     AC_DEFINE(HAVE_FEATURE_SCRIPTING)
3005 else
3006     DISABLE_SCRIPTING='TRUE'
3007     SCPDEFS="$SCPDEFS -DDISABLE_SCRIPTING"
3010 if test $_os = iOS -o $_os = Android -o $_os = Emscripten; then
3011     # Disable dynamic_loading always for iOS and Android
3012     enable_dynamic_loading=no
3013 elif test -z "$enable_dynamic_loading"; then
3014     # Otherwise enable it unless specifically disabled
3015     enable_dynamic_loading=yes
3018 DISABLE_DYNLOADING=''
3019 if test "$enable_dynamic_loading" = yes; then
3020     BUILD_TYPE="$BUILD_TYPE DYNLOADING"
3021 else
3022     DISABLE_DYNLOADING='TRUE'
3024 AC_SUBST(DISABLE_DYNLOADING)
3026 # remember SYSBASE value
3027 AC_SUBST(SYSBASE)
3029 dnl ===================================================================
3030 dnl  Sort out various gallery compilation options
3031 dnl ===================================================================
3032 WITH_GALLERY_BUILD=TRUE
3033 AC_MSG_CHECKING([how to build and package galleries])
3034 if test -n "${with_galleries}"; then
3035     if test "$with_galleries" = "build"; then
3036         if test "$enable_database_connectivity" = no; then
3037             AC_MSG_ERROR([DB connectivity is needed for gengal / svx])
3038         fi
3039         AC_MSG_RESULT([build from source images internally])
3040     elif test "$with_galleries" = "no"; then
3041         WITH_GALLERY_BUILD=
3042         AC_MSG_RESULT([disable non-internal gallery build])
3043     else
3044         AC_MSG_ERROR([unknown value --with-galleries=$with_galleries])
3045     fi
3046 else
3047     if test $_os != iOS -a $_os != Android; then
3048         AC_MSG_RESULT([internal src images for desktop])
3049     else
3050         WITH_GALLERY_BUILD=
3051         AC_MSG_RESULT([disable src image build])
3052     fi
3054 AC_SUBST(WITH_GALLERY_BUILD)
3056 dnl ===================================================================
3057 dnl  Checks if ccache is available
3058 dnl ===================================================================
3059 CCACHE_DEPEND_MODE=
3060 if test "$enable_ccache" = "no"; then
3061     CCACHE=""
3062 elif test -n "$enable_ccache" -o \( "$enable_ccache" = "" -a "$enable_icecream" != "yes" \); then
3063     case "%$CC%$CXX%" in
3064     # If $CC and/or $CXX already contain "ccache" (possibly suffixed with some version number etc),
3065     # assume that's good then
3066     *%ccache[[-_' ']]*|*/ccache[[-_' ']]*)
3067         AC_MSG_NOTICE([ccache seems to be included in a pre-defined CC and/or CXX])
3068         CCACHE_DEPEND_MODE=1
3069         ;;
3070     *)
3071         # try to use our own ccache if it is available and CCACHE was not already defined
3072         if test -z "$CCACHE"; then
3073             if test "$_os" = "WINNT"; then
3074                 ccache_ext=.exe # e.g. openssl build needs ccache.exe, not just ccache
3075             fi
3076             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/ccache$ccache_ext" ; then
3077                 CCACHE="$LODE_HOME/opt/bin/ccache$ccache_ext"
3078             elif test -x "/opt/lo/bin/ccache$ccache_ext"; then
3079                 CCACHE="/opt/lo/bin/ccache$ccache_ext"
3080             fi
3081         fi
3082         AC_PATH_PROG([CCACHE],[ccache],[not found])
3083         if test "$CCACHE" != "not found" -a "$_os" = "WINNT"; then
3084             CCACHE=`win_short_path_for_make "$CCACHE"`
3085             # check that it has MSVC support (it should recognize it in CCACHE_COMPILERTYPE)
3086             rm -f conftest.txt
3087             AC_MSG_CHECKING([whether $CCACHE has MSVC support])
3088             CCACHE_COMPILERTYPE=cl CCACHE_LOGFILE=conftest.txt $CCACHE echo >/dev/null 2>/dev/null
3089             if grep -q 'Config: (environment) compiler_type = cl' conftest.txt; then
3090                 AC_MSG_RESULT(yes)
3091             else
3092                 AC_MSG_RESULT(no)
3093                 CCACHE="not found"
3094             fi
3095             rm -f conftest.txt
3096         fi
3097         if test "$CCACHE" = "not found" -a "$_os" = "WINNT"; then
3098             # on windows/VC perhaps sccache is around?
3099             case "%$CC%$CXX%" in
3100             # If $CC and/or $CXX already contain "sccache" (possibly suffixed with some version number etc),
3101             # assume that's good then
3102             *%sccache[[-_' ']]*|*/sccache[[-_' ']]*)
3103                 AC_MSG_NOTICE([sccache seems to be included in a pre-defined CC and/or CXX])
3104                 CCACHE_DEPEND_MODE=1
3105                 SCCACHE=1
3106                 ;;
3107             *)
3108                 # for sharing code below, reuse CCACHE env var
3109                 AC_PATH_PROG([CCACHE],[sccache],[not found])
3110                 if test "$CCACHE" != "not found"; then
3111                     CCACHE=`win_short_path_for_make "$CCACHE"`
3112                     SCCACHE=1
3113                     CCACHE_DEPEND_MODE=1
3114                 fi
3115                 ;;
3116             esac
3117         fi
3118         if test "$CCACHE" = "not found"; then
3119             CCACHE=""
3120         fi
3121         if test -n "$CCACHE" -a -z "$SCCACHE"; then
3122             CCACHE_DEPEND_MODE=1
3123             # Need to check for ccache version: otherwise prevents
3124             # caching of the results (like "-x objective-c++" for Mac)
3125             if test $_os = Darwin -o $_os = iOS; then
3126                 # Check ccache version
3127                 AC_MSG_CHECKING([whether version of ccache is suitable])
3128                 CCACHE_VERSION=`"$CCACHE" -V | "$AWK" '/^ccache version/{print $3}'`
3129                 CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
3130                 if test "$CCACHE_VERSION" = "2.4_OOo" -o "$CCACHE_NUMVER" -ge "030100"; then
3131                     AC_MSG_RESULT([yes, $CCACHE_VERSION])
3132                 else
3133                     AC_MSG_RESULT([no, $CCACHE_VERSION])
3134                     CCACHE=""
3135                     CCACHE_DEPEND_MODE=
3136                 fi
3137             fi
3138         fi
3139         ;;
3140     esac
3141 else
3142     CCACHE=""
3144 if test "$enable_ccache" = "nodepend"; then
3145     CCACHE_DEPEND_MODE=""
3147 AC_SUBST(CCACHE_DEPEND_MODE)
3149 # sccache defaults are good enough
3150 if test "$CCACHE" != "" -a -z "$SCCACHE"; then
3151     # e.g. (/home/rene/.config/ccache/ccache.conf) max_size = 20.0G
3152     # -p works with both 4.2 and 4.4
3153     ccache_size_msg=$([ccache -p | $AWK /max_size/'{ print $4 }' | sed -e 's/\.[0-9]*//'])
3154     ccache_size=$(echo "$ccache_size_msg" | grep "G" | sed -e 's/G.*$//')
3155     if test "$ccache_size" = ""; then
3156         ccache_size=$(echo "$ccache_size_msg" | grep "M" | sed -e 's/\ M.*$//')
3157         if test "$ccache_size" = ""; then
3158             ccache_size=0
3159         fi
3160         # we could not determine the size or it was less than 1GB -> disable auto-ccache
3161         if test $ccache_size -lt 1024; then
3162             CCACHE=""
3163             AC_MSG_WARN([ccache's cache size is less than 1GB using it is counter-productive: Disabling auto-ccache detection])
3164             add_warning "ccache's cache size is less than 1GB using it is counter-productive: auto-ccache detection disabled"
3165         else
3166             # warn that ccache may be too small for debug build
3167             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3168             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3169         fi
3170     else
3171         if test $ccache_size -lt 5; then
3172             #warn that ccache may be too small for debug build
3173             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3174             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3175         fi
3176     fi
3179 ENABLE_Z7_DEBUG=
3180 if test "$enable_z7_debug" != no; then
3181     if test "$enable_z7_debug" = yes -o -n "$CCACHE"; then
3182         ENABLE_Z7_DEBUG=TRUE
3183     fi
3184 else
3185     AC_MSG_WARN([ccache will not work with --disable-z7-debug])
3186     add_warning "ccache will not work with --disable-z7-debug"
3188 AC_SUBST(ENABLE_Z7_DEBUG)
3190 dnl ===================================================================
3191 dnl  Checks for C compiler,
3192 dnl  The check for the C++ compiler is later on.
3193 dnl ===================================================================
3194 if test "$_os" != "WINNT"; then
3195     GCC_HOME_SET="true"
3196     AC_MSG_CHECKING([gcc home])
3197     if test -z "$with_gcc_home"; then
3198         if test "$enable_icecream" = "yes"; then
3199             if test -d "/usr/lib/icecc/bin"; then
3200                 GCC_HOME="/usr/lib/icecc/"
3201             elif test -d "/usr/libexec/icecc/bin"; then
3202                 GCC_HOME="/usr/libexec/icecc/"
3203             elif test -d "/opt/icecream/bin"; then
3204                 GCC_HOME="/opt/icecream/"
3205             else
3206                 AC_MSG_ERROR([Could not figure out the location of icecream GCC wrappers, manually use --with-gcc-home])
3208             fi
3209         else
3210             GCC_HOME=`which gcc | $SED -e s,/bin/gcc,,`
3211             GCC_HOME_SET="false"
3212         fi
3213     else
3214         GCC_HOME="$with_gcc_home"
3215     fi
3216     AC_MSG_RESULT($GCC_HOME)
3217     AC_SUBST(GCC_HOME)
3219     if test "$GCC_HOME_SET" = "true"; then
3220         if test -z "$CC"; then
3221             CC="$GCC_HOME/bin/gcc"
3222             CC_BASE="gcc"
3223         fi
3224         if test -z "$CXX"; then
3225             CXX="$GCC_HOME/bin/g++"
3226             CXX_BASE="g++"
3227         fi
3228     fi
3231 COMPATH=`dirname "$CC"`
3232 if test "$COMPATH" = "."; then
3233     AC_PATH_PROGS(COMPATH, $CC)
3234     dnl double square bracket to get single because of M4 quote...
3235     COMPATH=`echo $COMPATH | $SED "s@/[[^/:]]*\\\$@@"`
3237 COMPATH=`echo $COMPATH | $SED "s@/[[Bb]][[Ii]][[Nn]]\\\$@@"`
3239 dnl ===================================================================
3240 dnl Java support
3241 dnl ===================================================================
3242 AC_MSG_CHECKING([whether to build with Java support])
3243 if test "$with_java" != "no"; then
3244     if test "$DISABLE_SCRIPTING" = TRUE; then
3245         AC_MSG_RESULT([no, overridden by --disable-scripting])
3246         ENABLE_JAVA=""
3247         with_java=no
3248     else
3249         AC_MSG_RESULT([yes])
3250         ENABLE_JAVA="TRUE"
3251         AC_DEFINE(HAVE_FEATURE_JAVA)
3252     fi
3253 else
3254     AC_MSG_RESULT([no])
3255     ENABLE_JAVA=""
3258 AC_SUBST(ENABLE_JAVA)
3260 dnl ENABLE_JAVA="TRUE" if we want there to be *run-time* (and build-time) support for Java
3262 dnl ENABLE_JAVA="" indicate no Java support at all
3264 dnl ===================================================================
3265 dnl Check macOS SDK and compiler
3266 dnl ===================================================================
3268 if test $_os = Darwin; then
3270     # The SDK in the currently selected Xcode should be found.
3272     AC_MSG_CHECKING([what macOS SDK to use])
3273     for macosx_sdk in 12.3 12.1 12.0 11.3 11.1 11.0 10.15 10.14 10.13; do
3274         MACOSX_SDK_PATH=`xcrun --sdk macosx${macosx_sdk} --show-sdk-path 2> /dev/null`
3275         if test -d "$MACOSX_SDK_PATH"; then
3276             break
3277         else
3278             MACOSX_SDK_PATH="`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${macosx_sdk}.sdk"
3279             if test -d "$MACOSX_SDK_PATH"; then
3280                 break
3281             fi
3282         fi
3283     done
3284     if test ! -d "$MACOSX_SDK_PATH"; then
3285         AC_MSG_ERROR([Could not find an appropriate macOS SDK])
3286     fi
3288     AC_MSG_RESULT([macOS SDK $macosx_sdk at $MACOSX_SDK_PATH])
3290     case $macosx_sdk in
3291     10.13)
3292         MACOSX_SDK_VERSION=101300
3293         ;;
3294     10.14)
3295         MACOSX_SDK_VERSION=101400
3296         ;;
3297     10.15)
3298         MACOSX_SDK_VERSION=101500
3299         ;;
3300     11.0)
3301         MACOSX_SDK_VERSION=110000
3302         ;;
3303     11.1)
3304         MACOSX_SDK_VERSION=110100
3305         ;;
3306     11.3)
3307         MACOSX_SDK_VERSION=110300
3308         ;;
3309     12.0)
3310         MACOSX_SDK_VERSION=120000
3311         ;;
3312     12.1)
3313         MACOSX_SDK_VERSION=120100
3314         ;;
3315     12.3)
3316         MACOSX_SDK_VERSION=120300
3317         ;;
3318     *)
3319         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported])
3320         ;;
3321     esac
3323     if test "$host_cpu" = arm64 -a $MACOSX_SDK_VERSION -lt 110000; then
3324         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported for Apple Silicon])
3325     fi
3327     if test "$with_macosx_version_min_required" = "" ; then
3328         if test "$host_cpu" = x86_64; then
3329             with_macosx_version_min_required="10.12";
3330         else
3331             with_macosx_version_min_required="11.0";
3332         fi
3333     fi
3335     if test "$with_macosx_version_max_allowed" = "" ; then
3336         with_macosx_version_max_allowed="$macosx_sdk"
3337     fi
3339     # export this so that "xcrun" invocations later return matching values
3340     DEVELOPER_DIR="${MACOSX_SDK_PATH%/SDKs*}"
3341     DEVELOPER_DIR="${DEVELOPER_DIR%/Platforms*}"
3342     export DEVELOPER_DIR
3343     FRAMEWORKSHOME="$MACOSX_SDK_PATH/System/Library/Frameworks"
3344     MACOSX_DEPLOYMENT_TARGET="$with_macosx_version_min_required"
3346     AC_MSG_CHECKING([whether Xcode is new enough])
3347     my_xcode_ver1=$(xcrun xcodebuild -version | head -n 1)
3348     my_xcode_ver2=${my_xcode_ver1#Xcode }
3349     my_xcode_ver3=$(printf %s "$my_xcode_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
3350     if test "$my_xcode_ver3" -ge 1103; then
3351         AC_MSG_RESULT([yes ($my_xcode_ver2)])
3352     else
3353         AC_MSG_ERROR(["$my_xcode_ver1" is too old or unrecognized, must be at least Xcode 11.3])
3354     fi
3356     case "$with_macosx_version_min_required" in
3357     10.12)
3358         MAC_OS_X_VERSION_MIN_REQUIRED="101200"
3359         ;;
3360     10.13)
3361         MAC_OS_X_VERSION_MIN_REQUIRED="101300"
3362         ;;
3363     10.14)
3364         MAC_OS_X_VERSION_MIN_REQUIRED="101400"
3365         ;;
3366     10.15)
3367         MAC_OS_X_VERSION_MIN_REQUIRED="101500"
3368         ;;
3369     10.16)
3370         MAC_OS_X_VERSION_MIN_REQUIRED="101600"
3371         ;;
3372     11.0)
3373         MAC_OS_X_VERSION_MIN_REQUIRED="110000"
3374         ;;
3375     11.1)
3376         MAC_OS_X_VERSION_MIN_REQUIRED="110100"
3377         ;;
3378     11.3)
3379         MAC_OS_X_VERSION_MIN_REQUIRED="110300"
3380         ;;
3381     12.0)
3382         MAC_OS_X_VERSION_MIN_REQUIRED="120000"
3383         ;;
3384     12.1)
3385         MAC_OS_X_VERSION_MIN_REQUIRED="120100"
3386         ;;
3387     12.3)
3388         MAC_OS_X_VERSION_MIN_REQUIRED="120300"
3389         ;;
3390     *)
3391         AC_MSG_ERROR([with-macosx-version-min-required $with_macosx_version_min_required is not a supported value, supported values are 10.13--12.3])
3392         ;;
3393     esac
3395     LIBTOOL=/usr/bin/libtool
3396     INSTALL_NAME_TOOL=install_name_tool
3397     if test -z "$save_CC"; then
3398         stdlib=-stdlib=libc++
3400         AC_MSG_CHECKING([what C compiler to use])
3401         CC="`xcrun -find clang`"
3402         CC_BASE=`first_arg_basename "$CC"`
3403         if test "$host_cpu" = x86_64; then
3404             CC+=" -target x86_64-apple-macos"
3405         else
3406             CC+=" -target arm64-apple-macos"
3407         fi
3408         CC+=" -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3409         AC_MSG_RESULT([$CC])
3411         AC_MSG_CHECKING([what C++ compiler to use])
3412         CXX="`xcrun -find clang++`"
3413         CXX_BASE=`first_arg_basename "$CXX"`
3414         if test "$host_cpu" = x86_64; then
3415             CXX+=" -target x86_64-apple-macos"
3416         else
3417             CXX+=" -target arm64-apple-macos"
3418         fi
3419         CXX+=" $stdlib -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3420         AC_MSG_RESULT([$CXX])
3422         INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3423         AR=`xcrun -find ar`
3424         NM=`xcrun -find nm`
3425         STRIP=`xcrun -find strip`
3426         LIBTOOL=`xcrun -find libtool`
3427         RANLIB=`xcrun -find ranlib`
3428     fi
3430     case "$with_macosx_version_max_allowed" in
3431     10.12)
3432         MAC_OS_X_VERSION_MAX_ALLOWED="101200"
3433         ;;
3434     10.13)
3435         MAC_OS_X_VERSION_MAX_ALLOWED="101300"
3436         ;;
3437     10.14)
3438         MAC_OS_X_VERSION_MAX_ALLOWED="101400"
3439         ;;
3440     10.15)
3441         MAC_OS_X_VERSION_MAX_ALLOWED="101500"
3442         ;;
3443     11.0)
3444         MAC_OS_X_VERSION_MAX_ALLOWED="110000"
3445         ;;
3446     11.1)
3447         MAC_OS_X_VERSION_MAX_ALLOWED="110100"
3448         ;;
3449     11.3)
3450         MAC_OS_X_VERSION_MAX_ALLOWED="110300"
3451         ;;
3452     12.0)
3453         MAC_OS_X_VERSION_MAX_ALLOWED="120000"
3454         ;;
3455     12.1)
3456         MAC_OS_X_VERSION_MAX_ALLOWED="120100"
3457         ;;
3458     12.3)
3459         MAC_OS_X_VERSION_MAX_ALLOWED="120300"
3460         ;;
3461     *)
3462         AC_MSG_ERROR([with-macosx-version-max-allowed $with_macosx_version_max_allowed is not a supported value, supported values are 10.12--12.3])
3463         ;;
3464     esac
3466     AC_MSG_CHECKING([that macosx-version-min-required is coherent with macosx-version-max-allowed])
3467     if test $MAC_OS_X_VERSION_MIN_REQUIRED -gt $MAC_OS_X_VERSION_MAX_ALLOWED; then
3468         AC_MSG_ERROR([the version minimum required, $MAC_OS_X_VERSION_MIN_REQUIRED, must be <= the version maximum allowed, $MAC_OS_X_VERSION_MAX_ALLOWED])
3469     else
3470         AC_MSG_RESULT([ok])
3471     fi
3473     AC_MSG_CHECKING([that macosx-version-max-allowed is coherent with macos-with-sdk])
3474     if test $MAC_OS_X_VERSION_MAX_ALLOWED -gt $MACOSX_SDK_VERSION; then
3475         AC_MSG_ERROR([the version maximum allowed cannot be greater than the sdk level])
3476     else
3477         AC_MSG_RESULT([ok])
3478     fi
3479     AC_MSG_NOTICE([MAC_OS_X_VERSION_MIN_REQUIRED=$MAC_OS_X_VERSION_MIN_REQUIRED])
3480     AC_MSG_NOTICE([MAC_OS_X_VERSION_MAX_ALLOWED=$MAC_OS_X_VERSION_MAX_ALLOWED])
3482     AC_MSG_CHECKING([whether to do code signing])
3484     if test "$enable_macosx_code_signing" = yes; then
3485         # By default use the first suitable certificate (?).
3487         # http://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3488         # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3489         # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3490         # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3491         # "Developer ID Application" one.
3493         identity=`security find-identity -p codesigning -v 2>/dev/null | grep 'Developer ID Application:' | $AWK '{print $2}' |head -1`
3494         if test -n "$identity"; then
3495             MACOSX_CODESIGNING_IDENTITY=$identity
3496             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3497             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3498         else
3499             AC_MSG_ERROR([cannot determine identity to use])
3500         fi
3501     elif test -n "$enable_macosx_code_signing" -a "$enable_macosx_code_signing" != no ; then
3502         MACOSX_CODESIGNING_IDENTITY=$enable_macosx_code_signing
3503         pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3504         AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3505     else
3506         AC_MSG_RESULT([no])
3507     fi
3509     AC_MSG_CHECKING([whether to create a Mac App Store package])
3511     if test -z "$enable_macosx_package_signing" || test "$enable_macosx_package_signing" == no; then
3512         AC_MSG_RESULT([no])
3513     elif test -z "$MACOSX_CODESIGNING_IDENTITY"; then
3514         AC_MSG_ERROR([You forgot --enable-macosx-code-signing])
3515     elif test "$enable_macosx_package_signing" = yes; then
3516         # By default use the first suitable certificate.
3517         # It should be a "3rd Party Mac Developer Installer" one
3519         identity=`security find-identity -v 2>/dev/null | grep '3rd Party Mac Developer Installer:' | awk '{print $2}' |head -1`
3520         if test -n "$identity"; then
3521             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3522             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3523             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3524         else
3525             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3526         fi
3527     else
3528         MACOSX_PACKAGE_SIGNING_IDENTITY=$enable_macosx_package_signing
3529         pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3530         AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3531     fi
3533     if test -n "$MACOSX_CODESIGNING_IDENTITY" -a -n "$MACOSX_PACKAGE_SIGNING_IDENTITY" -a "$MACOSX_CODESIGNING_IDENTITY" = "$MACOSX_PACKAGE_SIGNING_IDENTITY"; then
3534         AC_MSG_ERROR([You should not use the same identity for code and package signing])
3535     fi
3537     AC_MSG_CHECKING([whether to sandbox the application])
3539     if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then
3540         AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java])
3541     elif test "$enable_macosx_sandbox" = yes; then
3542         ENABLE_MACOSX_SANDBOX=TRUE
3543         AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX)
3544         AC_MSG_RESULT([yes])
3545     else
3546         AC_MSG_RESULT([no])
3547     fi
3549     AC_MSG_CHECKING([what macOS app bundle identifier to use])
3550     MACOSX_BUNDLE_IDENTIFIER=$with_macosx_bundle_identifier
3551     AC_MSG_RESULT([$MACOSX_BUNDLE_IDENTIFIER])
3553 AC_SUBST(MACOSX_SDK_PATH)
3554 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3555 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3556 AC_SUBST(MAC_OS_X_VERSION_MAX_ALLOWED)
3557 AC_SUBST(INSTALL_NAME_TOOL)
3558 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3559 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3560 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3561 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3562 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3564 dnl ===================================================================
3565 dnl Check iOS SDK and compiler
3566 dnl ===================================================================
3568 if test $_os = iOS; then
3569     AC_MSG_CHECKING([what iOS SDK to use])
3570     current_sdk_ver=15.0
3571     older_sdk_vers="14.5"
3572     if test "$enable_ios_simulator" = "yes"; then
3573         platform=iPhoneSimulator
3574         versionmin=-mios-simulator-version-min=13.6
3575     else
3576         platform=iPhoneOS
3577         versionmin=-miphoneos-version-min=13.6
3578     fi
3579     xcode_developer=`xcode-select -print-path`
3581     for sdkver in $current_sdk_ver $older_sdk_vers; do
3582         t=$xcode_developer/Platforms/$platform.platform/Developer/SDKs/$platform$sdkver.sdk
3583         if test -d $t; then
3584             sysroot=$t
3585             break
3586         fi
3587     done
3589     if test -z "$sysroot"; then
3590         AC_MSG_ERROR([Could not find iOS SDK, expected something like $xcode_developer/Platforms/$platform.platform/Developer/SDKs/${platform}${current_sdk_ver}.sdk])
3591     fi
3593     AC_MSG_RESULT($sysroot)
3595     stdlib="-stdlib=libc++"
3597     AC_MSG_CHECKING([what C compiler to use])
3598     CC="`xcrun -find clang`"
3599     CC_BASE=`first_arg_basename "$CC"`
3600     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3601     AC_MSG_RESULT([$CC])
3603     AC_MSG_CHECKING([what C++ compiler to use])
3604     CXX="`xcrun -find clang++`"
3605     CXX_BASE=`first_arg_basename "$CXX"`
3606     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3607     AC_MSG_RESULT([$CXX])
3609     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3610     AR=`xcrun -find ar`
3611     NM=`xcrun -find nm`
3612     STRIP=`xcrun -find strip`
3613     LIBTOOL=`xcrun -find libtool`
3614     RANLIB=`xcrun -find ranlib`
3617 AC_MSG_CHECKING([whether to treat the installation as read-only])
3619 if test $_os = Darwin; then
3620     enable_readonly_installset=yes
3621 elif test "$enable_extensions" != yes; then
3622     enable_readonly_installset=yes
3624 if test "$enable_readonly_installset" = yes; then
3625     AC_MSG_RESULT([yes])
3626     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3627 else
3628     AC_MSG_RESULT([no])
3631 dnl ===================================================================
3632 dnl Structure of install set
3633 dnl ===================================================================
3635 if test $_os = Darwin; then
3636     LIBO_BIN_FOLDER=MacOS
3637     LIBO_ETC_FOLDER=Resources
3638     LIBO_LIBEXEC_FOLDER=MacOS
3639     LIBO_LIB_FOLDER=Frameworks
3640     LIBO_LIB_PYUNO_FOLDER=Resources
3641     LIBO_SHARE_FOLDER=Resources
3642     LIBO_SHARE_HELP_FOLDER=Resources/help
3643     LIBO_SHARE_JAVA_FOLDER=Resources/java
3644     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3645     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3646     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3647     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3648     LIBO_URE_BIN_FOLDER=MacOS
3649     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3650     LIBO_URE_LIB_FOLDER=Frameworks
3651     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3652     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3653 elif test $_os = WINNT; then
3654     LIBO_BIN_FOLDER=program
3655     LIBO_ETC_FOLDER=program
3656     LIBO_LIBEXEC_FOLDER=program
3657     LIBO_LIB_FOLDER=program
3658     LIBO_LIB_PYUNO_FOLDER=program
3659     LIBO_SHARE_FOLDER=share
3660     LIBO_SHARE_HELP_FOLDER=help
3661     LIBO_SHARE_JAVA_FOLDER=program/classes
3662     LIBO_SHARE_PRESETS_FOLDER=presets
3663     LIBO_SHARE_READMES_FOLDER=readmes
3664     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3665     LIBO_SHARE_SHELL_FOLDER=program/shell
3666     LIBO_URE_BIN_FOLDER=program
3667     LIBO_URE_ETC_FOLDER=program
3668     LIBO_URE_LIB_FOLDER=program
3669     LIBO_URE_MISC_FOLDER=program
3670     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3671 else
3672     LIBO_BIN_FOLDER=program
3673     LIBO_ETC_FOLDER=program
3674     LIBO_LIBEXEC_FOLDER=program
3675     LIBO_LIB_FOLDER=program
3676     LIBO_LIB_PYUNO_FOLDER=program
3677     LIBO_SHARE_FOLDER=share
3678     LIBO_SHARE_HELP_FOLDER=help
3679     LIBO_SHARE_JAVA_FOLDER=program/classes
3680     LIBO_SHARE_PRESETS_FOLDER=presets
3681     LIBO_SHARE_READMES_FOLDER=readmes
3682     if test "$enable_fuzzers" != yes; then
3683         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3684     else
3685         LIBO_SHARE_RESOURCE_FOLDER=resource
3686     fi
3687     LIBO_SHARE_SHELL_FOLDER=program/shell
3688     LIBO_URE_BIN_FOLDER=program
3689     LIBO_URE_ETC_FOLDER=program
3690     LIBO_URE_LIB_FOLDER=program
3691     LIBO_URE_MISC_FOLDER=program
3692     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3694 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3695 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3696 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3697 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3698 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3699 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3700 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3701 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3702 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3703 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3704 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3705 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3706 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3707 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3708 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3709 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3711 # Not all of them needed in config_host.mk, add more if need arises
3712 AC_SUBST(LIBO_BIN_FOLDER)
3713 AC_SUBST(LIBO_ETC_FOLDER)
3714 AC_SUBST(LIBO_LIB_FOLDER)
3715 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3716 AC_SUBST(LIBO_SHARE_FOLDER)
3717 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3718 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3719 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3720 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3721 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3722 AC_SUBST(LIBO_URE_BIN_FOLDER)
3723 AC_SUBST(LIBO_URE_ETC_FOLDER)
3724 AC_SUBST(LIBO_URE_LIB_FOLDER)
3725 AC_SUBST(LIBO_URE_MISC_FOLDER)
3726 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3728 dnl ===================================================================
3729 dnl Windows specific tests and stuff
3730 dnl ===================================================================
3732 reg_get_value()
3734     # Return value: $regvalue
3735     unset regvalue
3737     if test "$build_os" = "wsl"; then
3738         regvalue=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --read-registry $1 "$2" 2>/dev/null)
3739         return
3740     fi
3742     local _regentry="/proc/registry${1}/${2}"
3743     if test -f "$_regentry"; then
3744         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3745         # Registry keys read via /proc/registry* are always \0 terminated!
3746         local _regvalue=$(tr -d '\0' < "$_regentry")
3747         if test $? -eq 0; then
3748             regvalue=$_regvalue
3749         fi
3750     fi
3753 # Get a value from the 32-bit side of the Registry
3754 reg_get_value_32()
3756     reg_get_value "32" "$1"
3759 # Get a value from the 64-bit side of the Registry
3760 reg_get_value_64()
3762     reg_get_value "64" "$1"
3765 case "$host_os" in
3766 cygwin*|wsl*)
3767     COM=MSC
3768     OS=WNT
3769     RTL_OS=Windows
3770     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3771         P_SEP=";"
3772     else
3773         P_SEP=:
3774     fi
3775     case "$host_cpu" in
3776     x86_64)
3777         CPUNAME=X86_64
3778         RTL_ARCH=X86_64
3779         PLATFORMID=windows_x86_64
3780         WINDOWS_X64=1
3781         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
3782         WIN_HOST_ARCH="x64"
3783         WIN_MULTI_ARCH="x86"
3784         WIN_HOST_BITS=64
3785         ;;
3786     i*86)
3787         CPUNAME=INTEL
3788         RTL_ARCH=x86
3789         PLATFORMID=windows_x86
3790         WIN_HOST_ARCH="x86"
3791         WIN_HOST_BITS=32
3792         WIN_OTHER_ARCH="x64"
3793         ;;
3794     aarch64)
3795         CPUNAME=AARCH64
3796         RTL_ARCH=AARCH64
3797         PLATFORMID=windows_aarch64
3798         WINDOWS_X64=1
3799         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
3800         WIN_HOST_ARCH="arm64"
3801         WIN_HOST_BITS=64
3802         with_ucrt_dir=no
3803         ;;
3804     *)
3805         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
3806         ;;
3807     esac
3809     case "$build_cpu" in
3810     x86_64) WIN_BUILD_ARCH="x64" ;;
3811     i*86) WIN_BUILD_ARCH="x86" ;;
3812     aarch64) WIN_BUILD_ARCH="arm64" ;;
3813     *)
3814         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
3815         ;;
3816     esac
3818     SCPDEFS="$SCPDEFS -D_MSC_VER"
3819     ;;
3820 esac
3822 # multi-arch is an arch, which can execute on the host (x86 on x64), while
3823 # other-arch won't, but wouldn't break the build (x64 on x86).
3824 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
3825     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
3829 if test "$_os" = "iOS" -o "$build_cpu" != "$host_cpu"; then
3830     # To allow building Windows multi-arch releases without cross-tooling
3831     if test -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH"; then
3832         cross_compiling="yes"
3833     fi
3836 ENABLE_WASM_STRIP=''
3837 if test "$cross_compiling" = "yes"; then
3838     export CROSS_COMPILING=TRUE
3839     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
3840         ENABLE_WASM_STRIP=TRUE
3841     fi
3842 else
3843     CROSS_COMPILING=
3844     BUILD_TYPE="$BUILD_TYPE NATIVE"
3846 AC_SUBST(CROSS_COMPILING)
3847 AC_SUBST(ENABLE_WASM_STRIP)
3849 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
3850 # NOTE: must _not_ be used for bundled external libraries!
3851 ISYSTEM=
3852 if test "$GCC" = "yes"; then
3853     AC_MSG_CHECKING( for -isystem )
3854     save_CFLAGS=$CFLAGS
3855     CFLAGS="$CFLAGS -isystem /usr/include -Werror"
3856     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
3857     CFLAGS=$save_CFLAGS
3858     if test -n "$ISYSTEM"; then
3859         AC_MSG_RESULT(yes)
3860     else
3861         AC_MSG_RESULT(no)
3862     fi
3864 if test -z "$ISYSTEM"; then
3865     # fall back to using -I
3866     ISYSTEM=-I
3868 AC_SUBST(ISYSTEM)
3870 dnl ===================================================================
3871 dnl  Check which Visual Studio compiler is used
3872 dnl ===================================================================
3874 map_vs_year_to_version()
3876     # Return value: $vsversion
3878     unset vsversion
3880     case $1 in
3881     2019)
3882         vsversion=16;;
3883     2022)
3884         vsversion=17;;
3885     *)
3886         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
3887     esac
3890 vs_versions_to_check()
3892     # Args: $1 (optional) : versions to check, in the order of preference
3893     # Return value: $vsversions
3895     unset vsversions
3897     if test -n "$1"; then
3898         map_vs_year_to_version "$1"
3899         vsversions=$vsversion
3900     else
3901         # Default version is 2019
3902         vsversions="16"
3903     fi
3906 win_get_env_from_vsvars32bat()
3908     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
3909     # Also seems to be located in another directory under the same name: vsvars32.bat
3910     # https://github.com/bazelbuild/bazel/blob/master/src/main/native/build_windows_jni.sh#L56-L57
3911     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$(cygpath -w $VC_PRODUCT_DIR)" > $WRAPPERBATCHFILEPATH
3912     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
3913     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
3914     local result
3915     if test "$build_os" = "wsl"; then
3916         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
3917     else
3918         chmod +x $WRAPPERBATCHFILEPATH
3919         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
3920     fi
3921     rm -f $WRAPPERBATCHFILEPATH
3922     printf '%s' "$result"
3925 find_ucrt()
3927     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/InstallationFolder"
3928     if test -n "$regvalue"; then
3929         PathFormat "$regvalue"
3930         UCRTSDKDIR=$formatted_path_unix
3931         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion"
3932         UCRTVERSION=$regvalue
3933         # Rest if not exist
3934         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
3935           UCRTSDKDIR=
3936         fi
3937     fi
3938     if test -z "$UCRTSDKDIR"; then
3939         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
3940         ide_env_file="${ide_env_dir}VsDevCmd.bat"
3941         if test -f "$ide_env_file"; then
3942             PathFormat "$(win_get_env_from_vsvars32bat UniversalCRTSdkDir)"
3943             UCRTSDKDIR=$formatted_path
3944             UCRTVERSION=$(win_get_env_from_vsvars32bat UCRTVersion)
3945             dnl Hack needed at least by tml:
3946             if test "$UCRTVERSION" = 10.0.15063.0 \
3947                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
3948                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
3949             then
3950                 UCRTVERSION=10.0.14393.0
3951             fi
3952         else
3953           AC_MSG_ERROR([No UCRT found])
3954         fi
3955     fi
3958 find_msvc()
3960     # Find Visual C++
3961     # Args: $1 (optional) : The VS version year
3962     # Return values: $vctest, $vcyear, $vctoolset, $vcnumwithdot, $vcbuildnumber
3964     unset vctest vctoolset vcnumwithdot vcbuildnumber
3966     vs_versions_to_check "$1"
3967     if test "$build_os" = wsl; then
3968         vswhere="$PROGRAMFILESX86"
3969     else
3970         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
3971     fi
3972     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
3973     PathFormat "$vswhere"
3974     vswhere=$formatted_path_unix
3975     for ver in $vsversions; do
3976         vswhereoutput=`$vswhere -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3977         if test -z "$vswhereoutput"; then
3978             vswhereoutput=`$vswhere -prerelease -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3979         fi
3980         # Fall back to all MS products (this includes VC++ Build Tools)
3981         if ! test -n "$vswhereoutput"; then
3982             AC_MSG_CHECKING([VC++ Build Tools and similar])
3983             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3984         fi
3985         if test -n "$vswhereoutput"; then
3986             PathFormat "$vswhereoutput"
3987             vctest=$formatted_path_unix
3988             break
3989         fi
3990     done
3992     if test -n "$vctest"; then
3993         vcnumwithdot="$ver.0"
3994         case "$vcnumwithdot" in
3995         16.0)
3996             vcyear=2019
3997             vctoolset=v142
3998             ;;
3999         17.0)
4000             vcyear=2022
4001             vctoolset=v143
4002             ;;
4003         esac
4004         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
4006     fi
4009 test_cl_exe()
4011     AC_MSG_CHECKING([$1 compiler])
4013     CL_EXE_PATH="$2/cl.exe"
4015     if test ! -f "$CL_EXE_PATH"; then
4016         if test "$1" = "multi-arch"; then
4017             AC_MSG_WARN([no compiler (cl.exe) in $2])
4018             return 1
4019         else
4020             AC_MSG_ERROR([no compiler (cl.exe) in $2])
4021         fi
4022     fi
4024     dnl ===========================================================
4025     dnl  Check for the corresponding mspdb*.dll
4026     dnl ===========================================================
4028     # MSVC 15.0 has libraries from 14.0?
4029     mspdbnum="140"
4031     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
4032         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
4033     fi
4035     # The compiles has to find its shared libraries
4036     OLD_PATH="$PATH"
4037     TEMP_PATH=`cygpath -d "$2"`
4038     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
4040     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
4041         AC_MSG_ERROR([no compiler (cl.exe) in $2])
4042     fi
4044     PATH="$OLD_PATH"
4046     AC_MSG_RESULT([$CL_EXE_PATH])
4049 SOLARINC=
4050 MSBUILD_PATH=
4051 DEVENV=
4052 if test "$_os" = "WINNT"; then
4053     AC_MSG_CHECKING([Visual C++])
4054     find_msvc "$with_visual_studio"
4055     if test -z "$vctest"; then
4056         if test -n "$with_visual_studio"; then
4057             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
4058         else
4059             AC_MSG_ERROR([no Visual Studio installation found])
4060         fi
4061     fi
4062     AC_MSG_RESULT([])
4064     VC_PRODUCT_DIR="$vctest/VC"
4065     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
4067     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
4068     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
4069         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
4070         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
4071         if test $? -ne 0; then
4072             WIN_MULTI_ARCH=""
4073             WIN_OTHER_ARCH=""
4074         fi
4075     fi
4077     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
4078         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
4079         test_cl_exe "build" "$MSVC_BUILD_PATH"
4080     fi
4082     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
4083         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
4084         test_cl_exe "host" "$MSVC_HOST_PATH"
4085     else
4086         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
4087     fi
4089     AC_MSG_CHECKING([for short pathname of VC product directory])
4090     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
4091     AC_MSG_RESULT([$VC_PRODUCT_DIR])
4093     UCRTSDKDIR=
4094     UCRTVERSION=
4096     AC_MSG_CHECKING([for UCRT location])
4097     find_ucrt
4098     # find_ucrt errors out if it doesn't find it
4099     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
4100     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
4101     ucrtincpath_formatted=$formatted_path
4102     # SOLARINC is used for external modules and must be set too.
4103     # And no, it's not sufficient to set SOLARINC only, as configure
4104     # itself doesn't honour it.
4105     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
4106     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
4107     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
4108     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4110     AC_SUBST(UCRTSDKDIR)
4111     AC_SUBST(UCRTVERSION)
4113     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4114     # Find the proper version of MSBuild.exe to use based on the VS version
4115     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath
4116     if test -z "$regvalue" ; then
4117         if test "$WIN_BUILD_ARCH" != "x64"; then
4118             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4119         else
4120             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4121         fi
4122     fi
4123     if test -d "$regvalue" ; then
4124         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4125         AC_MSG_RESULT([$regvalue])
4126     else
4127         AC_MSG_ERROR([MSBuild.exe location not found])
4128     fi
4130     # Find the version of devenv.exe
4131     # MSVC 2017 devenv does not start properly from a DOS 8.3 path
4132     DEVENV=$(cygpath -lm "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe")
4133     DEVENV_unix=$(cygpath -u "$DEVENV")
4134     if test ! -e "$DEVENV_unix"; then
4135         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4136     fi
4138     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4139     dnl needed when building CLR code:
4140     if test -z "$MSVC_CXX"; then
4141         # This gives us a posix path with 8.3 filename restrictions
4142         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4143     fi
4145     if test -z "$CC"; then
4146         CC=$MSVC_CXX
4147         CC_BASE=`first_arg_basename "$CC"`
4148     fi
4149     if test -z "$CXX"; then
4150         CXX=$MSVC_CXX
4151         CXX_BASE=`first_arg_basename "$CXX"`
4152     fi
4154     if test -n "$CC"; then
4155         # Remove /cl.exe from CC case insensitive
4156         AC_MSG_NOTICE([found Visual C++ $vcyear])
4158         main_include_dir=`cygpath -d -m "$COMPATH/Include"`
4159         CPPFLAGS="$CPPFLAGS -I$main_include_dir"
4161         PathFormat "$COMPATH"
4162         COMPATH=`win_short_path_for_make "$formatted_path"`
4164         VCVER=$vcnumwithdot
4165         VCTOOLSET=$vctoolset
4167         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4168         # are always "better", we list them in reverse chronological order.
4170         case "$vcnumwithdot" in
4171         16.0 | 17.0)
4172             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4173             ;;
4174         esac
4176         # The expectation is that --with-windows-sdk should not need to be used
4177         if test -n "$with_windows_sdk"; then
4178             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4179             *" "$with_windows_sdk" "*)
4180                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4181                 ;;
4182             *)
4183                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4184                 ;;
4185             esac
4186         fi
4188         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4189         ac_objext=obj
4190         ac_exeext=exe
4192     else
4193         AC_MSG_ERROR([Visual C++ not found after all, huh])
4194     fi
4196     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4197     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4198         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4199         // between Visual Studio versions and _MSC_VER:
4200         #if _MSC_VER < 1925
4201         #error
4202         #endif
4203     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4205     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4206     # version of the Explorer extension (and maybe other small
4207     # bits, too) needed when installing a 32-bit LibreOffice on a
4208     # 64-bit OS. The 64-bit Explorer extension is a feature that
4209     # has been present since long in OOo. Don't confuse it with
4210     # building LibreOffice itself as 64-bit code.
4212     BUILD_X64=
4213     CXX_X64_BINARY=
4215     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4216         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4217         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4218              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4219         then
4220             BUILD_X64=TRUE
4221             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4222             AC_MSG_RESULT([found])
4223         else
4224             AC_MSG_RESULT([not found])
4225             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4226         fi
4227     elif test "$WIN_HOST_ARCH" = "x64"; then
4228         CXX_X64_BINARY=$CXX
4229     fi
4230     AC_SUBST(BUILD_X64)
4232     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4233     AC_SUBST(CXX_X64_BINARY)
4235     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4236     # needed to support TWAIN scan on both 32- and 64-bit systems
4238     case "$WIN_HOST_ARCH" in
4239     x64)
4240         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4241         if test -n "$CXX_X86_BINARY"; then
4242             BUILD_X86=TRUE
4243             AC_MSG_RESULT([preset])
4244         elif test -n "$WIN_MULTI_ARCH"; then
4245             BUILD_X86=TRUE
4246             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4247             CXX_X86_BINARY+=" /arch:SSE"
4248             AC_MSG_RESULT([found])
4249         else
4250             AC_MSG_RESULT([not found])
4251             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4252         fi
4253         ;;
4254     x86)
4255         BUILD_X86=TRUE
4256         CXX_X86_BINARY=$MSVC_CXX
4257         ;;
4258     esac
4259     AC_SUBST(BUILD_X86)
4260     AC_SUBST(CXX_X86_BINARY)
4262 AC_SUBST(VCVER)
4263 AC_SUBST(VCTOOLSET)
4264 AC_SUBST(DEVENV)
4265 AC_SUBST(MSVC_CXX)
4267 COM_IS_CLANG=
4268 AC_MSG_CHECKING([whether the compiler is actually Clang])
4269 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4270     #ifndef __clang__
4271     you lose
4272     #endif
4273     int foo=42;
4274     ]])],
4275     [AC_MSG_RESULT([yes])
4276      COM_IS_CLANG=TRUE],
4277     [AC_MSG_RESULT([no])])
4278 AC_SUBST(COM_IS_CLANG)
4280 CC_PLAIN=$CC
4281 CLANGVER=
4282 if test "$COM_IS_CLANG" = TRUE; then
4283     AC_MSG_CHECKING([whether Clang is new enough])
4284     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4285         #if !defined __apple_build_version__
4286         #error
4287         #endif
4288         ]])],
4289         [my_apple_clang=yes],[my_apple_clang=])
4290     if test "$my_apple_clang" = yes; then
4291         AC_MSG_RESULT([assumed yes (Apple Clang)])
4292     elif test "$_os" = Emscripten; then
4293         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4294     else
4295         if test "$_os" = WINNT; then
4296             dnl In which case, assume clang-cl:
4297             my_args="/EP /TC"
4298             dnl Filter out -FIIntrin.h, which needs to be explicitly stated for
4299             dnl clang-cl:
4300             CC_PLAIN=
4301             for i in $CC; do
4302                 case $i in
4303                 -FIIntrin.h)
4304                     ;;
4305                 *)
4306                     CC_PLAIN="$CC_PLAIN $i"
4307                     ;;
4308                 esac
4309             done
4310         else
4311             my_args="-E -P"
4312         fi
4313         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC_PLAIN $my_args - | sed 's/ //g'`
4314         CLANG_FULL_VERSION=`echo __clang_version__ | $CC_PLAIN $my_args -`
4315         CLANGVER=`echo $clang_version \
4316             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4317         if test "$CLANGVER" -ge 50002; then
4318             AC_MSG_RESULT([yes ($clang_version)])
4319         else
4320             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 5.0.2])
4321         fi
4322         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4323         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4324     fi
4327 SHOWINCLUDES_PREFIX=
4328 if test "$_os" = WINNT; then
4329     dnl We need to guess the prefix of the -showIncludes output, it can be
4330     dnl localized
4331     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4332     echo "#include <stdlib.h>" > conftest.c
4333     SHOWINCLUDES_PREFIX=`$CC_PLAIN $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4334         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4335     rm -f conftest.c conftest.obj
4336     if test -z "$SHOWINCLUDES_PREFIX"; then
4337         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4338     else
4339         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4340     fi
4342 AC_SUBST(SHOWINCLUDES_PREFIX)
4345 # prefix C with ccache if needed
4347 if test "$CCACHE" != ""; then
4348     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4350     AC_LANG_PUSH([C])
4351     save_CFLAGS=$CFLAGS
4352     CFLAGS="$CFLAGS --ccache-skip -O2"
4353     # msvc does not fail on unknown options, check stdout
4354     if test "$COM" = MSC; then
4355         CFLAGS="$CFLAGS -nologo"
4356     fi
4357     save_ac_c_werror_flag=$ac_c_werror_flag
4358     ac_c_werror_flag=yes
4359     dnl an empty program will do, we're checking the compiler flags
4360     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4361                       [use_ccache=yes], [use_ccache=no])
4362     CFLAGS=$save_CFLAGS
4363     ac_c_werror_flag=$save_ac_c_werror_flag
4364     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4365         AC_MSG_RESULT([yes])
4366     else
4367         CC="$CCACHE $CC"
4368         CC_BASE="ccache $CC_BASE"
4369         AC_MSG_RESULT([no])
4370     fi
4371     AC_LANG_POP([C])
4374 # ===================================================================
4375 # check various GCC options that Clang does not support now but maybe
4376 # will somewhen in the future, check them even for GCC, so that the
4377 # flags are set
4378 # ===================================================================
4380 HAVE_GCC_GGDB2=
4381 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4382     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4383     save_CFLAGS=$CFLAGS
4384     CFLAGS="$CFLAGS -Werror -ggdb2"
4385     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4386     CFLAGS=$save_CFLAGS
4387     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4388         AC_MSG_RESULT([yes])
4389     else
4390         AC_MSG_RESULT([no])
4391     fi
4393     if test "$host_cpu" = "m68k"; then
4394         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4395         save_CFLAGS=$CFLAGS
4396         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4397         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4398         CFLAGS=$save_CFLAGS
4399         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4400             AC_MSG_RESULT([yes])
4401         else
4402             AC_MSG_ERROR([no])
4403         fi
4404     fi
4406 AC_SUBST(HAVE_GCC_GGDB2)
4408 dnl ===================================================================
4409 dnl  Test the gcc version
4410 dnl ===================================================================
4411 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4412     AC_MSG_CHECKING([the GCC version])
4413     _gcc_version=`$CC -dumpfullversion`
4414     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4415         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4416     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4418     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4420     if test "$gcc_full_version" -lt 70000; then
4421         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 7.0.0])
4422     fi
4423 else
4424     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4425     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4426     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4427     # (which reports itself as GCC 4.2.1).
4428     GCC_VERSION=
4430 AC_SUBST(GCC_VERSION)
4432 dnl Set the ENABLE_DBGUTIL variable
4433 dnl ===================================================================
4434 AC_MSG_CHECKING([whether to build with additional debug utilities])
4435 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4436     ENABLE_DBGUTIL="TRUE"
4437     # this is an extra var so it can have different default on different MSVC
4438     # versions (in case there are version specific problems with it)
4439     MSVC_USE_DEBUG_RUNTIME="TRUE"
4441     AC_MSG_RESULT([yes])
4442     # cppunit and graphite expose STL in public headers
4443     if test "$with_system_cppunit" = "yes"; then
4444         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4445     else
4446         with_system_cppunit=no
4447     fi
4448     if test "$with_system_graphite" = "yes"; then
4449         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4450     else
4451         with_system_graphite=no
4452     fi
4453     if test "$with_system_orcus" = "yes"; then
4454         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4455     else
4456         with_system_orcus=no
4457     fi
4458     if test "$with_system_libcmis" = "yes"; then
4459         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4460     else
4461         with_system_libcmis=no
4462     fi
4463     if test "$with_system_hunspell" = "yes"; then
4464         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4465     else
4466         with_system_hunspell=no
4467     fi
4468     if test "$with_system_gpgmepp" = "yes"; then
4469         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4470     else
4471         with_system_gpgmepp=no
4472     fi
4473     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4474     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4475     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4476     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4477     # of those two is using the system variant:
4478     if test "$with_system_libnumbertext" = "yes"; then
4479         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4480     else
4481         with_system_libnumbertext=no
4482     fi
4483     if test "$with_system_libwps" = "yes"; then
4484         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4485     else
4486         with_system_libwps=no
4487     fi
4488 else
4489     ENABLE_DBGUTIL=""
4490     MSVC_USE_DEBUG_RUNTIME=""
4491     AC_MSG_RESULT([no])
4493 AC_SUBST(ENABLE_DBGUTIL)
4494 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4496 dnl Set the ENABLE_DEBUG variable.
4497 dnl ===================================================================
4498 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4499     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4501 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4502     if test -z "$libo_fuzzed_enable_debug"; then
4503         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4504     else
4505         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4506         enable_debug=yes
4507     fi
4510 AC_MSG_CHECKING([whether to do a debug build])
4511 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4512     ENABLE_DEBUG="TRUE"
4513     if test -n "$ENABLE_DBGUTIL" ; then
4514         AC_MSG_RESULT([yes (dbgutil)])
4515     else
4516         AC_MSG_RESULT([yes])
4517     fi
4518 else
4519     ENABLE_DEBUG=""
4520     AC_MSG_RESULT([no])
4522 AC_SUBST(ENABLE_DEBUG)
4524 dnl ===================================================================
4525 dnl Select the linker to use (gold/lld/ld.bfd).
4526 dnl This is done only after compiler checks (need to know if Clang is
4527 dnl used, for different defaults) and after checking if a debug build
4528 dnl is wanted (non-debug builds get the default linker if not explicitly
4529 dnl specified otherwise).
4530 dnl All checks for linker features/options should come after this.
4531 dnl ===================================================================
4532 check_use_ld()
4534     use_ld=-fuse-ld=${1%%:*}
4535     use_ld_path=${1#*:}
4536     if test "$use_ld_path" != "$1"; then
4537         use_ld="$use_ld --ld-path=$use_ld_path"
4538     fi
4539     use_ld_fail_if_error=$2
4540     use_ld_ok=
4541     AC_MSG_CHECKING([for $use_ld linker support])
4542     use_ld_ldflags_save="$LDFLAGS"
4543     LDFLAGS="$LDFLAGS $use_ld"
4544     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4545 #include <stdio.h>
4546         ],[
4547 printf ("hello world\n");
4548         ])], USE_LD=$use_ld, [])
4549     if test -n "$USE_LD"; then
4550         AC_MSG_RESULT( yes )
4551         use_ld_ok=yes
4552     else
4553         if test -n "$use_ld_fail_if_error"; then
4554             AC_MSG_ERROR( no )
4555         else
4556             AC_MSG_RESULT( no )
4557         fi
4558     fi
4559     if test -n "$use_ld_ok"; then
4560         dnl keep the value of LDFLAGS
4561         return 0
4562     fi
4563     LDFLAGS="$use_ld_ldflags_save"
4564     return 1
4566 USE_LD=
4567 if test "$enable_ld" != "no"; then
4568     if test "$GCC" = "yes"; then
4569         if test -n "$enable_ld"; then
4570             check_use_ld "$enable_ld" fail_if_error
4571         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4572             dnl non-debug builds default to the default linker
4573             true
4574         elif test -n "$COM_IS_CLANG"; then
4575             check_use_ld lld
4576             if test $? -ne 0; then
4577                 check_use_ld gold
4578             fi
4579         else
4580             # For gcc first try gold, new versions also support lld.
4581             check_use_ld gold
4582             if test $? -ne 0; then
4583                 check_use_ld lld
4584             fi
4585         fi
4586         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4587         rm conftest.out
4588         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD)')
4589         if test -z "$ld_used"; then
4590             ld_used="unknown"
4591         fi
4592         AC_MSG_CHECKING([for linker that is used])
4593         AC_MSG_RESULT([$ld_used])
4594         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4595             if echo "$ld_used" | grep -q "^GNU ld"; then
4596                 AC_MSG_WARN([The default GNU linker is slow, consider using the LLD or the GNU gold linker.])
4597                 add_warning "The default GNU linker is slow, consider using the LLD or the GNU gold linker."
4598             fi
4599         fi
4600     else
4601         if test "$enable_ld" = "yes"; then
4602             AC_MSG_ERROR([--enable-ld not supported])
4603         fi
4604     fi
4606 AC_SUBST(USE_LD)
4608 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4609 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4610     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4611     bsymbolic_functions_ldflags_save=$LDFLAGS
4612     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4613     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4614 #include <stdio.h>
4615         ],[
4616 printf ("hello world\n");
4617         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4618     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4619         AC_MSG_RESULT( found )
4620     else
4621         AC_MSG_RESULT( not found )
4622     fi
4623     LDFLAGS=$bsymbolic_functions_ldflags_save
4625 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4627 LD_GC_SECTIONS=
4628 if test "$GCC" = "yes"; then
4629     for flag in "--gc-sections" "-dead_strip"; do
4630         AC_MSG_CHECKING([for $flag linker support])
4631         ldflags_save=$LDFLAGS
4632         LDFLAGS="$LDFLAGS -Wl,$flag"
4633         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4634 #include <stdio.h>
4635             ],[
4636 printf ("hello world\n");
4637             ])],[
4638             LD_GC_SECTIONS="-Wl,$flag"
4639             AC_MSG_RESULT( found )
4640             ], [
4641             AC_MSG_RESULT( not found )
4642             ])
4643         LDFLAGS=$ldflags_save
4644         if test -n "$LD_GC_SECTIONS"; then
4645             break
4646         fi
4647     done
4649 AC_SUBST(LD_GC_SECTIONS)
4651 HAVE_GSPLIT_DWARF=
4652 if test "$enable_split_debug" != no; then
4653     use_split_debug=
4654     if test -n "$ENABLE_LTO"; then
4655         true # Inherently incompatible, since no debug info is created while compiling, GCC complains.
4656     elif test "$enable_split_debug" = yes; then
4657         use_split_debug=1
4658     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4659     elif test "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4660         use_split_debug=1
4661     fi
4662     if test -n "$use_split_debug"; then
4663         AC_MSG_CHECKING([whether $CC_BASE supports -gsplit-dwarf])
4664         save_CFLAGS=$CFLAGS
4665         CFLAGS="$CFLAGS -Werror -gsplit-dwarf"
4666         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_SPLIT_DWARF=TRUE ],[])
4667         CFLAGS=$save_CFLAGS
4668         if test "$HAVE_GCC_SPLIT_DWARF" = "TRUE"; then
4669             AC_MSG_RESULT([yes])
4670         else
4671             if test "$enable_split_debug" = yes; then
4672                 AC_MSG_ERROR([no])
4673             else
4674                 AC_MSG_RESULT([no])
4675             fi
4676         fi
4677     fi
4678     if test -z "$HAVE_GCC_SPLIT_DWARF" -a "$test_split_debug" = "yes" -a -n "$use_split_debug"; then
4679         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4680         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4681     fi
4683 AC_SUBST(HAVE_GCC_SPLIT_DWARF)
4685 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4686 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4687 save_CFLAGS=$CFLAGS
4688 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4689 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4690 CFLAGS=$save_CFLAGS
4691 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4692     AC_MSG_RESULT([yes])
4693 else
4694     AC_MSG_RESULT([no])
4696 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4698 ENABLE_GDB_INDEX=
4699 if test "$enable_gdb_index" != "no"; then
4700     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4701     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4702         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4703         save_CFLAGS=$CFLAGS
4704         CFLAGS="$CFLAGS -Werror -ggnu-pubnames"
4705         have_ggnu_pubnames=
4706         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4707         if test "$have_ggnu_pubnames" != "TRUE"; then
4708             if test "$enable_gdb_index" = "yes"; then
4709                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4710             else
4711                 AC_MSG_RESULT( no )
4712             fi
4713         else
4714             AC_MSG_RESULT( yes )
4715             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4716             ldflags_save=$LDFLAGS
4717             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4718             AC_LINK_IFELSE([AC_LANG_PROGRAM([
4719 #include <stdio.h>
4720                 ],[
4721 printf ("hello world\n");
4722                 ])], ENABLE_GDB_INDEX=TRUE, [])
4723             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
4724                 AC_MSG_RESULT( yes )
4725             else
4726                 if test "$enable_gdb_index" = "yes"; then
4727                     AC_MSG_ERROR( no )
4728                 else
4729                     AC_MSG_RESULT( no )
4730                 fi
4731             fi
4732             LDFLAGS=$ldflags_save
4733         fi
4734         CFLAGS=$save_CFLAGS
4735         fi
4736     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4737         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
4738         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
4739     fi
4741 AC_SUBST(ENABLE_GDB_INDEX)
4743 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
4744     enable_sal_log=yes
4746 if test "$enable_sal_log" = yes; then
4747     ENABLE_SAL_LOG=TRUE
4749 AC_SUBST(ENABLE_SAL_LOG)
4751 dnl Check for enable symbols option
4752 dnl ===================================================================
4753 AC_MSG_CHECKING([whether to generate debug information])
4754 if test -z "$enable_symbols"; then
4755     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4756         enable_symbols=yes
4757     else
4758         enable_symbols=no
4759     fi
4761 if test "$enable_symbols" = yes; then
4762     ENABLE_SYMBOLS_FOR=all
4763     AC_MSG_RESULT([yes])
4764 elif test "$enable_symbols" = no; then
4765     ENABLE_SYMBOLS_FOR=
4766     AC_MSG_RESULT([no])
4767 else
4768     # Selective debuginfo.
4769     ENABLE_SYMBOLS_FOR="$enable_symbols"
4770     AC_MSG_RESULT([for "$enable_symbols"])
4772 AC_SUBST(ENABLE_SYMBOLS_FOR)
4774 if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then
4775     # Building on Android with full symbols: without enough memory the linker never finishes currently.
4776     AC_MSG_CHECKING([whether enough memory is available for linking])
4777     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
4778     # Check for 15GB, as Linux reports a bit less than the physical memory size.
4779     if test -n "$mem_size" -a $mem_size -lt 15728640; then
4780         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
4781     else
4782         AC_MSG_RESULT([yes])
4783     fi
4786 ENABLE_OPTIMIZED=
4787 ENABLE_OPTIMIZED_DEBUG=
4788 AC_MSG_CHECKING([whether to compile with optimization flags])
4789 if test -z "$enable_optimized"; then
4790     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4791         enable_optimized=no
4792     else
4793         enable_optimized=yes
4794     fi
4796 if test "$enable_optimized" = yes; then
4797     ENABLE_OPTIMIZED=TRUE
4798     AC_MSG_RESULT([yes])
4799 elif test "$enable_optimized" = debug; then
4800     ENABLE_OPTIMIZED_DEBUG=TRUE
4801     AC_MSG_RESULT([yes (debug)])
4802     HAVE_GCC_OG=
4803     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4804         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
4805         save_CFLAGS=$CFLAGS
4806         CFLAGS="$CFLAGS -Werror -Og"
4807         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
4808         CFLAGS=$save_CFLAGS
4809         if test "$HAVE_GCC_OG" = "TRUE"; then
4810             AC_MSG_RESULT([yes])
4811         else
4812             AC_MSG_RESULT([no])
4813         fi
4814     fi
4815     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
4816         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
4817     fi
4818 else
4819     AC_MSG_RESULT([no])
4821 AC_SUBST(ENABLE_OPTIMIZED)
4822 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
4825 # determine CPUNAME, OS, ...
4827 case "$host_os" in
4829 aix*)
4830     COM=GCC
4831     CPUNAME=POWERPC
4832     OS=AIX
4833     RTL_OS=AIX
4834     RTL_ARCH=PowerPC
4835     PLATFORMID=aix_powerpc
4836     P_SEP=:
4837     ;;
4839 cygwin*|wsl*)
4840     # Already handled
4841     ;;
4843 darwin*|macos*)
4844     COM=GCC
4845     OS=MACOSX
4846     RTL_OS=MacOSX
4847     P_SEP=:
4849     case "$host_cpu" in
4850     aarch64|arm64)
4851         if test "$enable_ios_simulator" = "yes"; then
4852             OS=iOS
4853         else
4854             CPUNAME=AARCH64
4855             RTL_ARCH=AARCH64
4856             PLATFORMID=macosx_aarch64
4857         fi
4858         ;;
4859     x86_64)
4860         if test "$enable_ios_simulator" = "yes"; then
4861             OS=iOS
4862         fi
4863         CPUNAME=X86_64
4864         RTL_ARCH=X86_64
4865         PLATFORMID=macosx_x86_64
4866         ;;
4867     *)
4868         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4869         ;;
4870     esac
4871     ;;
4873 ios*)
4874     COM=GCC
4875     OS=iOS
4876     RTL_OS=iOS
4877     P_SEP=:
4879     case "$host_cpu" in
4880     aarch64|arm64)
4881         if test "$enable_ios_simulator" = "yes"; then
4882             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
4883         fi
4884         ;;
4885     *)
4886         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4887         ;;
4888     esac
4889     CPUNAME=AARCH64
4890     RTL_ARCH=AARCH64
4891     PLATFORMID=ios_arm64
4892     ;;
4894 dragonfly*)
4895     COM=GCC
4896     OS=DRAGONFLY
4897     RTL_OS=DragonFly
4898     P_SEP=:
4900     case "$host_cpu" in
4901     i*86)
4902         CPUNAME=INTEL
4903         RTL_ARCH=x86
4904         PLATFORMID=dragonfly_x86
4905         ;;
4906     x86_64)
4907         CPUNAME=X86_64
4908         RTL_ARCH=X86_64
4909         PLATFORMID=dragonfly_x86_64
4910         ;;
4911     *)
4912         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4913         ;;
4914     esac
4915     ;;
4917 freebsd*)
4918     COM=GCC
4919     RTL_OS=FreeBSD
4920     OS=FREEBSD
4921     P_SEP=:
4923     case "$host_cpu" in
4924     aarch64)
4925         CPUNAME=AARCH64
4926         PLATFORMID=freebsd_aarch64
4927         RTL_ARCH=AARCH64
4928         ;;
4929     i*86)
4930         CPUNAME=INTEL
4931         RTL_ARCH=x86
4932         PLATFORMID=freebsd_x86
4933         ;;
4934     x86_64|amd64)
4935         CPUNAME=X86_64
4936         RTL_ARCH=X86_64
4937         PLATFORMID=freebsd_x86_64
4938         ;;
4939     powerpc64)
4940         CPUNAME=POWERPC64
4941         RTL_ARCH=PowerPC_64
4942         PLATFORMID=freebsd_powerpc64
4943         ;;
4944     powerpc|powerpcspe)
4945         CPUNAME=POWERPC
4946         RTL_ARCH=PowerPC
4947         PLATFORMID=freebsd_powerpc
4948         ;;
4949     *)
4950         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4951         ;;
4952     esac
4953     ;;
4955 haiku*)
4956     COM=GCC
4957     GUIBASE=haiku
4958     RTL_OS=Haiku
4959     OS=HAIKU
4960     P_SEP=:
4962     case "$host_cpu" in
4963     i*86)
4964         CPUNAME=INTEL
4965         RTL_ARCH=x86
4966         PLATFORMID=haiku_x86
4967         ;;
4968     x86_64|amd64)
4969         CPUNAME=X86_64
4970         RTL_ARCH=X86_64
4971         PLATFORMID=haiku_x86_64
4972         ;;
4973     *)
4974         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4975         ;;
4976     esac
4977     ;;
4979 kfreebsd*)
4980     COM=GCC
4981     OS=LINUX
4982     RTL_OS=kFreeBSD
4983     P_SEP=:
4985     case "$host_cpu" in
4987     i*86)
4988         CPUNAME=INTEL
4989         RTL_ARCH=x86
4990         PLATFORMID=kfreebsd_x86
4991         ;;
4992     x86_64)
4993         CPUNAME=X86_64
4994         RTL_ARCH=X86_64
4995         PLATFORMID=kfreebsd_x86_64
4996         ;;
4997     *)
4998         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4999         ;;
5000     esac
5001     ;;
5003 linux-gnu*|linux-musl*)
5004     COM=GCC
5005     OS=LINUX
5006     RTL_OS=Linux
5007     P_SEP=:
5009     case "$host_cpu" in
5011     aarch64)
5012         CPUNAME=AARCH64
5013         PLATFORMID=linux_aarch64
5014         RTL_ARCH=AARCH64
5015         EPM_FLAGS="-a arm64"
5016         ;;
5017     alpha)
5018         CPUNAME=AXP
5019         RTL_ARCH=ALPHA
5020         PLATFORMID=linux_alpha
5021         ;;
5022     arm*)
5023         CPUNAME=ARM
5024         EPM_FLAGS="-a arm"
5025         RTL_ARCH=ARM_EABI
5026         PLATFORMID=linux_arm_eabi
5027         case "$host_cpu" in
5028         arm*-linux)
5029             RTL_ARCH=ARM_OABI
5030             PLATFORMID=linux_arm_oabi
5031             ;;
5032         esac
5033         ;;
5034     hppa)
5035         CPUNAME=HPPA
5036         RTL_ARCH=HPPA
5037         EPM_FLAGS="-a hppa"
5038         PLATFORMID=linux_hppa
5039         ;;
5040     i*86)
5041         CPUNAME=INTEL
5042         RTL_ARCH=x86
5043         PLATFORMID=linux_x86
5044         ;;
5045     ia64)
5046         CPUNAME=IA64
5047         RTL_ARCH=IA64
5048         PLATFORMID=linux_ia64
5049         ;;
5050     mips)
5051         CPUNAME=GODSON
5052         RTL_ARCH=MIPS_EB
5053         EPM_FLAGS="-a mips"
5054         PLATFORMID=linux_mips_eb
5055         ;;
5056     mips64)
5057         CPUNAME=GODSON64
5058         RTL_ARCH=MIPS64_EB
5059         EPM_FLAGS="-a mips64"
5060         PLATFORMID=linux_mips64_eb
5061         ;;
5062     mips64el)
5063         CPUNAME=GODSON64
5064         RTL_ARCH=MIPS64_EL
5065         EPM_FLAGS="-a mips64el"
5066         PLATFORMID=linux_mips64_el
5067         ;;
5068     mipsel)
5069         CPUNAME=GODSON
5070         RTL_ARCH=MIPS_EL
5071         EPM_FLAGS="-a mipsel"
5072         PLATFORMID=linux_mips_el
5073         ;;
5074     m68k)
5075         CPUNAME=M68K
5076         RTL_ARCH=M68K
5077         PLATFORMID=linux_m68k
5078         ;;
5079     powerpc)
5080         CPUNAME=POWERPC
5081         RTL_ARCH=PowerPC
5082         PLATFORMID=linux_powerpc
5083         ;;
5084     powerpc64)
5085         CPUNAME=POWERPC64
5086         RTL_ARCH=PowerPC_64
5087         PLATFORMID=linux_powerpc64
5088         ;;
5089     powerpc64le)
5090         CPUNAME=POWERPC64
5091         RTL_ARCH=PowerPC_64_LE
5092         PLATFORMID=linux_powerpc64_le
5093         ;;
5094     sparc)
5095         CPUNAME=SPARC
5096         RTL_ARCH=SPARC
5097         PLATFORMID=linux_sparc
5098         ;;
5099     sparc64)
5100         CPUNAME=SPARC64
5101         RTL_ARCH=SPARC64
5102         PLATFORMID=linux_sparc64
5103         ;;
5104     s390)
5105         CPUNAME=S390
5106         RTL_ARCH=S390
5107         PLATFORMID=linux_s390
5108         ;;
5109     s390x)
5110         CPUNAME=S390X
5111         RTL_ARCH=S390x
5112         PLATFORMID=linux_s390x
5113         ;;
5114     x86_64)
5115         CPUNAME=X86_64
5116         RTL_ARCH=X86_64
5117         PLATFORMID=linux_x86_64
5118         ;;
5119     *)
5120         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5121         ;;
5122     esac
5123     ;;
5125 linux-android*)
5126     COM=GCC
5127     OS=ANDROID
5128     RTL_OS=Android
5129     P_SEP=:
5131     case "$host_cpu" in
5133     arm|armel)
5134         CPUNAME=ARM
5135         RTL_ARCH=ARM_EABI
5136         PLATFORMID=android_arm_eabi
5137         ;;
5138     aarch64)
5139         CPUNAME=AARCH64
5140         RTL_ARCH=AARCH64
5141         PLATFORMID=android_aarch64
5142         ;;
5143     i*86)
5144         CPUNAME=INTEL
5145         RTL_ARCH=x86
5146         PLATFORMID=android_x86
5147         ;;
5148     x86_64)
5149         CPUNAME=X86_64
5150         RTL_ARCH=X86_64
5151         PLATFORMID=android_x86_64
5152         ;;
5153     *)
5154         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5155         ;;
5156     esac
5157     ;;
5159 *netbsd*)
5160     COM=GCC
5161     OS=NETBSD
5162     RTL_OS=NetBSD
5163     P_SEP=:
5165     case "$host_cpu" in
5166     i*86)
5167         CPUNAME=INTEL
5168         RTL_ARCH=x86
5169         PLATFORMID=netbsd_x86
5170         ;;
5171     powerpc)
5172         CPUNAME=POWERPC
5173         RTL_ARCH=PowerPC
5174         PLATFORMID=netbsd_powerpc
5175         ;;
5176     sparc)
5177         CPUNAME=SPARC
5178         RTL_ARCH=SPARC
5179         PLATFORMID=netbsd_sparc
5180         ;;
5181     x86_64)
5182         CPUNAME=X86_64
5183         RTL_ARCH=X86_64
5184         PLATFORMID=netbsd_x86_64
5185         ;;
5186     *)
5187         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5188         ;;
5189     esac
5190     ;;
5192 openbsd*)
5193     COM=GCC
5194     OS=OPENBSD
5195     RTL_OS=OpenBSD
5196     P_SEP=:
5198     case "$host_cpu" in
5199     i*86)
5200         CPUNAME=INTEL
5201         RTL_ARCH=x86
5202         PLATFORMID=openbsd_x86
5203         ;;
5204     x86_64)
5205         CPUNAME=X86_64
5206         RTL_ARCH=X86_64
5207         PLATFORMID=openbsd_x86_64
5208         ;;
5209     *)
5210         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5211         ;;
5212     esac
5213     SOLARINC="$SOLARINC -I/usr/local/include"
5214     ;;
5216 solaris*)
5217     COM=GCC
5218     OS=SOLARIS
5219     RTL_OS=Solaris
5220     P_SEP=:
5222     case "$host_cpu" in
5223     i*86)
5224         CPUNAME=INTEL
5225         RTL_ARCH=x86
5226         PLATFORMID=solaris_x86
5227         ;;
5228     sparc)
5229         CPUNAME=SPARC
5230         RTL_ARCH=SPARC
5231         PLATFORMID=solaris_sparc
5232         ;;
5233     sparc64)
5234         CPUNAME=SPARC64
5235         RTL_ARCH=SPARC64
5236         PLATFORMID=solaris_sparc64
5237         ;;
5238     *)
5239         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5240         ;;
5241     esac
5242     SOLARINC="$SOLARINC -I/usr/local/include"
5243     ;;
5245 emscripten*)
5246     COM=GCC
5247     OS=EMSCRIPTEN
5248     RTL_OS=Emscripten
5249     P_SEP=:
5251     case "$host_cpu" in
5252     wasm32|wasm64)
5253         ;;
5254     *)
5255         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5256         ;;
5257     esac
5258     CPUNAME=INTEL
5259     RTL_ARCH=x86
5260     PLATFORMID=linux_x86
5261     ;;
5264     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5265     ;;
5266 esac
5268 if test "$with_x" = "no"; then
5269     AC_MSG_ERROR([Use --disable-gui instead. How can we get rid of this option? No idea where it comes from.])
5272 DISABLE_GUI=""
5273 if test "$enable_gui" = "no"; then
5274     if test "$using_x11" != yes; then
5275         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5276     fi
5277     USING_X11=
5278     DISABLE_GUI=TRUE
5279 else
5280     AC_DEFINE(HAVE_FEATURE_UI)
5282 AC_SUBST(DISABLE_GUI)
5284 if test "$using_x11" = yes; then
5285     if test "$USING_X11" = TRUE; then
5286         AC_DEFINE(USING_X11)
5287     else
5288         disable_x11_tests
5289     fi
5290 else
5291     if test "$USING_X11" = TRUE; then
5292         AC_MSG_ERROR([Platform doesn't support X11 (\$using_x11), but \$USING_X11 is set!])
5293     fi
5296 WORKDIR="${BUILDDIR}/workdir"
5297 INSTDIR="${BUILDDIR}/instdir"
5298 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5299 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5300 SOLARINC="-I$SRC_ROOT/include $SOLARINC"
5301 AC_SUBST(COM)
5302 AC_SUBST(CPUNAME)
5303 AC_SUBST(RTL_OS)
5304 AC_SUBST(RTL_ARCH)
5305 AC_SUBST(EPM_FLAGS)
5306 AC_SUBST(USING_X11)
5307 AC_SUBST([INSTDIR])
5308 AC_SUBST([INSTROOT])
5309 AC_SUBST([INSTROOTBASE])
5310 AC_SUBST(OS)
5311 AC_SUBST(P_SEP)
5312 AC_SUBST(WORKDIR)
5313 AC_SUBST(PLATFORMID)
5314 AC_SUBST(WINDOWS_X64)
5315 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5317 if test "$OS" = WNT -a "$COM" = MSC; then
5318     case "$CPUNAME" in
5319     INTEL) CPPU_ENV=msci ;;
5320     X86_64) CPPU_ENV=mscx ;;
5321     AARCH64) CPPU_ENV=msca ;;
5322     *)
5323         AC_MSG_ERROR([Unknown \$CPUNAME '$CPUNAME' for $OS / $COM"])
5324         ;;
5325     esac
5326 else
5327     CPPU_ENV=gcc3
5329 AC_SUBST(CPPU_ENV)
5331 dnl ===================================================================
5332 dnl Test which package format to use
5333 dnl ===================================================================
5334 AC_MSG_CHECKING([which package format to use])
5335 if test -n "$with_package_format" -a "$with_package_format" != no; then
5336     for i in $with_package_format; do
5337         case "$i" in
5338         aix | bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5339             ;;
5340         *)
5341             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5342 aix - AIX software distribution
5343 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5344 deb - Debian software distribution
5345 pkg - Solaris software distribution
5346 rpm - RedHat software distribution
5348 LibreOffice additionally supports:
5349 archive - .tar.gz or .zip
5350 dmg - macOS .dmg
5351 installed - installation tree
5352 msi - Windows .msi
5353         ])
5354             ;;
5355         esac
5356     done
5357     # fakeroot is needed to ensure correct file ownerships/permissions
5358     # inside deb packages and tar archives created on Linux and Solaris.
5359     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5360         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5361         if test "$FAKEROOT" = "no"; then
5362             AC_MSG_ERROR(
5363                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5364         fi
5365     fi
5366     PKGFORMAT="$with_package_format"
5367     AC_MSG_RESULT([$PKGFORMAT])
5368 else
5369     PKGFORMAT=
5370     AC_MSG_RESULT([none])
5372 AC_SUBST(PKGFORMAT)
5374 dnl ===================================================================
5375 dnl handle help related options
5377 dnl If you change help related options, please update README.help
5378 dnl ===================================================================
5380 ENABLE_HTMLHELP=
5381 HELP_OMINDEX_PAGE=
5382 HELP_ONLINE=
5383 WITH_HELPPACKS=
5385 AC_MSG_CHECKING([which help to build])
5386 if test -n "$with_help" -a "$with_help" != "no"; then
5387     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5388     BUILD_TYPE="$BUILD_TYPE HELP"
5389     case "$with_help" in
5390     "html")
5391         ENABLE_HTMLHELP=TRUE
5392         WITH_HELPPACKS=TRUE
5393         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5394         AC_MSG_RESULT([HTML (local)])
5395         ;;
5396     "online")
5397         ENABLE_HTMLHELP=TRUE
5398         HELP_ONLINE=TRUE
5399         AC_MSG_RESULT([HTML (online)])
5400         ;;
5401     yes)
5402         WITH_HELPPACKS=TRUE
5403         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5404         AC_MSG_RESULT([XML (local)])
5405         ;;
5406     *)
5407         AC_MSG_ERROR([Unknown --with-help=$with_help])
5408         ;;
5409     esac
5410 else
5411     AC_MSG_RESULT([no])
5414 AC_MSG_CHECKING([if we need to build the help index tooling])
5415 if test "$with_help" = yes -o "$enable_extension_integration" != no; then
5416     BUILD_TYPE="$BUILD_TYPE HELPTOOLS"
5417     AC_MSG_RESULT([yes])
5418 else
5419     AC_MSG_RESULT([no])
5422 AC_MSG_CHECKING([whether to enable xapian-omega support for online help])
5423 if test -n "$with_omindex" -a "$with_omindex" != "no"; then
5424     if test "$HELP_ONLINE" != TRUE; then
5425         AC_MSG_ERROR([Can't build xapian-omega index without --help=online])
5426     fi
5427     case "$with_omindex" in
5428     "server")
5429         HELP_OMINDEX_PAGE=TRUE
5430         AC_MSG_RESULT([SERVER])
5431         ;;
5432     "noxap")
5433         AC_MSG_RESULT([NOXAP])
5434         ;;
5435     *)
5436         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5437         ;;
5438     esac
5439 else
5440     AC_MSG_RESULT([no])
5443 AC_MSG_CHECKING([whether to include the XML-help support])
5444 if test "$enable_xmlhelp" = yes; then
5445     BUILD_TYPE="$BUILD_TYPE XMLHELP"
5446     AC_DEFINE(HAVE_FEATURE_XMLHELP)
5447     AC_MSG_RESULT([yes])
5448 else
5449     if test "$with_help" = yes; then
5450         add_warning "Building the XML help, but LO with disabled xmlhelp support. Generated help can't be accessed from this LO build!"
5451     fi
5452     AC_MSG_RESULT([no])
5455 dnl Test whether to integrate helppacks into the product's installer
5456 AC_MSG_CHECKING([for helppack integration])
5457 if test -z "$WITH_HELPPACKS" -o "$with_helppack_integration" = no; then
5458     AC_MSG_RESULT([no integration])
5459 else
5460     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
5461     AC_MSG_RESULT([integration])
5464 AC_SUBST([ENABLE_HTMLHELP])
5465 AC_SUBST([HELP_OMINDEX_PAGE])
5466 AC_SUBST([HELP_ONLINE])
5467 # WITH_HELPPACKS is used only in configure
5469 dnl ===================================================================
5470 dnl Set up a different compiler to produce tools to run on the build
5471 dnl machine when doing cross-compilation
5472 dnl ===================================================================
5474 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5475 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5476 if test "$cross_compiling" = "yes"; then
5477     AC_MSG_CHECKING([for BUILD platform configuration])
5478     echo
5479     rm -rf CONF-FOR-BUILD config_build.mk
5480     mkdir CONF-FOR-BUILD
5481     # Here must be listed all files needed when running the configure script. In particular, also
5482     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5483     # keep them in the same order as there.
5484     (cd $SRC_ROOT && tar cf - \
5485         config.guess \
5486         bin/get_config_variables \
5487         solenv/bin/getcompver.awk \
5488         solenv/inc/langlist.mk \
5489         download.lst \
5490         config_host.mk.in \
5491         config_host_lang.mk.in \
5492         Makefile.in \
5493         bin/bffvalidator.sh.in \
5494         bin/odfvalidator.sh.in \
5495         bin/officeotron.sh.in \
5496         hardened_runtime.xcent.in \
5497         instsetoo_native/util/openoffice.lst.in \
5498         config_host/*.in \
5499         sysui/desktop/macosx/Info.plist.in \
5500         .vscode/vs-code-template.code-workspace.in \
5501         ) \
5502     | (cd CONF-FOR-BUILD && tar xf -)
5503     cp configure CONF-FOR-BUILD
5504     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5505     (
5506     unset COM USING_X11 OS CPUNAME
5507     unset CC CXX SYSBASE CFLAGS
5508     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5509     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5510     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5511     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5512     if test -n "$CC_FOR_BUILD"; then
5513         export CC="$CC_FOR_BUILD"
5514         CC_BASE=`first_arg_basename "$CC"`
5515     fi
5516     if test -n "$CXX_FOR_BUILD"; then
5517         export CXX="$CXX_FOR_BUILD"
5518         CXX_BASE=`first_arg_basename "$CXX"`
5519     fi
5520     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5521     cd CONF-FOR-BUILD
5523     # Handle host configuration, which affects the cross-toolset too
5524     sub_conf_opts=""
5525     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5526     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5527     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5528     if test -n "$ENABLE_JAVA"; then
5529         case "$_os" in
5530         iOS) sub_conf_opts="$sub_conf_opts --without-java" ;; # force it off, like it used to be
5531         Android)
5532             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5533             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5534             ;;
5535         *)
5536             if test -z "$with_jdk_home"; then
5537                 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.])
5538             fi
5539             ;;
5540         esac
5541     else
5542         sub_conf_opts="$sub_conf_opts --without-java"
5543     fi
5544     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5545     test "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" && sub_conf_opts="$sub_conf_opts --with-system-icu"
5546     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no --disable-database-connectivity"
5547     test -n "$with_help" -a "$with_help" != "no" && sub_conf_opts="$sub_conf_opts --with-help=$with_help"
5548     test "$enable_extensions" = yes || sub_conf_opts="$sub_conf_opts --disable-extensions"
5549     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5551     # Don't bother having configure look for stuff not needed for the build platform anyway
5552     sub_conf_defaults=" \
5553         --build="$build_alias" \
5554         --disable-cairo-canvas \
5555         --disable-cups \
5556         --disable-firebird-sdbc \
5557         --disable-gpgmepp \
5558         --disable-gstreamer-1-0 \
5559         --disable-gtk3 \
5560         --disable-gtk4 \
5561         --disable-mariadb-sdbc \
5562         --disable-nss \
5563         --disable-online-update \
5564         --disable-opencl \
5565         --disable-pdfimport \
5566         --disable-postgresql-sdbc \
5567         --disable-skia \
5568         --enable-icecream="$enable_icecream" \
5569         --without-doxygen \
5570         --without-webdav \
5571         --with-parallelism="$with_parallelism" \
5572         --with-theme="$with_theme" \
5573         --with-tls=openssl \
5575     echo "    Running CONF-FOR-BUILD/configure" $sub_conf_defaults $sub_conf_opts $with_build_platform_configure_options --srcdir=$srcdir
5576     ./configure \
5577         $sub_conf_defaults \
5578         $sub_conf_opts \
5579         $with_build_platform_configure_options \
5580         --srcdir=$srcdir \
5581         2>&1 | sed -e 's/^/    /'
5582     if test [${PIPESTATUS[0]}] -ne 0; then
5583         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5584     fi
5586     # filter permitted build targets
5587     PERMITTED_BUILD_TARGETS="
5588         AVMEDIA
5589         BOOST
5590         CAIRO
5591         CLUCENE
5592         CUCKOO
5593         CURL
5594         DBCONNECTIVITY
5595         DESKTOP
5596         DYNLOADING
5597         EPOXY
5598         EXPAT
5599         GLM
5600         GRAPHITE
5601         HARFBUZZ
5602         HELPTOOLS
5603         ICU
5604         LCMS2
5605         LIBJPEG_TURBO
5606         LIBLANGTAG
5607         LibO
5608         LIBFFI
5609         LIBPN
5610         LIBXML2
5611         LIBXSLT
5612         MDDS
5613         NATIVE
5614         OPENSSL
5615         ORCUS
5616         PYTHON
5617         SCRIPTING
5618         ZLIB
5620     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5621     # newlined lists, to use grep as a filter
5622     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5623     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5624     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5625     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5627     cp config_host.mk ../config_build.mk
5628     cp config_host_lang.mk ../config_build_lang.mk
5629     mv config.log ../config.Build.log
5630     mkdir -p ../config_build
5631     mv config_host/*.h ../config_build
5632     test -f "$WARNINGS_FILE" && mv "$WARNINGS_FILE" "../$WARNINGS_FILE_FOR_BUILD"
5634     # all these will get a _FOR_BUILD postfix
5635     DIRECT_FOR_BUILD_SETTINGS="
5636         CC
5637         CPPU_ENV
5638         CXX
5639         ILIB
5640         JAVA_HOME
5641         JAVAIFLAGS
5642         JDK
5643         LIBO_BIN_FOLDER
5644         LIBO_LIB_FOLDER
5645         LIBO_URE_LIB_FOLDER
5646         LIBO_URE_MISC_FOLDER
5647         OS
5648         SDKDIRNAME
5649         SYSTEM_LIBXML
5650         SYSTEM_LIBXSLT
5652     # these overwrite host config with build config
5653     OVERWRITING_SETTINGS="
5654         ANT
5655         ANT_HOME
5656         ANT_LIB
5657         HSQLDB_USE_JDBC_4_1
5658         JAVA_CLASSPATH_NOT_SET
5659         JAVA_SOURCE_VER
5660         JAVA_TARGET_VER
5661         JAVACFLAGS
5662         JAVACOMPILER
5663         JAVADOC
5664         JAVADOCISGJDOC
5666     # these need some special handling
5667     EXTRA_HANDLED_SETTINGS="
5668         INSTDIR
5669         INSTROOT
5670         PATH
5671         WORKDIR
5673     OLD_PATH=$PATH
5674     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
5675     BUILD_PATH=$PATH
5676     PATH=$OLD_PATH
5678     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
5679     echo "$line" >>build-config
5681     for V in $DIRECT_FOR_BUILD_SETTINGS; do
5682         VV='$'$V
5683         VV=`eval "echo $VV"`
5684         if test -n "$VV"; then
5685             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
5686             echo "$line" >>build-config
5687         fi
5688     done
5690     for V in $OVERWRITING_SETTINGS; do
5691         VV='$'$V
5692         VV=`eval "echo $VV"`
5693         if test -n "$VV"; then
5694             line=${V}='${'${V}:-$VV'}'
5695             echo "$line" >>build-config
5696         fi
5697     done
5699     for V in INSTDIR INSTROOT WORKDIR; do
5700         VV='$'$V
5701         VV=`eval "echo $VV"`
5702         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
5703         if test -n "$VV"; then
5704             line="${V}_FOR_BUILD='$VV'"
5705             echo "$line" >>build-config
5706         fi
5707     done
5709     )
5710     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
5711     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])
5712     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
5713              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
5715     eval `cat CONF-FOR-BUILD/build-config`
5717     AC_MSG_RESULT([checking for BUILD platform configuration... done])
5719     rm -rf CONF-FOR-BUILD
5720 else
5721     OS_FOR_BUILD="$OS"
5722     CC_FOR_BUILD="$CC"
5723     CPPU_ENV_FOR_BUILD="$CPPU_ENV"
5724     CXX_FOR_BUILD="$CXX"
5725     INSTDIR_FOR_BUILD="$INSTDIR"
5726     INSTROOT_FOR_BUILD="$INSTROOT"
5727     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
5728     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
5729     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
5730     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
5731     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
5732     WORKDIR_FOR_BUILD="$WORKDIR"
5734 AC_SUBST(OS_FOR_BUILD)
5735 AC_SUBST(INSTDIR_FOR_BUILD)
5736 AC_SUBST(INSTROOT_FOR_BUILD)
5737 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
5738 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
5739 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
5740 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
5741 AC_SUBST(SDKDIRNAME_FOR_BUILD)
5742 AC_SUBST(WORKDIR_FOR_BUILD)
5743 AC_SUBST(CC_FOR_BUILD)
5744 AC_SUBST(CXX_FOR_BUILD)
5745 AC_SUBST(CPPU_ENV_FOR_BUILD)
5747 dnl ===================================================================
5748 dnl Check for syslog header
5749 dnl ===================================================================
5750 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
5752 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
5753 dnl ===================================================================
5754 AC_MSG_CHECKING([whether to turn warnings to errors])
5755 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
5756     ENABLE_WERROR="TRUE"
5757     PYTHONWARNINGS="error"
5758     AC_MSG_RESULT([yes])
5759 else
5760     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
5761         ENABLE_WERROR="TRUE"
5762         PYTHONWARNINGS="error"
5763         AC_MSG_RESULT([yes])
5764     else
5765         AC_MSG_RESULT([no])
5766     fi
5768 AC_SUBST(ENABLE_WERROR)
5769 AC_SUBST(PYTHONWARNINGS)
5771 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
5772 dnl ===================================================================
5773 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
5774 if test -z "$enable_assert_always_abort"; then
5775    if test "$ENABLE_DEBUG" = TRUE; then
5776        enable_assert_always_abort=yes
5777    else
5778        enable_assert_always_abort=no
5779    fi
5781 if test "$enable_assert_always_abort" = "yes"; then
5782     ASSERT_ALWAYS_ABORT="TRUE"
5783     AC_MSG_RESULT([yes])
5784 else
5785     ASSERT_ALWAYS_ABORT="FALSE"
5786     AC_MSG_RESULT([no])
5788 AC_SUBST(ASSERT_ALWAYS_ABORT)
5790 # Determine whether to use ooenv for the instdir installation
5791 # ===================================================================
5792 if test $_os != "WINNT" -a $_os != "Darwin"; then
5793     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
5794     if test -z "$enable_ooenv"; then
5795         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5796             enable_ooenv=yes
5797         else
5798             enable_ooenv=no
5799         fi
5800     fi
5801     if test "$enable_ooenv" = "no"; then
5802         AC_MSG_RESULT([no])
5803     else
5804         ENABLE_OOENV="TRUE"
5805         AC_MSG_RESULT([yes])
5806     fi
5808 AC_SUBST(ENABLE_OOENV)
5810 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
5811     if test "$enable_qt5" = "no"; then
5812         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
5813     else
5814         enable_qt5=yes
5815     fi
5818 dnl ===================================================================
5819 dnl check for cups support
5820 dnl ===================================================================
5822 AC_MSG_CHECKING([whether to enable CUPS support])
5823 if test "$test_cups" = yes -a "$enable_cups" != no; then
5824     ENABLE_CUPS=TRUE
5825     AC_MSG_RESULT([yes])
5827     AC_MSG_CHECKING([whether cups support is present])
5828     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
5829     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
5830     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
5831         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
5832     fi
5833 else
5834     AC_MSG_RESULT([no])
5837 AC_SUBST(ENABLE_CUPS)
5839 # fontconfig checks
5840 if test "$using_freetype_fontconfig" = yes; then
5841     AC_MSG_CHECKING([which fontconfig to use])
5843 if test "$using_freetype_fontconfig" = yes -a "$test_system_fontconfig" != no; then
5844     AC_MSG_RESULT([external])
5845     PKG_CHECK_MODULES([FONTCONFIG], [fontconfig >= 2.4.1])
5846     SYSTEM_FONTCONFIG=TRUE
5847     FilterLibs "${FONTCONFIG_LIBS}"
5848     FONTCONFIG_LIBS="${filteredlibs}"
5849 elif test "$using_freetype_fontconfig" = yes; then
5850     AC_MSG_RESULT([internal])
5851     BUILD_TYPE="$BUILD_TYPE FONTCONFIG"
5853 AC_SUBST(FONTCONFIG_CFLAGS)
5854 AC_SUBST(FONTCONFIG_LIBS)
5855 AC_SUBST([SYSTEM_FONTCONFIG])
5857 dnl whether to find & fetch external tarballs?
5858 dnl ===================================================================
5859 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
5860    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
5861        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
5862    else
5863        TARFILE_LOCATION="$LODE_HOME/ext_tar"
5864    fi
5866 if test -z "$TARFILE_LOCATION"; then
5867     if test -d "$SRC_ROOT/src" ; then
5868         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
5869         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
5870     fi
5871     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
5872 else
5873     AbsolutePath "$TARFILE_LOCATION"
5874     PathFormat "${absolute_path}"
5875     TARFILE_LOCATION="${formatted_path}"
5877 AC_SUBST(TARFILE_LOCATION)
5879 AC_MSG_CHECKING([whether we want to fetch tarballs])
5880 if test "$enable_fetch_external" != "no"; then
5881     if test "$with_all_tarballs" = "yes"; then
5882         AC_MSG_RESULT([yes, all of them])
5883         DO_FETCH_TARBALLS="ALL"
5884     else
5885         AC_MSG_RESULT([yes, if we use them])
5886         DO_FETCH_TARBALLS="TRUE"
5887     fi
5888 else
5889     AC_MSG_RESULT([no])
5890     DO_FETCH_TARBALLS=
5892 AC_SUBST(DO_FETCH_TARBALLS)
5894 dnl Test whether to include MySpell dictionaries
5895 dnl ===================================================================
5896 AC_MSG_CHECKING([whether to include MySpell dictionaries])
5897 if test "$with_myspell_dicts" = "yes"; then
5898     AC_MSG_RESULT([yes])
5899     WITH_MYSPELL_DICTS=TRUE
5900     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
5901     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
5902 else
5903     AC_MSG_RESULT([no])
5904     WITH_MYSPELL_DICTS=
5906 AC_SUBST(WITH_MYSPELL_DICTS)
5908 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
5909 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
5910     if test "$with_system_dicts" = yes; then
5911         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
5912     fi
5913     with_system_dicts=no
5916 AC_MSG_CHECKING([whether to use dicts from external paths])
5917 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
5918     AC_MSG_RESULT([yes])
5919     SYSTEM_DICTS=TRUE
5920     AC_MSG_CHECKING([for spelling dictionary directory])
5921     if test -n "$with_external_dict_dir"; then
5922         DICT_SYSTEM_DIR=file://$with_external_dict_dir
5923     else
5924         DICT_SYSTEM_DIR=file:///usr/share/hunspell
5925         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
5926             DICT_SYSTEM_DIR=file:///usr/share/myspell
5927         fi
5928     fi
5929     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
5930     AC_MSG_CHECKING([for hyphenation patterns directory])
5931     if test -n "$with_external_hyph_dir"; then
5932         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
5933     else
5934         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
5935     fi
5936     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
5937     AC_MSG_CHECKING([for thesaurus directory])
5938     if test -n "$with_external_thes_dir"; then
5939         THES_SYSTEM_DIR=file://$with_external_thes_dir
5940     else
5941         THES_SYSTEM_DIR=file:///usr/share/mythes
5942     fi
5943     AC_MSG_RESULT([$THES_SYSTEM_DIR])
5944 else
5945     AC_MSG_RESULT([no])
5946     SYSTEM_DICTS=
5948 AC_SUBST(SYSTEM_DICTS)
5949 AC_SUBST(DICT_SYSTEM_DIR)
5950 AC_SUBST(HYPH_SYSTEM_DIR)
5951 AC_SUBST(THES_SYSTEM_DIR)
5953 dnl ===================================================================
5954 dnl Precompiled headers.
5955 ENABLE_PCH=""
5956 AC_MSG_CHECKING([whether to enable pch feature])
5957 if test -z "$enable_pch"; then
5958     if test "$_os" = "WINNT"; then
5959         # Enabled by default on Windows.
5960         enable_pch=yes
5961         # never use sccache on auto-enabled PCH builds, except if requested explicitely
5962         if test -z "$enable_ccache" -a "$SCCACHE"; then
5963             CCACHE=""
5964         fi
5965     else
5966         enable_pch=no
5967     fi
5969 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
5970     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
5972 if test "$enable_pch" = "system"; then
5973     ENABLE_PCH="1"
5974     AC_MSG_RESULT([yes (system headers)])
5975 elif test "$enable_pch" = "base"; then
5976     ENABLE_PCH="2"
5977     AC_MSG_RESULT([yes (system and base headers)])
5978 elif test "$enable_pch" = "normal"; then
5979     ENABLE_PCH="3"
5980     AC_MSG_RESULT([yes (normal)])
5981 elif test "$enable_pch" = "full"; then
5982     ENABLE_PCH="4"
5983     AC_MSG_RESULT([yes (full)])
5984 elif test "$enable_pch" = "yes"; then
5985     # Pick a suitable default.
5986     if test "$GCC" = "yes"; then
5987         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
5988         # while making the PCHs larger and rebuilds more likely.
5989         ENABLE_PCH="2"
5990         AC_MSG_RESULT([yes (system and base headers)])
5991     else
5992         # With MSVC the highest level makes a significant difference,
5993         # and it was the default when there used to be no PCH levels.
5994         ENABLE_PCH="4"
5995         AC_MSG_RESULT([yes (full)])
5996     fi
5997 elif test "$enable_pch" = "no"; then
5998     AC_MSG_RESULT([no])
5999 else
6000     AC_MSG_ERROR([Unknown value for --enable-pch])
6002 AC_SUBST(ENABLE_PCH)
6003 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
6004 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
6005     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
6006     if test "$CCACHE_BIN" != "not found"; then
6007         AC_MSG_CHECKING([ccache version])
6008         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
6009         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6010         AC_MSG_RESULT([$CCACHE_VERSION])
6011         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
6012         if test "$CCACHE_NUMVER" -gt "030701"; then
6013             AC_MSG_RESULT([yes])
6014         else
6015             AC_MSG_RESULT([no (not newer than 3.7.1)])
6016             CCACHE_DEPEND_MODE=
6017         fi
6018     fi
6021 PCH_INSTANTIATE_TEMPLATES=
6022 if test -n "$ENABLE_PCH"; then
6023     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
6024     save_CFLAGS=$CFLAGS
6025     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
6026     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
6027     CFLAGS=$save_CFLAGS
6028     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
6029         AC_MSG_RESULT(yes)
6030     else
6031         AC_MSG_RESULT(no)
6032     fi
6034 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
6036 BUILDING_PCH_WITH_OBJ=
6037 if test -n "$ENABLE_PCH"; then
6038     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
6039     save_CFLAGS=$CFLAGS
6040     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
6041     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
6042     CFLAGS=$save_CFLAGS
6043     if test -n "$BUILDING_PCH_WITH_OBJ"; then
6044         AC_MSG_RESULT(yes)
6045     else
6046         AC_MSG_RESULT(no)
6047     fi
6049 AC_SUBST(BUILDING_PCH_WITH_OBJ)
6051 PCH_CODEGEN=
6052 PCH_NO_CODEGEN=
6053 fpch_prefix=
6054 if test "$COM" = MSC; then
6055     fpch_prefix="-Xclang "
6057 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6058     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-codegen])
6059     save_CFLAGS=$CFLAGS
6060     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-codegen"
6061     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6062         [
6063         PCH_CODEGEN="${fpch_prefix}-fpch-codegen"
6064         PCH_NO_CODEGEN="${fpch_prefix}-fno-pch-codegen"
6065         ],[])
6066     CFLAGS=$save_CFLAGS
6067     if test -n "$PCH_CODEGEN"; then
6068         AC_MSG_RESULT(yes)
6069     else
6070         AC_MSG_RESULT(no)
6071     fi
6073 AC_SUBST(PCH_CODEGEN)
6074 AC_SUBST(PCH_NO_CODEGEN)
6075 PCH_DEBUGINFO=
6076 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6077     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-debuginfo])
6078     save_CFLAGS=$CFLAGS
6079     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-debuginfo"
6080     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="${fpch_prefix}-fpch-debuginfo" ],[])
6081     CFLAGS=$save_CFLAGS
6082     if test -n "$PCH_DEBUGINFO"; then
6083         AC_MSG_RESULT(yes)
6084     else
6085         AC_MSG_RESULT(no)
6086     fi
6088 AC_SUBST(PCH_DEBUGINFO)
6090 TAB=`printf '\t'`
6092 AC_MSG_CHECKING([the GNU Make version])
6093 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
6094 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6095 if test "$_make_longver" -ge "038200"; then
6096     AC_MSG_RESULT([$GNUMAKE $_make_version])
6098 elif test "$_make_longver" -ge "038100"; then
6099     if test "$build_os" = "cygwin"; then
6100         AC_MSG_ERROR([failed ($GNUMAKE version >= 3.82 needed])
6101     fi
6102     AC_MSG_RESULT([$GNUMAKE $_make_version])
6104     dnl ===================================================================
6105     dnl Search all the common names for sha1sum
6106     dnl ===================================================================
6107     AC_CHECK_PROGS(SHA1SUM, sha1sum sha1 shasum openssl)
6108     if test -z "$SHA1SUM"; then
6109         AC_MSG_ERROR([install the appropriate SHA-1 checksumming program for this OS])
6110     elif test "$SHA1SUM" = "openssl"; then
6111         SHA1SUM="openssl sha1"
6112     fi
6113     AC_MSG_CHECKING([for GNU Make bug 20033])
6114     TESTGMAKEBUG20033=`mktemp -d tmp.XXXXXX`
6115     $SED -e "s/<TAB>/$TAB/g" > $TESTGMAKEBUG20033/Makefile << EOF
6116 A := \$(wildcard *.a)
6118 .PHONY: all
6119 all: \$(A:.a=.b)
6120 <TAB>@echo survived bug20033.
6122 .PHONY: setup
6123 setup:
6124 <TAB>@touch 1.a 2.a 3.a 4.a 5.a 6.a
6126 define d1
6127 @echo lala \$(1)
6128 @sleep 1
6129 endef
6131 define d2
6132 @echo tyty \$(1)
6133 @sleep 1
6134 endef
6136 %.b : %.a
6137 <TAB>\$(eval CHECKSUM := \$(word 1,\$(shell cat \$^ | $SHA1SUM))) \$(if \$(wildcard \$(CACHEDIR)/\$(CHECKSUM)),\
6138 <TAB>\$(call d1,\$(CHECKSUM)),\
6139 <TAB>\$(call d2,\$(CHECKSUM)))
6141     if test -z "`(cd $TESTGMAKEBUG20033 && $GNUMAKE setup && $GNUMAKE -j)|grep survived`"; then
6142         no_parallelism_make="YES"
6143         AC_MSG_RESULT([yes, disable parallelism])
6144     else
6145         AC_MSG_RESULT([no, keep parallelism enabled])
6146     fi
6147     rm -rf $TESTGMAKEBUG20033
6148 else
6149     AC_MSG_ERROR([failed ($GNUMAKE version >= 3.81 needed])
6152 # find if gnumake support file function
6153 AC_MSG_CHECKING([whether GNU Make supports the 'file' function])
6154 TESTGMAKEFILEFUNC="`mktemp -d -t tst.XXXXXX`"
6155 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6156     TESTGMAKEFILEFUNC=`cygpath -m $TESTGMAKEFILEFUNC`
6158 $SED -e "s/<TAB>/$TAB/" > $TESTGMAKEFILEFUNC/Makefile << EOF
6159 \$(file >test.txt,Success )
6161 .PHONY: all
6162 all:
6163 <TAB>@cat test.txt
6166 $GNUMAKE -C $TESTGMAKEFILEFUNC 2>/dev/null 1>&2
6167 if test -f $TESTGMAKEFILEFUNC/test.txt; then
6168     HAVE_GNUMAKE_FILE_FUNC=TRUE
6169     AC_MSG_RESULT([yes])
6170 else
6171     AC_MSG_RESULT([no])
6173 rm -rf $TESTGMAKEFILEFUNC
6174 AC_SUBST(HAVE_GNUMAKE_FILE_FUNC)
6176 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6177 STALE_MAKE=
6178 if test "$_make_ver_check" = ""; then
6179    STALE_MAKE=TRUE
6182 HAVE_LD_HASH_STYLE=FALSE
6183 WITH_LINKER_HASH_STYLE=
6184 AC_MSG_CHECKING([for --hash-style gcc linker support])
6185 if test "$GCC" = "yes"; then
6186     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6187         hash_styles="gnu sysv"
6188     elif test "$with_linker_hash_style" = "no"; then
6189         hash_styles=
6190     else
6191         hash_styles="$with_linker_hash_style"
6192     fi
6194     for hash_style in $hash_styles; do
6195         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6196         hash_style_ldflags_save=$LDFLAGS
6197         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6199         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6200             [
6201 #include <stdio.h>
6202             ],[
6203 printf ("");
6204             ])],
6205             [
6206                   HAVE_LD_HASH_STYLE=TRUE
6207                   WITH_LINKER_HASH_STYLE=$hash_style
6208             ],
6209             [HAVE_LD_HASH_STYLE=FALSE],
6210             [HAVE_LD_HASH_STYLE=FALSE])
6211         LDFLAGS=$hash_style_ldflags_save
6212     done
6214     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6215         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6216     else
6217         AC_MSG_RESULT( no )
6218     fi
6219     LDFLAGS=$hash_style_ldflags_save
6220 else
6221     AC_MSG_RESULT( no )
6223 AC_SUBST(HAVE_LD_HASH_STYLE)
6224 AC_SUBST(WITH_LINKER_HASH_STYLE)
6226 dnl ===================================================================
6227 dnl Check whether there's a Perl version available.
6228 dnl ===================================================================
6229 if test -z "$with_perl_home"; then
6230     AC_PATH_PROG(PERL, perl)
6231 else
6232     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6233     _perl_path="$with_perl_home/bin/perl"
6234     if test -x "$_perl_path"; then
6235         PERL=$_perl_path
6236     else
6237         AC_MSG_ERROR([$_perl_path not found])
6238     fi
6241 dnl ===================================================================
6242 dnl Testing for Perl version 5 or greater.
6243 dnl $] is the Perl version variable, it is returned as an integer
6244 dnl ===================================================================
6245 if test "$PERL"; then
6246     AC_MSG_CHECKING([the Perl version])
6247     ${PERL} -e "exit($]);"
6248     _perl_version=$?
6249     if test "$_perl_version" -lt 5; then
6250         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6251     fi
6252     AC_MSG_RESULT([Perl $_perl_version])
6253 else
6254     AC_MSG_ERROR([Perl not found, install Perl 5])
6257 dnl ===================================================================
6258 dnl Testing for required Perl modules
6259 dnl ===================================================================
6261 AC_MSG_CHECKING([for required Perl modules])
6262 perl_use_string="use Cwd ; use Digest::MD5"
6263 if test "$_os" = "WINNT"; then
6264     if test -n "$PKGFORMAT"; then
6265         for i in $PKGFORMAT; do
6266             case "$i" in
6267             msi)
6268                 # for getting fonts versions to use in MSI
6269                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6270                 ;;
6271             esac
6272         done
6273     fi
6275 if test "$with_system_hsqldb" = "yes"; then
6276     perl_use_string="$perl_use_string ; use Archive::Zip"
6278 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6279     # OpenSSL needs that to build
6280     perl_use_string="$perl_use_string ; use FindBin"
6282 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6283     AC_MSG_RESULT([all modules found])
6284 else
6285     AC_MSG_RESULT([failed to find some modules])
6286     # Find out which modules are missing.
6287     for i in $perl_use_string; do
6288         if test "$i" != "use" -a "$i" != ";"; then
6289             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6290                 missing_perl_modules="$missing_perl_modules $i"
6291             fi
6292         fi
6293     done
6294     AC_MSG_ERROR([
6295     The missing Perl modules are: $missing_perl_modules
6296     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6299 dnl ===================================================================
6300 dnl Check for pkg-config
6301 dnl ===================================================================
6302 if test "$_os" != "WINNT"; then
6303     PKG_PROG_PKG_CONFIG
6306 if test "$_os" != "WINNT"; then
6308     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6309     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6310     # explicitly. Or put /path/to/compiler in PATH yourself.
6312     # Use wrappers for LTO
6313     if test "$ENABLE_LTO" = "TRUE" -a "$COM_IS_CLANG" != "TRUE"; then
6314         AC_CHECK_TOOL(AR,gcc-ar)
6315         AC_CHECK_TOOL(NM,gcc-nm)
6316         AC_CHECK_TOOL(RANLIB,gcc-ranlib)
6317     else
6318         AC_CHECK_TOOL(AR,ar)
6319         AC_CHECK_TOOL(NM,nm)
6320         AC_CHECK_TOOL(RANLIB,ranlib)
6321     fi
6322     AC_CHECK_TOOL(OBJDUMP,objdump)
6323     AC_CHECK_TOOL(READELF,readelf)
6324     AC_CHECK_TOOL(STRIP,strip)
6326 AC_SUBST(AR)
6327 AC_SUBST(LD)
6328 AC_SUBST(NM)
6329 AC_SUBST(OBJDUMP)
6330 AC_SUBST(PKG_CONFIG)
6331 AC_SUBST(PKG_CONFIG_PATH)
6332 AC_SUBST(PKG_CONFIG_LIBDIR)
6333 AC_SUBST(RANLIB)
6334 AC_SUBST(READELF)
6335 AC_SUBST(STRIP)
6337 dnl ===================================================================
6338 dnl pkg-config checks on macOS
6339 dnl ===================================================================
6341 if test $_os = Darwin; then
6342     AC_MSG_CHECKING([for bogus pkg-config])
6343     if test -n "$PKG_CONFIG"; then
6344         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6345             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6346         else
6347             if test "$enable_bogus_pkg_config" = "yes"; then
6348                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6349             else
6350                 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.])
6351             fi
6352         fi
6353     else
6354         AC_MSG_RESULT([no, good])
6355     fi
6358 find_csc()
6360     # Return value: $csctest
6362     unset csctest
6364     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client/InstallPath"
6365     if test -n "$regvalue"; then
6366         csctest=$regvalue
6367         return
6368     fi
6371 find_al()
6373     # Return value: $altest
6375     unset altest
6377     # We need this check to detect 4.6.1 or above.
6378     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6379         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools/InstallationFolder"
6380         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6381             altest=$regvalue
6382             return
6383         fi
6384     done
6386     for x in `ls /proc/registry32/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft\ SDKs/Windows`; do
6387         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools/InstallationFolder"
6388         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6389             altest=$regvalue
6390             return
6391         fi
6392     done
6395 find_dotnetsdk46()
6397     unset frametest
6399     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6; do
6400         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder"
6401         if test -n "$regvalue"; then
6402             frametest=$regvalue
6403             return
6404         fi
6405     done
6408 find_winsdk_version()
6410     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6411     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6413     unset winsdktest winsdkbinsubdir winsdklibsubdir
6415     case "$1" in
6416     8.0|8.0A)
6417         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
6418         if test -n "$regvalue"; then
6419             winsdktest=$regvalue
6420             winsdklibsubdir=win8
6421             return
6422         fi
6423         ;;
6424     8.1|8.1A)
6425         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot81"
6426         if test -n "$regvalue"; then
6427             winsdktest=$regvalue
6428             winsdklibsubdir=winv6.3
6429             return
6430         fi
6431         ;;
6432     10.0)
6433         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/InstallationFolder"
6434         if test -n "$regvalue"; then
6435             winsdktest=$regvalue
6436             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion"
6437             if test -n "$regvalue"; then
6438                 winsdkbinsubdir="$regvalue".0
6439                 winsdklibsubdir=$winsdkbinsubdir
6440                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6441                 local tmppath_unix=$(cygpath -u "$tmppath")
6442                 # test exist the SDK path
6443                 if test -d "$tmppath_unix"; then
6444                    # when path is convertible to a short path then path is okay
6445                    cygpath -d "$tmppath" >/dev/null 2>&1
6446                    if test $? -ne 0; then
6447                       AC_MSG_ERROR([Windows SDK doesn't have a 8.3 name, see NtfsDisable8dot3NameCreation])
6448                    fi
6449                 else
6450                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6451                 fi
6452             fi
6453             return
6454         fi
6455         ;;
6456     esac
6459 find_winsdk()
6461     # Return value: From find_winsdk_version
6463     unset winsdktest
6465     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6466         find_winsdk_version $ver
6467         if test -n "$winsdktest"; then
6468             return
6469         fi
6470     done
6473 find_msms()
6475     # Return value: $msmdir
6477     AC_MSG_CHECKING([for MSVC merge modules directory])
6478     local my_msm_files
6479     local my_msm_dir
6481     dnl Order my_msm_files in increasing order. Then check the directories returned
6482     dnl by ls in an inner loop; assuming they are also ordered in increasing order,
6483     dnl the result will be the highest MSM version found in the highest directory.
6485     case "$VCVER" in
6486         16.0 | 17.0)
6487         my_msm_files="Microsoft_VC141_CRT_x86.msm Microsoft_VC142_CRT_x86.msm ${my_msm_files}"
6488         ;;
6489     esac
6490     for f in $my_msm_files; do
6491         echo "$as_me:$LINENO: searching for $f" >&5
6492     done
6494     msmdir=
6495     case "$VCVER" in
6496     16.0 | 17.0)
6497         for f in ${my_msm_files}; do
6498             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6499                 my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6500                 echo "$as_me:$LINENO: looking for $my_msm_dir${f}])" >&5
6501                 if test -e "$my_msm_dir${f}"; then
6502                     msmdir=$my_msm_dir
6503                 fi
6504             done
6505         done
6506         ;;
6507     esac
6509     if test -n "$msmdir"; then
6510         msmdir=`cygpath -m "$msmdir"`
6511         AC_MSG_RESULT([$msmdir])
6512     else
6513         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6514             AC_MSG_FAILURE([not found])
6515         else
6516             AC_MSG_WARN([not found (check config.log)])
6517             add_warning "MSM none of ${my_msm_files} found"
6518         fi
6519     fi
6522 find_msvc_x64_dlls()
6524     # Return value: $msvcdllpath, $msvcdlls
6526     AC_MSG_CHECKING([for MSVC x64 DLL path])
6528     dnl Order crtver in increasing order. Then check the directories returned by
6529     dnl ls in an inner loop; assuming they are also ordered in increasing order,
6530     dnl the result will be the highest CRT version found in the highest directory.
6532     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6533     case "$VCVER" in
6534     16.0 | 17.0)
6535         for crtver in 141 142 143; do
6536             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6537                 echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT" >&5
6538                 if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"; then
6539                     msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"
6540                 fi
6541             done
6542         done
6543         ;;
6544     esac
6545     AC_MSG_RESULT([$msvcdllpath])
6546     AC_MSG_CHECKING([for MSVC x64 DLLs])
6547     msvcdlls="msvcp140.dll vcruntime140.dll"
6548     for dll in $msvcdlls; do
6549         if ! test -f "$msvcdllpath/$dll"; then
6550             AC_MSG_FAILURE([missing $dll])
6551         fi
6552     done
6553     AC_MSG_RESULT([found all ($msvcdlls)])
6556 dnl =========================================
6557 dnl Check for the Windows  SDK.
6558 dnl =========================================
6559 if test "$_os" = "WINNT"; then
6560     AC_MSG_CHECKING([for Windows SDK])
6561     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6562         find_winsdk
6563         WINDOWS_SDK_HOME=$winsdktest
6565         # normalize if found
6566         if test -n "$WINDOWS_SDK_HOME"; then
6567             WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
6568             WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
6569         fi
6571         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6572     fi
6574     if test -n "$WINDOWS_SDK_HOME"; then
6575         # Remove a possible trailing backslash
6576         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6578         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6579              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6580              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6581             have_windows_sdk_headers=yes
6582         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6583              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6584              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6585             have_windows_sdk_headers=yes
6586         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6587              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6588              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6589             have_windows_sdk_headers=yes
6590         else
6591             have_windows_sdk_headers=no
6592         fi
6594         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6595             have_windows_sdk_libs=yes
6596         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6597             have_windows_sdk_libs=yes
6598         else
6599             have_windows_sdk_libs=no
6600         fi
6602         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6603             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6604 the  Windows SDK are installed.])
6605         fi
6606     fi
6608     if test -z "$WINDOWS_SDK_HOME"; then
6609         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6610     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6611         WINDOWS_SDK_VERSION=80
6612         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6613     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6614         WINDOWS_SDK_VERSION=81
6615         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6616     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6617         WINDOWS_SDK_VERSION=10
6618         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6619     else
6620         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6621     fi
6622     PathFormat "$WINDOWS_SDK_HOME"
6623     WINDOWS_SDK_HOME="$formatted_path"
6624     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6625     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6626         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6627         if test -d "$WINDOWS_SDK_HOME/include/um"; then
6628             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6629         elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then
6630             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6631         fi
6632     fi
6634     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6635     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6636     dnl but not in v8.0), so allow this to be overridden with a
6637     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6638     dnl and configuration error if no WiLangId.vbs is found would arguably be
6639     dnl better, but I do not know under which conditions exactly it is needed by
6640     dnl msiglobal.pm:
6641     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6642         WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6643         WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6644         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6645             WINDOWS_SDK_WILANGID="${WINDOWS_SDK_HOME}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6646             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6647         fi
6648         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6649             WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6650             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6651         fi
6652         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6653             WINDOWS_SDK_WILANGID=$(cygpath -sm "C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs")
6654             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6655         fi
6656     fi
6657     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6658         if test -n "$with_package_format" -a "$with_package_format" != no; then
6659             for i in "$with_package_format"; do
6660                 if test "$i" = "msi"; then
6661                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6662                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6663                     fi
6664                 fi
6665             done
6666         fi
6667     fi
6669 AC_SUBST(WINDOWS_SDK_HOME)
6670 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6671 AC_SUBST(WINDOWS_SDK_VERSION)
6672 AC_SUBST(WINDOWS_SDK_WILANGID)
6674 if test "$build_os" = "cygwin"; then
6675     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6676     dnl dir, it also determines that dir's path w/o an arch segment if any,
6677     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6678     AC_MSG_CHECKING([for midl.exe])
6680     find_winsdk
6681     if test -n "$winsdkbinsubdir" \
6682         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6683     then
6684         MIDL_PATH=$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6685         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin/$winsdkbinsubdir
6686     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6687         MIDL_PATH=$winsdktest/Bin/$WIN_BUILD_ARCH
6688         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6689     elif test -f "$winsdktest/Bin/midl.exe"; then
6690         MIDL_PATH=$winsdktest/Bin
6691         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6692     fi
6693     if test ! -f "$MIDL_PATH/midl.exe"; then
6694         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6695     else
6696         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6697     fi
6699     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6700     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6702     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6703          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6704          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6705          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6706     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6707          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6708          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6709          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
6710     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
6711          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
6712          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6713          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
6714     else
6715         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
6716     fi
6718     dnl Check csc.exe
6719     AC_MSG_CHECKING([for csc.exe])
6720     find_csc
6721     if test -f "$csctest/csc.exe"; then
6722         CSC_PATH="$csctest"
6723     fi
6724     if test ! -f "$CSC_PATH/csc.exe"; then
6725         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
6726     else
6727         AC_MSG_RESULT([$CSC_PATH/csc.exe])
6728     fi
6730     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
6732     dnl Check al.exe
6733     AC_MSG_CHECKING([for al.exe])
6734     find_winsdk
6735     if test -n "$winsdkbinsubdir" \
6736         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
6737     then
6738         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
6739     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/al.exe"; then
6740         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
6741     elif test -f "$winsdktest/Bin/al.exe"; then
6742         AL_PATH="$winsdktest/Bin"
6743     fi
6745     if test -z "$AL_PATH"; then
6746         find_al
6747         if test -f "$altest/bin/al.exe"; then
6748             AL_PATH="$altest/bin"
6749         elif test -f "$altest/al.exe"; then
6750             AL_PATH="$altest"
6751         fi
6752     fi
6753     if test ! -f "$AL_PATH/al.exe"; then
6754         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
6755     else
6756         AC_MSG_RESULT([$AL_PATH/al.exe])
6757     fi
6759     AL_PATH=`win_short_path_for_make "$AL_PATH"`
6761     dnl Check mscoree.lib / .NET Framework dir
6762     AC_MSG_CHECKING(.NET Framework)
6763     find_dotnetsdk46
6764     PathFormat "$frametest"
6765     frametest="$formatted_path"
6766     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6767         DOTNET_FRAMEWORK_HOME="$frametest"
6768     else
6769         find_winsdk
6770         if test -f "$winsdktest/lib/mscoree.lib" -o -f "$winsdktest/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6771             DOTNET_FRAMEWORK_HOME="$winsdktest"
6772         fi
6773     fi
6774     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
6775         AC_MSG_ERROR([mscoree.lib not found])
6776     fi
6777     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
6779     PathFormat "$MIDL_PATH"
6780     MIDL_PATH="$formatted_path"
6782     PathFormat "$AL_PATH"
6783     AL_PATH="$formatted_path"
6785     PathFormat "$DOTNET_FRAMEWORK_HOME"
6786     DOTNET_FRAMEWORK_HOME="$formatted_path"
6788     PathFormat "$CSC_PATH"
6789     CSC_PATH="$formatted_path"
6792 dnl ===================================================================
6793 dnl Testing for C++ compiler and version...
6794 dnl ===================================================================
6796 if test "$_os" != "WINNT"; then
6797     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that
6798     save_CXXFLAGS=$CXXFLAGS
6799     AC_PROG_CXX
6800     CXXFLAGS=$save_CXXFLAGS
6801     if test -z "$CXX_BASE"; then
6802         CXX_BASE=`first_arg_basename "$CXX"`
6803     fi
6806 dnl check for GNU C++ compiler version
6807 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
6808     AC_MSG_CHECKING([the GNU C++ compiler version])
6810     _gpp_version=`$CXX -dumpversion`
6811     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
6813     if test "$_gpp_majmin" -lt "700"; then
6814         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
6815     else
6816         AC_MSG_RESULT([ok (g++ $_gpp_version)])
6817     fi
6819     dnl see https://code.google.com/p/android/issues/detail?id=41770
6820         glibcxx_threads=no
6821         AC_LANG_PUSH([C++])
6822         AC_REQUIRE_CPP
6823         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
6824         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
6825             #include <bits/c++config.h>]],[[
6826             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
6827             && !defined(_GLIBCXX__PTHREADS) \
6828             && !defined(_GLIBCXX_HAS_GTHREADS)
6829             choke me
6830             #endif
6831         ]])],[AC_MSG_RESULT([yes])
6832         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
6833         AC_LANG_POP([C++])
6834         if test $glibcxx_threads = yes; then
6835             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
6836         fi
6838 AC_SUBST(BOOST_CXXFLAGS)
6841 # prefx CXX with ccache if needed
6843 if test "$CCACHE" != ""; then
6844     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
6845     AC_LANG_PUSH([C++])
6846     save_CXXFLAGS=$CXXFLAGS
6847     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
6848     # msvc does not fail on unknown options, check stdout
6849     if test "$COM" = MSC; then
6850         CXXFLAGS="$CXXFLAGS -nologo"
6851     fi
6852     save_ac_cxx_werror_flag=$ac_cxx_werror_flag
6853     ac_cxx_werror_flag=yes
6854     dnl an empty program will do, we're checking the compiler flags
6855     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
6856                       [use_ccache=yes], [use_ccache=no])
6857     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
6858         AC_MSG_RESULT([yes])
6859     else
6860         CXX="$CCACHE $CXX"
6861         CXX_BASE="ccache $CXX_BASE"
6862         AC_MSG_RESULT([no])
6863     fi
6864     CXXFLAGS=$save_CXXFLAGS
6865     ac_cxx_werror_flag=$save_ac_cxx_werror_flag
6866     AC_LANG_POP([C++])
6869 dnl ===================================================================
6870 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
6871 dnl ===================================================================
6873 if test "$_os" != "WINNT"; then
6874     AC_PROG_CXXCPP
6876     dnl Check whether there's a C pre-processor.
6877     AC_PROG_CPP
6881 dnl ===================================================================
6882 dnl Find integral type sizes and alignments
6883 dnl ===================================================================
6885 if test "$_os" != "WINNT"; then
6887     AC_CHECK_SIZEOF(long)
6888     AC_CHECK_SIZEOF(short)
6889     AC_CHECK_SIZEOF(int)
6890     AC_CHECK_SIZEOF(long long)
6891     AC_CHECK_SIZEOF(double)
6892     AC_CHECK_SIZEOF(void*)
6893     AC_CHECK_SIZEOF(size_t)
6895     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
6896     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
6897     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
6898     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
6899     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
6900     SIZEOF_SIZE_T=$ac_cv_sizeof_size_t
6902     dnl Allow build without AC_CHECK_ALIGNOF, grrr
6903     m4_pattern_allow([AC_CHECK_ALIGNOF])
6904     m4_ifdef([AC_CHECK_ALIGNOF],
6905         [
6906             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
6907             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
6908             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
6909             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
6910         ],
6911         [
6912             case "$_os-$host_cpu" in
6913             Linux-i686)
6914                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6915                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6916                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
6917                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
6918                 ;;
6919             Linux-x86_64)
6920                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6921                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6922                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
6923                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
6924                 ;;
6925             *)
6926                 if test -z "$ac_cv_alignof_short" -o \
6927                         -z "$ac_cv_alignof_int" -o \
6928                         -z "$ac_cv_alignof_long" -o \
6929                         -z "$ac_cv_alignof_double"; then
6930                    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.])
6931                 fi
6932                 ;;
6933             esac
6934         ])
6936     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
6937     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
6938     if test $ac_cv_sizeof_long -eq 8; then
6939         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
6940     elif test $ac_cv_sizeof_double -eq 8; then
6941         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
6942     else
6943         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
6944     fi
6946     dnl Check for large file support
6947     AC_SYS_LARGEFILE
6948     if test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
6949         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
6950     fi
6951     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
6952         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
6953     fi
6954 else
6955     # Hardcode for MSVC
6956     SAL_TYPES_SIZEOFSHORT=2
6957     SAL_TYPES_SIZEOFINT=4
6958     SAL_TYPES_SIZEOFLONG=4
6959     SAL_TYPES_SIZEOFLONGLONG=8
6960     if test $WIN_HOST_BITS -eq 32; then
6961         SAL_TYPES_SIZEOFPOINTER=4
6962         SIZEOF_SIZE_T=4
6963     else
6964         SAL_TYPES_SIZEOFPOINTER=8
6965         SIZEOF_SIZE_T=8
6966     fi
6967     SAL_TYPES_ALIGNMENT2=2
6968     SAL_TYPES_ALIGNMENT4=4
6969     SAL_TYPES_ALIGNMENT8=8
6970     LFS_CFLAGS=''
6972 AC_SUBST(LFS_CFLAGS)
6973 AC_SUBST(SIZEOF_SIZE_T)
6975 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
6976 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
6977 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
6978 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
6979 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
6980 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
6981 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
6982 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
6984 dnl ===================================================================
6985 dnl Check whether to enable runtime optimizations
6986 dnl ===================================================================
6987 ENABLE_RUNTIME_OPTIMIZATIONS=
6988 AC_MSG_CHECKING([whether to enable runtime optimizations])
6989 if test -z "$enable_runtime_optimizations"; then
6990     for i in $CC; do
6991         case $i in
6992         -fsanitize=*)
6993             enable_runtime_optimizations=no
6994             break
6995             ;;
6996         esac
6997     done
6999 if test "$enable_runtime_optimizations" != no; then
7000     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
7001     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
7002     AC_MSG_RESULT([yes])
7003 else
7004     AC_MSG_RESULT([no])
7006 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
7008 dnl ===================================================================
7009 dnl Check if valgrind headers are available
7010 dnl ===================================================================
7011 ENABLE_VALGRIND=
7012 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
7013     prev_cppflags=$CPPFLAGS
7014     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
7015     # or where does it come from?
7016     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
7017     AC_CHECK_HEADER([valgrind/valgrind.h],
7018         [ENABLE_VALGRIND=TRUE])
7019     CPPFLAGS=$prev_cppflags
7021 AC_SUBST([ENABLE_VALGRIND])
7022 if test -z "$ENABLE_VALGRIND"; then
7023     if test "$with_valgrind" = yes; then
7024         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
7025     fi
7026     VALGRIND_CFLAGS=
7028 AC_SUBST([VALGRIND_CFLAGS])
7031 dnl ===================================================================
7032 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
7033 dnl ===================================================================
7035 # We need at least the sys/sdt.h include header.
7036 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
7037 if test "$SDT_H_FOUND" = "TRUE"; then
7038     # Found sys/sdt.h header, now make sure the c++ compiler works.
7039     # Old g++ versions had problems with probes in constructors/destructors.
7040     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
7041     AC_LANG_PUSH([C++])
7042     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
7043     #include <sys/sdt.h>
7044     class ProbeClass
7045     {
7046     private:
7047       int& ref;
7048       const char *name;
7050     public:
7051       ProbeClass(int& v, const char *n) : ref(v), name(n)
7052       {
7053         DTRACE_PROBE2(_test_, cons, name, ref);
7054       }
7056       void method(int min)
7057       {
7058         DTRACE_PROBE3(_test_, meth, name, ref, min);
7059         ref -= min;
7060       }
7062       ~ProbeClass()
7063       {
7064         DTRACE_PROBE2(_test_, dest, name, ref);
7065       }
7066     };
7067     ]],[[
7068     int i = 64;
7069     DTRACE_PROBE1(_test_, call, i);
7070     ProbeClass inst = ProbeClass(i, "call");
7071     inst.method(24);
7072     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
7073           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
7074     AC_LANG_POP([C++])
7076 AC_CONFIG_HEADERS([config_host/config_probes.h])
7078 dnl ===================================================================
7079 dnl GCC features
7080 dnl ===================================================================
7081 HAVE_GCC_STACK_CLASH_PROTECTION=
7082 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7083     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
7084     save_CFLAGS=$CFLAGS
7085     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
7086     AC_LINK_IFELSE(
7087         [AC_LANG_PROGRAM(, [[return 0;]])],
7088         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
7089         [AC_MSG_RESULT([no])])
7090     CFLAGS=$save_CFLAGS
7092     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
7093     save_CFLAGS=$CFLAGS
7094     CFLAGS="$CFLAGS -Werror -mno-avx"
7095     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
7096     CFLAGS=$save_CFLAGS
7097     if test "$HAVE_GCC_AVX" = "TRUE"; then
7098         AC_MSG_RESULT([yes])
7099     else
7100         AC_MSG_RESULT([no])
7101     fi
7103     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
7104     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7105     int v = 0;
7106     if (__sync_add_and_fetch(&v, 1) != 1 ||
7107         __sync_sub_and_fetch(&v, 1) != 0)
7108         return 1;
7109     __sync_synchronize();
7110     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
7111         v != 1)
7112         return 1;
7113     return 0;
7114 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
7115     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
7116         AC_MSG_RESULT([yes])
7117         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
7118     else
7119         AC_MSG_RESULT([no])
7120     fi
7122     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
7123     AC_LANG_PUSH([C++])
7124     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7125             #include <cstddef>
7126             #include <cxxabi.h>
7127             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
7128         ])], [
7129             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
7130             AC_MSG_RESULT([yes])
7131         ], [AC_MSG_RESULT([no])])
7132     AC_LANG_POP([C++])
7134     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
7135     AC_LANG_PUSH([C++])
7136     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7137             #include <cstddef>
7138             #include <cxxabi.h>
7139             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7140         ])], [
7141             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7142             AC_MSG_RESULT([yes])
7143         ], [AC_MSG_RESULT([no])])
7144     AC_LANG_POP([C++])
7146     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7147     AC_LANG_PUSH([C++])
7148     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7149             #include <cxxabi.h>
7150             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7151         ])], [
7152             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7153             AC_MSG_RESULT([yes])
7154         ], [AC_MSG_RESULT([no])])
7155     AC_LANG_POP([C++])
7157     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7158     AC_LANG_PUSH([C++])
7159     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7160             #include <cstddef>
7161             #include <cxxabi.h>
7162             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7163         ])], [
7164             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7165             AC_MSG_RESULT([yes])
7166         ], [AC_MSG_RESULT([no])])
7167     AC_LANG_POP([C++])
7169     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7170     AC_LANG_PUSH([C++])
7171     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7172             #include <cstddef>
7173             #include <cxxabi.h>
7174             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7175         ])], [
7176             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7177             AC_MSG_RESULT([yes])
7178         ], [AC_MSG_RESULT([no])])
7179     AC_LANG_POP([C++])
7181     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7182     AC_LANG_PUSH([C++])
7183     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7184             #include <cxxabi.h>
7185             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7186         ])], [
7187             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7188             AC_MSG_RESULT([yes])
7189         ], [AC_MSG_RESULT([no])])
7190     AC_LANG_POP([C++])
7192     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7193     AC_LANG_PUSH([C++])
7194     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7195             #include <cxxabi.h>
7196             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7197         ])], [
7198             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7199             AC_MSG_RESULT([yes])
7200         ], [AC_MSG_RESULT([no])])
7201     AC_LANG_POP([C++])
7203     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7204     AC_LANG_PUSH([C++])
7205     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7206             #include <cxxabi.h>
7207             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7208         ])], [
7209             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7210             AC_MSG_RESULT([yes])
7211         ], [AC_MSG_RESULT([no])])
7212     AC_LANG_POP([C++])
7214     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info in cxxabi.h])
7215     AC_LANG_PUSH([C++])
7216     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7217             #include <cstddef>
7218             #include <cxxabi.h>
7219             std::size_t f() { return sizeof(__cxxabiv1::__si_class_type_info); }
7220         ])], [
7221             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7222             AC_MSG_RESULT([yes])
7223         ], [AC_MSG_RESULT([no])])
7224     AC_LANG_POP([C++])
7226     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7227     AC_LANG_PUSH([C++])
7228     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7229             #include <cstddef>
7230             #include <cxxabi.h>
7231             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7232         ])], [
7233             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7234             AC_MSG_RESULT([yes])
7235         ], [AC_MSG_RESULT([no])])
7236     AC_LANG_POP([C++])
7239 AC_SUBST(HAVE_GCC_AVX)
7240 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7241 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7243 dnl ===================================================================
7244 dnl Identify the C++ library
7245 dnl ===================================================================
7247 AC_MSG_CHECKING([what the C++ library is])
7248 HAVE_LIBSTDCPP=
7249 AC_LANG_PUSH([C++])
7250 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7251 #include <utility>
7252 #ifndef __GLIBCXX__
7253 foo bar
7254 #endif
7255 ]])],
7256     [CPP_LIBRARY=GLIBCXX
7257      cpp_library_name="GNU libstdc++"
7258      HAVE_LIBSTDCPP=TRUE
7259     ],
7260     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7261 #include <utility>
7262 #ifndef _LIBCPP_VERSION
7263 foo bar
7264 #endif
7265 ]])],
7266     [CPP_LIBRARY=LIBCPP
7267      cpp_library_name="LLVM libc++"
7268      AC_DEFINE([HAVE_LIBCXX])
7269     ],
7270     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7271 #include <utility>
7272 #ifndef _MSC_VER
7273 foo bar
7274 #endif
7275 ]])],
7276     [CPP_LIBRARY=MSVCRT
7277      cpp_library_name="Microsoft"
7278     ],
7279     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7280 AC_MSG_RESULT([$cpp_library_name])
7281 AC_LANG_POP([C++])
7282 AC_SUBST([HAVE_LIBSTDCPP])
7284 dnl ===================================================================
7285 dnl Check for gperf
7286 dnl ===================================================================
7287 AC_PATH_PROG(GPERF, gperf)
7288 if test -z "$GPERF"; then
7289     AC_MSG_ERROR([gperf not found but needed. Install it.])
7291 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7292     GPERF=`cygpath -m $GPERF`
7294 AC_MSG_CHECKING([whether gperf is new enough])
7295 my_gperf_ver1=$($GPERF --version | head -n 1)
7296 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7297 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7298 if test "$my_gperf_ver3" -ge 301; then
7299     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7300 else
7301     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7303 AC_SUBST(GPERF)
7305 dnl ===================================================================
7306 dnl Check for system libcmis
7307 dnl ===================================================================
7308 # libcmis requires curl and we can't build curl for iOS
7309 if test "$test_cmis" = "yes" -a "$enable_cmis" = "yes"; then
7310     libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.5 >= 0.5.2])
7311     ENABLE_LIBCMIS=TRUE
7312 else
7313     ENABLE_LIBCMIS=
7315 AC_SUBST(ENABLE_LIBCMIS)
7317 dnl ===================================================================
7318 dnl C++11
7319 dnl ===================================================================
7321 AC_MSG_CHECKING([whether $CXX_BASE supports C++17])
7322 CXXFLAGS_CXX11=
7323 if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7324     if test "$with_latest_c__" = yes; then
7325         CXXFLAGS_CXX11=-std:c++latest
7326     else
7327         CXXFLAGS_CXX11=-std:c++17
7328     fi
7329     CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus"
7330 elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7331     my_flags='-std=c++17 -std=c++1z'
7332     if test "$with_latest_c__" = yes; then
7333         my_flags="-std=c++23 -std=c++2b -std=c++20 -std=c++2a $my_flags"
7334     fi
7335     for flag in $my_flags; do
7336         if test "$COM" = MSC; then
7337             flag="-Xclang $flag"
7338         fi
7339         save_CXXFLAGS=$CXXFLAGS
7340         CXXFLAGS="$CXXFLAGS $flag -Werror"
7341         if test "$SYSTEM_LIBCMIS" = TRUE; then
7342             CXXFLAGS="$CXXFLAGS -DSYSTEM_LIBCMIS $LIBCMIS_CFLAGS"
7343         fi
7344         AC_LANG_PUSH([C++])
7345         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7346             #include <algorithm>
7347             #include <functional>
7348             #include <vector>
7350             #if defined SYSTEM_LIBCMIS
7351             // See ucb/source/ucp/cmis/auth_provider.hxx:
7352             #if !defined __clang__
7353             #pragma GCC diagnostic push
7354             #pragma GCC diagnostic ignored "-Wdeprecated"
7355             #pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
7356             #endif
7357             #include <libcmis/libcmis.hxx>
7358             #if !defined __clang__
7359             #pragma GCC diagnostic pop
7360             #endif
7361             #endif
7363             void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7364                 std::sort(v.begin(), v.end(), fn);
7365             }
7366             ]])],[CXXFLAGS_CXX11=$flag])
7367         AC_LANG_POP([C++])
7368         CXXFLAGS=$save_CXXFLAGS
7369         if test -n "$CXXFLAGS_CXX11"; then
7370             break
7371         fi
7372     done
7374 if test -n "$CXXFLAGS_CXX11"; then
7375     AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7376 else
7377     AC_MSG_ERROR(no)
7379 AC_SUBST(CXXFLAGS_CXX11)
7381 if test "$GCC" = "yes"; then
7382     save_CXXFLAGS=$CXXFLAGS
7383     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7384     CHECK_L_ATOMIC
7385     CXXFLAGS=$save_CXXFLAGS
7386     AC_SUBST(ATOMIC_LIB)
7389 dnl Test for temporarily incompatible libstdc++ 4.7.{0,1}, where
7390 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=179528> introduced
7391 dnl an additional member _M_size into C++11 std::list towards 4.7.0 and
7392 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=189186> removed it
7393 dnl again towards 4.7.2:
7394 if test $CPP_LIBRARY = GLIBCXX; then
7395     AC_MSG_CHECKING([whether using C++11 causes libstdc++ 4.7.0/4.7.1 ABI breakage])
7396     AC_LANG_PUSH([C++])
7397     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7398 #include <list>
7399 #if !defined __GLIBCXX__ || (__GLIBCXX__ != 20120322 && __GLIBCXX__ != 20120614)
7400     // according to <https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html>:
7401     //   GCC 4.7.0: 20120322
7402     //   GCC 4.7.1: 20120614
7403     // and using a range check is not possible as the mapping between
7404     // __GLIBCXX__ values and GCC versions is not monotonic
7405 /* ok */
7406 #else
7407 abi broken
7408 #endif
7409         ]])], [AC_MSG_RESULT(no, ok)],
7410         [AC_MSG_ERROR(yes)])
7411     AC_LANG_POP([C++])
7414 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7415 save_CXXFLAGS=$CXXFLAGS
7416 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7417 AC_LANG_PUSH([C++])
7419 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7420 #include <stddef.h>
7422 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7424 namespace
7426         struct b
7427         {
7428                 int i;
7429                 int j;
7430         };
7432 ]], [[
7433 struct a
7435         int i;
7436         int j;
7438 a thinga[]={{0,0}, {1,1}};
7439 b thingb[]={{0,0}, {1,1}};
7440 size_t i = sizeof(sal_n_array_size(thinga));
7441 size_t j = sizeof(sal_n_array_size(thingb));
7442 return !(i != 0 && j != 0);
7444     ], [ AC_MSG_RESULT(yes) ],
7445     [ AC_MSG_ERROR(no)])
7446 AC_LANG_POP([C++])
7447 CXXFLAGS=$save_CXXFLAGS
7449 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7450 if test "$GCC" = yes; then
7451     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7452     AC_LANG_PUSH([C++])
7453     save_CXXFLAGS=$CXXFLAGS
7454     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7455     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7456     CXXFLAGS=$save_CXXFLAGS
7457     AC_LANG_POP([C++])
7458     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7459         AC_MSG_RESULT([yes])
7460     else
7461         AC_MSG_RESULT([no])
7462     fi
7464 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7466 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7467 AC_LANG_PUSH([C++])
7468 save_CXXFLAGS=$CXXFLAGS
7469 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7470 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7471         #include <algorithm>
7472         #include <initializer_list>
7473         #include <vector>
7474         template<typename T> class S {
7475         private:
7476             std::vector<T> v_;
7477         public:
7478             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7479         };
7480         constinit S<int> s{3, 2, 1};
7481     ])], [
7482         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7483         AC_MSG_RESULT([yes])
7484     ], [AC_MSG_RESULT([no])])
7485 CXXFLAGS=$save_CXXFLAGS
7486 AC_LANG_POP([C++])
7488 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a <span> with unsigned size_type])
7489 AC_LANG_PUSH([C++])
7490 save_CXXFLAGS=$CXXFLAGS
7491 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7492 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7493         #include <span>
7494         #include <type_traits>
7495         // Don't check size_type directly, as it was called index_type before P1872R0:
7496         void f(std::span<int> s) { static_assert(std::is_unsigned_v<decltype(s.size())>); };
7497     ])], [
7498         AC_DEFINE([HAVE_CPP_SPAN],[1])
7499         AC_MSG_RESULT([yes])
7500     ], [AC_MSG_RESULT([no])])
7501 CXXFLAGS=$save_CXXFLAGS
7502 AC_LANG_POP([C++])
7504 AC_MSG_CHECKING([whether $CXX_BASE implements C++ DR P1155R3])
7505 AC_LANG_PUSH([C++])
7506 save_CXXFLAGS=$CXXFLAGS
7507 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7508 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7509         struct S1 { S1(S1 &&); };
7510         struct S2: S1 {};
7511         S1 f(S2 s) { return s; }
7512     ])], [
7513         AC_DEFINE([HAVE_P1155R3],[1])
7514         AC_MSG_RESULT([yes])
7515     ], [AC_MSG_RESULT([no])])
7516 CXXFLAGS=$save_CXXFLAGS
7517 AC_LANG_POP([C++])
7519 AC_MSG_CHECKING([whether $CXX_BASE supports C++20 std::atomic_ref])
7520 HAVE_CXX20_ATOMIC_REF=
7521 AC_LANG_PUSH([C++])
7522 save_CXXFLAGS=$CXXFLAGS
7523 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7524 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7525         #include <atomic>
7526         int x;
7527         std::atomic_ref<int> y(x);
7528     ])], [
7529         HAVE_CXX20_ATOMIC_REF=TRUE
7530         AC_MSG_RESULT([yes])
7531     ], [AC_MSG_RESULT([no])])
7532 CXXFLAGS=$save_CXXFLAGS
7533 AC_LANG_POP([C++])
7534 AC_SUBST([HAVE_CXX20_ATOMIC_REF])
7536 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7537 dnl which is included in -Wextra anyway):
7538 HAVE_WDEPRECATED_COPY_DTOR=
7539 if test "$GCC" = yes; then
7540     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7541     AC_LANG_PUSH([C++])
7542     save_CXXFLAGS=$CXXFLAGS
7543     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7544     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7545             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7546             AC_MSG_RESULT([yes])
7547         ], [AC_MSG_RESULT([no])])
7548     CXXFLAGS=$save_CXXFLAGS
7549     AC_LANG_POP([C++])
7551 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7553 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7554 dnl uninitialized warning for code like
7556 dnl   OString f();
7557 dnl   boost::optional<OString> * g(bool b) {
7558 dnl       boost::optional<OString> o;
7559 dnl       if (b) o = f();
7560 dnl       return new boost::optional<OString>(o);
7561 dnl   }
7563 dnl (as is e.g. present, in a slightly more elaborate form, in
7564 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7565 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7566 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7567 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7568     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7569     AC_LANG_PUSH([C++])
7570     save_CXXFLAGS=$CXXFLAGS
7571     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7572     if test "$ENABLE_OPTIMIZED" = TRUE; then
7573         CXXFLAGS="$CXXFLAGS -O2"
7574     else
7575         CXXFLAGS="$CXXFLAGS -O0"
7576     fi
7577     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7578             #include <new>
7579             void f1(int);
7580             struct S1 {
7581                 ~S1() { f1(n); }
7582                 int n = 0;
7583             };
7584             struct S2 {
7585                 S2() {}
7586                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7587                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7588                 void set(S1 s) {
7589                     new (stg) S1(s);
7590                     init = true;
7591                 }
7592                 bool init = false;
7593                 char stg[sizeof (S1)];
7594             } ;
7595             S1 f2();
7596             S2 * f3(bool b) {
7597                 S2 o;
7598                 if (b) o.set(f2());
7599                 return new S2(o);
7600             }
7601         ]])], [AC_MSG_RESULT([no])], [
7602             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7603             AC_MSG_RESULT([yes])
7604         ])
7605     CXXFLAGS=$save_CXXFLAGS
7606     AC_LANG_POP([C++])
7608 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7610 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7611 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7612 dnl hits us e.g. with GCC 10 and --enable-optimized at
7614 dnl   In file included from include/rtl/string.hxx:49,
7615 dnl                    from include/rtl/ustring.hxx:43,
7616 dnl                    from include/osl/file.hxx:35,
7617 dnl                    from include/codemaker/global.hxx:28,
7618 dnl                    from include/codemaker/options.hxx:23,
7619 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7620 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7621 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,
7622 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,
7623 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,
7624 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7625 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7626 dnl      78 |         memcpy( buffer, data, length );
7627 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7628 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7629 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7630     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7631     AC_LANG_PUSH([C++])
7632     save_CXXFLAGS=$CXXFLAGS
7633     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7634     if test "$ENABLE_OPTIMIZED" = TRUE; then
7635         CXXFLAGS="$CXXFLAGS -O2"
7636     else
7637         CXXFLAGS="$CXXFLAGS -O0"
7638     fi
7639     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7640     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7641             void fill(char const * begin, char const * end, char c);
7642             struct q {
7643                 char ids[4];
7644                 char username[6];
7645             };
7646             void test(q & c) {
7647                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
7648                 __builtin_strncpy(c.username, "root", sizeof(c.username));
7649             }
7650         ]])], [AC_MSG_RESULT([no])], [
7651             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
7652             AC_MSG_RESULT([yes])
7653         ])
7654     CXXFLAGS=$save_CXXFLAGS
7655     AC_LANG_POP([C++])
7657 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
7659 HAVE_DLLEXPORTINLINES=
7660 dnl At least for Clang 14 trunk, -Zc:dllexportInlines- would cause lots of unresolved symbols when
7661 dnl linking e.g. Library_cppuhelper, for whatever reason:
7662 if test "$_os" = "WINNT" && test "$COM_IS_CLANG" != TRUE; then
7663     AC_MSG_CHECKING([whether $CXX_BASE supports -Zc:dllexportInlines-])
7664     AC_LANG_PUSH([C++])
7665     save_CXXFLAGS=$CXXFLAGS
7666     CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
7667     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7668             HAVE_DLLEXPORTINLINES=TRUE
7669             AC_MSG_RESULT([yes])
7670         ], [AC_MSG_RESULT([no])])
7671     CXXFLAGS=$save_CXXFLAGS
7672     AC_LANG_POP([C++])
7674 AC_SUBST([HAVE_DLLEXPORTINLINES])
7676 dnl ===================================================================
7677 dnl CPU Intrinsics support - SSE, AVX
7678 dnl ===================================================================
7680 CXXFLAGS_INTRINSICS_SSE2=
7681 CXXFLAGS_INTRINSICS_SSSE3=
7682 CXXFLAGS_INTRINSICS_SSE41=
7683 CXXFLAGS_INTRINSICS_SSE42=
7684 CXXFLAGS_INTRINSICS_AVX=
7685 CXXFLAGS_INTRINSICS_AVX2=
7686 CXXFLAGS_INTRINSICS_AVX512=
7687 CXXFLAGS_INTRINSICS_AVX512F=
7688 CXXFLAGS_INTRINSICS_F16C=
7689 CXXFLAGS_INTRINSICS_FMA=
7691 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7692     # GCC, Clang or Clang-cl (clang-cl + MSVC's -arch options don't work well together)
7693     flag_sse2=-msse2
7694     flag_ssse3=-mssse3
7695     flag_sse41=-msse4.1
7696     flag_sse42=-msse4.2
7697     flag_avx=-mavx
7698     flag_avx2=-mavx2
7699     flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
7700     flag_avx512f=-mavx512f
7701     flag_f16c=-mf16c
7702     flag_fma=-mfma
7703 else
7704     # With MSVC using -arch is in fact not necessary for being able
7705     # to use CPU intrinsics, code using AVX512F intrinsics will compile
7706     # even if compiled with -arch:AVX, the -arch option really only affects
7707     # instructions generated for C/C++ code.
7708     # So use the matching same (or lower) -arch options, but only in order
7709     # to generate the best matching instructions for the C++ code surrounding
7710     # the intrinsics.
7711     # SSE2 is the default for x86/x64, so no need to specify the option.
7712     flag_sse2=
7713     # No specific options for these, use the next lower.
7714     flag_ssse3="$flag_sse2"
7715     flag_sse41="$flag_sse2"
7716     flag_sse42="$flag_sse2"
7717     flag_avx=-arch:AVX
7718     flag_avx2=-arch:AVX2
7719     flag_avx512=-arch:AVX512
7720     # Using -arch:AVX512 would enable more than just AVX512F, so use only AVX2.
7721     flag_avx512f=-arch:AVX2
7722     # No MSVC options for these.
7723     flag_f16c="$flag_sse2"
7724     flag_fma="$flag_sse2"
7727 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
7728 AC_LANG_PUSH([C++])
7729 save_CXXFLAGS=$CXXFLAGS
7730 CXXFLAGS="$CXXFLAGS $flag_sse2"
7731 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7732     #include <emmintrin.h>
7733     int main () {
7734         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7735         c = _mm_xor_si128 (a, b);
7736         return 0;
7737     }
7738     ])],
7739     [can_compile_sse2=yes],
7740     [can_compile_sse2=no])
7741 AC_LANG_POP([C++])
7742 CXXFLAGS=$save_CXXFLAGS
7743 AC_MSG_RESULT([${can_compile_sse2}])
7744 if test "${can_compile_sse2}" = "yes" ; then
7745     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
7748 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
7749 AC_LANG_PUSH([C++])
7750 save_CXXFLAGS=$CXXFLAGS
7751 CXXFLAGS="$CXXFLAGS $flag_ssse3"
7752 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7753     #include <tmmintrin.h>
7754     int main () {
7755         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7756         c = _mm_maddubs_epi16 (a, b);
7757         return 0;
7758     }
7759     ])],
7760     [can_compile_ssse3=yes],
7761     [can_compile_ssse3=no])
7762 AC_LANG_POP([C++])
7763 CXXFLAGS=$save_CXXFLAGS
7764 AC_MSG_RESULT([${can_compile_ssse3}])
7765 if test "${can_compile_ssse3}" = "yes" ; then
7766     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
7769 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
7770 AC_LANG_PUSH([C++])
7771 save_CXXFLAGS=$CXXFLAGS
7772 CXXFLAGS="$CXXFLAGS $flag_sse41"
7773 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7774     #include <smmintrin.h>
7775     int main () {
7776         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7777         c = _mm_cmpeq_epi64 (a, b);
7778         return 0;
7779     }
7780     ])],
7781     [can_compile_sse41=yes],
7782     [can_compile_sse41=no])
7783 AC_LANG_POP([C++])
7784 CXXFLAGS=$save_CXXFLAGS
7785 AC_MSG_RESULT([${can_compile_sse41}])
7786 if test "${can_compile_sse41}" = "yes" ; then
7787     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
7790 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
7791 AC_LANG_PUSH([C++])
7792 save_CXXFLAGS=$CXXFLAGS
7793 CXXFLAGS="$CXXFLAGS $flag_sse42"
7794 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7795     #include <nmmintrin.h>
7796     int main () {
7797         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7798         c = _mm_cmpgt_epi64 (a, b);
7799         return 0;
7800     }
7801     ])],
7802     [can_compile_sse42=yes],
7803     [can_compile_sse42=no])
7804 AC_LANG_POP([C++])
7805 CXXFLAGS=$save_CXXFLAGS
7806 AC_MSG_RESULT([${can_compile_sse42}])
7807 if test "${can_compile_sse42}" = "yes" ; then
7808     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
7811 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
7812 AC_LANG_PUSH([C++])
7813 save_CXXFLAGS=$CXXFLAGS
7814 CXXFLAGS="$CXXFLAGS $flag_avx"
7815 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7816     #include <immintrin.h>
7817     int main () {
7818         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
7819         c = _mm256_xor_ps(a, b);
7820         return 0;
7821     }
7822     ])],
7823     [can_compile_avx=yes],
7824     [can_compile_avx=no])
7825 AC_LANG_POP([C++])
7826 CXXFLAGS=$save_CXXFLAGS
7827 AC_MSG_RESULT([${can_compile_avx}])
7828 if test "${can_compile_avx}" = "yes" ; then
7829     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
7832 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
7833 AC_LANG_PUSH([C++])
7834 save_CXXFLAGS=$CXXFLAGS
7835 CXXFLAGS="$CXXFLAGS $flag_avx2"
7836 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7837     #include <immintrin.h>
7838     int main () {
7839         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
7840         c = _mm256_maddubs_epi16(a, b);
7841         return 0;
7842     }
7843     ])],
7844     [can_compile_avx2=yes],
7845     [can_compile_avx2=no])
7846 AC_LANG_POP([C++])
7847 CXXFLAGS=$save_CXXFLAGS
7848 AC_MSG_RESULT([${can_compile_avx2}])
7849 if test "${can_compile_avx2}" = "yes" ; then
7850     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
7853 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
7854 AC_LANG_PUSH([C++])
7855 save_CXXFLAGS=$CXXFLAGS
7856 CXXFLAGS="$CXXFLAGS $flag_avx512"
7857 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7858     #include <immintrin.h>
7859     int main () {
7860         __m512i a = _mm512_loadu_si512(0);
7861         __m512d v1 = _mm512_load_pd(0);
7862         // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
7863         __m512d v2 = _mm512_abs_pd(v1);
7864         return 0;
7865     }
7866     ])],
7867     [can_compile_avx512=yes],
7868     [can_compile_avx512=no])
7869 AC_LANG_POP([C++])
7870 CXXFLAGS=$save_CXXFLAGS
7871 AC_MSG_RESULT([${can_compile_avx512}])
7872 if test "${can_compile_avx512}" = "yes" ; then
7873     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
7874     CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
7877 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
7878 AC_LANG_PUSH([C++])
7879 save_CXXFLAGS=$CXXFLAGS
7880 CXXFLAGS="$CXXFLAGS $flag_f16c"
7881 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7882     #include <immintrin.h>
7883     int main () {
7884         __m128i a = _mm_set1_epi32 (0);
7885         __m128 c;
7886         c = _mm_cvtph_ps(a);
7887         return 0;
7888     }
7889     ])],
7890     [can_compile_f16c=yes],
7891     [can_compile_f16c=no])
7892 AC_LANG_POP([C++])
7893 CXXFLAGS=$save_CXXFLAGS
7894 AC_MSG_RESULT([${can_compile_f16c}])
7895 if test "${can_compile_f16c}" = "yes" ; then
7896     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
7899 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
7900 AC_LANG_PUSH([C++])
7901 save_CXXFLAGS=$CXXFLAGS
7902 CXXFLAGS="$CXXFLAGS $flag_fma"
7903 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7904     #include <immintrin.h>
7905     int main () {
7906         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
7907         d = _mm256_fmadd_ps(a, b, c);
7908         return 0;
7909     }
7910     ])],
7911     [can_compile_fma=yes],
7912     [can_compile_fma=no])
7913 AC_LANG_POP([C++])
7914 CXXFLAGS=$save_CXXFLAGS
7915 AC_MSG_RESULT([${can_compile_fma}])
7916 if test "${can_compile_fma}" = "yes" ; then
7917     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
7920 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
7921 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
7922 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
7923 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
7924 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
7925 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
7926 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
7927 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512F])
7928 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
7929 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
7931 dnl ===================================================================
7932 dnl system stl sanity tests
7933 dnl ===================================================================
7934 if test "$_os" != "WINNT"; then
7936     AC_LANG_PUSH([C++])
7938     save_CPPFLAGS="$CPPFLAGS"
7939     if test -n "$MACOSX_SDK_PATH"; then
7940         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
7941     fi
7943     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
7944     # only.
7945     if test "$CPP_LIBRARY" = GLIBCXX; then
7946         dnl gcc#19664, gcc#22482, rhbz#162935
7947         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
7948         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
7949         AC_MSG_RESULT([$stlvisok])
7950         if test "$stlvisok" = "no"; then
7951             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
7952         fi
7953     fi
7955     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
7956     # when we don't make any dynamic libraries?
7957     if test "$DISABLE_DYNLOADING" = ""; then
7958         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
7959         cat > conftestlib1.cc <<_ACEOF
7960 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7961 struct S2: S1<int> { virtual ~S2(); };
7962 S2::~S2() {}
7963 _ACEOF
7964         cat > conftestlib2.cc <<_ACEOF
7965 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7966 struct S2: S1<int> { virtual ~S2(); };
7967 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
7968 _ACEOF
7969         gccvisinlineshiddenok=yes
7970         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
7971             gccvisinlineshiddenok=no
7972         else
7973             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
7974             dnl known to not work with -z defs (unsetting which makes the test
7975             dnl moot, though):
7976             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
7977             if test "$COM_IS_CLANG" = TRUE; then
7978                 for i in $CXX $CXXFLAGS; do
7979                     case $i in
7980                     -fsanitize=*)
7981                         my_linkflagsnoundefs=
7982                         break
7983                         ;;
7984                     esac
7985                 done
7986             fi
7987             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
7988                 gccvisinlineshiddenok=no
7989             fi
7990         fi
7992         rm -fr libconftest*
7993         AC_MSG_RESULT([$gccvisinlineshiddenok])
7994         if test "$gccvisinlineshiddenok" = "no"; then
7995             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
7996         fi
7997     fi
7999    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
8000     cat >visibility.cxx <<_ACEOF
8001 #pragma GCC visibility push(hidden)
8002 struct __attribute__ ((visibility ("default"))) TestStruct {
8003   static void Init();
8005 __attribute__ ((visibility ("default"))) void TestFunc() {
8006   TestStruct::Init();
8008 _ACEOF
8009     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
8010         gccvisbroken=yes
8011     else
8012         case "$host_cpu" in
8013         i?86|x86_64)
8014             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
8015                 gccvisbroken=no
8016             else
8017                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
8018                     gccvisbroken=no
8019                 else
8020                     gccvisbroken=yes
8021                 fi
8022             fi
8023             ;;
8024         *)
8025             gccvisbroken=no
8026             ;;
8027         esac
8028     fi
8029     rm -f visibility.s visibility.cxx
8031     AC_MSG_RESULT([$gccvisbroken])
8032     if test "$gccvisbroken" = "yes"; then
8033         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
8034     fi
8036     CPPFLAGS="$save_CPPFLAGS"
8038     AC_MSG_CHECKING([if CET endbranch is recognized])
8039 cat > endbr.s <<_ACEOF
8040 endbr32
8041 _ACEOF
8042     HAVE_ASM_END_BRANCH_INS_SUPPORT=
8043     if $CXX -c endbr.s -o endbr.o >/dev/null 2>&5; then
8044         AC_MSG_RESULT([yes])
8045         HAVE_ASM_END_BRANCH_INS_SUPPORT=TRUE
8046     else
8047         AC_MSG_RESULT([no])
8048     fi
8049     rm -f endbr.s endbr.o
8050     AC_SUBST(HAVE_ASM_END_BRANCH_INS_SUPPORT)
8052     AC_LANG_POP([C++])
8055 dnl ===================================================================
8056 dnl  Clang++ tests
8057 dnl ===================================================================
8059 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
8060 if test "$GCC" = "yes"; then
8061     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
8062     AC_LANG_PUSH([C++])
8063     save_CXXFLAGS=$CXXFLAGS
8064     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
8065     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
8066     CXXFLAGS=$save_CXXFLAGS
8067     AC_LANG_POP([C++])
8068     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
8069         AC_MSG_RESULT([yes])
8070     else
8071         AC_MSG_RESULT([no])
8072     fi
8074 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
8076 dnl ===================================================================
8077 dnl Compiler plugins
8078 dnl ===================================================================
8080 COMPILER_PLUGINS=
8081 # currently only Clang
8083 if test "$COM_IS_CLANG" != "TRUE"; then
8084     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
8085         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
8086         enable_compiler_plugins=no
8087     fi
8090 COMPILER_PLUGINS_COM_IS_CLANG=
8091 if test "$COM_IS_CLANG" = "TRUE"; then
8092     if test -n "$enable_compiler_plugins"; then
8093         compiler_plugins="$enable_compiler_plugins"
8094     elif test -n "$ENABLE_DBGUTIL"; then
8095         compiler_plugins=test
8096     else
8097         compiler_plugins=no
8098     fi
8099     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
8100         if test "$CLANGVER" -lt 50002; then
8101             if test "$compiler_plugins" = yes; then
8102                 AC_MSG_ERROR([Clang $CLANGVER is too old to build compiler plugins; need >= 5.0.2.])
8103             else
8104                 compiler_plugins=no
8105             fi
8106         fi
8107     fi
8108     if test "$compiler_plugins" != "no"; then
8109         dnl The prefix where Clang resides, override to where Clang resides if
8110         dnl using a source build:
8111         if test -z "$CLANGDIR"; then
8112             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
8113         fi
8114         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
8115         if test -z "$COMPILER_PLUGINS_CXX"; then
8116             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
8117         fi
8118         clangbindir=$CLANGDIR/bin
8119         if test "$build_os" = "cygwin"; then
8120             clangbindir=$(cygpath -u "$clangbindir")
8121         fi
8122         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
8123         if test -n "$LLVM_CONFIG"; then
8124             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
8125             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
8126             if test -z "$CLANGLIBDIR"; then
8127                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
8128             fi
8129             # Try if clang is built from source (in which case its includes are not together with llvm includes).
8130             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
8131             clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
8132             if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
8133                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
8134             fi
8135             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
8136             clangobjdir=$($LLVM_CONFIG --obj-root)
8137             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
8138                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
8139             fi
8140         fi
8141         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
8142         AC_LANG_PUSH([C++])
8143         save_CXX=$CXX
8144         save_CXXCPP=$CXXCPP
8145         save_CPPFLAGS=$CPPFLAGS
8146         save_CXXFLAGS=$CXXFLAGS
8147         save_LDFLAGS=$LDFLAGS
8148         save_LIBS=$LIBS
8149         CXX=$COMPILER_PLUGINS_CXX
8150         CXXCPP="$COMPILER_PLUGINS_CXX -E"
8151         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8152         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8153         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
8154             [COMPILER_PLUGINS=TRUE],
8155             [
8156             if test "$compiler_plugins" = "yes"; then
8157                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
8158             else
8159                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
8160                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
8161             fi
8162             ])
8163         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8164         dnl comment in compilerplugins/Makefile-clang.mk:
8165         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8166             LDFLAGS=""
8167             AC_MSG_CHECKING([for clang libraries to use])
8168             if test -z "$CLANGTOOLLIBS"; then
8169                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8170  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8171                 AC_LINK_IFELSE([
8172                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8173                         [[ clang::FullSourceLoc().dump(); ]])
8174                 ],[CLANGTOOLLIBS="$LIBS"],[])
8175             fi
8176             if test -z "$CLANGTOOLLIBS"; then
8177                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8178                 AC_LINK_IFELSE([
8179                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8180                         [[ clang::FullSourceLoc().dump(); ]])
8181                 ],[CLANGTOOLLIBS="$LIBS"],[])
8182             fi
8183             AC_MSG_RESULT([$CLANGTOOLLIBS])
8184             if test -z "$CLANGTOOLLIBS"; then
8185                 if test "$compiler_plugins" = "yes"; then
8186                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8187                 else
8188                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8189                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8190                 fi
8191                 COMPILER_PLUGINS=
8192             fi
8193             if test -n "$COMPILER_PLUGINS"; then
8194                 if test -z "$CLANGSYSINCLUDE"; then
8195                     if test -n "$LLVM_CONFIG"; then
8196                         # Path to the clang system headers (no idea if there's a better way to get it).
8197                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8198                     fi
8199                 fi
8200             fi
8201         fi
8202         CXX=$save_CXX
8203         CXXCPP=$save_CXXCPP
8204         CPPFLAGS=$save_CPPFLAGS
8205         CXXFLAGS=$save_CXXFLAGS
8206         LDFLAGS=$save_LDFLAGS
8207         LIBS="$save_LIBS"
8208         AC_LANG_POP([C++])
8210         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8211         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8212             #ifndef __clang__
8213             you lose
8214             #endif
8215             int foo=42;
8216             ]])],
8217             [AC_MSG_RESULT([yes])
8218              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8219             [AC_MSG_RESULT([no])])
8220         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8221     fi
8222 else
8223     if test "$enable_compiler_plugins" = "yes"; then
8224         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8225     fi
8227 COMPILER_PLUGINS_ANALYZER_PCH=
8228 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8229     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8231 AC_SUBST(COMPILER_PLUGINS)
8232 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8233 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8234 AC_SUBST(COMPILER_PLUGINS_CXX)
8235 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8236 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8237 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8238 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8239 AC_SUBST(CLANGDIR)
8240 AC_SUBST(CLANGLIBDIR)
8241 AC_SUBST(CLANGTOOLLIBS)
8242 AC_SUBST(CLANGSYSINCLUDE)
8244 # Plugin to help linker.
8245 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8246 # This makes --enable-lto build with clang work.
8247 AC_SUBST(LD_PLUGIN)
8249 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8250 AC_SUBST(HAVE_POSIX_FALLOCATE)
8252 JITC_PROCESSOR_TYPE=""
8253 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8254     # IBMs JDK needs this...
8255     JITC_PROCESSOR_TYPE=6
8256     export JITC_PROCESSOR_TYPE
8258 AC_SUBST([JITC_PROCESSOR_TYPE])
8260 # Misc Windows Stuff
8261 AC_ARG_WITH(ucrt-dir,
8262     AS_HELP_STRING([--with-ucrt-dir],
8263         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8264         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8265         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8266             Windows6.1-KB2999226-x64.msu
8267             Windows6.1-KB2999226-x86.msu
8268             Windows8.1-KB2999226-x64.msu
8269             Windows8.1-KB2999226-x86.msu
8270             Windows8-RT-KB2999226-x64.msu
8271             Windows8-RT-KB2999226-x86.msu
8272         A zip archive including those files is available from Microsoft site:
8273         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8276 UCRT_REDISTDIR="$with_ucrt_dir"
8277 if test $_os = "WINNT"; then
8278     find_msvc_x64_dlls
8279     for i in $PKGFORMAT; do
8280         if test "$i" = msi; then
8281             find_msms
8282             break
8283         fi
8284     done
8285     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8286     MSVC_DLLS="$msvcdlls"
8287     test -n "$msmdir" && MSM_PATH=`win_short_path_for_make "$msmdir"`
8288     # MSVC 15.3 changed it to VC141
8289     if echo "$msvcdllpath" | grep -q "VC143.CRT$"; then
8290         SCPDEFS="$SCPDEFS -DWITH_VC143_REDIST"
8291     elif echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8292         SCPDEFS="$SCPDEFS -DWITH_VC142_REDIST"
8293     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8294         SCPDEFS="$SCPDEFS -DWITH_VC141_REDIST"
8295     else
8296         SCPDEFS="$SCPDEFS -DWITH_VC${VCVER}_REDIST"
8297     fi
8299     if test "$UCRT_REDISTDIR" = "no"; then
8300         dnl explicitly disabled
8301         UCRT_REDISTDIR=""
8302     else
8303         if ! test -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x64.msu" -a \
8304                   -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x86.msu" -a \
8305                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x64.msu" -a \
8306                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x86.msu" -a \
8307                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x64.msu" -a \
8308                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x86.msu"; then
8309             UCRT_REDISTDIR=""
8310             if test -n "$PKGFORMAT"; then
8311                for i in $PKGFORMAT; do
8312                    case "$i" in
8313                    msi)
8314                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8315                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8316                        ;;
8317                    esac
8318                done
8319             fi
8320         fi
8321     fi
8324 AC_SUBST(UCRT_REDISTDIR)
8325 AC_SUBST(MSVC_DLL_PATH)
8326 AC_SUBST(MSVC_DLLS)
8327 AC_SUBST(MSM_PATH)
8330 dnl ===================================================================
8331 dnl Checks for Java
8332 dnl ===================================================================
8333 if test "$ENABLE_JAVA" != ""; then
8335     # Windows-specific tests
8336     if test "$build_os" = "cygwin"; then
8337         if test -z "$with_jdk_home"; then
8338             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8339             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8340             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/CurrentVersion"
8341             if test -n "$regvalue"; then
8342                 ver=$regvalue
8343                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver/JavaHome"
8344                 with_jdk_home=$regvalue
8345             fi
8346             howfound="found automatically"
8347         else
8348             with_jdk_home=`win_short_path_for_make "$with_jdk_home"`
8349             howfound="you passed"
8350         fi
8352         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8353             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])
8354         fi
8355     fi
8357     # 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.
8358     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8359     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8360         with_jdk_home=`/usr/libexec/java_home`
8361     fi
8363     JAVA_HOME=; export JAVA_HOME
8364     if test -z "$with_jdk_home"; then
8365         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8366     else
8367         _java_path="$with_jdk_home/bin/$with_java"
8368         dnl Check if there is a Java interpreter at all.
8369         if test -x "$_java_path"; then
8370             JAVAINTERPRETER=$_java_path
8371         else
8372             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8373         fi
8374     fi
8376     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8377     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8378     dnl loaded by java to run JunitTests:
8379     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8380         shortjdkhome=`cygpath -d "$with_jdk_home"`
8381         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
8382             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8383             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8384         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
8385             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8386             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8387         fi
8389         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8390             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8391         fi
8392         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8393     elif test "$cross_compiling" != "yes"; then
8394         case $CPUNAME in
8395             AARCH64|AXP|X86_64|HPPA|IA64|POWERPC64|S390X|SPARC64|GODSON64)
8396                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8397                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8398                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8399                 fi
8400                 ;;
8401             *) # assumption: everything else 32-bit
8402                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8403                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8404                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8405                 fi
8406                 ;;
8407         esac
8408     fi
8411 dnl ===================================================================
8412 dnl Checks for JDK.
8413 dnl ===================================================================
8415 # Whether all the complexity here actually is needed any more or not, no idea.
8417 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8418     _gij_longver=0
8419     AC_MSG_CHECKING([the installed JDK])
8420     if test -n "$JAVAINTERPRETER"; then
8421         dnl java -version sends output to stderr!
8422         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8423             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8424         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8425             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8426         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8427             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8428         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8429             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8430         else
8431             JDK=sun
8433             dnl Sun JDK specific tests
8434             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8435             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8437             if test "$_jdk_ver" -lt 10900; then
8438                 AC_MSG_ERROR([JDK is too old, you need at least 9 ($_jdk_ver < 10900)])
8439             fi
8440             if test "$_jdk_ver" -gt 10900; then
8441                 JAVA_CLASSPATH_NOT_SET=TRUE
8442             fi
8444             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8445             if test "$_os" = "WINNT"; then
8446                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8447             fi
8448             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8450             # set to limit VM usage for JunitTests
8451             JAVAIFLAGS=-Xmx64M
8452             # set to limit VM usage for javac
8453             JAVACFLAGS=-J-Xmx128M
8454         fi
8455     else
8456         AC_MSG_ERROR([Java not found. You need at least JDK 9])
8457     fi
8458 else
8459     if test -z "$ENABLE_JAVA"; then
8460         dnl Java disabled
8461         JAVA_HOME=
8462         export JAVA_HOME
8463     elif test "$cross_compiling" = "yes"; then
8464         # Just assume compatibility of build and host JDK
8465         JDK=$JDK_FOR_BUILD
8466         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8467     fi
8470 dnl ===================================================================
8471 dnl Checks for javac
8472 dnl ===================================================================
8473 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8474     javacompiler="javac"
8475     : ${JAVA_SOURCE_VER=8}
8476     : ${JAVA_TARGET_VER=8}
8477     if test -z "$with_jdk_home"; then
8478         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8479     else
8480         _javac_path="$with_jdk_home/bin/$javacompiler"
8481         dnl Check if there is a Java compiler at all.
8482         if test -x "$_javac_path"; then
8483             JAVACOMPILER=$_javac_path
8484         fi
8485     fi
8486     if test -z "$JAVACOMPILER"; then
8487         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8488     fi
8489     if test "$build_os" = "cygwin"; then
8490         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8491             JAVACOMPILER="${JAVACOMPILER}.exe"
8492         fi
8493         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8494     fi
8497 dnl ===================================================================
8498 dnl Checks for javadoc
8499 dnl ===================================================================
8500 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8501     if test -z "$with_jdk_home"; then
8502         AC_PATH_PROG(JAVADOC, javadoc)
8503     else
8504         _javadoc_path="$with_jdk_home/bin/javadoc"
8505         dnl Check if there is a javadoc at all.
8506         if test -x "$_javadoc_path"; then
8507             JAVADOC=$_javadoc_path
8508         else
8509             AC_PATH_PROG(JAVADOC, javadoc)
8510         fi
8511     fi
8512     if test -z "$JAVADOC"; then
8513         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8514     fi
8515     if test "$build_os" = "cygwin"; then
8516         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8517             JAVADOC="${JAVADOC}.exe"
8518         fi
8519         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8520     fi
8522     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8523     JAVADOCISGJDOC="yes"
8524     fi
8526 AC_SUBST(JAVADOC)
8527 AC_SUBST(JAVADOCISGJDOC)
8529 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8530     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8531     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8532         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8533            # try to recover first by looking whether we have an alternative
8534            # system as in Debian or newer SuSEs where following /usr/bin/javac
8535            # over /etc/alternatives/javac leads to the right bindir where we
8536            # just need to strip a bit away to get a valid JAVA_HOME
8537            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8538         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8539             # maybe only one level of symlink (e.g. on Mac)
8540             JAVA_HOME=$(readlink $JAVACOMPILER)
8541             if test "$(dirname $JAVA_HOME)" = "."; then
8542                 # we've got no path to trim back
8543                 JAVA_HOME=""
8544             fi
8545         else
8546             # else warn
8547             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8548             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8549             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8550             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8551         fi
8552         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8553         if test "$JAVA_HOME" != "/usr"; then
8554             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8555                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8556                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8557                 dnl Tiger already returns a JDK path...
8558                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8559             else
8560                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8561                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8562                 dnl that checks which version to run
8563                 if test -f "$JAVA_HOME"; then
8564                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8565                 fi
8566             fi
8567         fi
8568     fi
8569     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8571     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8572     if test -z "$JAVA_HOME"; then
8573         if test "x$with_jdk_home" = "x"; then
8574             cat > findhome.java <<_ACEOF
8575 [import java.io.File;
8577 class findhome
8579     public static void main(String args[])
8580     {
8581         String jrelocation = System.getProperty("java.home");
8582         File jre = new File(jrelocation);
8583         System.out.println(jre.getParent());
8584     }
8586 _ACEOF
8587             AC_MSG_CHECKING([if javac works])
8588             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8589             AC_TRY_EVAL(javac_cmd)
8590             if test $? = 0 -a -f ./findhome.class; then
8591                 AC_MSG_RESULT([javac works])
8592             else
8593                 echo "configure: javac test failed" >&5
8594                 cat findhome.java >&5
8595                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8596             fi
8597             AC_MSG_CHECKING([if gij knows its java.home])
8598             JAVA_HOME=`$JAVAINTERPRETER findhome`
8599             if test $? = 0 -a "$JAVA_HOME" != ""; then
8600                 AC_MSG_RESULT([$JAVA_HOME])
8601             else
8602                 echo "configure: java test failed" >&5
8603                 cat findhome.java >&5
8604                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8605             fi
8606             # clean-up after ourselves
8607             rm -f ./findhome.java ./findhome.class
8608         else
8609             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8610         fi
8611     fi
8613     # now check if $JAVA_HOME is really valid
8614     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8615         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8616             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8617             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8618             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
8619             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
8620             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
8621             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
8622         fi
8623     fi
8624     PathFormat "$JAVA_HOME"
8625     JAVA_HOME="$formatted_path"
8628 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
8629     "$_os" != Darwin
8630 then
8631     AC_MSG_CHECKING([for JAWT lib])
8632     if test "$_os" = WINNT; then
8633         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
8634         JAWTLIB=jawt.lib
8635     else
8636         case "$host_cpu" in
8637         arm*)
8638             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
8639             JAVA_ARCH=$my_java_arch
8640             ;;
8641         i*86)
8642             my_java_arch=i386
8643             ;;
8644         m68k)
8645             my_java_arch=m68k
8646             ;;
8647         powerpc)
8648             my_java_arch=ppc
8649             ;;
8650         powerpc64)
8651             my_java_arch=ppc64
8652             ;;
8653         powerpc64le)
8654             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
8655             JAVA_ARCH=$my_java_arch
8656             ;;
8657         sparc64)
8658             my_java_arch=sparcv9
8659             ;;
8660         x86_64)
8661             my_java_arch=amd64
8662             ;;
8663         *)
8664             my_java_arch=$host_cpu
8665             ;;
8666         esac
8667         # This is where JDK9 puts the library
8668         if test -e "$JAVA_HOME/lib/libjawt.so"; then
8669             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
8670         else
8671             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
8672         fi
8673         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
8674     fi
8675     AC_MSG_RESULT([$JAWTLIB])
8677 AC_SUBST(JAWTLIB)
8679 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
8680     case "$host_os" in
8682     aix*)
8683         JAVAINC="-I$JAVA_HOME/include"
8684         JAVAINC="$JAVAINC -I$JAVA_HOME/include/aix"
8685         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8686         ;;
8688     cygwin*|wsl*)
8689         JAVAINC="-I$JAVA_HOME/include/win32"
8690         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
8691         ;;
8693     darwin*|macos*)
8694         if test -d "$JAVA_HOME/include/darwin"; then
8695             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
8696         else
8697             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
8698         fi
8699         ;;
8701     dragonfly*)
8702         JAVAINC="-I$JAVA_HOME/include"
8703         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8704         ;;
8706     freebsd*)
8707         JAVAINC="-I$JAVA_HOME/include"
8708         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
8709         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
8710         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8711         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8712         ;;
8714     k*bsd*-gnu*)
8715         JAVAINC="-I$JAVA_HOME/include"
8716         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8717         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8718         ;;
8720     linux-gnu*)
8721         JAVAINC="-I$JAVA_HOME/include"
8722         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8723         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8724         ;;
8726     *netbsd*)
8727         JAVAINC="-I$JAVA_HOME/include"
8728         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
8729         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8730        ;;
8732     openbsd*)
8733         JAVAINC="-I$JAVA_HOME/include"
8734         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
8735         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8736         ;;
8738     solaris*)
8739         JAVAINC="-I$JAVA_HOME/include"
8740         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
8741         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8742         ;;
8743     esac
8745 SOLARINC="$SOLARINC $JAVAINC"
8747 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8748     JAVA_HOME_FOR_BUILD=$JAVA_HOME
8749     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
8750     JDK_FOR_BUILD=$JDK
8753 AC_SUBST(JAVACFLAGS)
8754 AC_SUBST(JAVACOMPILER)
8755 AC_SUBST(JAVAINTERPRETER)
8756 AC_SUBST(JAVAIFLAGS)
8757 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
8758 AC_SUBST(JAVA_CLASSPATH_NOT_SET)
8759 AC_SUBST(JAVA_HOME)
8760 AC_SUBST(JAVA_HOME_FOR_BUILD)
8761 AC_SUBST(JDK)
8762 AC_SUBST(JDK_FOR_BUILD)
8763 AC_SUBST(JAVA_SOURCE_VER)
8764 AC_SUBST(JAVA_TARGET_VER)
8767 dnl ===================================================================
8768 dnl Export file validation
8769 dnl ===================================================================
8770 AC_MSG_CHECKING([whether to enable export file validation])
8771 if test "$with_export_validation" != "no"; then
8772     if test -z "$ENABLE_JAVA"; then
8773         if test "$with_export_validation" = "yes"; then
8774             AC_MSG_ERROR([requested, but Java is disabled])
8775         else
8776             AC_MSG_RESULT([no, as Java is disabled])
8777         fi
8778     elif ! test -d "${SRC_ROOT}/schema"; then
8779         if test "$with_export_validation" = "yes"; then
8780             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
8781         else
8782             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
8783         fi
8784     else
8785         AC_MSG_RESULT([yes])
8786         AC_DEFINE(HAVE_EXPORT_VALIDATION)
8788         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
8789         if test -z "$ODFVALIDATOR"; then
8790             # remember to download the ODF toolkit with validator later
8791             AC_MSG_NOTICE([no odfvalidator found, will download it])
8792             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
8793             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
8795             # and fetch name of odfvalidator jar name from download.lst
8796             ODFVALIDATOR_JAR=`$SED -n -e "s/export *ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8797             AC_SUBST(ODFVALIDATOR_JAR)
8799             if test -z "$ODFVALIDATOR_JAR"; then
8800                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
8801             fi
8802         fi
8803         if test "$build_os" = "cygwin"; then
8804             # In case of Cygwin it will be executed from Windows,
8805             # so we need to run bash and absolute path to validator
8806             # so instead of "odfvalidator" it will be
8807             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8808             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
8809         else
8810             ODFVALIDATOR="sh $ODFVALIDATOR"
8811         fi
8812         AC_SUBST(ODFVALIDATOR)
8815         AC_PATH_PROGS(OFFICEOTRON, officeotron)
8816         if test -z "$OFFICEOTRON"; then
8817             # remember to download the officeotron with validator later
8818             AC_MSG_NOTICE([no officeotron found, will download it])
8819             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
8820             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
8822             # and fetch name of officeotron jar name from download.lst
8823             OFFICEOTRON_JAR=`$SED -n -e "s/export *OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8824             AC_SUBST(OFFICEOTRON_JAR)
8826             if test -z "$OFFICEOTRON_JAR"; then
8827                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
8828             fi
8829         else
8830             # check version of existing officeotron
8831             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
8832             if test 0"$OFFICEOTRON_VER" -lt 704; then
8833                 AC_MSG_ERROR([officeotron too old])
8834             fi
8835         fi
8836         if test "$build_os" = "cygwin"; then
8837             # In case of Cygwin it will be executed from Windows,
8838             # so we need to run bash and absolute path to validator
8839             # so instead of "odfvalidator" it will be
8840             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8841             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
8842         else
8843             OFFICEOTRON="sh $OFFICEOTRON"
8844         fi
8845     fi
8846     AC_SUBST(OFFICEOTRON)
8847 else
8848     AC_MSG_RESULT([no])
8851 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
8852 if test "$with_bffvalidator" != "no"; then
8853     AC_DEFINE(HAVE_BFFVALIDATOR)
8855     if test "$with_export_validation" = "no"; then
8856         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
8857     fi
8859     if test "$with_bffvalidator" = "yes"; then
8860         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
8861     else
8862         BFFVALIDATOR="$with_bffvalidator"
8863     fi
8865     if test "$build_os" = "cygwin"; then
8866         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
8867             AC_MSG_RESULT($BFFVALIDATOR)
8868         else
8869             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8870         fi
8871     elif test -n "$BFFVALIDATOR"; then
8872         # We are not in Cygwin but need to run Windows binary with wine
8873         AC_PATH_PROGS(WINE, wine)
8875         # so swap in a shell wrapper that converts paths transparently
8876         BFFVALIDATOR_EXE="$BFFVALIDATOR"
8877         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
8878         AC_SUBST(BFFVALIDATOR_EXE)
8879         AC_MSG_RESULT($BFFVALIDATOR)
8880     else
8881         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8882     fi
8883     AC_SUBST(BFFVALIDATOR)
8884 else
8885     AC_MSG_RESULT([no])
8888 dnl ===================================================================
8889 dnl Check for C preprocessor to use
8890 dnl ===================================================================
8891 AC_MSG_CHECKING([which C preprocessor to use in idlc])
8892 SYSTEM_UCPP_IS_GCC=
8893 if test -n "$with_idlc_cpp"; then
8894     AC_MSG_RESULT([$with_idlc_cpp])
8895     AC_PATH_PROG(SYSTEM_UCPP, $with_idlc_cpp)
8896     AC_MSG_CHECKING([if $with_idlc_cpp is GCC CPP])
8897     # ucpp will accept -v (to output version), warn about the others as unknown
8898     # and return 1 (due to -v)
8899     # gcc will accept -v (as verbose), --version (to output version) and -nostdinc
8900     # and return 0 (due to --version ) if all options are supported
8901     $SYSTEM_UCPP -v --version -nostdinc >/dev/null 2>/dev/null
8902     if test $? -eq 0;  then
8903         SYSTEM_UCPP_IS_GCC=TRUE
8904         AC_MSG_RESULT([yes])
8905     else
8906         AC_MSG_RESULT([no])
8907     fi
8908 else
8909     AC_MSG_RESULT([ucpp])
8910     AC_MSG_CHECKING([which ucpp to use])
8911     if test -n "$with_system_ucpp" -a "$with_system_ucpp" != "no"; then
8912         AC_MSG_RESULT([external])
8913         AC_PATH_PROG(SYSTEM_UCPP, ucpp)
8914     else
8915         AC_MSG_RESULT([internal])
8916         BUILD_TYPE="$BUILD_TYPE UCPP"
8917     fi
8919 AC_SUBST(SYSTEM_UCPP)
8920 AC_SUBST(SYSTEM_UCPP_IS_GCC)
8922 dnl ===================================================================
8923 dnl Check for epm (not needed for Windows)
8924 dnl ===================================================================
8925 AC_MSG_CHECKING([whether to enable EPM for packing])
8926 if test "$enable_epm" = "yes"; then
8927     AC_MSG_RESULT([yes])
8928     if test "$_os" != "WINNT"; then
8929         if test $_os = Darwin; then
8930             EPM=internal
8931         elif test -n "$with_epm"; then
8932             EPM=$with_epm
8933         else
8934             AC_PATH_PROG(EPM, epm, no)
8935         fi
8936         if test "$EPM" = "no" -o "$EPM" = "internal"; then
8937             AC_MSG_NOTICE([EPM will be built.])
8938             BUILD_TYPE="$BUILD_TYPE EPM"
8939             EPM=${WORKDIR}/UnpackedTarball/epm/epm
8940         else
8941             # Gentoo has some epm which is something different...
8942             AC_MSG_CHECKING([whether the found epm is the right epm])
8943             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
8944                 AC_MSG_RESULT([yes])
8945             else
8946                 AC_MSG_ERROR([no. Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8947             fi
8948             AC_MSG_CHECKING([epm version])
8949             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
8950             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
8951                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
8952                 AC_MSG_RESULT([OK, >= 3.7])
8953             else
8954                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
8955                 AC_MSG_ERROR([Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8956             fi
8957         fi
8958     fi
8960     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
8961         AC_MSG_CHECKING([for rpm])
8962         for a in "$RPM" rpmbuild rpm; do
8963             $a --usage >/dev/null 2> /dev/null
8964             if test $? -eq 0; then
8965                 RPM=$a
8966                 break
8967             else
8968                 $a --version >/dev/null 2> /dev/null
8969                 if test $? -eq 0; then
8970                     RPM=$a
8971                     break
8972                 fi
8973             fi
8974         done
8975         if test -z "$RPM"; then
8976             AC_MSG_ERROR([not found])
8977         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
8978             RPM_PATH=`which $RPM`
8979             AC_MSG_RESULT([$RPM_PATH])
8980             SCPDEFS="$SCPDEFS -DWITH_RPM"
8981         else
8982             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
8983         fi
8984     fi
8985     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
8986         AC_PATH_PROG(DPKG, dpkg, no)
8987         if test "$DPKG" = "no"; then
8988             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
8989         fi
8990     fi
8991     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
8992        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
8993         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
8994             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
8995                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
8996                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
8997                     AC_MSG_RESULT([yes])
8998                 else
8999                     AC_MSG_RESULT([no])
9000                     if echo "$PKGFORMAT" | $GREP -q rpm; then
9001                         _pt="rpm"
9002                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
9003                         add_warning "the rpms will need to be installed with --nodeps"
9004                     else
9005                         _pt="pkg"
9006                     fi
9007                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
9008                     add_warning "the ${_pt}s will not be relocatable"
9009                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
9010                                  relocation will work, you need to patch your epm with the
9011                                  patch in epm/epm-3.7.patch or build with
9012                                  --with-epm=internal which will build a suitable epm])
9013                 fi
9014             fi
9015         fi
9016     fi
9017     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9018         AC_PATH_PROG(PKGMK, pkgmk, no)
9019         if test "$PKGMK" = "no"; then
9020             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
9021         fi
9022     fi
9023     AC_SUBST(RPM)
9024     AC_SUBST(DPKG)
9025     AC_SUBST(PKGMK)
9026 else
9027     for i in $PKGFORMAT; do
9028         case "$i" in
9029         aix | bsd | deb | pkg | rpm | native | portable)
9030             AC_MSG_ERROR(
9031                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
9032             ;;
9033         esac
9034     done
9035     AC_MSG_RESULT([no])
9036     EPM=NO
9038 AC_SUBST(EPM)
9040 ENABLE_LWP=
9041 if test "$enable_lotuswordpro" = "yes"; then
9042     ENABLE_LWP="TRUE"
9044 AC_SUBST(ENABLE_LWP)
9046 dnl ===================================================================
9047 dnl Check for building ODK
9048 dnl ===================================================================
9049 if test "$enable_odk" != yes; then
9050     unset DOXYGEN
9051 else
9052     if test "$with_doxygen" = no; then
9053         AC_MSG_CHECKING([for doxygen])
9054         unset DOXYGEN
9055         AC_MSG_RESULT([no])
9056     else
9057         if test "$with_doxygen" = yes; then
9058             AC_PATH_PROG([DOXYGEN], [doxygen])
9059             if test -z "$DOXYGEN"; then
9060                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
9061             fi
9062             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
9063                 if ! dot -V 2>/dev/null; then
9064                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
9065                 fi
9066             fi
9067         else
9068             AC_MSG_CHECKING([for doxygen])
9069             DOXYGEN=$with_doxygen
9070             AC_MSG_RESULT([$DOXYGEN])
9071         fi
9072         if test -n "$DOXYGEN"; then
9073             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
9074             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
9075             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
9076                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
9077             fi
9078         fi
9079     fi
9081 AC_SUBST([DOXYGEN])
9083 AC_MSG_CHECKING([whether to build the ODK])
9084 if test "$enable_odk" = yes; then
9085     AC_MSG_RESULT([yes])
9086     BUILD_TYPE="$BUILD_TYPE ODK"
9087 else
9088     AC_MSG_RESULT([no])
9091 dnl ===================================================================
9092 dnl Check for system zlib
9093 dnl ===================================================================
9094 if test "$with_system_zlib" = "auto"; then
9095     case "$_os" in
9096     WINNT)
9097         with_system_zlib="$with_system_libs"
9098         ;;
9099     *)
9100         if test "$enable_fuzzers" != "yes"; then
9101             with_system_zlib=yes
9102         else
9103             with_system_zlib=no
9104         fi
9105         ;;
9106     esac
9109 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
9110 dnl and has no pkg-config for it at least on some tinderboxes,
9111 dnl so leaving that out for now
9112 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
9113 AC_MSG_CHECKING([which zlib to use])
9114 if test "$with_system_zlib" = "yes"; then
9115     AC_MSG_RESULT([external])
9116     SYSTEM_ZLIB=TRUE
9117     AC_CHECK_HEADER(zlib.h, [],
9118         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
9119     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
9120         [AC_MSG_ERROR(zlib not found or functional)], [])
9121 else
9122     AC_MSG_RESULT([internal])
9123     SYSTEM_ZLIB=
9124     BUILD_TYPE="$BUILD_TYPE ZLIB"
9125     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
9126     if test "$COM" = "MSC"; then
9127         ZLIB_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/zlib.lib"
9128     else
9129         ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
9130     fi
9132 AC_SUBST(ZLIB_CFLAGS)
9133 AC_SUBST(ZLIB_LIBS)
9134 AC_SUBST(SYSTEM_ZLIB)
9136 dnl ===================================================================
9137 dnl Check for system jpeg
9138 dnl ===================================================================
9139 AC_MSG_CHECKING([which libjpeg to use])
9140 if test "$with_system_jpeg" = "yes"; then
9141     AC_MSG_RESULT([external])
9142     SYSTEM_LIBJPEG=TRUE
9143     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
9144         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
9145     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
9146         [AC_MSG_ERROR(jpeg library not found or functional)], [])
9147 else
9148     SYSTEM_LIBJPEG=
9149     AC_MSG_RESULT([internal, libjpeg-turbo])
9150     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
9152     case "$host_cpu" in
9153     x86_64 | amd64 | i*86 | x86 | ia32)
9154         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
9155         if test -z "$NASM" -a "$build_os" = "cygwin"; then
9156             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
9157                 NASM="$LODE_HOME/opt/bin/nasm"
9158             elif test -x "/opt/lo/bin/nasm"; then
9159                 NASM="/opt/lo/bin/nasm"
9160             fi
9161         fi
9163         if test -n "$NASM"; then
9164             AC_MSG_CHECKING([for object file format of host system])
9165             case "$host_os" in
9166               cygwin* | mingw* | pw32* | wsl*)
9167                 case "$host_cpu" in
9168                   x86_64)
9169                     objfmt='Win64-COFF'
9170                     ;;
9171                   *)
9172                     objfmt='Win32-COFF'
9173                     ;;
9174                 esac
9175               ;;
9176               msdosdjgpp* | go32*)
9177                 objfmt='COFF'
9178               ;;
9179               os2-emx*) # not tested
9180                 objfmt='MSOMF' # obj
9181               ;;
9182               linux*coff* | linux*oldld*)
9183                 objfmt='COFF' # ???
9184               ;;
9185               linux*aout*)
9186                 objfmt='a.out'
9187               ;;
9188               linux*)
9189                 case "$host_cpu" in
9190                   x86_64)
9191                     objfmt='ELF64'
9192                     ;;
9193                   *)
9194                     objfmt='ELF'
9195                     ;;
9196                 esac
9197               ;;
9198               kfreebsd* | freebsd* | netbsd* | openbsd*)
9199                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9200                   objfmt='BSD-a.out'
9201                 else
9202                   case "$host_cpu" in
9203                     x86_64 | amd64)
9204                       objfmt='ELF64'
9205                       ;;
9206                     *)
9207                       objfmt='ELF'
9208                       ;;
9209                   esac
9210                 fi
9211               ;;
9212               solaris* | sunos* | sysv* | sco*)
9213                 case "$host_cpu" in
9214                   x86_64)
9215                     objfmt='ELF64'
9216                     ;;
9217                   *)
9218                     objfmt='ELF'
9219                     ;;
9220                 esac
9221               ;;
9222               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9223                 case "$host_cpu" in
9224                   x86_64)
9225                     objfmt='Mach-O64'
9226                     ;;
9227                   *)
9228                     objfmt='Mach-O'
9229                     ;;
9230                 esac
9231               ;;
9232               *)
9233                 objfmt='ELF ?'
9234               ;;
9235             esac
9237             AC_MSG_RESULT([$objfmt])
9238             if test "$objfmt" = 'ELF ?'; then
9239               objfmt='ELF'
9240               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9241             fi
9243             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9244             case "$objfmt" in
9245               MSOMF)      NAFLAGS='-fobj -DOBJ32 -DPIC';;
9246               Win32-COFF) NAFLAGS='-fwin32 -DWIN32 -DPIC';;
9247               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__ -DPIC';;
9248               COFF)       NAFLAGS='-fcoff -DCOFF -DPIC';;
9249               a.out)      NAFLAGS='-faout -DAOUT -DPIC';;
9250               BSD-a.out)  NAFLAGS='-faoutb -DAOUT -DPIC';;
9251               ELF)        NAFLAGS='-felf -DELF -DPIC';;
9252               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__ -DPIC';;
9253               RDF)        NAFLAGS='-frdf -DRDF -DPIC';;
9254               Mach-O)     NAFLAGS='-fmacho -DMACHO -DPIC';;
9255               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__ -DPIC';;
9256             esac
9257             AC_MSG_RESULT([$NAFLAGS])
9259             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9260             cat > conftest.asm << EOF
9261             [%line __oline__ "configure"
9262                     section .text
9263                     global  _main,main
9264             _main:
9265             main:   xor     eax,eax
9266                     ret
9267             ]
9269             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9270             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9271               AC_MSG_RESULT(yes)
9272             else
9273               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9274               cat conftest.asm >&AS_MESSAGE_LOG_FD
9275               rm -rf conftest*
9276               AC_MSG_RESULT(no)
9277               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9278               NASM=""
9279             fi
9281         fi
9283         if test -z "$NASM"; then
9284 cat << _EOS
9285 ****************************************************************************
9286 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9287 To get one please:
9289 _EOS
9290             if test "$build_os" = "cygwin"; then
9291 cat << _EOS
9292 install a pre-compiled binary for Win32
9294 mkdir -p /opt/lo/bin
9295 cd /opt/lo/bin
9296 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9297 chmod +x nasm
9299 or get and install one from http://www.nasm.us/
9301 Then re-run autogen.sh
9303 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9304 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`which nasm\` finds it.
9306 _EOS
9307             else
9308 cat << _EOS
9309 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md
9311 _EOS
9312             fi
9313             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9314             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9315         fi
9316       ;;
9317     esac
9320 AC_SUBST(NASM)
9321 AC_SUBST(NAFLAGS)
9322 AC_SUBST(LIBJPEG_CFLAGS)
9323 AC_SUBST(LIBJPEG_LIBS)
9324 AC_SUBST(SYSTEM_LIBJPEG)
9326 dnl ===================================================================
9327 dnl Check for system clucene
9328 dnl ===================================================================
9329 dnl we should rather be using
9330 dnl libo_CHECK_SYSTEM_MODULE([clucence],[CLUCENE],[liblucence-core]) here
9331 dnl but the contribs-lib check seems tricky
9332 if test "$enable_xmlhelp" = yes -o "$enable_extension_integration" = yes; then
9333 AC_MSG_CHECKING([which clucene to use])
9334 if test "$with_system_clucene" = "yes"; then
9335     AC_MSG_RESULT([external])
9336     SYSTEM_CLUCENE=TRUE
9337     PKG_CHECK_MODULES(CLUCENE, libclucene-core)
9338     CLUCENE_CFLAGS=[$(printf '%s' "$CLUCENE_CFLAGS" | sed -e 's@-I[^ ]*/CLucene/ext@@' -e "s/-I/${ISYSTEM?}/g")]
9339     FilterLibs "${CLUCENE_LIBS}"
9340     CLUCENE_LIBS="${filteredlibs}"
9341     AC_LANG_PUSH([C++])
9342     save_CXXFLAGS=$CXXFLAGS
9343     save_CPPFLAGS=$CPPFLAGS
9344     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9345     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9346     dnl http://sourceforge.net/tracker/index.php?func=detail&aid=3392466&group_id=80013&atid=558446
9347     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9348     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9349                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9350     CXXFLAGS=$save_CXXFLAGS
9351     CPPFLAGS=$save_CPPFLAGS
9352     AC_LANG_POP([C++])
9354     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9355 else
9356     AC_MSG_RESULT([internal])
9357     SYSTEM_CLUCENE=
9358     BUILD_TYPE="$BUILD_TYPE CLUCENE"
9361 AC_SUBST(SYSTEM_CLUCENE)
9362 AC_SUBST(CLUCENE_CFLAGS)
9363 AC_SUBST(CLUCENE_LIBS)
9365 dnl ===================================================================
9366 dnl Check for system expat
9367 dnl ===================================================================
9368 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9370 dnl ===================================================================
9371 dnl Check for system xmlsec
9372 dnl ===================================================================
9373 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.28])
9375 AC_MSG_CHECKING([whether to enable Embedded OpenType support])
9376 if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_eot" = "yes"; then
9377     ENABLE_EOT="TRUE"
9378     AC_DEFINE([ENABLE_EOT])
9379     AC_MSG_RESULT([yes])
9381     libo_CHECK_SYSTEM_MODULE([libeot],[LIBEOT],[libeot >= 0.01])
9382 else
9383     ENABLE_EOT=
9384     AC_MSG_RESULT([no])
9386 AC_SUBST([ENABLE_EOT])
9388 dnl ===================================================================
9389 dnl Check for DLP libs
9390 dnl ===================================================================
9391 AS_IF([test "$COM" = "MSC"],
9392       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9393       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9395 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1],["-I${WORKDIR}/UnpackedTarball/librevenge/inc"],["-L${librevenge_libdir} -lrevenge-0.0"])
9397 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9399 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9401 AS_IF([test "$COM" = "MSC"],
9402       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9403       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9405 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10],["-I${WORKDIR}/UnpackedTarball/libwpd/inc"],["-L${libwpd_libdir} -lwpd-0.10"])
9407 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9409 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9410 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.12])
9412 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9414 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9416 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9418 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.1])
9419 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.21])
9421 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9422 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10])
9424 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9426 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9427 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9429 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9431 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9433 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9435 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9437 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9438 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9440 dnl ===================================================================
9441 dnl Check for system lcms2
9442 dnl ===================================================================
9443 if test "$with_system_lcms2" != "yes"; then
9444     SYSTEM_LCMS2=
9446 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2],["-I${WORKDIR}/UnpackedTarball/lcms2/include"],["-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"])
9447 if test "$GCC" = "yes"; then
9448     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9450 if test "$COM" = "MSC"; then # override the above
9451     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9454 dnl ===================================================================
9455 dnl Check for system cppunit
9456 dnl ===================================================================
9457 if test "$_os" != "Android" ; then
9458     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9461 dnl ===================================================================
9462 dnl Check whether freetype is available
9463 dnl ===================================================================
9464 if test "$using_freetype_fontconfig" = yes; then
9465     AC_MSG_CHECKING([which freetype to use])
9467 if test "$using_freetype_fontconfig" = yes -a "$test_system_freetype" != no; then
9468     AC_MSG_RESULT([external])
9469     # FreeType has 3 different kinds of versions
9470     # * release, like 2.4.10
9471     # * libtool, like 13.0.7 (this what pkg-config returns)
9472     # * soname
9473     # FreeType's docs/VERSION.DLL provides a table mapping between the three
9474     #
9475     # 9.9.3 is 2.2.0
9476     # When the minimal version is at least 2.8.1, remove Skia's check down below.
9477     PKG_CHECK_MODULES(FREETYPE, freetype2 >= 9.9.3)
9478     FREETYPE_CFLAGS=$(printf '%s' "$FREETYPE_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9479     FilterLibs "${FREETYPE_LIBS}"
9480     FREETYPE_LIBS="${filteredlibs}"
9481     SYSTEM_FREETYPE=TRUE
9482 elif test "$using_freetype_fontconfig" = yes; then
9483     AC_MSG_RESULT([internal])
9484     FREETYPE_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"
9485     if test "x$ac_config_site_64bit_host" = xYES; then
9486         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9487     else
9488         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9489     fi
9490     BUILD_TYPE="$BUILD_TYPE FREETYPE"
9492 AC_SUBST(FREETYPE_CFLAGS)
9493 AC_SUBST(FREETYPE_LIBS)
9494 AC_SUBST([SYSTEM_FREETYPE])
9496 # ===================================================================
9497 # Check for system libxslt
9498 # to prevent incompatibilities between internal libxml2 and external libxslt,
9499 # or vice versa, use with_system_libxml here
9500 # ===================================================================
9501 if test "$with_system_libxml" = "auto"; then
9502     case "$_os" in
9503     WINNT|iOS|Android)
9504         with_system_libxml="$with_system_libs"
9505         ;;
9506     Emscripten)
9507         with_system_libxml=no
9508         ;;
9509     *)
9510         if test "$enable_fuzzers" != "yes"; then
9511             with_system_libxml=yes
9512         else
9513             with_system_libxml=no
9514         fi
9515         ;;
9516     esac
9519 AC_MSG_CHECKING([which libxslt to use])
9520 if test "$with_system_libxml" = "yes"; then
9521     AC_MSG_RESULT([external])
9522     SYSTEM_LIBXSLT=TRUE
9523     if test "$_os" = "Darwin"; then
9524         dnl make sure to use SDK path
9525         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9526         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9527         dnl omit -L/usr/lib
9528         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9529         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9530     else
9531         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9532         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9533         FilterLibs "${LIBXSLT_LIBS}"
9534         LIBXSLT_LIBS="${filteredlibs}"
9535         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9536         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9537         FilterLibs "${LIBEXSLT_LIBS}"
9538         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9539     fi
9541     dnl Check for xsltproc
9542     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9543     if test "$XSLTPROC" = "no"; then
9544         AC_MSG_ERROR([xsltproc is required])
9545     fi
9546 else
9547     AC_MSG_RESULT([internal])
9548     SYSTEM_LIBXSLT=
9549     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9551 AC_SUBST(SYSTEM_LIBXSLT)
9552 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9553     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9555 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9557 AC_SUBST(LIBEXSLT_CFLAGS)
9558 AC_SUBST(LIBEXSLT_LIBS)
9559 AC_SUBST(LIBXSLT_CFLAGS)
9560 AC_SUBST(LIBXSLT_LIBS)
9561 AC_SUBST(XSLTPROC)
9563 # ===================================================================
9564 # Check for system libxml
9565 # ===================================================================
9566 AC_MSG_CHECKING([which libxml to use])
9567 if test "$with_system_libxml" = "yes"; then
9568     AC_MSG_RESULT([external])
9569     SYSTEM_LIBXML=TRUE
9570     if test "$_os" = "Darwin"; then
9571         dnl make sure to use SDK path
9572         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9573         dnl omit -L/usr/lib
9574         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9575     elif test $_os = iOS; then
9576         dnl make sure to use SDK path
9577         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9578         LIBXML_CFLAGS="-I$usr/include/libxml2"
9579         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9580     else
9581         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9582         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9583         FilterLibs "${LIBXML_LIBS}"
9584         LIBXML_LIBS="${filteredlibs}"
9585     fi
9587     dnl Check for xmllint
9588     AC_PATH_PROG(XMLLINT, xmllint, no)
9589     if test "$XMLLINT" = "no"; then
9590         AC_MSG_ERROR([xmllint is required])
9591     fi
9592 else
9593     AC_MSG_RESULT([internal])
9594     SYSTEM_LIBXML=
9595     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9596     if test "$COM" = "MSC"; then
9597         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9598     fi
9599     if test "$COM" = "MSC"; then
9600         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9601     else
9602         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9603         if test "$_os" = Android; then
9604             LIBXML_LIBS="$LIBXML_LIBS -lm"
9605         fi
9606     fi
9607     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9609 AC_SUBST(SYSTEM_LIBXML)
9610 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9611     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9613 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9614 AC_SUBST(LIBXML_CFLAGS)
9615 AC_SUBST(LIBXML_LIBS)
9616 AC_SUBST(XMLLINT)
9618 # =====================================================================
9619 # Checking for a Python interpreter with version >= 3.3.
9620 # Optionally user can pass an option to configure, i. e.
9621 # ./configure PYTHON=/usr/bin/python
9622 # =====================================================================
9623 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9624     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9625     # unless PYTHON is defined as above which allows 'system'
9626     enable_python=internal
9628 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9629     if test -n "$PYTHON"; then
9630         PYTHON_FOR_BUILD=$PYTHON
9631     else
9632         # This allows a lack of system python with no error, we use internal one in that case.
9633         AM_PATH_PYTHON([3.3],, [:])
9634         # Clean PYTHON_VERSION checked below if cross-compiling
9635         PYTHON_VERSION=""
9636         if test "$PYTHON" != ":"; then
9637             PYTHON_FOR_BUILD=$PYTHON
9638         fi
9639     fi
9641 AC_SUBST(PYTHON_FOR_BUILD)
9643 # Checks for Python to use for Pyuno
9644 AC_MSG_CHECKING([which Python to use for Pyuno])
9645 case "$enable_python" in
9646 no|disable)
9647     if test -z $PYTHON_FOR_BUILD; then
9648         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9649         # requirement from the choice whether to include Python stuff in the installer, but why
9650         # bother?
9651         if test "$cross_compiling" = yes; then
9652             enable_python=system
9653         else
9654             AC_MSG_ERROR([Python is required at build time.])
9655         fi
9656     fi
9657     enable_python=no
9658     AC_MSG_RESULT([none])
9659     ;;
9660 ""|yes|auto)
9661     if test "$DISABLE_SCRIPTING" = TRUE -a -n "$PYTHON_FOR_BUILD"; then
9662         AC_MSG_RESULT([no, overridden by --disable-scripting])
9663         enable_python=no
9664     elif test $build_os = cygwin; then
9665         dnl When building on Windows we don't attempt to use any installed
9666         dnl "system"  Python.
9667         AC_MSG_RESULT([fully internal])
9668         enable_python=internal
9669     elif test "$cross_compiling" = yes; then
9670         AC_MSG_RESULT([system])
9671         enable_python=system
9672     else
9673         # Unset variables set by the above AM_PATH_PYTHON so that
9674         # we actually do check anew.
9675         AC_MSG_RESULT([])
9676         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
9677         AM_PATH_PYTHON([3.3],, [:])
9678         AC_MSG_CHECKING([which Python to use for Pyuno])
9679         if test "$PYTHON" = ":"; then
9680             if test -z "$PYTHON_FOR_BUILD"; then
9681                 AC_MSG_RESULT([fully internal])
9682             else
9683                 AC_MSG_RESULT([internal])
9684             fi
9685             enable_python=internal
9686         else
9687             AC_MSG_RESULT([system])
9688             enable_python=system
9689         fi
9690     fi
9691     ;;
9692 internal)
9693     AC_MSG_RESULT([internal])
9694     ;;
9695 fully-internal)
9696     AC_MSG_RESULT([fully internal])
9697     enable_python=internal
9698     ;;
9699 system)
9700     AC_MSG_RESULT([system])
9701     if test "$_os" = Darwin -a -z "$PYTHON"; then
9702         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
9703     fi
9704     ;;
9706     AC_MSG_ERROR([Incorrect --enable-python option])
9707     ;;
9708 esac
9710 if test $enable_python != no; then
9711     BUILD_TYPE="$BUILD_TYPE PYUNO"
9714 if test $enable_python = system; then
9715     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
9716         # Fallback: Accept these in the environment, or as set above
9717         # for MacOSX.
9718         :
9719     elif test "$cross_compiling" != yes; then
9720         # Unset variables set by the above AM_PATH_PYTHON so that
9721         # we actually do check anew.
9722         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
9723         # This causes an error if no python command is found
9724         AM_PATH_PYTHON([3.3])
9725         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
9726         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
9727         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
9728         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
9729         if test -z "$PKG_CONFIG"; then
9730             PYTHON_CFLAGS="-I$python_include"
9731             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9732         elif $PKG_CONFIG --exists python-$python_version-embed; then
9733             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
9734             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
9735         elif $PKG_CONFIG --exists python-$python_version; then
9736             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
9737             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
9738         else
9739             PYTHON_CFLAGS="-I$python_include"
9740             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9741         fi
9742         FilterLibs "${PYTHON_LIBS}"
9743         PYTHON_LIBS="${filteredlibs}"
9744     else
9745         dnl How to find out the cross-compilation Python installation path?
9746         AC_MSG_CHECKING([for python version])
9747         AS_IF([test -n "$PYTHON_VERSION"],
9748               [AC_MSG_RESULT([$PYTHON_VERSION])],
9749               [AC_MSG_RESULT([not found])
9750                AC_MSG_ERROR([no usable python found])])
9751         test -n "$PYTHON_CFLAGS" && break
9752     fi
9754     dnl Check if the headers really work
9755     save_CPPFLAGS="$CPPFLAGS"
9756     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
9757     AC_CHECK_HEADER(Python.h)
9758     CPPFLAGS="$save_CPPFLAGS"
9760     # let the PYTHON_FOR_BUILD match the same python installation that
9761     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
9762     # better for PythonTests.
9763     PYTHON_FOR_BUILD=$PYTHON
9766 if test "$with_lxml" != no; then
9767     if test -z "$PYTHON_FOR_BUILD"; then
9768         case $build_os in
9769             cygwin)
9770                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
9771                 ;;
9772             *)
9773                 if test "$cross_compiling" != yes ; then
9774                     BUILD_TYPE="$BUILD_TYPE LXML"
9775                 fi
9776                 ;;
9777         esac
9778     else
9779         AC_MSG_CHECKING([for python lxml])
9780         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
9781             AC_MSG_RESULT([yes])
9782         else
9783             case $build_os in
9784                 cygwin)
9785                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
9786                     ;;
9787                 *)
9788                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
9789                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
9790                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
9791                         else
9792                             BUILD_TYPE="$BUILD_TYPE LXML"
9793                             AC_MSG_RESULT([no, using internal lxml])
9794                         fi
9795                     else
9796                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
9797                     fi
9798                     ;;
9799             esac
9800         fi
9801     fi
9804 dnl By now enable_python should be "system", "internal" or "no"
9805 case $enable_python in
9806 system)
9807     SYSTEM_PYTHON=TRUE
9809     if test "x$ac_cv_header_Python_h" != "xyes"; then
9810        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
9811     fi
9813     AC_LANG_PUSH(C)
9814     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
9815     AC_MSG_CHECKING([for correct python library version])
9816        AC_RUN_IFELSE([AC_LANG_SOURCE([[
9817 #include <Python.h>
9819 int main(int argc, char **argv) {
9820    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
9821    else return 1;
9823        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
9824     AC_LANG_POP(C)
9826     dnl FIXME Check if the Python library can be linked with, too?
9827     ;;
9829 internal)
9830     SYSTEM_PYTHON=
9831     PYTHON_VERSION_MAJOR=3
9832     PYTHON_VERSION_MINOR=8
9833     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.10
9834     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
9835         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
9836     fi
9837     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
9838     BUILD_TYPE="$BUILD_TYPE PYTHON"
9839     if test "$OS" = LINUX -o "$OS" = WNT ; then
9840         BUILD_TYPE="$BUILD_TYPE LIBFFI"
9841     fi
9842     # Embedded Python dies without Home set
9843     if test "$HOME" = ""; then
9844         export HOME=""
9845     fi
9846     ;;
9848     DISABLE_PYTHON=TRUE
9849     SYSTEM_PYTHON=
9850     ;;
9852     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
9853     ;;
9854 esac
9856 AC_SUBST(DISABLE_PYTHON)
9857 AC_SUBST(SYSTEM_PYTHON)
9858 AC_SUBST(PYTHON_CFLAGS)
9859 AC_SUBST(PYTHON_LIBS)
9860 AC_SUBST(PYTHON_VERSION)
9861 AC_SUBST(PYTHON_VERSION_MAJOR)
9862 AC_SUBST(PYTHON_VERSION_MINOR)
9864 AC_MSG_CHECKING([whether to build LibreLogo])
9865 case "$enable_python" in
9866 no|disable)
9867     AC_MSG_RESULT([no; Python disabled])
9868     ;;
9870     if test "${enable_librelogo}" = "no"; then
9871         AC_MSG_RESULT([no])
9872     else
9873         AC_MSG_RESULT([yes])
9874         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
9875         AC_DEFINE([ENABLE_LIBRELOGO],1)
9876     fi
9877     ;;
9878 esac
9879 AC_SUBST(ENABLE_LIBRELOGO)
9881 ENABLE_MARIADBC=
9882 MARIADBC_MAJOR=1
9883 MARIADBC_MINOR=0
9884 MARIADBC_MICRO=2
9885 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
9886 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
9887     ENABLE_MARIADBC=TRUE
9888     AC_MSG_RESULT([yes])
9889     BUILD_TYPE="$BUILD_TYPE MARIADBC"
9890 else
9891     AC_MSG_RESULT([no])
9893 AC_SUBST(ENABLE_MARIADBC)
9894 AC_SUBST(MARIADBC_MAJOR)
9895 AC_SUBST(MARIADBC_MINOR)
9896 AC_SUBST(MARIADBC_MICRO)
9898 if test "$ENABLE_MARIADBC" = "TRUE"; then
9899     dnl ===================================================================
9900     dnl Check for system MariaDB
9901     dnl ===================================================================
9902     AC_MSG_CHECKING([which MariaDB to use])
9903     if test "$with_system_mariadb" = "yes"; then
9904         AC_MSG_RESULT([external])
9905         SYSTEM_MARIADB_CONNECTOR_C=TRUE
9906         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
9907         if test -z "$MARIADBCONFIG"; then
9908             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
9909             if test -z "$MARIADBCONFIG"; then
9910                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
9911                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
9912             fi
9913         fi
9914         AC_MSG_CHECKING([MariaDB version])
9915         MARIADB_VERSION=`$MARIADBCONFIG --version`
9916         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
9917         if test "$MARIADB_MAJOR" -ge "5"; then
9918             AC_MSG_RESULT([OK])
9919         else
9920             AC_MSG_ERROR([too old, use 5.0.x or later])
9921         fi
9922         AC_MSG_CHECKING([for MariaDB Client library])
9923         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
9924         if test "$COM_IS_CLANG" = TRUE; then
9925             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
9926         fi
9927         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
9928         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
9929         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
9930         dnl linux32:
9931         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
9932             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
9933             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
9934                 | sed -e 's|/lib64/|/lib/|')
9935         fi
9936         FilterLibs "${MARIADB_LIBS}"
9937         MARIADB_LIBS="${filteredlibs}"
9938         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
9939         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
9940         if test "$enable_bundle_mariadb" = "yes"; then
9941             AC_MSG_RESULT([yes])
9942             BUNDLE_MARIADB_CONNECTOR_C=TRUE
9943             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
9945 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
9947 /g' | grep -E '(mysqlclient|mariadb)')
9948             if test "$_os" = "Darwin"; then
9949                 LIBMARIADB=${LIBMARIADB}.dylib
9950             elif test "$_os" = "WINNT"; then
9951                 LIBMARIADB=${LIBMARIADB}.dll
9952             else
9953                 LIBMARIADB=${LIBMARIADB}.so
9954             fi
9955             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
9956             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
9957             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
9958                 AC_MSG_RESULT([found.])
9959                 PathFormat "$LIBMARIADB_PATH"
9960                 LIBMARIADB_PATH="$formatted_path"
9961             else
9962                 AC_MSG_ERROR([not found.])
9963             fi
9964         else
9965             AC_MSG_RESULT([no])
9966             BUNDLE_MARIADB_CONNECTOR_C=
9967         fi
9968     else
9969         AC_MSG_RESULT([internal])
9970         SYSTEM_MARIADB_CONNECTOR_C=
9971         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
9972         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
9973         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
9974     fi
9976     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
9977     AC_SUBST(MARIADB_CFLAGS)
9978     AC_SUBST(MARIADB_LIBS)
9979     AC_SUBST(LIBMARIADB)
9980     AC_SUBST(LIBMARIADB_PATH)
9981     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
9984 dnl ===================================================================
9985 dnl Check for system hsqldb
9986 dnl ===================================================================
9987 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
9988     HSQLDB_USE_JDBC_4_1=
9989     AC_MSG_CHECKING([which hsqldb to use])
9990     if test "$with_system_hsqldb" = "yes"; then
9991         AC_MSG_RESULT([external])
9992         SYSTEM_HSQLDB=TRUE
9993         if test -z $HSQLDB_JAR; then
9994             HSQLDB_JAR=/usr/share/java/hsqldb.jar
9995         fi
9996         if ! test -f $HSQLDB_JAR; then
9997                AC_MSG_ERROR(hsqldb.jar not found.)
9998         fi
9999         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
10000         export HSQLDB_JAR
10001         if $PERL -e \
10002            'use Archive::Zip;
10003             my $file = "$ENV{'HSQLDB_JAR'}";
10004             my $zip = Archive::Zip->new( $file );
10005             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
10006             if ( $mf =~ m/Specification-Version: 1.8.*/ )
10007             {
10008                 push @l, split(/\n/, $mf);
10009                 foreach my $line (@l)
10010                 {
10011                     if ($line =~ m/Specification-Version:/)
10012                     {
10013                         ($t, $version) = split (/:/,$line);
10014                         $version =~ s/^\s//;
10015                         ($a, $b, $c, $d) = split (/\./,$version);
10016                         if ($c == "0" && $d > "8")
10017                         {
10018                             exit 0;
10019                         }
10020                         else
10021                         {
10022                             exit 1;
10023                         }
10024                     }
10025                 }
10026             }
10027             else
10028             {
10029                 exit 1;
10030             }'; then
10031             AC_MSG_RESULT([yes])
10032         else
10033             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
10034         fi
10035     else
10036         AC_MSG_RESULT([internal])
10037         SYSTEM_HSQLDB=
10038         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10039         NEED_ANT=TRUE
10040         AC_MSG_CHECKING([whether hsqldb should be built with JDBC 4.1])
10041         javanumver=`$JAVAINTERPRETER -version 2>&1 | $AWK -v num=true -f $SRC_ROOT/solenv/bin/getcompver.awk`
10042         if expr "$javanumver" '>=' 000100060000 > /dev/null; then
10043             AC_MSG_RESULT([yes])
10044             HSQLDB_USE_JDBC_4_1=TRUE
10045         else
10046             AC_MSG_RESULT([no])
10047         fi
10048     fi
10049 else
10050     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
10051         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10052     fi
10054 AC_SUBST(SYSTEM_HSQLDB)
10055 AC_SUBST(HSQLDB_JAR)
10056 AC_SUBST([HSQLDB_USE_JDBC_4_1])
10058 dnl ===================================================================
10059 dnl Check for PostgreSQL stuff
10060 dnl ===================================================================
10061 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
10062 if test "x$enable_postgresql_sdbc" != "xno"; then
10063     AC_MSG_RESULT([yes])
10064     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
10066     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
10067         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
10068     fi
10069     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
10070         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
10071     fi
10073     postgres_interface=""
10074     if test "$with_system_postgresql" = "yes"; then
10075         postgres_interface="external PostgreSQL"
10076         SYSTEM_POSTGRESQL=TRUE
10077         if test "$_os" = Darwin; then
10078             supp_path=''
10079             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
10080                 pg_supp_path="$P_SEP$d$pg_supp_path"
10081             done
10082         fi
10083         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
10084         if test -n "$PGCONFIG"; then
10085             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
10086             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
10087         else
10088             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
10089               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
10090               POSTGRESQL_LIB=$POSTGRESQL_LIBS
10091             ],[
10092               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
10093             ])
10094         fi
10095         FilterLibs "${POSTGRESQL_LIB}"
10096         POSTGRESQL_LIB="${filteredlibs}"
10097     else
10098         # if/when anything else than PostgreSQL uses Kerberos,
10099         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
10100         WITH_KRB5=
10101         WITH_GSSAPI=
10102         case "$_os" in
10103         Darwin)
10104             # macOS has system MIT Kerberos 5 since 10.4
10105             if test "$with_krb5" != "no"; then
10106                 WITH_KRB5=TRUE
10107                 save_LIBS=$LIBS
10108                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
10109                 # that the libraries where these functions are located on macOS will change, is it?
10110                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10111                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10112                 KRB5_LIBS=$LIBS
10113                 LIBS=$save_LIBS
10114                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10115                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10116                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10117                 LIBS=$save_LIBS
10118             fi
10119             if test "$with_gssapi" != "no"; then
10120                 WITH_GSSAPI=TRUE
10121                 save_LIBS=$LIBS
10122                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10123                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10124                 GSSAPI_LIBS=$LIBS
10125                 LIBS=$save_LIBS
10126             fi
10127             ;;
10128         WINNT)
10129             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
10130                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
10131             fi
10132             ;;
10133         Linux|GNU|*BSD|DragonFly)
10134             if test "$with_krb5" != "no"; then
10135                 WITH_KRB5=TRUE
10136                 save_LIBS=$LIBS
10137                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10138                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10139                 KRB5_LIBS=$LIBS
10140                 LIBS=$save_LIBS
10141                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10142                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10143                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10144                 LIBS=$save_LIBS
10145             fi
10146             if test "$with_gssapi" != "no"; then
10147                 WITH_GSSAPI=TRUE
10148                 save_LIBS=$LIBS
10149                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10150                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10151                 GSSAPI_LIBS=$LIBS
10152                 LIBS=$save_LIBS
10153             fi
10154             ;;
10155         *)
10156             if test "$with_krb5" = "yes"; then
10157                 WITH_KRB5=TRUE
10158                 save_LIBS=$LIBS
10159                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10160                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10161                 KRB5_LIBS=$LIBS
10162                 LIBS=$save_LIBS
10163                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10164                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10165                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10166                 LIBS=$save_LIBS
10167             fi
10168             if test "$with_gssapi" = "yes"; then
10169                 WITH_GSSAPI=TRUE
10170                 save_LIBS=$LIBS
10171                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10172                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10173                 LIBS=$save_LIBS
10174                 GSSAPI_LIBS=$LIBS
10175             fi
10176         esac
10178         if test -n "$with_libpq_path"; then
10179             SYSTEM_POSTGRESQL=TRUE
10180             postgres_interface="external libpq"
10181             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
10182             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
10183         else
10184             SYSTEM_POSTGRESQL=
10185             postgres_interface="internal"
10186             POSTGRESQL_LIB=""
10187             POSTGRESQL_INC="%OVERRIDE_ME%"
10188             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10189         fi
10190     fi
10192     AC_MSG_CHECKING([PostgreSQL C interface])
10193     AC_MSG_RESULT([$postgres_interface])
10195     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10196         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10197         save_CFLAGS=$CFLAGS
10198         save_CPPFLAGS=$CPPFLAGS
10199         save_LIBS=$LIBS
10200         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10201         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10202         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10203         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10204             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10205         CFLAGS=$save_CFLAGS
10206         CPPFLAGS=$save_CPPFLAGS
10207         LIBS=$save_LIBS
10208     fi
10209     BUILD_POSTGRESQL_SDBC=TRUE
10210 else
10211     AC_MSG_RESULT([no])
10213 AC_SUBST(WITH_KRB5)
10214 AC_SUBST(WITH_GSSAPI)
10215 AC_SUBST(GSSAPI_LIBS)
10216 AC_SUBST(KRB5_LIBS)
10217 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10218 AC_SUBST(SYSTEM_POSTGRESQL)
10219 AC_SUBST(POSTGRESQL_INC)
10220 AC_SUBST(POSTGRESQL_LIB)
10222 dnl ===================================================================
10223 dnl Check for Firebird stuff
10224 dnl ===================================================================
10225 ENABLE_FIREBIRD_SDBC=
10226 if test "$enable_firebird_sdbc" = "yes" ; then
10227     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10229     dnl ===================================================================
10230     dnl Check for system Firebird
10231     dnl ===================================================================
10232     AC_MSG_CHECKING([which Firebird to use])
10233     if test "$with_system_firebird" = "yes"; then
10234         AC_MSG_RESULT([external])
10235         SYSTEM_FIREBIRD=TRUE
10236         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10237         if test -z "$FIREBIRDCONFIG"; then
10238             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10239             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10240                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10241             ])
10242             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10243         else
10244             AC_MSG_NOTICE([fb_config found])
10245             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10246             AC_MSG_CHECKING([for Firebird Client library])
10247             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10248             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10249             FilterLibs "${FIREBIRD_LIBS}"
10250             FIREBIRD_LIBS="${filteredlibs}"
10251         fi
10252         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10253         AC_MSG_CHECKING([Firebird version])
10254         if test -n "${FIREBIRD_VERSION}"; then
10255             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10256             if test "$FIREBIRD_MAJOR" -ge "3"; then
10257                 AC_MSG_RESULT([OK])
10258             else
10259                 AC_MSG_ERROR([Ensure firebird >= 3 is installed])
10260             fi
10261         else
10262             save_CFLAGS="${CFLAGS}"
10263             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10264             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10265 #if defined(FB_API_VER) && FB_API_VER == 30
10266 int fb_api_is_30(void) { return 0; }
10267 #else
10268 #error "Wrong Firebird API version"
10269 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10270             CFLAGS="$save_CFLAGS"
10271         fi
10272         ENABLE_FIREBIRD_SDBC=TRUE
10273         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10274     elif test "$enable_database_connectivity" = no; then
10275         AC_MSG_RESULT([none])
10276     elif test "$cross_compiling" = "yes"; then
10277         AC_MSG_RESULT([none])
10278     else
10279         dnl Embedded Firebird has version 3.0
10280         dnl We need libatomic_ops for any non X86/X64 system
10281         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10282             dnl ===================================================================
10283             dnl Check for system libatomic_ops
10284             dnl ===================================================================
10285             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10286             if test "$with_system_libatomic_ops" = "yes"; then
10287                 SYSTEM_LIBATOMIC_OPS=TRUE
10288                 AC_CHECK_HEADERS(atomic_ops.h, [],
10289                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10290             else
10291                 SYSTEM_LIBATOMIC_OPS=
10292                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10293                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10294                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10295             fi
10296         fi
10298         AC_MSG_RESULT([internal])
10299         SYSTEM_FIREBIRD=
10300         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10301         FIREBIRD_LIBS="-lfbclient"
10303         if test "$with_system_libtommath" = "yes"; then
10304             SYSTEM_LIBTOMMATH=TRUE
10305             dnl check for tommath presence
10306             save_LIBS=$LIBS
10307             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10308             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10309             LIBS=$save_LIBS
10310         else
10311             SYSTEM_LIBTOMMATH=
10312             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10313             LIBTOMMATH_LIBS="-ltommath"
10314             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10315         fi
10317         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10318         ENABLE_FIREBIRD_SDBC=TRUE
10319         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10320     fi
10322 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10323 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10324 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10325 AC_SUBST(LIBATOMIC_OPS_LIBS)
10326 AC_SUBST(SYSTEM_FIREBIRD)
10327 AC_SUBST(FIREBIRD_CFLAGS)
10328 AC_SUBST(FIREBIRD_LIBS)
10329 AC_SUBST(SYSTEM_LIBTOMMATH)
10330 AC_SUBST(LIBTOMMATH_CFLAGS)
10331 AC_SUBST(LIBTOMMATH_LIBS)
10333 dnl ===================================================================
10334 dnl Check for system curl
10335 dnl ===================================================================
10336 AC_MSG_CHECKING([which libcurl to use])
10337 if test "$with_system_curl" = "auto"; then
10338     with_system_curl="$with_system_libs"
10341 if test "$enable_curl" = "yes" -a "$with_system_curl" = "yes"; then
10342     AC_MSG_RESULT([external])
10343     SYSTEM_CURL=TRUE
10345     PKG_CHECK_MODULES(CURL, libcurl >= 7.68.0)
10347     ENABLE_CURL=TRUE
10348 elif test "$enable_curl" = "no"; then
10349     AC_MSG_RESULT([none])
10350 else
10351     AC_MSG_RESULT([internal])
10352     SYSTEM_CURL=
10353     BUILD_TYPE="$BUILD_TYPE CURL"
10354     ENABLE_CURL=TRUE
10356 AC_SUBST(SYSTEM_CURL)
10357 AC_SUBST(CURL_CFLAGS)
10358 AC_SUBST(CURL_LIBS)
10359 AC_SUBST(ENABLE_CURL)
10361 dnl ===================================================================
10362 dnl Check for system boost
10363 dnl ===================================================================
10364 AC_MSG_CHECKING([which boost to use])
10365 if test "$with_system_boost" = "yes"; then
10366     AC_MSG_RESULT([external])
10367     SYSTEM_BOOST=TRUE
10368     AX_BOOST_BASE([1.66],,[AC_MSG_ERROR([no suitable Boost found])])
10369     AX_BOOST_DATE_TIME
10370     AX_BOOST_FILESYSTEM
10371     AX_BOOST_IOSTREAMS
10372     AX_BOOST_LOCALE
10373     AC_LANG_PUSH([C++])
10374     save_CXXFLAGS=$CXXFLAGS
10375     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10376     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10377        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10378     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10379        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10380     CXXFLAGS=$save_CXXFLAGS
10381     AC_LANG_POP([C++])
10382     # this is in m4/ax_boost_base.m4
10383     FilterLibs "${BOOST_LDFLAGS}"
10384     BOOST_LDFLAGS="${filteredlibs}"
10385 else
10386     AC_MSG_RESULT([internal])
10387     BUILD_TYPE="$BUILD_TYPE BOOST"
10388     SYSTEM_BOOST=
10389     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10390         # use warning-suppressing wrapper headers
10391         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10392     else
10393         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10394     fi
10396 AC_SUBST(SYSTEM_BOOST)
10398 dnl ===================================================================
10399 dnl Check for system mdds
10400 dnl ===================================================================
10401 libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-2.0 >= 2.0.0], ["-I${WORKDIR}/UnpackedTarball/mdds/include"])
10403 dnl ===================================================================
10404 dnl Check for system cuckoo
10405 dnl ===================================================================
10406 AC_MSG_CHECKING([which cuckoo to use])
10407 if test "$with_system_cuckoo" = "yes"; then
10408     AC_MSG_RESULT([external])
10409     SYSTEM_CUCKOO=TRUE
10410     AC_LANG_PUSH([C++])
10411     AC_CHECK_HEADER([libcuckoo/cuckoohash_map.hh], [],
10412        [AC_MSG_ERROR([libcuckoo/cuckoohash_map.hh not found. install cuckoo])], [])
10413     AC_LANG_POP([C++])
10414 else
10415     AC_MSG_RESULT([internal])
10416     BUILD_TYPE="$BUILD_TYPE CUCKOO"
10417     SYSTEM_CUCKOO=
10418     CUCKOO_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/cuckoo"
10420 AC_SUBST([CUCKOO_CFLAGS])
10421 AC_SUBST([SYSTEM_CUCKOO])
10423 dnl ===================================================================
10424 dnl Check for system glm
10425 dnl ===================================================================
10426 AC_MSG_CHECKING([which glm to use])
10427 if test "$with_system_glm" = "yes"; then
10428     AC_MSG_RESULT([external])
10429     SYSTEM_GLM=TRUE
10430     AC_LANG_PUSH([C++])
10431     AC_CHECK_HEADER([glm/glm.hpp], [],
10432        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10433     AC_LANG_POP([C++])
10434 else
10435     AC_MSG_RESULT([internal])
10436     BUILD_TYPE="$BUILD_TYPE GLM"
10437     SYSTEM_GLM=
10438     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10440 AC_SUBST([GLM_CFLAGS])
10441 AC_SUBST([SYSTEM_GLM])
10443 dnl ===================================================================
10444 dnl Check for system odbc
10445 dnl ===================================================================
10446 AC_MSG_CHECKING([which odbc headers to use])
10447 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
10448     AC_MSG_RESULT([external])
10449     SYSTEM_ODBC_HEADERS=TRUE
10451     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10452         save_CPPFLAGS=$CPPFLAGS
10453         find_winsdk
10454         PathFormat "$winsdktest"
10455         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"
10456         AC_CHECK_HEADER(sqlext.h, [],
10457             [AC_MSG_ERROR(odbc not found. install odbc)],
10458             [#include <windows.h>])
10459         CPPFLAGS=$save_CPPFLAGS
10460     else
10461         AC_CHECK_HEADER(sqlext.h, [],
10462             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10463     fi
10464 elif test "$enable_database_connectivity" = no; then
10465     AC_MSG_RESULT([none])
10466 else
10467     AC_MSG_RESULT([internal])
10468     SYSTEM_ODBC_HEADERS=
10470 AC_SUBST(SYSTEM_ODBC_HEADERS)
10472 dnl ===================================================================
10473 dnl Check for system NSS
10474 dnl ===================================================================
10475 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10476     libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8],,,[
10477         case "$_os" in
10478             Linux)
10479                 with_system_nss=yes
10480             ;;
10481             *)
10482                 with_system_nss=no
10483             ;;
10484         esac])
10485     AC_DEFINE(HAVE_FEATURE_NSS)
10486     ENABLE_NSS=TRUE
10487 elif test $_os != iOS ; then
10488     with_tls=openssl
10490 AC_SUBST(ENABLE_NSS)
10492 dnl ===================================================================
10493 dnl Enable LDAP support
10494 dnl ===================================================================
10496 if test "$test_openldap" = yes; then
10497     AC_MSG_CHECKING([whether to enable LDAP support])
10498     if test "$enable_ldap" = yes -a \( "$ENABLE_NSS" = TRUE -o "$with_system_openldap" = yes \); then
10499         AC_MSG_RESULT([yes])
10500         ENABLE_LDAP=TRUE
10501     else
10502         if test "$enable_ldap" != "yes"; then
10503             AC_MSG_RESULT([no])
10504         else
10505             AC_MSG_RESULT([no (needs NSS or system openldap)])
10506         fi
10507     fi
10509 dnl ===================================================================
10510 dnl Check for system openldap
10511 dnl ===================================================================
10513     if test "$ENABLE_LDAP" = TRUE; then
10514         AC_MSG_CHECKING([which openldap library to use])
10515         if test "$with_system_openldap" = yes; then
10516             AC_MSG_RESULT([external])
10517             SYSTEM_OPENLDAP=TRUE
10518             AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10519             AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10520             AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10521         else
10522             AC_MSG_RESULT([internal])
10523             BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10524         fi
10525     fi
10528 AC_SUBST(ENABLE_LDAP)
10529 AC_SUBST(SYSTEM_OPENLDAP)
10531 dnl ===================================================================
10532 dnl Check for TLS/SSL and cryptographic implementation to use
10533 dnl ===================================================================
10534 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10535 if test -n "$with_tls"; then
10536     case $with_tls in
10537     openssl)
10538         AC_DEFINE(USE_TLS_OPENSSL)
10539         TLS=OPENSSL
10540         AC_MSG_RESULT([$TLS])
10542         if test "$enable_openssl" != "yes"; then
10543             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10544         fi
10546         # warn that OpenSSL has been selected but not all TLS code has this option
10547         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS])
10548         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS"
10549         ;;
10550     nss)
10551         AC_DEFINE(USE_TLS_NSS)
10552         TLS=NSS
10553         AC_MSG_RESULT([$TLS])
10554         ;;
10555     no)
10556         AC_MSG_RESULT([none])
10557         AC_MSG_WARN([Skipping TLS/SSL])
10558         ;;
10559     *)
10560         AC_MSG_RESULT([])
10561         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10562 openssl - OpenSSL
10563 nss - Mozilla's Network Security Services (NSS)
10564     ])
10565         ;;
10566     esac
10567 else
10568     # default to using NSS, it results in smaller oox lib
10569     AC_DEFINE(USE_TLS_NSS)
10570     TLS=NSS
10571     AC_MSG_RESULT([$TLS])
10573 AC_SUBST(TLS)
10575 dnl ===================================================================
10576 dnl Check for system sane
10577 dnl ===================================================================
10578 AC_MSG_CHECKING([which sane header to use])
10579 if test "$with_system_sane" = "yes"; then
10580     AC_MSG_RESULT([external])
10581     AC_CHECK_HEADER(sane/sane.h, [],
10582       [AC_MSG_ERROR(sane not found. install sane)], [])
10583 else
10584     AC_MSG_RESULT([internal])
10585     BUILD_TYPE="$BUILD_TYPE SANE"
10588 dnl ===================================================================
10589 dnl Check for system icu
10590 dnl ===================================================================
10591 SYSTEM_GENBRK=
10592 SYSTEM_GENCCODE=
10593 SYSTEM_GENCMN=
10595 ICU_MAJOR=70
10596 ICU_MINOR=1
10597 ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10598 ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10599 ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10600 AC_MSG_CHECKING([which icu to use])
10601 if test "$with_system_icu" = "yes"; then
10602     AC_MSG_RESULT([external])
10603     SYSTEM_ICU=TRUE
10604     AC_LANG_PUSH([C++])
10605     AC_MSG_CHECKING([for unicode/rbbi.h])
10606     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10607     AC_LANG_POP([C++])
10609     if test "$cross_compiling" != "yes"; then
10610         PKG_CHECK_MODULES(ICU, icu-i18n >= 4.6)
10611         ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10612         ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10613         ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10614     fi
10616     if test "$cross_compiling" = "yes" -a \( "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" \); then
10617         ICU_VERSION_FOR_BUILD=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10618         ICU_MAJOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f1`
10619         ICU_MINOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f2`
10620         AC_MSG_CHECKING([if MinGW and system versions of ICU are compatible])
10621         if test "$ICU_MAJOR" -eq "$ICU_MAJOR_FOR_BUILD" -a "$ICU_MINOR" -eq "$ICU_MINOR_FOR_BUILD"; then
10622             AC_MSG_RESULT([yes])
10623         else
10624             AC_MSG_RESULT([no])
10625             if test "$with_system_icu_for_build" != "force"; then
10626                 AC_MSG_ERROR([System ICU is not version-compatible with MinGW ICU.
10627 You can use --with-system-icu-for-build=force to use it anyway.])
10628             fi
10629         fi
10630     fi
10632     if test "$cross_compiling" != "yes" -o "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force"; then
10633         # using the system icu tools can lead to version confusion, use the
10634         # ones from the build environment when cross-compiling
10635         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10636         if test -z "$SYSTEM_GENBRK"; then
10637             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10638         fi
10639         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10640         if test -z "$SYSTEM_GENCCODE"; then
10641             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10642         fi
10643         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10644         if test -z "$SYSTEM_GENCMN"; then
10645             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10646         fi
10647         if test "$ICU_MAJOR" -ge "49"; then
10648             ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10649             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10650             ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10651         else
10652             ICU_RECLASSIFIED_PREPEND_SET_EMPTY=
10653             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER=
10654             ICU_RECLASSIFIED_HEBREW_LETTER=
10655         fi
10656     fi
10658     if test "$cross_compiling" = "yes"; then
10659         if test "$ICU_MAJOR" -ge "50"; then
10660             AC_MSG_RESULT([Ignore ICU_MINOR as obviously the libraries don't include the minor version in their names any more])
10661             ICU_MINOR=""
10662         fi
10663     fi
10664 else
10665     AC_MSG_RESULT([internal])
10666     SYSTEM_ICU=
10667     BUILD_TYPE="$BUILD_TYPE ICU"
10668     # surprisingly set these only for "internal" (to be used by various other
10669     # external libs): the system icu-config is quite unhelpful and spits out
10670     # dozens of weird flags and also default path -I/usr/include
10671     ICU_CFLAGS="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10672     ICU_LIBS="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10674 if test "$ICU_MAJOR" -ge "59"; then
10675     # As of ICU 59 it defaults to typedef char16_t UChar; which is available
10676     # with -std=c++11 but not all external libraries can be built with that,
10677     # for those use a bit-compatible typedef uint16_t UChar; see
10678     # icu/source/common/unicode/umachine.h
10679     ICU_UCHAR_TYPE="-DUCHAR_TYPE=uint16_t"
10680 else
10681     ICU_UCHAR_TYPE=""
10683 AC_SUBST(SYSTEM_ICU)
10684 AC_SUBST(SYSTEM_GENBRK)
10685 AC_SUBST(SYSTEM_GENCCODE)
10686 AC_SUBST(SYSTEM_GENCMN)
10687 AC_SUBST(ICU_MAJOR)
10688 AC_SUBST(ICU_MINOR)
10689 AC_SUBST(ICU_RECLASSIFIED_PREPEND_SET_EMPTY)
10690 AC_SUBST(ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER)
10691 AC_SUBST(ICU_RECLASSIFIED_HEBREW_LETTER)
10692 AC_SUBST(ICU_CFLAGS)
10693 AC_SUBST(ICU_LIBS)
10694 AC_SUBST(ICU_UCHAR_TYPE)
10696 dnl ==================================================================
10697 dnl Breakpad
10698 dnl ==================================================================
10699 DEFAULT_CRASHDUMP_VALUE="true"
10700 AC_MSG_CHECKING([whether to enable breakpad])
10701 if test "$enable_breakpad" != yes; then
10702     AC_MSG_RESULT([no])
10703 else
10704     AC_MSG_RESULT([yes])
10705     ENABLE_BREAKPAD="TRUE"
10706     AC_DEFINE(ENABLE_BREAKPAD)
10707     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
10708     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
10710     AC_MSG_CHECKING([for disable crash dump])
10711     if test "$enable_crashdump" = no; then
10712         DEFAULT_CRASHDUMP_VALUE="false"
10713         AC_MSG_RESULT([yes])
10714     else
10715        AC_MSG_RESULT([no])
10716     fi
10718     AC_MSG_CHECKING([for crashreport config])
10719     if test "$with_symbol_config" = "no"; then
10720         BREAKPAD_SYMBOL_CONFIG="invalid"
10721         AC_MSG_RESULT([no])
10722     else
10723         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
10724         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
10725         AC_MSG_RESULT([yes])
10726     fi
10727     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
10729 AC_SUBST(ENABLE_BREAKPAD)
10730 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
10732 dnl ==================================================================
10733 dnl libfuzzer
10734 dnl ==================================================================
10735 AC_MSG_CHECKING([whether to enable fuzzers])
10736 if test "$enable_fuzzers" != yes; then
10737     AC_MSG_RESULT([no])
10738 else
10739     if test -z $LIB_FUZZING_ENGINE; then
10740       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
10741     fi
10742     AC_MSG_RESULT([yes])
10743     ENABLE_FUZZERS="TRUE"
10744     AC_DEFINE([ENABLE_FUZZERS],1)
10745     BUILD_TYPE="$BUILD_TYPE FUZZERS"
10747 AC_SUBST(LIB_FUZZING_ENGINE)
10748 AC_SUBST(ENABLE_FUZZERS)
10750 dnl ===================================================================
10751 dnl Orcus
10752 dnl ===================================================================
10753 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.17 >= 0.17.2])
10754 if test "$with_system_orcus" != "yes"; then
10755     if test "$SYSTEM_BOOST" = "TRUE"; then
10756         dnl Link with Boost.System
10757         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
10758         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
10759         dnl in documentation has no effect.
10760         AX_BOOST_SYSTEM
10761     fi
10763 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
10764 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
10765 AC_SUBST([BOOST_SYSTEM_LIB])
10766 AC_SUBST(SYSTEM_LIBORCUS)
10768 dnl ===================================================================
10769 dnl HarfBuzz
10770 dnl ===================================================================
10771 libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3],
10772                          ["-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"],
10773                          ["-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"])
10775 libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 0.9.42],
10776                          ["-I${WORKDIR}/UnpackedTarball/harfbuzz/src"],
10777                          ["-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"])
10779 if test "$COM" = "MSC"; then # override the above
10780     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
10781     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
10784 if test "$with_system_harfbuzz" = "yes"; then
10785     if test "$with_system_graphite" = "no"; then
10786         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
10787     fi
10788     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
10789     save_LIBS="$LIBS"
10790     save_CFLAGS="$CFLAGS"
10791     LIBS="$LIBS $HARFBUZZ_LIBS"
10792     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
10793     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
10794     LIBS="$save_LIBS"
10795     CFLAGS="$save_CFLAGS"
10796 else
10797     if test "$with_system_graphite" = "yes"; then
10798         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
10799     fi
10802 if test "$USING_X11" = TRUE; then
10803     AC_PATH_X
10804     AC_PATH_XTRA
10805     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
10807     if test -z "$x_includes"; then
10808         x_includes="default_x_includes"
10809     fi
10810     if test -z "$x_libraries"; then
10811         x_libraries="default_x_libraries"
10812     fi
10813     CFLAGS="$CFLAGS $X_CFLAGS"
10814     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
10815     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
10816 else
10817     x_includes="no_x_includes"
10818     x_libraries="no_x_libraries"
10821 if test "$USING_X11" = TRUE; then
10822     dnl ===================================================================
10823     dnl Check for extension headers
10824     dnl ===================================================================
10825     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
10826      [#include <X11/extensions/shape.h>])
10828     # vcl needs ICE and SM
10829     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
10830     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
10831         [AC_MSG_ERROR(ICE library not found)])
10832     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
10833     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
10834         [AC_MSG_ERROR(SM library not found)])
10837 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
10838     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
10839     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
10842 dnl ===================================================================
10843 dnl Check for system Xrender
10844 dnl ===================================================================
10845 AC_MSG_CHECKING([whether to use Xrender])
10846 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
10847     AC_MSG_RESULT([yes])
10848     PKG_CHECK_MODULES(XRENDER, xrender)
10849     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10850     FilterLibs "${XRENDER_LIBS}"
10851     XRENDER_LIBS="${filteredlibs}"
10852     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
10853       [AC_MSG_ERROR(libXrender not found or functional)], [])
10854     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
10855       [AC_MSG_ERROR(Xrender not found. install X)], [])
10856 else
10857     AC_MSG_RESULT([no])
10859 AC_SUBST(XRENDER_CFLAGS)
10860 AC_SUBST(XRENDER_LIBS)
10862 dnl ===================================================================
10863 dnl Check for XRandr
10864 dnl ===================================================================
10865 AC_MSG_CHECKING([whether to enable RandR support])
10866 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
10867     AC_MSG_RESULT([yes])
10868     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
10869     if test "$ENABLE_RANDR" != "TRUE"; then
10870         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
10871                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
10872         XRANDR_CFLAGS=" "
10873         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
10874           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
10875         XRANDR_LIBS="-lXrandr "
10876         ENABLE_RANDR="TRUE"
10877     fi
10878     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10879     FilterLibs "${XRANDR_LIBS}"
10880     XRANDR_LIBS="${filteredlibs}"
10881 else
10882     ENABLE_RANDR=""
10883     AC_MSG_RESULT([no])
10885 AC_SUBST(XRANDR_CFLAGS)
10886 AC_SUBST(XRANDR_LIBS)
10887 AC_SUBST(ENABLE_RANDR)
10889 if test "$test_webdav" = yes; then
10890     if test -z "$with_webdav"; then
10891         WITH_WEBDAV=curl
10892     else
10893         WITH_WEBDAV="$with_webdav"
10894     fi
10897 AC_MSG_CHECKING([for webdav library])
10898 case "$WITH_WEBDAV" in
10899 curl)
10900     AC_MSG_RESULT([curl])
10901     # curl is already mandatory (almost) and checked elsewhere
10902     if test "$enable_curl" = "no"; then
10903         AC_MSG_ERROR(["--with-webdav=curl conflicts with --disable-curl"])
10904     fi
10905     ;;
10906 serf)
10907     AC_MSG_RESULT([serf])
10908     # Check for system apr-util
10909     libo_CHECK_SYSTEM_MODULE([apr],[APR],[apr-util-1],
10910                              ["-I${WORKDIR}/UnpackedTarball/apr/include -I${WORKDIR}/UnpackedTarball/apr_util/include"],
10911                              ["-L${WORKDIR}/UnpackedTarball/apr/.libs -lapr-1 -L${WORKDIR}/UnpackedTarball/apr_util/.libs -laprutil-1"])
10912     if test "$COM" = "MSC"; then
10913         APR_LIB_DIR="LibR"
10914         test -n "${MSVC_USE_DEBUG_RUNTIME}" && APR_LIB_DIR="LibD"
10915         APR_LIBS="${WORKDIR}/UnpackedTarball/apr/${APR_LIB_DIR}/apr-1.lib ${WORKDIR}/UnpackedTarball/apr_util/${APR_LIB_DIR}/aprutil-1.lib"
10916     fi
10918     # Check for system serf
10919     libo_CHECK_SYSTEM_MODULE([serf],[SERF],[serf-1 >= 1.3.9])
10920     ;;
10921 neon)
10922     AC_MSG_RESULT([neon])
10923     # Check for system neon
10924     libo_CHECK_SYSTEM_MODULE([neon],[NEON],[neon >= 0.31.2])
10925     if test "$with_system_neon" = "yes"; then
10926         NEON_VERSION="`$PKG_CONFIG --modversion neon | $SED 's/\.//g'`"
10927     else
10928         NEON_VERSION=0312
10929     fi
10930     AC_SUBST(NEON_VERSION)
10931     ;;
10933     AC_MSG_RESULT([none, disabled])
10934     WITH_WEBDAV=""
10935     ;;
10936 esac
10937 AC_SUBST(WITH_WEBDAV)
10939 dnl ===================================================================
10940 dnl Check for disabling cve_tests
10941 dnl ===================================================================
10942 AC_MSG_CHECKING([whether to execute CVE tests])
10943 # If not explicitly enabled or disabled, default
10944 if test -z "$enable_cve_tests"; then
10945     case "$OS" in
10946     WNT)
10947         # Default cves off for Windows with its wild and wonderful
10948         # variety of AV software kicking in and panicking
10949         enable_cve_tests=no
10950         ;;
10951     *)
10952         # otherwise yes
10953         enable_cve_tests=yes
10954         ;;
10955     esac
10957 if test "$enable_cve_tests" = "no"; then
10958     AC_MSG_RESULT([no])
10959     DISABLE_CVE_TESTS=TRUE
10960     AC_SUBST(DISABLE_CVE_TESTS)
10961 else
10962     AC_MSG_RESULT([yes])
10965 dnl ===================================================================
10966 dnl Check for enabling chart XShape tests
10967 dnl ===================================================================
10968 AC_MSG_CHECKING([whether to execute chart XShape tests])
10969 if test "$enable_chart_tests" = "yes" -o '(' "$_os" = "WINNT" -a "$enable_chart_tests" != "no" ')'; then
10970     AC_MSG_RESULT([yes])
10971     ENABLE_CHART_TESTS=TRUE
10972     AC_SUBST(ENABLE_CHART_TESTS)
10973 else
10974     AC_MSG_RESULT([no])
10977 dnl ===================================================================
10978 dnl Check for system openssl
10979 dnl ===================================================================
10980 ENABLE_OPENSSL=
10981 AC_MSG_CHECKING([whether to disable OpenSSL usage])
10982 if test "$enable_openssl" = "yes"; then
10983     AC_MSG_RESULT([no])
10984     ENABLE_OPENSSL=TRUE
10985     if test "$_os" = Darwin ; then
10986         # OpenSSL is deprecated when building for 10.7 or later.
10987         #
10988         # http://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
10989         # http://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
10991         with_system_openssl=no
10992         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10993     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
10994             && test "$with_system_openssl" != "no"; then
10995         with_system_openssl=yes
10996         SYSTEM_OPENSSL=TRUE
10997         OPENSSL_CFLAGS=
10998         OPENSSL_LIBS="-lssl -lcrypto"
10999     else
11000         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
11001     fi
11002     if test "$with_system_openssl" = "yes"; then
11003         AC_MSG_CHECKING([whether openssl supports SHA512])
11004         AC_LANG_PUSH([C])
11005         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
11006             SHA512_CTX context;
11007 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
11008         AC_LANG_POP(C)
11009     fi
11010 else
11011     AC_MSG_RESULT([yes])
11013     # warn that although OpenSSL is disabled, system libraries may depend on it
11014     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
11015     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
11018 AC_SUBST([ENABLE_OPENSSL])
11020 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
11021     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
11022         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
11023         enable_cipher_openssl_backend=no
11024     else
11025         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
11026     fi
11028 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
11029 ENABLE_CIPHER_OPENSSL_BACKEND=
11030 if test "$enable_cipher_openssl_backend" = yes; then
11031     AC_MSG_RESULT([yes])
11032     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
11033 else
11034     AC_MSG_RESULT([no])
11036 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
11038 dnl ===================================================================
11039 dnl Select the crypto backends used by LO
11040 dnl ===================================================================
11042 if test "$build_crypto" = yes; then
11043     if test "$OS" = WNT; then
11044         BUILD_TYPE="$BUILD_TYPE CRYPTO_MSCAPI"
11045         AC_DEFINE([USE_CRYPTO_MSCAPI])
11046     elif test "$ENABLE_NSS" = TRUE; then
11047         BUILD_TYPE="$BUILD_TYPE CRYPTO_NSS"
11048         AC_DEFINE([USE_CRYPTO_NSS])
11049     fi
11052 dnl ===================================================================
11053 dnl Check for building gnutls
11054 dnl ===================================================================
11055 AC_MSG_CHECKING([whether to use gnutls])
11056 if test "$WITH_WEBDAV" = "neon" -a "$with_system_neon" = no -a "$enable_openssl" = "no"; then
11057     AC_MSG_RESULT([yes])
11058     AM_PATH_LIBGCRYPT()
11059     PKG_CHECK_MODULES(GNUTLS, [gnutls],,
11060         AC_MSG_ERROR([[Disabling OpenSSL was requested, but GNUTLS is not
11061                       available in the system to use as replacement.]]))
11062     FilterLibs "${LIBGCRYPT_LIBS}"
11063     LIBGCRYPT_LIBS="${filteredlibs}"
11064 else
11065     AC_MSG_RESULT([no])
11068 AC_SUBST([LIBGCRYPT_CFLAGS])
11069 AC_SUBST([LIBGCRYPT_LIBS])
11071 dnl ===================================================================
11072 dnl Check for system redland
11073 dnl ===================================================================
11074 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
11075 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
11076 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
11077 if test "$with_system_redland" = "yes"; then
11078     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
11079             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
11080 else
11081     RAPTOR_MAJOR="0"
11082     RASQAL_MAJOR="3"
11083     REDLAND_MAJOR="0"
11085 AC_SUBST(RAPTOR_MAJOR)
11086 AC_SUBST(RASQAL_MAJOR)
11087 AC_SUBST(REDLAND_MAJOR)
11089 dnl ===================================================================
11090 dnl Check for system hunspell
11091 dnl ===================================================================
11092 AC_MSG_CHECKING([which libhunspell to use])
11093 if test "$with_system_hunspell" = "yes"; then
11094     AC_MSG_RESULT([external])
11095     SYSTEM_HUNSPELL=TRUE
11096     AC_LANG_PUSH([C++])
11097     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
11098     if test "$HUNSPELL_PC" != "TRUE"; then
11099         AC_CHECK_HEADER(hunspell.hxx, [],
11100             [
11101             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
11102             [AC_MSG_ERROR(hunspell headers not found.)], [])
11103             ], [])
11104         AC_CHECK_LIB([hunspell], [main], [:],
11105            [ AC_MSG_ERROR(hunspell library not found.) ], [])
11106         HUNSPELL_LIBS=-lhunspell
11107     fi
11108     AC_LANG_POP([C++])
11109     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11110     FilterLibs "${HUNSPELL_LIBS}"
11111     HUNSPELL_LIBS="${filteredlibs}"
11112 else
11113     AC_MSG_RESULT([internal])
11114     SYSTEM_HUNSPELL=
11115     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
11116     if test "$COM" = "MSC"; then
11117         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
11118     else
11119         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
11120     fi
11121     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
11123 AC_SUBST(SYSTEM_HUNSPELL)
11124 AC_SUBST(HUNSPELL_CFLAGS)
11125 AC_SUBST(HUNSPELL_LIBS)
11127 dnl ===================================================================
11128 dnl Check for system zxing
11129 dnl ===================================================================
11130 AC_MSG_CHECKING([whether to use zxing])
11131 if test "$enable_zxing" = "no"; then
11132     AC_MSG_RESULT([no])
11133     ENABLE_ZXING=
11134     SYSTEM_ZXING=
11135 else
11136     AC_MSG_RESULT([yes])
11137     ENABLE_ZXING=TRUE
11138     AC_MSG_CHECKING([which libzxing to use])
11139     if test "$with_system_zxing" = "yes"; then
11140         AC_MSG_RESULT([external])
11141         SYSTEM_ZXING=TRUE
11142         ZXING_CFLAGS=
11143         AC_LANG_PUSH([C++])
11144         save_CXXFLAGS=$CXXFLAGS
11145         save_IFS=$IFS
11146         IFS=$P_SEP
11147         for i in $CPLUS_INCLUDE_PATH /usr/include; do
11148             dnl Reset IFS as soon as possible, to avoid unexpected side effects (and the
11149             dnl "/usr/include" fallback makes sure we get here at least once; resetting rather than
11150             dnl unsetting follows the advice at <http://git.savannah.gnu.org/gitweb/?p=autoconf.git;
11151             dnl a=commit;h=e51c9919f2cf70185b7916ac040bc0bbfd0f743b> "Add recommendation on (not)
11152             dnl unsetting IFS."):
11153             IFS=$save_IFS
11154             dnl TODO: GCC and Clang treat empty paths in CPLUS_INCLUDE_PATH like ".", but we simply
11155             dnl ignore them here:
11156             if test -z "$i"; then
11157                 continue
11158             fi
11159             dnl TODO: White space in $i would cause problems:
11160             CXXFLAGS="$save_CXXFLAGS -I$i/ZXing"
11161             AC_CHECK_HEADER(MultiFormatWriter.h, [ZXING_CFLAGS=-I$i/ZXing; break],
11162                 [unset ac_cv_header_MultiFormatWriter_h], [#include <stdexcept>])
11163         done
11164         CXXFLAGS=$save_CXXFLAGS
11165         if test -z "$ZXING_CFLAGS"; then
11166             AC_MSG_ERROR(zxing headers not found.)
11167         fi
11168         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
11169             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
11170             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
11171         AC_LANG_POP([C++])
11172         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11173         FilterLibs "${ZXING_LIBS}"
11174         ZXING_LIBS="${filteredlibs}"
11175     else
11176         AC_MSG_RESULT([internal])
11177         SYSTEM_ZXING=
11178         BUILD_TYPE="$BUILD_TYPE ZXING"
11179     fi
11180     if test "$ENABLE_ZXING" = TRUE; then
11181         AC_DEFINE(ENABLE_ZXING)
11182     fi
11184 AC_SUBST(SYSTEM_ZXING)
11185 AC_SUBST(ENABLE_ZXING)
11186 AC_SUBST(ZXING_CFLAGS)
11187 AC_SUBST(ZXING_LIBS)
11189 dnl ===================================================================
11190 dnl Check for system box2d
11191 dnl ===================================================================
11192 AC_MSG_CHECKING([which box2d to use])
11193 if test "$with_system_box2d" = "yes"; then
11194     AC_MSG_RESULT([external])
11195     SYSTEM_BOX2D=TRUE
11196     AC_LANG_PUSH([C++])
11197     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
11198         [BOX2D_H_FOUND='FALSE'])
11199     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
11200         _BOX2D_LIB=box2d
11201         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
11202     else
11203         # fail this. there's no other alternative to check when we are here.
11204         AC_CHECK_HEADER([Box2D/Box2D.h], [],
11205             [AC_MSG_ERROR(box2d headers not found.)])
11206         _BOX2D_LIB=Box2D
11207         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11208     fi
11209     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11210         [ AC_MSG_ERROR(box2d library not found.) ], [])
11211     BOX2D_LIBS=-l$_BOX2D_LIB
11212     AC_LANG_POP([C++])
11213     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11214     FilterLibs "${BOX2D_LIBS}"
11215     BOX2D_LIBS="${filteredlibs}"
11216 else
11217     AC_MSG_RESULT([internal])
11218     SYSTEM_BOX2D=
11219     BUILD_TYPE="$BUILD_TYPE BOX2D"
11221 AC_SUBST(SYSTEM_BOX2D)
11222 AC_SUBST(BOX2D_CFLAGS)
11223 AC_SUBST(BOX2D_LIBS)
11225 dnl ===================================================================
11226 dnl Checking for altlinuxhyph
11227 dnl ===================================================================
11228 AC_MSG_CHECKING([which altlinuxhyph to use])
11229 if test "$with_system_altlinuxhyph" = "yes"; then
11230     AC_MSG_RESULT([external])
11231     SYSTEM_HYPH=TRUE
11232     AC_CHECK_HEADER(hyphen.h, [],
11233        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11234     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11235        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11236        [#include <hyphen.h>])
11237     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11238         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11239     if test -z "$HYPHEN_LIB"; then
11240         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11241            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11242     fi
11243     if test -z "$HYPHEN_LIB"; then
11244         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11245            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11246     fi
11247 else
11248     AC_MSG_RESULT([internal])
11249     SYSTEM_HYPH=
11250     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11251     if test "$COM" = "MSC"; then
11252         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11253     else
11254         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11255     fi
11257 AC_SUBST(SYSTEM_HYPH)
11258 AC_SUBST(HYPHEN_LIB)
11260 dnl ===================================================================
11261 dnl Checking for mythes
11262 dnl ===================================================================
11263 AC_MSG_CHECKING([which mythes to use])
11264 if test "$with_system_mythes" = "yes"; then
11265     AC_MSG_RESULT([external])
11266     SYSTEM_MYTHES=TRUE
11267     AC_LANG_PUSH([C++])
11268     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11269     if test "$MYTHES_PKGCONFIG" = "no"; then
11270         AC_CHECK_HEADER(mythes.hxx, [],
11271             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11272         AC_CHECK_LIB([mythes-1.2], [main], [:],
11273             [ MYTHES_FOUND=no], [])
11274     if test "$MYTHES_FOUND" = "no"; then
11275         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11276                 [ MYTHES_FOUND=no], [])
11277     fi
11278     if test "$MYTHES_FOUND" = "no"; then
11279         AC_MSG_ERROR([mythes library not found!.])
11280     fi
11281     fi
11282     AC_LANG_POP([C++])
11283     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11284     FilterLibs "${MYTHES_LIBS}"
11285     MYTHES_LIBS="${filteredlibs}"
11286 else
11287     AC_MSG_RESULT([internal])
11288     SYSTEM_MYTHES=
11289     BUILD_TYPE="$BUILD_TYPE MYTHES"
11290     if test "$COM" = "MSC"; then
11291         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11292     else
11293         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11294     fi
11296 AC_SUBST(SYSTEM_MYTHES)
11297 AC_SUBST(MYTHES_CFLAGS)
11298 AC_SUBST(MYTHES_LIBS)
11300 dnl ===================================================================
11301 dnl How should we build the linear programming solver ?
11302 dnl ===================================================================
11304 ENABLE_COINMP=
11305 AC_MSG_CHECKING([whether to build with CoinMP])
11306 if test "$enable_coinmp" != "no"; then
11307     ENABLE_COINMP=TRUE
11308     AC_MSG_RESULT([yes])
11309     if test "$with_system_coinmp" = "yes"; then
11310         SYSTEM_COINMP=TRUE
11311         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11312         FilterLibs "${COINMP_LIBS}"
11313         COINMP_LIBS="${filteredlibs}"
11314     else
11315         BUILD_TYPE="$BUILD_TYPE COINMP"
11316     fi
11317 else
11318     AC_MSG_RESULT([no])
11320 AC_SUBST(ENABLE_COINMP)
11321 AC_SUBST(SYSTEM_COINMP)
11322 AC_SUBST(COINMP_CFLAGS)
11323 AC_SUBST(COINMP_LIBS)
11325 ENABLE_LPSOLVE=
11326 AC_MSG_CHECKING([whether to build with lpsolve])
11327 if test "$enable_lpsolve" != "no"; then
11328     ENABLE_LPSOLVE=TRUE
11329     AC_MSG_RESULT([yes])
11330 else
11331     AC_MSG_RESULT([no])
11333 AC_SUBST(ENABLE_LPSOLVE)
11335 if test "$ENABLE_LPSOLVE" = TRUE; then
11336     AC_MSG_CHECKING([which lpsolve to use])
11337     if test "$with_system_lpsolve" = "yes"; then
11338         AC_MSG_RESULT([external])
11339         SYSTEM_LPSOLVE=TRUE
11340         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11341            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11342         save_LIBS=$LIBS
11343         # some systems need this. Like Ubuntu...
11344         AC_CHECK_LIB(m, floor)
11345         AC_CHECK_LIB(dl, dlopen)
11346         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11347             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11348         LIBS=$save_LIBS
11349     else
11350         AC_MSG_RESULT([internal])
11351         SYSTEM_LPSOLVE=
11352         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11353     fi
11355 AC_SUBST(SYSTEM_LPSOLVE)
11357 dnl ===================================================================
11358 dnl Checking for libexttextcat
11359 dnl ===================================================================
11360 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11361 if test "$with_system_libexttextcat" = "yes"; then
11362     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11364 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11366 dnl ===================================================================
11367 dnl Checking for libnumbertext
11368 dnl ===================================================================
11369 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11370 if test "$with_system_libnumbertext" = "yes"; then
11371     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11372     SYSTEM_LIBNUMBERTEXT=YES
11373 else
11374     SYSTEM_LIBNUMBERTEXT=
11375     AC_LANG_PUSH([C++])
11376     save_CPPFLAGS=$CPPFLAGS
11377     CPPFLAGS="$CPPFLAGS $CXXFLAGS_CXX11"
11378     AC_CHECK_HEADERS([codecvt regex])
11379     AS_IF([test "x$ac_cv_header_codecvt" != xyes -o "x$ac_cv_header_regex" != xyes],
11380             [ LIBNUMBERTEXT_CFLAGS=''
11381               AC_MSG_WARN([No system-provided libnumbertext or codecvt/regex C++11 headers (min. libstdc++ 4.9).
11382                            Enable libnumbertext fallback (missing number to number name conversion).])
11383             ])
11384     CPPFLAGS=$save_CPPFLAGS
11385     AC_LANG_POP([C++])
11387 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11388 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11389 AC_SUBST(LIBNUMBERTEXT_CFLAGS)
11391 dnl ***************************************
11392 dnl testing libc version for Linux...
11393 dnl ***************************************
11394 if test "$_os" = "Linux"; then
11395     AC_MSG_CHECKING([whether the libc is recent enough])
11396     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
11397     #include <features.h>
11398     #if defined(__GNU_LIBRARY__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1))
11399     #error glibc >= 2.1 is required
11400     #endif
11401     ]])],, [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([no, upgrade libc])])
11404 dnl =========================================
11405 dnl Check for uuidgen
11406 dnl =========================================
11407 if test "$_os" = "WINNT"; then
11408     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11409     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11410     UUIDGEN=uuidgen.exe
11411     AC_SUBST(UUIDGEN)
11412 else
11413     AC_PATH_PROG([UUIDGEN], [uuidgen])
11414     if test -z "$UUIDGEN"; then
11415         AC_MSG_WARN([uuid is needed for building installation sets])
11416     fi
11419 dnl ***************************************
11420 dnl Checking for bison and flex
11421 dnl ***************************************
11422 AC_PATH_PROG(BISON, bison)
11423 if test -z "$BISON"; then
11424     AC_MSG_ERROR([no bison found in \$PATH, install it])
11425 else
11426     AC_MSG_CHECKING([the bison version])
11427     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11428     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11429     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11430     dnl cause
11431     dnl
11432     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]
11433     dnl   typedef union YYSTYPE
11434     dnl           ~~~~~~^~~~~~~
11435     dnl
11436     dnl while at least 3.4.1 is know to be good:
11437     if test "$COMPILER_PLUGINS" = TRUE; then
11438         if test "$_bison_longver" -lt 2004; then
11439             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11440         fi
11441     else
11442         if test "$_bison_longver" -lt 2000; then
11443             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11444         fi
11445     fi
11447 AC_SUBST([BISON])
11449 AC_PATH_PROG(FLEX, flex)
11450 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11451     FLEX=`cygpath -m $FLEX`
11453 if test -z "$FLEX"; then
11454     AC_MSG_ERROR([no flex found in \$PATH, install it])
11455 else
11456     AC_MSG_CHECKING([the flex version])
11457     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11458     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11459         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11460     fi
11462 AC_SUBST([FLEX])
11463 dnl ***************************************
11464 dnl Checking for patch
11465 dnl ***************************************
11466 AC_PATH_PROG(PATCH, patch)
11467 if test -z "$PATCH"; then
11468     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11471 dnl On Solaris or macOS, check if --with-gnu-patch was used
11472 if test "$_os" = "SunOS" -o "$_os" = "Darwin"; then
11473     if test -z "$with_gnu_patch"; then
11474         GNUPATCH=$PATCH
11475     else
11476         if test -x "$with_gnu_patch"; then
11477             GNUPATCH=$with_gnu_patch
11478         else
11479             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11480         fi
11481     fi
11483     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11484     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11485         AC_MSG_RESULT([yes])
11486     else
11487         AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11488     fi
11489 else
11490     GNUPATCH=$PATCH
11493 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11494     GNUPATCH=`cygpath -m $GNUPATCH`
11497 dnl We also need to check for --with-gnu-cp
11499 if test -z "$with_gnu_cp"; then
11500     # check the place where the good stuff is hidden on Solaris...
11501     if test -x /usr/gnu/bin/cp; then
11502         GNUCP=/usr/gnu/bin/cp
11503     else
11504         AC_PATH_PROGS(GNUCP, gnucp cp)
11505     fi
11506     if test -z $GNUCP; then
11507         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11508     fi
11509 else
11510     if test -x "$with_gnu_cp"; then
11511         GNUCP=$with_gnu_cp
11512     else
11513         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11514     fi
11517 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11518     GNUCP=`cygpath -m $GNUCP`
11521 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11522 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11523     AC_MSG_RESULT([yes])
11524 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11525     AC_MSG_RESULT([yes])
11526 else
11527     case "$build_os" in
11528     darwin*|macos*|netbsd*|openbsd*|freebsd*|dragonfly*|aix*)
11529         x_GNUCP=[\#]
11530         GNUCP=''
11531         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11532         ;;
11533     *)
11534         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11535         ;;
11536     esac
11539 AC_SUBST(GNUPATCH)
11540 AC_SUBST(GNUCP)
11541 AC_SUBST(x_GNUCP)
11543 dnl ***************************************
11544 dnl testing assembler path
11545 dnl ***************************************
11546 ML_EXE=""
11547 if test "$_os" = "WINNT"; then
11548     case "$WIN_HOST_ARCH" in
11549     x86) assembler=ml.exe ;;
11550     x64) assembler=ml64.exe ;;
11551     arm64) assembler=armasm64.exe ;;
11552     esac
11554     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11555     if test -f "$MSVC_HOST_PATH/$assembler"; then
11556         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11557         AC_MSG_RESULT([$ML_EXE])
11558     else
11559         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11560     fi
11563 AC_SUBST(ML_EXE)
11565 dnl ===================================================================
11566 dnl We need zip and unzip
11567 dnl ===================================================================
11568 AC_PATH_PROG(ZIP, zip)
11569 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11570 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11571     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],,)
11574 AC_PATH_PROG(UNZIP, unzip)
11575 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11577 dnl ===================================================================
11578 dnl Zip must be a specific type for different build types.
11579 dnl ===================================================================
11580 if test $build_os = cygwin; then
11581     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11582         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11583     fi
11586 dnl ===================================================================
11587 dnl We need touch with -h option support.
11588 dnl ===================================================================
11589 AC_PATH_PROG(TOUCH, touch)
11590 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11591 touch "$WARNINGS_FILE"
11592 if ! "$TOUCH" -h "$WARNINGS_FILE" 2>/dev/null > /dev/null; then
11593     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],,)
11596 dnl ===================================================================
11597 dnl Check for system epoxy
11598 dnl ===================================================================
11599 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2], ["-I${WORKDIR}/UnpackedTarball/epoxy/include"])
11601 dnl ===================================================================
11602 dnl Set vcl option: coordinate device in double or sal_Int32
11603 dnl ===================================================================
11605 dnl disabled for now, we don't want subtle differences between OSs
11606 dnl AC_MSG_CHECKING([Type to use for Device Pixel coordinates])
11607 dnl if test "$_os" = "Darwin" -o  $_os = iOS ; then
11608 dnl     AC_DEFINE(VCL_FLOAT_DEVICE_PIXEL)
11609 dnl     AC_MSG_RESULT([double])
11610 dnl else
11611 dnl     AC_MSG_RESULT([sal_Int32])
11612 dnl fi
11614 dnl ===================================================================
11615 dnl Show which vclplugs will be built.
11616 dnl ===================================================================
11617 R=""
11618 if test "$USING_X11" != TRUE; then
11619     enable_gtk3=no
11622 ENABLE_GTK3=""
11623 if test "x$enable_gtk3" = "xyes"; then
11624     ENABLE_GTK3="TRUE"
11625     AC_DEFINE(ENABLE_GTK3)
11626     R="$R gtk3"
11628 AC_SUBST(ENABLE_GTK3)
11630 ENABLE_GTK3_KDE5=""
11631 if test "x$enable_gtk3_kde5" = "xyes"; then
11632     ENABLE_GTK3_KDE5="TRUE"
11633     AC_DEFINE(ENABLE_GTK3_KDE5)
11634     R="$R gtk3_kde5"
11636 AC_SUBST(ENABLE_GTK3_KDE5)
11638 ENABLE_GTK4=""
11639 if test "x$enable_gtk4" = "xyes"; then
11640     ENABLE_GTK4="TRUE"
11641     AC_DEFINE(ENABLE_GTK4)
11642     R="$R gtk4"
11644 AC_SUBST(ENABLE_GTK4)
11646 ENABLE_QT5=""
11647 if test "x$enable_qt5" = "xyes"; then
11648     ENABLE_QT5="TRUE"
11649     AC_DEFINE(ENABLE_QT5)
11650     R="$R qt5"
11652 AC_SUBST(ENABLE_QT5)
11654 ENABLE_QT6=""
11655 if test "x$enable_qt6" = "xyes"; then
11656     ENABLE_QT6="TRUE"
11657     AC_DEFINE(ENABLE_QT6)
11658     R="$R qt6"
11660 AC_SUBST(ENABLE_QT6)
11663 ENABLE_KF5=""
11664 if test "x$enable_kf5" = "xyes"; then
11665     ENABLE_KF5="TRUE"
11666     AC_DEFINE(ENABLE_KF5)
11667     R="$R kf5"
11669 AC_SUBST(ENABLE_KF5)
11671 if test "x$USING_X11" = "xyes"; then
11672     R="$R gen"
11675 if test "$_os" = "WINNT"; then
11676     R="$R win"
11677 elif test "$_os" = "Darwin"; then
11678     R="$R osx"
11679 elif test "$_os" = "iOS"; then
11680     R="ios"
11681 elif test "$_os" = Android; then
11682     R="android"
11685 build_vcl_plugins="$R"
11686 if test -z "$build_vcl_plugins"; then
11687     build_vcl_plugins=" none"
11689 AC_MSG_NOTICE([VCLplugs to be built:${build_vcl_plugins}])
11690 VCL_PLUGIN_INFO=$R
11691 AC_SUBST([VCL_PLUGIN_INFO])
11693 dnl ===================================================================
11694 dnl Check for GTK libraries
11695 dnl ===================================================================
11697 GTK3_CFLAGS=""
11698 GTK3_LIBS=""
11699 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11700     if test "$with_system_cairo" = no; then
11701         add_warning 'Non-system cairo combined with gtk3 is assumed to cause trouble; proceed at your own risk.'
11702     fi
11703     : ${with_system_cairo:=yes}
11704     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)
11705     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11706     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11707     FilterLibs "${GTK3_LIBS}"
11708     GTK3_LIBS="${filteredlibs}"
11710     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11711     if test "$with_system_epoxy" != "yes"; then
11712         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11713         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11714                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11715     fi
11717 AC_SUBST(GTK3_LIBS)
11718 AC_SUBST(GTK3_CFLAGS)
11720 GTK4_CFLAGS=""
11721 GTK4_LIBS=""
11722 if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then
11723     if test "$with_system_cairo" = no; then
11724         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11725     fi
11726     : ${with_system_cairo:=yes}
11727     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11728     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11729     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11730     FilterLibs "${GTK4_LIBS}"
11731     GTK4_LIBS="${filteredlibs}"
11733     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11734     if test "$with_system_epoxy" != "yes"; then
11735         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11736         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11737                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11738     fi
11740 AC_SUBST(GTK4_LIBS)
11741 AC_SUBST(GTK4_CFLAGS)
11743 if test "$enable_introspection" = yes; then
11744     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11745         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11746     else
11747         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
11748     fi
11751 dnl ===================================================================
11752 dnl check for dbus support
11753 dnl ===================================================================
11754 ENABLE_DBUS=""
11755 DBUS_CFLAGS=""
11756 DBUS_LIBS=""
11757 DBUS_GLIB_CFLAGS=""
11758 DBUS_GLIB_LIBS=""
11759 DBUS_HAVE_GLIB=""
11761 if test "$enable_dbus" = "no"; then
11762     test_dbus=no
11765 AC_MSG_CHECKING([whether to enable DBUS support])
11766 if test "$test_dbus" = "yes"; then
11767     ENABLE_DBUS="TRUE"
11768     AC_MSG_RESULT([yes])
11769     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
11770     AC_DEFINE(ENABLE_DBUS)
11771     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11772     FilterLibs "${DBUS_LIBS}"
11773     DBUS_LIBS="${filteredlibs}"
11775     # Glib is needed for BluetoothServer
11776     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
11777     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
11778         [
11779             DBUS_HAVE_GLIB="TRUE"
11780             AC_DEFINE(DBUS_HAVE_GLIB,1)
11781         ],
11782         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
11783     )
11784 else
11785     AC_MSG_RESULT([no])
11788 AC_SUBST(ENABLE_DBUS)
11789 AC_SUBST(DBUS_CFLAGS)
11790 AC_SUBST(DBUS_LIBS)
11791 AC_SUBST(DBUS_GLIB_CFLAGS)
11792 AC_SUBST(DBUS_GLIB_LIBS)
11793 AC_SUBST(DBUS_HAVE_GLIB)
11795 AC_MSG_CHECKING([whether to enable Impress remote control])
11796 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
11797     AC_MSG_RESULT([yes])
11798     ENABLE_SDREMOTE=TRUE
11799     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
11801     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
11802         # The Bluetooth code doesn't compile with macOS SDK 10.15
11803         if test "$enable_sdremote_bluetooth" = yes; then
11804             AC_MSG_ERROR([macOS SDK $macosx_sdk does not currently support --enable-sdremote-bluetooth])
11805         fi
11806         enable_sdremote_bluetooth=no
11807     fi
11808     # If not explicitly enabled or disabled, default
11809     if test -z "$enable_sdremote_bluetooth"; then
11810         case "$OS" in
11811         LINUX|MACOSX|WNT)
11812             # Default to yes for these
11813             enable_sdremote_bluetooth=yes
11814             ;;
11815         *)
11816             # otherwise no
11817             enable_sdremote_bluetooth=no
11818             ;;
11819         esac
11820     fi
11821     # $enable_sdremote_bluetooth is guaranteed non-empty now
11823     if test "$enable_sdremote_bluetooth" != "no"; then
11824         if test "$OS" = "LINUX"; then
11825             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
11826                 AC_MSG_RESULT([yes])
11827                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
11828                 dnl ===================================================================
11829                 dnl Check for system bluez
11830                 dnl ===================================================================
11831                 AC_MSG_CHECKING([which Bluetooth header to use])
11832                 if test "$with_system_bluez" = "yes"; then
11833                     AC_MSG_RESULT([external])
11834                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
11835                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
11836                     SYSTEM_BLUEZ=TRUE
11837                 else
11838                     AC_MSG_RESULT([internal])
11839                     SYSTEM_BLUEZ=
11840                 fi
11841             else
11842                 AC_MSG_RESULT([no, dbus disabled])
11843                 ENABLE_SDREMOTE_BLUETOOTH=
11844                 SYSTEM_BLUEZ=
11845             fi
11846         else
11847             AC_MSG_RESULT([yes])
11848             ENABLE_SDREMOTE_BLUETOOTH=TRUE
11849             SYSTEM_BLUEZ=
11850         fi
11851     else
11852         AC_MSG_RESULT([no])
11853         ENABLE_SDREMOTE_BLUETOOTH=
11854         SYSTEM_BLUEZ=
11855     fi
11856 else
11857     ENABLE_SDREMOTE=
11858     SYSTEM_BLUEZ=
11859     AC_MSG_RESULT([no])
11861 AC_SUBST(ENABLE_SDREMOTE)
11862 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
11863 AC_SUBST(SYSTEM_BLUEZ)
11865 dnl ===================================================================
11866 dnl Check whether to enable GIO support
11867 dnl ===================================================================
11868 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11869     AC_MSG_CHECKING([whether to enable GIO support])
11870     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
11871         dnl Need at least 2.26 for the dbus support.
11872         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
11873                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
11874         if test "$ENABLE_GIO" = "TRUE"; then
11875             AC_DEFINE(ENABLE_GIO)
11876             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11877             FilterLibs "${GIO_LIBS}"
11878             GIO_LIBS="${filteredlibs}"
11879         fi
11880     else
11881         AC_MSG_RESULT([no])
11882     fi
11884 AC_SUBST(ENABLE_GIO)
11885 AC_SUBST(GIO_CFLAGS)
11886 AC_SUBST(GIO_LIBS)
11889 dnl ===================================================================
11891 SPLIT_APP_MODULES=""
11892 if test "$enable_split_app_modules" = "yes"; then
11893     SPLIT_APP_MODULES="TRUE"
11895 AC_SUBST(SPLIT_APP_MODULES)
11897 SPLIT_OPT_FEATURES=""
11898 if test "$enable_split_opt_features" = "yes"; then
11899     SPLIT_OPT_FEATURES="TRUE"
11901 AC_SUBST(SPLIT_OPT_FEATURES)
11903 dnl ===================================================================
11904 dnl Check whether the GStreamer libraries are available.
11905 dnl ===================================================================
11907 ENABLE_GSTREAMER_1_0=""
11909 if test "$test_gstreamer_1_0" = yes; then
11911     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
11912     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
11913         ENABLE_GSTREAMER_1_0="TRUE"
11914         AC_MSG_RESULT([yes])
11915         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
11916         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11917         FilterLibs "${GSTREAMER_1_0_LIBS}"
11918         GSTREAMER_1_0_LIBS="${filteredlibs}"
11919         AC_DEFINE(ENABLE_GSTREAMER_1_0)
11920     else
11921         AC_MSG_RESULT([no])
11922     fi
11924 AC_SUBST(GSTREAMER_1_0_CFLAGS)
11925 AC_SUBST(GSTREAMER_1_0_LIBS)
11926 AC_SUBST(ENABLE_GSTREAMER_1_0)
11928 ENABLE_OPENGL_TRANSITIONS=
11929 ENABLE_OPENGL_CANVAS=
11930 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
11931    : # disable
11932 elif test "$_os" = "Darwin"; then
11933     # We use frameworks on macOS, no need for detail checks
11934     ENABLE_OPENGL_TRANSITIONS=TRUE
11935     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11936     ENABLE_OPENGL_CANVAS=TRUE
11937 elif test $_os = WINNT; then
11938     ENABLE_OPENGL_TRANSITIONS=TRUE
11939     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11940     ENABLE_OPENGL_CANVAS=TRUE
11941 else
11942     if test "$USING_X11" = TRUE; then
11943         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
11944         ENABLE_OPENGL_TRANSITIONS=TRUE
11945         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11946         ENABLE_OPENGL_CANVAS=TRUE
11947     fi
11950 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
11951 AC_SUBST(ENABLE_OPENGL_CANVAS)
11953 dnl =================================================
11954 dnl Check whether to build with OpenCL support.
11955 dnl =================================================
11957 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
11958     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
11959     # platform (optional at run-time, used through clew).
11960     BUILD_TYPE="$BUILD_TYPE OPENCL"
11961     AC_DEFINE(HAVE_FEATURE_OPENCL)
11964 dnl =================================================
11965 dnl Check whether to build with dconf support.
11966 dnl =================================================
11968 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
11969     PKG_CHECK_MODULES([DCONF], [dconf >= 0.15.2], [], [
11970         if test "$enable_dconf" = yes; then
11971             AC_MSG_ERROR([dconf not found])
11972         else
11973             enable_dconf=no
11974         fi])
11976 AC_MSG_CHECKING([whether to enable dconf])
11977 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
11978     DCONF_CFLAGS=
11979     DCONF_LIBS=
11980     ENABLE_DCONF=
11981     AC_MSG_RESULT([no])
11982 else
11983     ENABLE_DCONF=TRUE
11984     AC_DEFINE(ENABLE_DCONF)
11985     AC_MSG_RESULT([yes])
11987 AC_SUBST([DCONF_CFLAGS])
11988 AC_SUBST([DCONF_LIBS])
11989 AC_SUBST([ENABLE_DCONF])
11991 # pdf import?
11992 AC_MSG_CHECKING([whether to build the PDF import feature])
11993 ENABLE_PDFIMPORT=
11994 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
11995     AC_MSG_RESULT([yes])
11996     ENABLE_PDFIMPORT=TRUE
11997     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
11998 else
11999     AC_MSG_RESULT([no])
12002 # Pdfium?
12003 AC_MSG_CHECKING([whether to build PDFium])
12004 ENABLE_PDFIUM=
12005 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
12006     AC_MSG_RESULT([yes])
12007     ENABLE_PDFIUM=TRUE
12008     BUILD_TYPE="$BUILD_TYPE PDFIUM"
12009 else
12010     AC_MSG_RESULT([no])
12012 AC_SUBST(ENABLE_PDFIUM)
12014 if test "$ENABLE_PDFIUM" = "TRUE"; then
12015         AC_MSG_CHECKING([which OpenJPEG library to use])
12016         if test "$with_system_openjpeg" = "yes"; then
12017                 SYSTEM_OPENJPEG2=TRUE
12018                 AC_MSG_RESULT([external])
12019                 PKG_CHECK_MODULES( OPENJPEG2, libopenjp2 )
12020                 OPENJPEG2_CFLAGS=$(printf '%s' "$OPENJPEG2_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12021                 FilterLibs "${OPENJPEG2_LIBS}"
12022                 OPENJPEG2_LIBS="${filteredlibs}"
12023         else
12024                 SYSTEM_OPENJPEG2=FALSE
12025                 AC_MSG_RESULT([internal])
12026         fi
12027         AC_MSG_CHECKING([which Abseil library to use])
12028         if test "$with_system_abseil" = "yes"; then
12029                 AC_MSG_RESULT([external])
12030                 SYSTEM_ABSEIL=TRUE
12031                 AC_LANG_PUSH([C++])
12032                 AC_CHECK_HEADER(absl/types/bad_optional_access.h, [],
12033                         [AC_MSG_ERROR(abseil headers not found.)], [])
12034                 #ABSEIL_CFLAGS=-I/usr/include
12035                 AC_CHECK_LIB([absl_bad_optional_access], [main], [ABSEIL_LIBS=-labsl_bad_optional_access],
12036                         [ AC_MSG_ERROR([libabsl_bad_optional_access library not found.]) ])
12037                 AC_LANG_POP([C++])
12038                 ABSEIL_CFLAGS=$(printf '%s' "$ABSEIL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12039                 FilterLibs "${ABSEIL_LIBS}"
12040                 ABSEIL_LIBS="${filteredlibs}"
12041         else
12042                 AC_MSG_RESULT([internal])
12043         fi
12045 AC_SUBST(SYSTEM_OPENJPEG2)
12046 AC_SUBST(SYSTEM_ABSEIL)
12047 AC_SUBST(ABSEIL_CFLAGS)
12048 AC_SUBST(ABSEIL_LIBS)
12050 dnl ===================================================================
12051 dnl Check for poppler
12052 dnl ===================================================================
12053 ENABLE_POPPLER=
12054 AC_MSG_CHECKING([whether to build Poppler])
12055 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
12056     AC_MSG_RESULT([yes])
12057     ENABLE_POPPLER=TRUE
12058     AC_DEFINE(HAVE_FEATURE_POPPLER)
12059 else
12060     AC_MSG_RESULT([no])
12062 AC_SUBST(ENABLE_POPPLER)
12064 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
12065     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
12068 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
12069     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
12072 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
12073     dnl ===================================================================
12074     dnl Check for system poppler
12075     dnl ===================================================================
12076     AC_MSG_CHECKING([which PDF import poppler to use])
12077     if test "$with_system_poppler" = "yes"; then
12078         AC_MSG_RESULT([external])
12079         SYSTEM_POPPLER=TRUE
12080         PKG_CHECK_MODULES(POPPLER,[poppler >= 0.14 poppler-cpp])
12081         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12082         FilterLibs "${POPPLER_LIBS}"
12083         POPPLER_LIBS="${filteredlibs}"
12084     else
12085         AC_MSG_RESULT([internal])
12086         SYSTEM_POPPLER=
12087         BUILD_TYPE="$BUILD_TYPE POPPLER"
12088     fi
12089     AC_DEFINE([ENABLE_PDFIMPORT],1)
12091 AC_SUBST(ENABLE_PDFIMPORT)
12092 AC_SUBST(SYSTEM_POPPLER)
12093 AC_SUBST(POPPLER_CFLAGS)
12094 AC_SUBST(POPPLER_LIBS)
12096 # Skia?
12097 ENABLE_SKIA=
12098 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
12099     # Skia now requires at least freetype2 >= 2.8.1, which is less that what LO requires as system freetype.
12100     if test "$SYSTEM_FREETYPE" = TRUE; then
12101         PKG_CHECK_EXISTS(freetype2 >= 21.0.15, # 21.0.15 = 2.8.1
12102             [skia_freetype_ok=yes],
12103             [skia_freetype_ok=no])
12104     else # internal is ok
12105         skia_freetype_ok=yes
12106     fi
12107     AC_MSG_CHECKING([whether to build Skia])
12108     if test "$skia_freetype_ok" = "yes"; then
12109         if test "$enable_skia" = "debug"; then
12110             AC_MSG_RESULT([yes (debug)])
12111             ENABLE_SKIA_DEBUG=TRUE
12112         else
12113             AC_MSG_RESULT([yes])
12114             ENABLE_SKIA_DEBUG=
12115         fi
12116         ENABLE_SKIA=TRUE
12117         AC_DEFINE(HAVE_FEATURE_SKIA)
12118         BUILD_TYPE="$BUILD_TYPE SKIA"
12120         if test "$OS" = "MACOSX"; then
12121             AC_DEFINE(SK_SUPPORT_GPU,1)
12122             AC_DEFINE(SK_METAL,1)
12123             SKIA_GPU=METAL
12124             AC_SUBST(SKIA_GPU)
12125         else
12126             AC_DEFINE(SK_SUPPORT_GPU,1)
12127             AC_DEFINE(SK_VULKAN,1)
12128             SKIA_GPU=VULKAN
12129             AC_SUBST(SKIA_GPU)
12130         fi
12132         if test -n "$MAC_OS_X_VERSION_MIN_REQUIRED" && test "$MAC_OS_X_VERSION_MIN_REQUIRED" -lt "101200"; then
12133             SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX=1
12134             AC_SUBST(SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX)
12135         fi
12136     else
12137         AC_MSG_RESULT([no (freetype too old)])
12138         add_warning "freetype version is too old for Skia library, at least 2.8.1 required, Skia support disabled"
12139     fi
12141 else
12142     AC_MSG_CHECKING([whether to build Skia])
12143     AC_MSG_RESULT([no])
12145 AC_SUBST(ENABLE_SKIA)
12146 AC_SUBST(ENABLE_SKIA_DEBUG)
12148 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
12149 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
12150 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
12151 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
12152 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
12153 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
12154 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
12155 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F=
12156 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
12157 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
12158 HAVE_LO_CLANG_DLLEXPORTINLINES=
12160 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE; then
12161     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12162         AC_MSG_CHECKING([for Clang])
12163         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
12164     else
12165         if test "$_os" = "WINNT"; then
12166             AC_MSG_CHECKING([for clang-cl])
12167             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
12168                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
12169                 dnl explicitly set -m32/-m64
12170                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
12171                 LO_CLANG_CXX="$LO_CLANG_CC"
12172                 AC_MSG_RESULT([$LO_CLANG_CC])
12173             else
12174                 AC_MSG_RESULT([no])
12175             fi
12176         else
12177             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
12178             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
12179         fi
12180     fi
12181     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12182         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
12183         clang2_ver=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
12184         if test "$clang2_ver" -lt 50002; then
12185             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
12186             LO_CLANG_CC=
12187             LO_CLANG_CXX=
12188         fi
12189     fi
12190     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX" -a "$_os" = "WINNT"; then
12191         save_CXX="$CXX"
12192         CXX="$LO_CLANG_CXX"
12193         AC_MSG_CHECKING([whether $CXX supports -Zc:dllexportInlines-])
12194         AC_LANG_PUSH([C++])
12195         save_CXXFLAGS=$CXXFLAGS
12196         CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
12197         AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
12198                 HAVE_LO_CLANG_DLLEXPORTINLINES=TRUE
12199                 AC_MSG_RESULT([yes])
12200             ], [AC_MSG_RESULT([no])])
12201         CXXFLAGS=$save_CXXFLAGS
12202         AC_LANG_POP([C++])
12203         CXX="$save_CXX"
12204         if test -z "$HAVE_LO_CLANG_DLLEXPORTINLINES"; then
12205             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.])
12206         fi
12207     fi
12208     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
12209         # Skia is the default on Windows and Mac, so hard-require Clang.
12210         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
12211         if test "$_os" = "WINNT" -o "$_os" = "Darwin"; then
12212             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang, or use --disable-skia.])
12213         else
12214             AC_MSG_WARN([Clang compiler not found.])
12215         fi
12216     else
12218         save_CXX="$CXX"
12219         CXX="$LO_CLANG_CXX"
12220         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
12221         flag_sse2=-msse2
12222         flag_ssse3=-mssse3
12223         flag_sse41=-msse4.1
12224         flag_sse42=-msse4.2
12225         flag_avx=-mavx
12226         flag_avx2=-mavx2
12227         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
12228         flag_avx512f=-mavx512f
12229         flag_f16c=-mf16c
12230         flag_fma=-mfma
12232         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
12233         AC_LANG_PUSH([C++])
12234         save_CXXFLAGS=$CXXFLAGS
12235         CXXFLAGS="$CXXFLAGS $flag_sse2"
12236         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12237             #include <emmintrin.h>
12238             int main () {
12239                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12240                 c = _mm_xor_si128 (a, b);
12241                 return 0;
12242             }
12243             ])],
12244             [can_compile_sse2=yes],
12245             [can_compile_sse2=no])
12246         AC_LANG_POP([C++])
12247         CXXFLAGS=$save_CXXFLAGS
12248         AC_MSG_RESULT([${can_compile_sse2}])
12249         if test "${can_compile_sse2}" = "yes" ; then
12250             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
12251         fi
12253         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
12254         AC_LANG_PUSH([C++])
12255         save_CXXFLAGS=$CXXFLAGS
12256         CXXFLAGS="$CXXFLAGS $flag_ssse3"
12257         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12258             #include <tmmintrin.h>
12259             int main () {
12260                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12261                 c = _mm_maddubs_epi16 (a, b);
12262                 return 0;
12263             }
12264             ])],
12265             [can_compile_ssse3=yes],
12266             [can_compile_ssse3=no])
12267         AC_LANG_POP([C++])
12268         CXXFLAGS=$save_CXXFLAGS
12269         AC_MSG_RESULT([${can_compile_ssse3}])
12270         if test "${can_compile_ssse3}" = "yes" ; then
12271             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
12272         fi
12274         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
12275         AC_LANG_PUSH([C++])
12276         save_CXXFLAGS=$CXXFLAGS
12277         CXXFLAGS="$CXXFLAGS $flag_sse41"
12278         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12279             #include <smmintrin.h>
12280             int main () {
12281                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12282                 c = _mm_cmpeq_epi64 (a, b);
12283                 return 0;
12284             }
12285             ])],
12286             [can_compile_sse41=yes],
12287             [can_compile_sse41=no])
12288         AC_LANG_POP([C++])
12289         CXXFLAGS=$save_CXXFLAGS
12290         AC_MSG_RESULT([${can_compile_sse41}])
12291         if test "${can_compile_sse41}" = "yes" ; then
12292             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12293         fi
12295         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12296         AC_LANG_PUSH([C++])
12297         save_CXXFLAGS=$CXXFLAGS
12298         CXXFLAGS="$CXXFLAGS $flag_sse42"
12299         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12300             #include <nmmintrin.h>
12301             int main () {
12302                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12303                 c = _mm_cmpgt_epi64 (a, b);
12304                 return 0;
12305             }
12306             ])],
12307             [can_compile_sse42=yes],
12308             [can_compile_sse42=no])
12309         AC_LANG_POP([C++])
12310         CXXFLAGS=$save_CXXFLAGS
12311         AC_MSG_RESULT([${can_compile_sse42}])
12312         if test "${can_compile_sse42}" = "yes" ; then
12313             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12314         fi
12316         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12317         AC_LANG_PUSH([C++])
12318         save_CXXFLAGS=$CXXFLAGS
12319         CXXFLAGS="$CXXFLAGS $flag_avx"
12320         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12321             #include <immintrin.h>
12322             int main () {
12323                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12324                 c = _mm256_xor_ps(a, b);
12325                 return 0;
12326             }
12327             ])],
12328             [can_compile_avx=yes],
12329             [can_compile_avx=no])
12330         AC_LANG_POP([C++])
12331         CXXFLAGS=$save_CXXFLAGS
12332         AC_MSG_RESULT([${can_compile_avx}])
12333         if test "${can_compile_avx}" = "yes" ; then
12334             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12335         fi
12337         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12338         AC_LANG_PUSH([C++])
12339         save_CXXFLAGS=$CXXFLAGS
12340         CXXFLAGS="$CXXFLAGS $flag_avx2"
12341         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12342             #include <immintrin.h>
12343             int main () {
12344                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12345                 c = _mm256_maddubs_epi16(a, b);
12346                 return 0;
12347             }
12348             ])],
12349             [can_compile_avx2=yes],
12350             [can_compile_avx2=no])
12351         AC_LANG_POP([C++])
12352         CXXFLAGS=$save_CXXFLAGS
12353         AC_MSG_RESULT([${can_compile_avx2}])
12354         if test "${can_compile_avx2}" = "yes" ; then
12355             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12356         fi
12358         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12359         AC_LANG_PUSH([C++])
12360         save_CXXFLAGS=$CXXFLAGS
12361         CXXFLAGS="$CXXFLAGS $flag_avx512"
12362         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12363             #include <immintrin.h>
12364             int main () {
12365                 __m512i a = _mm512_loadu_si512(0);
12366                 __m512d v1 = _mm512_load_pd(0);
12367                 // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
12368                 __m512d v2 = _mm512_abs_pd(v1);
12369                 return 0;
12370             }
12371             ])],
12372             [can_compile_avx512=yes],
12373             [can_compile_avx512=no])
12374         AC_LANG_POP([C++])
12375         CXXFLAGS=$save_CXXFLAGS
12376         AC_MSG_RESULT([${can_compile_avx512}])
12377         if test "${can_compile_avx512}" = "yes" ; then
12378             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12379             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
12380         fi
12382         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12383         AC_LANG_PUSH([C++])
12384         save_CXXFLAGS=$CXXFLAGS
12385         CXXFLAGS="$CXXFLAGS $flag_f16c"
12386         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12387             #include <immintrin.h>
12388             int main () {
12389                 __m128i a = _mm_set1_epi32 (0);
12390                 __m128 c;
12391                 c = _mm_cvtph_ps(a);
12392                 return 0;
12393             }
12394             ])],
12395             [can_compile_f16c=yes],
12396             [can_compile_f16c=no])
12397         AC_LANG_POP([C++])
12398         CXXFLAGS=$save_CXXFLAGS
12399         AC_MSG_RESULT([${can_compile_f16c}])
12400         if test "${can_compile_f16c}" = "yes" ; then
12401             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12402         fi
12404         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12405         AC_LANG_PUSH([C++])
12406         save_CXXFLAGS=$CXXFLAGS
12407         CXXFLAGS="$CXXFLAGS $flag_fma"
12408         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12409             #include <immintrin.h>
12410             int main () {
12411                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12412                 d = _mm256_fmadd_ps(a, b, c);
12413                 return 0;
12414             }
12415             ])],
12416             [can_compile_fma=yes],
12417             [can_compile_fma=no])
12418         AC_LANG_POP([C++])
12419         CXXFLAGS=$save_CXXFLAGS
12420         AC_MSG_RESULT([${can_compile_fma}])
12421         if test "${can_compile_fma}" = "yes" ; then
12422             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12423         fi
12425         CXX="$save_CXX"
12426     fi
12429 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12431 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12432     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12433     AC_LANG_PUSH([C])
12434     save_CC="$CC"
12435     CC="$LO_CLANG_CC"
12436     save_CFLAGS=$CFLAGS
12437     CFLAGS="$CFLAGS --ccache-skip -O2 -Werror"
12438     dnl an empty program will do, we're checking the compiler flags
12439     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12440                       [use_ccache=yes], [use_ccache=no])
12441     CFLAGS=$save_CFLAGS
12442     CC=$save_CC
12443     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12444         AC_MSG_RESULT([yes])
12445     else
12446         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12447         AC_MSG_RESULT([no])
12448     fi
12449     AC_LANG_POP([C])
12451     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12452     AC_LANG_PUSH([C++])
12453     save_CXX="$CXX"
12454     CXX="$LO_CLANG_CXX"
12455     save_CXXFLAGS=$CXXFLAGS
12456     CXXFLAGS="$CXXFLAGS --ccache-skip -O2 -Werror"
12457     dnl an empty program will do, we're checking the compiler flags
12458     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12459                       [use_ccache=yes], [use_ccache=no])
12460     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12461         AC_MSG_RESULT([yes])
12462     else
12463         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12464         AC_MSG_RESULT([no])
12465     fi
12466     CXXFLAGS=$save_CXXFLAGS
12467     CXX=$save_CXX
12468     AC_LANG_POP([C++])
12471 AC_SUBST(LO_CLANG_CC)
12472 AC_SUBST(LO_CLANG_CXX)
12473 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12474 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12475 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12476 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12477 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12478 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12479 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12480 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F)
12481 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12482 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12483 AC_SUBST(CLANG_USE_LD)
12484 AC_SUBST([HAVE_LO_CLANG_DLLEXPORTINLINES])
12486 SYSTEM_GPGMEPP=
12488 if test "$enable_gpgmepp" = no; then
12489     AC_MSG_CHECKING([whether to enable gpgmepp])
12490     AC_MSG_RESULT([no])
12491 elif test "$enable_mpl_subset" = "yes"; then
12492     AC_MSG_CHECKING([whether gpgmepp should be disabled due to building just MPL])
12493     AC_MSG_RESULT([yes])
12494 elif test "$enable_fuzzers" = "yes"; then
12495     AC_MSG_CHECKING([whether gpgmepp should be disabled due to oss-fuzz])
12496     AC_MSG_RESULT([yes])
12497 elif test "$_os" = "Linux" -o "$_os" = "Darwin" -o "$_os" = "WINNT" ; then
12498     dnl ===================================================================
12499     dnl Check for system gpgme
12500     dnl ===================================================================
12501     AC_MSG_CHECKING([which gpgmepp to use])
12502     if test "$with_system_gpgmepp" = "yes"; then
12503         AC_MSG_RESULT([external])
12504         SYSTEM_GPGMEPP=TRUE
12506         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12507         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12508             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp >= 1.14 development package])], [])
12509         # progress_callback is the only func with plain C linkage
12510         # checking for it also filters out older, KDE-dependent libgpgmepp versions
12511         AC_CHECK_LIB(gpgmepp, progress_callback, [ GPGMEPP_LIBS=-lgpgmepp ],
12512             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12513         AC_CHECK_HEADER(gpgme.h, [],
12514             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12515     else
12516         AC_MSG_RESULT([internal])
12517         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12519         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12520         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12521         if test "$_os" != "WINNT"; then
12522             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12523             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12524         fi
12525     fi
12526     ENABLE_GPGMEPP=TRUE
12527     AC_DEFINE([HAVE_FEATURE_GPGME])
12528     AC_PATH_PROG(GPG, gpg)
12529     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12530     # so let's exclude that manually for the moment
12531     if test -n "$GPG" -a "$_os" != "WINNT"; then
12532         # make sure we not only have a working gpgme, but a full working
12533         # gpg installation to run OpenPGP signature verification
12534         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12535     fi
12536     if test "$_os" = "Linux"; then
12537       uid=`id -u`
12538       AC_MSG_CHECKING([for /run/user/$uid])
12539       if test -d /run/user/$uid; then
12540         AC_MSG_RESULT([yes])
12541         AC_PATH_PROG(GPGCONF, gpgconf)
12543         # Older versions of gpgconf are not working as expected, since
12544         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12545         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12546         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12547         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12548         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12549         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12550         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12551           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12552           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12553           if $GPGCONF --dump-options > /dev/null ; then
12554             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12555               AC_MSG_RESULT([yes])
12556               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12557               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12558             else
12559               AC_MSG_RESULT([no])
12560             fi
12561           else
12562             AC_MSG_RESULT([no. missing or broken gpgconf?])
12563           fi
12564         else
12565           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12566         fi
12567       else
12568         AC_MSG_RESULT([no])
12569      fi
12570    fi
12572 AC_SUBST(ENABLE_GPGMEPP)
12573 AC_SUBST(SYSTEM_GPGMEPP)
12574 AC_SUBST(GPG_ERROR_CFLAGS)
12575 AC_SUBST(GPG_ERROR_LIBS)
12576 AC_SUBST(LIBASSUAN_CFLAGS)
12577 AC_SUBST(LIBASSUAN_LIBS)
12578 AC_SUBST(GPGMEPP_CFLAGS)
12579 AC_SUBST(GPGMEPP_LIBS)
12581 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12582 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12583     AC_MSG_RESULT([yes])
12584     ENABLE_MEDIAWIKI=TRUE
12585     BUILD_TYPE="$BUILD_TYPE XSLTML"
12586     if test  "x$with_java" = "xno"; then
12587         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12588     fi
12589 else
12590     AC_MSG_RESULT([no])
12591     ENABLE_MEDIAWIKI=
12592     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12594 AC_SUBST(ENABLE_MEDIAWIKI)
12596 AC_MSG_CHECKING([whether to build the Report Builder])
12597 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12598     AC_MSG_RESULT([yes])
12599     ENABLE_REPORTBUILDER=TRUE
12600     AC_MSG_CHECKING([which jfreereport libs to use])
12601     if test "$with_system_jfreereport" = "yes"; then
12602         SYSTEM_JFREEREPORT=TRUE
12603         AC_MSG_RESULT([external])
12604         if test -z $SAC_JAR; then
12605             SAC_JAR=/usr/share/java/sac.jar
12606         fi
12607         if ! test -f $SAC_JAR; then
12608              AC_MSG_ERROR(sac.jar not found.)
12609         fi
12611         if test -z $LIBXML_JAR; then
12612             if test -f /usr/share/java/libxml-1.0.0.jar; then
12613                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12614             elif test -f /usr/share/java/libxml.jar; then
12615                 LIBXML_JAR=/usr/share/java/libxml.jar
12616             else
12617                 AC_MSG_ERROR(libxml.jar replacement not found.)
12618             fi
12619         elif ! test -f $LIBXML_JAR; then
12620             AC_MSG_ERROR(libxml.jar not found.)
12621         fi
12623         if test -z $FLUTE_JAR; then
12624             if test -f /usr/share/java/flute-1.3.0.jar; then
12625                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12626             elif test -f /usr/share/java/flute.jar; then
12627                 FLUTE_JAR=/usr/share/java/flute.jar
12628             else
12629                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12630             fi
12631         elif ! test -f $FLUTE_JAR; then
12632             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12633         fi
12635         if test -z $JFREEREPORT_JAR; then
12636             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12637                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12638             elif test -f /usr/share/java/flow-engine.jar; then
12639                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12640             else
12641                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12642             fi
12643         elif ! test -f  $JFREEREPORT_JAR; then
12644                 AC_MSG_ERROR(jfreereport.jar not found.)
12645         fi
12647         if test -z $LIBLAYOUT_JAR; then
12648             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12649                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12650             elif test -f /usr/share/java/liblayout.jar; then
12651                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12652             else
12653                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12654             fi
12655         elif ! test -f $LIBLAYOUT_JAR; then
12656                 AC_MSG_ERROR(liblayout.jar not found.)
12657         fi
12659         if test -z $LIBLOADER_JAR; then
12660             if test -f /usr/share/java/libloader-1.0.0.jar; then
12661                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
12662             elif test -f /usr/share/java/libloader.jar; then
12663                 LIBLOADER_JAR=/usr/share/java/libloader.jar
12664             else
12665                 AC_MSG_ERROR(libloader.jar replacement not found.)
12666             fi
12667         elif ! test -f  $LIBLOADER_JAR; then
12668             AC_MSG_ERROR(libloader.jar not found.)
12669         fi
12671         if test -z $LIBFORMULA_JAR; then
12672             if test -f /usr/share/java/libformula-0.2.0.jar; then
12673                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
12674             elif test -f /usr/share/java/libformula.jar; then
12675                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
12676             else
12677                 AC_MSG_ERROR(libformula.jar replacement not found.)
12678             fi
12679         elif ! test -f $LIBFORMULA_JAR; then
12680                 AC_MSG_ERROR(libformula.jar not found.)
12681         fi
12683         if test -z $LIBREPOSITORY_JAR; then
12684             if test -f /usr/share/java/librepository-1.0.0.jar; then
12685                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
12686             elif test -f /usr/share/java/librepository.jar; then
12687                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
12688             else
12689                 AC_MSG_ERROR(librepository.jar replacement not found.)
12690             fi
12691         elif ! test -f $LIBREPOSITORY_JAR; then
12692             AC_MSG_ERROR(librepository.jar not found.)
12693         fi
12695         if test -z $LIBFONTS_JAR; then
12696             if test -f /usr/share/java/libfonts-1.0.0.jar; then
12697                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
12698             elif test -f /usr/share/java/libfonts.jar; then
12699                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
12700             else
12701                 AC_MSG_ERROR(libfonts.jar replacement not found.)
12702             fi
12703         elif ! test -f $LIBFONTS_JAR; then
12704                 AC_MSG_ERROR(libfonts.jar not found.)
12705         fi
12707         if test -z $LIBSERIALIZER_JAR; then
12708             if test -f /usr/share/java/libserializer-1.0.0.jar; then
12709                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
12710             elif test -f /usr/share/java/libserializer.jar; then
12711                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
12712             else
12713                 AC_MSG_ERROR(libserializer.jar replacement not found.)
12714             fi
12715         elif ! test -f $LIBSERIALIZER_JAR; then
12716                 AC_MSG_ERROR(libserializer.jar not found.)
12717         fi
12719         if test -z $LIBBASE_JAR; then
12720             if test -f /usr/share/java/libbase-1.0.0.jar; then
12721                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
12722             elif test -f /usr/share/java/libbase.jar; then
12723                 LIBBASE_JAR=/usr/share/java/libbase.jar
12724             else
12725                 AC_MSG_ERROR(libbase.jar replacement not found.)
12726             fi
12727         elif ! test -f $LIBBASE_JAR; then
12728             AC_MSG_ERROR(libbase.jar not found.)
12729         fi
12731     else
12732         AC_MSG_RESULT([internal])
12733         SYSTEM_JFREEREPORT=
12734         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
12735         NEED_ANT=TRUE
12736     fi
12737 else
12738     AC_MSG_RESULT([no])
12739     ENABLE_REPORTBUILDER=
12740     SYSTEM_JFREEREPORT=
12742 AC_SUBST(ENABLE_REPORTBUILDER)
12743 AC_SUBST(SYSTEM_JFREEREPORT)
12744 AC_SUBST(SAC_JAR)
12745 AC_SUBST(LIBXML_JAR)
12746 AC_SUBST(FLUTE_JAR)
12747 AC_SUBST(JFREEREPORT_JAR)
12748 AC_SUBST(LIBBASE_JAR)
12749 AC_SUBST(LIBLAYOUT_JAR)
12750 AC_SUBST(LIBLOADER_JAR)
12751 AC_SUBST(LIBFORMULA_JAR)
12752 AC_SUBST(LIBREPOSITORY_JAR)
12753 AC_SUBST(LIBFONTS_JAR)
12754 AC_SUBST(LIBSERIALIZER_JAR)
12756 # scripting provider for BeanShell?
12757 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
12758 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
12759     AC_MSG_RESULT([yes])
12760     ENABLE_SCRIPTING_BEANSHELL=TRUE
12762     dnl ===================================================================
12763     dnl Check for system beanshell
12764     dnl ===================================================================
12765     AC_MSG_CHECKING([which beanshell to use])
12766     if test "$with_system_beanshell" = "yes"; then
12767         AC_MSG_RESULT([external])
12768         SYSTEM_BSH=TRUE
12769         if test -z $BSH_JAR; then
12770             BSH_JAR=/usr/share/java/bsh.jar
12771         fi
12772         if ! test -f $BSH_JAR; then
12773             AC_MSG_ERROR(bsh.jar not found.)
12774         fi
12775     else
12776         AC_MSG_RESULT([internal])
12777         SYSTEM_BSH=
12778         BUILD_TYPE="$BUILD_TYPE BSH"
12779     fi
12780 else
12781     AC_MSG_RESULT([no])
12782     ENABLE_SCRIPTING_BEANSHELL=
12783     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
12785 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
12786 AC_SUBST(SYSTEM_BSH)
12787 AC_SUBST(BSH_JAR)
12789 # scripting provider for JavaScript?
12790 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
12791 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
12792     AC_MSG_RESULT([yes])
12793     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
12795     dnl ===================================================================
12796     dnl Check for system rhino
12797     dnl ===================================================================
12798     AC_MSG_CHECKING([which rhino to use])
12799     if test "$with_system_rhino" = "yes"; then
12800         AC_MSG_RESULT([external])
12801         SYSTEM_RHINO=TRUE
12802         if test -z $RHINO_JAR; then
12803             RHINO_JAR=/usr/share/java/js.jar
12804         fi
12805         if ! test -f $RHINO_JAR; then
12806             AC_MSG_ERROR(js.jar not found.)
12807         fi
12808     else
12809         AC_MSG_RESULT([internal])
12810         SYSTEM_RHINO=
12811         BUILD_TYPE="$BUILD_TYPE RHINO"
12812         NEED_ANT=TRUE
12813     fi
12814 else
12815     AC_MSG_RESULT([no])
12816     ENABLE_SCRIPTING_JAVASCRIPT=
12817     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
12819 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
12820 AC_SUBST(SYSTEM_RHINO)
12821 AC_SUBST(RHINO_JAR)
12823 # This is only used in Qt5/Qt6/KF5 checks to determine if /usr/lib64
12824 # paths should be added to library search path. So lets put all 64-bit
12825 # platforms there.
12826 supports_multilib=
12827 case "$host_cpu" in
12828 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el)
12829     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
12830         supports_multilib="yes"
12831     fi
12832     ;;
12834     ;;
12835 esac
12837 dnl ===================================================================
12838 dnl QT5 Integration
12839 dnl ===================================================================
12841 QT5_CFLAGS=""
12842 QT5_LIBS=""
12843 QMAKE5="qmake"
12844 MOC5="moc"
12845 QT5_GOBJECT_CFLAGS=""
12846 QT5_GOBJECT_LIBS=""
12847 QT5_HAVE_GOBJECT=""
12848 QT5_PLATFORMS_SRCDIR=""
12849 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12850         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
12851         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12852 then
12853     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
12854     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
12856     if test -n "$supports_multilib"; then
12857         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
12858     fi
12860     qt5_test_include="QtWidgets/qapplication.h"
12861     if test "$_os" = "Emscripten"; then
12862         qt5_test_library="libQt5Widgets.a"
12863     else
12864         qt5_test_library="libQt5Widgets.so"
12865     fi
12867     dnl Check for qmake5
12868     if test -n "$QT5DIR"; then
12869         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
12870     else
12871         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
12872     fi
12873     if test "$QMAKE5" = "no"; then
12874         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12875     else
12876         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
12877         if test -z "$qmake5_test_ver"; then
12878             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12879         fi
12880         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
12881         qt5_minimal_minor="6"
12882         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
12883             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
12884         else
12885             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
12886         fi
12887     fi
12889     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
12890     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
12891     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
12892     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
12894     AC_MSG_CHECKING([for Qt5 headers])
12895     qt5_incdir="no"
12896     for inc_dir in $qt5_incdirs; do
12897         if test -r "$inc_dir/$qt5_test_include"; then
12898             qt5_incdir="$inc_dir"
12899             break
12900         fi
12901     done
12902     AC_MSG_RESULT([$qt5_incdir])
12903     if test "x$qt5_incdir" = "xno"; then
12904         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12905     fi
12906     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
12907     AC_LANG_PUSH([C++])
12908     save_CPPFLAGS=$CPPFLAGS
12909     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
12910     AC_CHECK_HEADER(QtCore/qconfig.h, [],
12911         [AC_MSG_ERROR(qconfig.h header not found.)], [])
12912     CPPFLAGS=$save_CPPFLAGS
12913     AC_LANG_POP([C++])
12915     AC_MSG_CHECKING([for Qt5 libraries])
12916     qt5_libdir="no"
12917     for lib_dir in $qt5_libdirs; do
12918         if test -r "$lib_dir/$qt5_test_library"; then
12919             qt5_libdir="$lib_dir"
12920             break
12921         fi
12922     done
12923     AC_MSG_RESULT([$qt5_libdir])
12924     if test "x$qt5_libdir" = "xno"; then
12925         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12926     fi
12928     if test "$_os" = "Emscripten"; then
12929         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
12930             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
12931         fi
12932         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
12933             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
12934         fi
12935     fi
12937     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
12938     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12939     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
12940     if test "$_os" = "Emscripten"; then
12941         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
12942     fi
12944     if test "$USING_X11" = TRUE; then
12945         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
12946         PKG_CHECK_MODULES(QT5_XCB_ICCCM,[xcb-icccm],[
12947             QT5_HAVE_XCB_ICCCM=1
12948             AC_DEFINE(QT5_HAVE_XCB_ICCCM)
12949         ],[
12950             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)])
12951             add_warning "XCB ICCCM not found, which is needed for Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)"
12952         ])
12953         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
12954         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
12955         QT5_USING_X11=1
12956         AC_DEFINE(QT5_USING_X11)
12957     fi
12959     dnl Check for Meta Object Compiler
12961     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
12962     if test "$MOC5" = "no"; then
12963         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
12964 the root of your Qt installation by exporting QT5DIR before running "configure".])
12965     fi
12967     if test "$test_gstreamer_1_0" = yes; then
12968         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
12969                 QT5_HAVE_GOBJECT=1
12970                 AC_DEFINE(QT5_HAVE_GOBJECT)
12971             ],
12972             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
12973         )
12974     fi
12976 AC_SUBST(QT5_CFLAGS)
12977 AC_SUBST(QT5_LIBS)
12978 AC_SUBST(MOC5)
12979 AC_SUBST(QT5_GOBJECT_CFLAGS)
12980 AC_SUBST(QT5_GOBJECT_LIBS)
12981 AC_SUBST(QT5_HAVE_GOBJECT)
12982 AC_SUBST(QT5_PLATFORMS_SRCDIR)
12984 dnl ===================================================================
12985 dnl QT6 Integration
12986 dnl ===================================================================
12988 QT6_CFLAGS=""
12989 QT6_LIBS=""
12990 QMAKE6="qmake"
12991 MOC6="moc"
12992 QT6_PLATFORMS_SRCDIR=""
12993 if test \( "$test_qt6" = "yes" -a "$ENABLE_QT6" = "TRUE" \)
12994 then
12995     qt6_incdirs="$QT6INC /usr/include/qt6 /usr/include $x_includes"
12996     qt6_libdirs="$QT6LIB /usr/lib/qt6 /usr/lib $x_libraries"
12998     if test -n "$supports_multilib"; then
12999         qt6_libdirs="$qt6_libdirs /usr/lib64/qt6 /usr/lib64/qt /usr/lib64"
13000     fi
13002     qt6_test_include="QtWidgets/qapplication.h"
13003     if test "$_os" = "Emscripten"; then
13004         qt6_test_library="libQt6Widgets.a"
13005     else
13006         qt6_test_library="libQt6Widgets.so"
13007     fi
13009     dnl Check for qmake6
13010     if test -n "$QT6DIR"; then
13011         AC_PATH_PROG(QMAKE6, [qmake], no, [$QT6DIR/bin])
13012     else
13013         AC_PATH_PROGS(QMAKE6, [qmake-qt6 qmake], no)
13014     fi
13015     if test "$QMAKE6" = "no"; then
13016         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13017     else
13018         qmake6_test_ver="`$QMAKE6 -v 2>&1 | $SED -n -e 's/^Using Qt version \(6\.[[0-9.]]\+\).*$/\1/p'`"
13019         if test -z "$qmake6_test_ver"; then
13020             AC_MSG_ERROR([Wrong qmake for Qt6 found. Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13021         fi
13022         AC_MSG_NOTICE([Detected Qt6 version: $qmake6_test_ver])
13023     fi
13025     qt6_incdirs="`$QMAKE6 -query QT_INSTALL_HEADERS` $qt6_incdirs"
13026     qt6_libdirs="`$QMAKE6 -query QT_INSTALL_LIBS` $qt6_libdirs"
13027     qt6_platformsdir="`$QMAKE6 -query QT_INSTALL_PLUGINS`/platforms"
13028     QT6_PLATFORMS_SRCDIR="$qt6_platformsdir"
13030     AC_MSG_CHECKING([for Qt6 headers])
13031     qt6_incdir="no"
13032     for inc_dir in $qt6_incdirs; do
13033         if test -r "$inc_dir/$qt6_test_include"; then
13034             qt6_incdir="$inc_dir"
13035             break
13036         fi
13037     done
13038     AC_MSG_RESULT([$qt6_incdir])
13039     if test "x$qt6_incdir" = "xno"; then
13040         AC_MSG_ERROR([Qt6 headers not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13041     fi
13042     # check for scenario: qt6-qtbase-devel-*.86_64 installed but host is i686
13043     AC_LANG_PUSH([C++])
13044     save_CPPFLAGS=$CPPFLAGS
13045     CPPFLAGS="${CPPFLAGS} -I${qt6_incdir}"
13046     AC_CHECK_HEADER(QtCore/qconfig.h, [],
13047         [AC_MSG_ERROR(qconfig.h header not found.)], [])
13048     CPPFLAGS=$save_CPPFLAGS
13049     AC_LANG_POP([C++])
13051     AC_MSG_CHECKING([for Qt6 libraries])
13052     qt6_libdir="no"
13053     for lib_dir in $qt6_libdirs; do
13054         if test -r "$lib_dir/$qt6_test_library"; then
13055             qt6_libdir="$lib_dir"
13056             break
13057         fi
13058     done
13059     AC_MSG_RESULT([$qt6_libdir])
13060     if test "x$qt6_libdir" = "xno"; then
13061         AC_MSG_ERROR([Qt6 libraries not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13062     fi
13064     if test "$_os" = "Emscripten"; then
13065         if test ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html ; then
13066             QT6_PLATFORMS_SRCDIR="${QT6_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
13067         fi
13068         if test ! -f "${qt6_platformsdir}"/libqwasm.a -o ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html; then
13069             AC_MSG_ERROR([No Qt6 WASM QPA plugin found in ${qt6_platformsdir} or ${QT6_PLATFORMS_SRCDIR}])
13070         fi
13071     fi
13073     QT6_CFLAGS="-I$qt6_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13074     QT6_CFLAGS=$(printf '%s' "$QT6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13075     QT6_LIBS="-L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
13076     if test "$_os" = "Emscripten"; then
13077         QT6_LIBS="$QT6_LIBS -lqtpcre2 -lQt6EventDispatcherSupport -lQt6FontDatabaseSupport -L${qt6_platformsdir} -lqwasm"
13078     fi
13080     if test "$USING_X11" = TRUE; then
13081         PKG_CHECK_MODULES(QT6_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for key modifier handling in X11.])])
13082         QT6_CFLAGS="$QT6_CFLAGS $QT6_XCB_CFLAGS"
13083         QT6_LIBS="$QT6_LIBS $QT6_XCB_LIBS"
13084         QT6_USING_X11=1
13085         AC_DEFINE(QT6_USING_X11)
13086     fi
13088     dnl Check for Meta Object Compiler
13090     AC_PATH_PROGS( MOC6, [moc-qt6 moc], no, [`dirname $qt6_libdir`/libexec:$QT6DIR/libexec:$PATH])
13091     if test "$MOC6" = "no"; then
13092         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13093 the root of your Qt installation by exporting QT6DIR before running "configure".])
13094     fi
13096 AC_SUBST(QT6_CFLAGS)
13097 AC_SUBST(QT6_LIBS)
13098 AC_SUBST(MOC6)
13099 AC_SUBST(QT6_PLATFORMS_SRCDIR)
13101 dnl ===================================================================
13102 dnl KF5 Integration
13103 dnl ===================================================================
13105 KF5_CFLAGS=""
13106 KF5_LIBS=""
13107 KF5_CONFIG="kf5-config"
13108 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13109         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13110 then
13111     if test "$OS" = "HAIKU"; then
13112         haiku_arch="`echo $RTL_ARCH | tr X x`"
13113         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13114         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13115     fi
13117     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
13118     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
13119     if test -n "$supports_multilib"; then
13120         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
13121     fi
13123     kf5_test_include="KF5/KIOFileWidgets/KFileWidget"
13124     kf5_test_library="libKF5KIOFileWidgets.so"
13125     kf5_libdirs="$qt5_libdir $kf5_libdirs"
13127     dnl kf5 KDE4 support compatibility installed
13128     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
13129     if test "$KF5_CONFIG" != "no"; then
13130         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
13131         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
13132     fi
13134     dnl Check for KF5 headers
13135     AC_MSG_CHECKING([for KF5 headers])
13136     kf5_incdir="no"
13137     for kf5_check in $kf5_incdirs; do
13138         if test -r "$kf5_check/$kf5_test_include"; then
13139             kf5_incdir="$kf5_check/KF5"
13140             break
13141         fi
13142     done
13143     AC_MSG_RESULT([$kf5_incdir])
13144     if test "x$kf5_incdir" = "xno"; then
13145         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13146     fi
13148     dnl Check for KF5 libraries
13149     AC_MSG_CHECKING([for KF5 libraries])
13150     kf5_libdir="no"
13151     for kf5_check in $kf5_libdirs; do
13152         if test -r "$kf5_check/$kf5_test_library"; then
13153             kf5_libdir="$kf5_check"
13154             break
13155         fi
13156     done
13158     AC_MSG_RESULT([$kf5_libdir])
13159     if test "x$kf5_libdir" = "xno"; then
13160         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13161     fi
13163     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"
13164     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13165     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13167     if test "$USING_X11" = TRUE; then
13168         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
13169     fi
13171     AC_LANG_PUSH([C++])
13172     save_CXXFLAGS=$CXXFLAGS
13173     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
13174     AC_MSG_CHECKING([whether KDE is >= 5.0])
13175        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13176 #include <kcoreaddons_version.h>
13178 int main(int argc, char **argv) {
13179        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
13180        else return 1;
13182        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13183     CXXFLAGS=$save_CXXFLAGS
13184     AC_LANG_POP([C++])
13186 AC_SUBST(KF5_CFLAGS)
13187 AC_SUBST(KF5_LIBS)
13189 dnl ===================================================================
13190 dnl Test whether to include Evolution 2 support
13191 dnl ===================================================================
13192 AC_MSG_CHECKING([whether to enable evolution 2 support])
13193 if test "$enable_evolution2" = yes; then
13194     AC_MSG_RESULT([yes])
13195     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
13196     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13197     FilterLibs "${GOBJECT_LIBS}"
13198     GOBJECT_LIBS="${filteredlibs}"
13199     ENABLE_EVOAB2="TRUE"
13200 else
13201     AC_MSG_RESULT([no])
13203 AC_SUBST(ENABLE_EVOAB2)
13204 AC_SUBST(GOBJECT_CFLAGS)
13205 AC_SUBST(GOBJECT_LIBS)
13207 dnl ===================================================================
13208 dnl Test which themes to include
13209 dnl ===================================================================
13210 AC_MSG_CHECKING([which themes to include])
13211 # if none given use default subset of available themes
13212 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
13213     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"
13216 WITH_THEMES=""
13217 if test "x$with_theme" != "xno"; then
13218     for theme in $with_theme; do
13219         case $theme in
13220         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" ;;
13221         default) real_theme=colibre ;;
13222         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
13223         esac
13224         WITH_THEMES=`echo "$WITH_THEMES $real_theme"|tr '\ ' '\n'|sort|uniq|tr '\n' '\ '`
13225     done
13227 AC_MSG_RESULT([$WITH_THEMES])
13228 AC_SUBST([WITH_THEMES])
13229 # FIXME: remove this, and the convenience default->colibre remapping after a grace period
13230 for theme in $with_theme; do
13231     case $theme in
13232     default) AC_MSG_WARN([--with-theme=default is deprecated and will be removed, use --with-theme=colibre]) ;;
13233     *) ;;
13234     esac
13235 done
13237 ###############################################################################
13238 # Extensions checking
13239 ###############################################################################
13240 AC_MSG_CHECKING([for extensions integration])
13241 if test "x$enable_extension_integration" != "xno"; then
13242     WITH_EXTENSION_INTEGRATION=TRUE
13243     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
13244     AC_MSG_RESULT([yes, use integration])
13245 else
13246     WITH_EXTENSION_INTEGRATION=
13247     AC_MSG_RESULT([no, do not integrate])
13249 AC_SUBST(WITH_EXTENSION_INTEGRATION)
13251 dnl Should any extra extensions be included?
13252 dnl There are standalone tests for each of these below.
13253 WITH_EXTRA_EXTENSIONS=
13254 AC_SUBST([WITH_EXTRA_EXTENSIONS])
13256 libo_CHECK_EXTENSION([ConvertTextToNumber],[CT2N],[ct2n],[ct2n],[])
13257 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
13258 if test "x$with_java" != "xno"; then
13259     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
13260     libo_CHECK_EXTENSION([LanguageTool],[LANGUAGETOOL],[languagetool],[languagetool],[])
13263 AC_MSG_CHECKING([whether to build opens___.ttf])
13264 if test "$enable_build_opensymbol" = "yes"; then
13265     AC_MSG_RESULT([yes])
13266     AC_PATH_PROG(FONTFORGE, fontforge)
13267     if test -z "$FONTFORGE"; then
13268         AC_MSG_ERROR([fontforge not installed])
13269     fi
13270 else
13271     AC_MSG_RESULT([no])
13272     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
13274 AC_SUBST(FONTFORGE)
13276 dnl ===================================================================
13277 dnl Test whether to include fonts
13278 dnl ===================================================================
13279 AC_MSG_CHECKING([whether to include third-party fonts])
13280 if test "$with_fonts" != "no"; then
13281     AC_MSG_RESULT([yes])
13282     WITH_FONTS=TRUE
13283     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
13284     AC_DEFINE(HAVE_MORE_FONTS)
13285 else
13286     AC_MSG_RESULT([no])
13287     WITH_FONTS=
13288     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
13290 AC_SUBST(WITH_FONTS)
13293 dnl ===================================================================
13294 dnl Test whether to enable online update service
13295 dnl ===================================================================
13296 AC_MSG_CHECKING([whether to enable online update])
13297 ENABLE_ONLINE_UPDATE=
13298 ENABLE_ONLINE_UPDATE_MAR=
13299 UPDATE_CONFIG=
13300 if test "$enable_online_update" = ""; then
13301     AC_MSG_RESULT([no])
13302 else
13303     if test "$enable_online_update" = "mar"; then
13304         AC_MSG_RESULT([yes - MAR-based online update])
13305         ENABLE_ONLINE_UPDATE_MAR="TRUE"
13306         if test "$with_update_config" = ""; then
13307             AC_MSG_ERROR([mar based online updater needs an update config specified with "with-update-config])
13308         fi
13309         UPDATE_CONFIG="$with_update_config"
13310         AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
13311     elif test "$enable_online_update" = "yes"; then
13312         AC_MSG_RESULT([yes])
13313         ENABLE_ONLINE_UPDATE="TRUE"
13314     else
13315         AC_MSG_RESULT([no])
13316     fi
13318 AC_SUBST(ENABLE_ONLINE_UPDATE)
13319 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
13320 AC_SUBST(UPDATE_CONFIG)
13323 PRIVACY_POLICY_URL="$with_privacy_policy_url"
13324 if test "$ENABLE_ONLINE_UPDATE" = TRUE -o "$ENABLE_BREAKPAD" = "TRUE"; then
13325     if test "x$with_privacy_policy_url" = "xundefined"; then
13326         AC_MSG_FAILURE([online update or breakpad/crashreporting are enabled, but no --with-privacy-policy-url=... was provided])
13327     fi
13329 AC_SUBST(PRIVACY_POLICY_URL)
13330 dnl ===================================================================
13331 dnl Test whether we need bzip2
13332 dnl ===================================================================
13333 SYSTEM_BZIP2=
13334 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE"; then
13335     AC_MSG_CHECKING([whether to use system bzip2])
13336     if test "$with_system_bzip2" = yes; then
13337         SYSTEM_BZIP2=TRUE
13338         AC_MSG_RESULT([yes])
13339         PKG_CHECK_MODULES(BZIP2, bzip2)
13340         FilterLibs "${BZIP2_LIBS}"
13341         BZIP2_LIBS="${filteredlibs}"
13342     else
13343         AC_MSG_RESULT([no])
13344         BUILD_TYPE="$BUILD_TYPE BZIP2"
13345     fi
13347 AC_SUBST(SYSTEM_BZIP2)
13348 AC_SUBST(BZIP2_CFLAGS)
13349 AC_SUBST(BZIP2_LIBS)
13351 dnl ===================================================================
13352 dnl Test whether to enable extension update
13353 dnl ===================================================================
13354 AC_MSG_CHECKING([whether to enable extension update])
13355 ENABLE_EXTENSION_UPDATE=
13356 if test "x$enable_extension_update" = "xno"; then
13357     AC_MSG_RESULT([no])
13358 else
13359     AC_MSG_RESULT([yes])
13360     ENABLE_EXTENSION_UPDATE="TRUE"
13361     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
13362     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
13364 AC_SUBST(ENABLE_EXTENSION_UPDATE)
13367 dnl ===================================================================
13368 dnl Test whether to create MSI with LIMITUI=1 (silent install)
13369 dnl ===================================================================
13370 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
13371 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
13372     AC_MSG_RESULT([no])
13373     ENABLE_SILENT_MSI=
13374 else
13375     AC_MSG_RESULT([yes])
13376     ENABLE_SILENT_MSI=TRUE
13377     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
13379 AC_SUBST(ENABLE_SILENT_MSI)
13381 AC_MSG_CHECKING([whether and how to use Xinerama])
13382 if test "$_os" = "Linux" -o "$_os" = "FreeBSD"; then
13383     if test "$x_libraries" = "default_x_libraries"; then
13384         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
13385         if test "x$XINERAMALIB" = x; then
13386            XINERAMALIB="/usr/lib"
13387         fi
13388     else
13389         XINERAMALIB="$x_libraries"
13390     fi
13391     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13392         # we have both versions, let the user decide but use the dynamic one
13393         # per default
13394         USE_XINERAMA=TRUE
13395         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13396             XINERAMA_LINK=dynamic
13397         else
13398             XINERAMA_LINK=static
13399         fi
13400     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13401         # we have only the dynamic version
13402         USE_XINERAMA=TRUE
13403         XINERAMA_LINK=dynamic
13404     elif test -e "$XINERAMALIB/libXinerama.a"; then
13405         # static version
13406         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13407             USE_XINERAMA=TRUE
13408             XINERAMA_LINK=static
13409         else
13410             USE_XINERAMA=
13411             XINERAMA_LINK=none
13412         fi
13413     else
13414         # no Xinerama
13415         USE_XINERAMA=
13416         XINERAMA_LINK=none
13417     fi
13418     if test "$USE_XINERAMA" = "TRUE"; then
13419         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13420         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13421             [AC_MSG_ERROR(Xinerama header not found.)], [])
13422         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13423         if test "x$XEXTLIB" = x; then
13424            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13425         fi
13426         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13427         if test "$_os" = "FreeBSD"; then
13428             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13429         fi
13430         if test "$_os" = "Linux"; then
13431             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13432         fi
13433         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13434             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13435     else
13436         AC_MSG_RESULT([no, libXinerama not found or wrong architecture.])
13437     fi
13438 else
13439     USE_XINERAMA=
13440     XINERAMA_LINK=none
13441     AC_MSG_RESULT([no])
13443 AC_SUBST(USE_XINERAMA)
13444 AC_SUBST(XINERAMA_LINK)
13446 dnl ===================================================================
13447 dnl Test whether to build cairo or rely on the system version
13448 dnl ===================================================================
13450 if test "$test_cairo" = "yes"; then
13451     AC_MSG_CHECKING([whether to use the system cairo])
13453     : ${with_system_cairo:=$with_system_libs}
13454     if test "$with_system_cairo" = "yes"; then
13455         SYSTEM_CAIRO=TRUE
13456         AC_MSG_RESULT([yes])
13458         PKG_CHECK_MODULES( CAIRO, cairo >= 1.8.0 )
13459         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13460         FilterLibs "${CAIRO_LIBS}"
13461         CAIRO_LIBS="${filteredlibs}"
13463         if test "$test_xrender" = "yes"; then
13464             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13465             AC_LANG_PUSH([C])
13466             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13467 #ifdef PictStandardA8
13468 #else
13469       return fail;
13470 #endif
13471 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13473             AC_LANG_POP([C])
13474         fi
13475     else
13476         AC_MSG_RESULT([no])
13477         BUILD_TYPE="$BUILD_TYPE CAIRO"
13478     fi
13480     if test "$enable_cairo_canvas" != no; then
13481         AC_DEFINE(ENABLE_CAIRO_CANVAS)
13482         ENABLE_CAIRO_CANVAS=TRUE
13483     fi
13486 AC_SUBST(CAIRO_CFLAGS)
13487 AC_SUBST(CAIRO_LIBS)
13488 AC_SUBST(ENABLE_CAIRO_CANVAS)
13489 AC_SUBST(SYSTEM_CAIRO)
13491 dnl ===================================================================
13492 dnl Test whether to use avahi
13493 dnl ===================================================================
13494 if test "$_os" = "WINNT"; then
13495     # Windows uses bundled mDNSResponder
13496     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13497 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13498     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13499                       [ENABLE_AVAHI="TRUE"])
13500     AC_DEFINE(HAVE_FEATURE_AVAHI)
13501     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13502     FilterLibs "${AVAHI_LIBS}"
13503     AVAHI_LIBS="${filteredlibs}"
13506 AC_SUBST(ENABLE_AVAHI)
13507 AC_SUBST(AVAHI_CFLAGS)
13508 AC_SUBST(AVAHI_LIBS)
13510 dnl ===================================================================
13511 dnl Test whether to use liblangtag
13512 dnl ===================================================================
13513 SYSTEM_LIBLANGTAG=
13514 AC_MSG_CHECKING([whether to use system liblangtag])
13515 if test "$with_system_liblangtag" = yes; then
13516     SYSTEM_LIBLANGTAG=TRUE
13517     AC_MSG_RESULT([yes])
13518     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
13519     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
13520     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
13521     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13522     FilterLibs "${LIBLANGTAG_LIBS}"
13523     LIBLANGTAG_LIBS="${filteredlibs}"
13524 else
13525     SYSTEM_LIBLANGTAG=
13526     AC_MSG_RESULT([no])
13527     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
13528     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
13529     if test "$COM" = "MSC"; then
13530         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
13531     else
13532         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
13533     fi
13535 AC_SUBST(SYSTEM_LIBLANGTAG)
13536 AC_SUBST(LIBLANGTAG_CFLAGS)
13537 AC_SUBST(LIBLANGTAG_LIBS)
13539 dnl ===================================================================
13540 dnl Test whether to build libpng or rely on the system version
13541 dnl ===================================================================
13543 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng],["-I${WORKDIR}/UnpackedTarball/libpng"],["-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"])
13545 dnl ===================================================================
13546 dnl Check for runtime JVM search path
13547 dnl ===================================================================
13548 if test "$ENABLE_JAVA" != ""; then
13549     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
13550     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
13551         AC_MSG_RESULT([yes])
13552         if ! test -d "$with_jvm_path"; then
13553             AC_MSG_ERROR(["$with_jvm_path" not a directory])
13554         fi
13555         if ! test -d "$with_jvm_path"jvm; then
13556             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
13557         fi
13558         JVM_ONE_PATH_CHECK="$with_jvm_path"
13559         AC_SUBST(JVM_ONE_PATH_CHECK)
13560     else
13561         AC_MSG_RESULT([no])
13562     fi
13565 dnl ===================================================================
13566 dnl Test for the presence of Ant and that it works
13567 dnl ===================================================================
13569 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
13570     ANT_HOME=; export ANT_HOME
13571     WITH_ANT_HOME=; export WITH_ANT_HOME
13572     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
13573         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
13574             if test "$_os" = "WINNT"; then
13575                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
13576             else
13577                 with_ant_home="$LODE_HOME/opt/ant"
13578             fi
13579         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
13580             with_ant_home="$LODE_HOME/opt/ant"
13581         fi
13582     fi
13583     if test -z "$with_ant_home"; then
13584         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
13585     else
13586         if test "$_os" = "WINNT"; then
13587             # AC_PATH_PROGS needs unix path
13588             with_ant_home=`cygpath -u "$with_ant_home"`
13589         fi
13590         AbsolutePath "$with_ant_home"
13591         with_ant_home=$absolute_path
13592         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
13593         WITH_ANT_HOME=$with_ant_home
13594         ANT_HOME=$with_ant_home
13595     fi
13597     if test -z "$ANT"; then
13598         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
13599     else
13600         # resolve relative or absolute symlink
13601         while test -h "$ANT"; do
13602             a_cwd=`pwd`
13603             a_basename=`basename "$ANT"`
13604             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
13605             cd "`dirname "$ANT"`"
13606             cd "`dirname "$a_script"`"
13607             ANT="`pwd`"/"`basename "$a_script"`"
13608             cd "$a_cwd"
13609         done
13611         AC_MSG_CHECKING([if $ANT works])
13612         mkdir -p conftest.dir
13613         a_cwd=$(pwd)
13614         cd conftest.dir
13615         cat > conftest.java << EOF
13616         public class conftest {
13617             int testmethod(int a, int b) {
13618                     return a + b;
13619             }
13620         }
13623         cat > conftest.xml << EOF
13624         <project name="conftest" default="conftest">
13625         <target name="conftest">
13626             <javac srcdir="." includes="conftest.java">
13627             </javac>
13628         </target>
13629         </project>
13632         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
13633         if test $? = 0 -a -f ./conftest.class; then
13634             AC_MSG_RESULT([Ant works])
13635             if test -z "$WITH_ANT_HOME"; then
13636                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
13637                 if test -z "$ANT_HOME"; then
13638                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
13639                 fi
13640             else
13641                 ANT_HOME="$WITH_ANT_HOME"
13642             fi
13643         else
13644             echo "configure: Ant test failed" >&5
13645             cat conftest.java >&5
13646             cat conftest.xml >&5
13647             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
13648         fi
13649         cd "$a_cwd"
13650         rm -fr conftest.dir
13651     fi
13652     if test -z "$ANT_HOME"; then
13653         ANT_HOME="NO_ANT_HOME"
13654     else
13655         PathFormat "$ANT_HOME"
13656         ANT_HOME="$formatted_path"
13657         PathFormat "$ANT"
13658         ANT="$formatted_path"
13659     fi
13661     dnl Checking for ant.jar
13662     if test "$ANT_HOME" != "NO_ANT_HOME"; then
13663         AC_MSG_CHECKING([Ant lib directory])
13664         if test -f $ANT_HOME/lib/ant.jar; then
13665             ANT_LIB="$ANT_HOME/lib"
13666         else
13667             if test -f $ANT_HOME/ant.jar; then
13668                 ANT_LIB="$ANT_HOME"
13669             else
13670                 if test -f /usr/share/java/ant.jar; then
13671                     ANT_LIB=/usr/share/java
13672                 else
13673                     if test -f /usr/share/ant-core/lib/ant.jar; then
13674                         ANT_LIB=/usr/share/ant-core/lib
13675                     else
13676                         if test -f $ANT_HOME/lib/ant/ant.jar; then
13677                             ANT_LIB="$ANT_HOME/lib/ant"
13678                         else
13679                             if test -f /usr/share/lib/ant/ant.jar; then
13680                                 ANT_LIB=/usr/share/lib/ant
13681                             else
13682                                 AC_MSG_ERROR([Ant libraries not found!])
13683                             fi
13684                         fi
13685                     fi
13686                 fi
13687             fi
13688         fi
13689         PathFormat "$ANT_LIB"
13690         ANT_LIB="$formatted_path"
13691         AC_MSG_RESULT([Ant lib directory found.])
13692     fi
13694     ant_minver=1.6.0
13695     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
13697     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
13698     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
13699     ant_version_major=`echo $ant_version | cut -d. -f1`
13700     ant_version_minor=`echo $ant_version | cut -d. -f2`
13701     echo "configure: ant_version $ant_version " >&5
13702     echo "configure: ant_version_major $ant_version_major " >&5
13703     echo "configure: ant_version_minor $ant_version_minor " >&5
13704     if test "$ant_version_major" -ge "2"; then
13705         AC_MSG_RESULT([yes, $ant_version])
13706     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
13707         AC_MSG_RESULT([yes, $ant_version])
13708     else
13709         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
13710     fi
13712     rm -f conftest* core core.* *.core
13714 AC_SUBST(ANT)
13715 AC_SUBST(ANT_HOME)
13716 AC_SUBST(ANT_LIB)
13718 OOO_JUNIT_JAR=
13719 HAMCREST_JAR=
13720 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
13721     AC_MSG_CHECKING([for JUnit 4])
13722     if test "$with_junit" = "yes"; then
13723         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
13724             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
13725         elif test -e /usr/share/java/junit4.jar; then
13726             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
13727         else
13728            if test -e /usr/share/lib/java/junit.jar; then
13729               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
13730            else
13731               OOO_JUNIT_JAR=/usr/share/java/junit.jar
13732            fi
13733         fi
13734     else
13735         OOO_JUNIT_JAR=$with_junit
13736     fi
13737     if test "$_os" = "WINNT"; then
13738         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
13739     fi
13740     printf 'import org.junit.Before;' > conftest.java
13741     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13742         AC_MSG_RESULT([$OOO_JUNIT_JAR])
13743     else
13744         AC_MSG_ERROR(
13745 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
13746  specify its pathname via --with-junit=..., or disable it via --without-junit])
13747     fi
13748     rm -f conftest.class conftest.java
13749     if test $OOO_JUNIT_JAR != ""; then
13750         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
13751     fi
13753     AC_MSG_CHECKING([for included Hamcrest])
13754     printf 'import org.hamcrest.BaseDescription;' > conftest.java
13755     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13756         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
13757     else
13758         AC_MSG_RESULT([Not included])
13759         AC_MSG_CHECKING([for standalone hamcrest jar.])
13760         if test "$with_hamcrest" = "yes"; then
13761             if test -e /usr/share/lib/java/hamcrest.jar; then
13762                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
13763             elif test -e /usr/share/java/hamcrest/core.jar; then
13764                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
13765             elif test -e /usr/share/java/hamcrest/hamcrest.jar; then
13766                 HAMCREST_JAR=/usr/share/java/hamcrest/hamcrest.jar
13767             else
13768                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
13769             fi
13770         else
13771             HAMCREST_JAR=$with_hamcrest
13772         fi
13773         if test "$_os" = "WINNT"; then
13774             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
13775         fi
13776         if "$JAVACOMPILER" -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
13777             AC_MSG_RESULT([$HAMCREST_JAR])
13778         else
13779             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),
13780                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
13781         fi
13782     fi
13783     rm -f conftest.class conftest.java
13785 AC_SUBST(OOO_JUNIT_JAR)
13786 AC_SUBST(HAMCREST_JAR)
13789 AC_SUBST(SCPDEFS)
13792 # check for wget and curl
13794 WGET=
13795 CURL=
13797 if test "$enable_fetch_external" != "no"; then
13799 CURL=`which curl 2>/dev/null`
13801 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
13802     # wget new enough?
13803     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
13804     if test $? -eq 0; then
13805         WGET=$i
13806         break
13807     fi
13808 done
13810 if test -z "$WGET" -a -z "$CURL"; then
13811     AC_MSG_ERROR([neither wget nor curl found!])
13816 AC_SUBST(WGET)
13817 AC_SUBST(CURL)
13820 # check for sha256sum
13822 SHA256SUM=
13824 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
13825     eval "$i -a 256 --version" > /dev/null 2>&1
13826     ret=$?
13827     if test $ret -eq 0; then
13828         SHA256SUM="$i -a 256"
13829         break
13830     fi
13831 done
13833 if test -z "$SHA256SUM"; then
13834     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
13835         eval "$i --version" > /dev/null 2>&1
13836         ret=$?
13837         if test $ret -eq 0; then
13838             SHA256SUM=$i
13839             break
13840         fi
13841     done
13844 if test -z "$SHA256SUM"; then
13845     AC_MSG_ERROR([no sha256sum found!])
13848 AC_SUBST(SHA256SUM)
13850 dnl ===================================================================
13851 dnl Dealing with l10n options
13852 dnl ===================================================================
13853 AC_MSG_CHECKING([which languages to be built])
13854 # get list of all languages
13855 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
13856 # the sed command does the following:
13857 #   + if a line ends with a backslash, append the next line to it
13858 #   + adds " on the beginning of the value (after =)
13859 #   + adds " at the end of the value
13860 #   + removes en-US; we want to put it on the beginning
13861 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
13862 [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)]
13863 ALL_LANGS="en-US $completelangiso"
13864 # check the configured localizations
13865 WITH_LANG="$with_lang"
13867 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
13868 # (Norwegian is "nb" and "nn".)
13869 if test "$WITH_LANG" = "no"; then
13870     WITH_LANG=
13873 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
13874     AC_MSG_RESULT([en-US])
13875 else
13876     AC_MSG_RESULT([$WITH_LANG])
13877     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
13878     if test -z "$MSGFMT"; then
13879         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
13880             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
13881         elif test -x "/opt/lo/bin/msgfmt"; then
13882             MSGFMT="/opt/lo/bin/msgfmt"
13883         else
13884             AC_CHECK_PROGS(MSGFMT, [msgfmt])
13885             if test -z "$MSGFMT"; then
13886                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
13887             fi
13888         fi
13889     fi
13890     if test -z "$MSGUNIQ"; then
13891         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
13892             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
13893         elif test -x "/opt/lo/bin/msguniq"; then
13894             MSGUNIQ="/opt/lo/bin/msguniq"
13895         else
13896             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
13897             if test -z "$MSGUNIQ"; then
13898                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
13899             fi
13900         fi
13901     fi
13903 AC_SUBST(MSGFMT)
13904 AC_SUBST(MSGUNIQ)
13905 # check that the list is valid
13906 for lang in $WITH_LANG; do
13907     test "$lang" = "ALL" && continue
13908     # need to check for the exact string, so add space before and after the list of all languages
13909     for vl in $ALL_LANGS; do
13910         if test "$vl" = "$lang"; then
13911            break
13912         fi
13913     done
13914     if test "$vl" != "$lang"; then
13915         # if you're reading this - you prolly quoted your languages remove the quotes ...
13916         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
13917     fi
13918 done
13919 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
13920     echo $WITH_LANG | grep -q en-US
13921     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
13923 # list with substituted ALL
13924 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
13925 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
13926 test "$WITH_LANG" = "en-US" && WITH_LANG=
13927 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
13928     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
13929     ALL_LANGS=`echo $ALL_LANGS qtz`
13931 AC_SUBST(ALL_LANGS)
13932 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
13933 AC_SUBST(WITH_LANG)
13934 AC_SUBST(WITH_LANG_LIST)
13935 AC_SUBST(GIT_NEEDED_SUBMODULES)
13937 WITH_POOR_HELP_LOCALIZATIONS=
13938 if test -d "$SRC_ROOT/translations/source"; then
13939     for l in `ls -1 $SRC_ROOT/translations/source`; do
13940         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
13941             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
13942         fi
13943     done
13945 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
13947 if test -n "$with_locales"; then
13948     WITH_LOCALES="$with_locales"
13950     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
13951     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
13952     # config_host/config_locales.h.in
13953     for locale in $WITH_LOCALES; do
13954         lang=${locale%_*}
13956         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
13958         case $lang in
13959         hi|mr*ne)
13960             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
13961             ;;
13962         bg|ru)
13963             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
13964             ;;
13965         esac
13966     done
13967 else
13968     AC_DEFINE(WITH_LOCALE_ALL)
13970 AC_SUBST(WITH_LOCALES)
13972 dnl git submodule update --reference
13973 dnl ===================================================================
13974 if test -n "${GIT_REFERENCE_SRC}"; then
13975     for repo in ${GIT_NEEDED_SUBMODULES}; do
13976         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
13977             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
13978         fi
13979     done
13981 AC_SUBST(GIT_REFERENCE_SRC)
13983 dnl git submodules linked dirs
13984 dnl ===================================================================
13985 if test -n "${GIT_LINK_SRC}"; then
13986     for repo in ${GIT_NEEDED_SUBMODULES}; do
13987         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
13988             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
13989         fi
13990     done
13992 AC_SUBST(GIT_LINK_SRC)
13994 dnl branding
13995 dnl ===================================================================
13996 AC_MSG_CHECKING([for alternative branding images directory])
13997 # initialize mapped arrays
13998 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
13999 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
14001 if test -z "$with_branding" -o "$with_branding" = "no"; then
14002     AC_MSG_RESULT([none])
14003     DEFAULT_BRAND_IMAGES="$brand_files"
14004 else
14005     if ! test -d $with_branding ; then
14006         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
14007     else
14008         AC_MSG_RESULT([$with_branding])
14009         CUSTOM_BRAND_DIR="$with_branding"
14010         for lfile in $brand_files
14011         do
14012             if ! test -f $with_branding/$lfile ; then
14013                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
14014                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
14015             else
14016                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
14017             fi
14018         done
14019         check_for_progress="yes"
14020     fi
14022 AC_SUBST([BRAND_INTRO_IMAGES])
14023 AC_SUBST([CUSTOM_BRAND_DIR])
14024 AC_SUBST([CUSTOM_BRAND_IMAGES])
14025 AC_SUBST([DEFAULT_BRAND_IMAGES])
14028 AC_MSG_CHECKING([for 'intro' progress settings])
14029 PROGRESSBARCOLOR=
14030 PROGRESSSIZE=
14031 PROGRESSPOSITION=
14032 PROGRESSFRAMECOLOR=
14033 PROGRESSTEXTCOLOR=
14034 PROGRESSTEXTBASELINE=
14036 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
14037     source "$with_branding/progress.conf"
14038     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
14039 else
14040     AC_MSG_RESULT([none])
14043 AC_SUBST(PROGRESSBARCOLOR)
14044 AC_SUBST(PROGRESSSIZE)
14045 AC_SUBST(PROGRESSPOSITION)
14046 AC_SUBST(PROGRESSFRAMECOLOR)
14047 AC_SUBST(PROGRESSTEXTCOLOR)
14048 AC_SUBST(PROGRESSTEXTBASELINE)
14051 dnl ===================================================================
14052 dnl Custom build version
14053 dnl ===================================================================
14054 AC_MSG_CHECKING([for extra build ID])
14055 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
14056     EXTRA_BUILDID="$with_extra_buildid"
14058 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
14059 if test -n "$EXTRA_BUILDID" ; then
14060     AC_MSG_RESULT([$EXTRA_BUILDID])
14061 else
14062     AC_MSG_RESULT([not set])
14064 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
14066 OOO_VENDOR=
14067 AC_MSG_CHECKING([for vendor])
14068 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
14069     OOO_VENDOR="$USERNAME"
14071     if test -z "$OOO_VENDOR"; then
14072         OOO_VENDOR="$USER"
14073     fi
14075     if test -z "$OOO_VENDOR"; then
14076         OOO_VENDOR="`id -u -n`"
14077     fi
14079     AC_MSG_RESULT([not set, using $OOO_VENDOR])
14080 else
14081     OOO_VENDOR="$with_vendor"
14082     AC_MSG_RESULT([$OOO_VENDOR])
14084 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
14085 AC_SUBST(OOO_VENDOR)
14087 if test "$_os" = "Android" ; then
14088     ANDROID_PACKAGE_NAME=
14089     AC_MSG_CHECKING([for Android package name])
14090     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
14091         if test -n "$ENABLE_DEBUG"; then
14092             # Default to the package name that makes ndk-gdb happy.
14093             ANDROID_PACKAGE_NAME="org.libreoffice"
14094         else
14095             ANDROID_PACKAGE_NAME="org.example.libreoffice"
14096         fi
14098         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
14099     else
14100         ANDROID_PACKAGE_NAME="$with_android_package_name"
14101         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
14102     fi
14103     AC_SUBST(ANDROID_PACKAGE_NAME)
14106 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
14107 if test "$with_compat_oowrappers" = "yes"; then
14108     WITH_COMPAT_OOWRAPPERS=TRUE
14109     AC_MSG_RESULT(yes)
14110 else
14111     WITH_COMPAT_OOWRAPPERS=
14112     AC_MSG_RESULT(no)
14114 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
14116 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{print tolower($0)}'`
14117 AC_MSG_CHECKING([for install dirname])
14118 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
14119     INSTALLDIRNAME="$with_install_dirname"
14121 AC_MSG_RESULT([$INSTALLDIRNAME])
14122 AC_SUBST(INSTALLDIRNAME)
14124 AC_MSG_CHECKING([for prefix])
14125 test "x$prefix" = xNONE && prefix=$ac_default_prefix
14126 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
14127 PREFIXDIR="$prefix"
14128 AC_MSG_RESULT([$PREFIXDIR])
14129 AC_SUBST(PREFIXDIR)
14131 LIBDIR=[$(eval echo $(eval echo $libdir))]
14132 AC_SUBST(LIBDIR)
14134 DATADIR=[$(eval echo $(eval echo $datadir))]
14135 AC_SUBST(DATADIR)
14137 MANDIR=[$(eval echo $(eval echo $mandir))]
14138 AC_SUBST(MANDIR)
14140 DOCDIR=[$(eval echo $(eval echo $docdir))]
14141 AC_SUBST(DOCDIR)
14143 BINDIR=[$(eval echo $(eval echo $bindir))]
14144 AC_SUBST(BINDIR)
14146 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
14147 AC_SUBST(INSTALLDIR)
14149 TESTINSTALLDIR="${BUILDDIR}/test-install"
14150 AC_SUBST(TESTINSTALLDIR)
14153 # ===================================================================
14154 # OAuth2 id and secrets
14155 # ===================================================================
14157 AC_MSG_CHECKING([for Google Drive client id and secret])
14158 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
14159     AC_MSG_RESULT([not set])
14160     GDRIVE_CLIENT_ID="\"\""
14161     GDRIVE_CLIENT_SECRET="\"\""
14162 else
14163     AC_MSG_RESULT([set])
14164     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
14165     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
14167 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
14168 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
14170 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
14171 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
14172     AC_MSG_RESULT([not set])
14173     ALFRESCO_CLOUD_CLIENT_ID="\"\""
14174     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
14175 else
14176     AC_MSG_RESULT([set])
14177     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
14178     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
14180 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
14181 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
14183 AC_MSG_CHECKING([for OneDrive client id and secret])
14184 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
14185     AC_MSG_RESULT([not set])
14186     ONEDRIVE_CLIENT_ID="\"\""
14187     ONEDRIVE_CLIENT_SECRET="\"\""
14188 else
14189     AC_MSG_RESULT([set])
14190     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
14191     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
14193 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
14194 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
14197 dnl ===================================================================
14198 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
14199 dnl --enable-dependency-tracking configure option
14200 dnl ===================================================================
14201 AC_MSG_CHECKING([whether to enable dependency tracking])
14202 if test "$enable_dependency_tracking" = "no"; then
14203     nodep=TRUE
14204     AC_MSG_RESULT([no])
14205 else
14206     AC_MSG_RESULT([yes])
14208 AC_SUBST(nodep)
14210 dnl ===================================================================
14211 dnl Number of CPUs to use during the build
14212 dnl ===================================================================
14213 AC_MSG_CHECKING([for number of processors to use])
14214 # plain --with-parallelism is just the default
14215 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
14216     if test "$with_parallelism" = "no"; then
14217         PARALLELISM=0
14218     else
14219         PARALLELISM=$with_parallelism
14220     fi
14221 else
14222     if test "$enable_icecream" = "yes"; then
14223         PARALLELISM="40"
14224     else
14225         case `uname -s` in
14227         Darwin|FreeBSD|NetBSD|OpenBSD)
14228             PARALLELISM=`sysctl -n hw.ncpu`
14229             ;;
14231         Linux)
14232             PARALLELISM=`getconf _NPROCESSORS_ONLN`
14233         ;;
14234         # what else than above does profit here *and* has /proc?
14235         *)
14236             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
14237             ;;
14238         esac
14240         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
14241         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
14242     fi
14245 if test "$no_parallelism_make" = "YES" && test $PARALLELISM -gt 1; then
14246     if test -z "$with_parallelism"; then
14247             AC_MSG_WARN([gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this.])
14248             add_warning "gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this."
14249             PARALLELISM="1"
14250     else
14251         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."
14252     fi
14255 if test $PARALLELISM -eq 0; then
14256     AC_MSG_RESULT([explicit make -j option needed])
14257 else
14258     AC_MSG_RESULT([$PARALLELISM])
14260 AC_SUBST(PARALLELISM)
14262 IWYU_PATH="$with_iwyu"
14263 AC_SUBST(IWYU_PATH)
14264 if test ! -z "$IWYU_PATH"; then
14265     if test ! -f "$IWYU_PATH"; then
14266         AC_MSG_ERROR([cannot find include-what-you-use binary specified by --with-iwyu])
14267     fi
14271 # Set up ILIB for MSVC build
14273 ILIB1=
14274 if test "$build_os" = "cygwin"; then
14275     ILIB="."
14276     if test -n "$JAVA_HOME"; then
14277         ILIB="$ILIB;$JAVA_HOME/lib"
14278     fi
14279     ILIB1=-link
14280     ILIB="$ILIB;$COMPATH/lib/$WIN_HOST_ARCH"
14281     ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/$WIN_HOST_ARCH"
14282     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14283     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14284     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
14285         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14286         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14287     fi
14288     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
14289     ucrtlibpath_formatted=$formatted_path
14290     ILIB="$ILIB;$ucrtlibpath_formatted"
14291     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
14292     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
14293         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/lib"
14294     else
14295         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
14296     fi
14298     if test "$cross_compiling" != "yes"; then
14299         ILIB_FOR_BUILD="$ILIB"
14300     fi
14302 AC_SUBST(ILIB)
14303 AC_SUBST(ILIB_FOR_BUILD)
14305 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
14306 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
14307 dnl from consteval constructor initializing const variable",
14308 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
14309 dnl expression' with consteval constructor", <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
14310 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
14311 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'", or
14312 dnl <https://developercommunity.visualstudio.com/t/1581879> "Bogus error C7595 with consteval
14313 dnl constructor in ternary expression (/std:c++latest)":
14314 AC_LANG_PUSH([C++])
14315 save_CXX=$CXX
14316 if test "$COM" = MSC && test "$COM_IS_CLANG" != TRUE; then
14317     CXX="env LIB=$ILIB $CXX"
14319 save_CXXFLAGS=$CXXFLAGS
14320 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
14321 AC_RUN_IFELSE([AC_LANG_PROGRAM([
14322         struct S {
14323             consteval S() { i = 1; }
14324             int i = 0;
14325         };
14326         S const s;
14328         struct S1 { consteval S1(int) {} };
14329         struct S2 {
14330             S1 x;
14331             S2(): x(0) {}
14332         };
14334         struct S3 {
14335             consteval S3() {}
14336             union {
14337                 int a;
14338                 unsigned b = 0;
14339             };
14340         };
14341         void f() { S3(); }
14343         struct S4 { consteval S4() = default; };
14344         void f4(bool b) { b ? S4() : S4(); }
14345     ], [
14346         return (s.i == 1) ? 0 : 1;
14347     ])], [
14348         AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
14349         AC_MSG_RESULT([yes])
14350     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
14351 CXX=$save_CXX
14352 CXXFLAGS=$save_CXXFLAGS
14353 AC_LANG_POP([C++])
14355 # ===================================================================
14356 # Creating bigger shared library to link against
14357 # ===================================================================
14358 AC_MSG_CHECKING([whether to create huge library])
14359 MERGELIBS=
14361 if test $_os = iOS -o $_os = Android; then
14362     # Never any point in mergelibs for these as we build just static
14363     # libraries anyway...
14364     enable_mergelibs=no
14367 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
14368     if test $_os != Linux -a $_os != WINNT; then
14369         add_warning "--enable-mergelibs is not tested for this platform"
14370     fi
14371     MERGELIBS="TRUE"
14372     AC_MSG_RESULT([yes])
14373     AC_DEFINE(ENABLE_MERGELIBS)
14374 else
14375     AC_MSG_RESULT([no])
14377 AC_SUBST([MERGELIBS])
14379 dnl ===================================================================
14380 dnl icerun is a wrapper that stops us spawning tens of processes
14381 dnl locally - for tools that can't be executed on the compile cluster
14382 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
14383 dnl ===================================================================
14384 AC_MSG_CHECKING([whether to use icerun wrapper])
14385 ICECREAM_RUN=
14386 if test "$enable_icecream" = "yes" && which icerun >/dev/null 2>&1 ; then
14387     ICECREAM_RUN=icerun
14388     AC_MSG_RESULT([yes])
14389 else
14390     AC_MSG_RESULT([no])
14392 AC_SUBST(ICECREAM_RUN)
14394 dnl ===================================================================
14395 dnl Setup the ICECC_VERSION for the build the same way it was set for
14396 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
14397 dnl ===================================================================
14398 x_ICECC_VERSION=[\#]
14399 if test -n "$ICECC_VERSION" ; then
14400     x_ICECC_VERSION=
14402 AC_SUBST(x_ICECC_VERSION)
14403 AC_SUBST(ICECC_VERSION)
14405 dnl ===================================================================
14407 AC_MSG_CHECKING([MPL subset])
14408 MPL_SUBSET=
14410 if test "$enable_mpl_subset" = "yes"; then
14411     warn_report=false
14412     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
14413         warn_report=true
14414     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
14415         warn_report=true
14416     fi
14417     if test "$warn_report" = "true"; then
14418         AC_MSG_ERROR([need to --disable-report-builder - extended database report builder.])
14419     fi
14420     if test "x$enable_postgresql_sdbc" != "xno"; then
14421         AC_MSG_ERROR([need to --disable-postgresql-sdbc - the PostgreSQL database backend.])
14422     fi
14423     if test "$enable_lotuswordpro" = "yes"; then
14424         AC_MSG_ERROR([need to --disable-lotuswordpro - a Lotus Word Pro file format import filter.])
14425     fi
14426     if test "$WITH_WEBDAV" = "neon"; then
14427         AC_MSG_ERROR([need --with-webdav=serf or --without-webdav - webdav support.])
14428     fi
14429     if test -n "$ENABLE_POPPLER"; then
14430         if test "x$SYSTEM_POPPLER" = "x"; then
14431             AC_MSG_ERROR([need to disable PDF import via poppler or use system library])
14432         fi
14433     fi
14434     # cf. m4/libo_check_extension.m4
14435     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
14436         AC_MSG_ERROR([need to disable extra extensions '$WITH_EXTRA_EXTENSIONS'])
14437     fi
14438     for theme in $WITH_THEMES; do
14439         case $theme in
14440         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
14441             AC_MSG_ERROR([need to disable icon themes from '$WITH_THEMES': $theme present, use --with-theme=colibre]) ;;
14442         *) : ;;
14443         esac
14444     done
14446     ENABLE_OPENGL_TRANSITIONS=
14448     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
14449         AC_MSG_ERROR([need to --disable-lpsolve - calc linear programming solver.])
14450     fi
14452     MPL_SUBSET="TRUE"
14453     AC_DEFINE(MPL_HAVE_SUBSET)
14454     AC_MSG_RESULT([only])
14455 else
14456     AC_MSG_RESULT([no restrictions])
14458 AC_SUBST(MPL_SUBSET)
14460 dnl ===================================================================
14462 AC_MSG_CHECKING([formula logger])
14463 ENABLE_FORMULA_LOGGER=
14465 if test "x$enable_formula_logger" = "xyes"; then
14466     AC_MSG_RESULT([yes])
14467     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14468     ENABLE_FORMULA_LOGGER=TRUE
14469 elif test -n "$ENABLE_DBGUTIL" ; then
14470     AC_MSG_RESULT([yes])
14471     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14472     ENABLE_FORMULA_LOGGER=TRUE
14473 else
14474     AC_MSG_RESULT([no])
14477 AC_SUBST(ENABLE_FORMULA_LOGGER)
14479 dnl ===================================================================
14480 dnl Checking for active Antivirus software.
14481 dnl ===================================================================
14483 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
14484     AC_MSG_CHECKING([for active Antivirus software])
14485     ANTIVIRUS_LIST=`cscript.exe //Nologo $SRC_ROOT/antivirusDetection.vbs`
14486     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
14487         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
14488             AC_MSG_RESULT([found])
14489             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
14490             echo $EICAR_STRING > $SRC_ROOT/eicar
14491             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
14492             rm $SRC_ROOT/eicar
14493             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14494                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14495             fi
14496             echo $EICAR_STRING > $BUILDDIR/eicar
14497             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
14498             rm $BUILDDIR/eicar
14499             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14500                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14501             fi
14502             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"
14503         else
14504             AC_MSG_RESULT([not found])
14505         fi
14506     else
14507         AC_MSG_RESULT([n/a])
14508     fi
14511 dnl ===================================================================
14512 dnl Setting up the environment.
14513 dnl ===================================================================
14514 AC_MSG_NOTICE([setting up the build environment variables...])
14516 AC_SUBST(COMPATH)
14518 if test "$build_os" = "cygwin"; then
14519     if test -d "$COMPATH/atlmfc/lib/spectre"; then
14520         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
14521         ATL_INCLUDE="$COMPATH/atlmfc/include"
14522     elif test -d "$COMPATH/atlmfc/lib"; then
14523         ATL_LIB="$COMPATH/atlmfc/lib"
14524         ATL_INCLUDE="$COMPATH/atlmfc/include"
14525     else
14526         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
14527         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
14528     fi
14529     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
14530     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
14531     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
14533     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
14534     PathFormat "/usr/bin/find.exe"
14535     FIND="$formatted_path"
14536     PathFormat "/usr/bin/sort.exe"
14537     SORT="$formatted_path"
14538     PathFormat "/usr/bin/grep.exe"
14539     WIN_GREP="$formatted_path"
14540     PathFormat "/usr/bin/ls.exe"
14541     WIN_LS="$formatted_path"
14542     PathFormat "/usr/bin/touch.exe"
14543     WIN_TOUCH="$formatted_path"
14544 else
14545     FIND=find
14546     SORT=sort
14549 AC_SUBST(ATL_INCLUDE)
14550 AC_SUBST(ATL_LIB)
14551 AC_SUBST(FIND)
14552 AC_SUBST(SORT)
14553 AC_SUBST(WIN_GREP)
14554 AC_SUBST(WIN_LS)
14555 AC_SUBST(WIN_TOUCH)
14557 AC_SUBST(BUILD_TYPE)
14559 AC_SUBST(SOLARINC)
14561 PathFormat "$PERL"
14562 PERL="$formatted_path"
14563 AC_SUBST(PERL)
14565 if test -n "$TMPDIR"; then
14566     TEMP_DIRECTORY="$TMPDIR"
14567 else
14568     TEMP_DIRECTORY="/tmp"
14570 if test "$build_os" = "cygwin"; then
14571     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
14573 AC_SUBST(TEMP_DIRECTORY)
14575 # setup the PATH for the environment
14576 if test -n "$LO_PATH_FOR_BUILD"; then
14577     LO_PATH="$LO_PATH_FOR_BUILD"
14578     case "$host_os" in
14579     cygwin*|wsl*)
14580         pathmunge "$MSVC_HOST_PATH" "before"
14581         ;;
14582     esac
14583 else
14584     LO_PATH="$PATH"
14586     case "$host_os" in
14588     aix*|dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
14589         if test "$ENABLE_JAVA" != ""; then
14590             pathmunge "$JAVA_HOME/bin" "after"
14591         fi
14592         ;;
14594     cygwin*|wsl*)
14595         # Win32 make needs native paths
14596         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
14597             LO_PATH=`cygpath -p -m "$PATH"`
14598         fi
14599         if test "$WIN_BUILD_ARCH" = "x64"; then
14600             # needed for msi packaging
14601             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
14602         fi
14603         # .NET 4.6 and higher don't have bin directory
14604         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
14605             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
14606         fi
14607         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
14608         pathmunge "$CSC_PATH" "before"
14609         pathmunge "$MIDL_PATH" "before"
14610         pathmunge "$AL_PATH" "before"
14611         pathmunge "$MSVC_MULTI_PATH" "before"
14612         pathmunge "$MSVC_BUILD_PATH" "before"
14613         if test -n "$MSBUILD_PATH" ; then
14614             pathmunge "$MSBUILD_PATH" "before"
14615         fi
14616         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
14617         if test "$ENABLE_JAVA" != ""; then
14618             if test -d "$JAVA_HOME/jre/bin/client"; then
14619                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
14620             fi
14621             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
14622                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
14623             fi
14624             pathmunge "$JAVA_HOME/bin" "before"
14625         fi
14626         pathmunge "$MSVC_HOST_PATH" "before"
14627         ;;
14629     solaris*)
14630         pathmunge "/usr/css/bin" "before"
14631         if test "$ENABLE_JAVA" != ""; then
14632             pathmunge "$JAVA_HOME/bin" "after"
14633         fi
14634         ;;
14635     esac
14638 AC_SUBST(LO_PATH)
14640 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
14641 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
14642     x_LO_ELFCHECK_ALLOWLIST=
14643 else
14644     x_LO_ELFCHECK_ALLOWLIST=[\#]
14646 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
14647 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
14649 libo_FUZZ_SUMMARY
14651 # Generate a configuration sha256 we can use for deps
14652 if test -f config_host.mk; then
14653     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
14655 if test -f config_host_lang.mk; then
14656     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
14659 CFLAGS=$my_original_CFLAGS
14660 CXXFLAGS=$my_original_CXXFLAGS
14661 CPPFLAGS=$my_original_CPPFLAGS
14663 AC_CONFIG_LINKS([include:include])
14665 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
14666 # BUILD platform configuration] - otherwise breaks cross building
14667 AC_CONFIG_FILES([config_host.mk
14668                  config_host_lang.mk
14669                  Makefile
14670                  bin/bffvalidator.sh
14671                  bin/odfvalidator.sh
14672                  bin/officeotron.sh
14673                  hardened_runtime.xcent
14674                  instsetoo_native/util/openoffice.lst
14675                  sysui/desktop/macosx/Info.plist
14676                  vs-code-template.code-workspace:.vscode/vs-code-template.code-workspace.in])
14677 AC_CONFIG_HEADERS([config_host/config_buildid.h])
14678 AC_CONFIG_HEADERS([config_host/config_box2d.h])
14679 AC_CONFIG_HEADERS([config_host/config_clang.h])
14680 AC_CONFIG_HEADERS([config_host/config_crypto.h])
14681 AC_CONFIG_HEADERS([config_host/config_dconf.h])
14682 AC_CONFIG_HEADERS([config_host/config_eot.h])
14683 AC_CONFIG_HEADERS([config_host/config_extensions.h])
14684 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
14685 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
14686 AC_CONFIG_HEADERS([config_host/config_dbus.h])
14687 AC_CONFIG_HEADERS([config_host/config_features.h])
14688 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
14689 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
14690 AC_CONFIG_HEADERS([config_host/config_firebird.h])
14691 AC_CONFIG_HEADERS([config_host/config_folders.h])
14692 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
14693 AC_CONFIG_HEADERS([config_host/config_gio.h])
14694 AC_CONFIG_HEADERS([config_host/config_global.h])
14695 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
14696 AC_CONFIG_HEADERS([config_host/config_java.h])
14697 AC_CONFIG_HEADERS([config_host/config_langs.h])
14698 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
14699 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
14700 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
14701 AC_CONFIG_HEADERS([config_host/config_locales.h])
14702 AC_CONFIG_HEADERS([config_host/config_mpl.h])
14703 AC_CONFIG_HEADERS([config_host/config_oox.h])
14704 AC_CONFIG_HEADERS([config_host/config_options.h])
14705 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
14706 AC_CONFIG_HEADERS([config_host/config_zxing.h])
14707 AC_CONFIG_HEADERS([config_host/config_skia.h])
14708 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
14709 AC_CONFIG_HEADERS([config_host/config_vendor.h])
14710 AC_CONFIG_HEADERS([config_host/config_vcl.h])
14711 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
14712 AC_CONFIG_HEADERS([config_host/config_version.h])
14713 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
14714 AC_CONFIG_HEADERS([config_host/config_poppler.h])
14715 AC_CONFIG_HEADERS([config_host/config_python.h])
14716 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
14717 AC_OUTPUT
14719 if test "$CROSS_COMPILING" = TRUE; then
14720     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
14723 # touch the config timestamp file
14724 if test ! -f config_host.mk.stamp; then
14725     echo > config_host.mk.stamp
14726 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
14727     echo "Host Configuration unchanged - avoiding scp2 stamp update"
14728 else
14729     echo > config_host.mk.stamp
14732 # touch the config lang timestamp file
14733 if test ! -f config_host_lang.mk.stamp; then
14734     echo > config_host_lang.mk.stamp
14735 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
14736     echo "Language Configuration unchanged - avoiding scp2 stamp update"
14737 else
14738     echo > config_host_lang.mk.stamp
14742 if test \( "$STALE_MAKE" = "TRUE" -o "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE" \) \
14743         -a "$build_os" = "cygwin"; then
14745 cat << _EOS
14746 ****************************************************************************
14747 WARNING:
14748 Your make version is known to be horribly slow, and hard to debug
14749 problems with. To get a reasonably functional make please do:
14751 to install a pre-compiled binary make for Win32
14753  mkdir -p /opt/lo/bin
14754  cd /opt/lo/bin
14755  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
14756  cp make-4.2.1-msvc.exe make
14757  chmod +x make
14759 to install from source:
14760 place yourself in a working directory of you choice.
14762  git clone git://git.savannah.gnu.org/make.git
14764  [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"]
14765  set PATH=%PATH%;C:\Cygwin\bin
14766  [or Cygwin64, if that is what you have]
14767  cd path-to-make-repo-you-cloned-above
14768  build_w32.bat --without-guile
14770 should result in a WinRel/gnumake.exe.
14771 Copy it to the Cygwin /opt/lo/bin directory as make.exe
14773 Then re-run autogen.sh
14775 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
14776 Alternatively, you can install the 'new' make where ever you want and make sure that `which make` finds it.
14778 _EOS
14779 if test "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE"; then
14780     AC_MSG_ERROR([no file function found; the build will fail without it; use GNU make 4.0 or later])
14785 cat << _EOF
14786 ****************************************************************************
14788 To build, run:
14789 $GNUMAKE
14791 To view some help, run:
14792 $GNUMAKE help
14794 _EOF
14796 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
14797     cat << _EOF
14798 After the build has finished successfully, you can immediately run what you built using the command:
14799 _EOF
14801     if test $_os = Darwin; then
14802         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
14803     else
14804         echo instdir/program/soffice
14805     fi
14806     cat << _EOF
14808 If you want to run the smoketest, run:
14809 $GNUMAKE check
14811 _EOF
14814 if test -s "$WARNINGS_FILE_FOR_BUILD"; then
14815     echo "BUILD / cross-toolset config, repeated ($WARNINGS_FILE_FOR_BUILD)"
14816     cat "$WARNINGS_FILE_FOR_BUILD"
14817     echo
14820 if test -s "$WARNINGS_FILE"; then
14821     echo "HOST config ($WARNINGS_FILE)"
14822     cat "$WARNINGS_FILE"
14825 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: