Resolves: tdf#147782 restore focus to launching frame asynchronously
[LibreOffice.git] / configure.ac
blob85521710e9a47dabd92a176921eaf77db0d92610
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.6.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(macosx-provisioning-profile,
1852     AS_HELP_STRING([--with-macosx-provisioning-profile=/path/to/mac.provisionprofile],
1853         [Specify the path to a provisioning profile to use]),
1856 AC_ARG_WITH(product-name,
1857     AS_HELP_STRING([--with-product-name='My Own Office Suite'],
1858         [Define the product name. Default is AC_PACKAGE_NAME.]),
1859 ,with_product_name=$PRODUCTNAME)
1861 libo_FUZZ_ARG_ENABLE(community-flavor,
1862     AS_HELP_STRING([--disable-community-flavor],
1863         [Disable the Community branding.]),
1866 AC_ARG_WITH(package-version,
1867     AS_HELP_STRING([--with-package-version='3.1.4.5'],
1868         [Define the package version. Default is AC_PACKAGE_VERSION. Use only if you distribute an own build for macOS.]),
1871 libo_FUZZ_ARG_ENABLE(readonly-installset,
1872     AS_HELP_STRING([--enable-readonly-installset],
1873         [Prevents any attempts by LibreOffice to write into its installation. That means
1874          at least that no "system-wide" extensions can be added. Partly experimental work in
1875          progress, probably not fully implemented. Always enabled for macOS.]),
1878 libo_FUZZ_ARG_ENABLE(mariadb-sdbc,
1879     AS_HELP_STRING([--disable-mariadb-sdbc],
1880         [Disable the build of the MariaDB/MySQL-SDBC driver.])
1883 libo_FUZZ_ARG_ENABLE(postgresql-sdbc,
1884     AS_HELP_STRING([--disable-postgresql-sdbc],
1885         [Disable the build of the PostgreSQL-SDBC driver.])
1888 libo_FUZZ_ARG_ENABLE(lotuswordpro,
1889     AS_HELP_STRING([--disable-lotuswordpro],
1890         [Disable the build of the Lotus Word Pro filter.]),
1891 ,test "${enable_lotuswordpro+set}" = set || enable_lotuswordpro=yes)
1893 libo_FUZZ_ARG_ENABLE(firebird-sdbc,
1894     AS_HELP_STRING([--disable-firebird-sdbc],
1895         [Disable the build of the Firebird-SDBC driver if it doesn't compile for you.]),
1896 ,test "${enable_firebird_sdbc+set}" = set || enable_firebird_sdbc=yes)
1898 AC_ARG_ENABLE(bogus-pkg-config,
1899     AS_HELP_STRING([--enable-bogus-pkg-config],
1900         [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.]),
1903 AC_ARG_ENABLE(openssl,
1904     AS_HELP_STRING([--disable-openssl],
1905         [Disable using libssl/libcrypto from OpenSSL. If disabled,
1906          components will either use GNUTLS or NSS. Work in progress,
1907          use only if you are hacking on it.]),
1908 ,enable_openssl=yes)
1910 libo_FUZZ_ARG_ENABLE(cipher-openssl-backend,
1911     AS_HELP_STRING([--enable-cipher-openssl-backend],
1912         [Enable using OpenSSL as the actual implementation of the rtl/cipher.h functionality.
1913          Requires --enable-openssl.]))
1915 AC_ARG_ENABLE(nss,
1916     AS_HELP_STRING([--disable-nss],
1917         [Disable using NSS. If disabled,
1918          components will either use GNUTLS or openssl. Work in progress,
1919          use only if you are hacking on it.]),
1920 ,enable_nss=yes)
1922 AC_ARG_ENABLE(library-bin-tar,
1923     AS_HELP_STRING([--enable-library-bin-tar],
1924         [Enable the building and reused of tarball of binary build for some 'external' libraries.
1925         Some libraries can save their build result in a tarball
1926         stored in TARFILE_LOCATION. That binary tarball is
1927         uniquely identified by the source tarball,
1928         the content of the config_host.mk file and the content
1929         of the top-level directory in core for that library
1930         If this option is enabled, then if such a tarfile exist, it will be untarred
1931         instead of the source tarfile, and the build step will be skipped for that
1932         library.
1933         If a proper tarfile does not exist, then the normal source-based
1934         build is done for that library and a proper binary tarfile is created
1935         for the next time.]),
1938 AC_ARG_ENABLE(dconf,
1939     AS_HELP_STRING([--disable-dconf],
1940         [Disable the dconf configuration backend (enabled by default where
1941          available).]))
1943 libo_FUZZ_ARG_ENABLE(formula-logger,
1944     AS_HELP_STRING(
1945         [--enable-formula-logger],
1946         [Enable formula logger for logging formula calculation flow in Calc.]
1947     )
1950 AC_ARG_ENABLE(ldap,
1951     AS_HELP_STRING([--disable-ldap],
1952         [Disable LDAP support.]),
1953 ,enable_ldap=yes)
1955 AC_ARG_ENABLE(opencl,
1956     AS_HELP_STRING([--disable-opencl],
1957         [Disable OpenCL support.]),
1958 ,enable_opencl=yes)
1960 libo_FUZZ_ARG_ENABLE(librelogo,
1961     AS_HELP_STRING([--disable-librelogo],
1962         [Do not build LibreLogo.]),
1963 ,enable_librelogo=yes)
1965 AC_ARG_ENABLE(cmis,
1966     AS_HELP_STRING([--disable-cmis],
1967         [Disable CMIS support.]),
1968 ,enable_cmis=yes)
1970 AC_ARG_ENABLE(curl,
1971     AS_HELP_STRING([--disable-curl],
1972         [Disable CURL support.]),
1973 ,enable_curl=yes)
1975 AC_ARG_ENABLE(wasm-strip,
1976     AS_HELP_STRING([--enable-wasm-strip],
1977         [Strip the static build like for WASM/emscripten platform.]),
1978 ,enable_wasm_strip=yes)
1980 AC_ARG_ENABLE(xmlhelp,
1981     AS_HELP_STRING([--disable-xmlhelp],
1982         [Disable XML help support]),
1983 ,enable_xmlhelp=yes)
1986 dnl ===================================================================
1987 dnl Optional Packages (--with/without-)
1988 dnl ===================================================================
1990 AC_ARG_WITH(gcc-home,
1991     AS_HELP_STRING([--with-gcc-home],
1992         [Specify the location of gcc/g++ manually. This can be used in conjunction
1993          with --enable-icecream when icecream gcc/g++ wrappers are installed in a
1994          non-default path.]),
1997 AC_ARG_WITH(gnu-patch,
1998     AS_HELP_STRING([--with-gnu-patch],
1999         [Specify location of GNU patch on Solaris or FreeBSD.]),
2002 AC_ARG_WITH(build-platform-configure-options,
2003     AS_HELP_STRING([--with-build-platform-configure-options],
2004         [Specify options for the configure script run for the *build* platform in a cross-compilation]),
2007 AC_ARG_WITH(gnu-cp,
2008     AS_HELP_STRING([--with-gnu-cp],
2009         [Specify location of GNU cp on Solaris or FreeBSD.]),
2012 AC_ARG_WITH(external-tar,
2013     AS_HELP_STRING([--with-external-tar=<TARFILE_PATH>],
2014         [Specify an absolute path of where to find (and store) tarfiles.]),
2015     TARFILE_LOCATION=$withval ,
2018 AC_ARG_WITH(referenced-git,
2019     AS_HELP_STRING([--with-referenced-git=<OTHER_CHECKOUT_DIR>],
2020         [Specify another checkout directory to reference. This makes use of
2021                  git submodule update --reference, and saves a lot of diskspace
2022                  when having multiple trees side-by-side.]),
2023     GIT_REFERENCE_SRC=$withval ,
2026 AC_ARG_WITH(linked-git,
2027     AS_HELP_STRING([--with-linked-git=<submodules repo basedir>],
2028         [Specify a directory where the repositories of submodules are located.
2029          This uses a method similar to git-new-workdir to get submodules.]),
2030     GIT_LINK_SRC=$withval ,
2033 AC_ARG_WITH(galleries,
2034     AS_HELP_STRING([--with-galleries],
2035         [Specify how galleries should be built. It is possible either to
2036          build these internally from source ("build"),
2037          or to disable them ("no")]),
2040 AC_ARG_WITH(theme,
2041     AS_HELP_STRING([--with-theme="theme1 theme2..."],
2042         [Choose which themes to include. By default those themes with an '*' are included.
2043          Possible choices: *breeze, *breeze_dark, *breeze_dark_svg, *breeze_svg, *colibre, *colibre_svg, *elementary,
2044          *elementary_svg, *karasa_jaga, *karasa_jaga_svg, *sifr, *sifr_dark, *sifr_dark_svg, *sifr_svg, *sukapura, *sukapura_svg.]),
2047 libo_FUZZ_ARG_WITH(helppack-integration,
2048     AS_HELP_STRING([--without-helppack-integration],
2049         [It will not integrate the helppacks to the installer
2050          of the product. Please use this switch to use the online help
2051          or separate help packages.]),
2054 libo_FUZZ_ARG_WITH(fonts,
2055     AS_HELP_STRING([--without-fonts],
2056         [LibreOffice includes some third-party fonts to provide a reliable basis for
2057          help content, templates, samples, etc. When these fonts are already
2058          known to be available on the system then you should use this option.]),
2061 AC_ARG_WITH(epm,
2062     AS_HELP_STRING([--with-epm],
2063         [Decides which epm to use. Default is to use the one from the system if
2064          one is built. When either this is not there or you say =internal epm
2065          will be built.]),
2068 AC_ARG_WITH(package-format,
2069     AS_HELP_STRING([--with-package-format],
2070         [Specify package format(s) for LibreOffice installation sets. The
2071          implicit --without-package-format leads to no installation sets being
2072          generated. Possible values: aix, archive, bsd, deb, dmg,
2073          installed, msi, pkg, and rpm.
2074          Example: --with-package-format='deb rpm']),
2077 AC_ARG_WITH(tls,
2078     AS_HELP_STRING([--with-tls],
2079         [Decides which TLS/SSL and cryptographic implementations to use for
2080          LibreOffice's code. Notice that this doesn't apply for depending
2081          libraries like "neon", for example. Default is to use NSS
2082          although OpenSSL is also possible. Notice that selecting NSS restricts
2083          the usage of OpenSSL in LO's code but selecting OpenSSL doesn't
2084          restrict by now the usage of NSS in LO's code. Possible values:
2085          openssl, nss. Example: --with-tls="nss"]),
2088 AC_ARG_WITH(system-libs,
2089     AS_HELP_STRING([--with-system-libs],
2090         [Use libraries already on system -- enables all --with-system-* flags.]),
2093 AC_ARG_WITH(system-bzip2,
2094     AS_HELP_STRING([--with-system-bzip2],
2095         [Use bzip2 already on system. Used only when --enable-online-update=mar]),,
2096     [with_system_bzip2="$with_system_libs"])
2098 AC_ARG_WITH(system-headers,
2099     AS_HELP_STRING([--with-system-headers],
2100         [Use headers already on system -- enables all --with-system-* flags for
2101          external packages whose headers are the only entities used i.e.
2102          boost/odbc/sane-header(s).]),,
2103     [with_system_headers="$with_system_libs"])
2105 AC_ARG_WITH(system-jars,
2106     AS_HELP_STRING([--without-system-jars],
2107         [When building with --with-system-libs, also the needed jars are expected
2108          on the system. Use this to disable that]),,
2109     [with_system_jars="$with_system_libs"])
2111 AC_ARG_WITH(system-cairo,
2112     AS_HELP_STRING([--with-system-cairo],
2113         [Use cairo libraries already on system.  Happens automatically for
2114          (implicit) --enable-gtk3.]))
2116 AC_ARG_WITH(system-epoxy,
2117     AS_HELP_STRING([--with-system-epoxy],
2118         [Use epoxy libraries already on system.  Happens automatically for
2119          (implicit) --enable-gtk3.]),,
2120        [with_system_epoxy="$with_system_libs"])
2122 AC_ARG_WITH(myspell-dicts,
2123     AS_HELP_STRING([--with-myspell-dicts],
2124         [Adds myspell dictionaries to the LibreOffice installation set]),
2127 AC_ARG_WITH(system-dicts,
2128     AS_HELP_STRING([--without-system-dicts],
2129         [Do not use dictionaries from system paths.]),
2132 AC_ARG_WITH(external-dict-dir,
2133     AS_HELP_STRING([--with-external-dict-dir],
2134         [Specify external dictionary dir.]),
2137 AC_ARG_WITH(external-hyph-dir,
2138     AS_HELP_STRING([--with-external-hyph-dir],
2139         [Specify external hyphenation pattern dir.]),
2142 AC_ARG_WITH(external-thes-dir,
2143     AS_HELP_STRING([--with-external-thes-dir],
2144         [Specify external thesaurus dir.]),
2147 AC_ARG_WITH(system-zlib,
2148     AS_HELP_STRING([--with-system-zlib],
2149         [Use zlib already on system.]),,
2150     [with_system_zlib=auto])
2152 AC_ARG_WITH(system-jpeg,
2153     AS_HELP_STRING([--with-system-jpeg],
2154         [Use jpeg already on system.]),,
2155     [with_system_jpeg="$with_system_libs"])
2157 AC_ARG_WITH(system-clucene,
2158     AS_HELP_STRING([--with-system-clucene],
2159         [Use clucene already on system.]),,
2160     [with_system_clucene="$with_system_libs"])
2162 AC_ARG_WITH(system-expat,
2163     AS_HELP_STRING([--with-system-expat],
2164         [Use expat already on system.]),,
2165     [with_system_expat="$with_system_libs"])
2167 AC_ARG_WITH(system-libxml,
2168     AS_HELP_STRING([--with-system-libxml],
2169         [Use libxml/libxslt already on system.]),,
2170     [with_system_libxml=auto])
2172 AC_ARG_WITH(system-icu,
2173     AS_HELP_STRING([--with-system-icu],
2174         [Use icu already on system.]),,
2175     [with_system_icu="$with_system_libs"])
2177 AC_ARG_WITH(system-ucpp,
2178     AS_HELP_STRING([--with-system-ucpp],
2179         [Use ucpp already on system.]),,
2180     [])
2182 AC_ARG_WITH(system-openldap,
2183     AS_HELP_STRING([--with-system-openldap],
2184         [Use the OpenLDAP LDAP SDK already on system.]),,
2185     [with_system_openldap="$with_system_libs"])
2187 libo_FUZZ_ARG_ENABLE(poppler,
2188     AS_HELP_STRING([--disable-poppler],
2189         [Disable building Poppler.])
2192 AC_ARG_WITH(system-poppler,
2193     AS_HELP_STRING([--with-system-poppler],
2194         [Use system poppler (only needed for PDF import).]),,
2195     [with_system_poppler="$with_system_libs"])
2197 AC_ARG_WITH(system-abseil,
2198     AS_HELP_STRING([--with-system-abseil],
2199         [Use the abseil libraries already on system.]),,
2200     [with_system_abseil="$with_system_libs"])
2202 AC_ARG_WITH(system-openjpeg,
2203     AS_HELP_STRING([--with-system-openjpeg],
2204         [Use the OpenJPEG library already on system.]),,
2205     [with_system_openjpeg="$with_system_libs"])
2207 libo_FUZZ_ARG_ENABLE(gpgmepp,
2208     AS_HELP_STRING([--disable-gpgmepp],
2209         [Disable building gpgmepp. Do not use in normal cases unless you want to fix potential problems it causes.])
2212 AC_ARG_WITH(system-gpgmepp,
2213     AS_HELP_STRING([--with-system-gpgmepp],
2214         [Use gpgmepp already on system]),,
2215     [with_system_gpgmepp="$with_system_libs"])
2217 AC_ARG_WITH(system-mariadb,
2218     AS_HELP_STRING([--with-system-mariadb],
2219         [Use MariaDB/MySQL libraries already on system.]),,
2220     [with_system_mariadb="$with_system_libs"])
2222 AC_ARG_ENABLE(bundle-mariadb,
2223     AS_HELP_STRING([--enable-bundle-mariadb],
2224         [When using MariaDB/MySQL libraries already on system, bundle them with the MariaDB Connector/LibreOffice.])
2227 AC_ARG_WITH(system-postgresql,
2228     AS_HELP_STRING([--with-system-postgresql],
2229         [Use PostgreSQL libraries already on system, for building the PostgreSQL-SDBC
2230          driver. If pg_config is not in PATH, use PGCONFIG to point to it.]),,
2231     [with_system_postgresql="$with_system_libs"])
2233 AC_ARG_WITH(libpq-path,
2234     AS_HELP_STRING([--with-libpq-path=<absolute path to your libpq installation>],
2235         [Use this PostgreSQL C interface (libpq) installation for building
2236          the PostgreSQL-SDBC extension.]),
2239 AC_ARG_WITH(system-firebird,
2240     AS_HELP_STRING([--with-system-firebird],
2241         [Use Firebird libraries already on system, for building the Firebird-SDBC
2242          driver. If fb_config is not in PATH, use FBCONFIG to point to it.]),,
2243     [with_system_firebird="$with_system_libs"])
2245 AC_ARG_WITH(system-libtommath,
2246             AS_HELP_STRING([--with-system-libtommath],
2247                            [Use libtommath already on system]),,
2248             [with_system_libtommath="$with_system_libs"])
2250 AC_ARG_WITH(system-hsqldb,
2251     AS_HELP_STRING([--with-system-hsqldb],
2252         [Use hsqldb already on system.]))
2254 AC_ARG_WITH(hsqldb-jar,
2255     AS_HELP_STRING([--with-hsqldb-jar=JARFILE],
2256         [Specify path to jarfile manually.]),
2257     HSQLDB_JAR=$withval)
2259 libo_FUZZ_ARG_ENABLE(scripting-beanshell,
2260     AS_HELP_STRING([--disable-scripting-beanshell],
2261         [Disable support for scripts in BeanShell.]),
2265 AC_ARG_WITH(system-beanshell,
2266     AS_HELP_STRING([--with-system-beanshell],
2267         [Use beanshell already on system.]),,
2268     [with_system_beanshell="$with_system_jars"])
2270 AC_ARG_WITH(beanshell-jar,
2271     AS_HELP_STRING([--with-beanshell-jar=JARFILE],
2272         [Specify path to jarfile manually.]),
2273     BSH_JAR=$withval)
2275 libo_FUZZ_ARG_ENABLE(scripting-javascript,
2276     AS_HELP_STRING([--disable-scripting-javascript],
2277         [Disable support for scripts in JavaScript.]),
2281 AC_ARG_WITH(system-rhino,
2282     AS_HELP_STRING([--with-system-rhino],
2283         [Use rhino already on system.]),,)
2284 #    [with_system_rhino="$with_system_jars"])
2285 # Above is not used as we have different debug interface
2286 # patched into internal rhino. This code needs to be fixed
2287 # before we can enable it by default.
2289 AC_ARG_WITH(rhino-jar,
2290     AS_HELP_STRING([--with-rhino-jar=JARFILE],
2291         [Specify path to jarfile manually.]),
2292     RHINO_JAR=$withval)
2294 AC_ARG_WITH(system-jfreereport,
2295     AS_HELP_STRING([--with-system-jfreereport],
2296         [Use JFreeReport already on system.]),,
2297     [with_system_jfreereport="$with_system_jars"])
2299 AC_ARG_WITH(sac-jar,
2300     AS_HELP_STRING([--with-sac-jar=JARFILE],
2301         [Specify path to jarfile manually.]),
2302     SAC_JAR=$withval)
2304 AC_ARG_WITH(libxml-jar,
2305     AS_HELP_STRING([--with-libxml-jar=JARFILE],
2306         [Specify path to jarfile manually.]),
2307     LIBXML_JAR=$withval)
2309 AC_ARG_WITH(flute-jar,
2310     AS_HELP_STRING([--with-flute-jar=JARFILE],
2311         [Specify path to jarfile manually.]),
2312     FLUTE_JAR=$withval)
2314 AC_ARG_WITH(jfreereport-jar,
2315     AS_HELP_STRING([--with-jfreereport-jar=JARFILE],
2316         [Specify path to jarfile manually.]),
2317     JFREEREPORT_JAR=$withval)
2319 AC_ARG_WITH(liblayout-jar,
2320     AS_HELP_STRING([--with-liblayout-jar=JARFILE],
2321         [Specify path to jarfile manually.]),
2322     LIBLAYOUT_JAR=$withval)
2324 AC_ARG_WITH(libloader-jar,
2325     AS_HELP_STRING([--with-libloader-jar=JARFILE],
2326         [Specify path to jarfile manually.]),
2327     LIBLOADER_JAR=$withval)
2329 AC_ARG_WITH(libformula-jar,
2330     AS_HELP_STRING([--with-libformula-jar=JARFILE],
2331         [Specify path to jarfile manually.]),
2332     LIBFORMULA_JAR=$withval)
2334 AC_ARG_WITH(librepository-jar,
2335     AS_HELP_STRING([--with-librepository-jar=JARFILE],
2336         [Specify path to jarfile manually.]),
2337     LIBREPOSITORY_JAR=$withval)
2339 AC_ARG_WITH(libfonts-jar,
2340     AS_HELP_STRING([--with-libfonts-jar=JARFILE],
2341         [Specify path to jarfile manually.]),
2342     LIBFONTS_JAR=$withval)
2344 AC_ARG_WITH(libserializer-jar,
2345     AS_HELP_STRING([--with-libserializer-jar=JARFILE],
2346         [Specify path to jarfile manually.]),
2347     LIBSERIALIZER_JAR=$withval)
2349 AC_ARG_WITH(libbase-jar,
2350     AS_HELP_STRING([--with-libbase-jar=JARFILE],
2351         [Specify path to jarfile manually.]),
2352     LIBBASE_JAR=$withval)
2354 AC_ARG_WITH(system-odbc,
2355     AS_HELP_STRING([--with-system-odbc],
2356         [Use the odbc headers already on system.]),,
2357     [with_system_odbc="auto"])
2359 AC_ARG_WITH(system-sane,
2360     AS_HELP_STRING([--with-system-sane],
2361         [Use sane.h already on system.]),,
2362     [with_system_sane="$with_system_headers"])
2364 AC_ARG_WITH(system-bluez,
2365     AS_HELP_STRING([--with-system-bluez],
2366         [Use bluetooth.h already on system.]),,
2367     [with_system_bluez="$with_system_headers"])
2369 AC_ARG_WITH(system-curl,
2370     AS_HELP_STRING([--with-system-curl],
2371         [Use curl already on system.]),,
2372     [with_system_curl=auto])
2374 AC_ARG_WITH(system-boost,
2375     AS_HELP_STRING([--with-system-boost],
2376         [Use boost already on system.]),,
2377     [with_system_boost="$with_system_headers"])
2379 AC_ARG_WITH(system-cuckoo,
2380     AS_HELP_STRING([--with-system-cuckoo],
2381         [Use libcuckoo already on system.]),,
2382     [with_system_cuckoo="$with_system_headers"])
2384 AC_ARG_WITH(system-glm,
2385     AS_HELP_STRING([--with-system-glm],
2386         [Use glm already on system.]),,
2387     [with_system_glm="$with_system_headers"])
2389 AC_ARG_WITH(system-hunspell,
2390     AS_HELP_STRING([--with-system-hunspell],
2391         [Use libhunspell already on system.]),,
2392     [with_system_hunspell="$with_system_libs"])
2394 libo_FUZZ_ARG_ENABLE(zxing,
2395     AS_HELP_STRING([--disable-zxing],
2396        [Disable use of zxing external library.]))
2398 AC_ARG_WITH(system-zxing,
2399     AS_HELP_STRING([--with-system-zxing],
2400         [Use libzxing already on system.]),,
2401     [with_system_zxing="$with_system_libs"])
2403 AC_ARG_WITH(system-box2d,
2404     AS_HELP_STRING([--with-system-box2d],
2405         [Use box2d already on system.]),,
2406     [with_system_box2d="$with_system_libs"])
2408 AC_ARG_WITH(system-mythes,
2409     AS_HELP_STRING([--with-system-mythes],
2410         [Use mythes already on system.]),,
2411     [with_system_mythes="$with_system_libs"])
2413 AC_ARG_WITH(system-altlinuxhyph,
2414     AS_HELP_STRING([--with-system-altlinuxhyph],
2415         [Use ALTLinuxhyph already on system.]),,
2416     [with_system_altlinuxhyph="$with_system_libs"])
2418 AC_ARG_WITH(system-lpsolve,
2419     AS_HELP_STRING([--with-system-lpsolve],
2420         [Use lpsolve already on system.]),,
2421     [with_system_lpsolve="$with_system_libs"])
2423 AC_ARG_WITH(system-coinmp,
2424     AS_HELP_STRING([--with-system-coinmp],
2425         [Use CoinMP already on system.]),,
2426     [with_system_coinmp="$with_system_libs"])
2428 AC_ARG_WITH(system-liblangtag,
2429     AS_HELP_STRING([--with-system-liblangtag],
2430         [Use liblangtag library already on system.]),,
2431     [with_system_liblangtag="$with_system_libs"])
2433 AC_ARG_WITH(webdav,
2434     AS_HELP_STRING([--with-webdav],
2435         [Specify which library to use for webdav implementation.
2436          Possible values: "neon", "serf", "curl", "no". The default value is "neon".
2437          Example: --with-webdav="serf"]))
2439 AC_ARG_WITH(linker-hash-style,
2440     AS_HELP_STRING([--with-linker-hash-style],
2441         [Use linker with --hash-style=<style> when linking shared objects.
2442          Possible values: "sysv", "gnu", "both". The default value is "gnu"
2443          if supported on the build system, and "sysv" otherwise.]))
2445 AC_ARG_WITH(jdk-home,
2446     AS_HELP_STRING([--with-jdk-home=<absolute path to JDK home>],
2447         [If you have installed JDK 9 or later on your system please supply the
2448          path here. Note that this is not the location of the java command but the
2449          location of the entire distribution. In case of cross-compiling, this
2450          is the JDK of the host os. Use --with-build-platform-configure-options
2451          to point to a different build platform JDK.]),
2454 AC_ARG_WITH(help,
2455     AS_HELP_STRING([--with-help],
2456         [Enable the build of help. There is a special parameter "common" that
2457          can be used to bundle only the common part, .e.g help-specific icons.
2458          This is useful when you build the helpcontent separately.])
2459     [
2460                           Usage:     --with-help    build the old local help
2461                                  --without-help     no local help (default)
2462                                  --with-help=html   build the new HTML local help
2463                                  --with-help=online build the new HTML online help
2464     ],
2467 AC_ARG_WITH(omindex,
2468    AS_HELP_STRING([--with-omindex],
2469         [Enable the support of xapian-omega index for online help.])
2470    [
2471                          Usage: --with-omindex=server prepare the pages for omindex
2472                                 but let xapian-omega be built in server.
2473                                 --with-omindex=noxap do not prepare online pages
2474                                 for xapian-omega
2475   ],
2478 libo_FUZZ_ARG_WITH(java,
2479     AS_HELP_STRING([--with-java=<java command>],
2480         [Specify the name of the Java interpreter command. Typically "java"
2481          which is the default.
2483          To build without support for Java components, applets, accessibility
2484          or the XML filters written in Java, use --without-java or --with-java=no.]),
2485     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ],
2486     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ]
2489 AC_ARG_WITH(jvm-path,
2490     AS_HELP_STRING([--with-jvm-path=<absolute path to parent of jvm home>],
2491         [Use a specific JVM search path at runtime.
2492          e.g. use --with-jvm-path=/usr/lib/ to find JRE/JDK in /usr/lib/jvm/]),
2495 AC_ARG_WITH(ant-home,
2496     AS_HELP_STRING([--with-ant-home=<absolute path to Ant home>],
2497         [If you have installed Apache Ant on your system, please supply the path here.
2498          Note that this is not the location of the Ant binary but the location
2499          of the entire distribution.]),
2502 AC_ARG_WITH(symbol-config,
2503     AS_HELP_STRING([--with-symbol-config],
2504         [Configuration for the crashreport symbol upload]),
2505         [],
2506         [with_symbol_config=no])
2508 AC_ARG_WITH(export-validation,
2509     AS_HELP_STRING([--without-export-validation],
2510         [Disable validating OOXML and ODF files as exported from in-tree tests.]),
2511 ,with_export_validation=auto)
2513 AC_ARG_WITH(bffvalidator,
2514     AS_HELP_STRING([--with-bffvalidator=<absolute path to BFFValidator>],
2515         [Enables export validation for Microsoft Binary formats (doc, xls, ppt).
2516          Requires installed Microsoft Office Binary File Format Validator.
2517          Note: export-validation (--with-export-validation) is required to be turned on.
2518          See https://www.microsoft.com/en-us/download/details.aspx?id=26794]),
2519 ,with_bffvalidator=no)
2521 libo_FUZZ_ARG_WITH(junit,
2522     AS_HELP_STRING([--with-junit=<absolute path to JUnit 4 jar>],
2523         [Specifies the JUnit 4 jar file to use for JUnit-based tests.
2524          --without-junit disables those tests. Not relevant in the --without-java case.]),
2525 ,with_junit=yes)
2527 AC_ARG_WITH(hamcrest,
2528     AS_HELP_STRING([--with-hamcrest=<absolute path to hamcrest jar>],
2529         [Specifies the hamcrest jar file to use for JUnit-based tests.
2530          --without-junit disables those tests. Not relevant in the --without-java case.]),
2531 ,with_hamcrest=yes)
2533 AC_ARG_WITH(perl-home,
2534     AS_HELP_STRING([--with-perl-home=<abs. path to Perl 5 home>],
2535         [If you have installed Perl 5 Distribution, on your system, please
2536          supply the path here. Note that this is not the location of the Perl
2537          binary but the location of the entire distribution.]),
2540 libo_FUZZ_ARG_WITH(doxygen,
2541     AS_HELP_STRING(
2542         [--with-doxygen=<absolute path to doxygen executable>],
2543         [Specifies the doxygen executable to use when generating ODK C/C++
2544          documentation. --without-doxygen disables generation of ODK C/C++
2545          documentation. Not relevant in the --disable-odk case.]),
2546 ,with_doxygen=yes)
2548 AC_ARG_WITH(visual-studio,
2549     AS_HELP_STRING([--with-visual-studio=<2019/2022>],
2550         [Specify which Visual Studio version to use in case several are
2551          installed. Currently 2019 (default) and 2022 are supported.]),
2554 AC_ARG_WITH(windows-sdk,
2555     AS_HELP_STRING([--with-windows-sdk=<8.0(A)/8.1(A)/10.0>],
2556         [Specify which Windows SDK, or "Windows Kit", version to use
2557          in case the one that came with the selected Visual Studio
2558          is not what you want for some reason. Note that not all compiler/SDK
2559          combinations are supported. The intent is that this option should not
2560          be needed.]),
2563 AC_ARG_WITH(lang,
2564     AS_HELP_STRING([--with-lang="es sw tu cs sk"],
2565         [Use this option to build LibreOffice with additional UI language support.
2566          English (US) is always included by default.
2567          Separate multiple languages with space.
2568          For all languages, use --with-lang=ALL.]),
2571 AC_ARG_WITH(locales,
2572     AS_HELP_STRING([--with-locales="en es pt fr zh kr ja"],
2573         [Use this option to limit the locale information built in.
2574          Separate multiple locales with space.
2575          Very experimental and might well break stuff.
2576          Just a desperate measure to shrink code and data size.
2577          By default all the locales available is included.
2578          This option is completely unrelated to --with-lang.])
2579     [
2580                           Affects also our character encoding conversion
2581                           tables for encodings mainly targeted for a
2582                           particular locale, like EUC-CN and EUC-TW for
2583                           zh, ISO-2022-JP for ja.
2585                           Affects also our add-on break iterator data for
2586                           some languages.
2588                           For the default, all locales, don't use this switch at all.
2589                           Specifying just the language part of a locale means all matching
2590                           locales will be included.
2591     ],
2594 # Kerberos and GSSAPI used only by PostgreSQL as of LibO 3.5
2595 libo_FUZZ_ARG_WITH(krb5,
2596     AS_HELP_STRING([--with-krb5],
2597         [Enable MIT Kerberos 5 support in modules that support it.
2598          By default automatically enabled on platforms
2599          where a good system Kerberos 5 is available.]),
2602 libo_FUZZ_ARG_WITH(gssapi,
2603     AS_HELP_STRING([--with-gssapi],
2604         [Enable GSSAPI support in modules that support it.
2605          By default automatically enabled on platforms
2606          where a good system GSSAPI is available.]),
2609 AC_ARG_WITH(iwyu,
2610     AS_HELP_STRING([--with-iwyu],
2611         [Use given IWYU binary path to check unneeded includes instead of building.
2612          Use only if you are hacking on it.]),
2615 libo_FUZZ_ARG_WITH(lxml,
2616     AS_HELP_STRING([--without-lxml],
2617         [gla11y will use python lxml when available, potentially building a local copy if necessary.
2618          --without-lxml tells it to not use python lxml at all, which means that gla11y will only
2619          report widget classes and ids.]),
2622 libo_FUZZ_ARG_WITH(latest-c++,
2623     AS_HELP_STRING([--with-latest-c++],
2624         [Try to enable the latest features of the C++ compiler, even if they are not yet part of a
2625          published standard.]),,
2626         [with_latest_c__=no])
2628 dnl ===================================================================
2629 dnl Branding
2630 dnl ===================================================================
2632 AC_ARG_WITH(branding,
2633     AS_HELP_STRING([--with-branding=/path/to/images],
2634         [Use given path to retrieve branding images set.])
2635     [
2636                           Search for intro.png about.svg and logo.svg.
2637                           If any is missing, default ones will be used instead.
2639                           Search also progress.conf for progress
2640                           settings on intro screen :
2642                           PROGRESSBARCOLOR="255,255,255" Set color of
2643                           progress bar. Comma separated RGB decimal values.
2644                           PROGRESSSIZE="407,6" Set size of progress bar.
2645                           Comma separated decimal values (width, height).
2646                           PROGRESSPOSITION="61,317" Set position of progress
2647                           bar from left,top. Comma separated decimal values.
2648                           PROGRESSFRAMECOLOR="20,136,3" Set color of progress
2649                           bar frame. Comma separated RGB decimal values.
2650                           PROGRESSTEXTCOLOR="0,0,0" Set color of progress
2651                           bar text. Comma separated RGB decimal values.
2652                           PROGRESSTEXTBASELINE="287" Set vertical position of
2653                           progress bar text from top. Decimal value.
2655                           Default values will be used if not found.
2656     ],
2660 AC_ARG_WITH(extra-buildid,
2661     AS_HELP_STRING([--with-extra-buildid="Tinderbox: Win-x86@6, Branch:master, Date:2012-11-26_00.29.34"],
2662         [Show addition build identification in about dialog.]),
2666 AC_ARG_WITH(vendor,
2667     AS_HELP_STRING([--with-vendor="John the Builder"],
2668         [Set vendor of the build.]),
2671 AC_ARG_WITH(privacy-policy-url,
2672     AS_HELP_STRING([--with-privacy-policy-url="https://yourdomain/privacy-policy"],
2673         [The URL to your privacy policy (needed when
2674          enabling online-update or crashreporting via breakpad)]),
2675         [if test "x$with_privacy_policy_url" = "xyes"; then
2676             AC_MSG_FAILURE([you need to specify an argument when using --with-privacy-policy-url])
2677          elif test "x$with_privacy_policy_url" = "xno"; then
2678             with_privacy_policy_url="undefined"
2679          fi]
2680 ,[with_privacy_policy_url="undefined"])
2682 AC_ARG_WITH(android-package-name,
2683     AS_HELP_STRING([--with-android-package-name="org.libreoffice"],
2684         [Set Android package name of the build.]),
2687 AC_ARG_WITH(compat-oowrappers,
2688     AS_HELP_STRING([--with-compat-oowrappers],
2689         [Install oo* wrappers in parallel with
2690          lo* ones to keep backward compatibility.
2691          Has effect only with make distro-pack-install]),
2694 AC_ARG_WITH(os-version,
2695     AS_HELP_STRING([--with-os-version=<OSVERSION>],
2696         [For FreeBSD users, use this option to override the detected OSVERSION.]),
2699 AC_ARG_WITH(idlc-cpp,
2700     AS_HELP_STRING([--with-idlc-cpp=<cpp/ucpp>],
2701         [Specify the C Preprocessor to use for idlc. Default is ucpp.]),
2704 AC_ARG_WITH(parallelism,
2705     AS_HELP_STRING([--with-parallelism],
2706         [Number of jobs to run simultaneously during build. Parallel builds can
2707         save a lot of time on multi-cpu machines. Defaults to the number of
2708         CPUs on the machine, unless you configure --enable-icecream - then to
2709         40.]),
2712 AC_ARG_WITH(all-tarballs,
2713     AS_HELP_STRING([--with-all-tarballs],
2714         [Download all external tarballs unconditionally]))
2716 AC_ARG_WITH(gdrive-client-id,
2717     AS_HELP_STRING([--with-gdrive-client-id],
2718         [Provides the client id of the application for OAuth2 authentication
2719         on Google Drive. If either this or --with-gdrive-client-secret is
2720         empty, the feature will be disabled]),
2723 AC_ARG_WITH(gdrive-client-secret,
2724     AS_HELP_STRING([--with-gdrive-client-secret],
2725         [Provides the client secret of the application for OAuth2
2726         authentication on Google Drive. If either this or
2727         --with-gdrive-client-id is empty, the feature will be disabled]),
2730 AC_ARG_WITH(alfresco-cloud-client-id,
2731     AS_HELP_STRING([--with-alfresco-cloud-client-id],
2732         [Provides the client id of the application for OAuth2 authentication
2733         on Alfresco Cloud. If either this or --with-alfresco-cloud-client-secret is
2734         empty, the feature will be disabled]),
2737 AC_ARG_WITH(alfresco-cloud-client-secret,
2738     AS_HELP_STRING([--with-alfresco-cloud-client-secret],
2739         [Provides the client secret of the application for OAuth2
2740         authentication on Alfresco Cloud. If either this or
2741         --with-alfresco-cloud-client-id is empty, the feature will be disabled]),
2744 AC_ARG_WITH(onedrive-client-id,
2745     AS_HELP_STRING([--with-onedrive-client-id],
2746         [Provides the client id of the application for OAuth2 authentication
2747         on OneDrive. If either this or --with-onedrive-client-secret is
2748         empty, the feature will be disabled]),
2751 AC_ARG_WITH(onedrive-client-secret,
2752     AS_HELP_STRING([--with-onedrive-client-secret],
2753         [Provides the client secret of the application for OAuth2
2754         authentication on OneDrive. If either this or
2755         --with-onedrive-client-id is empty, the feature will be disabled]),
2757 dnl ===================================================================
2758 dnl Do we want to use pre-build binary tarball for recompile
2759 dnl ===================================================================
2761 if test "$enable_library_bin_tar" = "yes" ; then
2762     USE_LIBRARY_BIN_TAR=TRUE
2763 else
2764     USE_LIBRARY_BIN_TAR=
2766 AC_SUBST(USE_LIBRARY_BIN_TAR)
2768 dnl ===================================================================
2769 dnl Test whether build target is Release Build
2770 dnl ===================================================================
2771 AC_MSG_CHECKING([whether build target is Release Build])
2772 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
2773     AC_MSG_RESULT([no])
2774     ENABLE_RELEASE_BUILD=
2775     GET_TASK_ALLOW_ENTITLEMENT='
2776         <!-- We want to be able to debug a hardened process when not building for release -->
2777         <key>com.apple.security.get-task-allow</key>
2778         <true/>'
2779 else
2780     AC_MSG_RESULT([yes])
2781     ENABLE_RELEASE_BUILD=TRUE
2782     GET_TASK_ALLOW_ENTITLEMENT=''
2784 AC_SUBST(ENABLE_RELEASE_BUILD)
2785 AC_SUBST(GET_TASK_ALLOW_ENTITLEMENT)
2787 AC_MSG_CHECKING([whether to build a Community flavor])
2788 if test -z "$enable_community_flavor" -o "$enable_community_flavor" = "yes"; then
2789     AC_DEFINE(HAVE_FEATURE_COMMUNITY_FLAVOR)
2790     AC_MSG_RESULT([yes])
2791 else
2792     AC_MSG_RESULT([no])
2795 dnl ===================================================================
2796 dnl Test whether to sign Windows Build
2797 dnl ===================================================================
2798 AC_MSG_CHECKING([whether to sign windows build])
2799 if test "$enable_windows_build_signing" = "yes" -a "$_os" = "WINNT"; then
2800     AC_MSG_RESULT([yes])
2801     WINDOWS_BUILD_SIGNING="TRUE"
2802 else
2803     AC_MSG_RESULT([no])
2804     WINDOWS_BUILD_SIGNING="FALSE"
2806 AC_SUBST(WINDOWS_BUILD_SIGNING)
2808 dnl ===================================================================
2809 dnl MacOSX build and runtime environment options
2810 dnl ===================================================================
2812 AC_ARG_WITH(macosx-version-min-required,
2813     AS_HELP_STRING([--with-macosx-version-min-required=<version>],
2814         [set the minimum OS version needed to run the built LibreOffice])
2815     [
2816                           e. g.: --with-macosx-version-min-required=10.12
2817     ],
2820 AC_ARG_WITH(macosx-version-max-allowed,
2821     AS_HELP_STRING([--with-macosx-version-max-allowed=<version>],
2822         [set the maximum allowed OS version the LibreOffice compilation can use APIs from])
2823     [
2824                           e. g.: --with-macosx-version-max-allowed=11.0
2825     ],
2829 dnl ===================================================================
2830 dnl options for stuff used during cross-compilation build
2831 dnl Not quite superseded by --with-build-platform-configure-options.
2832 dnl TODO: check, if the "force" option is still needed anywhere.
2833 dnl ===================================================================
2835 AC_ARG_WITH(system-icu-for-build,
2836     AS_HELP_STRING([--with-system-icu-for-build=yes/no/force],
2837         [Use icu already on system for build tools (cross-compilation only).]))
2840 dnl ===================================================================
2841 dnl Check for incompatible options set by fuzzing, and reset those
2842 dnl automatically to working combinations
2843 dnl ===================================================================
2845 if test "$libo_fuzzed_enable_dbus" = yes -a "$libo_fuzzed_enable_avahi" -a \
2846         "$enable_dbus" != "$enable_avahi"; then
2847     AC_MSG_NOTICE([Resetting --enable-avahi=$enable_dbus])
2848     enable_avahi=$enable_dbus
2851 add_lopath_after ()
2853     if ! echo "$LO_PATH" | $EGREP -q "(^|${P_SEP})$1($|${P_SEP})"; then
2854         LO_PATH="${LO_PATH:+$LO_PATH$P_SEP}$1"
2855     fi
2858 add_lopath_before ()
2860     local IFS=${P_SEP}
2861     local path_cleanup
2862     local dir
2863     for dir in $LO_PATH ; do
2864         if test "$dir" != "$1" ; then
2865             path_cleanup=${path_cleanup:+$path_cleanup$P_SEP}$dir
2866         fi
2867     done
2868     LO_PATH="$1${path_cleanup:+$P_SEP$path_cleanup}"
2871 dnl ===================================================================
2872 dnl check for required programs (grep, awk, sed, bash)
2873 dnl ===================================================================
2875 pathmunge ()
2877     local new_path
2878     if test -n "$1"; then
2879         if test "$build_os" = "cygwin"; then
2880             if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
2881                 PathFormat "$1"
2882                 new_path=`cygpath -sm "$formatted_path"`
2883             else
2884                 PathFormat "$1"
2885                 new_path=`cygpath -u "$formatted_path"`
2886             fi
2887         else
2888             new_path="$1"
2889         fi
2890         if test "$2" = "after"; then
2891             add_lopath_after "$new_path"
2892         else
2893             add_lopath_before "$new_path"
2894         fi
2895     fi
2898 AC_PROG_AWK
2899 AC_PATH_PROG( AWK, $AWK)
2900 if test -z "$AWK"; then
2901     AC_MSG_ERROR([install awk to run this script])
2904 AC_PATH_PROG(BASH, bash)
2905 if test -z "$BASH"; then
2906     AC_MSG_ERROR([bash not found in \$PATH])
2908 AC_SUBST(BASH)
2910 AC_MSG_CHECKING([for GNU or BSD tar])
2911 for a in $GNUTAR gtar gnutar bsdtar tar /usr/sfw/bin/gtar; do
2912     $a --version 2> /dev/null | egrep "GNU|bsdtar"  2>&1 > /dev/null
2913     if test $? -eq 0;  then
2914         GNUTAR=$a
2915         break
2916     fi
2917 done
2918 AC_MSG_RESULT($GNUTAR)
2919 if test -z "$GNUTAR"; then
2920     AC_MSG_ERROR([not found. install GNU or BSD tar.])
2922 AC_SUBST(GNUTAR)
2924 AC_MSG_CHECKING([for tar's option to strip components])
2925 $GNUTAR --help 2> /dev/null | egrep "bsdtar|strip-components" 2>&1 >/dev/null
2926 if test $? -eq 0; then
2927     STRIP_COMPONENTS="--strip-components"
2928 else
2929     $GNUTAR --help 2> /dev/null | egrep "strip-path" 2>&1 >/dev/null
2930     if test $? -eq 0; then
2931         STRIP_COMPONENTS="--strip-path"
2932     else
2933         STRIP_COMPONENTS="unsupported"
2934     fi
2936 AC_MSG_RESULT($STRIP_COMPONENTS)
2937 if test x$STRIP_COMPONENTS = xunsupported; then
2938     AC_MSG_ERROR([you need a tar that is able to strip components.])
2940 AC_SUBST(STRIP_COMPONENTS)
2942 dnl It is useful to have a BUILD_TYPE keyword to distinguish "normal"
2943 dnl desktop OSes from "mobile" ones.
2945 dnl We assume that a non-DESKTOP build type is also a non-NATIVE one.
2946 dnl In other words, that when building for an OS that is not a
2947 dnl "desktop" one but a "mobile" one, we are always cross-compiling.
2949 dnl Note the direction of the implication; there is no assumption that
2950 dnl cross-compiling would imply a non-desktop OS.
2952 if test $_os != iOS -a $_os != Android -a $_os != Emscripten -a "$enable_fuzzers" != "yes"; then
2953     BUILD_TYPE="$BUILD_TYPE DESKTOP"
2954     AC_DEFINE(HAVE_FEATURE_DESKTOP)
2955     AC_DEFINE(HAVE_FEATURE_MULTIUSER_ENVIRONMENT)
2958 # Whether to build "avmedia" functionality or not.
2960 if test -z "$enable_avmedia"; then
2961     enable_avmedia=yes
2964 BUILD_TYPE="$BUILD_TYPE AVMEDIA"
2965 if test "$enable_avmedia" = yes; then
2966     AC_DEFINE(HAVE_FEATURE_AVMEDIA)
2967 else
2968     USE_AVMEDIA_DUMMY='TRUE'
2970 AC_SUBST(USE_AVMEDIA_DUMMY)
2972 # Decide whether to build database connectivity stuff (including Base) or not.
2973 if test "$enable_database_connectivity" != no; then
2974     BUILD_TYPE="$BUILD_TYPE DBCONNECTIVITY"
2975     AC_DEFINE(HAVE_FEATURE_DBCONNECTIVITY)
2976 else
2977     if test "$_os" = iOS; then
2978         AC_MSG_ERROR([Presumly can't disable DB connectivity on iOS.])
2979     fi
2980     disable_database_connectivity_dependencies
2983 if test -z "$enable_extensions"; then
2984     # For iOS and Android Viewer, disable extensions unless specifically overridden with --enable-extensions.
2985     if test $_os != iOS && test $_os != Android -o "$ENABLE_ANDROID_LOK" = TRUE ; then
2986         enable_extensions=yes
2987     fi
2990 if test "$enable_extensions" = yes; then
2991     BUILD_TYPE="$BUILD_TYPE EXTENSIONS"
2992     AC_DEFINE(HAVE_FEATURE_EXTENSIONS)
2993 else
2994     enable_extension_integration=no
2995     enable_extension_update=no
2998 if test -z "$enable_scripting"; then
2999     # Disable scripting for iOS unless specifically overridden
3000     # with --enable-scripting.
3001     if test $_os != iOS -o $_os = Emscripten; then
3002         enable_scripting=yes
3003     fi
3006 DISABLE_SCRIPTING=''
3007 if test "$enable_scripting" = yes; then
3008     BUILD_TYPE="$BUILD_TYPE SCRIPTING"
3009     AC_DEFINE(HAVE_FEATURE_SCRIPTING)
3010 else
3011     DISABLE_SCRIPTING='TRUE'
3012     SCPDEFS="$SCPDEFS -DDISABLE_SCRIPTING"
3015 if test $_os = iOS -o $_os = Android -o $_os = Emscripten; then
3016     # Disable dynamic_loading always for iOS and Android
3017     enable_dynamic_loading=no
3018 elif test -z "$enable_dynamic_loading"; then
3019     # Otherwise enable it unless specifically disabled
3020     enable_dynamic_loading=yes
3023 DISABLE_DYNLOADING=''
3024 if test "$enable_dynamic_loading" = yes; then
3025     BUILD_TYPE="$BUILD_TYPE DYNLOADING"
3026 else
3027     DISABLE_DYNLOADING='TRUE'
3029 AC_SUBST(DISABLE_DYNLOADING)
3031 # remember SYSBASE value
3032 AC_SUBST(SYSBASE)
3034 dnl ===================================================================
3035 dnl  Sort out various gallery compilation options
3036 dnl ===================================================================
3037 WITH_GALLERY_BUILD=TRUE
3038 AC_MSG_CHECKING([how to build and package galleries])
3039 if test -n "${with_galleries}"; then
3040     if test "$with_galleries" = "build"; then
3041         if test "$enable_database_connectivity" = no; then
3042             AC_MSG_ERROR([DB connectivity is needed for gengal / svx])
3043         fi
3044         AC_MSG_RESULT([build from source images internally])
3045     elif test "$with_galleries" = "no"; then
3046         WITH_GALLERY_BUILD=
3047         AC_MSG_RESULT([disable non-internal gallery build])
3048     else
3049         AC_MSG_ERROR([unknown value --with-galleries=$with_galleries])
3050     fi
3051 else
3052     if test $_os != iOS -a $_os != Android; then
3053         AC_MSG_RESULT([internal src images for desktop])
3054     else
3055         WITH_GALLERY_BUILD=
3056         AC_MSG_RESULT([disable src image build])
3057     fi
3059 AC_SUBST(WITH_GALLERY_BUILD)
3061 dnl ===================================================================
3062 dnl  Checks if ccache is available
3063 dnl ===================================================================
3064 CCACHE_DEPEND_MODE=
3065 if test "$enable_ccache" = "no"; then
3066     CCACHE=""
3067 elif test -n "$enable_ccache" -o \( "$enable_ccache" = "" -a "$enable_icecream" != "yes" \); then
3068     case "%$CC%$CXX%" in
3069     # If $CC and/or $CXX already contain "ccache" (possibly suffixed with some version number etc),
3070     # assume that's good then
3071     *%ccache[[-_' ']]*|*/ccache[[-_' ']]*)
3072         AC_MSG_NOTICE([ccache seems to be included in a pre-defined CC and/or CXX])
3073         CCACHE_DEPEND_MODE=1
3074         ;;
3075     *)
3076         # try to use our own ccache if it is available and CCACHE was not already defined
3077         if test -z "$CCACHE"; then
3078             if test "$_os" = "WINNT"; then
3079                 ccache_ext=.exe # e.g. openssl build needs ccache.exe, not just ccache
3080             fi
3081             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/ccache$ccache_ext" ; then
3082                 CCACHE="$LODE_HOME/opt/bin/ccache$ccache_ext"
3083             elif test -x "/opt/lo/bin/ccache$ccache_ext"; then
3084                 CCACHE="/opt/lo/bin/ccache$ccache_ext"
3085             fi
3086         fi
3087         AC_PATH_PROG([CCACHE],[ccache],[not found])
3088         if test "$CCACHE" != "not found" -a "$_os" = "WINNT"; then
3089             CCACHE=`win_short_path_for_make "$CCACHE"`
3090             # check that it has MSVC support (it should recognize it in CCACHE_COMPILERTYPE)
3091             rm -f conftest.txt
3092             AC_MSG_CHECKING([whether $CCACHE has MSVC support])
3093             CCACHE_COMPILERTYPE=cl CCACHE_LOGFILE=conftest.txt $CCACHE echo >/dev/null 2>/dev/null
3094             if grep -q 'Config: (environment) compiler_type = cl' conftest.txt; then
3095                 AC_MSG_RESULT(yes)
3096             else
3097                 AC_MSG_RESULT(no)
3098                 CCACHE="not found"
3099             fi
3100             rm -f conftest.txt
3101         fi
3102         if test "$CCACHE" = "not found" -a "$_os" = "WINNT"; then
3103             # on windows/VC perhaps sccache is around?
3104             case "%$CC%$CXX%" in
3105             # If $CC and/or $CXX already contain "sccache" (possibly suffixed with some version number etc),
3106             # assume that's good then
3107             *%sccache[[-_' ']]*|*/sccache[[-_' ']]*)
3108                 AC_MSG_NOTICE([sccache seems to be included in a pre-defined CC and/or CXX])
3109                 CCACHE_DEPEND_MODE=1
3110                 SCCACHE=1
3111                 ;;
3112             *)
3113                 # for sharing code below, reuse CCACHE env var
3114                 AC_PATH_PROG([CCACHE],[sccache],[not found])
3115                 if test "$CCACHE" != "not found"; then
3116                     CCACHE=`win_short_path_for_make "$CCACHE"`
3117                     SCCACHE=1
3118                     CCACHE_DEPEND_MODE=1
3119                 fi
3120                 ;;
3121             esac
3122         fi
3123         if test "$CCACHE" = "not found"; then
3124             CCACHE=""
3125         fi
3126         if test -n "$CCACHE" -a -z "$SCCACHE"; then
3127             CCACHE_DEPEND_MODE=1
3128             # Need to check for ccache version: otherwise prevents
3129             # caching of the results (like "-x objective-c++" for Mac)
3130             if test $_os = Darwin -o $_os = iOS; then
3131                 # Check ccache version
3132                 AC_MSG_CHECKING([whether version of ccache is suitable])
3133                 CCACHE_VERSION=`"$CCACHE" -V | "$AWK" '/^ccache version/{print $3}'`
3134                 CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
3135                 if test "$CCACHE_VERSION" = "2.4_OOo" -o "$CCACHE_NUMVER" -ge "030100"; then
3136                     AC_MSG_RESULT([yes, $CCACHE_VERSION])
3137                 else
3138                     AC_MSG_RESULT([no, $CCACHE_VERSION])
3139                     CCACHE=""
3140                     CCACHE_DEPEND_MODE=
3141                 fi
3142             fi
3143         fi
3144         ;;
3145     esac
3146 else
3147     CCACHE=""
3149 if test "$enable_ccache" = "nodepend"; then
3150     CCACHE_DEPEND_MODE=""
3152 AC_SUBST(CCACHE_DEPEND_MODE)
3154 # sccache defaults are good enough
3155 if test "$CCACHE" != "" -a -z "$SCCACHE"; then
3156     # e.g. (/home/rene/.config/ccache/ccache.conf) max_size = 20.0G
3157     # -p works with both 4.2 and 4.4
3158     ccache_size_msg=$([ccache -p | $AWK /max_size/'{ print $4 }' | sed -e 's/\.[0-9]*//'])
3159     ccache_size=$(echo "$ccache_size_msg" | grep "G" | sed -e 's/G.*$//')
3160     if test "$ccache_size" = ""; then
3161         ccache_size=$(echo "$ccache_size_msg" | grep "M" | sed -e 's/\ M.*$//')
3162         if test "$ccache_size" = ""; then
3163             ccache_size=0
3164         fi
3165         # we could not determine the size or it was less than 1GB -> disable auto-ccache
3166         if test $ccache_size -lt 1024; then
3167             CCACHE=""
3168             AC_MSG_WARN([ccache's cache size is less than 1GB using it is counter-productive: Disabling auto-ccache detection])
3169             add_warning "ccache's cache size is less than 1GB using it is counter-productive: auto-ccache detection disabled"
3170         else
3171             # warn that ccache may be too small for debug build
3172             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3173             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3174         fi
3175     else
3176         if test $ccache_size -lt 5; then
3177             #warn that ccache may be too small for debug build
3178             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3179             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3180         fi
3181     fi
3184 ENABLE_Z7_DEBUG=
3185 if test "$enable_z7_debug" != no; then
3186     if test "$enable_z7_debug" = yes -o -n "$CCACHE"; then
3187         ENABLE_Z7_DEBUG=TRUE
3188     fi
3189 else
3190     AC_MSG_WARN([ccache will not work with --disable-z7-debug])
3191     add_warning "ccache will not work with --disable-z7-debug"
3193 AC_SUBST(ENABLE_Z7_DEBUG)
3195 dnl ===================================================================
3196 dnl  Checks for C compiler,
3197 dnl  The check for the C++ compiler is later on.
3198 dnl ===================================================================
3199 if test "$_os" != "WINNT"; then
3200     GCC_HOME_SET="true"
3201     AC_MSG_CHECKING([gcc home])
3202     if test -z "$with_gcc_home"; then
3203         if test "$enable_icecream" = "yes"; then
3204             if test -d "/usr/lib/icecc/bin"; then
3205                 GCC_HOME="/usr/lib/icecc/"
3206             elif test -d "/usr/libexec/icecc/bin"; then
3207                 GCC_HOME="/usr/libexec/icecc/"
3208             elif test -d "/opt/icecream/bin"; then
3209                 GCC_HOME="/opt/icecream/"
3210             else
3211                 AC_MSG_ERROR([Could not figure out the location of icecream GCC wrappers, manually use --with-gcc-home])
3213             fi
3214         else
3215             GCC_HOME=`which gcc | $SED -e s,/bin/gcc,,`
3216             GCC_HOME_SET="false"
3217         fi
3218     else
3219         GCC_HOME="$with_gcc_home"
3220     fi
3221     AC_MSG_RESULT($GCC_HOME)
3222     AC_SUBST(GCC_HOME)
3224     if test "$GCC_HOME_SET" = "true"; then
3225         if test -z "$CC"; then
3226             CC="$GCC_HOME/bin/gcc"
3227             CC_BASE="gcc"
3228         fi
3229         if test -z "$CXX"; then
3230             CXX="$GCC_HOME/bin/g++"
3231             CXX_BASE="g++"
3232         fi
3233     fi
3236 COMPATH=`dirname "$CC"`
3237 if test "$COMPATH" = "."; then
3238     AC_PATH_PROGS(COMPATH, $CC)
3239     dnl double square bracket to get single because of M4 quote...
3240     COMPATH=`echo $COMPATH | $SED "s@/[[^/:]]*\\\$@@"`
3242 COMPATH=`echo $COMPATH | $SED "s@/[[Bb]][[Ii]][[Nn]]\\\$@@"`
3244 dnl ===================================================================
3245 dnl Java support
3246 dnl ===================================================================
3247 AC_MSG_CHECKING([whether to build with Java support])
3248 if test "$with_java" != "no"; then
3249     if test "$DISABLE_SCRIPTING" = TRUE; then
3250         AC_MSG_RESULT([no, overridden by --disable-scripting])
3251         ENABLE_JAVA=""
3252         with_java=no
3253     else
3254         AC_MSG_RESULT([yes])
3255         ENABLE_JAVA="TRUE"
3256         AC_DEFINE(HAVE_FEATURE_JAVA)
3257     fi
3258 else
3259     AC_MSG_RESULT([no])
3260     ENABLE_JAVA=""
3263 AC_SUBST(ENABLE_JAVA)
3265 dnl ENABLE_JAVA="TRUE" if we want there to be *run-time* (and build-time) support for Java
3267 dnl ENABLE_JAVA="" indicate no Java support at all
3269 dnl ===================================================================
3270 dnl Check macOS SDK and compiler
3271 dnl ===================================================================
3273 if test $_os = Darwin; then
3275     # The SDK in the currently selected Xcode should be found.
3277     AC_MSG_CHECKING([what macOS SDK to use])
3278     for macosx_sdk in 12.3 12.1 12.0 11.3 11.1 11.0 10.15 10.14 10.13; do
3279         MACOSX_SDK_PATH=`xcrun --sdk macosx${macosx_sdk} --show-sdk-path 2> /dev/null`
3280         if test -d "$MACOSX_SDK_PATH"; then
3281             break
3282         else
3283             MACOSX_SDK_PATH="`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${macosx_sdk}.sdk"
3284             if test -d "$MACOSX_SDK_PATH"; then
3285                 break
3286             fi
3287         fi
3288     done
3289     if test ! -d "$MACOSX_SDK_PATH"; then
3290         AC_MSG_ERROR([Could not find an appropriate macOS SDK])
3291     fi
3293     AC_MSG_RESULT([macOS SDK $macosx_sdk at $MACOSX_SDK_PATH])
3295     case $macosx_sdk in
3296     10.13)
3297         MACOSX_SDK_VERSION=101300
3298         ;;
3299     10.14)
3300         MACOSX_SDK_VERSION=101400
3301         ;;
3302     10.15)
3303         MACOSX_SDK_VERSION=101500
3304         ;;
3305     11.0)
3306         MACOSX_SDK_VERSION=110000
3307         ;;
3308     11.1)
3309         MACOSX_SDK_VERSION=110100
3310         ;;
3311     11.3)
3312         MACOSX_SDK_VERSION=110300
3313         ;;
3314     12.0)
3315         MACOSX_SDK_VERSION=120000
3316         ;;
3317     12.1)
3318         MACOSX_SDK_VERSION=120100
3319         ;;
3320     12.3)
3321         MACOSX_SDK_VERSION=120300
3322         ;;
3323     *)
3324         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported])
3325         ;;
3326     esac
3328     if test "$host_cpu" = arm64 -a $MACOSX_SDK_VERSION -lt 110000; then
3329         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported for Apple Silicon])
3330     fi
3332     if test "$with_macosx_version_min_required" = "" ; then
3333         if test "$host_cpu" = x86_64; then
3334             with_macosx_version_min_required="10.12";
3335         else
3336             with_macosx_version_min_required="11.0";
3337         fi
3338     fi
3340     if test "$with_macosx_version_max_allowed" = "" ; then
3341         with_macosx_version_max_allowed="$macosx_sdk"
3342     fi
3344     # export this so that "xcrun" invocations later return matching values
3345     DEVELOPER_DIR="${MACOSX_SDK_PATH%/SDKs*}"
3346     DEVELOPER_DIR="${DEVELOPER_DIR%/Platforms*}"
3347     export DEVELOPER_DIR
3348     FRAMEWORKSHOME="$MACOSX_SDK_PATH/System/Library/Frameworks"
3349     MACOSX_DEPLOYMENT_TARGET="$with_macosx_version_min_required"
3351     AC_MSG_CHECKING([whether Xcode is new enough])
3352     my_xcode_ver1=$(xcrun xcodebuild -version | head -n 1)
3353     my_xcode_ver2=${my_xcode_ver1#Xcode }
3354     my_xcode_ver3=$(printf %s "$my_xcode_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
3355     if test "$my_xcode_ver3" -ge 1103; then
3356         AC_MSG_RESULT([yes ($my_xcode_ver2)])
3357     else
3358         AC_MSG_ERROR(["$my_xcode_ver1" is too old or unrecognized, must be at least Xcode 11.3])
3359     fi
3361     case "$with_macosx_version_min_required" in
3362     10.12)
3363         MAC_OS_X_VERSION_MIN_REQUIRED="101200"
3364         ;;
3365     10.13)
3366         MAC_OS_X_VERSION_MIN_REQUIRED="101300"
3367         ;;
3368     10.14)
3369         MAC_OS_X_VERSION_MIN_REQUIRED="101400"
3370         ;;
3371     10.15)
3372         MAC_OS_X_VERSION_MIN_REQUIRED="101500"
3373         ;;
3374     10.16)
3375         MAC_OS_X_VERSION_MIN_REQUIRED="101600"
3376         ;;
3377     11.0)
3378         MAC_OS_X_VERSION_MIN_REQUIRED="110000"
3379         ;;
3380     11.1)
3381         MAC_OS_X_VERSION_MIN_REQUIRED="110100"
3382         ;;
3383     11.3)
3384         MAC_OS_X_VERSION_MIN_REQUIRED="110300"
3385         ;;
3386     12.0)
3387         MAC_OS_X_VERSION_MIN_REQUIRED="120000"
3388         ;;
3389     12.1)
3390         MAC_OS_X_VERSION_MIN_REQUIRED="120100"
3391         ;;
3392     12.3)
3393         MAC_OS_X_VERSION_MIN_REQUIRED="120300"
3394         ;;
3395     *)
3396         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])
3397         ;;
3398     esac
3400     LIBTOOL=/usr/bin/libtool
3401     INSTALL_NAME_TOOL=install_name_tool
3402     if test -z "$save_CC"; then
3403         stdlib=-stdlib=libc++
3405         AC_MSG_CHECKING([what C compiler to use])
3406         CC="`xcrun -find clang`"
3407         CC_BASE=`first_arg_basename "$CC"`
3408         if test "$host_cpu" = x86_64; then
3409             CC+=" -target x86_64-apple-macos"
3410         else
3411             CC+=" -target arm64-apple-macos"
3412         fi
3413         CC+=" -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3414         AC_MSG_RESULT([$CC])
3416         AC_MSG_CHECKING([what C++ compiler to use])
3417         CXX="`xcrun -find clang++`"
3418         CXX_BASE=`first_arg_basename "$CXX"`
3419         if test "$host_cpu" = x86_64; then
3420             CXX+=" -target x86_64-apple-macos"
3421         else
3422             CXX+=" -target arm64-apple-macos"
3423         fi
3424         CXX+=" $stdlib -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3425         AC_MSG_RESULT([$CXX])
3427         INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3428         AR=`xcrun -find ar`
3429         NM=`xcrun -find nm`
3430         STRIP=`xcrun -find strip`
3431         LIBTOOL=`xcrun -find libtool`
3432         RANLIB=`xcrun -find ranlib`
3433     fi
3435     case "$with_macosx_version_max_allowed" in
3436     10.12)
3437         MAC_OS_X_VERSION_MAX_ALLOWED="101200"
3438         ;;
3439     10.13)
3440         MAC_OS_X_VERSION_MAX_ALLOWED="101300"
3441         ;;
3442     10.14)
3443         MAC_OS_X_VERSION_MAX_ALLOWED="101400"
3444         ;;
3445     10.15)
3446         MAC_OS_X_VERSION_MAX_ALLOWED="101500"
3447         ;;
3448     11.0)
3449         MAC_OS_X_VERSION_MAX_ALLOWED="110000"
3450         ;;
3451     11.1)
3452         MAC_OS_X_VERSION_MAX_ALLOWED="110100"
3453         ;;
3454     11.3)
3455         MAC_OS_X_VERSION_MAX_ALLOWED="110300"
3456         ;;
3457     12.0)
3458         MAC_OS_X_VERSION_MAX_ALLOWED="120000"
3459         ;;
3460     12.1)
3461         MAC_OS_X_VERSION_MAX_ALLOWED="120100"
3462         ;;
3463     12.3)
3464         MAC_OS_X_VERSION_MAX_ALLOWED="120300"
3465         ;;
3466     *)
3467         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])
3468         ;;
3469     esac
3471     AC_MSG_CHECKING([that macosx-version-min-required is coherent with macosx-version-max-allowed])
3472     if test $MAC_OS_X_VERSION_MIN_REQUIRED -gt $MAC_OS_X_VERSION_MAX_ALLOWED; then
3473         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])
3474     else
3475         AC_MSG_RESULT([ok])
3476     fi
3478     AC_MSG_CHECKING([that macosx-version-max-allowed is coherent with macos-with-sdk])
3479     if test $MAC_OS_X_VERSION_MAX_ALLOWED -gt $MACOSX_SDK_VERSION; then
3480         AC_MSG_ERROR([the version maximum allowed cannot be greater than the sdk level])
3481     else
3482         AC_MSG_RESULT([ok])
3483     fi
3484     AC_MSG_NOTICE([MAC_OS_X_VERSION_MIN_REQUIRED=$MAC_OS_X_VERSION_MIN_REQUIRED])
3485     AC_MSG_NOTICE([MAC_OS_X_VERSION_MAX_ALLOWED=$MAC_OS_X_VERSION_MAX_ALLOWED])
3487     AC_MSG_CHECKING([whether to do code signing])
3489     if test -z "$enable_macosx_code_signing" -o "$enable_macosx_code_signing" == "no" ; then
3490         AC_MSG_RESULT([no])
3491     else
3492         if test "$enable_macosx_code_signing" = yes; then
3493             # By default use the first suitable certificate (?).
3495             # http://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3496             # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3497             # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3498             # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3499             # "Developer ID Application" one.
3500             identity="Developer ID Application:"
3501         else
3502             identity=$enable_macosx_code_signing
3503         fi
3504         identity=`security find-identity -p codesigning -v 2>/dev/null | $AWK "/$identity/{print \\$2; exit}"`
3505         if test -n "$identity"; then
3506             MACOSX_CODESIGNING_IDENTITY=$identity
3507             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3508             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3509         else
3510             AC_MSG_ERROR([cannot determine identity to use])
3511         fi
3512     fi
3514     AC_MSG_CHECKING([whether to create a Mac App Store package])
3516     if test -z "$enable_macosx_package_signing" || test "$enable_macosx_package_signing" == no; then
3517         AC_MSG_RESULT([no])
3518     elif test -z "$MACOSX_CODESIGNING_IDENTITY"; then
3519         AC_MSG_ERROR([You forgot --enable-macosx-code-signing])
3520     else
3521         if test "$enable_macosx_package_signing" = yes; then
3522             # By default use the first suitable certificate.
3523             # It should be a "3rd Party Mac Developer Installer" one
3524             identity="3rd Party Mac Developer Installer:"
3525         else
3526             identity=$enable_macosx_package_signing
3527         fi
3528         identity=`security find-identity -v 2>/dev/null | $AWK "/$identity/ {print \\$2; exit}"`
3529         if test -n "$identity"; then
3530             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3531             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3532             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3533         else
3534             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3535         fi
3536     fi
3538     if test -n "$MACOSX_CODESIGNING_IDENTITY" -a -n "$MACOSX_PACKAGE_SIGNING_IDENTITY" -a "$MACOSX_CODESIGNING_IDENTITY" = "$MACOSX_PACKAGE_SIGNING_IDENTITY"; then
3539         AC_MSG_ERROR([You should not use the same identity for code and package signing])
3540     fi
3542     AC_MSG_CHECKING([whether to sandbox the application])
3544     if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then
3545         AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java])
3546     elif test "$enable_macosx_sandbox" = yes; then
3547         ENABLE_MACOSX_SANDBOX=TRUE
3548         AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX)
3549         AC_MSG_RESULT([yes])
3550     else
3551         AC_MSG_RESULT([no])
3552     fi
3554     AC_MSG_CHECKING([what macOS app bundle identifier to use])
3555     MACOSX_BUNDLE_IDENTIFIER=$with_macosx_bundle_identifier
3556     AC_MSG_RESULT([$MACOSX_BUNDLE_IDENTIFIER])
3558     if test -n "$with_macosx_provisioning_profile" ; then
3559         if test ! -f "$with_macosx_provisioning_profile"; then
3560             AC_MSG_ERROR([provisioning profile not found at $with_macosx_provisioning_profile])
3561         else
3562             MACOSX_PROVISIONING_PROFILE=$with_macosx_provisioning_profile
3563             MACOSX_PROVISIONING_INFO=$([security cms -D -i "$MACOSX_PROVISIONING_PROFILE" | \
3564                 xmllint --xpath "//key[.='com.apple.application-identifier' or .='com.apple.developer.team-identifier'] \
3565                     | //key[.='com.apple.application-identifier' or .='com.apple.developer.team-identifier']/following-sibling::string[1]" - | \
3566                 sed -e 's#><#>\n\t<#g' -e 's#^#\t#'])
3567         fi
3568     fi
3570 AC_SUBST(MACOSX_SDK_PATH)
3571 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3572 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3573 AC_SUBST(MAC_OS_X_VERSION_MAX_ALLOWED)
3574 AC_SUBST(INSTALL_NAME_TOOL)
3575 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3576 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3577 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3578 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3579 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3580 AC_SUBST(MACOSX_PROVISIONING_INFO)
3581 AC_SUBST(MACOSX_PROVISIONING_PROFILE)
3583 dnl ===================================================================
3584 dnl Check iOS SDK and compiler
3585 dnl ===================================================================
3587 if test $_os = iOS; then
3588     AC_MSG_CHECKING([what iOS SDK to use])
3589     current_sdk_ver=15.0
3590     older_sdk_vers="14.5"
3591     if test "$enable_ios_simulator" = "yes"; then
3592         platform=iPhoneSimulator
3593         versionmin=-mios-simulator-version-min=13.6
3594     else
3595         platform=iPhoneOS
3596         versionmin=-miphoneos-version-min=13.6
3597     fi
3598     xcode_developer=`xcode-select -print-path`
3600     for sdkver in $current_sdk_ver $older_sdk_vers; do
3601         t=$xcode_developer/Platforms/$platform.platform/Developer/SDKs/$platform$sdkver.sdk
3602         if test -d $t; then
3603             sysroot=$t
3604             break
3605         fi
3606     done
3608     if test -z "$sysroot"; then
3609         AC_MSG_ERROR([Could not find iOS SDK, expected something like $xcode_developer/Platforms/$platform.platform/Developer/SDKs/${platform}${current_sdk_ver}.sdk])
3610     fi
3612     AC_MSG_RESULT($sysroot)
3614     stdlib="-stdlib=libc++"
3616     AC_MSG_CHECKING([what C compiler to use])
3617     CC="`xcrun -find clang`"
3618     CC_BASE=`first_arg_basename "$CC"`
3619     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3620     AC_MSG_RESULT([$CC])
3622     AC_MSG_CHECKING([what C++ compiler to use])
3623     CXX="`xcrun -find clang++`"
3624     CXX_BASE=`first_arg_basename "$CXX"`
3625     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3626     AC_MSG_RESULT([$CXX])
3628     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3629     AR=`xcrun -find ar`
3630     NM=`xcrun -find nm`
3631     STRIP=`xcrun -find strip`
3632     LIBTOOL=`xcrun -find libtool`
3633     RANLIB=`xcrun -find ranlib`
3636 AC_MSG_CHECKING([whether to treat the installation as read-only])
3638 if test $_os = Darwin; then
3639     enable_readonly_installset=yes
3640 elif test "$enable_extensions" != yes; then
3641     enable_readonly_installset=yes
3643 if test "$enable_readonly_installset" = yes; then
3644     AC_MSG_RESULT([yes])
3645     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3646 else
3647     AC_MSG_RESULT([no])
3650 dnl ===================================================================
3651 dnl Structure of install set
3652 dnl ===================================================================
3654 if test $_os = Darwin; then
3655     LIBO_BIN_FOLDER=MacOS
3656     LIBO_ETC_FOLDER=Resources
3657     LIBO_LIBEXEC_FOLDER=MacOS
3658     LIBO_LIB_FOLDER=Frameworks
3659     LIBO_LIB_PYUNO_FOLDER=Resources
3660     LIBO_SHARE_FOLDER=Resources
3661     LIBO_SHARE_HELP_FOLDER=Resources/help
3662     LIBO_SHARE_JAVA_FOLDER=Resources/java
3663     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3664     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3665     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3666     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3667     LIBO_URE_BIN_FOLDER=MacOS
3668     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3669     LIBO_URE_LIB_FOLDER=Frameworks
3670     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3671     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3672 elif test $_os = WINNT; then
3673     LIBO_BIN_FOLDER=program
3674     LIBO_ETC_FOLDER=program
3675     LIBO_LIBEXEC_FOLDER=program
3676     LIBO_LIB_FOLDER=program
3677     LIBO_LIB_PYUNO_FOLDER=program
3678     LIBO_SHARE_FOLDER=share
3679     LIBO_SHARE_HELP_FOLDER=help
3680     LIBO_SHARE_JAVA_FOLDER=program/classes
3681     LIBO_SHARE_PRESETS_FOLDER=presets
3682     LIBO_SHARE_READMES_FOLDER=readmes
3683     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3684     LIBO_SHARE_SHELL_FOLDER=program/shell
3685     LIBO_URE_BIN_FOLDER=program
3686     LIBO_URE_ETC_FOLDER=program
3687     LIBO_URE_LIB_FOLDER=program
3688     LIBO_URE_MISC_FOLDER=program
3689     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3690 else
3691     LIBO_BIN_FOLDER=program
3692     LIBO_ETC_FOLDER=program
3693     LIBO_LIBEXEC_FOLDER=program
3694     LIBO_LIB_FOLDER=program
3695     LIBO_LIB_PYUNO_FOLDER=program
3696     LIBO_SHARE_FOLDER=share
3697     LIBO_SHARE_HELP_FOLDER=help
3698     LIBO_SHARE_JAVA_FOLDER=program/classes
3699     LIBO_SHARE_PRESETS_FOLDER=presets
3700     LIBO_SHARE_READMES_FOLDER=readmes
3701     if test "$enable_fuzzers" != yes; then
3702         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3703     else
3704         LIBO_SHARE_RESOURCE_FOLDER=resource
3705     fi
3706     LIBO_SHARE_SHELL_FOLDER=program/shell
3707     LIBO_URE_BIN_FOLDER=program
3708     LIBO_URE_ETC_FOLDER=program
3709     LIBO_URE_LIB_FOLDER=program
3710     LIBO_URE_MISC_FOLDER=program
3711     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3713 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3714 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3715 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3716 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3717 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3718 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3719 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3720 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3721 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3722 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3723 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3724 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3725 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3726 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3727 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3728 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3730 # Not all of them needed in config_host.mk, add more if need arises
3731 AC_SUBST(LIBO_BIN_FOLDER)
3732 AC_SUBST(LIBO_ETC_FOLDER)
3733 AC_SUBST(LIBO_LIB_FOLDER)
3734 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3735 AC_SUBST(LIBO_SHARE_FOLDER)
3736 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3737 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3738 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3739 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3740 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3741 AC_SUBST(LIBO_URE_BIN_FOLDER)
3742 AC_SUBST(LIBO_URE_ETC_FOLDER)
3743 AC_SUBST(LIBO_URE_LIB_FOLDER)
3744 AC_SUBST(LIBO_URE_MISC_FOLDER)
3745 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3747 dnl ===================================================================
3748 dnl Windows specific tests and stuff
3749 dnl ===================================================================
3751 reg_get_value()
3753     # Return value: $regvalue
3754     unset regvalue
3756     if test "$build_os" = "wsl"; then
3757         regvalue=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --read-registry $1 "$2" 2>/dev/null)
3758         return
3759     fi
3761     local _regentry="/proc/registry${1}/${2}"
3762     if test -f "$_regentry"; then
3763         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3764         # Registry keys read via /proc/registry* are always \0 terminated!
3765         local _regvalue=$(tr -d '\0' < "$_regentry")
3766         if test $? -eq 0; then
3767             regvalue=$_regvalue
3768         fi
3769     fi
3772 # Get a value from the 32-bit side of the Registry
3773 reg_get_value_32()
3775     reg_get_value "32" "$1"
3778 # Get a value from the 64-bit side of the Registry
3779 reg_get_value_64()
3781     reg_get_value "64" "$1"
3784 case "$host_os" in
3785 cygwin*|wsl*)
3786     COM=MSC
3787     OS=WNT
3788     RTL_OS=Windows
3789     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3790         P_SEP=";"
3791     else
3792         P_SEP=:
3793     fi
3794     case "$host_cpu" in
3795     x86_64)
3796         CPUNAME=X86_64
3797         RTL_ARCH=X86_64
3798         PLATFORMID=windows_x86_64
3799         WINDOWS_X64=1
3800         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
3801         WIN_HOST_ARCH="x64"
3802         WIN_MULTI_ARCH="x86"
3803         WIN_HOST_BITS=64
3804         ;;
3805     i*86)
3806         CPUNAME=INTEL
3807         RTL_ARCH=x86
3808         PLATFORMID=windows_x86
3809         WIN_HOST_ARCH="x86"
3810         WIN_HOST_BITS=32
3811         WIN_OTHER_ARCH="x64"
3812         ;;
3813     aarch64)
3814         CPUNAME=AARCH64
3815         RTL_ARCH=AARCH64
3816         PLATFORMID=windows_aarch64
3817         WINDOWS_X64=1
3818         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
3819         WIN_HOST_ARCH="arm64"
3820         WIN_HOST_BITS=64
3821         with_ucrt_dir=no
3822         ;;
3823     *)
3824         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
3825         ;;
3826     esac
3828     case "$build_cpu" in
3829     x86_64) WIN_BUILD_ARCH="x64" ;;
3830     i*86) WIN_BUILD_ARCH="x86" ;;
3831     aarch64) WIN_BUILD_ARCH="arm64" ;;
3832     *)
3833         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
3834         ;;
3835     esac
3837     SCPDEFS="$SCPDEFS -D_MSC_VER"
3838     ;;
3839 esac
3841 # multi-arch is an arch, which can execute on the host (x86 on x64), while
3842 # other-arch won't, but wouldn't break the build (x64 on x86).
3843 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
3844     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
3848 if test "$_os" = "iOS" -o "$build_cpu" != "$host_cpu"; then
3849     # To allow building Windows multi-arch releases without cross-tooling
3850     if test -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH"; then
3851         cross_compiling="yes"
3852     fi
3855 ENABLE_WASM_STRIP=''
3856 if test "$cross_compiling" = "yes"; then
3857     export CROSS_COMPILING=TRUE
3858     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
3859         ENABLE_WASM_STRIP=TRUE
3860     fi
3861 else
3862     CROSS_COMPILING=
3863     BUILD_TYPE="$BUILD_TYPE NATIVE"
3865 AC_SUBST(CROSS_COMPILING)
3866 AC_SUBST(ENABLE_WASM_STRIP)
3868 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
3869 # NOTE: must _not_ be used for bundled external libraries!
3870 ISYSTEM=
3871 if test "$GCC" = "yes"; then
3872     AC_MSG_CHECKING( for -isystem )
3873     save_CFLAGS=$CFLAGS
3874     CFLAGS="$CFLAGS -isystem /usr/include -Werror"
3875     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
3876     CFLAGS=$save_CFLAGS
3877     if test -n "$ISYSTEM"; then
3878         AC_MSG_RESULT(yes)
3879     else
3880         AC_MSG_RESULT(no)
3881     fi
3883 if test -z "$ISYSTEM"; then
3884     # fall back to using -I
3885     ISYSTEM=-I
3887 AC_SUBST(ISYSTEM)
3889 dnl ===================================================================
3890 dnl  Check which Visual Studio compiler is used
3891 dnl ===================================================================
3893 map_vs_year_to_version()
3895     # Return value: $vsversion
3897     unset vsversion
3899     case $1 in
3900     2019)
3901         vsversion=16;;
3902     2022)
3903         vsversion=17;;
3904     *)
3905         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
3906     esac
3909 vs_versions_to_check()
3911     # Args: $1 (optional) : versions to check, in the order of preference
3912     # Return value: $vsversions
3914     unset vsversions
3916     if test -n "$1"; then
3917         map_vs_year_to_version "$1"
3918         vsversions=$vsversion
3919     else
3920         # Default version is 2019
3921         vsversions="16"
3922     fi
3925 win_get_env_from_vsvars32bat()
3927     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
3928     # Also seems to be located in another directory under the same name: vsvars32.bat
3929     # https://github.com/bazelbuild/bazel/blob/master/src/main/native/build_windows_jni.sh#L56-L57
3930     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$(cygpath -w $VC_PRODUCT_DIR)" > $WRAPPERBATCHFILEPATH
3931     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
3932     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
3933     local result
3934     if test "$build_os" = "wsl"; then
3935         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
3936     else
3937         chmod +x $WRAPPERBATCHFILEPATH
3938         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
3939     fi
3940     rm -f $WRAPPERBATCHFILEPATH
3941     printf '%s' "$result"
3944 find_ucrt()
3946     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/InstallationFolder"
3947     if test -n "$regvalue"; then
3948         PathFormat "$regvalue"
3949         UCRTSDKDIR=$formatted_path_unix
3950         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion"
3951         UCRTVERSION=$regvalue
3952         # Rest if not exist
3953         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
3954           UCRTSDKDIR=
3955         fi
3956     fi
3957     if test -z "$UCRTSDKDIR"; then
3958         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
3959         ide_env_file="${ide_env_dir}VsDevCmd.bat"
3960         if test -f "$ide_env_file"; then
3961             PathFormat "$(win_get_env_from_vsvars32bat UniversalCRTSdkDir)"
3962             UCRTSDKDIR=$formatted_path
3963             UCRTVERSION=$(win_get_env_from_vsvars32bat UCRTVersion)
3964             dnl Hack needed at least by tml:
3965             if test "$UCRTVERSION" = 10.0.15063.0 \
3966                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
3967                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
3968             then
3969                 UCRTVERSION=10.0.14393.0
3970             fi
3971         else
3972           AC_MSG_ERROR([No UCRT found])
3973         fi
3974     fi
3977 find_msvc()
3979     # Find Visual C++
3980     # Args: $1 (optional) : The VS version year
3981     # Return values: $vctest, $vcyear, $vctoolset, $vcnumwithdot, $vcbuildnumber
3983     unset vctest vctoolset vcnumwithdot vcbuildnumber
3985     vs_versions_to_check "$1"
3986     if test "$build_os" = wsl; then
3987         vswhere="$PROGRAMFILESX86"
3988     else
3989         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
3990     fi
3991     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
3992     PathFormat "$vswhere"
3993     vswhere=$formatted_path_unix
3994     for ver in $vsversions; do
3995         vswhereoutput=`$vswhere -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3996         if test -z "$vswhereoutput"; then
3997             vswhereoutput=`$vswhere -prerelease -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3998         fi
3999         # Fall back to all MS products (this includes VC++ Build Tools)
4000         if ! test -n "$vswhereoutput"; then
4001             AC_MSG_CHECKING([VC++ Build Tools and similar])
4002             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4003         fi
4004         if test -n "$vswhereoutput"; then
4005             PathFormat "$vswhereoutput"
4006             vctest=$formatted_path_unix
4007             break
4008         fi
4009     done
4011     if test -n "$vctest"; then
4012         vcnumwithdot="$ver.0"
4013         case "$vcnumwithdot" in
4014         16.0)
4015             vcyear=2019
4016             vctoolset=v142
4017             ;;
4018         17.0)
4019             vcyear=2022
4020             vctoolset=v143
4021             ;;
4022         esac
4023         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
4025     fi
4028 test_cl_exe()
4030     AC_MSG_CHECKING([$1 compiler])
4032     CL_EXE_PATH="$2/cl.exe"
4034     if test ! -f "$CL_EXE_PATH"; then
4035         if test "$1" = "multi-arch"; then
4036             AC_MSG_WARN([no compiler (cl.exe) in $2])
4037             return 1
4038         else
4039             AC_MSG_ERROR([no compiler (cl.exe) in $2])
4040         fi
4041     fi
4043     dnl ===========================================================
4044     dnl  Check for the corresponding mspdb*.dll
4045     dnl ===========================================================
4047     # MSVC 15.0 has libraries from 14.0?
4048     mspdbnum="140"
4050     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
4051         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
4052     fi
4054     # The compiles has to find its shared libraries
4055     OLD_PATH="$PATH"
4056     TEMP_PATH=`cygpath -d "$2"`
4057     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
4059     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
4060         AC_MSG_ERROR([no compiler (cl.exe) in $2])
4061     fi
4063     PATH="$OLD_PATH"
4065     AC_MSG_RESULT([$CL_EXE_PATH])
4068 SOLARINC=
4069 MSBUILD_PATH=
4070 DEVENV=
4071 if test "$_os" = "WINNT"; then
4072     AC_MSG_CHECKING([Visual C++])
4073     find_msvc "$with_visual_studio"
4074     if test -z "$vctest"; then
4075         if test -n "$with_visual_studio"; then
4076             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
4077         else
4078             AC_MSG_ERROR([no Visual Studio installation found])
4079         fi
4080     fi
4081     AC_MSG_RESULT([])
4083     VC_PRODUCT_DIR="$vctest/VC"
4084     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
4086     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
4087     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
4088         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
4089         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
4090         if test $? -ne 0; then
4091             WIN_MULTI_ARCH=""
4092             WIN_OTHER_ARCH=""
4093         fi
4094     fi
4096     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
4097         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
4098         test_cl_exe "build" "$MSVC_BUILD_PATH"
4099     fi
4101     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
4102         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
4103         test_cl_exe "host" "$MSVC_HOST_PATH"
4104     else
4105         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
4106     fi
4108     AC_MSG_CHECKING([for short pathname of VC product directory])
4109     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
4110     AC_MSG_RESULT([$VC_PRODUCT_DIR])
4112     UCRTSDKDIR=
4113     UCRTVERSION=
4115     AC_MSG_CHECKING([for UCRT location])
4116     find_ucrt
4117     # find_ucrt errors out if it doesn't find it
4118     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
4119     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
4120     ucrtincpath_formatted=$formatted_path
4121     # SOLARINC is used for external modules and must be set too.
4122     # And no, it's not sufficient to set SOLARINC only, as configure
4123     # itself doesn't honour it.
4124     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
4125     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
4126     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
4127     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4129     AC_SUBST(UCRTSDKDIR)
4130     AC_SUBST(UCRTVERSION)
4132     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4133     # Find the proper version of MSBuild.exe to use based on the VS version
4134     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath
4135     if test -z "$regvalue" ; then
4136         if test "$WIN_BUILD_ARCH" != "x64"; then
4137             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4138         else
4139             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4140         fi
4141     fi
4142     if test -d "$regvalue" ; then
4143         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4144         AC_MSG_RESULT([$regvalue])
4145     else
4146         AC_MSG_ERROR([MSBuild.exe location not found])
4147     fi
4149     # Find the version of devenv.exe
4150     # MSVC 2017 devenv does not start properly from a DOS 8.3 path
4151     DEVENV=$(cygpath -lm "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe")
4152     DEVENV_unix=$(cygpath -u "$DEVENV")
4153     if test ! -e "$DEVENV_unix"; then
4154         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4155     fi
4157     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4158     dnl needed when building CLR code:
4159     if test -z "$MSVC_CXX"; then
4160         # This gives us a posix path with 8.3 filename restrictions
4161         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4162     fi
4164     if test -z "$CC"; then
4165         CC=$MSVC_CXX
4166         CC_BASE=`first_arg_basename "$CC"`
4167     fi
4168     if test -z "$CXX"; then
4169         CXX=$MSVC_CXX
4170         CXX_BASE=`first_arg_basename "$CXX"`
4171     fi
4173     if test -n "$CC"; then
4174         # Remove /cl.exe from CC case insensitive
4175         AC_MSG_NOTICE([found Visual C++ $vcyear])
4177         main_include_dir=`cygpath -d -m "$COMPATH/Include"`
4178         CPPFLAGS="$CPPFLAGS -I$main_include_dir"
4180         PathFormat "$COMPATH"
4181         COMPATH=`win_short_path_for_make "$formatted_path"`
4183         VCVER=$vcnumwithdot
4184         VCTOOLSET=$vctoolset
4186         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4187         # are always "better", we list them in reverse chronological order.
4189         case "$vcnumwithdot" in
4190         16.0 | 17.0)
4191             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4192             ;;
4193         esac
4195         # The expectation is that --with-windows-sdk should not need to be used
4196         if test -n "$with_windows_sdk"; then
4197             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4198             *" "$with_windows_sdk" "*)
4199                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4200                 ;;
4201             *)
4202                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4203                 ;;
4204             esac
4205         fi
4207         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4208         ac_objext=obj
4209         ac_exeext=exe
4211     else
4212         AC_MSG_ERROR([Visual C++ not found after all, huh])
4213     fi
4215     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4216     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4217         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4218         // between Visual Studio versions and _MSC_VER:
4219         #if _MSC_VER < 1925
4220         #error
4221         #endif
4222     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4224     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4225     # version of the Explorer extension (and maybe other small
4226     # bits, too) needed when installing a 32-bit LibreOffice on a
4227     # 64-bit OS. The 64-bit Explorer extension is a feature that
4228     # has been present since long in OOo. Don't confuse it with
4229     # building LibreOffice itself as 64-bit code.
4231     BUILD_X64=
4232     CXX_X64_BINARY=
4234     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4235         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4236         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4237              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4238         then
4239             BUILD_X64=TRUE
4240             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4241             AC_MSG_RESULT([found])
4242         else
4243             AC_MSG_RESULT([not found])
4244             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4245         fi
4246     elif test "$WIN_HOST_ARCH" = "x64"; then
4247         CXX_X64_BINARY=$CXX
4248     fi
4249     AC_SUBST(BUILD_X64)
4251     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4252     AC_SUBST(CXX_X64_BINARY)
4254     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4255     # needed to support TWAIN scan on both 32- and 64-bit systems
4257     case "$WIN_HOST_ARCH" in
4258     x64)
4259         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4260         if test -n "$CXX_X86_BINARY"; then
4261             BUILD_X86=TRUE
4262             AC_MSG_RESULT([preset])
4263         elif test -n "$WIN_MULTI_ARCH"; then
4264             BUILD_X86=TRUE
4265             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4266             CXX_X86_BINARY+=" /arch:SSE"
4267             AC_MSG_RESULT([found])
4268         else
4269             AC_MSG_RESULT([not found])
4270             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4271         fi
4272         ;;
4273     x86)
4274         BUILD_X86=TRUE
4275         CXX_X86_BINARY=$MSVC_CXX
4276         ;;
4277     esac
4278     AC_SUBST(BUILD_X86)
4279     AC_SUBST(CXX_X86_BINARY)
4281 AC_SUBST(VCVER)
4282 AC_SUBST(VCTOOLSET)
4283 AC_SUBST(DEVENV)
4284 AC_SUBST(MSVC_CXX)
4286 COM_IS_CLANG=
4287 AC_MSG_CHECKING([whether the compiler is actually Clang])
4288 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4289     #ifndef __clang__
4290     you lose
4291     #endif
4292     int foo=42;
4293     ]])],
4294     [AC_MSG_RESULT([yes])
4295      COM_IS_CLANG=TRUE],
4296     [AC_MSG_RESULT([no])])
4297 AC_SUBST(COM_IS_CLANG)
4299 CC_PLAIN=$CC
4300 CLANGVER=
4301 if test "$COM_IS_CLANG" = TRUE; then
4302     AC_MSG_CHECKING([whether Clang is new enough])
4303     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4304         #if !defined __apple_build_version__
4305         #error
4306         #endif
4307         ]])],
4308         [my_apple_clang=yes],[my_apple_clang=])
4309     if test "$my_apple_clang" = yes; then
4310         AC_MSG_RESULT([assumed yes (Apple Clang)])
4311     elif test "$_os" = Emscripten; then
4312         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4313     else
4314         if test "$_os" = WINNT; then
4315             dnl In which case, assume clang-cl:
4316             my_args="/EP /TC"
4317             dnl Filter out -FIIntrin.h, which needs to be explicitly stated for
4318             dnl clang-cl:
4319             CC_PLAIN=
4320             for i in $CC; do
4321                 case $i in
4322                 -FIIntrin.h)
4323                     ;;
4324                 *)
4325                     CC_PLAIN="$CC_PLAIN $i"
4326                     ;;
4327                 esac
4328             done
4329         else
4330             my_args="-E -P"
4331         fi
4332         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC_PLAIN $my_args - | sed 's/ //g'`
4333         CLANG_FULL_VERSION=`echo __clang_version__ | $CC_PLAIN $my_args -`
4334         CLANGVER=`echo $clang_version \
4335             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4336         if test "$CLANGVER" -ge 50002; then
4337             AC_MSG_RESULT([yes ($clang_version)])
4338         else
4339             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 5.0.2])
4340         fi
4341         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4342         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4343     fi
4346 SHOWINCLUDES_PREFIX=
4347 if test "$_os" = WINNT; then
4348     dnl We need to guess the prefix of the -showIncludes output, it can be
4349     dnl localized
4350     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4351     echo "#include <stdlib.h>" > conftest.c
4352     SHOWINCLUDES_PREFIX=`$CC_PLAIN $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4353         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4354     rm -f conftest.c conftest.obj
4355     if test -z "$SHOWINCLUDES_PREFIX"; then
4356         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4357     else
4358         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4359     fi
4361 AC_SUBST(SHOWINCLUDES_PREFIX)
4364 # prefix C with ccache if needed
4366 if test "$CCACHE" != ""; then
4367     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4369     AC_LANG_PUSH([C])
4370     save_CFLAGS=$CFLAGS
4371     CFLAGS="$CFLAGS --ccache-skip -O2"
4372     # msvc does not fail on unknown options, check stdout
4373     if test "$COM" = MSC; then
4374         CFLAGS="$CFLAGS -nologo"
4375     fi
4376     save_ac_c_werror_flag=$ac_c_werror_flag
4377     ac_c_werror_flag=yes
4378     dnl an empty program will do, we're checking the compiler flags
4379     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4380                       [use_ccache=yes], [use_ccache=no])
4381     CFLAGS=$save_CFLAGS
4382     ac_c_werror_flag=$save_ac_c_werror_flag
4383     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4384         AC_MSG_RESULT([yes])
4385     else
4386         CC="$CCACHE $CC"
4387         CC_BASE="ccache $CC_BASE"
4388         AC_MSG_RESULT([no])
4389     fi
4390     AC_LANG_POP([C])
4393 # ===================================================================
4394 # check various GCC options that Clang does not support now but maybe
4395 # will somewhen in the future, check them even for GCC, so that the
4396 # flags are set
4397 # ===================================================================
4399 HAVE_GCC_GGDB2=
4400 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4401     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4402     save_CFLAGS=$CFLAGS
4403     CFLAGS="$CFLAGS -Werror -ggdb2"
4404     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4405     CFLAGS=$save_CFLAGS
4406     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4407         AC_MSG_RESULT([yes])
4408     else
4409         AC_MSG_RESULT([no])
4410     fi
4412     if test "$host_cpu" = "m68k"; then
4413         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4414         save_CFLAGS=$CFLAGS
4415         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4416         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4417         CFLAGS=$save_CFLAGS
4418         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4419             AC_MSG_RESULT([yes])
4420         else
4421             AC_MSG_ERROR([no])
4422         fi
4423     fi
4425 AC_SUBST(HAVE_GCC_GGDB2)
4427 dnl ===================================================================
4428 dnl  Test the gcc version
4429 dnl ===================================================================
4430 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4431     AC_MSG_CHECKING([the GCC version])
4432     _gcc_version=`$CC -dumpfullversion`
4433     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4434         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4435     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4437     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4439     if test "$gcc_full_version" -lt 70000; then
4440         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 7.0.0])
4441     fi
4442 else
4443     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4444     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4445     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4446     # (which reports itself as GCC 4.2.1).
4447     GCC_VERSION=
4449 AC_SUBST(GCC_VERSION)
4451 dnl Set the ENABLE_DBGUTIL variable
4452 dnl ===================================================================
4453 AC_MSG_CHECKING([whether to build with additional debug utilities])
4454 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4455     ENABLE_DBGUTIL="TRUE"
4456     # this is an extra var so it can have different default on different MSVC
4457     # versions (in case there are version specific problems with it)
4458     MSVC_USE_DEBUG_RUNTIME="TRUE"
4460     AC_MSG_RESULT([yes])
4461     # cppunit and graphite expose STL in public headers
4462     if test "$with_system_cppunit" = "yes"; then
4463         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4464     else
4465         with_system_cppunit=no
4466     fi
4467     if test "$with_system_graphite" = "yes"; then
4468         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4469     else
4470         with_system_graphite=no
4471     fi
4472     if test "$with_system_orcus" = "yes"; then
4473         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4474     else
4475         with_system_orcus=no
4476     fi
4477     if test "$with_system_libcmis" = "yes"; then
4478         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4479     else
4480         with_system_libcmis=no
4481     fi
4482     if test "$with_system_hunspell" = "yes"; then
4483         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4484     else
4485         with_system_hunspell=no
4486     fi
4487     if test "$with_system_gpgmepp" = "yes"; then
4488         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4489     else
4490         with_system_gpgmepp=no
4491     fi
4492     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4493     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4494     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4495     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4496     # of those two is using the system variant:
4497     if test "$with_system_libnumbertext" = "yes"; then
4498         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4499     else
4500         with_system_libnumbertext=no
4501     fi
4502     if test "$with_system_libwps" = "yes"; then
4503         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4504     else
4505         with_system_libwps=no
4506     fi
4507 else
4508     ENABLE_DBGUTIL=""
4509     MSVC_USE_DEBUG_RUNTIME=""
4510     AC_MSG_RESULT([no])
4512 AC_SUBST(ENABLE_DBGUTIL)
4513 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4515 dnl Set the ENABLE_DEBUG variable.
4516 dnl ===================================================================
4517 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4518     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4520 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4521     if test -z "$libo_fuzzed_enable_debug"; then
4522         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4523     else
4524         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4525         enable_debug=yes
4526     fi
4529 AC_MSG_CHECKING([whether to do a debug build])
4530 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4531     ENABLE_DEBUG="TRUE"
4532     if test -n "$ENABLE_DBGUTIL" ; then
4533         AC_MSG_RESULT([yes (dbgutil)])
4534     else
4535         AC_MSG_RESULT([yes])
4536     fi
4537 else
4538     ENABLE_DEBUG=""
4539     AC_MSG_RESULT([no])
4541 AC_SUBST(ENABLE_DEBUG)
4543 dnl ===================================================================
4544 dnl Select the linker to use (gold/lld/ld.bfd).
4545 dnl This is done only after compiler checks (need to know if Clang is
4546 dnl used, for different defaults) and after checking if a debug build
4547 dnl is wanted (non-debug builds get the default linker if not explicitly
4548 dnl specified otherwise).
4549 dnl All checks for linker features/options should come after this.
4550 dnl ===================================================================
4551 check_use_ld()
4553     use_ld=-fuse-ld=${1%%:*}
4554     use_ld_path=${1#*:}
4555     if test "$use_ld_path" != "$1"; then
4556         use_ld="$use_ld --ld-path=$use_ld_path"
4557     fi
4558     use_ld_fail_if_error=$2
4559     use_ld_ok=
4560     AC_MSG_CHECKING([for $use_ld linker support])
4561     use_ld_ldflags_save="$LDFLAGS"
4562     LDFLAGS="$LDFLAGS $use_ld"
4563     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4564 #include <stdio.h>
4565         ],[
4566 printf ("hello world\n");
4567         ])], USE_LD=$use_ld, [])
4568     if test -n "$USE_LD"; then
4569         AC_MSG_RESULT( yes )
4570         use_ld_ok=yes
4571     else
4572         if test -n "$use_ld_fail_if_error"; then
4573             AC_MSG_ERROR( no )
4574         else
4575             AC_MSG_RESULT( no )
4576         fi
4577     fi
4578     if test -n "$use_ld_ok"; then
4579         dnl keep the value of LDFLAGS
4580         return 0
4581     fi
4582     LDFLAGS="$use_ld_ldflags_save"
4583     return 1
4585 USE_LD=
4586 if test "$enable_ld" != "no"; then
4587     if test "$GCC" = "yes"; then
4588         if test -n "$enable_ld"; then
4589             check_use_ld "$enable_ld" fail_if_error
4590         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4591             dnl non-debug builds default to the default linker
4592             true
4593         elif test -n "$COM_IS_CLANG"; then
4594             check_use_ld lld
4595             if test $? -ne 0; then
4596                 check_use_ld gold
4597             fi
4598         else
4599             # For gcc first try gold, new versions also support lld.
4600             check_use_ld gold
4601             if test $? -ne 0; then
4602                 check_use_ld lld
4603             fi
4604         fi
4605         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4606         rm conftest.out
4607         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD)')
4608         if test -z "$ld_used"; then
4609             ld_used="unknown"
4610         fi
4611         AC_MSG_CHECKING([for linker that is used])
4612         AC_MSG_RESULT([$ld_used])
4613         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4614             if echo "$ld_used" | grep -q "^GNU ld"; then
4615                 AC_MSG_WARN([The default GNU linker is slow, consider using the LLD or the GNU gold linker.])
4616                 add_warning "The default GNU linker is slow, consider using the LLD or the GNU gold linker."
4617             fi
4618         fi
4619     else
4620         if test "$enable_ld" = "yes"; then
4621             AC_MSG_ERROR([--enable-ld not supported])
4622         fi
4623     fi
4625 AC_SUBST(USE_LD)
4627 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4628 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4629     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4630     bsymbolic_functions_ldflags_save=$LDFLAGS
4631     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4632     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4633 #include <stdio.h>
4634         ],[
4635 printf ("hello world\n");
4636         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4637     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4638         AC_MSG_RESULT( found )
4639     else
4640         AC_MSG_RESULT( not found )
4641     fi
4642     LDFLAGS=$bsymbolic_functions_ldflags_save
4644 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4646 LD_GC_SECTIONS=
4647 if test "$GCC" = "yes"; then
4648     for flag in "--gc-sections" "-dead_strip"; do
4649         AC_MSG_CHECKING([for $flag linker support])
4650         ldflags_save=$LDFLAGS
4651         LDFLAGS="$LDFLAGS -Wl,$flag"
4652         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4653 #include <stdio.h>
4654             ],[
4655 printf ("hello world\n");
4656             ])],[
4657             LD_GC_SECTIONS="-Wl,$flag"
4658             AC_MSG_RESULT( found )
4659             ], [
4660             AC_MSG_RESULT( not found )
4661             ])
4662         LDFLAGS=$ldflags_save
4663         if test -n "$LD_GC_SECTIONS"; then
4664             break
4665         fi
4666     done
4668 AC_SUBST(LD_GC_SECTIONS)
4670 HAVE_GSPLIT_DWARF=
4671 if test "$enable_split_debug" != no; then
4672     use_split_debug=
4673     if test -n "$ENABLE_LTO"; then
4674         true # Inherently incompatible, since no debug info is created while compiling, GCC complains.
4675     elif test "$enable_split_debug" = yes; then
4676         use_split_debug=1
4677     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4678     elif test "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4679         use_split_debug=1
4680     fi
4681     if test -n "$use_split_debug"; then
4682         AC_MSG_CHECKING([whether $CC_BASE supports -gsplit-dwarf])
4683         save_CFLAGS=$CFLAGS
4684         CFLAGS="$CFLAGS -Werror -gsplit-dwarf"
4685         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_SPLIT_DWARF=TRUE ],[])
4686         CFLAGS=$save_CFLAGS
4687         if test "$HAVE_GCC_SPLIT_DWARF" = "TRUE"; then
4688             AC_MSG_RESULT([yes])
4689         else
4690             if test "$enable_split_debug" = yes; then
4691                 AC_MSG_ERROR([no])
4692             else
4693                 AC_MSG_RESULT([no])
4694             fi
4695         fi
4696     fi
4697     if test -z "$HAVE_GCC_SPLIT_DWARF" -a "$test_split_debug" = "yes" -a -n "$use_split_debug"; then
4698         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4699         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4700     fi
4702 AC_SUBST(HAVE_GCC_SPLIT_DWARF)
4704 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4705 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4706 save_CFLAGS=$CFLAGS
4707 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4708 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4709 CFLAGS=$save_CFLAGS
4710 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4711     AC_MSG_RESULT([yes])
4712 else
4713     AC_MSG_RESULT([no])
4715 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4717 ENABLE_GDB_INDEX=
4718 if test "$enable_gdb_index" != "no"; then
4719     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4720     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4721         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4722         save_CFLAGS=$CFLAGS
4723         CFLAGS="$CFLAGS -Werror -ggnu-pubnames"
4724         have_ggnu_pubnames=
4725         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4726         if test "$have_ggnu_pubnames" != "TRUE"; then
4727             if test "$enable_gdb_index" = "yes"; then
4728                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4729             else
4730                 AC_MSG_RESULT( no )
4731             fi
4732         else
4733             AC_MSG_RESULT( yes )
4734             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4735             ldflags_save=$LDFLAGS
4736             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4737             AC_LINK_IFELSE([AC_LANG_PROGRAM([
4738 #include <stdio.h>
4739                 ],[
4740 printf ("hello world\n");
4741                 ])], ENABLE_GDB_INDEX=TRUE, [])
4742             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
4743                 AC_MSG_RESULT( yes )
4744             else
4745                 if test "$enable_gdb_index" = "yes"; then
4746                     AC_MSG_ERROR( no )
4747                 else
4748                     AC_MSG_RESULT( no )
4749                 fi
4750             fi
4751             LDFLAGS=$ldflags_save
4752         fi
4753         CFLAGS=$save_CFLAGS
4754         fi
4755     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4756         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
4757         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
4758     fi
4760 AC_SUBST(ENABLE_GDB_INDEX)
4762 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
4763     enable_sal_log=yes
4765 if test "$enable_sal_log" = yes; then
4766     ENABLE_SAL_LOG=TRUE
4768 AC_SUBST(ENABLE_SAL_LOG)
4770 dnl Check for enable symbols option
4771 dnl ===================================================================
4772 AC_MSG_CHECKING([whether to generate debug information])
4773 if test -z "$enable_symbols"; then
4774     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4775         enable_symbols=yes
4776     else
4777         enable_symbols=no
4778     fi
4780 if test "$enable_symbols" = yes; then
4781     ENABLE_SYMBOLS_FOR=all
4782     AC_MSG_RESULT([yes])
4783 elif test "$enable_symbols" = no; then
4784     ENABLE_SYMBOLS_FOR=
4785     AC_MSG_RESULT([no])
4786 else
4787     # Selective debuginfo.
4788     ENABLE_SYMBOLS_FOR="$enable_symbols"
4789     AC_MSG_RESULT([for "$enable_symbols"])
4791 AC_SUBST(ENABLE_SYMBOLS_FOR)
4793 if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then
4794     # Building on Android with full symbols: without enough memory the linker never finishes currently.
4795     AC_MSG_CHECKING([whether enough memory is available for linking])
4796     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
4797     # Check for 15GB, as Linux reports a bit less than the physical memory size.
4798     if test -n "$mem_size" -a $mem_size -lt 15728640; then
4799         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
4800     else
4801         AC_MSG_RESULT([yes])
4802     fi
4805 ENABLE_OPTIMIZED=
4806 ENABLE_OPTIMIZED_DEBUG=
4807 AC_MSG_CHECKING([whether to compile with optimization flags])
4808 if test -z "$enable_optimized"; then
4809     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4810         enable_optimized=no
4811     else
4812         enable_optimized=yes
4813     fi
4815 if test "$enable_optimized" = yes; then
4816     ENABLE_OPTIMIZED=TRUE
4817     AC_MSG_RESULT([yes])
4818 elif test "$enable_optimized" = debug; then
4819     ENABLE_OPTIMIZED_DEBUG=TRUE
4820     AC_MSG_RESULT([yes (debug)])
4821     HAVE_GCC_OG=
4822     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4823         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
4824         save_CFLAGS=$CFLAGS
4825         CFLAGS="$CFLAGS -Werror -Og"
4826         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
4827         CFLAGS=$save_CFLAGS
4828         if test "$HAVE_GCC_OG" = "TRUE"; then
4829             AC_MSG_RESULT([yes])
4830         else
4831             AC_MSG_RESULT([no])
4832         fi
4833     fi
4834     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
4835         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
4836     fi
4837 else
4838     AC_MSG_RESULT([no])
4840 AC_SUBST(ENABLE_OPTIMIZED)
4841 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
4844 # determine CPUNAME, OS, ...
4846 case "$host_os" in
4848 aix*)
4849     COM=GCC
4850     CPUNAME=POWERPC
4851     OS=AIX
4852     RTL_OS=AIX
4853     RTL_ARCH=PowerPC
4854     PLATFORMID=aix_powerpc
4855     P_SEP=:
4856     ;;
4858 cygwin*|wsl*)
4859     # Already handled
4860     ;;
4862 darwin*|macos*)
4863     COM=GCC
4864     OS=MACOSX
4865     RTL_OS=MacOSX
4866     P_SEP=:
4868     case "$host_cpu" in
4869     aarch64|arm64)
4870         if test "$enable_ios_simulator" = "yes"; then
4871             OS=iOS
4872         else
4873             CPUNAME=AARCH64
4874             RTL_ARCH=AARCH64
4875             PLATFORMID=macosx_aarch64
4876         fi
4877         ;;
4878     x86_64)
4879         if test "$enable_ios_simulator" = "yes"; then
4880             OS=iOS
4881         fi
4882         CPUNAME=X86_64
4883         RTL_ARCH=X86_64
4884         PLATFORMID=macosx_x86_64
4885         ;;
4886     *)
4887         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4888         ;;
4889     esac
4890     ;;
4892 ios*)
4893     COM=GCC
4894     OS=iOS
4895     RTL_OS=iOS
4896     P_SEP=:
4898     case "$host_cpu" in
4899     aarch64|arm64)
4900         if test "$enable_ios_simulator" = "yes"; then
4901             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
4902         fi
4903         ;;
4904     *)
4905         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4906         ;;
4907     esac
4908     CPUNAME=AARCH64
4909     RTL_ARCH=AARCH64
4910     PLATFORMID=ios_arm64
4911     ;;
4913 dragonfly*)
4914     COM=GCC
4915     OS=DRAGONFLY
4916     RTL_OS=DragonFly
4917     P_SEP=:
4919     case "$host_cpu" in
4920     i*86)
4921         CPUNAME=INTEL
4922         RTL_ARCH=x86
4923         PLATFORMID=dragonfly_x86
4924         ;;
4925     x86_64)
4926         CPUNAME=X86_64
4927         RTL_ARCH=X86_64
4928         PLATFORMID=dragonfly_x86_64
4929         ;;
4930     *)
4931         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4932         ;;
4933     esac
4934     ;;
4936 freebsd*)
4937     COM=GCC
4938     RTL_OS=FreeBSD
4939     OS=FREEBSD
4940     P_SEP=:
4942     case "$host_cpu" in
4943     aarch64)
4944         CPUNAME=AARCH64
4945         PLATFORMID=freebsd_aarch64
4946         RTL_ARCH=AARCH64
4947         ;;
4948     i*86)
4949         CPUNAME=INTEL
4950         RTL_ARCH=x86
4951         PLATFORMID=freebsd_x86
4952         ;;
4953     x86_64|amd64)
4954         CPUNAME=X86_64
4955         RTL_ARCH=X86_64
4956         PLATFORMID=freebsd_x86_64
4957         ;;
4958     powerpc64)
4959         CPUNAME=POWERPC64
4960         RTL_ARCH=PowerPC_64
4961         PLATFORMID=freebsd_powerpc64
4962         ;;
4963     powerpc|powerpcspe)
4964         CPUNAME=POWERPC
4965         RTL_ARCH=PowerPC
4966         PLATFORMID=freebsd_powerpc
4967         ;;
4968     *)
4969         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4970         ;;
4971     esac
4972     ;;
4974 haiku*)
4975     COM=GCC
4976     GUIBASE=haiku
4977     RTL_OS=Haiku
4978     OS=HAIKU
4979     P_SEP=:
4981     case "$host_cpu" in
4982     i*86)
4983         CPUNAME=INTEL
4984         RTL_ARCH=x86
4985         PLATFORMID=haiku_x86
4986         ;;
4987     x86_64|amd64)
4988         CPUNAME=X86_64
4989         RTL_ARCH=X86_64
4990         PLATFORMID=haiku_x86_64
4991         ;;
4992     *)
4993         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4994         ;;
4995     esac
4996     ;;
4998 kfreebsd*)
4999     COM=GCC
5000     OS=LINUX
5001     RTL_OS=kFreeBSD
5002     P_SEP=:
5004     case "$host_cpu" in
5006     i*86)
5007         CPUNAME=INTEL
5008         RTL_ARCH=x86
5009         PLATFORMID=kfreebsd_x86
5010         ;;
5011     x86_64)
5012         CPUNAME=X86_64
5013         RTL_ARCH=X86_64
5014         PLATFORMID=kfreebsd_x86_64
5015         ;;
5016     *)
5017         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5018         ;;
5019     esac
5020     ;;
5022 linux-gnu*|linux-musl*)
5023     COM=GCC
5024     OS=LINUX
5025     RTL_OS=Linux
5026     P_SEP=:
5028     case "$host_cpu" in
5030     aarch64)
5031         CPUNAME=AARCH64
5032         PLATFORMID=linux_aarch64
5033         RTL_ARCH=AARCH64
5034         EPM_FLAGS="-a arm64"
5035         ;;
5036     alpha)
5037         CPUNAME=AXP
5038         RTL_ARCH=ALPHA
5039         PLATFORMID=linux_alpha
5040         ;;
5041     arm*)
5042         CPUNAME=ARM
5043         EPM_FLAGS="-a arm"
5044         RTL_ARCH=ARM_EABI
5045         PLATFORMID=linux_arm_eabi
5046         case "$host_cpu" in
5047         arm*-linux)
5048             RTL_ARCH=ARM_OABI
5049             PLATFORMID=linux_arm_oabi
5050             ;;
5051         esac
5052         ;;
5053     hppa)
5054         CPUNAME=HPPA
5055         RTL_ARCH=HPPA
5056         EPM_FLAGS="-a hppa"
5057         PLATFORMID=linux_hppa
5058         ;;
5059     i*86)
5060         CPUNAME=INTEL
5061         RTL_ARCH=x86
5062         PLATFORMID=linux_x86
5063         ;;
5064     ia64)
5065         CPUNAME=IA64
5066         RTL_ARCH=IA64
5067         PLATFORMID=linux_ia64
5068         ;;
5069     mips)
5070         CPUNAME=GODSON
5071         RTL_ARCH=MIPS_EB
5072         EPM_FLAGS="-a mips"
5073         PLATFORMID=linux_mips_eb
5074         ;;
5075     mips64)
5076         CPUNAME=GODSON64
5077         RTL_ARCH=MIPS64_EB
5078         EPM_FLAGS="-a mips64"
5079         PLATFORMID=linux_mips64_eb
5080         ;;
5081     mips64el)
5082         CPUNAME=GODSON64
5083         RTL_ARCH=MIPS64_EL
5084         EPM_FLAGS="-a mips64el"
5085         PLATFORMID=linux_mips64_el
5086         ;;
5087     mipsel)
5088         CPUNAME=GODSON
5089         RTL_ARCH=MIPS_EL
5090         EPM_FLAGS="-a mipsel"
5091         PLATFORMID=linux_mips_el
5092         ;;
5093     m68k)
5094         CPUNAME=M68K
5095         RTL_ARCH=M68K
5096         PLATFORMID=linux_m68k
5097         ;;
5098     powerpc)
5099         CPUNAME=POWERPC
5100         RTL_ARCH=PowerPC
5101         PLATFORMID=linux_powerpc
5102         ;;
5103     powerpc64)
5104         CPUNAME=POWERPC64
5105         RTL_ARCH=PowerPC_64
5106         PLATFORMID=linux_powerpc64
5107         ;;
5108     powerpc64le)
5109         CPUNAME=POWERPC64
5110         RTL_ARCH=PowerPC_64_LE
5111         PLATFORMID=linux_powerpc64_le
5112         ;;
5113     sparc)
5114         CPUNAME=SPARC
5115         RTL_ARCH=SPARC
5116         PLATFORMID=linux_sparc
5117         ;;
5118     sparc64)
5119         CPUNAME=SPARC64
5120         RTL_ARCH=SPARC64
5121         PLATFORMID=linux_sparc64
5122         ;;
5123     s390)
5124         CPUNAME=S390
5125         RTL_ARCH=S390
5126         PLATFORMID=linux_s390
5127         ;;
5128     s390x)
5129         CPUNAME=S390X
5130         RTL_ARCH=S390x
5131         PLATFORMID=linux_s390x
5132         ;;
5133     x86_64)
5134         CPUNAME=X86_64
5135         RTL_ARCH=X86_64
5136         PLATFORMID=linux_x86_64
5137         ;;
5138     *)
5139         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5140         ;;
5141     esac
5142     ;;
5144 linux-android*)
5145     COM=GCC
5146     OS=ANDROID
5147     RTL_OS=Android
5148     P_SEP=:
5150     case "$host_cpu" in
5152     arm|armel)
5153         CPUNAME=ARM
5154         RTL_ARCH=ARM_EABI
5155         PLATFORMID=android_arm_eabi
5156         ;;
5157     aarch64)
5158         CPUNAME=AARCH64
5159         RTL_ARCH=AARCH64
5160         PLATFORMID=android_aarch64
5161         ;;
5162     i*86)
5163         CPUNAME=INTEL
5164         RTL_ARCH=x86
5165         PLATFORMID=android_x86
5166         ;;
5167     x86_64)
5168         CPUNAME=X86_64
5169         RTL_ARCH=X86_64
5170         PLATFORMID=android_x86_64
5171         ;;
5172     *)
5173         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5174         ;;
5175     esac
5176     ;;
5178 *netbsd*)
5179     COM=GCC
5180     OS=NETBSD
5181     RTL_OS=NetBSD
5182     P_SEP=:
5184     case "$host_cpu" in
5185     i*86)
5186         CPUNAME=INTEL
5187         RTL_ARCH=x86
5188         PLATFORMID=netbsd_x86
5189         ;;
5190     powerpc)
5191         CPUNAME=POWERPC
5192         RTL_ARCH=PowerPC
5193         PLATFORMID=netbsd_powerpc
5194         ;;
5195     sparc)
5196         CPUNAME=SPARC
5197         RTL_ARCH=SPARC
5198         PLATFORMID=netbsd_sparc
5199         ;;
5200     x86_64)
5201         CPUNAME=X86_64
5202         RTL_ARCH=X86_64
5203         PLATFORMID=netbsd_x86_64
5204         ;;
5205     *)
5206         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5207         ;;
5208     esac
5209     ;;
5211 openbsd*)
5212     COM=GCC
5213     OS=OPENBSD
5214     RTL_OS=OpenBSD
5215     P_SEP=:
5217     case "$host_cpu" in
5218     i*86)
5219         CPUNAME=INTEL
5220         RTL_ARCH=x86
5221         PLATFORMID=openbsd_x86
5222         ;;
5223     x86_64)
5224         CPUNAME=X86_64
5225         RTL_ARCH=X86_64
5226         PLATFORMID=openbsd_x86_64
5227         ;;
5228     *)
5229         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5230         ;;
5231     esac
5232     SOLARINC="$SOLARINC -I/usr/local/include"
5233     ;;
5235 solaris*)
5236     COM=GCC
5237     OS=SOLARIS
5238     RTL_OS=Solaris
5239     P_SEP=:
5241     case "$host_cpu" in
5242     i*86)
5243         CPUNAME=INTEL
5244         RTL_ARCH=x86
5245         PLATFORMID=solaris_x86
5246         ;;
5247     sparc)
5248         CPUNAME=SPARC
5249         RTL_ARCH=SPARC
5250         PLATFORMID=solaris_sparc
5251         ;;
5252     sparc64)
5253         CPUNAME=SPARC64
5254         RTL_ARCH=SPARC64
5255         PLATFORMID=solaris_sparc64
5256         ;;
5257     *)
5258         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5259         ;;
5260     esac
5261     SOLARINC="$SOLARINC -I/usr/local/include"
5262     ;;
5264 emscripten*)
5265     COM=GCC
5266     OS=EMSCRIPTEN
5267     RTL_OS=Emscripten
5268     P_SEP=:
5270     case "$host_cpu" in
5271     wasm32|wasm64)
5272         ;;
5273     *)
5274         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5275         ;;
5276     esac
5277     CPUNAME=INTEL
5278     RTL_ARCH=x86
5279     PLATFORMID=linux_x86
5280     ;;
5283     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5284     ;;
5285 esac
5287 if test "$with_x" = "no"; then
5288     AC_MSG_ERROR([Use --disable-gui instead. How can we get rid of this option? No idea where it comes from.])
5291 DISABLE_GUI=""
5292 if test "$enable_gui" = "no"; then
5293     if test "$using_x11" != yes; then
5294         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5295     fi
5296     USING_X11=
5297     DISABLE_GUI=TRUE
5298 else
5299     AC_DEFINE(HAVE_FEATURE_UI)
5301 AC_SUBST(DISABLE_GUI)
5303 if test "$using_x11" = yes; then
5304     if test "$USING_X11" = TRUE; then
5305         AC_DEFINE(USING_X11)
5306     else
5307         disable_x11_tests
5308     fi
5309 else
5310     if test "$USING_X11" = TRUE; then
5311         AC_MSG_ERROR([Platform doesn't support X11 (\$using_x11), but \$USING_X11 is set!])
5312     fi
5315 WORKDIR="${BUILDDIR}/workdir"
5316 INSTDIR="${BUILDDIR}/instdir"
5317 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5318 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5319 SOLARINC="-I$SRC_ROOT/include $SOLARINC"
5320 AC_SUBST(COM)
5321 AC_SUBST(CPUNAME)
5322 AC_SUBST(RTL_OS)
5323 AC_SUBST(RTL_ARCH)
5324 AC_SUBST(EPM_FLAGS)
5325 AC_SUBST(USING_X11)
5326 AC_SUBST([INSTDIR])
5327 AC_SUBST([INSTROOT])
5328 AC_SUBST([INSTROOTBASE])
5329 AC_SUBST(OS)
5330 AC_SUBST(P_SEP)
5331 AC_SUBST(WORKDIR)
5332 AC_SUBST(PLATFORMID)
5333 AC_SUBST(WINDOWS_X64)
5334 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5336 if test "$OS" = WNT -a "$COM" = MSC; then
5337     case "$CPUNAME" in
5338     INTEL) CPPU_ENV=msci ;;
5339     X86_64) CPPU_ENV=mscx ;;
5340     AARCH64) CPPU_ENV=msca ;;
5341     *)
5342         AC_MSG_ERROR([Unknown \$CPUNAME '$CPUNAME' for $OS / $COM"])
5343         ;;
5344     esac
5345 else
5346     CPPU_ENV=gcc3
5348 AC_SUBST(CPPU_ENV)
5350 dnl ===================================================================
5351 dnl Test which package format to use
5352 dnl ===================================================================
5353 AC_MSG_CHECKING([which package format to use])
5354 if test -n "$with_package_format" -a "$with_package_format" != no; then
5355     for i in $with_package_format; do
5356         case "$i" in
5357         aix | bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5358             ;;
5359         *)
5360             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5361 aix - AIX software distribution
5362 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5363 deb - Debian software distribution
5364 pkg - Solaris software distribution
5365 rpm - RedHat software distribution
5367 LibreOffice additionally supports:
5368 archive - .tar.gz or .zip
5369 dmg - macOS .dmg
5370 installed - installation tree
5371 msi - Windows .msi
5372         ])
5373             ;;
5374         esac
5375     done
5376     # fakeroot is needed to ensure correct file ownerships/permissions
5377     # inside deb packages and tar archives created on Linux and Solaris.
5378     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5379         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5380         if test "$FAKEROOT" = "no"; then
5381             AC_MSG_ERROR(
5382                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5383         fi
5384     fi
5385     PKGFORMAT="$with_package_format"
5386     AC_MSG_RESULT([$PKGFORMAT])
5387 else
5388     PKGFORMAT=
5389     AC_MSG_RESULT([none])
5391 AC_SUBST(PKGFORMAT)
5393 dnl ===================================================================
5394 dnl handle help related options
5396 dnl If you change help related options, please update README.help
5397 dnl ===================================================================
5399 ENABLE_HTMLHELP=
5400 HELP_OMINDEX_PAGE=
5401 HELP_ONLINE=
5402 WITH_HELPPACKS=
5404 AC_MSG_CHECKING([which help to build])
5405 if test -n "$with_help" -a "$with_help" != "no"; then
5406     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5407     BUILD_TYPE="$BUILD_TYPE HELP"
5408     case "$with_help" in
5409     "html")
5410         ENABLE_HTMLHELP=TRUE
5411         WITH_HELPPACKS=TRUE
5412         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5413         AC_MSG_RESULT([HTML (local)])
5414         ;;
5415     "online")
5416         ENABLE_HTMLHELP=TRUE
5417         HELP_ONLINE=TRUE
5418         AC_MSG_RESULT([HTML (online)])
5419         ;;
5420     yes)
5421         WITH_HELPPACKS=TRUE
5422         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5423         AC_MSG_RESULT([XML (local)])
5424         ;;
5425     *)
5426         AC_MSG_ERROR([Unknown --with-help=$with_help])
5427         ;;
5428     esac
5429 else
5430     AC_MSG_RESULT([no])
5433 AC_MSG_CHECKING([if we need to build the help index tooling])
5434 if test "$with_help" = yes -o "$enable_extension_integration" != no; then
5435     BUILD_TYPE="$BUILD_TYPE HELPTOOLS"
5436     AC_MSG_RESULT([yes])
5437 else
5438     AC_MSG_RESULT([no])
5441 AC_MSG_CHECKING([whether to enable xapian-omega support for online help])
5442 if test -n "$with_omindex" -a "$with_omindex" != "no"; then
5443     if test "$HELP_ONLINE" != TRUE; then
5444         AC_MSG_ERROR([Can't build xapian-omega index without --help=online])
5445     fi
5446     case "$with_omindex" in
5447     "server")
5448         HELP_OMINDEX_PAGE=TRUE
5449         AC_MSG_RESULT([SERVER])
5450         ;;
5451     "noxap")
5452         AC_MSG_RESULT([NOXAP])
5453         ;;
5454     *)
5455         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5456         ;;
5457     esac
5458 else
5459     AC_MSG_RESULT([no])
5462 AC_MSG_CHECKING([whether to include the XML-help support])
5463 if test "$enable_xmlhelp" = yes; then
5464     BUILD_TYPE="$BUILD_TYPE XMLHELP"
5465     AC_DEFINE(HAVE_FEATURE_XMLHELP)
5466     AC_MSG_RESULT([yes])
5467 else
5468     if test "$with_help" = yes; then
5469         add_warning "Building the XML help, but LO with disabled xmlhelp support. Generated help can't be accessed from this LO build!"
5470     fi
5471     AC_MSG_RESULT([no])
5474 dnl Test whether to integrate helppacks into the product's installer
5475 AC_MSG_CHECKING([for helppack integration])
5476 if test -z "$WITH_HELPPACKS" -o "$with_helppack_integration" = no; then
5477     AC_MSG_RESULT([no integration])
5478 else
5479     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
5480     AC_MSG_RESULT([integration])
5483 AC_SUBST([ENABLE_HTMLHELP])
5484 AC_SUBST([HELP_OMINDEX_PAGE])
5485 AC_SUBST([HELP_ONLINE])
5486 # WITH_HELPPACKS is used only in configure
5488 dnl ===================================================================
5489 dnl Set up a different compiler to produce tools to run on the build
5490 dnl machine when doing cross-compilation
5491 dnl ===================================================================
5493 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5494 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5495 if test "$cross_compiling" = "yes"; then
5496     AC_MSG_CHECKING([for BUILD platform configuration])
5497     echo
5498     rm -rf CONF-FOR-BUILD config_build.mk
5499     mkdir CONF-FOR-BUILD
5500     # Here must be listed all files needed when running the configure script. In particular, also
5501     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5502     # keep them in the same order as there.
5503     (cd $SRC_ROOT && tar cf - \
5504         config.guess \
5505         bin/get_config_variables \
5506         solenv/bin/getcompver.awk \
5507         solenv/inc/langlist.mk \
5508         download.lst \
5509         config_host.mk.in \
5510         config_host_lang.mk.in \
5511         Makefile.in \
5512         lo.xcent.in \
5513         bin/bffvalidator.sh.in \
5514         bin/odfvalidator.sh.in \
5515         bin/officeotron.sh.in \
5516         hardened_runtime.xcent.in \
5517         instsetoo_native/util/openoffice.lst.in \
5518         config_host/*.in \
5519         sysui/desktop/macosx/Info.plist.in \
5520         .vscode/vs-code-template.code-workspace.in \
5521         ) \
5522     | (cd CONF-FOR-BUILD && tar xf -)
5523     cp configure CONF-FOR-BUILD
5524     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5525     (
5526     unset COM USING_X11 OS CPUNAME
5527     unset CC CXX SYSBASE CFLAGS
5528     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5529     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5530     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5531     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5532     if test -n "$CC_FOR_BUILD"; then
5533         export CC="$CC_FOR_BUILD"
5534         CC_BASE=`first_arg_basename "$CC"`
5535     fi
5536     if test -n "$CXX_FOR_BUILD"; then
5537         export CXX="$CXX_FOR_BUILD"
5538         CXX_BASE=`first_arg_basename "$CXX"`
5539     fi
5540     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5541     cd CONF-FOR-BUILD
5543     # Handle host configuration, which affects the cross-toolset too
5544     sub_conf_opts=""
5545     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5546     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5547     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5548     if test -n "$ENABLE_JAVA"; then
5549         case "$_os" in
5550         iOS) sub_conf_opts="$sub_conf_opts --without-java" ;; # force it off, like it used to be
5551         Android)
5552             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5553             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5554             ;;
5555         *)
5556             if test -z "$with_jdk_home"; then
5557                 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.])
5558             fi
5559             ;;
5560         esac
5561     else
5562         sub_conf_opts="$sub_conf_opts --without-java"
5563     fi
5564     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5565     test "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" && sub_conf_opts="$sub_conf_opts --with-system-icu"
5566     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no --disable-database-connectivity"
5567     test -n "$with_help" -a "$with_help" != "no" && sub_conf_opts="$sub_conf_opts --with-help=$with_help"
5568     test "$enable_extensions" = yes || sub_conf_opts="$sub_conf_opts --disable-extensions"
5569     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5571     # Don't bother having configure look for stuff not needed for the build platform anyway
5572     sub_conf_defaults=" \
5573         --build="$build_alias" \
5574         --disable-cairo-canvas \
5575         --disable-cups \
5576         --disable-firebird-sdbc \
5577         --disable-gpgmepp \
5578         --disable-gstreamer-1-0 \
5579         --disable-gtk3 \
5580         --disable-gtk4 \
5581         --disable-mariadb-sdbc \
5582         --disable-nss \
5583         --disable-online-update \
5584         --disable-opencl \
5585         --disable-pdfimport \
5586         --disable-postgresql-sdbc \
5587         --disable-skia \
5588         --enable-icecream="$enable_icecream" \
5589         --without-doxygen \
5590         --without-webdav \
5591         --with-parallelism="$with_parallelism" \
5592         --with-theme="$with_theme" \
5593         --with-tls=openssl \
5595     echo "    Running CONF-FOR-BUILD/configure" $sub_conf_defaults $sub_conf_opts $with_build_platform_configure_options --srcdir=$srcdir
5596     ./configure \
5597         $sub_conf_defaults \
5598         $sub_conf_opts \
5599         $with_build_platform_configure_options \
5600         --srcdir=$srcdir \
5601         2>&1 | sed -e 's/^/    /'
5602     if test [${PIPESTATUS[0]}] -ne 0; then
5603         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5604     fi
5606     # filter permitted build targets
5607     PERMITTED_BUILD_TARGETS="
5608         AVMEDIA
5609         BOOST
5610         CAIRO
5611         CLUCENE
5612         CUCKOO
5613         CURL
5614         DBCONNECTIVITY
5615         DESKTOP
5616         DYNLOADING
5617         EPOXY
5618         EXPAT
5619         GLM
5620         GRAPHITE
5621         HARFBUZZ
5622         HELPTOOLS
5623         ICU
5624         LCMS2
5625         LIBJPEG_TURBO
5626         LIBLANGTAG
5627         LibO
5628         LIBFFI
5629         LIBPN
5630         LIBXML2
5631         LIBXSLT
5632         MDDS
5633         NATIVE
5634         OPENSSL
5635         ORCUS
5636         PYTHON
5637         SCRIPTING
5638         ZLIB
5640     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5641     # newlined lists, to use grep as a filter
5642     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5643     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5644     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5645     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5647     cp config_host.mk ../config_build.mk
5648     cp config_host_lang.mk ../config_build_lang.mk
5649     mv config.log ../config.Build.log
5650     mkdir -p ../config_build
5651     mv config_host/*.h ../config_build
5652     test -f "$WARNINGS_FILE" && mv "$WARNINGS_FILE" "../$WARNINGS_FILE_FOR_BUILD"
5654     # all these will get a _FOR_BUILD postfix
5655     DIRECT_FOR_BUILD_SETTINGS="
5656         CC
5657         CPPU_ENV
5658         CXX
5659         ILIB
5660         JAVA_HOME
5661         JAVAIFLAGS
5662         JDK
5663         LIBO_BIN_FOLDER
5664         LIBO_LIB_FOLDER
5665         LIBO_URE_LIB_FOLDER
5666         LIBO_URE_MISC_FOLDER
5667         OS
5668         SDKDIRNAME
5669         SYSTEM_LIBXML
5670         SYSTEM_LIBXSLT
5672     # these overwrite host config with build config
5673     OVERWRITING_SETTINGS="
5674         ANT
5675         ANT_HOME
5676         ANT_LIB
5677         HSQLDB_USE_JDBC_4_1
5678         JAVA_CLASSPATH_NOT_SET
5679         JAVA_SOURCE_VER
5680         JAVA_TARGET_VER
5681         JAVACFLAGS
5682         JAVACOMPILER
5683         JAVADOC
5684         JAVADOCISGJDOC
5686     # these need some special handling
5687     EXTRA_HANDLED_SETTINGS="
5688         INSTDIR
5689         INSTROOT
5690         PATH
5691         WORKDIR
5693     OLD_PATH=$PATH
5694     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
5695     BUILD_PATH=$PATH
5696     PATH=$OLD_PATH
5698     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
5699     echo "$line" >>build-config
5701     for V in $DIRECT_FOR_BUILD_SETTINGS; do
5702         VV='$'$V
5703         VV=`eval "echo $VV"`
5704         if test -n "$VV"; then
5705             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
5706             echo "$line" >>build-config
5707         fi
5708     done
5710     for V in $OVERWRITING_SETTINGS; do
5711         VV='$'$V
5712         VV=`eval "echo $VV"`
5713         if test -n "$VV"; then
5714             line=${V}='${'${V}:-$VV'}'
5715             echo "$line" >>build-config
5716         fi
5717     done
5719     for V in INSTDIR INSTROOT WORKDIR; do
5720         VV='$'$V
5721         VV=`eval "echo $VV"`
5722         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
5723         if test -n "$VV"; then
5724             line="${V}_FOR_BUILD='$VV'"
5725             echo "$line" >>build-config
5726         fi
5727     done
5729     )
5730     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
5731     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])
5732     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
5733              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
5735     eval `cat CONF-FOR-BUILD/build-config`
5737     AC_MSG_RESULT([checking for BUILD platform configuration... done])
5739     rm -rf CONF-FOR-BUILD
5740 else
5741     OS_FOR_BUILD="$OS"
5742     CC_FOR_BUILD="$CC"
5743     CPPU_ENV_FOR_BUILD="$CPPU_ENV"
5744     CXX_FOR_BUILD="$CXX"
5745     INSTDIR_FOR_BUILD="$INSTDIR"
5746     INSTROOT_FOR_BUILD="$INSTROOT"
5747     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
5748     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
5749     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
5750     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
5751     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
5752     WORKDIR_FOR_BUILD="$WORKDIR"
5754 AC_SUBST(OS_FOR_BUILD)
5755 AC_SUBST(INSTDIR_FOR_BUILD)
5756 AC_SUBST(INSTROOT_FOR_BUILD)
5757 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
5758 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
5759 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
5760 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
5761 AC_SUBST(SDKDIRNAME_FOR_BUILD)
5762 AC_SUBST(WORKDIR_FOR_BUILD)
5763 AC_SUBST(CC_FOR_BUILD)
5764 AC_SUBST(CXX_FOR_BUILD)
5765 AC_SUBST(CPPU_ENV_FOR_BUILD)
5767 dnl ===================================================================
5768 dnl Check for syslog header
5769 dnl ===================================================================
5770 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
5772 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
5773 dnl ===================================================================
5774 AC_MSG_CHECKING([whether to turn warnings to errors])
5775 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
5776     ENABLE_WERROR="TRUE"
5777     PYTHONWARNINGS="error"
5778     AC_MSG_RESULT([yes])
5779 else
5780     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
5781         ENABLE_WERROR="TRUE"
5782         PYTHONWARNINGS="error"
5783         AC_MSG_RESULT([yes])
5784     else
5785         AC_MSG_RESULT([no])
5786     fi
5788 AC_SUBST(ENABLE_WERROR)
5789 AC_SUBST(PYTHONWARNINGS)
5791 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
5792 dnl ===================================================================
5793 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
5794 if test -z "$enable_assert_always_abort"; then
5795    if test "$ENABLE_DEBUG" = TRUE; then
5796        enable_assert_always_abort=yes
5797    else
5798        enable_assert_always_abort=no
5799    fi
5801 if test "$enable_assert_always_abort" = "yes"; then
5802     ASSERT_ALWAYS_ABORT="TRUE"
5803     AC_MSG_RESULT([yes])
5804 else
5805     ASSERT_ALWAYS_ABORT="FALSE"
5806     AC_MSG_RESULT([no])
5808 AC_SUBST(ASSERT_ALWAYS_ABORT)
5810 # Determine whether to use ooenv for the instdir installation
5811 # ===================================================================
5812 if test $_os != "WINNT" -a $_os != "Darwin"; then
5813     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
5814     if test -z "$enable_ooenv"; then
5815         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5816             enable_ooenv=yes
5817         else
5818             enable_ooenv=no
5819         fi
5820     fi
5821     if test "$enable_ooenv" = "no"; then
5822         AC_MSG_RESULT([no])
5823     else
5824         ENABLE_OOENV="TRUE"
5825         AC_MSG_RESULT([yes])
5826     fi
5828 AC_SUBST(ENABLE_OOENV)
5830 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
5831     if test "$enable_qt5" = "no"; then
5832         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
5833     else
5834         enable_qt5=yes
5835     fi
5838 dnl ===================================================================
5839 dnl check for cups support
5840 dnl ===================================================================
5842 AC_MSG_CHECKING([whether to enable CUPS support])
5843 if test "$test_cups" = yes -a "$enable_cups" != no; then
5844     ENABLE_CUPS=TRUE
5845     AC_MSG_RESULT([yes])
5847     AC_MSG_CHECKING([whether cups support is present])
5848     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
5849     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
5850     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
5851         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
5852     fi
5853 else
5854     AC_MSG_RESULT([no])
5857 AC_SUBST(ENABLE_CUPS)
5859 # fontconfig checks
5860 if test "$using_freetype_fontconfig" = yes; then
5861     AC_MSG_CHECKING([which fontconfig to use])
5863 if test "$using_freetype_fontconfig" = yes -a "$test_system_fontconfig" != no; then
5864     AC_MSG_RESULT([external])
5865     PKG_CHECK_MODULES([FONTCONFIG], [fontconfig >= 2.4.1])
5866     SYSTEM_FONTCONFIG=TRUE
5867     FilterLibs "${FONTCONFIG_LIBS}"
5868     FONTCONFIG_LIBS="${filteredlibs}"
5869 elif test "$using_freetype_fontconfig" = yes; then
5870     AC_MSG_RESULT([internal])
5871     BUILD_TYPE="$BUILD_TYPE FONTCONFIG"
5873 AC_SUBST(FONTCONFIG_CFLAGS)
5874 AC_SUBST(FONTCONFIG_LIBS)
5875 AC_SUBST([SYSTEM_FONTCONFIG])
5877 dnl whether to find & fetch external tarballs?
5878 dnl ===================================================================
5879 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
5880    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
5881        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
5882    else
5883        TARFILE_LOCATION="$LODE_HOME/ext_tar"
5884    fi
5886 if test -z "$TARFILE_LOCATION"; then
5887     if test -d "$SRC_ROOT/src" ; then
5888         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
5889         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
5890     fi
5891     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
5892 else
5893     AbsolutePath "$TARFILE_LOCATION"
5894     PathFormat "${absolute_path}"
5895     TARFILE_LOCATION="${formatted_path}"
5897 AC_SUBST(TARFILE_LOCATION)
5899 AC_MSG_CHECKING([whether we want to fetch tarballs])
5900 if test "$enable_fetch_external" != "no"; then
5901     if test "$with_all_tarballs" = "yes"; then
5902         AC_MSG_RESULT([yes, all of them])
5903         DO_FETCH_TARBALLS="ALL"
5904     else
5905         AC_MSG_RESULT([yes, if we use them])
5906         DO_FETCH_TARBALLS="TRUE"
5907     fi
5908 else
5909     AC_MSG_RESULT([no])
5910     DO_FETCH_TARBALLS=
5912 AC_SUBST(DO_FETCH_TARBALLS)
5914 dnl Test whether to include MySpell dictionaries
5915 dnl ===================================================================
5916 AC_MSG_CHECKING([whether to include MySpell dictionaries])
5917 if test "$with_myspell_dicts" = "yes"; then
5918     AC_MSG_RESULT([yes])
5919     WITH_MYSPELL_DICTS=TRUE
5920     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
5921     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
5922 else
5923     AC_MSG_RESULT([no])
5924     WITH_MYSPELL_DICTS=
5926 AC_SUBST(WITH_MYSPELL_DICTS)
5928 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
5929 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
5930     if test "$with_system_dicts" = yes; then
5931         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
5932     fi
5933     with_system_dicts=no
5936 AC_MSG_CHECKING([whether to use dicts from external paths])
5937 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
5938     AC_MSG_RESULT([yes])
5939     SYSTEM_DICTS=TRUE
5940     AC_MSG_CHECKING([for spelling dictionary directory])
5941     if test -n "$with_external_dict_dir"; then
5942         DICT_SYSTEM_DIR=file://$with_external_dict_dir
5943     else
5944         DICT_SYSTEM_DIR=file:///usr/share/hunspell
5945         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
5946             DICT_SYSTEM_DIR=file:///usr/share/myspell
5947         fi
5948     fi
5949     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
5950     AC_MSG_CHECKING([for hyphenation patterns directory])
5951     if test -n "$with_external_hyph_dir"; then
5952         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
5953     else
5954         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
5955     fi
5956     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
5957     AC_MSG_CHECKING([for thesaurus directory])
5958     if test -n "$with_external_thes_dir"; then
5959         THES_SYSTEM_DIR=file://$with_external_thes_dir
5960     else
5961         THES_SYSTEM_DIR=file:///usr/share/mythes
5962     fi
5963     AC_MSG_RESULT([$THES_SYSTEM_DIR])
5964 else
5965     AC_MSG_RESULT([no])
5966     SYSTEM_DICTS=
5968 AC_SUBST(SYSTEM_DICTS)
5969 AC_SUBST(DICT_SYSTEM_DIR)
5970 AC_SUBST(HYPH_SYSTEM_DIR)
5971 AC_SUBST(THES_SYSTEM_DIR)
5973 dnl ===================================================================
5974 dnl Precompiled headers.
5975 ENABLE_PCH=""
5976 AC_MSG_CHECKING([whether to enable pch feature])
5977 if test -z "$enable_pch"; then
5978     if test "$_os" = "WINNT"; then
5979         # Enabled by default on Windows.
5980         enable_pch=yes
5981         # never use sccache on auto-enabled PCH builds, except if requested explicitely
5982         if test -z "$enable_ccache" -a "$SCCACHE"; then
5983             CCACHE=""
5984         fi
5985     else
5986         enable_pch=no
5987     fi
5989 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
5990     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
5992 if test "$enable_pch" = "system"; then
5993     ENABLE_PCH="1"
5994     AC_MSG_RESULT([yes (system headers)])
5995 elif test "$enable_pch" = "base"; then
5996     ENABLE_PCH="2"
5997     AC_MSG_RESULT([yes (system and base headers)])
5998 elif test "$enable_pch" = "normal"; then
5999     ENABLE_PCH="3"
6000     AC_MSG_RESULT([yes (normal)])
6001 elif test "$enable_pch" = "full"; then
6002     ENABLE_PCH="4"
6003     AC_MSG_RESULT([yes (full)])
6004 elif test "$enable_pch" = "yes"; then
6005     # Pick a suitable default.
6006     if test "$GCC" = "yes"; then
6007         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
6008         # while making the PCHs larger and rebuilds more likely.
6009         ENABLE_PCH="2"
6010         AC_MSG_RESULT([yes (system and base headers)])
6011     else
6012         # With MSVC the highest level makes a significant difference,
6013         # and it was the default when there used to be no PCH levels.
6014         ENABLE_PCH="4"
6015         AC_MSG_RESULT([yes (full)])
6016     fi
6017 elif test "$enable_pch" = "no"; then
6018     AC_MSG_RESULT([no])
6019 else
6020     AC_MSG_ERROR([Unknown value for --enable-pch])
6022 AC_SUBST(ENABLE_PCH)
6023 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
6024 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
6025     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
6026     if test "$CCACHE_BIN" != "not found"; then
6027         AC_MSG_CHECKING([ccache version])
6028         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
6029         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6030         AC_MSG_RESULT([$CCACHE_VERSION])
6031         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
6032         if test "$CCACHE_NUMVER" -gt "030701"; then
6033             AC_MSG_RESULT([yes])
6034         else
6035             AC_MSG_RESULT([no (not newer than 3.7.1)])
6036             CCACHE_DEPEND_MODE=
6037         fi
6038     fi
6041 PCH_INSTANTIATE_TEMPLATES=
6042 if test -n "$ENABLE_PCH"; then
6043     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
6044     save_CFLAGS=$CFLAGS
6045     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
6046     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
6047     CFLAGS=$save_CFLAGS
6048     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
6049         AC_MSG_RESULT(yes)
6050     else
6051         AC_MSG_RESULT(no)
6052     fi
6054 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
6056 BUILDING_PCH_WITH_OBJ=
6057 if test -n "$ENABLE_PCH"; then
6058     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
6059     save_CFLAGS=$CFLAGS
6060     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
6061     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
6062     CFLAGS=$save_CFLAGS
6063     if test -n "$BUILDING_PCH_WITH_OBJ"; then
6064         AC_MSG_RESULT(yes)
6065     else
6066         AC_MSG_RESULT(no)
6067     fi
6069 AC_SUBST(BUILDING_PCH_WITH_OBJ)
6071 PCH_CODEGEN=
6072 PCH_NO_CODEGEN=
6073 fpch_prefix=
6074 if test "$COM" = MSC; then
6075     fpch_prefix="-Xclang "
6077 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6078     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-codegen])
6079     save_CFLAGS=$CFLAGS
6080     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-codegen"
6081     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6082         [
6083         PCH_CODEGEN="${fpch_prefix}-fpch-codegen"
6084         PCH_NO_CODEGEN="${fpch_prefix}-fno-pch-codegen"
6085         ],[])
6086     CFLAGS=$save_CFLAGS
6087     if test -n "$PCH_CODEGEN"; then
6088         AC_MSG_RESULT(yes)
6089     else
6090         AC_MSG_RESULT(no)
6091     fi
6093 AC_SUBST(PCH_CODEGEN)
6094 AC_SUBST(PCH_NO_CODEGEN)
6095 PCH_DEBUGINFO=
6096 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6097     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-debuginfo])
6098     save_CFLAGS=$CFLAGS
6099     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-debuginfo"
6100     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="${fpch_prefix}-fpch-debuginfo" ],[])
6101     CFLAGS=$save_CFLAGS
6102     if test -n "$PCH_DEBUGINFO"; then
6103         AC_MSG_RESULT(yes)
6104     else
6105         AC_MSG_RESULT(no)
6106     fi
6108 AC_SUBST(PCH_DEBUGINFO)
6110 TAB=`printf '\t'`
6112 AC_MSG_CHECKING([the GNU Make version])
6113 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
6114 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6115 if test "$_make_longver" -ge "038200"; then
6116     AC_MSG_RESULT([$GNUMAKE $_make_version])
6118 elif test "$_make_longver" -ge "038100"; then
6119     if test "$build_os" = "cygwin"; then
6120         AC_MSG_ERROR([failed ($GNUMAKE version >= 3.82 needed])
6121     fi
6122     AC_MSG_RESULT([$GNUMAKE $_make_version])
6124     dnl ===================================================================
6125     dnl Search all the common names for sha1sum
6126     dnl ===================================================================
6127     AC_CHECK_PROGS(SHA1SUM, sha1sum sha1 shasum openssl)
6128     if test -z "$SHA1SUM"; then
6129         AC_MSG_ERROR([install the appropriate SHA-1 checksumming program for this OS])
6130     elif test "$SHA1SUM" = "openssl"; then
6131         SHA1SUM="openssl sha1"
6132     fi
6133     AC_MSG_CHECKING([for GNU Make bug 20033])
6134     TESTGMAKEBUG20033=`mktemp -d tmp.XXXXXX`
6135     $SED -e "s/<TAB>/$TAB/g" > $TESTGMAKEBUG20033/Makefile << EOF
6136 A := \$(wildcard *.a)
6138 .PHONY: all
6139 all: \$(A:.a=.b)
6140 <TAB>@echo survived bug20033.
6142 .PHONY: setup
6143 setup:
6144 <TAB>@touch 1.a 2.a 3.a 4.a 5.a 6.a
6146 define d1
6147 @echo lala \$(1)
6148 @sleep 1
6149 endef
6151 define d2
6152 @echo tyty \$(1)
6153 @sleep 1
6154 endef
6156 %.b : %.a
6157 <TAB>\$(eval CHECKSUM := \$(word 1,\$(shell cat \$^ | $SHA1SUM))) \$(if \$(wildcard \$(CACHEDIR)/\$(CHECKSUM)),\
6158 <TAB>\$(call d1,\$(CHECKSUM)),\
6159 <TAB>\$(call d2,\$(CHECKSUM)))
6161     if test -z "`(cd $TESTGMAKEBUG20033 && $GNUMAKE setup && $GNUMAKE -j)|grep survived`"; then
6162         no_parallelism_make="YES"
6163         AC_MSG_RESULT([yes, disable parallelism])
6164     else
6165         AC_MSG_RESULT([no, keep parallelism enabled])
6166     fi
6167     rm -rf $TESTGMAKEBUG20033
6168 else
6169     AC_MSG_ERROR([failed ($GNUMAKE version >= 3.81 needed])
6172 # find if gnumake support file function
6173 AC_MSG_CHECKING([whether GNU Make supports the 'file' function])
6174 TESTGMAKEFILEFUNC="`mktemp -d -t tst.XXXXXX`"
6175 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6176     TESTGMAKEFILEFUNC=`cygpath -m $TESTGMAKEFILEFUNC`
6178 $SED -e "s/<TAB>/$TAB/" > $TESTGMAKEFILEFUNC/Makefile << EOF
6179 \$(file >test.txt,Success )
6181 .PHONY: all
6182 all:
6183 <TAB>@cat test.txt
6186 $GNUMAKE -C $TESTGMAKEFILEFUNC 2>/dev/null 1>&2
6187 if test -f $TESTGMAKEFILEFUNC/test.txt; then
6188     HAVE_GNUMAKE_FILE_FUNC=TRUE
6189     AC_MSG_RESULT([yes])
6190 else
6191     AC_MSG_RESULT([no])
6193 rm -rf $TESTGMAKEFILEFUNC
6194 AC_SUBST(HAVE_GNUMAKE_FILE_FUNC)
6196 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6197 STALE_MAKE=
6198 if test "$_make_ver_check" = ""; then
6199    STALE_MAKE=TRUE
6202 HAVE_LD_HASH_STYLE=FALSE
6203 WITH_LINKER_HASH_STYLE=
6204 AC_MSG_CHECKING([for --hash-style gcc linker support])
6205 if test "$GCC" = "yes"; then
6206     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6207         hash_styles="gnu sysv"
6208     elif test "$with_linker_hash_style" = "no"; then
6209         hash_styles=
6210     else
6211         hash_styles="$with_linker_hash_style"
6212     fi
6214     for hash_style in $hash_styles; do
6215         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6216         hash_style_ldflags_save=$LDFLAGS
6217         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6219         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6220             [
6221 #include <stdio.h>
6222             ],[
6223 printf ("");
6224             ])],
6225             [
6226                   HAVE_LD_HASH_STYLE=TRUE
6227                   WITH_LINKER_HASH_STYLE=$hash_style
6228             ],
6229             [HAVE_LD_HASH_STYLE=FALSE],
6230             [HAVE_LD_HASH_STYLE=FALSE])
6231         LDFLAGS=$hash_style_ldflags_save
6232     done
6234     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6235         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6236     else
6237         AC_MSG_RESULT( no )
6238     fi
6239     LDFLAGS=$hash_style_ldflags_save
6240 else
6241     AC_MSG_RESULT( no )
6243 AC_SUBST(HAVE_LD_HASH_STYLE)
6244 AC_SUBST(WITH_LINKER_HASH_STYLE)
6246 dnl ===================================================================
6247 dnl Check whether there's a Perl version available.
6248 dnl ===================================================================
6249 if test -z "$with_perl_home"; then
6250     AC_PATH_PROG(PERL, perl)
6251 else
6252     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6253     _perl_path="$with_perl_home/bin/perl"
6254     if test -x "$_perl_path"; then
6255         PERL=$_perl_path
6256     else
6257         AC_MSG_ERROR([$_perl_path not found])
6258     fi
6261 dnl ===================================================================
6262 dnl Testing for Perl version 5 or greater.
6263 dnl $] is the Perl version variable, it is returned as an integer
6264 dnl ===================================================================
6265 if test "$PERL"; then
6266     AC_MSG_CHECKING([the Perl version])
6267     ${PERL} -e "exit($]);"
6268     _perl_version=$?
6269     if test "$_perl_version" -lt 5; then
6270         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6271     fi
6272     AC_MSG_RESULT([Perl $_perl_version])
6273 else
6274     AC_MSG_ERROR([Perl not found, install Perl 5])
6277 dnl ===================================================================
6278 dnl Testing for required Perl modules
6279 dnl ===================================================================
6281 AC_MSG_CHECKING([for required Perl modules])
6282 perl_use_string="use Cwd ; use Digest::MD5"
6283 if test "$_os" = "WINNT"; then
6284     if test -n "$PKGFORMAT"; then
6285         for i in $PKGFORMAT; do
6286             case "$i" in
6287             msi)
6288                 # for getting fonts versions to use in MSI
6289                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6290                 ;;
6291             esac
6292         done
6293     fi
6295 if test "$with_system_hsqldb" = "yes"; then
6296     perl_use_string="$perl_use_string ; use Archive::Zip"
6298 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6299     # OpenSSL needs that to build
6300     perl_use_string="$perl_use_string ; use FindBin"
6302 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6303     AC_MSG_RESULT([all modules found])
6304 else
6305     AC_MSG_RESULT([failed to find some modules])
6306     # Find out which modules are missing.
6307     for i in $perl_use_string; do
6308         if test "$i" != "use" -a "$i" != ";"; then
6309             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6310                 missing_perl_modules="$missing_perl_modules $i"
6311             fi
6312         fi
6313     done
6314     AC_MSG_ERROR([
6315     The missing Perl modules are: $missing_perl_modules
6316     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6319 dnl ===================================================================
6320 dnl Check for pkg-config
6321 dnl ===================================================================
6322 if test "$_os" != "WINNT"; then
6323     PKG_PROG_PKG_CONFIG
6326 if test "$_os" != "WINNT"; then
6328     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6329     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6330     # explicitly. Or put /path/to/compiler in PATH yourself.
6332     # Use wrappers for LTO
6333     if test "$ENABLE_LTO" = "TRUE" -a "$COM_IS_CLANG" != "TRUE"; then
6334         AC_CHECK_TOOL(AR,gcc-ar)
6335         AC_CHECK_TOOL(NM,gcc-nm)
6336         AC_CHECK_TOOL(RANLIB,gcc-ranlib)
6337     else
6338         AC_CHECK_TOOL(AR,ar)
6339         AC_CHECK_TOOL(NM,nm)
6340         AC_CHECK_TOOL(RANLIB,ranlib)
6341     fi
6342     AC_CHECK_TOOL(OBJDUMP,objdump)
6343     AC_CHECK_TOOL(READELF,readelf)
6344     AC_CHECK_TOOL(STRIP,strip)
6346 AC_SUBST(AR)
6347 AC_SUBST(LD)
6348 AC_SUBST(NM)
6349 AC_SUBST(OBJDUMP)
6350 AC_SUBST(PKG_CONFIG)
6351 AC_SUBST(PKG_CONFIG_PATH)
6352 AC_SUBST(PKG_CONFIG_LIBDIR)
6353 AC_SUBST(RANLIB)
6354 AC_SUBST(READELF)
6355 AC_SUBST(STRIP)
6357 dnl ===================================================================
6358 dnl pkg-config checks on macOS
6359 dnl ===================================================================
6361 if test $_os = Darwin; then
6362     AC_MSG_CHECKING([for bogus pkg-config])
6363     if test -n "$PKG_CONFIG"; then
6364         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6365             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6366         else
6367             if test "$enable_bogus_pkg_config" = "yes"; then
6368                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6369             else
6370                 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.])
6371             fi
6372         fi
6373     else
6374         AC_MSG_RESULT([no, good])
6375     fi
6378 find_csc()
6380     # Return value: $csctest
6382     unset csctest
6384     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client/InstallPath"
6385     if test -n "$regvalue"; then
6386         csctest=$regvalue
6387         return
6388     fi
6391 find_al()
6393     # Return value: $altest
6395     unset altest
6397     # We need this check to detect 4.6.1 or above.
6398     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6399         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools/InstallationFolder"
6400         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6401             altest=$regvalue
6402             return
6403         fi
6404     done
6406     for x in `ls /proc/registry32/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft\ SDKs/Windows`; do
6407         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools/InstallationFolder"
6408         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6409             altest=$regvalue
6410             return
6411         fi
6412     done
6415 find_dotnetsdk46()
6417     unset frametest
6419     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6; do
6420         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder"
6421         if test -n "$regvalue"; then
6422             frametest=$regvalue
6423             return
6424         fi
6425     done
6428 find_winsdk_version()
6430     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6431     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6433     unset winsdktest winsdkbinsubdir winsdklibsubdir
6435     case "$1" in
6436     8.0|8.0A)
6437         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
6438         if test -n "$regvalue"; then
6439             winsdktest=$regvalue
6440             winsdklibsubdir=win8
6441             return
6442         fi
6443         ;;
6444     8.1|8.1A)
6445         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot81"
6446         if test -n "$regvalue"; then
6447             winsdktest=$regvalue
6448             winsdklibsubdir=winv6.3
6449             return
6450         fi
6451         ;;
6452     10.0)
6453         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/InstallationFolder"
6454         if test -n "$regvalue"; then
6455             winsdktest=$regvalue
6456             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion"
6457             if test -n "$regvalue"; then
6458                 winsdkbinsubdir="$regvalue".0
6459                 winsdklibsubdir=$winsdkbinsubdir
6460                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6461                 local tmppath_unix=$(cygpath -u "$tmppath")
6462                 # test exist the SDK path
6463                 if test -d "$tmppath_unix"; then
6464                    # when path is convertible to a short path then path is okay
6465                    cygpath -d "$tmppath" >/dev/null 2>&1
6466                    if test $? -ne 0; then
6467                       AC_MSG_ERROR([Windows SDK doesn't have a 8.3 name, see NtfsDisable8dot3NameCreation])
6468                    fi
6469                 else
6470                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6471                 fi
6472             fi
6473             return
6474         fi
6475         ;;
6476     esac
6479 find_winsdk()
6481     # Return value: From find_winsdk_version
6483     unset winsdktest
6485     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6486         find_winsdk_version $ver
6487         if test -n "$winsdktest"; then
6488             return
6489         fi
6490     done
6493 find_msms()
6495     # Return value: $msmdir
6497     AC_MSG_CHECKING([for MSVC merge modules directory])
6498     local my_msm_files
6499     local my_msm_dir
6501     dnl Order my_msm_files in increasing order. Then check the directories returned
6502     dnl by ls in an inner loop; assuming they are also ordered in increasing order,
6503     dnl the result will be the highest MSM version found in the highest directory.
6505     case "$VCVER" in
6506         16.0 | 17.0)
6507         my_msm_files="Microsoft_VC141_CRT_x86.msm Microsoft_VC142_CRT_x86.msm ${my_msm_files}"
6508         ;;
6509     esac
6510     for f in $my_msm_files; do
6511         echo "$as_me:$LINENO: searching for $f" >&5
6512     done
6514     msmdir=
6515     case "$VCVER" in
6516     16.0 | 17.0)
6517         for f in ${my_msm_files}; do
6518             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6519                 my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6520                 echo "$as_me:$LINENO: looking for $my_msm_dir${f}])" >&5
6521                 if test -e "$my_msm_dir${f}"; then
6522                     msmdir=$my_msm_dir
6523                 fi
6524             done
6525         done
6526         ;;
6527     esac
6529     if test -n "$msmdir"; then
6530         msmdir=`cygpath -m "$msmdir"`
6531         AC_MSG_RESULT([$msmdir])
6532     else
6533         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6534             AC_MSG_FAILURE([not found])
6535         else
6536             AC_MSG_WARN([not found (check config.log)])
6537             add_warning "MSM none of ${my_msm_files} found"
6538         fi
6539     fi
6542 find_msvc_x64_dlls()
6544     # Return value: $msvcdllpath, $msvcdlls
6546     AC_MSG_CHECKING([for MSVC x64 DLL path])
6548     dnl Order crtver in increasing order. Then check the directories returned by
6549     dnl ls in an inner loop; assuming they are also ordered in increasing order,
6550     dnl the result will be the highest CRT version found in the highest directory.
6552     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6553     case "$VCVER" in
6554     16.0 | 17.0)
6555         for crtver in 141 142 143; do
6556             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6557                 echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT" >&5
6558                 if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"; then
6559                     msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"
6560                 fi
6561             done
6562         done
6563         ;;
6564     esac
6565     AC_MSG_RESULT([$msvcdllpath])
6566     AC_MSG_CHECKING([for MSVC x64 DLLs])
6567     msvcdlls="msvcp140.dll vcruntime140.dll"
6568     for dll in $msvcdlls; do
6569         if ! test -f "$msvcdllpath/$dll"; then
6570             AC_MSG_FAILURE([missing $dll])
6571         fi
6572     done
6573     AC_MSG_RESULT([found all ($msvcdlls)])
6576 dnl =========================================
6577 dnl Check for the Windows  SDK.
6578 dnl =========================================
6579 if test "$_os" = "WINNT"; then
6580     AC_MSG_CHECKING([for Windows SDK])
6581     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6582         find_winsdk
6583         WINDOWS_SDK_HOME=$winsdktest
6585         # normalize if found
6586         if test -n "$WINDOWS_SDK_HOME"; then
6587             WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
6588             WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
6589         fi
6591         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6592     fi
6594     if test -n "$WINDOWS_SDK_HOME"; then
6595         # Remove a possible trailing backslash
6596         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6598         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6599              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6600              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6601             have_windows_sdk_headers=yes
6602         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6603              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6604              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6605             have_windows_sdk_headers=yes
6606         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6607              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6608              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6609             have_windows_sdk_headers=yes
6610         else
6611             have_windows_sdk_headers=no
6612         fi
6614         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6615             have_windows_sdk_libs=yes
6616         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6617             have_windows_sdk_libs=yes
6618         else
6619             have_windows_sdk_libs=no
6620         fi
6622         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6623             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6624 the  Windows SDK are installed.])
6625         fi
6626     fi
6628     if test -z "$WINDOWS_SDK_HOME"; then
6629         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6630     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6631         WINDOWS_SDK_VERSION=80
6632         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6633     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6634         WINDOWS_SDK_VERSION=81
6635         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6636     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6637         WINDOWS_SDK_VERSION=10
6638         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6639     else
6640         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6641     fi
6642     PathFormat "$WINDOWS_SDK_HOME"
6643     WINDOWS_SDK_HOME="$formatted_path"
6644     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6645     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6646         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6647         if test -d "$WINDOWS_SDK_HOME/include/um"; then
6648             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6649         elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then
6650             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6651         fi
6652     fi
6654     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6655     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6656     dnl but not in v8.0), so allow this to be overridden with a
6657     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6658     dnl and configuration error if no WiLangId.vbs is found would arguably be
6659     dnl better, but I do not know under which conditions exactly it is needed by
6660     dnl msiglobal.pm:
6661     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6662         WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6663         WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6664         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6665             WINDOWS_SDK_WILANGID="${WINDOWS_SDK_HOME}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6666             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6667         fi
6668         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6669             WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6670             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6671         fi
6672         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6673             WINDOWS_SDK_WILANGID=$(cygpath -sm "C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs")
6674             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6675         fi
6676     fi
6677     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6678         if test -n "$with_package_format" -a "$with_package_format" != no; then
6679             for i in "$with_package_format"; do
6680                 if test "$i" = "msi"; then
6681                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6682                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6683                     fi
6684                 fi
6685             done
6686         fi
6687     fi
6689 AC_SUBST(WINDOWS_SDK_HOME)
6690 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6691 AC_SUBST(WINDOWS_SDK_VERSION)
6692 AC_SUBST(WINDOWS_SDK_WILANGID)
6694 if test "$build_os" = "cygwin"; then
6695     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6696     dnl dir, it also determines that dir's path w/o an arch segment if any,
6697     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6698     AC_MSG_CHECKING([for midl.exe])
6700     find_winsdk
6701     if test -n "$winsdkbinsubdir" \
6702         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6703     then
6704         MIDL_PATH=$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6705         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin/$winsdkbinsubdir
6706     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6707         MIDL_PATH=$winsdktest/Bin/$WIN_BUILD_ARCH
6708         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6709     elif test -f "$winsdktest/Bin/midl.exe"; then
6710         MIDL_PATH=$winsdktest/Bin
6711         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6712     fi
6713     if test ! -f "$MIDL_PATH/midl.exe"; then
6714         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6715     else
6716         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6717     fi
6719     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6720     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6722     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6723          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6724          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6725          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6726     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6727          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6728          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6729          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
6730     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
6731          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
6732          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6733          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
6734     else
6735         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
6736     fi
6738     dnl Check csc.exe
6739     AC_MSG_CHECKING([for csc.exe])
6740     find_csc
6741     if test -f "$csctest/csc.exe"; then
6742         CSC_PATH="$csctest"
6743     fi
6744     if test ! -f "$CSC_PATH/csc.exe"; then
6745         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
6746     else
6747         AC_MSG_RESULT([$CSC_PATH/csc.exe])
6748     fi
6750     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
6752     dnl Check al.exe
6753     AC_MSG_CHECKING([for al.exe])
6754     find_winsdk
6755     if test -n "$winsdkbinsubdir" \
6756         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
6757     then
6758         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
6759     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/al.exe"; then
6760         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
6761     elif test -f "$winsdktest/Bin/al.exe"; then
6762         AL_PATH="$winsdktest/Bin"
6763     fi
6765     if test -z "$AL_PATH"; then
6766         find_al
6767         if test -f "$altest/bin/al.exe"; then
6768             AL_PATH="$altest/bin"
6769         elif test -f "$altest/al.exe"; then
6770             AL_PATH="$altest"
6771         fi
6772     fi
6773     if test ! -f "$AL_PATH/al.exe"; then
6774         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
6775     else
6776         AC_MSG_RESULT([$AL_PATH/al.exe])
6777     fi
6779     AL_PATH=`win_short_path_for_make "$AL_PATH"`
6781     dnl Check mscoree.lib / .NET Framework dir
6782     AC_MSG_CHECKING(.NET Framework)
6783     find_dotnetsdk46
6784     PathFormat "$frametest"
6785     frametest="$formatted_path"
6786     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6787         DOTNET_FRAMEWORK_HOME="$frametest"
6788     else
6789         find_winsdk
6790         if test -f "$winsdktest/lib/mscoree.lib" -o -f "$winsdktest/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6791             DOTNET_FRAMEWORK_HOME="$winsdktest"
6792         fi
6793     fi
6794     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
6795         AC_MSG_ERROR([mscoree.lib not found])
6796     fi
6797     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
6799     PathFormat "$MIDL_PATH"
6800     MIDL_PATH="$formatted_path"
6802     PathFormat "$AL_PATH"
6803     AL_PATH="$formatted_path"
6805     PathFormat "$DOTNET_FRAMEWORK_HOME"
6806     DOTNET_FRAMEWORK_HOME="$formatted_path"
6808     PathFormat "$CSC_PATH"
6809     CSC_PATH="$formatted_path"
6812 dnl ===================================================================
6813 dnl Testing for C++ compiler and version...
6814 dnl ===================================================================
6816 if test "$_os" != "WINNT"; then
6817     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that
6818     save_CXXFLAGS=$CXXFLAGS
6819     AC_PROG_CXX
6820     CXXFLAGS=$save_CXXFLAGS
6821     if test -z "$CXX_BASE"; then
6822         CXX_BASE=`first_arg_basename "$CXX"`
6823     fi
6826 dnl check for GNU C++ compiler version
6827 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
6828     AC_MSG_CHECKING([the GNU C++ compiler version])
6830     _gpp_version=`$CXX -dumpversion`
6831     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
6833     if test "$_gpp_majmin" -lt "700"; then
6834         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
6835     else
6836         AC_MSG_RESULT([ok (g++ $_gpp_version)])
6837     fi
6839     dnl see https://code.google.com/p/android/issues/detail?id=41770
6840         glibcxx_threads=no
6841         AC_LANG_PUSH([C++])
6842         AC_REQUIRE_CPP
6843         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
6844         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
6845             #include <bits/c++config.h>]],[[
6846             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
6847             && !defined(_GLIBCXX__PTHREADS) \
6848             && !defined(_GLIBCXX_HAS_GTHREADS)
6849             choke me
6850             #endif
6851         ]])],[AC_MSG_RESULT([yes])
6852         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
6853         AC_LANG_POP([C++])
6854         if test $glibcxx_threads = yes; then
6855             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
6856         fi
6858 AC_SUBST(BOOST_CXXFLAGS)
6861 # prefx CXX with ccache if needed
6863 if test "$CCACHE" != ""; then
6864     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
6865     AC_LANG_PUSH([C++])
6866     save_CXXFLAGS=$CXXFLAGS
6867     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
6868     # msvc does not fail on unknown options, check stdout
6869     if test "$COM" = MSC; then
6870         CXXFLAGS="$CXXFLAGS -nologo"
6871     fi
6872     save_ac_cxx_werror_flag=$ac_cxx_werror_flag
6873     ac_cxx_werror_flag=yes
6874     dnl an empty program will do, we're checking the compiler flags
6875     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
6876                       [use_ccache=yes], [use_ccache=no])
6877     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
6878         AC_MSG_RESULT([yes])
6879     else
6880         CXX="$CCACHE $CXX"
6881         CXX_BASE="ccache $CXX_BASE"
6882         AC_MSG_RESULT([no])
6883     fi
6884     CXXFLAGS=$save_CXXFLAGS
6885     ac_cxx_werror_flag=$save_ac_cxx_werror_flag
6886     AC_LANG_POP([C++])
6889 dnl ===================================================================
6890 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
6891 dnl ===================================================================
6893 if test "$_os" != "WINNT"; then
6894     AC_PROG_CXXCPP
6896     dnl Check whether there's a C pre-processor.
6897     AC_PROG_CPP
6901 dnl ===================================================================
6902 dnl Find integral type sizes and alignments
6903 dnl ===================================================================
6905 if test "$_os" != "WINNT"; then
6907     AC_CHECK_SIZEOF(long)
6908     AC_CHECK_SIZEOF(short)
6909     AC_CHECK_SIZEOF(int)
6910     AC_CHECK_SIZEOF(long long)
6911     AC_CHECK_SIZEOF(double)
6912     AC_CHECK_SIZEOF(void*)
6913     AC_CHECK_SIZEOF(size_t)
6915     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
6916     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
6917     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
6918     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
6919     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
6920     SIZEOF_SIZE_T=$ac_cv_sizeof_size_t
6922     dnl Allow build without AC_CHECK_ALIGNOF, grrr
6923     m4_pattern_allow([AC_CHECK_ALIGNOF])
6924     m4_ifdef([AC_CHECK_ALIGNOF],
6925         [
6926             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
6927             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
6928             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
6929             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
6930         ],
6931         [
6932             case "$_os-$host_cpu" in
6933             Linux-i686)
6934                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6935                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6936                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
6937                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
6938                 ;;
6939             Linux-x86_64)
6940                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6941                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6942                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
6943                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
6944                 ;;
6945             *)
6946                 if test -z "$ac_cv_alignof_short" -o \
6947                         -z "$ac_cv_alignof_int" -o \
6948                         -z "$ac_cv_alignof_long" -o \
6949                         -z "$ac_cv_alignof_double"; then
6950                    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.])
6951                 fi
6952                 ;;
6953             esac
6954         ])
6956     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
6957     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
6958     if test $ac_cv_sizeof_long -eq 8; then
6959         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
6960     elif test $ac_cv_sizeof_double -eq 8; then
6961         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
6962     else
6963         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
6964     fi
6966     dnl Check for large file support
6967     AC_SYS_LARGEFILE
6968     if test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
6969         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
6970     fi
6971     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
6972         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
6973     fi
6974 else
6975     # Hardcode for MSVC
6976     SAL_TYPES_SIZEOFSHORT=2
6977     SAL_TYPES_SIZEOFINT=4
6978     SAL_TYPES_SIZEOFLONG=4
6979     SAL_TYPES_SIZEOFLONGLONG=8
6980     if test $WIN_HOST_BITS -eq 32; then
6981         SAL_TYPES_SIZEOFPOINTER=4
6982         SIZEOF_SIZE_T=4
6983     else
6984         SAL_TYPES_SIZEOFPOINTER=8
6985         SIZEOF_SIZE_T=8
6986     fi
6987     SAL_TYPES_ALIGNMENT2=2
6988     SAL_TYPES_ALIGNMENT4=4
6989     SAL_TYPES_ALIGNMENT8=8
6990     LFS_CFLAGS=''
6992 AC_SUBST(LFS_CFLAGS)
6993 AC_SUBST(SIZEOF_SIZE_T)
6995 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
6996 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
6997 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
6998 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
6999 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
7000 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
7001 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
7002 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
7004 dnl ===================================================================
7005 dnl Check whether to enable runtime optimizations
7006 dnl ===================================================================
7007 ENABLE_RUNTIME_OPTIMIZATIONS=
7008 AC_MSG_CHECKING([whether to enable runtime optimizations])
7009 if test -z "$enable_runtime_optimizations"; then
7010     for i in $CC; do
7011         case $i in
7012         -fsanitize=*)
7013             enable_runtime_optimizations=no
7014             break
7015             ;;
7016         esac
7017     done
7019 if test "$enable_runtime_optimizations" != no; then
7020     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
7021     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
7022     AC_MSG_RESULT([yes])
7023 else
7024     AC_MSG_RESULT([no])
7026 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
7028 dnl ===================================================================
7029 dnl Check if valgrind headers are available
7030 dnl ===================================================================
7031 ENABLE_VALGRIND=
7032 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
7033     prev_cppflags=$CPPFLAGS
7034     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
7035     # or where does it come from?
7036     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
7037     AC_CHECK_HEADER([valgrind/valgrind.h],
7038         [ENABLE_VALGRIND=TRUE])
7039     CPPFLAGS=$prev_cppflags
7041 AC_SUBST([ENABLE_VALGRIND])
7042 if test -z "$ENABLE_VALGRIND"; then
7043     if test "$with_valgrind" = yes; then
7044         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
7045     fi
7046     VALGRIND_CFLAGS=
7048 AC_SUBST([VALGRIND_CFLAGS])
7051 dnl ===================================================================
7052 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
7053 dnl ===================================================================
7055 # We need at least the sys/sdt.h include header.
7056 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
7057 if test "$SDT_H_FOUND" = "TRUE"; then
7058     # Found sys/sdt.h header, now make sure the c++ compiler works.
7059     # Old g++ versions had problems with probes in constructors/destructors.
7060     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
7061     AC_LANG_PUSH([C++])
7062     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
7063     #include <sys/sdt.h>
7064     class ProbeClass
7065     {
7066     private:
7067       int& ref;
7068       const char *name;
7070     public:
7071       ProbeClass(int& v, const char *n) : ref(v), name(n)
7072       {
7073         DTRACE_PROBE2(_test_, cons, name, ref);
7074       }
7076       void method(int min)
7077       {
7078         DTRACE_PROBE3(_test_, meth, name, ref, min);
7079         ref -= min;
7080       }
7082       ~ProbeClass()
7083       {
7084         DTRACE_PROBE2(_test_, dest, name, ref);
7085       }
7086     };
7087     ]],[[
7088     int i = 64;
7089     DTRACE_PROBE1(_test_, call, i);
7090     ProbeClass inst = ProbeClass(i, "call");
7091     inst.method(24);
7092     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
7093           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
7094     AC_LANG_POP([C++])
7096 AC_CONFIG_HEADERS([config_host/config_probes.h])
7098 dnl ===================================================================
7099 dnl GCC features
7100 dnl ===================================================================
7101 HAVE_GCC_STACK_CLASH_PROTECTION=
7102 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7103     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
7104     save_CFLAGS=$CFLAGS
7105     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
7106     AC_LINK_IFELSE(
7107         [AC_LANG_PROGRAM(, [[return 0;]])],
7108         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
7109         [AC_MSG_RESULT([no])])
7110     CFLAGS=$save_CFLAGS
7112     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
7113     save_CFLAGS=$CFLAGS
7114     CFLAGS="$CFLAGS -Werror -mno-avx"
7115     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
7116     CFLAGS=$save_CFLAGS
7117     if test "$HAVE_GCC_AVX" = "TRUE"; then
7118         AC_MSG_RESULT([yes])
7119     else
7120         AC_MSG_RESULT([no])
7121     fi
7123     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
7124     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7125     int v = 0;
7126     if (__sync_add_and_fetch(&v, 1) != 1 ||
7127         __sync_sub_and_fetch(&v, 1) != 0)
7128         return 1;
7129     __sync_synchronize();
7130     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
7131         v != 1)
7132         return 1;
7133     return 0;
7134 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
7135     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
7136         AC_MSG_RESULT([yes])
7137         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
7138     else
7139         AC_MSG_RESULT([no])
7140     fi
7142     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
7143     AC_LANG_PUSH([C++])
7144     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7145             #include <cstddef>
7146             #include <cxxabi.h>
7147             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
7148         ])], [
7149             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
7150             AC_MSG_RESULT([yes])
7151         ], [AC_MSG_RESULT([no])])
7152     AC_LANG_POP([C++])
7154     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
7155     AC_LANG_PUSH([C++])
7156     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7157             #include <cstddef>
7158             #include <cxxabi.h>
7159             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7160         ])], [
7161             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7162             AC_MSG_RESULT([yes])
7163         ], [AC_MSG_RESULT([no])])
7164     AC_LANG_POP([C++])
7166     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7167     AC_LANG_PUSH([C++])
7168     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7169             #include <cxxabi.h>
7170             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7171         ])], [
7172             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7173             AC_MSG_RESULT([yes])
7174         ], [AC_MSG_RESULT([no])])
7175     AC_LANG_POP([C++])
7177     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7178     AC_LANG_PUSH([C++])
7179     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7180             #include <cstddef>
7181             #include <cxxabi.h>
7182             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7183         ])], [
7184             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7185             AC_MSG_RESULT([yes])
7186         ], [AC_MSG_RESULT([no])])
7187     AC_LANG_POP([C++])
7189     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7190     AC_LANG_PUSH([C++])
7191     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7192             #include <cstddef>
7193             #include <cxxabi.h>
7194             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7195         ])], [
7196             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7197             AC_MSG_RESULT([yes])
7198         ], [AC_MSG_RESULT([no])])
7199     AC_LANG_POP([C++])
7201     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7202     AC_LANG_PUSH([C++])
7203     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7204             #include <cxxabi.h>
7205             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7206         ])], [
7207             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7208             AC_MSG_RESULT([yes])
7209         ], [AC_MSG_RESULT([no])])
7210     AC_LANG_POP([C++])
7212     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7213     AC_LANG_PUSH([C++])
7214     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7215             #include <cxxabi.h>
7216             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7217         ])], [
7218             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7219             AC_MSG_RESULT([yes])
7220         ], [AC_MSG_RESULT([no])])
7221     AC_LANG_POP([C++])
7223     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7224     AC_LANG_PUSH([C++])
7225     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7226             #include <cxxabi.h>
7227             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7228         ])], [
7229             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7230             AC_MSG_RESULT([yes])
7231         ], [AC_MSG_RESULT([no])])
7232     AC_LANG_POP([C++])
7234     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info in cxxabi.h])
7235     AC_LANG_PUSH([C++])
7236     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7237             #include <cstddef>
7238             #include <cxxabi.h>
7239             std::size_t f() { return sizeof(__cxxabiv1::__si_class_type_info); }
7240         ])], [
7241             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7242             AC_MSG_RESULT([yes])
7243         ], [AC_MSG_RESULT([no])])
7244     AC_LANG_POP([C++])
7246     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7247     AC_LANG_PUSH([C++])
7248     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7249             #include <cstddef>
7250             #include <cxxabi.h>
7251             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7252         ])], [
7253             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7254             AC_MSG_RESULT([yes])
7255         ], [AC_MSG_RESULT([no])])
7256     AC_LANG_POP([C++])
7259 AC_SUBST(HAVE_GCC_AVX)
7260 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7261 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7263 dnl ===================================================================
7264 dnl Identify the C++ library
7265 dnl ===================================================================
7267 AC_MSG_CHECKING([what the C++ library is])
7268 HAVE_LIBSTDCPP=
7269 AC_LANG_PUSH([C++])
7270 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7271 #include <utility>
7272 #ifndef __GLIBCXX__
7273 foo bar
7274 #endif
7275 ]])],
7276     [CPP_LIBRARY=GLIBCXX
7277      cpp_library_name="GNU libstdc++"
7278      HAVE_LIBSTDCPP=TRUE
7279     ],
7280     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7281 #include <utility>
7282 #ifndef _LIBCPP_VERSION
7283 foo bar
7284 #endif
7285 ]])],
7286     [CPP_LIBRARY=LIBCPP
7287      cpp_library_name="LLVM libc++"
7288      AC_DEFINE([HAVE_LIBCXX])
7289     ],
7290     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7291 #include <utility>
7292 #ifndef _MSC_VER
7293 foo bar
7294 #endif
7295 ]])],
7296     [CPP_LIBRARY=MSVCRT
7297      cpp_library_name="Microsoft"
7298     ],
7299     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7300 AC_MSG_RESULT([$cpp_library_name])
7301 AC_LANG_POP([C++])
7302 AC_SUBST([HAVE_LIBSTDCPP])
7304 dnl ===================================================================
7305 dnl Check for gperf
7306 dnl ===================================================================
7307 AC_PATH_PROG(GPERF, gperf)
7308 if test -z "$GPERF"; then
7309     AC_MSG_ERROR([gperf not found but needed. Install it.])
7311 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7312     GPERF=`cygpath -m $GPERF`
7314 AC_MSG_CHECKING([whether gperf is new enough])
7315 my_gperf_ver1=$($GPERF --version | head -n 1)
7316 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7317 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7318 if test "$my_gperf_ver3" -ge 301; then
7319     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7320 else
7321     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7323 AC_SUBST(GPERF)
7325 dnl ===================================================================
7326 dnl Check for system libcmis
7327 dnl ===================================================================
7328 # libcmis requires curl and we can't build curl for iOS
7329 if test "$test_cmis" = "yes" -a "$enable_cmis" = "yes"; then
7330     libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.5 >= 0.5.2])
7331     ENABLE_LIBCMIS=TRUE
7332 else
7333     ENABLE_LIBCMIS=
7335 AC_SUBST(ENABLE_LIBCMIS)
7337 dnl ===================================================================
7338 dnl C++11
7339 dnl ===================================================================
7341 AC_MSG_CHECKING([whether $CXX_BASE supports C++17])
7342 CXXFLAGS_CXX11=
7343 if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7344     if test "$with_latest_c__" = yes; then
7345         CXXFLAGS_CXX11=-std:c++latest
7346     else
7347         CXXFLAGS_CXX11=-std:c++17
7348     fi
7349     CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus"
7350 elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7351     my_flags='-std=c++17 -std=c++1z'
7352     if test "$with_latest_c__" = yes; then
7353         my_flags="-std=c++23 -std=c++2b -std=c++20 -std=c++2a $my_flags"
7354     fi
7355     for flag in $my_flags; do
7356         if test "$COM" = MSC; then
7357             flag="-Xclang $flag"
7358         fi
7359         save_CXXFLAGS=$CXXFLAGS
7360         CXXFLAGS="$CXXFLAGS $flag -Werror"
7361         if test "$SYSTEM_LIBCMIS" = TRUE; then
7362             CXXFLAGS="$CXXFLAGS -DSYSTEM_LIBCMIS $LIBCMIS_CFLAGS"
7363         fi
7364         AC_LANG_PUSH([C++])
7365         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7366             #include <algorithm>
7367             #include <functional>
7368             #include <vector>
7370             #if defined SYSTEM_LIBCMIS
7371             // See ucb/source/ucp/cmis/auth_provider.hxx:
7372             #if !defined __clang__
7373             #pragma GCC diagnostic push
7374             #pragma GCC diagnostic ignored "-Wdeprecated"
7375             #pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
7376             #endif
7377             #include <libcmis/libcmis.hxx>
7378             #if !defined __clang__
7379             #pragma GCC diagnostic pop
7380             #endif
7381             #endif
7383             void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7384                 std::sort(v.begin(), v.end(), fn);
7385             }
7386             ]])],[CXXFLAGS_CXX11=$flag])
7387         AC_LANG_POP([C++])
7388         CXXFLAGS=$save_CXXFLAGS
7389         if test -n "$CXXFLAGS_CXX11"; then
7390             break
7391         fi
7392     done
7394 if test -n "$CXXFLAGS_CXX11"; then
7395     AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7396 else
7397     AC_MSG_ERROR(no)
7399 AC_SUBST(CXXFLAGS_CXX11)
7401 if test "$GCC" = "yes"; then
7402     save_CXXFLAGS=$CXXFLAGS
7403     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7404     CHECK_L_ATOMIC
7405     CXXFLAGS=$save_CXXFLAGS
7406     AC_SUBST(ATOMIC_LIB)
7409 dnl Test for temporarily incompatible libstdc++ 4.7.{0,1}, where
7410 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=179528> introduced
7411 dnl an additional member _M_size into C++11 std::list towards 4.7.0 and
7412 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=189186> removed it
7413 dnl again towards 4.7.2:
7414 if test $CPP_LIBRARY = GLIBCXX; then
7415     AC_MSG_CHECKING([whether using C++11 causes libstdc++ 4.7.0/4.7.1 ABI breakage])
7416     AC_LANG_PUSH([C++])
7417     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7418 #include <list>
7419 #if !defined __GLIBCXX__ || (__GLIBCXX__ != 20120322 && __GLIBCXX__ != 20120614)
7420     // according to <https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html>:
7421     //   GCC 4.7.0: 20120322
7422     //   GCC 4.7.1: 20120614
7423     // and using a range check is not possible as the mapping between
7424     // __GLIBCXX__ values and GCC versions is not monotonic
7425 /* ok */
7426 #else
7427 abi broken
7428 #endif
7429         ]])], [AC_MSG_RESULT(no, ok)],
7430         [AC_MSG_ERROR(yes)])
7431     AC_LANG_POP([C++])
7434 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7435 save_CXXFLAGS=$CXXFLAGS
7436 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7437 AC_LANG_PUSH([C++])
7439 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7440 #include <stddef.h>
7442 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7444 namespace
7446         struct b
7447         {
7448                 int i;
7449                 int j;
7450         };
7452 ]], [[
7453 struct a
7455         int i;
7456         int j;
7458 a thinga[]={{0,0}, {1,1}};
7459 b thingb[]={{0,0}, {1,1}};
7460 size_t i = sizeof(sal_n_array_size(thinga));
7461 size_t j = sizeof(sal_n_array_size(thingb));
7462 return !(i != 0 && j != 0);
7464     ], [ AC_MSG_RESULT(yes) ],
7465     [ AC_MSG_ERROR(no)])
7466 AC_LANG_POP([C++])
7467 CXXFLAGS=$save_CXXFLAGS
7469 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7470 if test "$GCC" = yes; then
7471     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7472     AC_LANG_PUSH([C++])
7473     save_CXXFLAGS=$CXXFLAGS
7474     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7475     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7476     CXXFLAGS=$save_CXXFLAGS
7477     AC_LANG_POP([C++])
7478     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7479         AC_MSG_RESULT([yes])
7480     else
7481         AC_MSG_RESULT([no])
7482     fi
7484 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7486 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7487 AC_LANG_PUSH([C++])
7488 save_CXXFLAGS=$CXXFLAGS
7489 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7490 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7491         #include <algorithm>
7492         #include <initializer_list>
7493         #include <vector>
7494         template<typename T> class S {
7495         private:
7496             std::vector<T> v_;
7497         public:
7498             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7499         };
7500         constinit S<int> s{3, 2, 1};
7501     ])], [
7502         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7503         AC_MSG_RESULT([yes])
7504     ], [AC_MSG_RESULT([no])])
7505 CXXFLAGS=$save_CXXFLAGS
7506 AC_LANG_POP([C++])
7508 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a <span> with unsigned size_type])
7509 AC_LANG_PUSH([C++])
7510 save_CXXFLAGS=$CXXFLAGS
7511 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7512 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7513         #include <span>
7514         #include <type_traits>
7515         // Don't check size_type directly, as it was called index_type before P1872R0:
7516         void f(std::span<int> s) { static_assert(std::is_unsigned_v<decltype(s.size())>); };
7517     ])], [
7518         AC_DEFINE([HAVE_CPP_SPAN],[1])
7519         AC_MSG_RESULT([yes])
7520     ], [AC_MSG_RESULT([no])])
7521 CXXFLAGS=$save_CXXFLAGS
7522 AC_LANG_POP([C++])
7524 AC_MSG_CHECKING([whether $CXX_BASE implements C++ DR P1155R3])
7525 AC_LANG_PUSH([C++])
7526 save_CXXFLAGS=$CXXFLAGS
7527 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7528 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7529         struct S1 { S1(S1 &&); };
7530         struct S2: S1 {};
7531         S1 f(S2 s) { return s; }
7532     ])], [
7533         AC_DEFINE([HAVE_P1155R3],[1])
7534         AC_MSG_RESULT([yes])
7535     ], [AC_MSG_RESULT([no])])
7536 CXXFLAGS=$save_CXXFLAGS
7537 AC_LANG_POP([C++])
7539 AC_MSG_CHECKING([whether $CXX_BASE supports C++20 std::atomic_ref])
7540 HAVE_CXX20_ATOMIC_REF=
7541 AC_LANG_PUSH([C++])
7542 save_CXXFLAGS=$CXXFLAGS
7543 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7544 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7545         #include <atomic>
7546         int x;
7547         std::atomic_ref<int> y(x);
7548     ])], [
7549         HAVE_CXX20_ATOMIC_REF=TRUE
7550         AC_MSG_RESULT([yes])
7551     ], [AC_MSG_RESULT([no])])
7552 CXXFLAGS=$save_CXXFLAGS
7553 AC_LANG_POP([C++])
7554 AC_SUBST([HAVE_CXX20_ATOMIC_REF])
7556 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7557 dnl which is included in -Wextra anyway):
7558 HAVE_WDEPRECATED_COPY_DTOR=
7559 if test "$GCC" = yes; then
7560     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7561     AC_LANG_PUSH([C++])
7562     save_CXXFLAGS=$CXXFLAGS
7563     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7564     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7565             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7566             AC_MSG_RESULT([yes])
7567         ], [AC_MSG_RESULT([no])])
7568     CXXFLAGS=$save_CXXFLAGS
7569     AC_LANG_POP([C++])
7571 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7573 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7574 dnl uninitialized warning for code like
7576 dnl   OString f();
7577 dnl   boost::optional<OString> * g(bool b) {
7578 dnl       boost::optional<OString> o;
7579 dnl       if (b) o = f();
7580 dnl       return new boost::optional<OString>(o);
7581 dnl   }
7583 dnl (as is e.g. present, in a slightly more elaborate form, in
7584 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7585 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7586 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7587 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7588     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7589     AC_LANG_PUSH([C++])
7590     save_CXXFLAGS=$CXXFLAGS
7591     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7592     if test "$ENABLE_OPTIMIZED" = TRUE; then
7593         CXXFLAGS="$CXXFLAGS -O2"
7594     else
7595         CXXFLAGS="$CXXFLAGS -O0"
7596     fi
7597     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7598             #include <new>
7599             void f1(int);
7600             struct S1 {
7601                 ~S1() { f1(n); }
7602                 int n = 0;
7603             };
7604             struct S2 {
7605                 S2() {}
7606                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7607                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7608                 void set(S1 s) {
7609                     new (stg) S1(s);
7610                     init = true;
7611                 }
7612                 bool init = false;
7613                 char stg[sizeof (S1)];
7614             } ;
7615             S1 f2();
7616             S2 * f3(bool b) {
7617                 S2 o;
7618                 if (b) o.set(f2());
7619                 return new S2(o);
7620             }
7621         ]])], [AC_MSG_RESULT([no])], [
7622             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7623             AC_MSG_RESULT([yes])
7624         ])
7625     CXXFLAGS=$save_CXXFLAGS
7626     AC_LANG_POP([C++])
7628 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7630 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7631 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7632 dnl hits us e.g. with GCC 10 and --enable-optimized at
7634 dnl   In file included from include/rtl/string.hxx:49,
7635 dnl                    from include/rtl/ustring.hxx:43,
7636 dnl                    from include/osl/file.hxx:35,
7637 dnl                    from include/codemaker/global.hxx:28,
7638 dnl                    from include/codemaker/options.hxx:23,
7639 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7640 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7641 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,
7642 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,
7643 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,
7644 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7645 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7646 dnl      78 |         memcpy( buffer, data, length );
7647 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7648 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7649 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7650     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7651     AC_LANG_PUSH([C++])
7652     save_CXXFLAGS=$CXXFLAGS
7653     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7654     if test "$ENABLE_OPTIMIZED" = TRUE; then
7655         CXXFLAGS="$CXXFLAGS -O2"
7656     else
7657         CXXFLAGS="$CXXFLAGS -O0"
7658     fi
7659     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7660     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7661             void fill(char const * begin, char const * end, char c);
7662             struct q {
7663                 char ids[4];
7664                 char username[6];
7665             };
7666             void test(q & c) {
7667                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
7668                 __builtin_strncpy(c.username, "root", sizeof(c.username));
7669             }
7670         ]])], [AC_MSG_RESULT([no])], [
7671             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
7672             AC_MSG_RESULT([yes])
7673         ])
7674     CXXFLAGS=$save_CXXFLAGS
7675     AC_LANG_POP([C++])
7677 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
7679 HAVE_DLLEXPORTINLINES=
7680 dnl At least for Clang 14 trunk, -Zc:dllexportInlines- would cause lots of unresolved symbols when
7681 dnl linking e.g. Library_cppuhelper, for whatever reason:
7682 if test "$_os" = "WINNT" && test "$COM_IS_CLANG" != TRUE; then
7683     AC_MSG_CHECKING([whether $CXX_BASE supports -Zc:dllexportInlines-])
7684     AC_LANG_PUSH([C++])
7685     save_CXXFLAGS=$CXXFLAGS
7686     CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
7687     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7688             HAVE_DLLEXPORTINLINES=TRUE
7689             AC_MSG_RESULT([yes])
7690         ], [AC_MSG_RESULT([no])])
7691     CXXFLAGS=$save_CXXFLAGS
7692     AC_LANG_POP([C++])
7694 AC_SUBST([HAVE_DLLEXPORTINLINES])
7696 dnl ===================================================================
7697 dnl CPU Intrinsics support - SSE, AVX
7698 dnl ===================================================================
7700 CXXFLAGS_INTRINSICS_SSE2=
7701 CXXFLAGS_INTRINSICS_SSSE3=
7702 CXXFLAGS_INTRINSICS_SSE41=
7703 CXXFLAGS_INTRINSICS_SSE42=
7704 CXXFLAGS_INTRINSICS_AVX=
7705 CXXFLAGS_INTRINSICS_AVX2=
7706 CXXFLAGS_INTRINSICS_AVX512=
7707 CXXFLAGS_INTRINSICS_AVX512F=
7708 CXXFLAGS_INTRINSICS_F16C=
7709 CXXFLAGS_INTRINSICS_FMA=
7711 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7712     # GCC, Clang or Clang-cl (clang-cl + MSVC's -arch options don't work well together)
7713     flag_sse2=-msse2
7714     flag_ssse3=-mssse3
7715     flag_sse41=-msse4.1
7716     flag_sse42=-msse4.2
7717     flag_avx=-mavx
7718     flag_avx2=-mavx2
7719     flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
7720     flag_avx512f=-mavx512f
7721     flag_f16c=-mf16c
7722     flag_fma=-mfma
7723 else
7724     # With MSVC using -arch is in fact not necessary for being able
7725     # to use CPU intrinsics, code using AVX512F intrinsics will compile
7726     # even if compiled with -arch:AVX, the -arch option really only affects
7727     # instructions generated for C/C++ code.
7728     # So use the matching same (or lower) -arch options, but only in order
7729     # to generate the best matching instructions for the C++ code surrounding
7730     # the intrinsics.
7731     # SSE2 is the default for x86/x64, so no need to specify the option.
7732     flag_sse2=
7733     # No specific options for these, use the next lower.
7734     flag_ssse3="$flag_sse2"
7735     flag_sse41="$flag_sse2"
7736     flag_sse42="$flag_sse2"
7737     flag_avx=-arch:AVX
7738     flag_avx2=-arch:AVX2
7739     flag_avx512=-arch:AVX512
7740     # Using -arch:AVX512 would enable more than just AVX512F, so use only AVX2.
7741     flag_avx512f=-arch:AVX2
7742     # No MSVC options for these.
7743     flag_f16c="$flag_sse2"
7744     flag_fma="$flag_sse2"
7747 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
7748 AC_LANG_PUSH([C++])
7749 save_CXXFLAGS=$CXXFLAGS
7750 CXXFLAGS="$CXXFLAGS $flag_sse2"
7751 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7752     #include <emmintrin.h>
7753     int main () {
7754         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7755         c = _mm_xor_si128 (a, b);
7756         return 0;
7757     }
7758     ])],
7759     [can_compile_sse2=yes],
7760     [can_compile_sse2=no])
7761 AC_LANG_POP([C++])
7762 CXXFLAGS=$save_CXXFLAGS
7763 AC_MSG_RESULT([${can_compile_sse2}])
7764 if test "${can_compile_sse2}" = "yes" ; then
7765     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
7768 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
7769 AC_LANG_PUSH([C++])
7770 save_CXXFLAGS=$CXXFLAGS
7771 CXXFLAGS="$CXXFLAGS $flag_ssse3"
7772 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7773     #include <tmmintrin.h>
7774     int main () {
7775         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7776         c = _mm_maddubs_epi16 (a, b);
7777         return 0;
7778     }
7779     ])],
7780     [can_compile_ssse3=yes],
7781     [can_compile_ssse3=no])
7782 AC_LANG_POP([C++])
7783 CXXFLAGS=$save_CXXFLAGS
7784 AC_MSG_RESULT([${can_compile_ssse3}])
7785 if test "${can_compile_ssse3}" = "yes" ; then
7786     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
7789 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
7790 AC_LANG_PUSH([C++])
7791 save_CXXFLAGS=$CXXFLAGS
7792 CXXFLAGS="$CXXFLAGS $flag_sse41"
7793 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7794     #include <smmintrin.h>
7795     int main () {
7796         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7797         c = _mm_cmpeq_epi64 (a, b);
7798         return 0;
7799     }
7800     ])],
7801     [can_compile_sse41=yes],
7802     [can_compile_sse41=no])
7803 AC_LANG_POP([C++])
7804 CXXFLAGS=$save_CXXFLAGS
7805 AC_MSG_RESULT([${can_compile_sse41}])
7806 if test "${can_compile_sse41}" = "yes" ; then
7807     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
7810 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
7811 AC_LANG_PUSH([C++])
7812 save_CXXFLAGS=$CXXFLAGS
7813 CXXFLAGS="$CXXFLAGS $flag_sse42"
7814 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7815     #include <nmmintrin.h>
7816     int main () {
7817         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7818         c = _mm_cmpgt_epi64 (a, b);
7819         return 0;
7820     }
7821     ])],
7822     [can_compile_sse42=yes],
7823     [can_compile_sse42=no])
7824 AC_LANG_POP([C++])
7825 CXXFLAGS=$save_CXXFLAGS
7826 AC_MSG_RESULT([${can_compile_sse42}])
7827 if test "${can_compile_sse42}" = "yes" ; then
7828     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
7831 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
7832 AC_LANG_PUSH([C++])
7833 save_CXXFLAGS=$CXXFLAGS
7834 CXXFLAGS="$CXXFLAGS $flag_avx"
7835 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7836     #include <immintrin.h>
7837     int main () {
7838         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
7839         c = _mm256_xor_ps(a, b);
7840         return 0;
7841     }
7842     ])],
7843     [can_compile_avx=yes],
7844     [can_compile_avx=no])
7845 AC_LANG_POP([C++])
7846 CXXFLAGS=$save_CXXFLAGS
7847 AC_MSG_RESULT([${can_compile_avx}])
7848 if test "${can_compile_avx}" = "yes" ; then
7849     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
7852 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
7853 AC_LANG_PUSH([C++])
7854 save_CXXFLAGS=$CXXFLAGS
7855 CXXFLAGS="$CXXFLAGS $flag_avx2"
7856 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7857     #include <immintrin.h>
7858     int main () {
7859         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
7860         c = _mm256_maddubs_epi16(a, b);
7861         return 0;
7862     }
7863     ])],
7864     [can_compile_avx2=yes],
7865     [can_compile_avx2=no])
7866 AC_LANG_POP([C++])
7867 CXXFLAGS=$save_CXXFLAGS
7868 AC_MSG_RESULT([${can_compile_avx2}])
7869 if test "${can_compile_avx2}" = "yes" ; then
7870     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
7873 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
7874 AC_LANG_PUSH([C++])
7875 save_CXXFLAGS=$CXXFLAGS
7876 CXXFLAGS="$CXXFLAGS $flag_avx512"
7877 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7878     #include <immintrin.h>
7879     int main () {
7880         __m512i a = _mm512_loadu_si512(0);
7881         __m512d v1 = _mm512_load_pd(0);
7882         // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
7883         __m512d v2 = _mm512_abs_pd(v1);
7884         return 0;
7885     }
7886     ])],
7887     [can_compile_avx512=yes],
7888     [can_compile_avx512=no])
7889 AC_LANG_POP([C++])
7890 CXXFLAGS=$save_CXXFLAGS
7891 AC_MSG_RESULT([${can_compile_avx512}])
7892 if test "${can_compile_avx512}" = "yes" ; then
7893     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
7894     CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
7897 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
7898 AC_LANG_PUSH([C++])
7899 save_CXXFLAGS=$CXXFLAGS
7900 CXXFLAGS="$CXXFLAGS $flag_f16c"
7901 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7902     #include <immintrin.h>
7903     int main () {
7904         __m128i a = _mm_set1_epi32 (0);
7905         __m128 c;
7906         c = _mm_cvtph_ps(a);
7907         return 0;
7908     }
7909     ])],
7910     [can_compile_f16c=yes],
7911     [can_compile_f16c=no])
7912 AC_LANG_POP([C++])
7913 CXXFLAGS=$save_CXXFLAGS
7914 AC_MSG_RESULT([${can_compile_f16c}])
7915 if test "${can_compile_f16c}" = "yes" ; then
7916     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
7919 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
7920 AC_LANG_PUSH([C++])
7921 save_CXXFLAGS=$CXXFLAGS
7922 CXXFLAGS="$CXXFLAGS $flag_fma"
7923 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7924     #include <immintrin.h>
7925     int main () {
7926         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
7927         d = _mm256_fmadd_ps(a, b, c);
7928         return 0;
7929     }
7930     ])],
7931     [can_compile_fma=yes],
7932     [can_compile_fma=no])
7933 AC_LANG_POP([C++])
7934 CXXFLAGS=$save_CXXFLAGS
7935 AC_MSG_RESULT([${can_compile_fma}])
7936 if test "${can_compile_fma}" = "yes" ; then
7937     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
7940 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
7941 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
7942 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
7943 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
7944 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
7945 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
7946 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
7947 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512F])
7948 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
7949 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
7951 dnl ===================================================================
7952 dnl system stl sanity tests
7953 dnl ===================================================================
7954 if test "$_os" != "WINNT"; then
7956     AC_LANG_PUSH([C++])
7958     save_CPPFLAGS="$CPPFLAGS"
7959     if test -n "$MACOSX_SDK_PATH"; then
7960         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
7961     fi
7963     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
7964     # only.
7965     if test "$CPP_LIBRARY" = GLIBCXX; then
7966         dnl gcc#19664, gcc#22482, rhbz#162935
7967         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
7968         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
7969         AC_MSG_RESULT([$stlvisok])
7970         if test "$stlvisok" = "no"; then
7971             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
7972         fi
7973     fi
7975     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
7976     # when we don't make any dynamic libraries?
7977     if test "$DISABLE_DYNLOADING" = ""; then
7978         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
7979         cat > conftestlib1.cc <<_ACEOF
7980 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7981 struct S2: S1<int> { virtual ~S2(); };
7982 S2::~S2() {}
7983 _ACEOF
7984         cat > conftestlib2.cc <<_ACEOF
7985 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7986 struct S2: S1<int> { virtual ~S2(); };
7987 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
7988 _ACEOF
7989         gccvisinlineshiddenok=yes
7990         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
7991             gccvisinlineshiddenok=no
7992         else
7993             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
7994             dnl known to not work with -z defs (unsetting which makes the test
7995             dnl moot, though):
7996             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
7997             if test "$COM_IS_CLANG" = TRUE; then
7998                 for i in $CXX $CXXFLAGS; do
7999                     case $i in
8000                     -fsanitize=*)
8001                         my_linkflagsnoundefs=
8002                         break
8003                         ;;
8004                     esac
8005                 done
8006             fi
8007             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
8008                 gccvisinlineshiddenok=no
8009             fi
8010         fi
8012         rm -fr libconftest*
8013         AC_MSG_RESULT([$gccvisinlineshiddenok])
8014         if test "$gccvisinlineshiddenok" = "no"; then
8015             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
8016         fi
8017     fi
8019    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
8020     cat >visibility.cxx <<_ACEOF
8021 #pragma GCC visibility push(hidden)
8022 struct __attribute__ ((visibility ("default"))) TestStruct {
8023   static void Init();
8025 __attribute__ ((visibility ("default"))) void TestFunc() {
8026   TestStruct::Init();
8028 _ACEOF
8029     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
8030         gccvisbroken=yes
8031     else
8032         case "$host_cpu" in
8033         i?86|x86_64)
8034             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
8035                 gccvisbroken=no
8036             else
8037                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
8038                     gccvisbroken=no
8039                 else
8040                     gccvisbroken=yes
8041                 fi
8042             fi
8043             ;;
8044         *)
8045             gccvisbroken=no
8046             ;;
8047         esac
8048     fi
8049     rm -f visibility.s visibility.cxx
8051     AC_MSG_RESULT([$gccvisbroken])
8052     if test "$gccvisbroken" = "yes"; then
8053         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
8054     fi
8056     CPPFLAGS="$save_CPPFLAGS"
8058     AC_MSG_CHECKING([if CET endbranch is recognized])
8059 cat > endbr.s <<_ACEOF
8060 endbr32
8061 _ACEOF
8062     HAVE_ASM_END_BRANCH_INS_SUPPORT=
8063     if $CXX -c endbr.s -o endbr.o >/dev/null 2>&5; then
8064         AC_MSG_RESULT([yes])
8065         HAVE_ASM_END_BRANCH_INS_SUPPORT=TRUE
8066     else
8067         AC_MSG_RESULT([no])
8068     fi
8069     rm -f endbr.s endbr.o
8070     AC_SUBST(HAVE_ASM_END_BRANCH_INS_SUPPORT)
8072     AC_LANG_POP([C++])
8075 dnl ===================================================================
8076 dnl  Clang++ tests
8077 dnl ===================================================================
8079 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
8080 if test "$GCC" = "yes"; then
8081     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
8082     AC_LANG_PUSH([C++])
8083     save_CXXFLAGS=$CXXFLAGS
8084     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
8085     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
8086     CXXFLAGS=$save_CXXFLAGS
8087     AC_LANG_POP([C++])
8088     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
8089         AC_MSG_RESULT([yes])
8090     else
8091         AC_MSG_RESULT([no])
8092     fi
8094 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
8096 dnl ===================================================================
8097 dnl Compiler plugins
8098 dnl ===================================================================
8100 COMPILER_PLUGINS=
8101 # currently only Clang
8103 if test "$COM_IS_CLANG" != "TRUE"; then
8104     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
8105         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
8106         enable_compiler_plugins=no
8107     fi
8110 COMPILER_PLUGINS_COM_IS_CLANG=
8111 if test "$COM_IS_CLANG" = "TRUE"; then
8112     if test -n "$enable_compiler_plugins"; then
8113         compiler_plugins="$enable_compiler_plugins"
8114     elif test -n "$ENABLE_DBGUTIL"; then
8115         compiler_plugins=test
8116     else
8117         compiler_plugins=no
8118     fi
8119     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
8120         if test "$CLANGVER" -lt 50002; then
8121             if test "$compiler_plugins" = yes; then
8122                 AC_MSG_ERROR([Clang $CLANGVER is too old to build compiler plugins; need >= 5.0.2.])
8123             else
8124                 compiler_plugins=no
8125             fi
8126         fi
8127     fi
8128     if test "$compiler_plugins" != "no"; then
8129         dnl The prefix where Clang resides, override to where Clang resides if
8130         dnl using a source build:
8131         if test -z "$CLANGDIR"; then
8132             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
8133         fi
8134         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
8135         if test -z "$COMPILER_PLUGINS_CXX"; then
8136             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
8137         fi
8138         clangbindir=$CLANGDIR/bin
8139         if test "$build_os" = "cygwin"; then
8140             clangbindir=$(cygpath -u "$clangbindir")
8141         fi
8142         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
8143         if test -n "$LLVM_CONFIG"; then
8144             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
8145             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
8146             if test -z "$CLANGLIBDIR"; then
8147                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
8148             fi
8149             # Try if clang is built from source (in which case its includes are not together with llvm includes).
8150             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
8151             clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
8152             if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
8153                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
8154             fi
8155             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
8156             clangobjdir=$($LLVM_CONFIG --obj-root)
8157             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
8158                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
8159             fi
8160         fi
8161         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
8162         AC_LANG_PUSH([C++])
8163         save_CXX=$CXX
8164         save_CXXCPP=$CXXCPP
8165         save_CPPFLAGS=$CPPFLAGS
8166         save_CXXFLAGS=$CXXFLAGS
8167         save_LDFLAGS=$LDFLAGS
8168         save_LIBS=$LIBS
8169         CXX=$COMPILER_PLUGINS_CXX
8170         CXXCPP="$COMPILER_PLUGINS_CXX -E"
8171         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8172         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8173         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
8174             [COMPILER_PLUGINS=TRUE],
8175             [
8176             if test "$compiler_plugins" = "yes"; then
8177                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
8178             else
8179                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
8180                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
8181             fi
8182             ])
8183         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8184         dnl comment in compilerplugins/Makefile-clang.mk:
8185         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8186             LDFLAGS=""
8187             AC_MSG_CHECKING([for clang libraries to use])
8188             if test -z "$CLANGTOOLLIBS"; then
8189                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8190  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8191                 AC_LINK_IFELSE([
8192                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8193                         [[ clang::FullSourceLoc().dump(); ]])
8194                 ],[CLANGTOOLLIBS="$LIBS"],[])
8195             fi
8196             if test -z "$CLANGTOOLLIBS"; then
8197                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8198                 AC_LINK_IFELSE([
8199                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8200                         [[ clang::FullSourceLoc().dump(); ]])
8201                 ],[CLANGTOOLLIBS="$LIBS"],[])
8202             fi
8203             AC_MSG_RESULT([$CLANGTOOLLIBS])
8204             if test -z "$CLANGTOOLLIBS"; then
8205                 if test "$compiler_plugins" = "yes"; then
8206                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8207                 else
8208                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8209                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8210                 fi
8211                 COMPILER_PLUGINS=
8212             fi
8213             if test -n "$COMPILER_PLUGINS"; then
8214                 if test -z "$CLANGSYSINCLUDE"; then
8215                     if test -n "$LLVM_CONFIG"; then
8216                         # Path to the clang system headers (no idea if there's a better way to get it).
8217                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8218                     fi
8219                 fi
8220             fi
8221         fi
8222         CXX=$save_CXX
8223         CXXCPP=$save_CXXCPP
8224         CPPFLAGS=$save_CPPFLAGS
8225         CXXFLAGS=$save_CXXFLAGS
8226         LDFLAGS=$save_LDFLAGS
8227         LIBS="$save_LIBS"
8228         AC_LANG_POP([C++])
8230         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8231         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8232             #ifndef __clang__
8233             you lose
8234             #endif
8235             int foo=42;
8236             ]])],
8237             [AC_MSG_RESULT([yes])
8238              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8239             [AC_MSG_RESULT([no])])
8240         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8241     fi
8242 else
8243     if test "$enable_compiler_plugins" = "yes"; then
8244         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8245     fi
8247 COMPILER_PLUGINS_ANALYZER_PCH=
8248 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8249     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8251 AC_SUBST(COMPILER_PLUGINS)
8252 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8253 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8254 AC_SUBST(COMPILER_PLUGINS_CXX)
8255 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8256 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8257 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8258 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8259 AC_SUBST(CLANGDIR)
8260 AC_SUBST(CLANGLIBDIR)
8261 AC_SUBST(CLANGTOOLLIBS)
8262 AC_SUBST(CLANGSYSINCLUDE)
8264 # Plugin to help linker.
8265 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8266 # This makes --enable-lto build with clang work.
8267 AC_SUBST(LD_PLUGIN)
8269 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8270 AC_SUBST(HAVE_POSIX_FALLOCATE)
8272 JITC_PROCESSOR_TYPE=""
8273 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8274     # IBMs JDK needs this...
8275     JITC_PROCESSOR_TYPE=6
8276     export JITC_PROCESSOR_TYPE
8278 AC_SUBST([JITC_PROCESSOR_TYPE])
8280 # Misc Windows Stuff
8281 AC_ARG_WITH(ucrt-dir,
8282     AS_HELP_STRING([--with-ucrt-dir],
8283         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8284         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8285         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8286             Windows6.1-KB2999226-x64.msu
8287             Windows6.1-KB2999226-x86.msu
8288             Windows8.1-KB2999226-x64.msu
8289             Windows8.1-KB2999226-x86.msu
8290             Windows8-RT-KB2999226-x64.msu
8291             Windows8-RT-KB2999226-x86.msu
8292         A zip archive including those files is available from Microsoft site:
8293         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8296 UCRT_REDISTDIR="$with_ucrt_dir"
8297 if test $_os = "WINNT"; then
8298     find_msvc_x64_dlls
8299     for i in $PKGFORMAT; do
8300         if test "$i" = msi; then
8301             find_msms
8302             break
8303         fi
8304     done
8305     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8306     MSVC_DLLS="$msvcdlls"
8307     test -n "$msmdir" && MSM_PATH=`win_short_path_for_make "$msmdir"`
8308     # MSVC 15.3 changed it to VC141
8309     if echo "$msvcdllpath" | grep -q "VC143.CRT$"; then
8310         SCPDEFS="$SCPDEFS -DWITH_VC143_REDIST"
8311     elif echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8312         SCPDEFS="$SCPDEFS -DWITH_VC142_REDIST"
8313     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8314         SCPDEFS="$SCPDEFS -DWITH_VC141_REDIST"
8315     else
8316         SCPDEFS="$SCPDEFS -DWITH_VC${VCVER}_REDIST"
8317     fi
8319     if test "$UCRT_REDISTDIR" = "no"; then
8320         dnl explicitly disabled
8321         UCRT_REDISTDIR=""
8322     else
8323         if ! test -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x64.msu" -a \
8324                   -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x86.msu" -a \
8325                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x64.msu" -a \
8326                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x86.msu" -a \
8327                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x64.msu" -a \
8328                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x86.msu"; then
8329             UCRT_REDISTDIR=""
8330             if test -n "$PKGFORMAT"; then
8331                for i in $PKGFORMAT; do
8332                    case "$i" in
8333                    msi)
8334                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8335                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8336                        ;;
8337                    esac
8338                done
8339             fi
8340         fi
8341     fi
8344 AC_SUBST(UCRT_REDISTDIR)
8345 AC_SUBST(MSVC_DLL_PATH)
8346 AC_SUBST(MSVC_DLLS)
8347 AC_SUBST(MSM_PATH)
8350 dnl ===================================================================
8351 dnl Checks for Java
8352 dnl ===================================================================
8353 if test "$ENABLE_JAVA" != ""; then
8355     # Windows-specific tests
8356     if test "$build_os" = "cygwin"; then
8357         if test -z "$with_jdk_home"; then
8358             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8359             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8360             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/CurrentVersion"
8361             if test -n "$regvalue"; then
8362                 ver=$regvalue
8363                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver/JavaHome"
8364                 with_jdk_home=$regvalue
8365             fi
8366             howfound="found automatically"
8367         else
8368             with_jdk_home=`win_short_path_for_make "$with_jdk_home"`
8369             howfound="you passed"
8370         fi
8372         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8373             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])
8374         fi
8375     fi
8377     # 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.
8378     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8379     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8380         with_jdk_home=`/usr/libexec/java_home`
8381     fi
8383     JAVA_HOME=; export JAVA_HOME
8384     if test -z "$with_jdk_home"; then
8385         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8386     else
8387         _java_path="$with_jdk_home/bin/$with_java"
8388         dnl Check if there is a Java interpreter at all.
8389         if test -x "$_java_path"; then
8390             JAVAINTERPRETER=$_java_path
8391         else
8392             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8393         fi
8394     fi
8396     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8397     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8398     dnl loaded by java to run JunitTests:
8399     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8400         shortjdkhome=`cygpath -d "$with_jdk_home"`
8401         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
8402             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8403             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8404         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
8405             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8406             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8407         fi
8409         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8410             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8411         fi
8412         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8413     elif test "$cross_compiling" != "yes"; then
8414         case $CPUNAME in
8415             AARCH64|AXP|X86_64|HPPA|IA64|POWERPC64|S390X|SPARC64|GODSON64)
8416                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8417                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8418                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8419                 fi
8420                 ;;
8421             *) # assumption: everything else 32-bit
8422                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8423                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8424                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8425                 fi
8426                 ;;
8427         esac
8428     fi
8431 dnl ===================================================================
8432 dnl Checks for JDK.
8433 dnl ===================================================================
8435 # Whether all the complexity here actually is needed any more or not, no idea.
8437 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8438     _gij_longver=0
8439     AC_MSG_CHECKING([the installed JDK])
8440     if test -n "$JAVAINTERPRETER"; then
8441         dnl java -version sends output to stderr!
8442         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8443             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8444         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8445             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8446         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8447             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8448         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8449             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8450         else
8451             JDK=sun
8453             dnl Sun JDK specific tests
8454             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8455             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8457             if test "$_jdk_ver" -lt 10900; then
8458                 AC_MSG_ERROR([JDK is too old, you need at least 9 ($_jdk_ver < 10900)])
8459             fi
8460             if test "$_jdk_ver" -gt 10900; then
8461                 JAVA_CLASSPATH_NOT_SET=TRUE
8462             fi
8464             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8465             if test "$_os" = "WINNT"; then
8466                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8467             fi
8468             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8470             # set to limit VM usage for JunitTests
8471             JAVAIFLAGS=-Xmx64M
8472             # set to limit VM usage for javac
8473             JAVACFLAGS=-J-Xmx128M
8474         fi
8475     else
8476         AC_MSG_ERROR([Java not found. You need at least JDK 9])
8477     fi
8478 else
8479     if test -z "$ENABLE_JAVA"; then
8480         dnl Java disabled
8481         JAVA_HOME=
8482         export JAVA_HOME
8483     elif test "$cross_compiling" = "yes"; then
8484         # Just assume compatibility of build and host JDK
8485         JDK=$JDK_FOR_BUILD
8486         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8487     fi
8490 dnl ===================================================================
8491 dnl Checks for javac
8492 dnl ===================================================================
8493 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8494     javacompiler="javac"
8495     : ${JAVA_SOURCE_VER=8}
8496     : ${JAVA_TARGET_VER=8}
8497     if test -z "$with_jdk_home"; then
8498         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8499     else
8500         _javac_path="$with_jdk_home/bin/$javacompiler"
8501         dnl Check if there is a Java compiler at all.
8502         if test -x "$_javac_path"; then
8503             JAVACOMPILER=$_javac_path
8504         fi
8505     fi
8506     if test -z "$JAVACOMPILER"; then
8507         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8508     fi
8509     if test "$build_os" = "cygwin"; then
8510         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8511             JAVACOMPILER="${JAVACOMPILER}.exe"
8512         fi
8513         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8514     fi
8517 dnl ===================================================================
8518 dnl Checks for javadoc
8519 dnl ===================================================================
8520 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8521     if test -z "$with_jdk_home"; then
8522         AC_PATH_PROG(JAVADOC, javadoc)
8523     else
8524         _javadoc_path="$with_jdk_home/bin/javadoc"
8525         dnl Check if there is a javadoc at all.
8526         if test -x "$_javadoc_path"; then
8527             JAVADOC=$_javadoc_path
8528         else
8529             AC_PATH_PROG(JAVADOC, javadoc)
8530         fi
8531     fi
8532     if test -z "$JAVADOC"; then
8533         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8534     fi
8535     if test "$build_os" = "cygwin"; then
8536         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8537             JAVADOC="${JAVADOC}.exe"
8538         fi
8539         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8540     fi
8542     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8543     JAVADOCISGJDOC="yes"
8544     fi
8546 AC_SUBST(JAVADOC)
8547 AC_SUBST(JAVADOCISGJDOC)
8549 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8550     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8551     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8552         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8553            # try to recover first by looking whether we have an alternative
8554            # system as in Debian or newer SuSEs where following /usr/bin/javac
8555            # over /etc/alternatives/javac leads to the right bindir where we
8556            # just need to strip a bit away to get a valid JAVA_HOME
8557            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8558         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8559             # maybe only one level of symlink (e.g. on Mac)
8560             JAVA_HOME=$(readlink $JAVACOMPILER)
8561             if test "$(dirname $JAVA_HOME)" = "."; then
8562                 # we've got no path to trim back
8563                 JAVA_HOME=""
8564             fi
8565         else
8566             # else warn
8567             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8568             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8569             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8570             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8571         fi
8572         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8573         if test "$JAVA_HOME" != "/usr"; then
8574             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8575                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8576                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8577                 dnl Tiger already returns a JDK path...
8578                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8579             else
8580                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8581                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8582                 dnl that checks which version to run
8583                 if test -f "$JAVA_HOME"; then
8584                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8585                 fi
8586             fi
8587         fi
8588     fi
8589     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8591     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8592     if test -z "$JAVA_HOME"; then
8593         if test "x$with_jdk_home" = "x"; then
8594             cat > findhome.java <<_ACEOF
8595 [import java.io.File;
8597 class findhome
8599     public static void main(String args[])
8600     {
8601         String jrelocation = System.getProperty("java.home");
8602         File jre = new File(jrelocation);
8603         System.out.println(jre.getParent());
8604     }
8606 _ACEOF
8607             AC_MSG_CHECKING([if javac works])
8608             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8609             AC_TRY_EVAL(javac_cmd)
8610             if test $? = 0 -a -f ./findhome.class; then
8611                 AC_MSG_RESULT([javac works])
8612             else
8613                 echo "configure: javac test failed" >&5
8614                 cat findhome.java >&5
8615                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8616             fi
8617             AC_MSG_CHECKING([if gij knows its java.home])
8618             JAVA_HOME=`$JAVAINTERPRETER findhome`
8619             if test $? = 0 -a "$JAVA_HOME" != ""; then
8620                 AC_MSG_RESULT([$JAVA_HOME])
8621             else
8622                 echo "configure: java test failed" >&5
8623                 cat findhome.java >&5
8624                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8625             fi
8626             # clean-up after ourselves
8627             rm -f ./findhome.java ./findhome.class
8628         else
8629             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8630         fi
8631     fi
8633     # now check if $JAVA_HOME is really valid
8634     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8635         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8636             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8637             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8638             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
8639             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
8640             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
8641             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
8642         fi
8643     fi
8644     PathFormat "$JAVA_HOME"
8645     JAVA_HOME="$formatted_path"
8648 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
8649     "$_os" != Darwin
8650 then
8651     AC_MSG_CHECKING([for JAWT lib])
8652     if test "$_os" = WINNT; then
8653         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
8654         JAWTLIB=jawt.lib
8655     else
8656         case "$host_cpu" in
8657         arm*)
8658             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
8659             JAVA_ARCH=$my_java_arch
8660             ;;
8661         i*86)
8662             my_java_arch=i386
8663             ;;
8664         m68k)
8665             my_java_arch=m68k
8666             ;;
8667         powerpc)
8668             my_java_arch=ppc
8669             ;;
8670         powerpc64)
8671             my_java_arch=ppc64
8672             ;;
8673         powerpc64le)
8674             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
8675             JAVA_ARCH=$my_java_arch
8676             ;;
8677         sparc64)
8678             my_java_arch=sparcv9
8679             ;;
8680         x86_64)
8681             my_java_arch=amd64
8682             ;;
8683         *)
8684             my_java_arch=$host_cpu
8685             ;;
8686         esac
8687         # This is where JDK9 puts the library
8688         if test -e "$JAVA_HOME/lib/libjawt.so"; then
8689             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
8690         else
8691             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
8692         fi
8693         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
8694     fi
8695     AC_MSG_RESULT([$JAWTLIB])
8697 AC_SUBST(JAWTLIB)
8699 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
8700     case "$host_os" in
8702     aix*)
8703         JAVAINC="-I$JAVA_HOME/include"
8704         JAVAINC="$JAVAINC -I$JAVA_HOME/include/aix"
8705         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8706         ;;
8708     cygwin*|wsl*)
8709         JAVAINC="-I$JAVA_HOME/include/win32"
8710         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
8711         ;;
8713     darwin*|macos*)
8714         if test -d "$JAVA_HOME/include/darwin"; then
8715             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
8716         else
8717             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
8718         fi
8719         ;;
8721     dragonfly*)
8722         JAVAINC="-I$JAVA_HOME/include"
8723         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8724         ;;
8726     freebsd*)
8727         JAVAINC="-I$JAVA_HOME/include"
8728         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
8729         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
8730         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8731         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8732         ;;
8734     k*bsd*-gnu*)
8735         JAVAINC="-I$JAVA_HOME/include"
8736         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8737         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8738         ;;
8740     linux-gnu*)
8741         JAVAINC="-I$JAVA_HOME/include"
8742         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8743         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8744         ;;
8746     *netbsd*)
8747         JAVAINC="-I$JAVA_HOME/include"
8748         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
8749         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8750        ;;
8752     openbsd*)
8753         JAVAINC="-I$JAVA_HOME/include"
8754         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
8755         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8756         ;;
8758     solaris*)
8759         JAVAINC="-I$JAVA_HOME/include"
8760         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
8761         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8762         ;;
8763     esac
8765 SOLARINC="$SOLARINC $JAVAINC"
8767 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8768     JAVA_HOME_FOR_BUILD=$JAVA_HOME
8769     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
8770     JDK_FOR_BUILD=$JDK
8773 AC_SUBST(JAVACFLAGS)
8774 AC_SUBST(JAVACOMPILER)
8775 AC_SUBST(JAVAINTERPRETER)
8776 AC_SUBST(JAVAIFLAGS)
8777 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
8778 AC_SUBST(JAVA_CLASSPATH_NOT_SET)
8779 AC_SUBST(JAVA_HOME)
8780 AC_SUBST(JAVA_HOME_FOR_BUILD)
8781 AC_SUBST(JDK)
8782 AC_SUBST(JDK_FOR_BUILD)
8783 AC_SUBST(JAVA_SOURCE_VER)
8784 AC_SUBST(JAVA_TARGET_VER)
8787 dnl ===================================================================
8788 dnl Export file validation
8789 dnl ===================================================================
8790 AC_MSG_CHECKING([whether to enable export file validation])
8791 if test "$with_export_validation" != "no"; then
8792     if test -z "$ENABLE_JAVA"; then
8793         if test "$with_export_validation" = "yes"; then
8794             AC_MSG_ERROR([requested, but Java is disabled])
8795         else
8796             AC_MSG_RESULT([no, as Java is disabled])
8797         fi
8798     elif ! test -d "${SRC_ROOT}/schema"; then
8799         if test "$with_export_validation" = "yes"; then
8800             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
8801         else
8802             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
8803         fi
8804     else
8805         AC_MSG_RESULT([yes])
8806         AC_DEFINE(HAVE_EXPORT_VALIDATION)
8808         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
8809         if test -z "$ODFVALIDATOR"; then
8810             # remember to download the ODF toolkit with validator later
8811             AC_MSG_NOTICE([no odfvalidator found, will download it])
8812             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
8813             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
8815             # and fetch name of odfvalidator jar name from download.lst
8816             ODFVALIDATOR_JAR=`$SED -n -e "s/export *ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8817             AC_SUBST(ODFVALIDATOR_JAR)
8819             if test -z "$ODFVALIDATOR_JAR"; then
8820                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
8821             fi
8822         fi
8823         if test "$build_os" = "cygwin"; then
8824             # In case of Cygwin it will be executed from Windows,
8825             # so we need to run bash and absolute path to validator
8826             # so instead of "odfvalidator" it will be
8827             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8828             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
8829         else
8830             ODFVALIDATOR="sh $ODFVALIDATOR"
8831         fi
8832         AC_SUBST(ODFVALIDATOR)
8835         AC_PATH_PROGS(OFFICEOTRON, officeotron)
8836         if test -z "$OFFICEOTRON"; then
8837             # remember to download the officeotron with validator later
8838             AC_MSG_NOTICE([no officeotron found, will download it])
8839             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
8840             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
8842             # and fetch name of officeotron jar name from download.lst
8843             OFFICEOTRON_JAR=`$SED -n -e "s/export *OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8844             AC_SUBST(OFFICEOTRON_JAR)
8846             if test -z "$OFFICEOTRON_JAR"; then
8847                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
8848             fi
8849         else
8850             # check version of existing officeotron
8851             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
8852             if test 0"$OFFICEOTRON_VER" -lt 704; then
8853                 AC_MSG_ERROR([officeotron too old])
8854             fi
8855         fi
8856         if test "$build_os" = "cygwin"; then
8857             # In case of Cygwin it will be executed from Windows,
8858             # so we need to run bash and absolute path to validator
8859             # so instead of "odfvalidator" it will be
8860             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8861             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
8862         else
8863             OFFICEOTRON="sh $OFFICEOTRON"
8864         fi
8865     fi
8866     AC_SUBST(OFFICEOTRON)
8867 else
8868     AC_MSG_RESULT([no])
8871 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
8872 if test "$with_bffvalidator" != "no"; then
8873     AC_DEFINE(HAVE_BFFVALIDATOR)
8875     if test "$with_export_validation" = "no"; then
8876         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
8877     fi
8879     if test "$with_bffvalidator" = "yes"; then
8880         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
8881     else
8882         BFFVALIDATOR="$with_bffvalidator"
8883     fi
8885     if test "$build_os" = "cygwin"; then
8886         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
8887             AC_MSG_RESULT($BFFVALIDATOR)
8888         else
8889             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8890         fi
8891     elif test -n "$BFFVALIDATOR"; then
8892         # We are not in Cygwin but need to run Windows binary with wine
8893         AC_PATH_PROGS(WINE, wine)
8895         # so swap in a shell wrapper that converts paths transparently
8896         BFFVALIDATOR_EXE="$BFFVALIDATOR"
8897         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
8898         AC_SUBST(BFFVALIDATOR_EXE)
8899         AC_MSG_RESULT($BFFVALIDATOR)
8900     else
8901         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8902     fi
8903     AC_SUBST(BFFVALIDATOR)
8904 else
8905     AC_MSG_RESULT([no])
8908 dnl ===================================================================
8909 dnl Check for C preprocessor to use
8910 dnl ===================================================================
8911 AC_MSG_CHECKING([which C preprocessor to use in idlc])
8912 SYSTEM_UCPP_IS_GCC=
8913 if test -n "$with_idlc_cpp"; then
8914     AC_MSG_RESULT([$with_idlc_cpp])
8915     AC_PATH_PROG(SYSTEM_UCPP, $with_idlc_cpp)
8916     AC_MSG_CHECKING([if $with_idlc_cpp is GCC CPP])
8917     # ucpp will accept -v (to output version), warn about the others as unknown
8918     # and return 1 (due to -v)
8919     # gcc will accept -v (as verbose), --version (to output version) and -nostdinc
8920     # and return 0 (due to --version ) if all options are supported
8921     $SYSTEM_UCPP -v --version -nostdinc >/dev/null 2>/dev/null
8922     if test $? -eq 0;  then
8923         SYSTEM_UCPP_IS_GCC=TRUE
8924         AC_MSG_RESULT([yes])
8925     else
8926         AC_MSG_RESULT([no])
8927     fi
8928 else
8929     AC_MSG_RESULT([ucpp])
8930     AC_MSG_CHECKING([which ucpp to use])
8931     if test -n "$with_system_ucpp" -a "$with_system_ucpp" != "no"; then
8932         AC_MSG_RESULT([external])
8933         AC_PATH_PROG(SYSTEM_UCPP, ucpp)
8934     else
8935         AC_MSG_RESULT([internal])
8936         BUILD_TYPE="$BUILD_TYPE UCPP"
8937     fi
8939 AC_SUBST(SYSTEM_UCPP)
8940 AC_SUBST(SYSTEM_UCPP_IS_GCC)
8942 dnl ===================================================================
8943 dnl Check for epm (not needed for Windows)
8944 dnl ===================================================================
8945 AC_MSG_CHECKING([whether to enable EPM for packing])
8946 if test "$enable_epm" = "yes"; then
8947     AC_MSG_RESULT([yes])
8948     if test "$_os" != "WINNT"; then
8949         if test $_os = Darwin; then
8950             EPM=internal
8951         elif test -n "$with_epm"; then
8952             EPM=$with_epm
8953         else
8954             AC_PATH_PROG(EPM, epm, no)
8955         fi
8956         if test "$EPM" = "no" -o "$EPM" = "internal"; then
8957             AC_MSG_NOTICE([EPM will be built.])
8958             BUILD_TYPE="$BUILD_TYPE EPM"
8959             EPM=${WORKDIR}/UnpackedTarball/epm/epm
8960         else
8961             # Gentoo has some epm which is something different...
8962             AC_MSG_CHECKING([whether the found epm is the right epm])
8963             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
8964                 AC_MSG_RESULT([yes])
8965             else
8966                 AC_MSG_ERROR([no. Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8967             fi
8968             AC_MSG_CHECKING([epm version])
8969             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
8970             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
8971                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
8972                 AC_MSG_RESULT([OK, >= 3.7])
8973             else
8974                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
8975                 AC_MSG_ERROR([Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8976             fi
8977         fi
8978     fi
8980     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
8981         AC_MSG_CHECKING([for rpm])
8982         for a in "$RPM" rpmbuild rpm; do
8983             $a --usage >/dev/null 2> /dev/null
8984             if test $? -eq 0; then
8985                 RPM=$a
8986                 break
8987             else
8988                 $a --version >/dev/null 2> /dev/null
8989                 if test $? -eq 0; then
8990                     RPM=$a
8991                     break
8992                 fi
8993             fi
8994         done
8995         if test -z "$RPM"; then
8996             AC_MSG_ERROR([not found])
8997         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
8998             RPM_PATH=`which $RPM`
8999             AC_MSG_RESULT([$RPM_PATH])
9000             SCPDEFS="$SCPDEFS -DWITH_RPM"
9001         else
9002             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
9003         fi
9004     fi
9005     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
9006         AC_PATH_PROG(DPKG, dpkg, no)
9007         if test "$DPKG" = "no"; then
9008             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
9009         fi
9010     fi
9011     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
9012        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9013         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
9014             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
9015                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
9016                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
9017                     AC_MSG_RESULT([yes])
9018                 else
9019                     AC_MSG_RESULT([no])
9020                     if echo "$PKGFORMAT" | $GREP -q rpm; then
9021                         _pt="rpm"
9022                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
9023                         add_warning "the rpms will need to be installed with --nodeps"
9024                     else
9025                         _pt="pkg"
9026                     fi
9027                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
9028                     add_warning "the ${_pt}s will not be relocatable"
9029                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
9030                                  relocation will work, you need to patch your epm with the
9031                                  patch in epm/epm-3.7.patch or build with
9032                                  --with-epm=internal which will build a suitable epm])
9033                 fi
9034             fi
9035         fi
9036     fi
9037     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9038         AC_PATH_PROG(PKGMK, pkgmk, no)
9039         if test "$PKGMK" = "no"; then
9040             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
9041         fi
9042     fi
9043     AC_SUBST(RPM)
9044     AC_SUBST(DPKG)
9045     AC_SUBST(PKGMK)
9046 else
9047     for i in $PKGFORMAT; do
9048         case "$i" in
9049         aix | bsd | deb | pkg | rpm | native | portable)
9050             AC_MSG_ERROR(
9051                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
9052             ;;
9053         esac
9054     done
9055     AC_MSG_RESULT([no])
9056     EPM=NO
9058 AC_SUBST(EPM)
9060 ENABLE_LWP=
9061 if test "$enable_lotuswordpro" = "yes"; then
9062     ENABLE_LWP="TRUE"
9064 AC_SUBST(ENABLE_LWP)
9066 dnl ===================================================================
9067 dnl Check for building ODK
9068 dnl ===================================================================
9069 if test "$enable_odk" != yes; then
9070     unset DOXYGEN
9071 else
9072     if test "$with_doxygen" = no; then
9073         AC_MSG_CHECKING([for doxygen])
9074         unset DOXYGEN
9075         AC_MSG_RESULT([no])
9076     else
9077         if test "$with_doxygen" = yes; then
9078             AC_PATH_PROG([DOXYGEN], [doxygen])
9079             if test -z "$DOXYGEN"; then
9080                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
9081             fi
9082             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
9083                 if ! dot -V 2>/dev/null; then
9084                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
9085                 fi
9086             fi
9087         else
9088             AC_MSG_CHECKING([for doxygen])
9089             DOXYGEN=$with_doxygen
9090             AC_MSG_RESULT([$DOXYGEN])
9091         fi
9092         if test -n "$DOXYGEN"; then
9093             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
9094             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
9095             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
9096                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
9097             fi
9098         fi
9099     fi
9101 AC_SUBST([DOXYGEN])
9103 AC_MSG_CHECKING([whether to build the ODK])
9104 if test "$enable_odk" = yes; then
9105     AC_MSG_RESULT([yes])
9106     BUILD_TYPE="$BUILD_TYPE ODK"
9107 else
9108     AC_MSG_RESULT([no])
9111 dnl ===================================================================
9112 dnl Check for system zlib
9113 dnl ===================================================================
9114 if test "$with_system_zlib" = "auto"; then
9115     case "$_os" in
9116     WINNT)
9117         with_system_zlib="$with_system_libs"
9118         ;;
9119     *)
9120         if test "$enable_fuzzers" != "yes"; then
9121             with_system_zlib=yes
9122         else
9123             with_system_zlib=no
9124         fi
9125         ;;
9126     esac
9129 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
9130 dnl and has no pkg-config for it at least on some tinderboxes,
9131 dnl so leaving that out for now
9132 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
9133 AC_MSG_CHECKING([which zlib to use])
9134 if test "$with_system_zlib" = "yes"; then
9135     AC_MSG_RESULT([external])
9136     SYSTEM_ZLIB=TRUE
9137     AC_CHECK_HEADER(zlib.h, [],
9138         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
9139     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
9140         [AC_MSG_ERROR(zlib not found or functional)], [])
9141 else
9142     AC_MSG_RESULT([internal])
9143     SYSTEM_ZLIB=
9144     BUILD_TYPE="$BUILD_TYPE ZLIB"
9145     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
9146     if test "$COM" = "MSC"; then
9147         ZLIB_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/zlib.lib"
9148     else
9149         ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
9150     fi
9152 AC_SUBST(ZLIB_CFLAGS)
9153 AC_SUBST(ZLIB_LIBS)
9154 AC_SUBST(SYSTEM_ZLIB)
9156 dnl ===================================================================
9157 dnl Check for system jpeg
9158 dnl ===================================================================
9159 AC_MSG_CHECKING([which libjpeg to use])
9160 if test "$with_system_jpeg" = "yes"; then
9161     AC_MSG_RESULT([external])
9162     SYSTEM_LIBJPEG=TRUE
9163     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
9164         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
9165     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
9166         [AC_MSG_ERROR(jpeg library not found or functional)], [])
9167 else
9168     SYSTEM_LIBJPEG=
9169     AC_MSG_RESULT([internal, libjpeg-turbo])
9170     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
9172     case "$host_cpu" in
9173     x86_64 | amd64 | i*86 | x86 | ia32)
9174         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
9175         if test -z "$NASM" -a "$build_os" = "cygwin"; then
9176             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
9177                 NASM="$LODE_HOME/opt/bin/nasm"
9178             elif test -x "/opt/lo/bin/nasm"; then
9179                 NASM="/opt/lo/bin/nasm"
9180             fi
9181         fi
9183         if test -n "$NASM"; then
9184             AC_MSG_CHECKING([for object file format of host system])
9185             case "$host_os" in
9186               cygwin* | mingw* | pw32* | wsl*)
9187                 case "$host_cpu" in
9188                   x86_64)
9189                     objfmt='Win64-COFF'
9190                     ;;
9191                   *)
9192                     objfmt='Win32-COFF'
9193                     ;;
9194                 esac
9195               ;;
9196               msdosdjgpp* | go32*)
9197                 objfmt='COFF'
9198               ;;
9199               os2-emx*) # not tested
9200                 objfmt='MSOMF' # obj
9201               ;;
9202               linux*coff* | linux*oldld*)
9203                 objfmt='COFF' # ???
9204               ;;
9205               linux*aout*)
9206                 objfmt='a.out'
9207               ;;
9208               linux*)
9209                 case "$host_cpu" in
9210                   x86_64)
9211                     objfmt='ELF64'
9212                     ;;
9213                   *)
9214                     objfmt='ELF'
9215                     ;;
9216                 esac
9217               ;;
9218               kfreebsd* | freebsd* | netbsd* | openbsd*)
9219                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9220                   objfmt='BSD-a.out'
9221                 else
9222                   case "$host_cpu" in
9223                     x86_64 | amd64)
9224                       objfmt='ELF64'
9225                       ;;
9226                     *)
9227                       objfmt='ELF'
9228                       ;;
9229                   esac
9230                 fi
9231               ;;
9232               solaris* | sunos* | sysv* | sco*)
9233                 case "$host_cpu" in
9234                   x86_64)
9235                     objfmt='ELF64'
9236                     ;;
9237                   *)
9238                     objfmt='ELF'
9239                     ;;
9240                 esac
9241               ;;
9242               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9243                 case "$host_cpu" in
9244                   x86_64)
9245                     objfmt='Mach-O64'
9246                     ;;
9247                   *)
9248                     objfmt='Mach-O'
9249                     ;;
9250                 esac
9251               ;;
9252               *)
9253                 objfmt='ELF ?'
9254               ;;
9255             esac
9257             AC_MSG_RESULT([$objfmt])
9258             if test "$objfmt" = 'ELF ?'; then
9259               objfmt='ELF'
9260               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9261             fi
9263             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9264             case "$objfmt" in
9265               MSOMF)      NAFLAGS='-fobj -DOBJ32 -DPIC';;
9266               Win32-COFF) NAFLAGS='-fwin32 -DWIN32 -DPIC';;
9267               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__ -DPIC';;
9268               COFF)       NAFLAGS='-fcoff -DCOFF -DPIC';;
9269               a.out)      NAFLAGS='-faout -DAOUT -DPIC';;
9270               BSD-a.out)  NAFLAGS='-faoutb -DAOUT -DPIC';;
9271               ELF)        NAFLAGS='-felf -DELF -DPIC';;
9272               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__ -DPIC';;
9273               RDF)        NAFLAGS='-frdf -DRDF -DPIC';;
9274               Mach-O)     NAFLAGS='-fmacho -DMACHO -DPIC';;
9275               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__ -DPIC';;
9276             esac
9277             AC_MSG_RESULT([$NAFLAGS])
9279             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9280             cat > conftest.asm << EOF
9281             [%line __oline__ "configure"
9282                     section .text
9283                     global  _main,main
9284             _main:
9285             main:   xor     eax,eax
9286                     ret
9287             ]
9289             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9290             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9291               AC_MSG_RESULT(yes)
9292             else
9293               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9294               cat conftest.asm >&AS_MESSAGE_LOG_FD
9295               rm -rf conftest*
9296               AC_MSG_RESULT(no)
9297               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9298               NASM=""
9299             fi
9301         fi
9303         if test -z "$NASM"; then
9304 cat << _EOS
9305 ****************************************************************************
9306 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9307 To get one please:
9309 _EOS
9310             if test "$build_os" = "cygwin"; then
9311 cat << _EOS
9312 install a pre-compiled binary for Win32
9314 mkdir -p /opt/lo/bin
9315 cd /opt/lo/bin
9316 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9317 chmod +x nasm
9319 or get and install one from http://www.nasm.us/
9321 Then re-run autogen.sh
9323 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9324 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`which nasm\` finds it.
9326 _EOS
9327             else
9328 cat << _EOS
9329 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md
9331 _EOS
9332             fi
9333             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9334             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9335         fi
9336       ;;
9337     esac
9340 AC_SUBST(NASM)
9341 AC_SUBST(NAFLAGS)
9342 AC_SUBST(LIBJPEG_CFLAGS)
9343 AC_SUBST(LIBJPEG_LIBS)
9344 AC_SUBST(SYSTEM_LIBJPEG)
9346 dnl ===================================================================
9347 dnl Check for system clucene
9348 dnl ===================================================================
9349 dnl we should rather be using
9350 dnl libo_CHECK_SYSTEM_MODULE([clucence],[CLUCENE],[liblucence-core]) here
9351 dnl but the contribs-lib check seems tricky
9352 if test "$enable_xmlhelp" = yes -o "$enable_extension_integration" = yes; then
9353 AC_MSG_CHECKING([which clucene to use])
9354 if test "$with_system_clucene" = "yes"; then
9355     AC_MSG_RESULT([external])
9356     SYSTEM_CLUCENE=TRUE
9357     PKG_CHECK_MODULES(CLUCENE, libclucene-core)
9358     CLUCENE_CFLAGS=[$(printf '%s' "$CLUCENE_CFLAGS" | sed -e 's@-I[^ ]*/CLucene/ext@@' -e "s/-I/${ISYSTEM?}/g")]
9359     FilterLibs "${CLUCENE_LIBS}"
9360     CLUCENE_LIBS="${filteredlibs}"
9361     AC_LANG_PUSH([C++])
9362     save_CXXFLAGS=$CXXFLAGS
9363     save_CPPFLAGS=$CPPFLAGS
9364     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9365     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9366     dnl http://sourceforge.net/tracker/index.php?func=detail&aid=3392466&group_id=80013&atid=558446
9367     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9368     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9369                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9370     CXXFLAGS=$save_CXXFLAGS
9371     CPPFLAGS=$save_CPPFLAGS
9372     AC_LANG_POP([C++])
9374     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9375 else
9376     AC_MSG_RESULT([internal])
9377     SYSTEM_CLUCENE=
9378     BUILD_TYPE="$BUILD_TYPE CLUCENE"
9381 AC_SUBST(SYSTEM_CLUCENE)
9382 AC_SUBST(CLUCENE_CFLAGS)
9383 AC_SUBST(CLUCENE_LIBS)
9385 dnl ===================================================================
9386 dnl Check for system expat
9387 dnl ===================================================================
9388 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9390 dnl ===================================================================
9391 dnl Check for system xmlsec
9392 dnl ===================================================================
9393 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.28])
9395 AC_MSG_CHECKING([whether to enable Embedded OpenType support])
9396 if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_eot" = "yes"; then
9397     ENABLE_EOT="TRUE"
9398     AC_DEFINE([ENABLE_EOT])
9399     AC_MSG_RESULT([yes])
9401     libo_CHECK_SYSTEM_MODULE([libeot],[LIBEOT],[libeot >= 0.01])
9402 else
9403     ENABLE_EOT=
9404     AC_MSG_RESULT([no])
9406 AC_SUBST([ENABLE_EOT])
9408 dnl ===================================================================
9409 dnl Check for DLP libs
9410 dnl ===================================================================
9411 AS_IF([test "$COM" = "MSC"],
9412       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9413       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9415 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1],["-I${WORKDIR}/UnpackedTarball/librevenge/inc"],["-L${librevenge_libdir} -lrevenge-0.0"])
9417 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9419 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9421 AS_IF([test "$COM" = "MSC"],
9422       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9423       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9425 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10],["-I${WORKDIR}/UnpackedTarball/libwpd/inc"],["-L${libwpd_libdir} -lwpd-0.10"])
9427 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9429 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9430 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.12])
9432 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9434 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9436 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9438 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.1])
9439 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.21])
9441 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9442 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10])
9444 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9446 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9447 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9449 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9451 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9453 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9455 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9457 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9458 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9460 dnl ===================================================================
9461 dnl Check for system lcms2
9462 dnl ===================================================================
9463 if test "$with_system_lcms2" != "yes"; then
9464     SYSTEM_LCMS2=
9466 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2],["-I${WORKDIR}/UnpackedTarball/lcms2/include"],["-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"])
9467 if test "$GCC" = "yes"; then
9468     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9470 if test "$COM" = "MSC"; then # override the above
9471     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9474 dnl ===================================================================
9475 dnl Check for system cppunit
9476 dnl ===================================================================
9477 if test "$_os" != "Android" ; then
9478     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9481 dnl ===================================================================
9482 dnl Check whether freetype is available
9483 dnl ===================================================================
9484 if test "$using_freetype_fontconfig" = yes; then
9485     AC_MSG_CHECKING([which freetype to use])
9487 if test "$using_freetype_fontconfig" = yes -a "$test_system_freetype" != no; then
9488     AC_MSG_RESULT([external])
9489     # FreeType has 3 different kinds of versions
9490     # * release, like 2.4.10
9491     # * libtool, like 13.0.7 (this what pkg-config returns)
9492     # * soname
9493     # FreeType's docs/VERSION.DLL provides a table mapping between the three
9494     #
9495     # 9.9.3 is 2.2.0
9496     # When the minimal version is at least 2.8.1, remove Skia's check down below.
9497     PKG_CHECK_MODULES(FREETYPE, freetype2 >= 9.9.3)
9498     FREETYPE_CFLAGS=$(printf '%s' "$FREETYPE_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9499     FilterLibs "${FREETYPE_LIBS}"
9500     FREETYPE_LIBS="${filteredlibs}"
9501     SYSTEM_FREETYPE=TRUE
9502 elif test "$using_freetype_fontconfig" = yes; then
9503     AC_MSG_RESULT([internal])
9504     FREETYPE_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"
9505     if test "x$ac_config_site_64bit_host" = xYES; then
9506         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9507     else
9508         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9509     fi
9510     BUILD_TYPE="$BUILD_TYPE FREETYPE"
9512 AC_SUBST(FREETYPE_CFLAGS)
9513 AC_SUBST(FREETYPE_LIBS)
9514 AC_SUBST([SYSTEM_FREETYPE])
9516 # ===================================================================
9517 # Check for system libxslt
9518 # to prevent incompatibilities between internal libxml2 and external libxslt,
9519 # or vice versa, use with_system_libxml here
9520 # ===================================================================
9521 if test "$with_system_libxml" = "auto"; then
9522     case "$_os" in
9523     WINNT|iOS|Android)
9524         with_system_libxml="$with_system_libs"
9525         ;;
9526     Emscripten)
9527         with_system_libxml=no
9528         ;;
9529     *)
9530         if test "$enable_fuzzers" != "yes"; then
9531             with_system_libxml=yes
9532         else
9533             with_system_libxml=no
9534         fi
9535         ;;
9536     esac
9539 AC_MSG_CHECKING([which libxslt to use])
9540 if test "$with_system_libxml" = "yes"; then
9541     AC_MSG_RESULT([external])
9542     SYSTEM_LIBXSLT=TRUE
9543     if test "$_os" = "Darwin"; then
9544         dnl make sure to use SDK path
9545         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9546         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9547         dnl omit -L/usr/lib
9548         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9549         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9550     else
9551         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9552         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9553         FilterLibs "${LIBXSLT_LIBS}"
9554         LIBXSLT_LIBS="${filteredlibs}"
9555         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9556         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9557         FilterLibs "${LIBEXSLT_LIBS}"
9558         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9559     fi
9561     dnl Check for xsltproc
9562     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9563     if test "$XSLTPROC" = "no"; then
9564         AC_MSG_ERROR([xsltproc is required])
9565     fi
9566 else
9567     AC_MSG_RESULT([internal])
9568     SYSTEM_LIBXSLT=
9569     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9571 AC_SUBST(SYSTEM_LIBXSLT)
9572 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9573     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9575 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9577 AC_SUBST(LIBEXSLT_CFLAGS)
9578 AC_SUBST(LIBEXSLT_LIBS)
9579 AC_SUBST(LIBXSLT_CFLAGS)
9580 AC_SUBST(LIBXSLT_LIBS)
9581 AC_SUBST(XSLTPROC)
9583 # ===================================================================
9584 # Check for system libxml
9585 # ===================================================================
9586 AC_MSG_CHECKING([which libxml to use])
9587 if test "$with_system_libxml" = "yes"; then
9588     AC_MSG_RESULT([external])
9589     SYSTEM_LIBXML=TRUE
9590     if test "$_os" = "Darwin"; then
9591         dnl make sure to use SDK path
9592         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9593         dnl omit -L/usr/lib
9594         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9595     elif test $_os = iOS; then
9596         dnl make sure to use SDK path
9597         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9598         LIBXML_CFLAGS="-I$usr/include/libxml2"
9599         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9600     else
9601         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9602         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9603         FilterLibs "${LIBXML_LIBS}"
9604         LIBXML_LIBS="${filteredlibs}"
9605     fi
9607     dnl Check for xmllint
9608     AC_PATH_PROG(XMLLINT, xmllint, no)
9609     if test "$XMLLINT" = "no"; then
9610         AC_MSG_ERROR([xmllint is required])
9611     fi
9612 else
9613     AC_MSG_RESULT([internal])
9614     SYSTEM_LIBXML=
9615     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9616     if test "$COM" = "MSC"; then
9617         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9618     fi
9619     if test "$COM" = "MSC"; then
9620         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9621     else
9622         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9623         if test "$_os" = Android; then
9624             LIBXML_LIBS="$LIBXML_LIBS -lm"
9625         fi
9626     fi
9627     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9629 AC_SUBST(SYSTEM_LIBXML)
9630 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9631     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9633 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9634 AC_SUBST(LIBXML_CFLAGS)
9635 AC_SUBST(LIBXML_LIBS)
9636 AC_SUBST(XMLLINT)
9638 # =====================================================================
9639 # Checking for a Python interpreter with version >= 3.3.
9640 # Optionally user can pass an option to configure, i. e.
9641 # ./configure PYTHON=/usr/bin/python
9642 # =====================================================================
9643 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9644     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9645     # unless PYTHON is defined as above which allows 'system'
9646     enable_python=internal
9648 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9649     if test -n "$PYTHON"; then
9650         PYTHON_FOR_BUILD=$PYTHON
9651     else
9652         # This allows a lack of system python with no error, we use internal one in that case.
9653         AM_PATH_PYTHON([3.3],, [:])
9654         # Clean PYTHON_VERSION checked below if cross-compiling
9655         PYTHON_VERSION=""
9656         if test "$PYTHON" != ":"; then
9657             PYTHON_FOR_BUILD=$PYTHON
9658         fi
9659     fi
9661 AC_SUBST(PYTHON_FOR_BUILD)
9663 # Checks for Python to use for Pyuno
9664 AC_MSG_CHECKING([which Python to use for Pyuno])
9665 case "$enable_python" in
9666 no|disable)
9667     if test -z $PYTHON_FOR_BUILD; then
9668         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9669         # requirement from the choice whether to include Python stuff in the installer, but why
9670         # bother?
9671         if test "$cross_compiling" = yes; then
9672             enable_python=system
9673         else
9674             AC_MSG_ERROR([Python is required at build time.])
9675         fi
9676     fi
9677     enable_python=no
9678     AC_MSG_RESULT([none])
9679     ;;
9680 ""|yes|auto)
9681     if test "$DISABLE_SCRIPTING" = TRUE -a -n "$PYTHON_FOR_BUILD"; then
9682         AC_MSG_RESULT([no, overridden by --disable-scripting])
9683         enable_python=no
9684     elif test $build_os = cygwin; then
9685         dnl When building on Windows we don't attempt to use any installed
9686         dnl "system"  Python.
9687         AC_MSG_RESULT([fully internal])
9688         enable_python=internal
9689     elif test "$cross_compiling" = yes; then
9690         AC_MSG_RESULT([system])
9691         enable_python=system
9692     else
9693         # Unset variables set by the above AM_PATH_PYTHON so that
9694         # we actually do check anew.
9695         AC_MSG_RESULT([])
9696         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
9697         AM_PATH_PYTHON([3.3],, [:])
9698         AC_MSG_CHECKING([which Python to use for Pyuno])
9699         if test "$PYTHON" = ":"; then
9700             if test -z "$PYTHON_FOR_BUILD"; then
9701                 AC_MSG_RESULT([fully internal])
9702             else
9703                 AC_MSG_RESULT([internal])
9704             fi
9705             enable_python=internal
9706         else
9707             AC_MSG_RESULT([system])
9708             enable_python=system
9709         fi
9710     fi
9711     ;;
9712 internal)
9713     AC_MSG_RESULT([internal])
9714     ;;
9715 fully-internal)
9716     AC_MSG_RESULT([fully internal])
9717     enable_python=internal
9718     ;;
9719 system)
9720     AC_MSG_RESULT([system])
9721     if test "$_os" = Darwin -a -z "$PYTHON"; then
9722         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
9723     fi
9724     ;;
9726     AC_MSG_ERROR([Incorrect --enable-python option])
9727     ;;
9728 esac
9730 if test $enable_python != no; then
9731     BUILD_TYPE="$BUILD_TYPE PYUNO"
9734 if test $enable_python = system; then
9735     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
9736         # Fallback: Accept these in the environment, or as set above
9737         # for MacOSX.
9738         :
9739     elif test "$cross_compiling" != yes; then
9740         # Unset variables set by the above AM_PATH_PYTHON so that
9741         # we actually do check anew.
9742         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
9743         # This causes an error if no python command is found
9744         AM_PATH_PYTHON([3.3])
9745         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
9746         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
9747         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
9748         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
9749         if test -z "$PKG_CONFIG"; then
9750             PYTHON_CFLAGS="-I$python_include"
9751             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9752         elif $PKG_CONFIG --exists python-$python_version-embed; then
9753             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
9754             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
9755         elif $PKG_CONFIG --exists python-$python_version; then
9756             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
9757             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
9758         else
9759             PYTHON_CFLAGS="-I$python_include"
9760             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9761         fi
9762         FilterLibs "${PYTHON_LIBS}"
9763         PYTHON_LIBS="${filteredlibs}"
9764     else
9765         dnl How to find out the cross-compilation Python installation path?
9766         AC_MSG_CHECKING([for python version])
9767         AS_IF([test -n "$PYTHON_VERSION"],
9768               [AC_MSG_RESULT([$PYTHON_VERSION])],
9769               [AC_MSG_RESULT([not found])
9770                AC_MSG_ERROR([no usable python found])])
9771         test -n "$PYTHON_CFLAGS" && break
9772     fi
9774     dnl Check if the headers really work
9775     save_CPPFLAGS="$CPPFLAGS"
9776     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
9777     AC_CHECK_HEADER(Python.h)
9778     CPPFLAGS="$save_CPPFLAGS"
9780     # let the PYTHON_FOR_BUILD match the same python installation that
9781     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
9782     # better for PythonTests.
9783     PYTHON_FOR_BUILD=$PYTHON
9786 if test "$with_lxml" != no; then
9787     if test -z "$PYTHON_FOR_BUILD"; then
9788         case $build_os in
9789             cygwin)
9790                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
9791                 ;;
9792             *)
9793                 if test "$cross_compiling" != yes ; then
9794                     BUILD_TYPE="$BUILD_TYPE LXML"
9795                 fi
9796                 ;;
9797         esac
9798     else
9799         AC_MSG_CHECKING([for python lxml])
9800         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
9801             AC_MSG_RESULT([yes])
9802         else
9803             case $build_os in
9804                 cygwin)
9805                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
9806                     ;;
9807                 *)
9808                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
9809                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
9810                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
9811                         else
9812                             BUILD_TYPE="$BUILD_TYPE LXML"
9813                             AC_MSG_RESULT([no, using internal lxml])
9814                         fi
9815                     else
9816                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
9817                     fi
9818                     ;;
9819             esac
9820         fi
9821     fi
9824 dnl By now enable_python should be "system", "internal" or "no"
9825 case $enable_python in
9826 system)
9827     SYSTEM_PYTHON=TRUE
9829     if test "x$ac_cv_header_Python_h" != "xyes"; then
9830        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
9831     fi
9833     AC_LANG_PUSH(C)
9834     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
9835     AC_MSG_CHECKING([for correct python library version])
9836        AC_RUN_IFELSE([AC_LANG_SOURCE([[
9837 #include <Python.h>
9839 int main(int argc, char **argv) {
9840    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
9841    else return 1;
9843        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
9844     AC_LANG_POP(C)
9846     dnl FIXME Check if the Python library can be linked with, too?
9847     ;;
9849 internal)
9850     SYSTEM_PYTHON=
9851     PYTHON_VERSION_MAJOR=3
9852     PYTHON_VERSION_MINOR=8
9853     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.10
9854     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
9855         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
9856     fi
9857     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
9858     BUILD_TYPE="$BUILD_TYPE PYTHON"
9859     if test "$OS" = LINUX -o "$OS" = WNT ; then
9860         BUILD_TYPE="$BUILD_TYPE LIBFFI"
9861     fi
9862     # Embedded Python dies without Home set
9863     if test "$HOME" = ""; then
9864         export HOME=""
9865     fi
9866     ;;
9868     DISABLE_PYTHON=TRUE
9869     SYSTEM_PYTHON=
9870     ;;
9872     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
9873     ;;
9874 esac
9876 AC_SUBST(DISABLE_PYTHON)
9877 AC_SUBST(SYSTEM_PYTHON)
9878 AC_SUBST(PYTHON_CFLAGS)
9879 AC_SUBST(PYTHON_LIBS)
9880 AC_SUBST(PYTHON_VERSION)
9881 AC_SUBST(PYTHON_VERSION_MAJOR)
9882 AC_SUBST(PYTHON_VERSION_MINOR)
9884 AC_MSG_CHECKING([whether to build LibreLogo])
9885 case "$enable_python" in
9886 no|disable)
9887     AC_MSG_RESULT([no; Python disabled])
9888     ;;
9890     if test "${enable_librelogo}" = "no"; then
9891         AC_MSG_RESULT([no])
9892     else
9893         AC_MSG_RESULT([yes])
9894         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
9895         AC_DEFINE([ENABLE_LIBRELOGO],1)
9896     fi
9897     ;;
9898 esac
9899 AC_SUBST(ENABLE_LIBRELOGO)
9901 ENABLE_MARIADBC=
9902 MARIADBC_MAJOR=1
9903 MARIADBC_MINOR=0
9904 MARIADBC_MICRO=2
9905 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
9906 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
9907     ENABLE_MARIADBC=TRUE
9908     AC_MSG_RESULT([yes])
9909     BUILD_TYPE="$BUILD_TYPE MARIADBC"
9910 else
9911     AC_MSG_RESULT([no])
9913 AC_SUBST(ENABLE_MARIADBC)
9914 AC_SUBST(MARIADBC_MAJOR)
9915 AC_SUBST(MARIADBC_MINOR)
9916 AC_SUBST(MARIADBC_MICRO)
9918 if test "$ENABLE_MARIADBC" = "TRUE"; then
9919     dnl ===================================================================
9920     dnl Check for system MariaDB
9921     dnl ===================================================================
9922     AC_MSG_CHECKING([which MariaDB to use])
9923     if test "$with_system_mariadb" = "yes"; then
9924         AC_MSG_RESULT([external])
9925         SYSTEM_MARIADB_CONNECTOR_C=TRUE
9926         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
9927         if test -z "$MARIADBCONFIG"; then
9928             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
9929             if test -z "$MARIADBCONFIG"; then
9930                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
9931                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
9932             fi
9933         fi
9934         AC_MSG_CHECKING([MariaDB version])
9935         MARIADB_VERSION=`$MARIADBCONFIG --version`
9936         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
9937         if test "$MARIADB_MAJOR" -ge "5"; then
9938             AC_MSG_RESULT([OK])
9939         else
9940             AC_MSG_ERROR([too old, use 5.0.x or later])
9941         fi
9942         AC_MSG_CHECKING([for MariaDB Client library])
9943         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
9944         if test "$COM_IS_CLANG" = TRUE; then
9945             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
9946         fi
9947         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
9948         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
9949         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
9950         dnl linux32:
9951         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
9952             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
9953             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
9954                 | sed -e 's|/lib64/|/lib/|')
9955         fi
9956         FilterLibs "${MARIADB_LIBS}"
9957         MARIADB_LIBS="${filteredlibs}"
9958         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
9959         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
9960         if test "$enable_bundle_mariadb" = "yes"; then
9961             AC_MSG_RESULT([yes])
9962             BUNDLE_MARIADB_CONNECTOR_C=TRUE
9963             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
9965 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
9967 /g' | grep -E '(mysqlclient|mariadb)')
9968             if test "$_os" = "Darwin"; then
9969                 LIBMARIADB=${LIBMARIADB}.dylib
9970             elif test "$_os" = "WINNT"; then
9971                 LIBMARIADB=${LIBMARIADB}.dll
9972             else
9973                 LIBMARIADB=${LIBMARIADB}.so
9974             fi
9975             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
9976             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
9977             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
9978                 AC_MSG_RESULT([found.])
9979                 PathFormat "$LIBMARIADB_PATH"
9980                 LIBMARIADB_PATH="$formatted_path"
9981             else
9982                 AC_MSG_ERROR([not found.])
9983             fi
9984         else
9985             AC_MSG_RESULT([no])
9986             BUNDLE_MARIADB_CONNECTOR_C=
9987         fi
9988     else
9989         AC_MSG_RESULT([internal])
9990         SYSTEM_MARIADB_CONNECTOR_C=
9991         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
9992         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
9993         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
9994     fi
9996     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
9997     AC_SUBST(MARIADB_CFLAGS)
9998     AC_SUBST(MARIADB_LIBS)
9999     AC_SUBST(LIBMARIADB)
10000     AC_SUBST(LIBMARIADB_PATH)
10001     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
10004 dnl ===================================================================
10005 dnl Check for system hsqldb
10006 dnl ===================================================================
10007 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
10008     HSQLDB_USE_JDBC_4_1=
10009     AC_MSG_CHECKING([which hsqldb to use])
10010     if test "$with_system_hsqldb" = "yes"; then
10011         AC_MSG_RESULT([external])
10012         SYSTEM_HSQLDB=TRUE
10013         if test -z $HSQLDB_JAR; then
10014             HSQLDB_JAR=/usr/share/java/hsqldb.jar
10015         fi
10016         if ! test -f $HSQLDB_JAR; then
10017                AC_MSG_ERROR(hsqldb.jar not found.)
10018         fi
10019         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
10020         export HSQLDB_JAR
10021         if $PERL -e \
10022            'use Archive::Zip;
10023             my $file = "$ENV{'HSQLDB_JAR'}";
10024             my $zip = Archive::Zip->new( $file );
10025             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
10026             if ( $mf =~ m/Specification-Version: 1.8.*/ )
10027             {
10028                 push @l, split(/\n/, $mf);
10029                 foreach my $line (@l)
10030                 {
10031                     if ($line =~ m/Specification-Version:/)
10032                     {
10033                         ($t, $version) = split (/:/,$line);
10034                         $version =~ s/^\s//;
10035                         ($a, $b, $c, $d) = split (/\./,$version);
10036                         if ($c == "0" && $d > "8")
10037                         {
10038                             exit 0;
10039                         }
10040                         else
10041                         {
10042                             exit 1;
10043                         }
10044                     }
10045                 }
10046             }
10047             else
10048             {
10049                 exit 1;
10050             }'; then
10051             AC_MSG_RESULT([yes])
10052         else
10053             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
10054         fi
10055     else
10056         AC_MSG_RESULT([internal])
10057         SYSTEM_HSQLDB=
10058         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10059         NEED_ANT=TRUE
10060         AC_MSG_CHECKING([whether hsqldb should be built with JDBC 4.1])
10061         javanumver=`$JAVAINTERPRETER -version 2>&1 | $AWK -v num=true -f $SRC_ROOT/solenv/bin/getcompver.awk`
10062         if expr "$javanumver" '>=' 000100060000 > /dev/null; then
10063             AC_MSG_RESULT([yes])
10064             HSQLDB_USE_JDBC_4_1=TRUE
10065         else
10066             AC_MSG_RESULT([no])
10067         fi
10068     fi
10069 else
10070     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
10071         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10072     fi
10074 AC_SUBST(SYSTEM_HSQLDB)
10075 AC_SUBST(HSQLDB_JAR)
10076 AC_SUBST([HSQLDB_USE_JDBC_4_1])
10078 dnl ===================================================================
10079 dnl Check for PostgreSQL stuff
10080 dnl ===================================================================
10081 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
10082 if test "x$enable_postgresql_sdbc" != "xno"; then
10083     AC_MSG_RESULT([yes])
10084     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
10086     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
10087         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
10088     fi
10089     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
10090         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
10091     fi
10093     postgres_interface=""
10094     if test "$with_system_postgresql" = "yes"; then
10095         postgres_interface="external PostgreSQL"
10096         SYSTEM_POSTGRESQL=TRUE
10097         if test "$_os" = Darwin; then
10098             supp_path=''
10099             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
10100                 pg_supp_path="$P_SEP$d$pg_supp_path"
10101             done
10102         fi
10103         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
10104         if test -n "$PGCONFIG"; then
10105             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
10106             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
10107         else
10108             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
10109               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
10110               POSTGRESQL_LIB=$POSTGRESQL_LIBS
10111             ],[
10112               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
10113             ])
10114         fi
10115         FilterLibs "${POSTGRESQL_LIB}"
10116         POSTGRESQL_LIB="${filteredlibs}"
10117     else
10118         # if/when anything else than PostgreSQL uses Kerberos,
10119         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
10120         WITH_KRB5=
10121         WITH_GSSAPI=
10122         case "$_os" in
10123         Darwin)
10124             # macOS has system MIT Kerberos 5 since 10.4
10125             if test "$with_krb5" != "no"; then
10126                 WITH_KRB5=TRUE
10127                 save_LIBS=$LIBS
10128                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
10129                 # that the libraries where these functions are located on macOS will change, is it?
10130                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10131                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10132                 KRB5_LIBS=$LIBS
10133                 LIBS=$save_LIBS
10134                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10135                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10136                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10137                 LIBS=$save_LIBS
10138             fi
10139             if test "$with_gssapi" != "no"; then
10140                 WITH_GSSAPI=TRUE
10141                 save_LIBS=$LIBS
10142                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10143                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10144                 GSSAPI_LIBS=$LIBS
10145                 LIBS=$save_LIBS
10146             fi
10147             ;;
10148         WINNT)
10149             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
10150                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
10151             fi
10152             ;;
10153         Linux|GNU|*BSD|DragonFly)
10154             if test "$with_krb5" != "no"; then
10155                 WITH_KRB5=TRUE
10156                 save_LIBS=$LIBS
10157                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10158                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10159                 KRB5_LIBS=$LIBS
10160                 LIBS=$save_LIBS
10161                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10162                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10163                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10164                 LIBS=$save_LIBS
10165             fi
10166             if test "$with_gssapi" != "no"; then
10167                 WITH_GSSAPI=TRUE
10168                 save_LIBS=$LIBS
10169                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10170                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10171                 GSSAPI_LIBS=$LIBS
10172                 LIBS=$save_LIBS
10173             fi
10174             ;;
10175         *)
10176             if test "$with_krb5" = "yes"; then
10177                 WITH_KRB5=TRUE
10178                 save_LIBS=$LIBS
10179                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10180                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10181                 KRB5_LIBS=$LIBS
10182                 LIBS=$save_LIBS
10183                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10184                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10185                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10186                 LIBS=$save_LIBS
10187             fi
10188             if test "$with_gssapi" = "yes"; then
10189                 WITH_GSSAPI=TRUE
10190                 save_LIBS=$LIBS
10191                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10192                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10193                 LIBS=$save_LIBS
10194                 GSSAPI_LIBS=$LIBS
10195             fi
10196         esac
10198         if test -n "$with_libpq_path"; then
10199             SYSTEM_POSTGRESQL=TRUE
10200             postgres_interface="external libpq"
10201             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
10202             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
10203         else
10204             SYSTEM_POSTGRESQL=
10205             postgres_interface="internal"
10206             POSTGRESQL_LIB=""
10207             POSTGRESQL_INC="%OVERRIDE_ME%"
10208             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10209         fi
10210     fi
10212     AC_MSG_CHECKING([PostgreSQL C interface])
10213     AC_MSG_RESULT([$postgres_interface])
10215     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10216         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10217         save_CFLAGS=$CFLAGS
10218         save_CPPFLAGS=$CPPFLAGS
10219         save_LIBS=$LIBS
10220         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10221         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10222         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10223         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10224             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10225         CFLAGS=$save_CFLAGS
10226         CPPFLAGS=$save_CPPFLAGS
10227         LIBS=$save_LIBS
10228     fi
10229     BUILD_POSTGRESQL_SDBC=TRUE
10230 else
10231     AC_MSG_RESULT([no])
10233 AC_SUBST(WITH_KRB5)
10234 AC_SUBST(WITH_GSSAPI)
10235 AC_SUBST(GSSAPI_LIBS)
10236 AC_SUBST(KRB5_LIBS)
10237 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10238 AC_SUBST(SYSTEM_POSTGRESQL)
10239 AC_SUBST(POSTGRESQL_INC)
10240 AC_SUBST(POSTGRESQL_LIB)
10242 dnl ===================================================================
10243 dnl Check for Firebird stuff
10244 dnl ===================================================================
10245 ENABLE_FIREBIRD_SDBC=
10246 if test "$enable_firebird_sdbc" = "yes" ; then
10247     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10249     dnl ===================================================================
10250     dnl Check for system Firebird
10251     dnl ===================================================================
10252     AC_MSG_CHECKING([which Firebird to use])
10253     if test "$with_system_firebird" = "yes"; then
10254         AC_MSG_RESULT([external])
10255         SYSTEM_FIREBIRD=TRUE
10256         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10257         if test -z "$FIREBIRDCONFIG"; then
10258             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10259             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10260                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10261             ])
10262             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10263         else
10264             AC_MSG_NOTICE([fb_config found])
10265             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10266             AC_MSG_CHECKING([for Firebird Client library])
10267             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10268             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10269             FilterLibs "${FIREBIRD_LIBS}"
10270             FIREBIRD_LIBS="${filteredlibs}"
10271         fi
10272         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10273         AC_MSG_CHECKING([Firebird version])
10274         if test -n "${FIREBIRD_VERSION}"; then
10275             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10276             if test "$FIREBIRD_MAJOR" -ge "3"; then
10277                 AC_MSG_RESULT([OK])
10278             else
10279                 AC_MSG_ERROR([Ensure firebird >= 3 is installed])
10280             fi
10281         else
10282             save_CFLAGS="${CFLAGS}"
10283             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10284             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10285 #if defined(FB_API_VER) && FB_API_VER == 30
10286 int fb_api_is_30(void) { return 0; }
10287 #else
10288 #error "Wrong Firebird API version"
10289 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10290             CFLAGS="$save_CFLAGS"
10291         fi
10292         ENABLE_FIREBIRD_SDBC=TRUE
10293         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10294     elif test "$enable_database_connectivity" = no; then
10295         AC_MSG_RESULT([none])
10296     elif test "$cross_compiling" = "yes"; then
10297         AC_MSG_RESULT([none])
10298     else
10299         dnl Embedded Firebird has version 3.0
10300         dnl We need libatomic_ops for any non X86/X64 system
10301         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10302             dnl ===================================================================
10303             dnl Check for system libatomic_ops
10304             dnl ===================================================================
10305             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10306             if test "$with_system_libatomic_ops" = "yes"; then
10307                 SYSTEM_LIBATOMIC_OPS=TRUE
10308                 AC_CHECK_HEADERS(atomic_ops.h, [],
10309                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10310             else
10311                 SYSTEM_LIBATOMIC_OPS=
10312                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10313                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10314                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10315             fi
10316         fi
10318         AC_MSG_RESULT([internal])
10319         SYSTEM_FIREBIRD=
10320         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10321         FIREBIRD_LIBS="-lfbclient"
10323         if test "$with_system_libtommath" = "yes"; then
10324             SYSTEM_LIBTOMMATH=TRUE
10325             dnl check for tommath presence
10326             save_LIBS=$LIBS
10327             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10328             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10329             LIBS=$save_LIBS
10330         else
10331             SYSTEM_LIBTOMMATH=
10332             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10333             LIBTOMMATH_LIBS="-ltommath"
10334             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10335         fi
10337         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10338         ENABLE_FIREBIRD_SDBC=TRUE
10339         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10340     fi
10342 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10343 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10344 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10345 AC_SUBST(LIBATOMIC_OPS_LIBS)
10346 AC_SUBST(SYSTEM_FIREBIRD)
10347 AC_SUBST(FIREBIRD_CFLAGS)
10348 AC_SUBST(FIREBIRD_LIBS)
10349 AC_SUBST(SYSTEM_LIBTOMMATH)
10350 AC_SUBST(LIBTOMMATH_CFLAGS)
10351 AC_SUBST(LIBTOMMATH_LIBS)
10353 dnl ===================================================================
10354 dnl Check for system curl
10355 dnl ===================================================================
10356 AC_MSG_CHECKING([which libcurl to use])
10357 if test "$with_system_curl" = "auto"; then
10358     with_system_curl="$with_system_libs"
10361 if test "$enable_curl" = "yes" -a "$with_system_curl" = "yes"; then
10362     AC_MSG_RESULT([external])
10363     SYSTEM_CURL=TRUE
10365     PKG_CHECK_MODULES(CURL, libcurl >= 7.68.0)
10367     ENABLE_CURL=TRUE
10368 elif test "$enable_curl" = "no"; then
10369     AC_MSG_RESULT([none])
10370 else
10371     AC_MSG_RESULT([internal])
10372     SYSTEM_CURL=
10373     BUILD_TYPE="$BUILD_TYPE CURL"
10374     ENABLE_CURL=TRUE
10376 AC_SUBST(SYSTEM_CURL)
10377 AC_SUBST(CURL_CFLAGS)
10378 AC_SUBST(CURL_LIBS)
10379 AC_SUBST(ENABLE_CURL)
10381 dnl ===================================================================
10382 dnl Check for system boost
10383 dnl ===================================================================
10384 AC_MSG_CHECKING([which boost to use])
10385 if test "$with_system_boost" = "yes"; then
10386     AC_MSG_RESULT([external])
10387     SYSTEM_BOOST=TRUE
10388     AX_BOOST_BASE([1.66],,[AC_MSG_ERROR([no suitable Boost found])])
10389     AX_BOOST_DATE_TIME
10390     AX_BOOST_FILESYSTEM
10391     AX_BOOST_IOSTREAMS
10392     AX_BOOST_LOCALE
10393     AC_LANG_PUSH([C++])
10394     save_CXXFLAGS=$CXXFLAGS
10395     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10396     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10397        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10398     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10399        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10400     CXXFLAGS=$save_CXXFLAGS
10401     AC_LANG_POP([C++])
10402     # this is in m4/ax_boost_base.m4
10403     FilterLibs "${BOOST_LDFLAGS}"
10404     BOOST_LDFLAGS="${filteredlibs}"
10405 else
10406     AC_MSG_RESULT([internal])
10407     BUILD_TYPE="$BUILD_TYPE BOOST"
10408     SYSTEM_BOOST=
10409     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10410         # use warning-suppressing wrapper headers
10411         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10412     else
10413         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10414     fi
10416 AC_SUBST(SYSTEM_BOOST)
10418 dnl ===================================================================
10419 dnl Check for system mdds
10420 dnl ===================================================================
10421 libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-2.0 >= 2.0.0], ["-I${WORKDIR}/UnpackedTarball/mdds/include"])
10423 dnl ===================================================================
10424 dnl Check for system cuckoo
10425 dnl ===================================================================
10426 AC_MSG_CHECKING([which cuckoo to use])
10427 if test "$with_system_cuckoo" = "yes"; then
10428     AC_MSG_RESULT([external])
10429     SYSTEM_CUCKOO=TRUE
10430     AC_LANG_PUSH([C++])
10431     AC_CHECK_HEADER([libcuckoo/cuckoohash_map.hh], [],
10432        [AC_MSG_ERROR([libcuckoo/cuckoohash_map.hh not found. install cuckoo])], [])
10433     AC_LANG_POP([C++])
10434 else
10435     AC_MSG_RESULT([internal])
10436     BUILD_TYPE="$BUILD_TYPE CUCKOO"
10437     SYSTEM_CUCKOO=
10438     CUCKOO_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/cuckoo"
10440 AC_SUBST([CUCKOO_CFLAGS])
10441 AC_SUBST([SYSTEM_CUCKOO])
10443 dnl ===================================================================
10444 dnl Check for system glm
10445 dnl ===================================================================
10446 AC_MSG_CHECKING([which glm to use])
10447 if test "$with_system_glm" = "yes"; then
10448     AC_MSG_RESULT([external])
10449     SYSTEM_GLM=TRUE
10450     AC_LANG_PUSH([C++])
10451     AC_CHECK_HEADER([glm/glm.hpp], [],
10452        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10453     AC_LANG_POP([C++])
10454 else
10455     AC_MSG_RESULT([internal])
10456     BUILD_TYPE="$BUILD_TYPE GLM"
10457     SYSTEM_GLM=
10458     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10460 AC_SUBST([GLM_CFLAGS])
10461 AC_SUBST([SYSTEM_GLM])
10463 dnl ===================================================================
10464 dnl Check for system odbc
10465 dnl ===================================================================
10466 AC_MSG_CHECKING([which odbc headers to use])
10467 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
10468     AC_MSG_RESULT([external])
10469     SYSTEM_ODBC_HEADERS=TRUE
10471     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10472         save_CPPFLAGS=$CPPFLAGS
10473         find_winsdk
10474         PathFormat "$winsdktest"
10475         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"
10476         AC_CHECK_HEADER(sqlext.h, [],
10477             [AC_MSG_ERROR(odbc not found. install odbc)],
10478             [#include <windows.h>])
10479         CPPFLAGS=$save_CPPFLAGS
10480     else
10481         AC_CHECK_HEADER(sqlext.h, [],
10482             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10483     fi
10484 elif test "$enable_database_connectivity" = no; then
10485     AC_MSG_RESULT([none])
10486 else
10487     AC_MSG_RESULT([internal])
10488     SYSTEM_ODBC_HEADERS=
10490 AC_SUBST(SYSTEM_ODBC_HEADERS)
10492 dnl ===================================================================
10493 dnl Check for system NSS
10494 dnl ===================================================================
10495 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10496     libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8],,,[
10497         case "$_os" in
10498             Linux)
10499                 with_system_nss=yes
10500             ;;
10501             *)
10502                 with_system_nss=no
10503             ;;
10504         esac])
10505     AC_DEFINE(HAVE_FEATURE_NSS)
10506     ENABLE_NSS=TRUE
10507 elif test $_os != iOS ; then
10508     with_tls=openssl
10510 AC_SUBST(ENABLE_NSS)
10512 dnl ===================================================================
10513 dnl Enable LDAP support
10514 dnl ===================================================================
10516 if test "$test_openldap" = yes; then
10517     AC_MSG_CHECKING([whether to enable LDAP support])
10518     if test "$enable_ldap" = yes -a \( "$ENABLE_NSS" = TRUE -o "$with_system_openldap" = yes \); then
10519         AC_MSG_RESULT([yes])
10520         ENABLE_LDAP=TRUE
10521     else
10522         if test "$enable_ldap" != "yes"; then
10523             AC_MSG_RESULT([no])
10524         else
10525             AC_MSG_RESULT([no (needs NSS or system openldap)])
10526         fi
10527     fi
10529 dnl ===================================================================
10530 dnl Check for system openldap
10531 dnl ===================================================================
10533     if test "$ENABLE_LDAP" = TRUE; then
10534         AC_MSG_CHECKING([which openldap library to use])
10535         if test "$with_system_openldap" = yes; then
10536             AC_MSG_RESULT([external])
10537             SYSTEM_OPENLDAP=TRUE
10538             AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10539             AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10540             AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10541         else
10542             AC_MSG_RESULT([internal])
10543             BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10544         fi
10545     fi
10548 AC_SUBST(ENABLE_LDAP)
10549 AC_SUBST(SYSTEM_OPENLDAP)
10551 dnl ===================================================================
10552 dnl Check for TLS/SSL and cryptographic implementation to use
10553 dnl ===================================================================
10554 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10555 if test -n "$with_tls"; then
10556     case $with_tls in
10557     openssl)
10558         AC_DEFINE(USE_TLS_OPENSSL)
10559         TLS=OPENSSL
10560         AC_MSG_RESULT([$TLS])
10562         if test "$enable_openssl" != "yes"; then
10563             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10564         fi
10566         # warn that OpenSSL has been selected but not all TLS code has this option
10567         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS])
10568         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS"
10569         ;;
10570     nss)
10571         AC_DEFINE(USE_TLS_NSS)
10572         TLS=NSS
10573         AC_MSG_RESULT([$TLS])
10574         ;;
10575     no)
10576         AC_MSG_RESULT([none])
10577         AC_MSG_WARN([Skipping TLS/SSL])
10578         ;;
10579     *)
10580         AC_MSG_RESULT([])
10581         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10582 openssl - OpenSSL
10583 nss - Mozilla's Network Security Services (NSS)
10584     ])
10585         ;;
10586     esac
10587 else
10588     # default to using NSS, it results in smaller oox lib
10589     AC_DEFINE(USE_TLS_NSS)
10590     TLS=NSS
10591     AC_MSG_RESULT([$TLS])
10593 AC_SUBST(TLS)
10595 dnl ===================================================================
10596 dnl Check for system sane
10597 dnl ===================================================================
10598 AC_MSG_CHECKING([which sane header to use])
10599 if test "$with_system_sane" = "yes"; then
10600     AC_MSG_RESULT([external])
10601     AC_CHECK_HEADER(sane/sane.h, [],
10602       [AC_MSG_ERROR(sane not found. install sane)], [])
10603 else
10604     AC_MSG_RESULT([internal])
10605     BUILD_TYPE="$BUILD_TYPE SANE"
10608 dnl ===================================================================
10609 dnl Check for system icu
10610 dnl ===================================================================
10611 SYSTEM_GENBRK=
10612 SYSTEM_GENCCODE=
10613 SYSTEM_GENCMN=
10615 ICU_MAJOR=70
10616 ICU_MINOR=1
10617 ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10618 ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10619 ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10620 AC_MSG_CHECKING([which icu to use])
10621 if test "$with_system_icu" = "yes"; then
10622     AC_MSG_RESULT([external])
10623     SYSTEM_ICU=TRUE
10624     AC_LANG_PUSH([C++])
10625     AC_MSG_CHECKING([for unicode/rbbi.h])
10626     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10627     AC_LANG_POP([C++])
10629     if test "$cross_compiling" != "yes"; then
10630         PKG_CHECK_MODULES(ICU, icu-i18n >= 4.6)
10631         ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10632         ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10633         ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10634     fi
10636     if test "$cross_compiling" = "yes" -a \( "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" \); then
10637         ICU_VERSION_FOR_BUILD=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10638         ICU_MAJOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f1`
10639         ICU_MINOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f2`
10640         AC_MSG_CHECKING([if MinGW and system versions of ICU are compatible])
10641         if test "$ICU_MAJOR" -eq "$ICU_MAJOR_FOR_BUILD" -a "$ICU_MINOR" -eq "$ICU_MINOR_FOR_BUILD"; then
10642             AC_MSG_RESULT([yes])
10643         else
10644             AC_MSG_RESULT([no])
10645             if test "$with_system_icu_for_build" != "force"; then
10646                 AC_MSG_ERROR([System ICU is not version-compatible with MinGW ICU.
10647 You can use --with-system-icu-for-build=force to use it anyway.])
10648             fi
10649         fi
10650     fi
10652     if test "$cross_compiling" != "yes" -o "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force"; then
10653         # using the system icu tools can lead to version confusion, use the
10654         # ones from the build environment when cross-compiling
10655         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10656         if test -z "$SYSTEM_GENBRK"; then
10657             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10658         fi
10659         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10660         if test -z "$SYSTEM_GENCCODE"; then
10661             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10662         fi
10663         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10664         if test -z "$SYSTEM_GENCMN"; then
10665             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10666         fi
10667         if test "$ICU_MAJOR" -ge "49"; then
10668             ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10669             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10670             ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10671         else
10672             ICU_RECLASSIFIED_PREPEND_SET_EMPTY=
10673             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER=
10674             ICU_RECLASSIFIED_HEBREW_LETTER=
10675         fi
10676     fi
10678     if test "$cross_compiling" = "yes"; then
10679         if test "$ICU_MAJOR" -ge "50"; then
10680             AC_MSG_RESULT([Ignore ICU_MINOR as obviously the libraries don't include the minor version in their names any more])
10681             ICU_MINOR=""
10682         fi
10683     fi
10684 else
10685     AC_MSG_RESULT([internal])
10686     SYSTEM_ICU=
10687     BUILD_TYPE="$BUILD_TYPE ICU"
10688     # surprisingly set these only for "internal" (to be used by various other
10689     # external libs): the system icu-config is quite unhelpful and spits out
10690     # dozens of weird flags and also default path -I/usr/include
10691     ICU_CFLAGS="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10692     ICU_LIBS="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10694 if test "$ICU_MAJOR" -ge "59"; then
10695     # As of ICU 59 it defaults to typedef char16_t UChar; which is available
10696     # with -std=c++11 but not all external libraries can be built with that,
10697     # for those use a bit-compatible typedef uint16_t UChar; see
10698     # icu/source/common/unicode/umachine.h
10699     ICU_UCHAR_TYPE="-DUCHAR_TYPE=uint16_t"
10700 else
10701     ICU_UCHAR_TYPE=""
10703 AC_SUBST(SYSTEM_ICU)
10704 AC_SUBST(SYSTEM_GENBRK)
10705 AC_SUBST(SYSTEM_GENCCODE)
10706 AC_SUBST(SYSTEM_GENCMN)
10707 AC_SUBST(ICU_MAJOR)
10708 AC_SUBST(ICU_MINOR)
10709 AC_SUBST(ICU_RECLASSIFIED_PREPEND_SET_EMPTY)
10710 AC_SUBST(ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER)
10711 AC_SUBST(ICU_RECLASSIFIED_HEBREW_LETTER)
10712 AC_SUBST(ICU_CFLAGS)
10713 AC_SUBST(ICU_LIBS)
10714 AC_SUBST(ICU_UCHAR_TYPE)
10716 dnl ==================================================================
10717 dnl Breakpad
10718 dnl ==================================================================
10719 DEFAULT_CRASHDUMP_VALUE="true"
10720 AC_MSG_CHECKING([whether to enable breakpad])
10721 if test "$enable_breakpad" != yes; then
10722     AC_MSG_RESULT([no])
10723 else
10724     AC_MSG_RESULT([yes])
10725     ENABLE_BREAKPAD="TRUE"
10726     AC_DEFINE(ENABLE_BREAKPAD)
10727     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
10728     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
10730     AC_MSG_CHECKING([for disable crash dump])
10731     if test "$enable_crashdump" = no; then
10732         DEFAULT_CRASHDUMP_VALUE="false"
10733         AC_MSG_RESULT([yes])
10734     else
10735        AC_MSG_RESULT([no])
10736     fi
10738     AC_MSG_CHECKING([for crashreport config])
10739     if test "$with_symbol_config" = "no"; then
10740         BREAKPAD_SYMBOL_CONFIG="invalid"
10741         AC_MSG_RESULT([no])
10742     else
10743         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
10744         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
10745         AC_MSG_RESULT([yes])
10746     fi
10747     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
10749 AC_SUBST(ENABLE_BREAKPAD)
10750 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
10752 dnl ==================================================================
10753 dnl libfuzzer
10754 dnl ==================================================================
10755 AC_MSG_CHECKING([whether to enable fuzzers])
10756 if test "$enable_fuzzers" != yes; then
10757     AC_MSG_RESULT([no])
10758 else
10759     if test -z $LIB_FUZZING_ENGINE; then
10760       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
10761     fi
10762     AC_MSG_RESULT([yes])
10763     ENABLE_FUZZERS="TRUE"
10764     AC_DEFINE([ENABLE_FUZZERS],1)
10765     BUILD_TYPE="$BUILD_TYPE FUZZERS"
10767 AC_SUBST(LIB_FUZZING_ENGINE)
10768 AC_SUBST(ENABLE_FUZZERS)
10770 dnl ===================================================================
10771 dnl Orcus
10772 dnl ===================================================================
10773 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.17 >= 0.17.2])
10774 if test "$with_system_orcus" != "yes"; then
10775     if test "$SYSTEM_BOOST" = "TRUE"; then
10776         dnl Link with Boost.System
10777         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
10778         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
10779         dnl in documentation has no effect.
10780         AX_BOOST_SYSTEM
10781     fi
10783 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
10784 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
10785 AC_SUBST([BOOST_SYSTEM_LIB])
10786 AC_SUBST(SYSTEM_LIBORCUS)
10788 dnl ===================================================================
10789 dnl HarfBuzz
10790 dnl ===================================================================
10791 libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3],
10792                          ["-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"],
10793                          ["-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"])
10795 libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 0.9.42],
10796                          ["-I${WORKDIR}/UnpackedTarball/harfbuzz/src"],
10797                          ["-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"])
10799 if test "$COM" = "MSC"; then # override the above
10800     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
10801     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
10804 if test "$with_system_harfbuzz" = "yes"; then
10805     if test "$with_system_graphite" = "no"; then
10806         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
10807     fi
10808     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
10809     save_LIBS="$LIBS"
10810     save_CFLAGS="$CFLAGS"
10811     LIBS="$LIBS $HARFBUZZ_LIBS"
10812     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
10813     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
10814     LIBS="$save_LIBS"
10815     CFLAGS="$save_CFLAGS"
10816 else
10817     if test "$with_system_graphite" = "yes"; then
10818         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
10819     fi
10822 if test "$USING_X11" = TRUE; then
10823     AC_PATH_X
10824     AC_PATH_XTRA
10825     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
10827     if test -z "$x_includes"; then
10828         x_includes="default_x_includes"
10829     fi
10830     if test -z "$x_libraries"; then
10831         x_libraries="default_x_libraries"
10832     fi
10833     CFLAGS="$CFLAGS $X_CFLAGS"
10834     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
10835     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
10836 else
10837     x_includes="no_x_includes"
10838     x_libraries="no_x_libraries"
10841 if test "$USING_X11" = TRUE; then
10842     dnl ===================================================================
10843     dnl Check for extension headers
10844     dnl ===================================================================
10845     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
10846      [#include <X11/extensions/shape.h>])
10848     # vcl needs ICE and SM
10849     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
10850     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
10851         [AC_MSG_ERROR(ICE library not found)])
10852     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
10853     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
10854         [AC_MSG_ERROR(SM library not found)])
10857 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
10858     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
10859     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
10862 dnl ===================================================================
10863 dnl Check for system Xrender
10864 dnl ===================================================================
10865 AC_MSG_CHECKING([whether to use Xrender])
10866 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
10867     AC_MSG_RESULT([yes])
10868     PKG_CHECK_MODULES(XRENDER, xrender)
10869     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10870     FilterLibs "${XRENDER_LIBS}"
10871     XRENDER_LIBS="${filteredlibs}"
10872     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
10873       [AC_MSG_ERROR(libXrender not found or functional)], [])
10874     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
10875       [AC_MSG_ERROR(Xrender not found. install X)], [])
10876 else
10877     AC_MSG_RESULT([no])
10879 AC_SUBST(XRENDER_CFLAGS)
10880 AC_SUBST(XRENDER_LIBS)
10882 dnl ===================================================================
10883 dnl Check for XRandr
10884 dnl ===================================================================
10885 AC_MSG_CHECKING([whether to enable RandR support])
10886 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
10887     AC_MSG_RESULT([yes])
10888     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
10889     if test "$ENABLE_RANDR" != "TRUE"; then
10890         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
10891                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
10892         XRANDR_CFLAGS=" "
10893         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
10894           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
10895         XRANDR_LIBS="-lXrandr "
10896         ENABLE_RANDR="TRUE"
10897     fi
10898     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10899     FilterLibs "${XRANDR_LIBS}"
10900     XRANDR_LIBS="${filteredlibs}"
10901 else
10902     ENABLE_RANDR=""
10903     AC_MSG_RESULT([no])
10905 AC_SUBST(XRANDR_CFLAGS)
10906 AC_SUBST(XRANDR_LIBS)
10907 AC_SUBST(ENABLE_RANDR)
10909 if test "$test_webdav" = yes; then
10910     if test -z "$with_webdav"; then
10911         WITH_WEBDAV=curl
10912     else
10913         WITH_WEBDAV="$with_webdav"
10914     fi
10917 AC_MSG_CHECKING([for webdav library])
10918 case "$WITH_WEBDAV" in
10919 curl)
10920     AC_MSG_RESULT([curl])
10921     # curl is already mandatory (almost) and checked elsewhere
10922     if test "$enable_curl" = "no"; then
10923         AC_MSG_ERROR(["--with-webdav=curl conflicts with --disable-curl"])
10924     fi
10925     ;;
10926 serf)
10927     AC_MSG_RESULT([serf])
10928     # Check for system apr-util
10929     libo_CHECK_SYSTEM_MODULE([apr],[APR],[apr-util-1],
10930                              ["-I${WORKDIR}/UnpackedTarball/apr/include -I${WORKDIR}/UnpackedTarball/apr_util/include"],
10931                              ["-L${WORKDIR}/UnpackedTarball/apr/.libs -lapr-1 -L${WORKDIR}/UnpackedTarball/apr_util/.libs -laprutil-1"])
10932     if test "$COM" = "MSC"; then
10933         APR_LIB_DIR="LibR"
10934         test -n "${MSVC_USE_DEBUG_RUNTIME}" && APR_LIB_DIR="LibD"
10935         APR_LIBS="${WORKDIR}/UnpackedTarball/apr/${APR_LIB_DIR}/apr-1.lib ${WORKDIR}/UnpackedTarball/apr_util/${APR_LIB_DIR}/aprutil-1.lib"
10936     fi
10938     # Check for system serf
10939     libo_CHECK_SYSTEM_MODULE([serf],[SERF],[serf-1 >= 1.3.9])
10940     ;;
10941 neon)
10942     AC_MSG_RESULT([neon])
10943     # Check for system neon
10944     libo_CHECK_SYSTEM_MODULE([neon],[NEON],[neon >= 0.31.2])
10945     if test "$with_system_neon" = "yes"; then
10946         NEON_VERSION="`$PKG_CONFIG --modversion neon | $SED 's/\.//g'`"
10947     else
10948         NEON_VERSION=0312
10949     fi
10950     AC_SUBST(NEON_VERSION)
10951     ;;
10953     AC_MSG_RESULT([none, disabled])
10954     WITH_WEBDAV=""
10955     ;;
10956 esac
10957 AC_SUBST(WITH_WEBDAV)
10959 dnl ===================================================================
10960 dnl Check for disabling cve_tests
10961 dnl ===================================================================
10962 AC_MSG_CHECKING([whether to execute CVE tests])
10963 # If not explicitly enabled or disabled, default
10964 if test -z "$enable_cve_tests"; then
10965     case "$OS" in
10966     WNT)
10967         # Default cves off for Windows with its wild and wonderful
10968         # variety of AV software kicking in and panicking
10969         enable_cve_tests=no
10970         ;;
10971     *)
10972         # otherwise yes
10973         enable_cve_tests=yes
10974         ;;
10975     esac
10977 if test "$enable_cve_tests" = "no"; then
10978     AC_MSG_RESULT([no])
10979     DISABLE_CVE_TESTS=TRUE
10980     AC_SUBST(DISABLE_CVE_TESTS)
10981 else
10982     AC_MSG_RESULT([yes])
10985 dnl ===================================================================
10986 dnl Check for enabling chart XShape tests
10987 dnl ===================================================================
10988 AC_MSG_CHECKING([whether to execute chart XShape tests])
10989 if test "$enable_chart_tests" = "yes" -o '(' "$_os" = "WINNT" -a "$enable_chart_tests" != "no" ')'; then
10990     AC_MSG_RESULT([yes])
10991     ENABLE_CHART_TESTS=TRUE
10992     AC_SUBST(ENABLE_CHART_TESTS)
10993 else
10994     AC_MSG_RESULT([no])
10997 dnl ===================================================================
10998 dnl Check for system openssl
10999 dnl ===================================================================
11000 ENABLE_OPENSSL=
11001 AC_MSG_CHECKING([whether to disable OpenSSL usage])
11002 if test "$enable_openssl" = "yes"; then
11003     AC_MSG_RESULT([no])
11004     ENABLE_OPENSSL=TRUE
11005     if test "$_os" = Darwin ; then
11006         # OpenSSL is deprecated when building for 10.7 or later.
11007         #
11008         # http://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
11009         # http://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
11011         with_system_openssl=no
11012         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
11013     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
11014             && test "$with_system_openssl" != "no"; then
11015         with_system_openssl=yes
11016         SYSTEM_OPENSSL=TRUE
11017         OPENSSL_CFLAGS=
11018         OPENSSL_LIBS="-lssl -lcrypto"
11019     else
11020         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
11021     fi
11022     if test "$with_system_openssl" = "yes"; then
11023         AC_MSG_CHECKING([whether openssl supports SHA512])
11024         AC_LANG_PUSH([C])
11025         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
11026             SHA512_CTX context;
11027 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
11028         AC_LANG_POP(C)
11029     fi
11030 else
11031     AC_MSG_RESULT([yes])
11033     # warn that although OpenSSL is disabled, system libraries may depend on it
11034     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
11035     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
11038 AC_SUBST([ENABLE_OPENSSL])
11040 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
11041     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
11042         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
11043         enable_cipher_openssl_backend=no
11044     else
11045         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
11046     fi
11048 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
11049 ENABLE_CIPHER_OPENSSL_BACKEND=
11050 if test "$enable_cipher_openssl_backend" = yes; then
11051     AC_MSG_RESULT([yes])
11052     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
11053 else
11054     AC_MSG_RESULT([no])
11056 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
11058 dnl ===================================================================
11059 dnl Select the crypto backends used by LO
11060 dnl ===================================================================
11062 if test "$build_crypto" = yes; then
11063     if test "$OS" = WNT; then
11064         BUILD_TYPE="$BUILD_TYPE CRYPTO_MSCAPI"
11065         AC_DEFINE([USE_CRYPTO_MSCAPI])
11066     elif test "$ENABLE_NSS" = TRUE; then
11067         BUILD_TYPE="$BUILD_TYPE CRYPTO_NSS"
11068         AC_DEFINE([USE_CRYPTO_NSS])
11069     fi
11072 dnl ===================================================================
11073 dnl Check for building gnutls
11074 dnl ===================================================================
11075 AC_MSG_CHECKING([whether to use gnutls])
11076 if test "$WITH_WEBDAV" = "neon" -a "$with_system_neon" = no -a "$enable_openssl" = "no"; then
11077     AC_MSG_RESULT([yes])
11078     AM_PATH_LIBGCRYPT()
11079     PKG_CHECK_MODULES(GNUTLS, [gnutls],,
11080         AC_MSG_ERROR([[Disabling OpenSSL was requested, but GNUTLS is not
11081                       available in the system to use as replacement.]]))
11082     FilterLibs "${LIBGCRYPT_LIBS}"
11083     LIBGCRYPT_LIBS="${filteredlibs}"
11084 else
11085     AC_MSG_RESULT([no])
11088 AC_SUBST([LIBGCRYPT_CFLAGS])
11089 AC_SUBST([LIBGCRYPT_LIBS])
11091 dnl ===================================================================
11092 dnl Check for system redland
11093 dnl ===================================================================
11094 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
11095 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
11096 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
11097 if test "$with_system_redland" = "yes"; then
11098     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
11099             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
11100 else
11101     RAPTOR_MAJOR="0"
11102     RASQAL_MAJOR="3"
11103     REDLAND_MAJOR="0"
11105 AC_SUBST(RAPTOR_MAJOR)
11106 AC_SUBST(RASQAL_MAJOR)
11107 AC_SUBST(REDLAND_MAJOR)
11109 dnl ===================================================================
11110 dnl Check for system hunspell
11111 dnl ===================================================================
11112 AC_MSG_CHECKING([which libhunspell to use])
11113 if test "$with_system_hunspell" = "yes"; then
11114     AC_MSG_RESULT([external])
11115     SYSTEM_HUNSPELL=TRUE
11116     AC_LANG_PUSH([C++])
11117     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
11118     if test "$HUNSPELL_PC" != "TRUE"; then
11119         AC_CHECK_HEADER(hunspell.hxx, [],
11120             [
11121             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
11122             [AC_MSG_ERROR(hunspell headers not found.)], [])
11123             ], [])
11124         AC_CHECK_LIB([hunspell], [main], [:],
11125            [ AC_MSG_ERROR(hunspell library not found.) ], [])
11126         HUNSPELL_LIBS=-lhunspell
11127     fi
11128     AC_LANG_POP([C++])
11129     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11130     FilterLibs "${HUNSPELL_LIBS}"
11131     HUNSPELL_LIBS="${filteredlibs}"
11132 else
11133     AC_MSG_RESULT([internal])
11134     SYSTEM_HUNSPELL=
11135     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
11136     if test "$COM" = "MSC"; then
11137         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
11138     else
11139         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
11140     fi
11141     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
11143 AC_SUBST(SYSTEM_HUNSPELL)
11144 AC_SUBST(HUNSPELL_CFLAGS)
11145 AC_SUBST(HUNSPELL_LIBS)
11147 dnl ===================================================================
11148 dnl Check for system zxing
11149 dnl ===================================================================
11150 AC_MSG_CHECKING([whether to use zxing])
11151 if test "$enable_zxing" = "no"; then
11152     AC_MSG_RESULT([no])
11153     ENABLE_ZXING=
11154     SYSTEM_ZXING=
11155 else
11156     AC_MSG_RESULT([yes])
11157     ENABLE_ZXING=TRUE
11158     AC_MSG_CHECKING([which libzxing to use])
11159     if test "$with_system_zxing" = "yes"; then
11160         AC_MSG_RESULT([external])
11161         SYSTEM_ZXING=TRUE
11162         ZXING_CFLAGS=
11163         AC_LANG_PUSH([C++])
11164         save_CXXFLAGS=$CXXFLAGS
11165         save_IFS=$IFS
11166         IFS=$P_SEP
11167         for i in $CPLUS_INCLUDE_PATH /usr/include; do
11168             dnl Reset IFS as soon as possible, to avoid unexpected side effects (and the
11169             dnl "/usr/include" fallback makes sure we get here at least once; resetting rather than
11170             dnl unsetting follows the advice at <http://git.savannah.gnu.org/gitweb/?p=autoconf.git;
11171             dnl a=commit;h=e51c9919f2cf70185b7916ac040bc0bbfd0f743b> "Add recommendation on (not)
11172             dnl unsetting IFS."):
11173             IFS=$save_IFS
11174             dnl TODO: GCC and Clang treat empty paths in CPLUS_INCLUDE_PATH like ".", but we simply
11175             dnl ignore them here:
11176             if test -z "$i"; then
11177                 continue
11178             fi
11179             dnl TODO: White space in $i would cause problems:
11180             CXXFLAGS="$save_CXXFLAGS -I$i/ZXing"
11181             AC_CHECK_HEADER(MultiFormatWriter.h, [ZXING_CFLAGS=-I$i/ZXing; break],
11182                 [unset ac_cv_header_MultiFormatWriter_h], [#include <stdexcept>])
11183         done
11184         CXXFLAGS=$save_CXXFLAGS
11185         if test -z "$ZXING_CFLAGS"; then
11186             AC_MSG_ERROR(zxing headers not found.)
11187         fi
11188         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
11189             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
11190             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
11191         AC_LANG_POP([C++])
11192         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11193         FilterLibs "${ZXING_LIBS}"
11194         ZXING_LIBS="${filteredlibs}"
11195     else
11196         AC_MSG_RESULT([internal])
11197         SYSTEM_ZXING=
11198         BUILD_TYPE="$BUILD_TYPE ZXING"
11199     fi
11200     if test "$ENABLE_ZXING" = TRUE; then
11201         AC_DEFINE(ENABLE_ZXING)
11202     fi
11204 AC_SUBST(SYSTEM_ZXING)
11205 AC_SUBST(ENABLE_ZXING)
11206 AC_SUBST(ZXING_CFLAGS)
11207 AC_SUBST(ZXING_LIBS)
11209 dnl ===================================================================
11210 dnl Check for system box2d
11211 dnl ===================================================================
11212 AC_MSG_CHECKING([which box2d to use])
11213 if test "$with_system_box2d" = "yes"; then
11214     AC_MSG_RESULT([external])
11215     SYSTEM_BOX2D=TRUE
11216     AC_LANG_PUSH([C++])
11217     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
11218         [BOX2D_H_FOUND='FALSE'])
11219     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
11220         _BOX2D_LIB=box2d
11221         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
11222     else
11223         # fail this. there's no other alternative to check when we are here.
11224         AC_CHECK_HEADER([Box2D/Box2D.h], [],
11225             [AC_MSG_ERROR(box2d headers not found.)])
11226         _BOX2D_LIB=Box2D
11227         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11228     fi
11229     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11230         [ AC_MSG_ERROR(box2d library not found.) ], [])
11231     BOX2D_LIBS=-l$_BOX2D_LIB
11232     AC_LANG_POP([C++])
11233     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11234     FilterLibs "${BOX2D_LIBS}"
11235     BOX2D_LIBS="${filteredlibs}"
11236 else
11237     AC_MSG_RESULT([internal])
11238     SYSTEM_BOX2D=
11239     BUILD_TYPE="$BUILD_TYPE BOX2D"
11241 AC_SUBST(SYSTEM_BOX2D)
11242 AC_SUBST(BOX2D_CFLAGS)
11243 AC_SUBST(BOX2D_LIBS)
11245 dnl ===================================================================
11246 dnl Checking for altlinuxhyph
11247 dnl ===================================================================
11248 AC_MSG_CHECKING([which altlinuxhyph to use])
11249 if test "$with_system_altlinuxhyph" = "yes"; then
11250     AC_MSG_RESULT([external])
11251     SYSTEM_HYPH=TRUE
11252     AC_CHECK_HEADER(hyphen.h, [],
11253        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11254     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11255        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11256        [#include <hyphen.h>])
11257     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11258         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11259     if test -z "$HYPHEN_LIB"; then
11260         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11261            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11262     fi
11263     if test -z "$HYPHEN_LIB"; then
11264         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11265            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11266     fi
11267 else
11268     AC_MSG_RESULT([internal])
11269     SYSTEM_HYPH=
11270     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11271     if test "$COM" = "MSC"; then
11272         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11273     else
11274         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11275     fi
11277 AC_SUBST(SYSTEM_HYPH)
11278 AC_SUBST(HYPHEN_LIB)
11280 dnl ===================================================================
11281 dnl Checking for mythes
11282 dnl ===================================================================
11283 AC_MSG_CHECKING([which mythes to use])
11284 if test "$with_system_mythes" = "yes"; then
11285     AC_MSG_RESULT([external])
11286     SYSTEM_MYTHES=TRUE
11287     AC_LANG_PUSH([C++])
11288     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11289     if test "$MYTHES_PKGCONFIG" = "no"; then
11290         AC_CHECK_HEADER(mythes.hxx, [],
11291             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11292         AC_CHECK_LIB([mythes-1.2], [main], [:],
11293             [ MYTHES_FOUND=no], [])
11294     if test "$MYTHES_FOUND" = "no"; then
11295         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11296                 [ MYTHES_FOUND=no], [])
11297     fi
11298     if test "$MYTHES_FOUND" = "no"; then
11299         AC_MSG_ERROR([mythes library not found!.])
11300     fi
11301     fi
11302     AC_LANG_POP([C++])
11303     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11304     FilterLibs "${MYTHES_LIBS}"
11305     MYTHES_LIBS="${filteredlibs}"
11306 else
11307     AC_MSG_RESULT([internal])
11308     SYSTEM_MYTHES=
11309     BUILD_TYPE="$BUILD_TYPE MYTHES"
11310     if test "$COM" = "MSC"; then
11311         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11312     else
11313         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11314     fi
11316 AC_SUBST(SYSTEM_MYTHES)
11317 AC_SUBST(MYTHES_CFLAGS)
11318 AC_SUBST(MYTHES_LIBS)
11320 dnl ===================================================================
11321 dnl How should we build the linear programming solver ?
11322 dnl ===================================================================
11324 ENABLE_COINMP=
11325 AC_MSG_CHECKING([whether to build with CoinMP])
11326 if test "$enable_coinmp" != "no"; then
11327     ENABLE_COINMP=TRUE
11328     AC_MSG_RESULT([yes])
11329     if test "$with_system_coinmp" = "yes"; then
11330         SYSTEM_COINMP=TRUE
11331         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11332         FilterLibs "${COINMP_LIBS}"
11333         COINMP_LIBS="${filteredlibs}"
11334     else
11335         BUILD_TYPE="$BUILD_TYPE COINMP"
11336     fi
11337 else
11338     AC_MSG_RESULT([no])
11340 AC_SUBST(ENABLE_COINMP)
11341 AC_SUBST(SYSTEM_COINMP)
11342 AC_SUBST(COINMP_CFLAGS)
11343 AC_SUBST(COINMP_LIBS)
11345 ENABLE_LPSOLVE=
11346 AC_MSG_CHECKING([whether to build with lpsolve])
11347 if test "$enable_lpsolve" != "no"; then
11348     ENABLE_LPSOLVE=TRUE
11349     AC_MSG_RESULT([yes])
11350 else
11351     AC_MSG_RESULT([no])
11353 AC_SUBST(ENABLE_LPSOLVE)
11355 if test "$ENABLE_LPSOLVE" = TRUE; then
11356     AC_MSG_CHECKING([which lpsolve to use])
11357     if test "$with_system_lpsolve" = "yes"; then
11358         AC_MSG_RESULT([external])
11359         SYSTEM_LPSOLVE=TRUE
11360         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11361            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11362         save_LIBS=$LIBS
11363         # some systems need this. Like Ubuntu...
11364         AC_CHECK_LIB(m, floor)
11365         AC_CHECK_LIB(dl, dlopen)
11366         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11367             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11368         LIBS=$save_LIBS
11369     else
11370         AC_MSG_RESULT([internal])
11371         SYSTEM_LPSOLVE=
11372         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11373     fi
11375 AC_SUBST(SYSTEM_LPSOLVE)
11377 dnl ===================================================================
11378 dnl Checking for libexttextcat
11379 dnl ===================================================================
11380 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11381 if test "$with_system_libexttextcat" = "yes"; then
11382     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11384 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11386 dnl ===================================================================
11387 dnl Checking for libnumbertext
11388 dnl ===================================================================
11389 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11390 if test "$with_system_libnumbertext" = "yes"; then
11391     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11392     SYSTEM_LIBNUMBERTEXT=YES
11393 else
11394     SYSTEM_LIBNUMBERTEXT=
11395     AC_LANG_PUSH([C++])
11396     save_CPPFLAGS=$CPPFLAGS
11397     CPPFLAGS="$CPPFLAGS $CXXFLAGS_CXX11"
11398     AC_CHECK_HEADERS([codecvt regex])
11399     AS_IF([test "x$ac_cv_header_codecvt" != xyes -o "x$ac_cv_header_regex" != xyes],
11400             [ LIBNUMBERTEXT_CFLAGS=''
11401               AC_MSG_WARN([No system-provided libnumbertext or codecvt/regex C++11 headers (min. libstdc++ 4.9).
11402                            Enable libnumbertext fallback (missing number to number name conversion).])
11403             ])
11404     CPPFLAGS=$save_CPPFLAGS
11405     AC_LANG_POP([C++])
11407 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11408 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11409 AC_SUBST(LIBNUMBERTEXT_CFLAGS)
11411 dnl ***************************************
11412 dnl testing libc version for Linux...
11413 dnl ***************************************
11414 if test "$_os" = "Linux"; then
11415     AC_MSG_CHECKING([whether the libc is recent enough])
11416     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
11417     #include <features.h>
11418     #if defined(__GNU_LIBRARY__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1))
11419     #error glibc >= 2.1 is required
11420     #endif
11421     ]])],, [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([no, upgrade libc])])
11424 dnl =========================================
11425 dnl Check for uuidgen
11426 dnl =========================================
11427 if test "$_os" = "WINNT"; then
11428     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11429     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11430     UUIDGEN=uuidgen.exe
11431     AC_SUBST(UUIDGEN)
11432 else
11433     AC_PATH_PROG([UUIDGEN], [uuidgen])
11434     if test -z "$UUIDGEN"; then
11435         AC_MSG_WARN([uuid is needed for building installation sets])
11436     fi
11439 dnl ***************************************
11440 dnl Checking for bison and flex
11441 dnl ***************************************
11442 AC_PATH_PROG(BISON, bison)
11443 if test -z "$BISON"; then
11444     AC_MSG_ERROR([no bison found in \$PATH, install it])
11445 else
11446     AC_MSG_CHECKING([the bison version])
11447     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11448     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11449     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11450     dnl cause
11451     dnl
11452     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]
11453     dnl   typedef union YYSTYPE
11454     dnl           ~~~~~~^~~~~~~
11455     dnl
11456     dnl while at least 3.4.1 is know to be good:
11457     if test "$COMPILER_PLUGINS" = TRUE; then
11458         if test "$_bison_longver" -lt 2004; then
11459             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11460         fi
11461     else
11462         if test "$_bison_longver" -lt 2000; then
11463             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11464         fi
11465     fi
11467 AC_SUBST([BISON])
11469 AC_PATH_PROG(FLEX, flex)
11470 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11471     FLEX=`cygpath -m $FLEX`
11473 if test -z "$FLEX"; then
11474     AC_MSG_ERROR([no flex found in \$PATH, install it])
11475 else
11476     AC_MSG_CHECKING([the flex version])
11477     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11478     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11479         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11480     fi
11482 AC_SUBST([FLEX])
11483 dnl ***************************************
11484 dnl Checking for patch
11485 dnl ***************************************
11486 AC_PATH_PROG(PATCH, patch)
11487 if test -z "$PATCH"; then
11488     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11491 dnl On Solaris or macOS, check if --with-gnu-patch was used
11492 if test "$_os" = "SunOS" -o "$_os" = "Darwin"; then
11493     if test -z "$with_gnu_patch"; then
11494         GNUPATCH=$PATCH
11495     else
11496         if test -x "$with_gnu_patch"; then
11497             GNUPATCH=$with_gnu_patch
11498         else
11499             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11500         fi
11501     fi
11503     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11504     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11505         AC_MSG_RESULT([yes])
11506     else
11507         AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11508     fi
11509 else
11510     GNUPATCH=$PATCH
11513 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11514     GNUPATCH=`cygpath -m $GNUPATCH`
11517 dnl We also need to check for --with-gnu-cp
11519 if test -z "$with_gnu_cp"; then
11520     # check the place where the good stuff is hidden on Solaris...
11521     if test -x /usr/gnu/bin/cp; then
11522         GNUCP=/usr/gnu/bin/cp
11523     else
11524         AC_PATH_PROGS(GNUCP, gnucp cp)
11525     fi
11526     if test -z $GNUCP; then
11527         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11528     fi
11529 else
11530     if test -x "$with_gnu_cp"; then
11531         GNUCP=$with_gnu_cp
11532     else
11533         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11534     fi
11537 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11538     GNUCP=`cygpath -m $GNUCP`
11541 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11542 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11543     AC_MSG_RESULT([yes])
11544 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11545     AC_MSG_RESULT([yes])
11546 else
11547     case "$build_os" in
11548     darwin*|macos*|netbsd*|openbsd*|freebsd*|dragonfly*|aix*)
11549         x_GNUCP=[\#]
11550         GNUCP=''
11551         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11552         ;;
11553     *)
11554         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11555         ;;
11556     esac
11559 AC_SUBST(GNUPATCH)
11560 AC_SUBST(GNUCP)
11561 AC_SUBST(x_GNUCP)
11563 dnl ***************************************
11564 dnl testing assembler path
11565 dnl ***************************************
11566 ML_EXE=""
11567 if test "$_os" = "WINNT"; then
11568     case "$WIN_HOST_ARCH" in
11569     x86) assembler=ml.exe ;;
11570     x64) assembler=ml64.exe ;;
11571     arm64) assembler=armasm64.exe ;;
11572     esac
11574     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11575     if test -f "$MSVC_HOST_PATH/$assembler"; then
11576         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11577         AC_MSG_RESULT([$ML_EXE])
11578     else
11579         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11580     fi
11583 AC_SUBST(ML_EXE)
11585 dnl ===================================================================
11586 dnl We need zip and unzip
11587 dnl ===================================================================
11588 AC_PATH_PROG(ZIP, zip)
11589 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11590 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11591     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],,)
11594 AC_PATH_PROG(UNZIP, unzip)
11595 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11597 dnl ===================================================================
11598 dnl Zip must be a specific type for different build types.
11599 dnl ===================================================================
11600 if test $build_os = cygwin; then
11601     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11602         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11603     fi
11606 dnl ===================================================================
11607 dnl We need touch with -h option support.
11608 dnl ===================================================================
11609 AC_PATH_PROG(TOUCH, touch)
11610 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11611 touch "$WARNINGS_FILE"
11612 if ! "$TOUCH" -h "$WARNINGS_FILE" 2>/dev/null > /dev/null; then
11613     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],,)
11616 dnl ===================================================================
11617 dnl Check for system epoxy
11618 dnl ===================================================================
11619 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2], ["-I${WORKDIR}/UnpackedTarball/epoxy/include"])
11621 dnl ===================================================================
11622 dnl Set vcl option: coordinate device in double or sal_Int32
11623 dnl ===================================================================
11625 dnl disabled for now, we don't want subtle differences between OSs
11626 dnl AC_MSG_CHECKING([Type to use for Device Pixel coordinates])
11627 dnl if test "$_os" = "Darwin" -o  $_os = iOS ; then
11628 dnl     AC_DEFINE(VCL_FLOAT_DEVICE_PIXEL)
11629 dnl     AC_MSG_RESULT([double])
11630 dnl else
11631 dnl     AC_MSG_RESULT([sal_Int32])
11632 dnl fi
11634 dnl ===================================================================
11635 dnl Show which vclplugs will be built.
11636 dnl ===================================================================
11637 R=""
11638 if test "$USING_X11" != TRUE; then
11639     enable_gtk3=no
11642 ENABLE_GTK3=""
11643 if test "x$enable_gtk3" = "xyes"; then
11644     ENABLE_GTK3="TRUE"
11645     AC_DEFINE(ENABLE_GTK3)
11646     R="$R gtk3"
11648 AC_SUBST(ENABLE_GTK3)
11650 ENABLE_GTK3_KDE5=""
11651 if test "x$enable_gtk3_kde5" = "xyes"; then
11652     ENABLE_GTK3_KDE5="TRUE"
11653     AC_DEFINE(ENABLE_GTK3_KDE5)
11654     R="$R gtk3_kde5"
11656 AC_SUBST(ENABLE_GTK3_KDE5)
11658 ENABLE_GTK4=""
11659 if test "x$enable_gtk4" = "xyes"; then
11660     ENABLE_GTK4="TRUE"
11661     AC_DEFINE(ENABLE_GTK4)
11662     R="$R gtk4"
11664 AC_SUBST(ENABLE_GTK4)
11666 ENABLE_QT5=""
11667 if test "x$enable_qt5" = "xyes"; then
11668     ENABLE_QT5="TRUE"
11669     AC_DEFINE(ENABLE_QT5)
11670     R="$R qt5"
11672 AC_SUBST(ENABLE_QT5)
11674 ENABLE_QT6=""
11675 if test "x$enable_qt6" = "xyes"; then
11676     ENABLE_QT6="TRUE"
11677     AC_DEFINE(ENABLE_QT6)
11678     R="$R qt6"
11680 AC_SUBST(ENABLE_QT6)
11683 ENABLE_KF5=""
11684 if test "x$enable_kf5" = "xyes"; then
11685     ENABLE_KF5="TRUE"
11686     AC_DEFINE(ENABLE_KF5)
11687     R="$R kf5"
11689 AC_SUBST(ENABLE_KF5)
11691 if test "x$USING_X11" = "xyes"; then
11692     R="$R gen"
11695 if test "$_os" = "WINNT"; then
11696     R="$R win"
11697 elif test "$_os" = "Darwin"; then
11698     R="$R osx"
11699 elif test "$_os" = "iOS"; then
11700     R="ios"
11701 elif test "$_os" = Android; then
11702     R="android"
11705 build_vcl_plugins="$R"
11706 if test -z "$build_vcl_plugins"; then
11707     build_vcl_plugins=" none"
11709 AC_MSG_NOTICE([VCLplugs to be built:${build_vcl_plugins}])
11710 VCL_PLUGIN_INFO=$R
11711 AC_SUBST([VCL_PLUGIN_INFO])
11713 dnl ===================================================================
11714 dnl Check for GTK libraries
11715 dnl ===================================================================
11717 GTK3_CFLAGS=""
11718 GTK3_LIBS=""
11719 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11720     if test "$with_system_cairo" = no; then
11721         add_warning 'Non-system cairo combined with gtk3 is assumed to cause trouble; proceed at your own risk.'
11722     fi
11723     : ${with_system_cairo:=yes}
11724     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)
11725     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11726     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11727     FilterLibs "${GTK3_LIBS}"
11728     GTK3_LIBS="${filteredlibs}"
11730     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11731     if test "$with_system_epoxy" != "yes"; then
11732         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11733         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11734                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11735     fi
11737 AC_SUBST(GTK3_LIBS)
11738 AC_SUBST(GTK3_CFLAGS)
11740 GTK4_CFLAGS=""
11741 GTK4_LIBS=""
11742 if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then
11743     if test "$with_system_cairo" = no; then
11744         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11745     fi
11746     : ${with_system_cairo:=yes}
11747     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11748     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11749     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11750     FilterLibs "${GTK4_LIBS}"
11751     GTK4_LIBS="${filteredlibs}"
11753     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11754     if test "$with_system_epoxy" != "yes"; then
11755         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11756         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11757                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11758     fi
11760 AC_SUBST(GTK4_LIBS)
11761 AC_SUBST(GTK4_CFLAGS)
11763 if test "$enable_introspection" = yes; then
11764     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11765         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11766     else
11767         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
11768     fi
11771 dnl ===================================================================
11772 dnl check for dbus support
11773 dnl ===================================================================
11774 ENABLE_DBUS=""
11775 DBUS_CFLAGS=""
11776 DBUS_LIBS=""
11777 DBUS_GLIB_CFLAGS=""
11778 DBUS_GLIB_LIBS=""
11779 DBUS_HAVE_GLIB=""
11781 if test "$enable_dbus" = "no"; then
11782     test_dbus=no
11785 AC_MSG_CHECKING([whether to enable DBUS support])
11786 if test "$test_dbus" = "yes"; then
11787     ENABLE_DBUS="TRUE"
11788     AC_MSG_RESULT([yes])
11789     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
11790     AC_DEFINE(ENABLE_DBUS)
11791     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11792     FilterLibs "${DBUS_LIBS}"
11793     DBUS_LIBS="${filteredlibs}"
11795     # Glib is needed for BluetoothServer
11796     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
11797     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
11798         [
11799             DBUS_HAVE_GLIB="TRUE"
11800             AC_DEFINE(DBUS_HAVE_GLIB,1)
11801         ],
11802         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
11803     )
11804 else
11805     AC_MSG_RESULT([no])
11808 AC_SUBST(ENABLE_DBUS)
11809 AC_SUBST(DBUS_CFLAGS)
11810 AC_SUBST(DBUS_LIBS)
11811 AC_SUBST(DBUS_GLIB_CFLAGS)
11812 AC_SUBST(DBUS_GLIB_LIBS)
11813 AC_SUBST(DBUS_HAVE_GLIB)
11815 AC_MSG_CHECKING([whether to enable Impress remote control])
11816 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
11817     AC_MSG_RESULT([yes])
11818     ENABLE_SDREMOTE=TRUE
11819     SDREMOTE_ENTITLEMENT="      <key>com.apple.security.network.server</key>
11820         <true/>"
11821     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
11823     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
11824         # The Bluetooth code doesn't compile with macOS SDK 10.15
11825         if test "$enable_sdremote_bluetooth" = yes; then
11826             AC_MSG_ERROR([macOS SDK $macosx_sdk does not currently support --enable-sdremote-bluetooth])
11827         fi
11828         add_warning "not building the bluetooth part of the sdremote - used api was removed from macOS SDK 10.15"
11829         enable_sdremote_bluetooth=no
11830     fi
11831     # If not explicitly enabled or disabled, default
11832     if test -z "$enable_sdremote_bluetooth"; then
11833         case "$OS" in
11834         LINUX|MACOSX|WNT)
11835             # Default to yes for these
11836             enable_sdremote_bluetooth=yes
11837             ;;
11838         *)
11839             # otherwise no
11840             enable_sdremote_bluetooth=no
11841             ;;
11842         esac
11843     fi
11844     # $enable_sdremote_bluetooth is guaranteed non-empty now
11846     if test "$enable_sdremote_bluetooth" != "no"; then
11847         if test "$OS" = "LINUX"; then
11848             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
11849                 AC_MSG_RESULT([yes])
11850                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
11851                 dnl ===================================================================
11852                 dnl Check for system bluez
11853                 dnl ===================================================================
11854                 AC_MSG_CHECKING([which Bluetooth header to use])
11855                 if test "$with_system_bluez" = "yes"; then
11856                     AC_MSG_RESULT([external])
11857                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
11858                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
11859                     SYSTEM_BLUEZ=TRUE
11860                 else
11861                     AC_MSG_RESULT([internal])
11862                     SYSTEM_BLUEZ=
11863                 fi
11864             else
11865                 AC_MSG_RESULT([no, dbus disabled])
11866                 ENABLE_SDREMOTE_BLUETOOTH=
11867                 SYSTEM_BLUEZ=
11868             fi
11869         else
11870             AC_MSG_RESULT([yes])
11871             ENABLE_SDREMOTE_BLUETOOTH=TRUE
11872             SYSTEM_BLUEZ=
11873             SDREMOTE_ENTITLEMENT="$SDREMOTE_ENTITLEMENT
11874         <key>com.apple.security.device.bluetooth</key>
11875         <true/>"
11876         fi
11877     else
11878         AC_MSG_RESULT([no])
11879         ENABLE_SDREMOTE_BLUETOOTH=
11880         SYSTEM_BLUEZ=
11881     fi
11882 else
11883     ENABLE_SDREMOTE=
11884     SYSTEM_BLUEZ=
11885     AC_MSG_RESULT([no])
11887 AC_SUBST(ENABLE_SDREMOTE)
11888 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
11889 AC_SUBST(SDREMOTE_ENTITLEMENT)
11890 AC_SUBST(SYSTEM_BLUEZ)
11892 dnl ===================================================================
11893 dnl Check whether to enable GIO support
11894 dnl ===================================================================
11895 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11896     AC_MSG_CHECKING([whether to enable GIO support])
11897     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
11898         dnl Need at least 2.26 for the dbus support.
11899         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
11900                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
11901         if test "$ENABLE_GIO" = "TRUE"; then
11902             AC_DEFINE(ENABLE_GIO)
11903             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11904             FilterLibs "${GIO_LIBS}"
11905             GIO_LIBS="${filteredlibs}"
11906         fi
11907     else
11908         AC_MSG_RESULT([no])
11909     fi
11911 AC_SUBST(ENABLE_GIO)
11912 AC_SUBST(GIO_CFLAGS)
11913 AC_SUBST(GIO_LIBS)
11916 dnl ===================================================================
11918 SPLIT_APP_MODULES=""
11919 if test "$enable_split_app_modules" = "yes"; then
11920     SPLIT_APP_MODULES="TRUE"
11922 AC_SUBST(SPLIT_APP_MODULES)
11924 SPLIT_OPT_FEATURES=""
11925 if test "$enable_split_opt_features" = "yes"; then
11926     SPLIT_OPT_FEATURES="TRUE"
11928 AC_SUBST(SPLIT_OPT_FEATURES)
11930 dnl ===================================================================
11931 dnl Check whether the GStreamer libraries are available.
11932 dnl ===================================================================
11934 ENABLE_GSTREAMER_1_0=""
11936 if test "$test_gstreamer_1_0" = yes; then
11938     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
11939     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
11940         ENABLE_GSTREAMER_1_0="TRUE"
11941         AC_MSG_RESULT([yes])
11942         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
11943         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11944         FilterLibs "${GSTREAMER_1_0_LIBS}"
11945         GSTREAMER_1_0_LIBS="${filteredlibs}"
11946         AC_DEFINE(ENABLE_GSTREAMER_1_0)
11947     else
11948         AC_MSG_RESULT([no])
11949     fi
11951 AC_SUBST(GSTREAMER_1_0_CFLAGS)
11952 AC_SUBST(GSTREAMER_1_0_LIBS)
11953 AC_SUBST(ENABLE_GSTREAMER_1_0)
11955 ENABLE_OPENGL_TRANSITIONS=
11956 ENABLE_OPENGL_CANVAS=
11957 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
11958    : # disable
11959 elif test "$_os" = "Darwin"; then
11960     # We use frameworks on macOS, no need for detail checks
11961     ENABLE_OPENGL_TRANSITIONS=TRUE
11962     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11963     ENABLE_OPENGL_CANVAS=TRUE
11964 elif test $_os = WINNT; then
11965     ENABLE_OPENGL_TRANSITIONS=TRUE
11966     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11967     ENABLE_OPENGL_CANVAS=TRUE
11968 else
11969     if test "$USING_X11" = TRUE; then
11970         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
11971         ENABLE_OPENGL_TRANSITIONS=TRUE
11972         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11973         ENABLE_OPENGL_CANVAS=TRUE
11974     fi
11977 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
11978 AC_SUBST(ENABLE_OPENGL_CANVAS)
11980 dnl =================================================
11981 dnl Check whether to build with OpenCL support.
11982 dnl =================================================
11984 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
11985     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
11986     # platform (optional at run-time, used through clew).
11987     BUILD_TYPE="$BUILD_TYPE OPENCL"
11988     AC_DEFINE(HAVE_FEATURE_OPENCL)
11991 dnl =================================================
11992 dnl Check whether to build with dconf support.
11993 dnl =================================================
11995 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
11996     PKG_CHECK_MODULES([DCONF], [dconf >= 0.15.2], [], [
11997         if test "$enable_dconf" = yes; then
11998             AC_MSG_ERROR([dconf not found])
11999         else
12000             enable_dconf=no
12001         fi])
12003 AC_MSG_CHECKING([whether to enable dconf])
12004 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
12005     DCONF_CFLAGS=
12006     DCONF_LIBS=
12007     ENABLE_DCONF=
12008     AC_MSG_RESULT([no])
12009 else
12010     ENABLE_DCONF=TRUE
12011     AC_DEFINE(ENABLE_DCONF)
12012     AC_MSG_RESULT([yes])
12014 AC_SUBST([DCONF_CFLAGS])
12015 AC_SUBST([DCONF_LIBS])
12016 AC_SUBST([ENABLE_DCONF])
12018 # pdf import?
12019 AC_MSG_CHECKING([whether to build the PDF import feature])
12020 ENABLE_PDFIMPORT=
12021 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
12022     AC_MSG_RESULT([yes])
12023     ENABLE_PDFIMPORT=TRUE
12024     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
12025 else
12026     AC_MSG_RESULT([no])
12029 # Pdfium?
12030 AC_MSG_CHECKING([whether to build PDFium])
12031 ENABLE_PDFIUM=
12032 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
12033     AC_MSG_RESULT([yes])
12034     ENABLE_PDFIUM=TRUE
12035     BUILD_TYPE="$BUILD_TYPE PDFIUM"
12036 else
12037     AC_MSG_RESULT([no])
12039 AC_SUBST(ENABLE_PDFIUM)
12041 if test "$ENABLE_PDFIUM" = "TRUE"; then
12042         AC_MSG_CHECKING([which OpenJPEG library to use])
12043         if test "$with_system_openjpeg" = "yes"; then
12044                 SYSTEM_OPENJPEG2=TRUE
12045                 AC_MSG_RESULT([external])
12046                 PKG_CHECK_MODULES( OPENJPEG2, libopenjp2 )
12047                 OPENJPEG2_CFLAGS=$(printf '%s' "$OPENJPEG2_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12048                 FilterLibs "${OPENJPEG2_LIBS}"
12049                 OPENJPEG2_LIBS="${filteredlibs}"
12050         else
12051                 SYSTEM_OPENJPEG2=FALSE
12052                 AC_MSG_RESULT([internal])
12053         fi
12054         AC_MSG_CHECKING([which Abseil library to use])
12055         if test "$with_system_abseil" = "yes"; then
12056                 AC_MSG_RESULT([external])
12057                 SYSTEM_ABSEIL=TRUE
12058                 AC_LANG_PUSH([C++])
12059                 AC_CHECK_HEADER(absl/types/bad_optional_access.h, [],
12060                         [AC_MSG_ERROR(abseil headers not found.)], [])
12061                 #ABSEIL_CFLAGS=-I/usr/include
12062                 AC_CHECK_LIB([absl_bad_optional_access], [main], [ABSEIL_LIBS=-labsl_bad_optional_access],
12063                         [ AC_MSG_ERROR([libabsl_bad_optional_access library not found.]) ])
12064                 AC_LANG_POP([C++])
12065                 ABSEIL_CFLAGS=$(printf '%s' "$ABSEIL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12066                 FilterLibs "${ABSEIL_LIBS}"
12067                 ABSEIL_LIBS="${filteredlibs}"
12068         else
12069                 AC_MSG_RESULT([internal])
12070         fi
12072 AC_SUBST(SYSTEM_OPENJPEG2)
12073 AC_SUBST(SYSTEM_ABSEIL)
12074 AC_SUBST(ABSEIL_CFLAGS)
12075 AC_SUBST(ABSEIL_LIBS)
12077 dnl ===================================================================
12078 dnl Check for poppler
12079 dnl ===================================================================
12080 ENABLE_POPPLER=
12081 AC_MSG_CHECKING([whether to build Poppler])
12082 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
12083     AC_MSG_RESULT([yes])
12084     ENABLE_POPPLER=TRUE
12085     AC_DEFINE(HAVE_FEATURE_POPPLER)
12086 else
12087     AC_MSG_RESULT([no])
12089 AC_SUBST(ENABLE_POPPLER)
12091 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
12092     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
12095 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
12096     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
12099 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
12100     dnl ===================================================================
12101     dnl Check for system poppler
12102     dnl ===================================================================
12103     AC_MSG_CHECKING([which PDF import poppler to use])
12104     if test "$with_system_poppler" = "yes"; then
12105         AC_MSG_RESULT([external])
12106         SYSTEM_POPPLER=TRUE
12107         PKG_CHECK_MODULES(POPPLER,[poppler >= 0.14 poppler-cpp])
12108         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12109         FilterLibs "${POPPLER_LIBS}"
12110         POPPLER_LIBS="${filteredlibs}"
12111     else
12112         AC_MSG_RESULT([internal])
12113         SYSTEM_POPPLER=
12114         BUILD_TYPE="$BUILD_TYPE POPPLER"
12115     fi
12116     AC_DEFINE([ENABLE_PDFIMPORT],1)
12118 AC_SUBST(ENABLE_PDFIMPORT)
12119 AC_SUBST(SYSTEM_POPPLER)
12120 AC_SUBST(POPPLER_CFLAGS)
12121 AC_SUBST(POPPLER_LIBS)
12123 # Skia?
12124 ENABLE_SKIA=
12125 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
12126     # Skia now requires at least freetype2 >= 2.8.1, which is less that what LO requires as system freetype.
12127     if test "$SYSTEM_FREETYPE" = TRUE; then
12128         PKG_CHECK_EXISTS(freetype2 >= 21.0.15, # 21.0.15 = 2.8.1
12129             [skia_freetype_ok=yes],
12130             [skia_freetype_ok=no])
12131     else # internal is ok
12132         skia_freetype_ok=yes
12133     fi
12134     AC_MSG_CHECKING([whether to build Skia])
12135     if test "$skia_freetype_ok" = "yes"; then
12136         if test "$enable_skia" = "debug"; then
12137             AC_MSG_RESULT([yes (debug)])
12138             ENABLE_SKIA_DEBUG=TRUE
12139         else
12140             AC_MSG_RESULT([yes])
12141             ENABLE_SKIA_DEBUG=
12142         fi
12143         ENABLE_SKIA=TRUE
12144         AC_DEFINE(HAVE_FEATURE_SKIA)
12145         BUILD_TYPE="$BUILD_TYPE SKIA"
12147         if test "$OS" = "MACOSX"; then
12148             AC_DEFINE(SK_SUPPORT_GPU,1)
12149             AC_DEFINE(SK_METAL,1)
12150             SKIA_GPU=METAL
12151             AC_SUBST(SKIA_GPU)
12152         else
12153             AC_DEFINE(SK_SUPPORT_GPU,1)
12154             AC_DEFINE(SK_VULKAN,1)
12155             SKIA_GPU=VULKAN
12156             AC_SUBST(SKIA_GPU)
12157         fi
12159         if test -n "$MAC_OS_X_VERSION_MIN_REQUIRED" && test "$MAC_OS_X_VERSION_MIN_REQUIRED" -lt "101200"; then
12160             SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX=1
12161             AC_SUBST(SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX)
12162         fi
12163     else
12164         AC_MSG_RESULT([no (freetype too old)])
12165         add_warning "freetype version is too old for Skia library, at least 2.8.1 required, Skia support disabled"
12166     fi
12168 else
12169     AC_MSG_CHECKING([whether to build Skia])
12170     AC_MSG_RESULT([no])
12172 AC_SUBST(ENABLE_SKIA)
12173 AC_SUBST(ENABLE_SKIA_DEBUG)
12175 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
12176 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
12177 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
12178 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
12179 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
12180 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
12181 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
12182 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F=
12183 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
12184 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
12185 HAVE_LO_CLANG_DLLEXPORTINLINES=
12187 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE; then
12188     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12189         AC_MSG_CHECKING([for Clang])
12190         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
12191     else
12192         if test "$_os" = "WINNT"; then
12193             AC_MSG_CHECKING([for clang-cl])
12194             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
12195                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
12196                 dnl explicitly set -m32/-m64
12197                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
12198                 LO_CLANG_CXX="$LO_CLANG_CC"
12199                 AC_MSG_RESULT([$LO_CLANG_CC])
12200             else
12201                 AC_MSG_RESULT([no])
12202             fi
12203         else
12204             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
12205             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
12206         fi
12207     fi
12208     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12209         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
12210         clang2_ver=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
12211         if test "$clang2_ver" -lt 50002; then
12212             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
12213             LO_CLANG_CC=
12214             LO_CLANG_CXX=
12215         fi
12216     fi
12217     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX" -a "$_os" = "WINNT"; then
12218         save_CXX="$CXX"
12219         CXX="$LO_CLANG_CXX"
12220         AC_MSG_CHECKING([whether $CXX supports -Zc:dllexportInlines-])
12221         AC_LANG_PUSH([C++])
12222         save_CXXFLAGS=$CXXFLAGS
12223         CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
12224         AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
12225                 HAVE_LO_CLANG_DLLEXPORTINLINES=TRUE
12226                 AC_MSG_RESULT([yes])
12227             ], [AC_MSG_RESULT([no])])
12228         CXXFLAGS=$save_CXXFLAGS
12229         AC_LANG_POP([C++])
12230         CXX="$save_CXX"
12231         if test -z "$HAVE_LO_CLANG_DLLEXPORTINLINES"; then
12232             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.])
12233         fi
12234     fi
12235     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
12236         # Skia is the default on Windows and Mac, so hard-require Clang.
12237         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
12238         if test "$_os" = "WINNT" -o "$_os" = "Darwin"; then
12239             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang, or use --disable-skia.])
12240         else
12241             AC_MSG_WARN([Clang compiler not found.])
12242         fi
12243     else
12245         save_CXX="$CXX"
12246         CXX="$LO_CLANG_CXX"
12247         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
12248         flag_sse2=-msse2
12249         flag_ssse3=-mssse3
12250         flag_sse41=-msse4.1
12251         flag_sse42=-msse4.2
12252         flag_avx=-mavx
12253         flag_avx2=-mavx2
12254         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
12255         flag_avx512f=-mavx512f
12256         flag_f16c=-mf16c
12257         flag_fma=-mfma
12259         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
12260         AC_LANG_PUSH([C++])
12261         save_CXXFLAGS=$CXXFLAGS
12262         CXXFLAGS="$CXXFLAGS $flag_sse2"
12263         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12264             #include <emmintrin.h>
12265             int main () {
12266                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12267                 c = _mm_xor_si128 (a, b);
12268                 return 0;
12269             }
12270             ])],
12271             [can_compile_sse2=yes],
12272             [can_compile_sse2=no])
12273         AC_LANG_POP([C++])
12274         CXXFLAGS=$save_CXXFLAGS
12275         AC_MSG_RESULT([${can_compile_sse2}])
12276         if test "${can_compile_sse2}" = "yes" ; then
12277             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
12278         fi
12280         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
12281         AC_LANG_PUSH([C++])
12282         save_CXXFLAGS=$CXXFLAGS
12283         CXXFLAGS="$CXXFLAGS $flag_ssse3"
12284         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12285             #include <tmmintrin.h>
12286             int main () {
12287                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12288                 c = _mm_maddubs_epi16 (a, b);
12289                 return 0;
12290             }
12291             ])],
12292             [can_compile_ssse3=yes],
12293             [can_compile_ssse3=no])
12294         AC_LANG_POP([C++])
12295         CXXFLAGS=$save_CXXFLAGS
12296         AC_MSG_RESULT([${can_compile_ssse3}])
12297         if test "${can_compile_ssse3}" = "yes" ; then
12298             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
12299         fi
12301         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
12302         AC_LANG_PUSH([C++])
12303         save_CXXFLAGS=$CXXFLAGS
12304         CXXFLAGS="$CXXFLAGS $flag_sse41"
12305         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12306             #include <smmintrin.h>
12307             int main () {
12308                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12309                 c = _mm_cmpeq_epi64 (a, b);
12310                 return 0;
12311             }
12312             ])],
12313             [can_compile_sse41=yes],
12314             [can_compile_sse41=no])
12315         AC_LANG_POP([C++])
12316         CXXFLAGS=$save_CXXFLAGS
12317         AC_MSG_RESULT([${can_compile_sse41}])
12318         if test "${can_compile_sse41}" = "yes" ; then
12319             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12320         fi
12322         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12323         AC_LANG_PUSH([C++])
12324         save_CXXFLAGS=$CXXFLAGS
12325         CXXFLAGS="$CXXFLAGS $flag_sse42"
12326         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12327             #include <nmmintrin.h>
12328             int main () {
12329                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12330                 c = _mm_cmpgt_epi64 (a, b);
12331                 return 0;
12332             }
12333             ])],
12334             [can_compile_sse42=yes],
12335             [can_compile_sse42=no])
12336         AC_LANG_POP([C++])
12337         CXXFLAGS=$save_CXXFLAGS
12338         AC_MSG_RESULT([${can_compile_sse42}])
12339         if test "${can_compile_sse42}" = "yes" ; then
12340             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12341         fi
12343         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12344         AC_LANG_PUSH([C++])
12345         save_CXXFLAGS=$CXXFLAGS
12346         CXXFLAGS="$CXXFLAGS $flag_avx"
12347         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12348             #include <immintrin.h>
12349             int main () {
12350                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12351                 c = _mm256_xor_ps(a, b);
12352                 return 0;
12353             }
12354             ])],
12355             [can_compile_avx=yes],
12356             [can_compile_avx=no])
12357         AC_LANG_POP([C++])
12358         CXXFLAGS=$save_CXXFLAGS
12359         AC_MSG_RESULT([${can_compile_avx}])
12360         if test "${can_compile_avx}" = "yes" ; then
12361             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12362         fi
12364         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12365         AC_LANG_PUSH([C++])
12366         save_CXXFLAGS=$CXXFLAGS
12367         CXXFLAGS="$CXXFLAGS $flag_avx2"
12368         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12369             #include <immintrin.h>
12370             int main () {
12371                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12372                 c = _mm256_maddubs_epi16(a, b);
12373                 return 0;
12374             }
12375             ])],
12376             [can_compile_avx2=yes],
12377             [can_compile_avx2=no])
12378         AC_LANG_POP([C++])
12379         CXXFLAGS=$save_CXXFLAGS
12380         AC_MSG_RESULT([${can_compile_avx2}])
12381         if test "${can_compile_avx2}" = "yes" ; then
12382             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12383         fi
12385         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12386         AC_LANG_PUSH([C++])
12387         save_CXXFLAGS=$CXXFLAGS
12388         CXXFLAGS="$CXXFLAGS $flag_avx512"
12389         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12390             #include <immintrin.h>
12391             int main () {
12392                 __m512i a = _mm512_loadu_si512(0);
12393                 __m512d v1 = _mm512_load_pd(0);
12394                 // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
12395                 __m512d v2 = _mm512_abs_pd(v1);
12396                 return 0;
12397             }
12398             ])],
12399             [can_compile_avx512=yes],
12400             [can_compile_avx512=no])
12401         AC_LANG_POP([C++])
12402         CXXFLAGS=$save_CXXFLAGS
12403         AC_MSG_RESULT([${can_compile_avx512}])
12404         if test "${can_compile_avx512}" = "yes" ; then
12405             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12406             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
12407         fi
12409         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12410         AC_LANG_PUSH([C++])
12411         save_CXXFLAGS=$CXXFLAGS
12412         CXXFLAGS="$CXXFLAGS $flag_f16c"
12413         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12414             #include <immintrin.h>
12415             int main () {
12416                 __m128i a = _mm_set1_epi32 (0);
12417                 __m128 c;
12418                 c = _mm_cvtph_ps(a);
12419                 return 0;
12420             }
12421             ])],
12422             [can_compile_f16c=yes],
12423             [can_compile_f16c=no])
12424         AC_LANG_POP([C++])
12425         CXXFLAGS=$save_CXXFLAGS
12426         AC_MSG_RESULT([${can_compile_f16c}])
12427         if test "${can_compile_f16c}" = "yes" ; then
12428             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12429         fi
12431         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12432         AC_LANG_PUSH([C++])
12433         save_CXXFLAGS=$CXXFLAGS
12434         CXXFLAGS="$CXXFLAGS $flag_fma"
12435         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12436             #include <immintrin.h>
12437             int main () {
12438                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12439                 d = _mm256_fmadd_ps(a, b, c);
12440                 return 0;
12441             }
12442             ])],
12443             [can_compile_fma=yes],
12444             [can_compile_fma=no])
12445         AC_LANG_POP([C++])
12446         CXXFLAGS=$save_CXXFLAGS
12447         AC_MSG_RESULT([${can_compile_fma}])
12448         if test "${can_compile_fma}" = "yes" ; then
12449             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12450         fi
12452         CXX="$save_CXX"
12453     fi
12456 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12458 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12459     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12460     AC_LANG_PUSH([C])
12461     save_CC="$CC"
12462     CC="$LO_CLANG_CC"
12463     save_CFLAGS=$CFLAGS
12464     CFLAGS="$CFLAGS --ccache-skip -O2 -Werror"
12465     dnl an empty program will do, we're checking the compiler flags
12466     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12467                       [use_ccache=yes], [use_ccache=no])
12468     CFLAGS=$save_CFLAGS
12469     CC=$save_CC
12470     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12471         AC_MSG_RESULT([yes])
12472     else
12473         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12474         AC_MSG_RESULT([no])
12475     fi
12476     AC_LANG_POP([C])
12478     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12479     AC_LANG_PUSH([C++])
12480     save_CXX="$CXX"
12481     CXX="$LO_CLANG_CXX"
12482     save_CXXFLAGS=$CXXFLAGS
12483     CXXFLAGS="$CXXFLAGS --ccache-skip -O2 -Werror"
12484     dnl an empty program will do, we're checking the compiler flags
12485     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12486                       [use_ccache=yes], [use_ccache=no])
12487     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12488         AC_MSG_RESULT([yes])
12489     else
12490         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12491         AC_MSG_RESULT([no])
12492     fi
12493     CXXFLAGS=$save_CXXFLAGS
12494     CXX=$save_CXX
12495     AC_LANG_POP([C++])
12498 AC_SUBST(LO_CLANG_CC)
12499 AC_SUBST(LO_CLANG_CXX)
12500 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12501 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12502 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12503 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12504 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12505 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12506 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12507 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F)
12508 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12509 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12510 AC_SUBST(CLANG_USE_LD)
12511 AC_SUBST([HAVE_LO_CLANG_DLLEXPORTINLINES])
12513 SYSTEM_GPGMEPP=
12515 if test "$enable_gpgmepp" = no; then
12516     AC_MSG_CHECKING([whether to enable gpgmepp])
12517     AC_MSG_RESULT([no])
12518 elif test "$enable_mpl_subset" = "yes"; then
12519     AC_MSG_CHECKING([whether gpgmepp should be disabled due to building just MPL])
12520     AC_MSG_RESULT([yes])
12521 elif test "$enable_fuzzers" = "yes"; then
12522     AC_MSG_CHECKING([whether gpgmepp should be disabled due to oss-fuzz])
12523     AC_MSG_RESULT([yes])
12524 elif test "$_os" = "Linux" -o "$_os" = "Darwin" -o "$_os" = "WINNT" ; then
12525     dnl ===================================================================
12526     dnl Check for system gpgme
12527     dnl ===================================================================
12528     AC_MSG_CHECKING([which gpgmepp to use])
12529     if test "$with_system_gpgmepp" = "yes"; then
12530         AC_MSG_RESULT([external])
12531         SYSTEM_GPGMEPP=TRUE
12533         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12534         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12535             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp >= 1.14 development package])], [])
12536         # progress_callback is the only func with plain C linkage
12537         # checking for it also filters out older, KDE-dependent libgpgmepp versions
12538         AC_CHECK_LIB(gpgmepp, progress_callback, [ GPGMEPP_LIBS=-lgpgmepp ],
12539             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12540         AC_CHECK_HEADER(gpgme.h, [],
12541             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12542     else
12543         AC_MSG_RESULT([internal])
12544         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12546         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12547         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12548         if test "$_os" != "WINNT"; then
12549             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12550             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12551         fi
12552     fi
12553     ENABLE_GPGMEPP=TRUE
12554     AC_DEFINE([HAVE_FEATURE_GPGME])
12555     AC_PATH_PROG(GPG, gpg)
12556     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12557     # so let's exclude that manually for the moment
12558     if test -n "$GPG" -a "$_os" != "WINNT"; then
12559         # make sure we not only have a working gpgme, but a full working
12560         # gpg installation to run OpenPGP signature verification
12561         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12562     fi
12563     if test "$_os" = "Linux"; then
12564       uid=`id -u`
12565       AC_MSG_CHECKING([for /run/user/$uid])
12566       if test -d /run/user/$uid; then
12567         AC_MSG_RESULT([yes])
12568         AC_PATH_PROG(GPGCONF, gpgconf)
12570         # Older versions of gpgconf are not working as expected, since
12571         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12572         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12573         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12574         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12575         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12576         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12577         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12578           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12579           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12580           if $GPGCONF --dump-options > /dev/null ; then
12581             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12582               AC_MSG_RESULT([yes])
12583               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12584               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12585             else
12586               AC_MSG_RESULT([no])
12587             fi
12588           else
12589             AC_MSG_RESULT([no. missing or broken gpgconf?])
12590           fi
12591         else
12592           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12593         fi
12594       else
12595         AC_MSG_RESULT([no])
12596      fi
12597    fi
12599 AC_SUBST(ENABLE_GPGMEPP)
12600 AC_SUBST(SYSTEM_GPGMEPP)
12601 AC_SUBST(GPG_ERROR_CFLAGS)
12602 AC_SUBST(GPG_ERROR_LIBS)
12603 AC_SUBST(LIBASSUAN_CFLAGS)
12604 AC_SUBST(LIBASSUAN_LIBS)
12605 AC_SUBST(GPGMEPP_CFLAGS)
12606 AC_SUBST(GPGMEPP_LIBS)
12608 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12609 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12610     AC_MSG_RESULT([yes])
12611     ENABLE_MEDIAWIKI=TRUE
12612     BUILD_TYPE="$BUILD_TYPE XSLTML"
12613     if test  "x$with_java" = "xno"; then
12614         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12615     fi
12616 else
12617     AC_MSG_RESULT([no])
12618     ENABLE_MEDIAWIKI=
12619     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12621 AC_SUBST(ENABLE_MEDIAWIKI)
12623 AC_MSG_CHECKING([whether to build the Report Builder])
12624 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12625     AC_MSG_RESULT([yes])
12626     ENABLE_REPORTBUILDER=TRUE
12627     AC_MSG_CHECKING([which jfreereport libs to use])
12628     if test "$with_system_jfreereport" = "yes"; then
12629         SYSTEM_JFREEREPORT=TRUE
12630         AC_MSG_RESULT([external])
12631         if test -z $SAC_JAR; then
12632             SAC_JAR=/usr/share/java/sac.jar
12633         fi
12634         if ! test -f $SAC_JAR; then
12635              AC_MSG_ERROR(sac.jar not found.)
12636         fi
12638         if test -z $LIBXML_JAR; then
12639             if test -f /usr/share/java/libxml-1.0.0.jar; then
12640                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12641             elif test -f /usr/share/java/libxml.jar; then
12642                 LIBXML_JAR=/usr/share/java/libxml.jar
12643             else
12644                 AC_MSG_ERROR(libxml.jar replacement not found.)
12645             fi
12646         elif ! test -f $LIBXML_JAR; then
12647             AC_MSG_ERROR(libxml.jar not found.)
12648         fi
12650         if test -z $FLUTE_JAR; then
12651             if test -f /usr/share/java/flute-1.3.0.jar; then
12652                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12653             elif test -f /usr/share/java/flute.jar; then
12654                 FLUTE_JAR=/usr/share/java/flute.jar
12655             else
12656                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12657             fi
12658         elif ! test -f $FLUTE_JAR; then
12659             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12660         fi
12662         if test -z $JFREEREPORT_JAR; then
12663             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12664                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12665             elif test -f /usr/share/java/flow-engine.jar; then
12666                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12667             else
12668                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12669             fi
12670         elif ! test -f  $JFREEREPORT_JAR; then
12671                 AC_MSG_ERROR(jfreereport.jar not found.)
12672         fi
12674         if test -z $LIBLAYOUT_JAR; then
12675             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12676                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12677             elif test -f /usr/share/java/liblayout.jar; then
12678                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12679             else
12680                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12681             fi
12682         elif ! test -f $LIBLAYOUT_JAR; then
12683                 AC_MSG_ERROR(liblayout.jar not found.)
12684         fi
12686         if test -z $LIBLOADER_JAR; then
12687             if test -f /usr/share/java/libloader-1.0.0.jar; then
12688                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
12689             elif test -f /usr/share/java/libloader.jar; then
12690                 LIBLOADER_JAR=/usr/share/java/libloader.jar
12691             else
12692                 AC_MSG_ERROR(libloader.jar replacement not found.)
12693             fi
12694         elif ! test -f  $LIBLOADER_JAR; then
12695             AC_MSG_ERROR(libloader.jar not found.)
12696         fi
12698         if test -z $LIBFORMULA_JAR; then
12699             if test -f /usr/share/java/libformula-0.2.0.jar; then
12700                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
12701             elif test -f /usr/share/java/libformula.jar; then
12702                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
12703             else
12704                 AC_MSG_ERROR(libformula.jar replacement not found.)
12705             fi
12706         elif ! test -f $LIBFORMULA_JAR; then
12707                 AC_MSG_ERROR(libformula.jar not found.)
12708         fi
12710         if test -z $LIBREPOSITORY_JAR; then
12711             if test -f /usr/share/java/librepository-1.0.0.jar; then
12712                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
12713             elif test -f /usr/share/java/librepository.jar; then
12714                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
12715             else
12716                 AC_MSG_ERROR(librepository.jar replacement not found.)
12717             fi
12718         elif ! test -f $LIBREPOSITORY_JAR; then
12719             AC_MSG_ERROR(librepository.jar not found.)
12720         fi
12722         if test -z $LIBFONTS_JAR; then
12723             if test -f /usr/share/java/libfonts-1.0.0.jar; then
12724                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
12725             elif test -f /usr/share/java/libfonts.jar; then
12726                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
12727             else
12728                 AC_MSG_ERROR(libfonts.jar replacement not found.)
12729             fi
12730         elif ! test -f $LIBFONTS_JAR; then
12731                 AC_MSG_ERROR(libfonts.jar not found.)
12732         fi
12734         if test -z $LIBSERIALIZER_JAR; then
12735             if test -f /usr/share/java/libserializer-1.0.0.jar; then
12736                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
12737             elif test -f /usr/share/java/libserializer.jar; then
12738                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
12739             else
12740                 AC_MSG_ERROR(libserializer.jar replacement not found.)
12741             fi
12742         elif ! test -f $LIBSERIALIZER_JAR; then
12743                 AC_MSG_ERROR(libserializer.jar not found.)
12744         fi
12746         if test -z $LIBBASE_JAR; then
12747             if test -f /usr/share/java/libbase-1.0.0.jar; then
12748                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
12749             elif test -f /usr/share/java/libbase.jar; then
12750                 LIBBASE_JAR=/usr/share/java/libbase.jar
12751             else
12752                 AC_MSG_ERROR(libbase.jar replacement not found.)
12753             fi
12754         elif ! test -f $LIBBASE_JAR; then
12755             AC_MSG_ERROR(libbase.jar not found.)
12756         fi
12758     else
12759         AC_MSG_RESULT([internal])
12760         SYSTEM_JFREEREPORT=
12761         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
12762         NEED_ANT=TRUE
12763     fi
12764 else
12765     AC_MSG_RESULT([no])
12766     ENABLE_REPORTBUILDER=
12767     SYSTEM_JFREEREPORT=
12769 AC_SUBST(ENABLE_REPORTBUILDER)
12770 AC_SUBST(SYSTEM_JFREEREPORT)
12771 AC_SUBST(SAC_JAR)
12772 AC_SUBST(LIBXML_JAR)
12773 AC_SUBST(FLUTE_JAR)
12774 AC_SUBST(JFREEREPORT_JAR)
12775 AC_SUBST(LIBBASE_JAR)
12776 AC_SUBST(LIBLAYOUT_JAR)
12777 AC_SUBST(LIBLOADER_JAR)
12778 AC_SUBST(LIBFORMULA_JAR)
12779 AC_SUBST(LIBREPOSITORY_JAR)
12780 AC_SUBST(LIBFONTS_JAR)
12781 AC_SUBST(LIBSERIALIZER_JAR)
12783 # scripting provider for BeanShell?
12784 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
12785 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
12786     AC_MSG_RESULT([yes])
12787     ENABLE_SCRIPTING_BEANSHELL=TRUE
12789     dnl ===================================================================
12790     dnl Check for system beanshell
12791     dnl ===================================================================
12792     AC_MSG_CHECKING([which beanshell to use])
12793     if test "$with_system_beanshell" = "yes"; then
12794         AC_MSG_RESULT([external])
12795         SYSTEM_BSH=TRUE
12796         if test -z $BSH_JAR; then
12797             BSH_JAR=/usr/share/java/bsh.jar
12798         fi
12799         if ! test -f $BSH_JAR; then
12800             AC_MSG_ERROR(bsh.jar not found.)
12801         fi
12802     else
12803         AC_MSG_RESULT([internal])
12804         SYSTEM_BSH=
12805         BUILD_TYPE="$BUILD_TYPE BSH"
12806     fi
12807 else
12808     AC_MSG_RESULT([no])
12809     ENABLE_SCRIPTING_BEANSHELL=
12810     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
12812 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
12813 AC_SUBST(SYSTEM_BSH)
12814 AC_SUBST(BSH_JAR)
12816 # scripting provider for JavaScript?
12817 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
12818 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
12819     AC_MSG_RESULT([yes])
12820     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
12822     dnl ===================================================================
12823     dnl Check for system rhino
12824     dnl ===================================================================
12825     AC_MSG_CHECKING([which rhino to use])
12826     if test "$with_system_rhino" = "yes"; then
12827         AC_MSG_RESULT([external])
12828         SYSTEM_RHINO=TRUE
12829         if test -z $RHINO_JAR; then
12830             RHINO_JAR=/usr/share/java/js.jar
12831         fi
12832         if ! test -f $RHINO_JAR; then
12833             AC_MSG_ERROR(js.jar not found.)
12834         fi
12835     else
12836         AC_MSG_RESULT([internal])
12837         SYSTEM_RHINO=
12838         BUILD_TYPE="$BUILD_TYPE RHINO"
12839         NEED_ANT=TRUE
12840     fi
12841 else
12842     AC_MSG_RESULT([no])
12843     ENABLE_SCRIPTING_JAVASCRIPT=
12844     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
12846 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
12847 AC_SUBST(SYSTEM_RHINO)
12848 AC_SUBST(RHINO_JAR)
12850 # This is only used in Qt5/Qt6/KF5 checks to determine if /usr/lib64
12851 # paths should be added to library search path. So lets put all 64-bit
12852 # platforms there.
12853 supports_multilib=
12854 case "$host_cpu" in
12855 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el)
12856     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
12857         supports_multilib="yes"
12858     fi
12859     ;;
12861     ;;
12862 esac
12864 dnl ===================================================================
12865 dnl QT5 Integration
12866 dnl ===================================================================
12868 QT5_CFLAGS=""
12869 QT5_LIBS=""
12870 QMAKE5="qmake"
12871 MOC5="moc"
12872 QT5_GOBJECT_CFLAGS=""
12873 QT5_GOBJECT_LIBS=""
12874 QT5_HAVE_GOBJECT=""
12875 QT5_PLATFORMS_SRCDIR=""
12876 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12877         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
12878         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12879 then
12880     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
12881     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
12883     if test -n "$supports_multilib"; then
12884         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
12885     fi
12887     qt5_test_include="QtWidgets/qapplication.h"
12888     if test "$_os" = "Emscripten"; then
12889         qt5_test_library="libQt5Widgets.a"
12890     else
12891         qt5_test_library="libQt5Widgets.so"
12892     fi
12894     dnl Check for qmake5
12895     if test -n "$QT5DIR"; then
12896         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
12897     else
12898         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
12899     fi
12900     if test "$QMAKE5" = "no"; then
12901         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12902     else
12903         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
12904         if test -z "$qmake5_test_ver"; then
12905             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12906         fi
12907         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
12908         qt5_minimal_minor="6"
12909         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
12910             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
12911         else
12912             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
12913         fi
12914     fi
12916     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
12917     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
12918     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
12919     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
12921     AC_MSG_CHECKING([for Qt5 headers])
12922     qt5_incdir="no"
12923     for inc_dir in $qt5_incdirs; do
12924         if test -r "$inc_dir/$qt5_test_include"; then
12925             qt5_incdir="$inc_dir"
12926             break
12927         fi
12928     done
12929     AC_MSG_RESULT([$qt5_incdir])
12930     if test "x$qt5_incdir" = "xno"; then
12931         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12932     fi
12933     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
12934     AC_LANG_PUSH([C++])
12935     save_CPPFLAGS=$CPPFLAGS
12936     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
12937     AC_CHECK_HEADER(QtCore/qconfig.h, [],
12938         [AC_MSG_ERROR(qconfig.h header not found.)], [])
12939     CPPFLAGS=$save_CPPFLAGS
12940     AC_LANG_POP([C++])
12942     AC_MSG_CHECKING([for Qt5 libraries])
12943     qt5_libdir="no"
12944     for lib_dir in $qt5_libdirs; do
12945         if test -r "$lib_dir/$qt5_test_library"; then
12946             qt5_libdir="$lib_dir"
12947             break
12948         fi
12949     done
12950     AC_MSG_RESULT([$qt5_libdir])
12951     if test "x$qt5_libdir" = "xno"; then
12952         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12953     fi
12955     if test "$_os" = "Emscripten"; then
12956         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
12957             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
12958         fi
12959         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
12960             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
12961         fi
12962     fi
12964     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
12965     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12966     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
12967     if test "$_os" = "Emscripten"; then
12968         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
12969     fi
12971     if test "$USING_X11" = TRUE; then
12972         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
12973         PKG_CHECK_MODULES(QT5_XCB_ICCCM,[xcb-icccm],[
12974             QT5_HAVE_XCB_ICCCM=1
12975             AC_DEFINE(QT5_HAVE_XCB_ICCCM)
12976         ],[
12977             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)])
12978             add_warning "XCB ICCCM not found, which is needed for Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)"
12979         ])
12980         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
12981         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
12982         QT5_USING_X11=1
12983         AC_DEFINE(QT5_USING_X11)
12984     fi
12986     dnl Check for Meta Object Compiler
12988     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
12989     if test "$MOC5" = "no"; then
12990         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
12991 the root of your Qt installation by exporting QT5DIR before running "configure".])
12992     fi
12994     if test "$test_gstreamer_1_0" = yes; then
12995         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
12996                 QT5_HAVE_GOBJECT=1
12997                 AC_DEFINE(QT5_HAVE_GOBJECT)
12998             ],
12999             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
13000         )
13001     fi
13003 AC_SUBST(QT5_CFLAGS)
13004 AC_SUBST(QT5_LIBS)
13005 AC_SUBST(MOC5)
13006 AC_SUBST(QT5_GOBJECT_CFLAGS)
13007 AC_SUBST(QT5_GOBJECT_LIBS)
13008 AC_SUBST(QT5_HAVE_GOBJECT)
13009 AC_SUBST(QT5_PLATFORMS_SRCDIR)
13011 dnl ===================================================================
13012 dnl QT6 Integration
13013 dnl ===================================================================
13015 QT6_CFLAGS=""
13016 QT6_LIBS=""
13017 QMAKE6="qmake"
13018 MOC6="moc"
13019 QT6_PLATFORMS_SRCDIR=""
13020 if test \( "$test_qt6" = "yes" -a "$ENABLE_QT6" = "TRUE" \)
13021 then
13022     qt6_incdirs="$QT6INC /usr/include/qt6 /usr/include $x_includes"
13023     qt6_libdirs="$QT6LIB /usr/lib/qt6 /usr/lib $x_libraries"
13025     if test -n "$supports_multilib"; then
13026         qt6_libdirs="$qt6_libdirs /usr/lib64/qt6 /usr/lib64/qt /usr/lib64"
13027     fi
13029     qt6_test_include="QtWidgets/qapplication.h"
13030     if test "$_os" = "Emscripten"; then
13031         qt6_test_library="libQt6Widgets.a"
13032     else
13033         qt6_test_library="libQt6Widgets.so"
13034     fi
13036     dnl Check for qmake6
13037     if test -n "$QT6DIR"; then
13038         AC_PATH_PROG(QMAKE6, [qmake], no, [$QT6DIR/bin])
13039     else
13040         AC_PATH_PROGS(QMAKE6, [qmake-qt6 qmake], no)
13041     fi
13042     if test "$QMAKE6" = "no"; then
13043         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13044     else
13045         qmake6_test_ver="`$QMAKE6 -v 2>&1 | $SED -n -e 's/^Using Qt version \(6\.[[0-9.]]\+\).*$/\1/p'`"
13046         if test -z "$qmake6_test_ver"; then
13047             AC_MSG_ERROR([Wrong qmake for Qt6 found. Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13048         fi
13049         AC_MSG_NOTICE([Detected Qt6 version: $qmake6_test_ver])
13050     fi
13052     qt6_incdirs="`$QMAKE6 -query QT_INSTALL_HEADERS` $qt6_incdirs"
13053     qt6_libdirs="`$QMAKE6 -query QT_INSTALL_LIBS` $qt6_libdirs"
13054     qt6_platformsdir="`$QMAKE6 -query QT_INSTALL_PLUGINS`/platforms"
13055     QT6_PLATFORMS_SRCDIR="$qt6_platformsdir"
13057     AC_MSG_CHECKING([for Qt6 headers])
13058     qt6_incdir="no"
13059     for inc_dir in $qt6_incdirs; do
13060         if test -r "$inc_dir/$qt6_test_include"; then
13061             qt6_incdir="$inc_dir"
13062             break
13063         fi
13064     done
13065     AC_MSG_RESULT([$qt6_incdir])
13066     if test "x$qt6_incdir" = "xno"; then
13067         AC_MSG_ERROR([Qt6 headers not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13068     fi
13069     # check for scenario: qt6-qtbase-devel-*.86_64 installed but host is i686
13070     AC_LANG_PUSH([C++])
13071     save_CPPFLAGS=$CPPFLAGS
13072     CPPFLAGS="${CPPFLAGS} -I${qt6_incdir}"
13073     AC_CHECK_HEADER(QtCore/qconfig.h, [],
13074         [AC_MSG_ERROR(qconfig.h header not found.)], [])
13075     CPPFLAGS=$save_CPPFLAGS
13076     AC_LANG_POP([C++])
13078     AC_MSG_CHECKING([for Qt6 libraries])
13079     qt6_libdir="no"
13080     for lib_dir in $qt6_libdirs; do
13081         if test -r "$lib_dir/$qt6_test_library"; then
13082             qt6_libdir="$lib_dir"
13083             break
13084         fi
13085     done
13086     AC_MSG_RESULT([$qt6_libdir])
13087     if test "x$qt6_libdir" = "xno"; then
13088         AC_MSG_ERROR([Qt6 libraries not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13089     fi
13091     if test "$_os" = "Emscripten"; then
13092         if test ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html ; then
13093             QT6_PLATFORMS_SRCDIR="${QT6_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
13094         fi
13095         if test ! -f "${qt6_platformsdir}"/libqwasm.a -o ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html; then
13096             AC_MSG_ERROR([No Qt6 WASM QPA plugin found in ${qt6_platformsdir} or ${QT6_PLATFORMS_SRCDIR}])
13097         fi
13098     fi
13100     QT6_CFLAGS="-I$qt6_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13101     QT6_CFLAGS=$(printf '%s' "$QT6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13102     QT6_LIBS="-L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
13103     if test "$_os" = "Emscripten"; then
13104         QT6_LIBS="$QT6_LIBS -lqtpcre2 -lQt6EventDispatcherSupport -lQt6FontDatabaseSupport -L${qt6_platformsdir} -lqwasm"
13105     fi
13107     if test "$USING_X11" = TRUE; then
13108         PKG_CHECK_MODULES(QT6_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for key modifier handling in X11.])])
13109         QT6_CFLAGS="$QT6_CFLAGS $QT6_XCB_CFLAGS"
13110         QT6_LIBS="$QT6_LIBS $QT6_XCB_LIBS"
13111         QT6_USING_X11=1
13112         AC_DEFINE(QT6_USING_X11)
13113     fi
13115     dnl Check for Meta Object Compiler
13117     AC_PATH_PROGS( MOC6, [moc-qt6 moc], no, [`dirname $qt6_libdir`/libexec:$QT6DIR/libexec:$PATH])
13118     if test "$MOC6" = "no"; then
13119         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13120 the root of your Qt installation by exporting QT6DIR before running "configure".])
13121     fi
13123 AC_SUBST(QT6_CFLAGS)
13124 AC_SUBST(QT6_LIBS)
13125 AC_SUBST(MOC6)
13126 AC_SUBST(QT6_PLATFORMS_SRCDIR)
13128 dnl ===================================================================
13129 dnl KF5 Integration
13130 dnl ===================================================================
13132 KF5_CFLAGS=""
13133 KF5_LIBS=""
13134 KF5_CONFIG="kf5-config"
13135 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13136         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13137 then
13138     if test "$OS" = "HAIKU"; then
13139         haiku_arch="`echo $RTL_ARCH | tr X x`"
13140         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13141         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13142     fi
13144     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
13145     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
13146     if test -n "$supports_multilib"; then
13147         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
13148     fi
13150     kf5_test_include="KF5/KIOFileWidgets/KFileWidget"
13151     kf5_test_library="libKF5KIOFileWidgets.so"
13152     kf5_libdirs="$qt5_libdir $kf5_libdirs"
13154     dnl kf5 KDE4 support compatibility installed
13155     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
13156     if test "$KF5_CONFIG" != "no"; then
13157         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
13158         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
13159     fi
13161     dnl Check for KF5 headers
13162     AC_MSG_CHECKING([for KF5 headers])
13163     kf5_incdir="no"
13164     for kf5_check in $kf5_incdirs; do
13165         if test -r "$kf5_check/$kf5_test_include"; then
13166             kf5_incdir="$kf5_check/KF5"
13167             break
13168         fi
13169     done
13170     AC_MSG_RESULT([$kf5_incdir])
13171     if test "x$kf5_incdir" = "xno"; then
13172         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13173     fi
13175     dnl Check for KF5 libraries
13176     AC_MSG_CHECKING([for KF5 libraries])
13177     kf5_libdir="no"
13178     for kf5_check in $kf5_libdirs; do
13179         if test -r "$kf5_check/$kf5_test_library"; then
13180             kf5_libdir="$kf5_check"
13181             break
13182         fi
13183     done
13185     AC_MSG_RESULT([$kf5_libdir])
13186     if test "x$kf5_libdir" = "xno"; then
13187         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13188     fi
13190     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"
13191     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13192     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13194     if test "$USING_X11" = TRUE; then
13195         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
13196     fi
13198     AC_LANG_PUSH([C++])
13199     save_CXXFLAGS=$CXXFLAGS
13200     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
13201     AC_MSG_CHECKING([whether KDE is >= 5.0])
13202        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13203 #include <kcoreaddons_version.h>
13205 int main(int argc, char **argv) {
13206        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
13207        else return 1;
13209        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13210     CXXFLAGS=$save_CXXFLAGS
13211     AC_LANG_POP([C++])
13213 AC_SUBST(KF5_CFLAGS)
13214 AC_SUBST(KF5_LIBS)
13216 dnl ===================================================================
13217 dnl Test whether to include Evolution 2 support
13218 dnl ===================================================================
13219 AC_MSG_CHECKING([whether to enable evolution 2 support])
13220 if test "$enable_evolution2" = yes; then
13221     AC_MSG_RESULT([yes])
13222     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
13223     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13224     FilterLibs "${GOBJECT_LIBS}"
13225     GOBJECT_LIBS="${filteredlibs}"
13226     ENABLE_EVOAB2="TRUE"
13227 else
13228     AC_MSG_RESULT([no])
13230 AC_SUBST(ENABLE_EVOAB2)
13231 AC_SUBST(GOBJECT_CFLAGS)
13232 AC_SUBST(GOBJECT_LIBS)
13234 dnl ===================================================================
13235 dnl Test which themes to include
13236 dnl ===================================================================
13237 AC_MSG_CHECKING([which themes to include])
13238 # if none given use default subset of available themes
13239 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
13240     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"
13243 WITH_THEMES=""
13244 if test "x$with_theme" != "xno"; then
13245     for theme in $with_theme; do
13246         case $theme in
13247         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" ;;
13248         default) real_theme=colibre ;;
13249         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
13250         esac
13251         WITH_THEMES=`echo "$WITH_THEMES $real_theme"|tr '\ ' '\n'|sort|uniq|tr '\n' '\ '`
13252     done
13254 AC_MSG_RESULT([$WITH_THEMES])
13255 AC_SUBST([WITH_THEMES])
13256 # FIXME: remove this, and the convenience default->colibre remapping after a grace period
13257 for theme in $with_theme; do
13258     case $theme in
13259     default) AC_MSG_WARN([--with-theme=default is deprecated and will be removed, use --with-theme=colibre]) ;;
13260     *) ;;
13261     esac
13262 done
13264 ###############################################################################
13265 # Extensions checking
13266 ###############################################################################
13267 AC_MSG_CHECKING([for extensions integration])
13268 if test "x$enable_extension_integration" != "xno"; then
13269     WITH_EXTENSION_INTEGRATION=TRUE
13270     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
13271     AC_MSG_RESULT([yes, use integration])
13272 else
13273     WITH_EXTENSION_INTEGRATION=
13274     AC_MSG_RESULT([no, do not integrate])
13276 AC_SUBST(WITH_EXTENSION_INTEGRATION)
13278 dnl Should any extra extensions be included?
13279 dnl There are standalone tests for each of these below.
13280 WITH_EXTRA_EXTENSIONS=
13281 AC_SUBST([WITH_EXTRA_EXTENSIONS])
13283 libo_CHECK_EXTENSION([ConvertTextToNumber],[CT2N],[ct2n],[ct2n],[])
13284 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
13285 if test "x$with_java" != "xno"; then
13286     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
13287     libo_CHECK_EXTENSION([LanguageTool],[LANGUAGETOOL],[languagetool],[languagetool],[])
13290 AC_MSG_CHECKING([whether to build opens___.ttf])
13291 if test "$enable_build_opensymbol" = "yes"; then
13292     AC_MSG_RESULT([yes])
13293     AC_PATH_PROG(FONTFORGE, fontforge)
13294     if test -z "$FONTFORGE"; then
13295         AC_MSG_ERROR([fontforge not installed])
13296     fi
13297 else
13298     AC_MSG_RESULT([no])
13299     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
13301 AC_SUBST(FONTFORGE)
13303 dnl ===================================================================
13304 dnl Test whether to include fonts
13305 dnl ===================================================================
13306 AC_MSG_CHECKING([whether to include third-party fonts])
13307 if test "$with_fonts" != "no"; then
13308     AC_MSG_RESULT([yes])
13309     WITH_FONTS=TRUE
13310     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
13311     AC_DEFINE(HAVE_MORE_FONTS)
13312 else
13313     AC_MSG_RESULT([no])
13314     WITH_FONTS=
13315     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
13317 AC_SUBST(WITH_FONTS)
13320 dnl ===================================================================
13321 dnl Test whether to enable online update service
13322 dnl ===================================================================
13323 AC_MSG_CHECKING([whether to enable online update])
13324 ENABLE_ONLINE_UPDATE=
13325 ENABLE_ONLINE_UPDATE_MAR=
13326 UPDATE_CONFIG=
13327 if test "$enable_online_update" = ""; then
13328     AC_MSG_RESULT([no])
13329 else
13330     if test "$enable_online_update" = "mar"; then
13331         AC_MSG_RESULT([yes - MAR-based online update])
13332         ENABLE_ONLINE_UPDATE_MAR="TRUE"
13333         if test "$with_update_config" = ""; then
13334             AC_MSG_ERROR([mar based online updater needs an update config specified with "with-update-config])
13335         fi
13336         UPDATE_CONFIG="$with_update_config"
13337         AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
13338     elif test "$enable_online_update" = "yes"; then
13339         AC_MSG_RESULT([yes])
13340         ENABLE_ONLINE_UPDATE="TRUE"
13341     else
13342         AC_MSG_RESULT([no])
13343     fi
13345 AC_SUBST(ENABLE_ONLINE_UPDATE)
13346 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
13347 AC_SUBST(UPDATE_CONFIG)
13350 PRIVACY_POLICY_URL="$with_privacy_policy_url"
13351 if test "$ENABLE_ONLINE_UPDATE" = TRUE -o "$ENABLE_BREAKPAD" = "TRUE"; then
13352     if test "x$with_privacy_policy_url" = "xundefined"; then
13353         AC_MSG_FAILURE([online update or breakpad/crashreporting are enabled, but no --with-privacy-policy-url=... was provided])
13354     fi
13356 AC_SUBST(PRIVACY_POLICY_URL)
13357 dnl ===================================================================
13358 dnl Test whether we need bzip2
13359 dnl ===================================================================
13360 SYSTEM_BZIP2=
13361 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE"; then
13362     AC_MSG_CHECKING([whether to use system bzip2])
13363     if test "$with_system_bzip2" = yes; then
13364         SYSTEM_BZIP2=TRUE
13365         AC_MSG_RESULT([yes])
13366         PKG_CHECK_MODULES(BZIP2, bzip2)
13367         FilterLibs "${BZIP2_LIBS}"
13368         BZIP2_LIBS="${filteredlibs}"
13369     else
13370         AC_MSG_RESULT([no])
13371         BUILD_TYPE="$BUILD_TYPE BZIP2"
13372     fi
13374 AC_SUBST(SYSTEM_BZIP2)
13375 AC_SUBST(BZIP2_CFLAGS)
13376 AC_SUBST(BZIP2_LIBS)
13378 dnl ===================================================================
13379 dnl Test whether to enable extension update
13380 dnl ===================================================================
13381 AC_MSG_CHECKING([whether to enable extension update])
13382 ENABLE_EXTENSION_UPDATE=
13383 if test "x$enable_extension_update" = "xno"; then
13384     AC_MSG_RESULT([no])
13385 else
13386     AC_MSG_RESULT([yes])
13387     ENABLE_EXTENSION_UPDATE="TRUE"
13388     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
13389     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
13391 AC_SUBST(ENABLE_EXTENSION_UPDATE)
13394 dnl ===================================================================
13395 dnl Test whether to create MSI with LIMITUI=1 (silent install)
13396 dnl ===================================================================
13397 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
13398 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
13399     AC_MSG_RESULT([no])
13400     ENABLE_SILENT_MSI=
13401 else
13402     AC_MSG_RESULT([yes])
13403     ENABLE_SILENT_MSI=TRUE
13404     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
13406 AC_SUBST(ENABLE_SILENT_MSI)
13408 AC_MSG_CHECKING([whether and how to use Xinerama])
13409 if test "$_os" = "Linux" -o "$_os" = "FreeBSD"; then
13410     if test "$x_libraries" = "default_x_libraries"; then
13411         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
13412         if test "x$XINERAMALIB" = x; then
13413            XINERAMALIB="/usr/lib"
13414         fi
13415     else
13416         XINERAMALIB="$x_libraries"
13417     fi
13418     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13419         # we have both versions, let the user decide but use the dynamic one
13420         # per default
13421         USE_XINERAMA=TRUE
13422         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13423             XINERAMA_LINK=dynamic
13424         else
13425             XINERAMA_LINK=static
13426         fi
13427     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13428         # we have only the dynamic version
13429         USE_XINERAMA=TRUE
13430         XINERAMA_LINK=dynamic
13431     elif test -e "$XINERAMALIB/libXinerama.a"; then
13432         # static version
13433         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13434             USE_XINERAMA=TRUE
13435             XINERAMA_LINK=static
13436         else
13437             USE_XINERAMA=
13438             XINERAMA_LINK=none
13439         fi
13440     else
13441         # no Xinerama
13442         USE_XINERAMA=
13443         XINERAMA_LINK=none
13444     fi
13445     if test "$USE_XINERAMA" = "TRUE"; then
13446         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13447         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13448             [AC_MSG_ERROR(Xinerama header not found.)], [])
13449         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13450         if test "x$XEXTLIB" = x; then
13451            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13452         fi
13453         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13454         if test "$_os" = "FreeBSD"; then
13455             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13456         fi
13457         if test "$_os" = "Linux"; then
13458             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13459         fi
13460         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13461             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13462     else
13463         AC_MSG_RESULT([no, libXinerama not found or wrong architecture.])
13464     fi
13465 else
13466     USE_XINERAMA=
13467     XINERAMA_LINK=none
13468     AC_MSG_RESULT([no])
13470 AC_SUBST(USE_XINERAMA)
13471 AC_SUBST(XINERAMA_LINK)
13473 dnl ===================================================================
13474 dnl Test whether to build cairo or rely on the system version
13475 dnl ===================================================================
13477 if test "$test_cairo" = "yes"; then
13478     AC_MSG_CHECKING([whether to use the system cairo])
13480     : ${with_system_cairo:=$with_system_libs}
13481     if test "$with_system_cairo" = "yes"; then
13482         SYSTEM_CAIRO=TRUE
13483         AC_MSG_RESULT([yes])
13485         PKG_CHECK_MODULES( CAIRO, cairo >= 1.8.0 )
13486         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13487         FilterLibs "${CAIRO_LIBS}"
13488         CAIRO_LIBS="${filteredlibs}"
13490         if test "$test_xrender" = "yes"; then
13491             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13492             AC_LANG_PUSH([C])
13493             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13494 #ifdef PictStandardA8
13495 #else
13496       return fail;
13497 #endif
13498 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13500             AC_LANG_POP([C])
13501         fi
13502     else
13503         AC_MSG_RESULT([no])
13504         BUILD_TYPE="$BUILD_TYPE CAIRO"
13505     fi
13507     if test "$enable_cairo_canvas" != no; then
13508         AC_DEFINE(ENABLE_CAIRO_CANVAS)
13509         ENABLE_CAIRO_CANVAS=TRUE
13510     fi
13513 AC_SUBST(CAIRO_CFLAGS)
13514 AC_SUBST(CAIRO_LIBS)
13515 AC_SUBST(ENABLE_CAIRO_CANVAS)
13516 AC_SUBST(SYSTEM_CAIRO)
13518 dnl ===================================================================
13519 dnl Test whether to use avahi
13520 dnl ===================================================================
13521 if test "$_os" = "WINNT"; then
13522     # Windows uses bundled mDNSResponder
13523     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13524 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13525     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13526                       [ENABLE_AVAHI="TRUE"])
13527     AC_DEFINE(HAVE_FEATURE_AVAHI)
13528     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13529     FilterLibs "${AVAHI_LIBS}"
13530     AVAHI_LIBS="${filteredlibs}"
13533 AC_SUBST(ENABLE_AVAHI)
13534 AC_SUBST(AVAHI_CFLAGS)
13535 AC_SUBST(AVAHI_LIBS)
13537 dnl ===================================================================
13538 dnl Test whether to use liblangtag
13539 dnl ===================================================================
13540 SYSTEM_LIBLANGTAG=
13541 AC_MSG_CHECKING([whether to use system liblangtag])
13542 if test "$with_system_liblangtag" = yes; then
13543     SYSTEM_LIBLANGTAG=TRUE
13544     AC_MSG_RESULT([yes])
13545     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
13546     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
13547     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
13548     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13549     FilterLibs "${LIBLANGTAG_LIBS}"
13550     LIBLANGTAG_LIBS="${filteredlibs}"
13551 else
13552     SYSTEM_LIBLANGTAG=
13553     AC_MSG_RESULT([no])
13554     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
13555     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
13556     if test "$COM" = "MSC"; then
13557         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
13558     else
13559         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
13560     fi
13562 AC_SUBST(SYSTEM_LIBLANGTAG)
13563 AC_SUBST(LIBLANGTAG_CFLAGS)
13564 AC_SUBST(LIBLANGTAG_LIBS)
13566 dnl ===================================================================
13567 dnl Test whether to build libpng or rely on the system version
13568 dnl ===================================================================
13570 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng],["-I${WORKDIR}/UnpackedTarball/libpng"],["-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"])
13572 dnl ===================================================================
13573 dnl Check for runtime JVM search path
13574 dnl ===================================================================
13575 if test "$ENABLE_JAVA" != ""; then
13576     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
13577     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
13578         AC_MSG_RESULT([yes])
13579         if ! test -d "$with_jvm_path"; then
13580             AC_MSG_ERROR(["$with_jvm_path" not a directory])
13581         fi
13582         if ! test -d "$with_jvm_path"jvm; then
13583             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
13584         fi
13585         JVM_ONE_PATH_CHECK="$with_jvm_path"
13586         AC_SUBST(JVM_ONE_PATH_CHECK)
13587     else
13588         AC_MSG_RESULT([no])
13589     fi
13592 dnl ===================================================================
13593 dnl Test for the presence of Ant and that it works
13594 dnl ===================================================================
13596 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
13597     ANT_HOME=; export ANT_HOME
13598     WITH_ANT_HOME=; export WITH_ANT_HOME
13599     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
13600         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
13601             if test "$_os" = "WINNT"; then
13602                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
13603             else
13604                 with_ant_home="$LODE_HOME/opt/ant"
13605             fi
13606         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
13607             with_ant_home="$LODE_HOME/opt/ant"
13608         fi
13609     fi
13610     if test -z "$with_ant_home"; then
13611         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
13612     else
13613         if test "$_os" = "WINNT"; then
13614             # AC_PATH_PROGS needs unix path
13615             with_ant_home=`cygpath -u "$with_ant_home"`
13616         fi
13617         AbsolutePath "$with_ant_home"
13618         with_ant_home=$absolute_path
13619         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
13620         WITH_ANT_HOME=$with_ant_home
13621         ANT_HOME=$with_ant_home
13622     fi
13624     if test -z "$ANT"; then
13625         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
13626     else
13627         # resolve relative or absolute symlink
13628         while test -h "$ANT"; do
13629             a_cwd=`pwd`
13630             a_basename=`basename "$ANT"`
13631             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
13632             cd "`dirname "$ANT"`"
13633             cd "`dirname "$a_script"`"
13634             ANT="`pwd`"/"`basename "$a_script"`"
13635             cd "$a_cwd"
13636         done
13638         AC_MSG_CHECKING([if $ANT works])
13639         mkdir -p conftest.dir
13640         a_cwd=$(pwd)
13641         cd conftest.dir
13642         cat > conftest.java << EOF
13643         public class conftest {
13644             int testmethod(int a, int b) {
13645                     return a + b;
13646             }
13647         }
13650         cat > conftest.xml << EOF
13651         <project name="conftest" default="conftest">
13652         <target name="conftest">
13653             <javac srcdir="." includes="conftest.java">
13654             </javac>
13655         </target>
13656         </project>
13659         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
13660         if test $? = 0 -a -f ./conftest.class; then
13661             AC_MSG_RESULT([Ant works])
13662             if test -z "$WITH_ANT_HOME"; then
13663                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
13664                 if test -z "$ANT_HOME"; then
13665                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
13666                 fi
13667             else
13668                 ANT_HOME="$WITH_ANT_HOME"
13669             fi
13670         else
13671             echo "configure: Ant test failed" >&5
13672             cat conftest.java >&5
13673             cat conftest.xml >&5
13674             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
13675         fi
13676         cd "$a_cwd"
13677         rm -fr conftest.dir
13678     fi
13679     if test -z "$ANT_HOME"; then
13680         ANT_HOME="NO_ANT_HOME"
13681     else
13682         PathFormat "$ANT_HOME"
13683         ANT_HOME="$formatted_path"
13684         PathFormat "$ANT"
13685         ANT="$formatted_path"
13686     fi
13688     dnl Checking for ant.jar
13689     if test "$ANT_HOME" != "NO_ANT_HOME"; then
13690         AC_MSG_CHECKING([Ant lib directory])
13691         if test -f $ANT_HOME/lib/ant.jar; then
13692             ANT_LIB="$ANT_HOME/lib"
13693         else
13694             if test -f $ANT_HOME/ant.jar; then
13695                 ANT_LIB="$ANT_HOME"
13696             else
13697                 if test -f /usr/share/java/ant.jar; then
13698                     ANT_LIB=/usr/share/java
13699                 else
13700                     if test -f /usr/share/ant-core/lib/ant.jar; then
13701                         ANT_LIB=/usr/share/ant-core/lib
13702                     else
13703                         if test -f $ANT_HOME/lib/ant/ant.jar; then
13704                             ANT_LIB="$ANT_HOME/lib/ant"
13705                         else
13706                             if test -f /usr/share/lib/ant/ant.jar; then
13707                                 ANT_LIB=/usr/share/lib/ant
13708                             else
13709                                 AC_MSG_ERROR([Ant libraries not found!])
13710                             fi
13711                         fi
13712                     fi
13713                 fi
13714             fi
13715         fi
13716         PathFormat "$ANT_LIB"
13717         ANT_LIB="$formatted_path"
13718         AC_MSG_RESULT([Ant lib directory found.])
13719     fi
13721     ant_minver=1.6.0
13722     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
13724     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
13725     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
13726     ant_version_major=`echo $ant_version | cut -d. -f1`
13727     ant_version_minor=`echo $ant_version | cut -d. -f2`
13728     echo "configure: ant_version $ant_version " >&5
13729     echo "configure: ant_version_major $ant_version_major " >&5
13730     echo "configure: ant_version_minor $ant_version_minor " >&5
13731     if test "$ant_version_major" -ge "2"; then
13732         AC_MSG_RESULT([yes, $ant_version])
13733     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
13734         AC_MSG_RESULT([yes, $ant_version])
13735     else
13736         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
13737     fi
13739     rm -f conftest* core core.* *.core
13741 AC_SUBST(ANT)
13742 AC_SUBST(ANT_HOME)
13743 AC_SUBST(ANT_LIB)
13745 OOO_JUNIT_JAR=
13746 HAMCREST_JAR=
13747 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
13748     AC_MSG_CHECKING([for JUnit 4])
13749     if test "$with_junit" = "yes"; then
13750         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
13751             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
13752         elif test -e /usr/share/java/junit4.jar; then
13753             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
13754         else
13755            if test -e /usr/share/lib/java/junit.jar; then
13756               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
13757            else
13758               OOO_JUNIT_JAR=/usr/share/java/junit.jar
13759            fi
13760         fi
13761     else
13762         OOO_JUNIT_JAR=$with_junit
13763     fi
13764     if test "$_os" = "WINNT"; then
13765         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
13766     fi
13767     printf 'import org.junit.Before;' > conftest.java
13768     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13769         AC_MSG_RESULT([$OOO_JUNIT_JAR])
13770     else
13771         AC_MSG_ERROR(
13772 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
13773  specify its pathname via --with-junit=..., or disable it via --without-junit])
13774     fi
13775     rm -f conftest.class conftest.java
13776     if test $OOO_JUNIT_JAR != ""; then
13777         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
13778     fi
13780     AC_MSG_CHECKING([for included Hamcrest])
13781     printf 'import org.hamcrest.BaseDescription;' > conftest.java
13782     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13783         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
13784     else
13785         AC_MSG_RESULT([Not included])
13786         AC_MSG_CHECKING([for standalone hamcrest jar.])
13787         if test "$with_hamcrest" = "yes"; then
13788             if test -e /usr/share/lib/java/hamcrest.jar; then
13789                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
13790             elif test -e /usr/share/java/hamcrest/core.jar; then
13791                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
13792             elif test -e /usr/share/java/hamcrest/hamcrest.jar; then
13793                 HAMCREST_JAR=/usr/share/java/hamcrest/hamcrest.jar
13794             else
13795                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
13796             fi
13797         else
13798             HAMCREST_JAR=$with_hamcrest
13799         fi
13800         if test "$_os" = "WINNT"; then
13801             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
13802         fi
13803         if "$JAVACOMPILER" -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
13804             AC_MSG_RESULT([$HAMCREST_JAR])
13805         else
13806             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),
13807                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
13808         fi
13809     fi
13810     rm -f conftest.class conftest.java
13812 AC_SUBST(OOO_JUNIT_JAR)
13813 AC_SUBST(HAMCREST_JAR)
13816 AC_SUBST(SCPDEFS)
13819 # check for wget and curl
13821 WGET=
13822 CURL=
13824 if test "$enable_fetch_external" != "no"; then
13826 CURL=`which curl 2>/dev/null`
13828 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
13829     # wget new enough?
13830     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
13831     if test $? -eq 0; then
13832         WGET=$i
13833         break
13834     fi
13835 done
13837 if test -z "$WGET" -a -z "$CURL"; then
13838     AC_MSG_ERROR([neither wget nor curl found!])
13843 AC_SUBST(WGET)
13844 AC_SUBST(CURL)
13847 # check for sha256sum
13849 SHA256SUM=
13851 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
13852     eval "$i -a 256 --version" > /dev/null 2>&1
13853     ret=$?
13854     if test $ret -eq 0; then
13855         SHA256SUM="$i -a 256"
13856         break
13857     fi
13858 done
13860 if test -z "$SHA256SUM"; then
13861     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
13862         eval "$i --version" > /dev/null 2>&1
13863         ret=$?
13864         if test $ret -eq 0; then
13865             SHA256SUM=$i
13866             break
13867         fi
13868     done
13871 if test -z "$SHA256SUM"; then
13872     AC_MSG_ERROR([no sha256sum found!])
13875 AC_SUBST(SHA256SUM)
13877 dnl ===================================================================
13878 dnl Dealing with l10n options
13879 dnl ===================================================================
13880 AC_MSG_CHECKING([which languages to be built])
13881 # get list of all languages
13882 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
13883 # the sed command does the following:
13884 #   + if a line ends with a backslash, append the next line to it
13885 #   + adds " on the beginning of the value (after =)
13886 #   + adds " at the end of the value
13887 #   + removes en-US; we want to put it on the beginning
13888 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
13889 [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)]
13890 ALL_LANGS="en-US $completelangiso"
13891 # check the configured localizations
13892 WITH_LANG="$with_lang"
13894 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
13895 # (Norwegian is "nb" and "nn".)
13896 if test "$WITH_LANG" = "no"; then
13897     WITH_LANG=
13900 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
13901     AC_MSG_RESULT([en-US])
13902 else
13903     AC_MSG_RESULT([$WITH_LANG])
13904     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
13905     if test -z "$MSGFMT"; then
13906         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
13907             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
13908         elif test -x "/opt/lo/bin/msgfmt"; then
13909             MSGFMT="/opt/lo/bin/msgfmt"
13910         else
13911             AC_CHECK_PROGS(MSGFMT, [msgfmt])
13912             if test -z "$MSGFMT"; then
13913                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
13914             fi
13915         fi
13916     fi
13917     if test -z "$MSGUNIQ"; then
13918         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
13919             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
13920         elif test -x "/opt/lo/bin/msguniq"; then
13921             MSGUNIQ="/opt/lo/bin/msguniq"
13922         else
13923             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
13924             if test -z "$MSGUNIQ"; then
13925                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
13926             fi
13927         fi
13928     fi
13930 AC_SUBST(MSGFMT)
13931 AC_SUBST(MSGUNIQ)
13932 # check that the list is valid
13933 for lang in $WITH_LANG; do
13934     test "$lang" = "ALL" && continue
13935     # need to check for the exact string, so add space before and after the list of all languages
13936     for vl in $ALL_LANGS; do
13937         if test "$vl" = "$lang"; then
13938            break
13939         fi
13940     done
13941     if test "$vl" != "$lang"; then
13942         # if you're reading this - you prolly quoted your languages remove the quotes ...
13943         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
13944     fi
13945 done
13946 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
13947     echo $WITH_LANG | grep -q en-US
13948     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
13950 # list with substituted ALL
13951 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
13952 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
13953 test "$WITH_LANG" = "en-US" && WITH_LANG=
13954 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
13955     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
13956     ALL_LANGS=`echo $ALL_LANGS qtz`
13958 AC_SUBST(ALL_LANGS)
13959 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
13960 AC_SUBST(WITH_LANG)
13961 AC_SUBST(WITH_LANG_LIST)
13962 AC_SUBST(GIT_NEEDED_SUBMODULES)
13964 WITH_POOR_HELP_LOCALIZATIONS=
13965 if test -d "$SRC_ROOT/translations/source"; then
13966     for l in `ls -1 $SRC_ROOT/translations/source`; do
13967         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
13968             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
13969         fi
13970     done
13972 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
13974 if test -n "$with_locales"; then
13975     WITH_LOCALES="$with_locales"
13977     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
13978     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
13979     # config_host/config_locales.h.in
13980     for locale in $WITH_LOCALES; do
13981         lang=${locale%_*}
13983         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
13985         case $lang in
13986         hi|mr*ne)
13987             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
13988             ;;
13989         bg|ru)
13990             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
13991             ;;
13992         esac
13993     done
13994 else
13995     AC_DEFINE(WITH_LOCALE_ALL)
13997 AC_SUBST(WITH_LOCALES)
13999 dnl git submodule update --reference
14000 dnl ===================================================================
14001 if test -n "${GIT_REFERENCE_SRC}"; then
14002     for repo in ${GIT_NEEDED_SUBMODULES}; do
14003         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
14004             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
14005         fi
14006     done
14008 AC_SUBST(GIT_REFERENCE_SRC)
14010 dnl git submodules linked dirs
14011 dnl ===================================================================
14012 if test -n "${GIT_LINK_SRC}"; then
14013     for repo in ${GIT_NEEDED_SUBMODULES}; do
14014         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
14015             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
14016         fi
14017     done
14019 AC_SUBST(GIT_LINK_SRC)
14021 dnl branding
14022 dnl ===================================================================
14023 AC_MSG_CHECKING([for alternative branding images directory])
14024 # initialize mapped arrays
14025 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
14026 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
14028 if test -z "$with_branding" -o "$with_branding" = "no"; then
14029     AC_MSG_RESULT([none])
14030     DEFAULT_BRAND_IMAGES="$brand_files"
14031 else
14032     if ! test -d $with_branding ; then
14033         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
14034     else
14035         AC_MSG_RESULT([$with_branding])
14036         CUSTOM_BRAND_DIR="$with_branding"
14037         for lfile in $brand_files
14038         do
14039             if ! test -f $with_branding/$lfile ; then
14040                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
14041                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
14042             else
14043                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
14044             fi
14045         done
14046         check_for_progress="yes"
14047     fi
14049 AC_SUBST([BRAND_INTRO_IMAGES])
14050 AC_SUBST([CUSTOM_BRAND_DIR])
14051 AC_SUBST([CUSTOM_BRAND_IMAGES])
14052 AC_SUBST([DEFAULT_BRAND_IMAGES])
14055 AC_MSG_CHECKING([for 'intro' progress settings])
14056 PROGRESSBARCOLOR=
14057 PROGRESSSIZE=
14058 PROGRESSPOSITION=
14059 PROGRESSFRAMECOLOR=
14060 PROGRESSTEXTCOLOR=
14061 PROGRESSTEXTBASELINE=
14063 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
14064     source "$with_branding/progress.conf"
14065     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
14066 else
14067     AC_MSG_RESULT([none])
14070 AC_SUBST(PROGRESSBARCOLOR)
14071 AC_SUBST(PROGRESSSIZE)
14072 AC_SUBST(PROGRESSPOSITION)
14073 AC_SUBST(PROGRESSFRAMECOLOR)
14074 AC_SUBST(PROGRESSTEXTCOLOR)
14075 AC_SUBST(PROGRESSTEXTBASELINE)
14078 dnl ===================================================================
14079 dnl Custom build version
14080 dnl ===================================================================
14081 AC_MSG_CHECKING([for extra build ID])
14082 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
14083     EXTRA_BUILDID="$with_extra_buildid"
14085 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
14086 if test -n "$EXTRA_BUILDID" ; then
14087     AC_MSG_RESULT([$EXTRA_BUILDID])
14088 else
14089     AC_MSG_RESULT([not set])
14091 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
14093 OOO_VENDOR=
14094 AC_MSG_CHECKING([for vendor])
14095 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
14096     OOO_VENDOR="$USERNAME"
14098     if test -z "$OOO_VENDOR"; then
14099         OOO_VENDOR="$USER"
14100     fi
14102     if test -z "$OOO_VENDOR"; then
14103         OOO_VENDOR="`id -u -n`"
14104     fi
14106     AC_MSG_RESULT([not set, using $OOO_VENDOR])
14107 else
14108     OOO_VENDOR="$with_vendor"
14109     AC_MSG_RESULT([$OOO_VENDOR])
14111 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
14112 AC_SUBST(OOO_VENDOR)
14114 if test "$_os" = "Android" ; then
14115     ANDROID_PACKAGE_NAME=
14116     AC_MSG_CHECKING([for Android package name])
14117     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
14118         if test -n "$ENABLE_DEBUG"; then
14119             # Default to the package name that makes ndk-gdb happy.
14120             ANDROID_PACKAGE_NAME="org.libreoffice"
14121         else
14122             ANDROID_PACKAGE_NAME="org.example.libreoffice"
14123         fi
14125         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
14126     else
14127         ANDROID_PACKAGE_NAME="$with_android_package_name"
14128         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
14129     fi
14130     AC_SUBST(ANDROID_PACKAGE_NAME)
14133 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
14134 if test "$with_compat_oowrappers" = "yes"; then
14135     WITH_COMPAT_OOWRAPPERS=TRUE
14136     AC_MSG_RESULT(yes)
14137 else
14138     WITH_COMPAT_OOWRAPPERS=
14139     AC_MSG_RESULT(no)
14141 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
14143 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{print tolower($0)}'`
14144 AC_MSG_CHECKING([for install dirname])
14145 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
14146     INSTALLDIRNAME="$with_install_dirname"
14148 AC_MSG_RESULT([$INSTALLDIRNAME])
14149 AC_SUBST(INSTALLDIRNAME)
14151 AC_MSG_CHECKING([for prefix])
14152 test "x$prefix" = xNONE && prefix=$ac_default_prefix
14153 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
14154 PREFIXDIR="$prefix"
14155 AC_MSG_RESULT([$PREFIXDIR])
14156 AC_SUBST(PREFIXDIR)
14158 LIBDIR=[$(eval echo $(eval echo $libdir))]
14159 AC_SUBST(LIBDIR)
14161 DATADIR=[$(eval echo $(eval echo $datadir))]
14162 AC_SUBST(DATADIR)
14164 MANDIR=[$(eval echo $(eval echo $mandir))]
14165 AC_SUBST(MANDIR)
14167 DOCDIR=[$(eval echo $(eval echo $docdir))]
14168 AC_SUBST(DOCDIR)
14170 BINDIR=[$(eval echo $(eval echo $bindir))]
14171 AC_SUBST(BINDIR)
14173 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
14174 AC_SUBST(INSTALLDIR)
14176 TESTINSTALLDIR="${BUILDDIR}/test-install"
14177 AC_SUBST(TESTINSTALLDIR)
14180 # ===================================================================
14181 # OAuth2 id and secrets
14182 # ===================================================================
14184 AC_MSG_CHECKING([for Google Drive client id and secret])
14185 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
14186     AC_MSG_RESULT([not set])
14187     GDRIVE_CLIENT_ID="\"\""
14188     GDRIVE_CLIENT_SECRET="\"\""
14189 else
14190     AC_MSG_RESULT([set])
14191     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
14192     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
14194 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
14195 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
14197 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
14198 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
14199     AC_MSG_RESULT([not set])
14200     ALFRESCO_CLOUD_CLIENT_ID="\"\""
14201     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
14202 else
14203     AC_MSG_RESULT([set])
14204     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
14205     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
14207 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
14208 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
14210 AC_MSG_CHECKING([for OneDrive client id and secret])
14211 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
14212     AC_MSG_RESULT([not set])
14213     ONEDRIVE_CLIENT_ID="\"\""
14214     ONEDRIVE_CLIENT_SECRET="\"\""
14215 else
14216     AC_MSG_RESULT([set])
14217     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
14218     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
14220 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
14221 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
14224 dnl ===================================================================
14225 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
14226 dnl --enable-dependency-tracking configure option
14227 dnl ===================================================================
14228 AC_MSG_CHECKING([whether to enable dependency tracking])
14229 if test "$enable_dependency_tracking" = "no"; then
14230     nodep=TRUE
14231     AC_MSG_RESULT([no])
14232 else
14233     AC_MSG_RESULT([yes])
14235 AC_SUBST(nodep)
14237 dnl ===================================================================
14238 dnl Number of CPUs to use during the build
14239 dnl ===================================================================
14240 AC_MSG_CHECKING([for number of processors to use])
14241 # plain --with-parallelism is just the default
14242 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
14243     if test "$with_parallelism" = "no"; then
14244         PARALLELISM=0
14245     else
14246         PARALLELISM=$with_parallelism
14247     fi
14248 else
14249     if test "$enable_icecream" = "yes"; then
14250         PARALLELISM="40"
14251     else
14252         case `uname -s` in
14254         Darwin|FreeBSD|NetBSD|OpenBSD)
14255             PARALLELISM=`sysctl -n hw.ncpu`
14256             ;;
14258         Linux)
14259             PARALLELISM=`getconf _NPROCESSORS_ONLN`
14260         ;;
14261         # what else than above does profit here *and* has /proc?
14262         *)
14263             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
14264             ;;
14265         esac
14267         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
14268         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
14269     fi
14272 if test "$no_parallelism_make" = "YES" && test $PARALLELISM -gt 1; then
14273     if test -z "$with_parallelism"; then
14274             AC_MSG_WARN([gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this.])
14275             add_warning "gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this."
14276             PARALLELISM="1"
14277     else
14278         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."
14279     fi
14282 if test $PARALLELISM -eq 0; then
14283     AC_MSG_RESULT([explicit make -j option needed])
14284 else
14285     AC_MSG_RESULT([$PARALLELISM])
14287 AC_SUBST(PARALLELISM)
14289 IWYU_PATH="$with_iwyu"
14290 AC_SUBST(IWYU_PATH)
14291 if test ! -z "$IWYU_PATH"; then
14292     if test ! -f "$IWYU_PATH"; then
14293         AC_MSG_ERROR([cannot find include-what-you-use binary specified by --with-iwyu])
14294     fi
14298 # Set up ILIB for MSVC build
14300 ILIB1=
14301 if test "$build_os" = "cygwin"; then
14302     ILIB="."
14303     if test -n "$JAVA_HOME"; then
14304         ILIB="$ILIB;$JAVA_HOME/lib"
14305     fi
14306     ILIB1=-link
14307     ILIB="$ILIB;$COMPATH/lib/$WIN_HOST_ARCH"
14308     ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/$WIN_HOST_ARCH"
14309     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14310     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14311     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
14312         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14313         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14314     fi
14315     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
14316     ucrtlibpath_formatted=$formatted_path
14317     ILIB="$ILIB;$ucrtlibpath_formatted"
14318     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
14319     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
14320         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/lib"
14321     else
14322         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
14323     fi
14325     if test "$cross_compiling" != "yes"; then
14326         ILIB_FOR_BUILD="$ILIB"
14327     fi
14329 AC_SUBST(ILIB)
14330 AC_SUBST(ILIB_FOR_BUILD)
14332 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
14333 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
14334 dnl from consteval constructor initializing const variable",
14335 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
14336 dnl expression' with consteval constructor", <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
14337 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
14338 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'", or
14339 dnl <https://developercommunity.visualstudio.com/t/1581879> "Bogus error C7595 with consteval
14340 dnl constructor in ternary expression (/std:c++latest)":
14341 AC_LANG_PUSH([C++])
14342 save_CXX=$CXX
14343 if test "$COM" = MSC && test "$COM_IS_CLANG" != TRUE; then
14344     CXX="env LIB=$ILIB $CXX"
14346 save_CXXFLAGS=$CXXFLAGS
14347 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
14348 AC_RUN_IFELSE([AC_LANG_PROGRAM([
14349         struct S {
14350             consteval S() { i = 1; }
14351             int i = 0;
14352         };
14353         S const s;
14355         struct S1 { consteval S1(int) {} };
14356         struct S2 {
14357             S1 x;
14358             S2(): x(0) {}
14359         };
14361         struct S3 {
14362             consteval S3() {}
14363             union {
14364                 int a;
14365                 unsigned b = 0;
14366             };
14367         };
14368         void f() { S3(); }
14370         struct S4 { consteval S4() = default; };
14371         void f4(bool b) { b ? S4() : S4(); }
14372     ], [
14373         return (s.i == 1) ? 0 : 1;
14374     ])], [
14375         AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
14376         AC_MSG_RESULT([yes])
14377     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
14378 CXX=$save_CXX
14379 CXXFLAGS=$save_CXXFLAGS
14380 AC_LANG_POP([C++])
14382 # ===================================================================
14383 # Creating bigger shared library to link against
14384 # ===================================================================
14385 AC_MSG_CHECKING([whether to create huge library])
14386 MERGELIBS=
14388 if test $_os = iOS -o $_os = Android; then
14389     # Never any point in mergelibs for these as we build just static
14390     # libraries anyway...
14391     enable_mergelibs=no
14394 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
14395     if test $_os != Linux -a $_os != WINNT; then
14396         add_warning "--enable-mergelibs is not tested for this platform"
14397     fi
14398     MERGELIBS="TRUE"
14399     AC_MSG_RESULT([yes])
14400     AC_DEFINE(ENABLE_MERGELIBS)
14401 else
14402     AC_MSG_RESULT([no])
14404 AC_SUBST([MERGELIBS])
14406 dnl ===================================================================
14407 dnl icerun is a wrapper that stops us spawning tens of processes
14408 dnl locally - for tools that can't be executed on the compile cluster
14409 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
14410 dnl ===================================================================
14411 AC_MSG_CHECKING([whether to use icerun wrapper])
14412 ICECREAM_RUN=
14413 if test "$enable_icecream" = "yes" && which icerun >/dev/null 2>&1 ; then
14414     ICECREAM_RUN=icerun
14415     AC_MSG_RESULT([yes])
14416 else
14417     AC_MSG_RESULT([no])
14419 AC_SUBST(ICECREAM_RUN)
14421 dnl ===================================================================
14422 dnl Setup the ICECC_VERSION for the build the same way it was set for
14423 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
14424 dnl ===================================================================
14425 x_ICECC_VERSION=[\#]
14426 if test -n "$ICECC_VERSION" ; then
14427     x_ICECC_VERSION=
14429 AC_SUBST(x_ICECC_VERSION)
14430 AC_SUBST(ICECC_VERSION)
14432 dnl ===================================================================
14434 AC_MSG_CHECKING([MPL subset])
14435 MPL_SUBSET=
14437 if test "$enable_mpl_subset" = "yes"; then
14438     warn_report=false
14439     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
14440         warn_report=true
14441     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
14442         warn_report=true
14443     fi
14444     if test "$warn_report" = "true"; then
14445         AC_MSG_ERROR([need to --disable-report-builder - extended database report builder.])
14446     fi
14447     if test "x$enable_postgresql_sdbc" != "xno"; then
14448         AC_MSG_ERROR([need to --disable-postgresql-sdbc - the PostgreSQL database backend.])
14449     fi
14450     if test "$enable_lotuswordpro" = "yes"; then
14451         AC_MSG_ERROR([need to --disable-lotuswordpro - a Lotus Word Pro file format import filter.])
14452     fi
14453     if test "$WITH_WEBDAV" = "neon"; then
14454         AC_MSG_ERROR([need --with-webdav=serf or --without-webdav - webdav support.])
14455     fi
14456     if test -n "$ENABLE_POPPLER"; then
14457         if test "x$SYSTEM_POPPLER" = "x"; then
14458             AC_MSG_ERROR([need to disable PDF import via poppler or use system library])
14459         fi
14460     fi
14461     # cf. m4/libo_check_extension.m4
14462     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
14463         AC_MSG_ERROR([need to disable extra extensions '$WITH_EXTRA_EXTENSIONS'])
14464     fi
14465     for theme in $WITH_THEMES; do
14466         case $theme in
14467         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
14468             AC_MSG_ERROR([need to disable icon themes from '$WITH_THEMES': $theme present, use --with-theme=colibre]) ;;
14469         *) : ;;
14470         esac
14471     done
14473     ENABLE_OPENGL_TRANSITIONS=
14475     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
14476         AC_MSG_ERROR([need to --disable-lpsolve - calc linear programming solver.])
14477     fi
14479     MPL_SUBSET="TRUE"
14480     AC_DEFINE(MPL_HAVE_SUBSET)
14481     AC_MSG_RESULT([only])
14482 else
14483     AC_MSG_RESULT([no restrictions])
14485 AC_SUBST(MPL_SUBSET)
14487 dnl ===================================================================
14489 AC_MSG_CHECKING([formula logger])
14490 ENABLE_FORMULA_LOGGER=
14492 if test "x$enable_formula_logger" = "xyes"; then
14493     AC_MSG_RESULT([yes])
14494     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14495     ENABLE_FORMULA_LOGGER=TRUE
14496 elif test -n "$ENABLE_DBGUTIL" ; then
14497     AC_MSG_RESULT([yes])
14498     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14499     ENABLE_FORMULA_LOGGER=TRUE
14500 else
14501     AC_MSG_RESULT([no])
14504 AC_SUBST(ENABLE_FORMULA_LOGGER)
14506 dnl ===================================================================
14507 dnl Checking for active Antivirus software.
14508 dnl ===================================================================
14510 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
14511     AC_MSG_CHECKING([for active Antivirus software])
14512     ANTIVIRUS_LIST=`cscript.exe //Nologo $SRC_ROOT/antivirusDetection.vbs`
14513     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
14514         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
14515             AC_MSG_RESULT([found])
14516             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
14517             echo $EICAR_STRING > $SRC_ROOT/eicar
14518             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
14519             rm $SRC_ROOT/eicar
14520             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14521                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14522             fi
14523             echo $EICAR_STRING > $BUILDDIR/eicar
14524             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
14525             rm $BUILDDIR/eicar
14526             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14527                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14528             fi
14529             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"
14530         else
14531             AC_MSG_RESULT([not found])
14532         fi
14533     else
14534         AC_MSG_RESULT([n/a])
14535     fi
14538 dnl ===================================================================
14539 dnl Setting up the environment.
14540 dnl ===================================================================
14541 AC_MSG_NOTICE([setting up the build environment variables...])
14543 AC_SUBST(COMPATH)
14545 if test "$build_os" = "cygwin"; then
14546     if test -d "$COMPATH/atlmfc/lib/spectre"; then
14547         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
14548         ATL_INCLUDE="$COMPATH/atlmfc/include"
14549     elif test -d "$COMPATH/atlmfc/lib"; then
14550         ATL_LIB="$COMPATH/atlmfc/lib"
14551         ATL_INCLUDE="$COMPATH/atlmfc/include"
14552     else
14553         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
14554         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
14555     fi
14556     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
14557     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
14558     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
14560     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
14561     PathFormat "/usr/bin/find.exe"
14562     FIND="$formatted_path"
14563     PathFormat "/usr/bin/sort.exe"
14564     SORT="$formatted_path"
14565     PathFormat "/usr/bin/grep.exe"
14566     WIN_GREP="$formatted_path"
14567     PathFormat "/usr/bin/ls.exe"
14568     WIN_LS="$formatted_path"
14569     PathFormat "/usr/bin/touch.exe"
14570     WIN_TOUCH="$formatted_path"
14571 else
14572     FIND=find
14573     SORT=sort
14576 AC_SUBST(ATL_INCLUDE)
14577 AC_SUBST(ATL_LIB)
14578 AC_SUBST(FIND)
14579 AC_SUBST(SORT)
14580 AC_SUBST(WIN_GREP)
14581 AC_SUBST(WIN_LS)
14582 AC_SUBST(WIN_TOUCH)
14584 AC_SUBST(BUILD_TYPE)
14586 AC_SUBST(SOLARINC)
14588 PathFormat "$PERL"
14589 PERL="$formatted_path"
14590 AC_SUBST(PERL)
14592 if test -n "$TMPDIR"; then
14593     TEMP_DIRECTORY="$TMPDIR"
14594 else
14595     TEMP_DIRECTORY="/tmp"
14597 if test "$build_os" = "cygwin"; then
14598     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
14600 AC_SUBST(TEMP_DIRECTORY)
14602 # setup the PATH for the environment
14603 if test -n "$LO_PATH_FOR_BUILD"; then
14604     LO_PATH="$LO_PATH_FOR_BUILD"
14605     case "$host_os" in
14606     cygwin*|wsl*)
14607         pathmunge "$MSVC_HOST_PATH" "before"
14608         ;;
14609     esac
14610 else
14611     LO_PATH="$PATH"
14613     case "$host_os" in
14615     aix*|dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
14616         if test "$ENABLE_JAVA" != ""; then
14617             pathmunge "$JAVA_HOME/bin" "after"
14618         fi
14619         ;;
14621     cygwin*|wsl*)
14622         # Win32 make needs native paths
14623         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
14624             LO_PATH=`cygpath -p -m "$PATH"`
14625         fi
14626         if test "$WIN_BUILD_ARCH" = "x64"; then
14627             # needed for msi packaging
14628             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
14629         fi
14630         # .NET 4.6 and higher don't have bin directory
14631         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
14632             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
14633         fi
14634         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
14635         pathmunge "$CSC_PATH" "before"
14636         pathmunge "$MIDL_PATH" "before"
14637         pathmunge "$AL_PATH" "before"
14638         pathmunge "$MSVC_MULTI_PATH" "before"
14639         pathmunge "$MSVC_BUILD_PATH" "before"
14640         if test -n "$MSBUILD_PATH" ; then
14641             pathmunge "$MSBUILD_PATH" "before"
14642         fi
14643         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
14644         if test "$ENABLE_JAVA" != ""; then
14645             if test -d "$JAVA_HOME/jre/bin/client"; then
14646                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
14647             fi
14648             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
14649                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
14650             fi
14651             pathmunge "$JAVA_HOME/bin" "before"
14652         fi
14653         pathmunge "$MSVC_HOST_PATH" "before"
14654         ;;
14656     solaris*)
14657         pathmunge "/usr/css/bin" "before"
14658         if test "$ENABLE_JAVA" != ""; then
14659             pathmunge "$JAVA_HOME/bin" "after"
14660         fi
14661         ;;
14662     esac
14665 AC_SUBST(LO_PATH)
14667 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
14668 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
14669     x_LO_ELFCHECK_ALLOWLIST=
14670 else
14671     x_LO_ELFCHECK_ALLOWLIST=[\#]
14673 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
14674 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
14676 libo_FUZZ_SUMMARY
14678 # Generate a configuration sha256 we can use for deps
14679 if test -f config_host.mk; then
14680     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
14682 if test -f config_host_lang.mk; then
14683     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
14686 CFLAGS=$my_original_CFLAGS
14687 CXXFLAGS=$my_original_CXXFLAGS
14688 CPPFLAGS=$my_original_CPPFLAGS
14690 AC_CONFIG_LINKS([include:include])
14692 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
14693 # BUILD platform configuration] - otherwise breaks cross building
14694 AC_CONFIG_FILES([config_host.mk
14695                  config_host_lang.mk
14696                  Makefile
14697                  lo.xcent
14698                  bin/bffvalidator.sh
14699                  bin/odfvalidator.sh
14700                  bin/officeotron.sh
14701                  hardened_runtime.xcent
14702                  instsetoo_native/util/openoffice.lst
14703                  sysui/desktop/macosx/Info.plist
14704                  vs-code-template.code-workspace:.vscode/vs-code-template.code-workspace.in])
14705 AC_CONFIG_HEADERS([config_host/config_buildid.h])
14706 AC_CONFIG_HEADERS([config_host/config_box2d.h])
14707 AC_CONFIG_HEADERS([config_host/config_clang.h])
14708 AC_CONFIG_HEADERS([config_host/config_crypto.h])
14709 AC_CONFIG_HEADERS([config_host/config_dconf.h])
14710 AC_CONFIG_HEADERS([config_host/config_eot.h])
14711 AC_CONFIG_HEADERS([config_host/config_extensions.h])
14712 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
14713 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
14714 AC_CONFIG_HEADERS([config_host/config_dbus.h])
14715 AC_CONFIG_HEADERS([config_host/config_features.h])
14716 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
14717 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
14718 AC_CONFIG_HEADERS([config_host/config_firebird.h])
14719 AC_CONFIG_HEADERS([config_host/config_folders.h])
14720 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
14721 AC_CONFIG_HEADERS([config_host/config_gio.h])
14722 AC_CONFIG_HEADERS([config_host/config_global.h])
14723 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
14724 AC_CONFIG_HEADERS([config_host/config_java.h])
14725 AC_CONFIG_HEADERS([config_host/config_langs.h])
14726 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
14727 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
14728 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
14729 AC_CONFIG_HEADERS([config_host/config_locales.h])
14730 AC_CONFIG_HEADERS([config_host/config_mpl.h])
14731 AC_CONFIG_HEADERS([config_host/config_oox.h])
14732 AC_CONFIG_HEADERS([config_host/config_options.h])
14733 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
14734 AC_CONFIG_HEADERS([config_host/config_zxing.h])
14735 AC_CONFIG_HEADERS([config_host/config_skia.h])
14736 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
14737 AC_CONFIG_HEADERS([config_host/config_vendor.h])
14738 AC_CONFIG_HEADERS([config_host/config_vcl.h])
14739 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
14740 AC_CONFIG_HEADERS([config_host/config_version.h])
14741 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
14742 AC_CONFIG_HEADERS([config_host/config_poppler.h])
14743 AC_CONFIG_HEADERS([config_host/config_python.h])
14744 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
14745 AC_OUTPUT
14747 if test "$CROSS_COMPILING" = TRUE; then
14748     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
14751 # touch the config timestamp file
14752 if test ! -f config_host.mk.stamp; then
14753     echo > config_host.mk.stamp
14754 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
14755     echo "Host Configuration unchanged - avoiding scp2 stamp update"
14756 else
14757     echo > config_host.mk.stamp
14760 # touch the config lang timestamp file
14761 if test ! -f config_host_lang.mk.stamp; then
14762     echo > config_host_lang.mk.stamp
14763 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
14764     echo "Language Configuration unchanged - avoiding scp2 stamp update"
14765 else
14766     echo > config_host_lang.mk.stamp
14770 if test \( "$STALE_MAKE" = "TRUE" -o "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE" \) \
14771         -a "$build_os" = "cygwin"; then
14773 cat << _EOS
14774 ****************************************************************************
14775 WARNING:
14776 Your make version is known to be horribly slow, and hard to debug
14777 problems with. To get a reasonably functional make please do:
14779 to install a pre-compiled binary make for Win32
14781  mkdir -p /opt/lo/bin
14782  cd /opt/lo/bin
14783  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
14784  cp make-4.2.1-msvc.exe make
14785  chmod +x make
14787 to install from source:
14788 place yourself in a working directory of you choice.
14790  git clone git://git.savannah.gnu.org/make.git
14792  [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"]
14793  set PATH=%PATH%;C:\Cygwin\bin
14794  [or Cygwin64, if that is what you have]
14795  cd path-to-make-repo-you-cloned-above
14796  build_w32.bat --without-guile
14798 should result in a WinRel/gnumake.exe.
14799 Copy it to the Cygwin /opt/lo/bin directory as make.exe
14801 Then re-run autogen.sh
14803 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
14804 Alternatively, you can install the 'new' make where ever you want and make sure that `which make` finds it.
14806 _EOS
14807 if test "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE"; then
14808     AC_MSG_ERROR([no file function found; the build will fail without it; use GNU make 4.0 or later])
14813 cat << _EOF
14814 ****************************************************************************
14816 To build, run:
14817 $GNUMAKE
14819 To view some help, run:
14820 $GNUMAKE help
14822 _EOF
14824 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
14825     cat << _EOF
14826 After the build has finished successfully, you can immediately run what you built using the command:
14827 _EOF
14829     if test $_os = Darwin; then
14830         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
14831     else
14832         echo instdir/program/soffice
14833     fi
14834     cat << _EOF
14836 If you want to run the smoketest, run:
14837 $GNUMAKE check
14839 _EOF
14842 if test -s "$WARNINGS_FILE_FOR_BUILD"; then
14843     echo "BUILD / cross-toolset config, repeated ($WARNINGS_FILE_FOR_BUILD)"
14844     cat "$WARNINGS_FILE_FOR_BUILD"
14845     echo
14848 if test -s "$WARNINGS_FILE"; then
14849     echo "HOST config ($WARNINGS_FILE)"
14850     cat "$WARNINGS_FILE"
14853 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: