Related: tdf#145786 cooperate between our own grabs
[LibreOffice.git] / configure.ac
blob5c893e30fb9c120eb3d7d10f32c7c18f221f1768
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.0.0.alpha1+],[],[],[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 dnl ===================================================================
1338 dnl Sanity checks for Emscripten SDK setup
1339 dnl ===================================================================
1341 if test "$_os" = "Emscripten"; then
1342     EMSCRIPTEN_ERROR=0
1343     if ! which emconfigure >/dev/null 2>&1; then
1344         AC_MSG_WARN([emconfigure must be in your \$PATH])
1345         EMSCRIPTEN_ERROR=1
1346     fi
1347     if test -z "$EMMAKEN_JUST_CONFIGURE"; then
1348         AC_MSG_WARN(["\$EMMAKEN_JUST_CONFIGURE wasn't set by emconfigure. Prefix configure or use autogen.sh])
1349         EMSCRIPTEN_ERROR=1
1350     fi
1351     if test $EMSCRIPTEN_ERROR -ne 0; then
1352         AC_MSG_ERROR(["Please fix your EMSDK setup to build with Emscripten!"])
1353     fi
1356 ###############################################################################
1357 # Extensions switches --enable/--disable
1358 ###############################################################################
1359 # By default these should be enabled unless having extra dependencies.
1360 # If there is extra dependency over configure options then the enable should
1361 # be automagic based on whether the requiring feature is enabled or not.
1362 # All this options change anything only with --enable-extension-integration.
1364 # The name of this option and its help string makes it sound as if
1365 # extensions are built anyway, just not integrated in the installer,
1366 # if you use --disable-extension-integration. Is that really the
1367 # case?
1369 AC_ARG_ENABLE(ios-simulator,
1370     AS_HELP_STRING([--enable-ios-simulator],
1371         [build for iOS simulator])
1374 libo_FUZZ_ARG_ENABLE(extension-integration,
1375     AS_HELP_STRING([--disable-extension-integration],
1376         [Disable integration of the built extensions in the installer of the
1377          product. Use this switch to disable the integration.])
1380 AC_ARG_ENABLE(avmedia,
1381     AS_HELP_STRING([--disable-avmedia],
1382         [Disable displaying and inserting AV media in documents. Work in progress, use only if you are hacking on it.])
1385 AC_ARG_ENABLE(database-connectivity,
1386     AS_HELP_STRING([--disable-database-connectivity],
1387         [Disable various database connectivity. Work in progress, use only if you are hacking on it.])
1390 # This doesn't mean not building (or "integrating") extensions
1391 # (although it probably should; i.e. it should imply
1392 # --disable-extension-integration I guess), it means not supporting
1393 # any extension mechanism at all
1394 libo_FUZZ_ARG_ENABLE(extensions,
1395     AS_HELP_STRING([--disable-extensions],
1396         [Disable all add-on extension functionality. Work in progress, use only if you are hacking on it.])
1399 AC_ARG_ENABLE(scripting,
1400     AS_HELP_STRING([--disable-scripting],
1401         [Disable BASIC, Java and Python. Work in progress, use only if you are hacking on it.])
1404 # This is mainly for Android and iOS, but could potentially be used in some
1405 # special case otherwise, too, so factored out as a separate setting
1407 AC_ARG_ENABLE(dynamic-loading,
1408     AS_HELP_STRING([--disable-dynamic-loading],
1409         [Disable any use of dynamic loading of code. Work in progress, use only if you are hacking on it.])
1412 libo_FUZZ_ARG_ENABLE(report-builder,
1413     AS_HELP_STRING([--disable-report-builder],
1414         [Disable the Report Builder.])
1417 libo_FUZZ_ARG_ENABLE(ext-wiki-publisher,
1418     AS_HELP_STRING([--enable-ext-wiki-publisher],
1419         [Enable the Wiki Publisher extension.])
1422 libo_FUZZ_ARG_ENABLE(lpsolve,
1423     AS_HELP_STRING([--disable-lpsolve],
1424         [Disable compilation of the lp solve solver ])
1426 libo_FUZZ_ARG_ENABLE(coinmp,
1427     AS_HELP_STRING([--disable-coinmp],
1428         [Disable compilation of the CoinMP solver ])
1431 libo_FUZZ_ARG_ENABLE(pdfimport,
1432     AS_HELP_STRING([--disable-pdfimport],
1433         [Disable building the PDF import feature.])
1436 libo_FUZZ_ARG_ENABLE(pdfium,
1437     AS_HELP_STRING([--disable-pdfium],
1438         [Disable building PDFium. Results in unsecure PDF signature verification.])
1441 libo_FUZZ_ARG_ENABLE(skia,
1442     AS_HELP_STRING([--disable-skia],
1443         [Disable building Skia. Use --enable-skia=debug to build without optimizations.])
1446 ###############################################################################
1448 dnl ---------- *** ----------
1450 libo_FUZZ_ARG_ENABLE(mergelibs,
1451     AS_HELP_STRING([--enable-mergelibs],
1452         [Merge several of the smaller libraries into one big, "merged", one.])
1455 libo_FUZZ_ARG_ENABLE(breakpad,
1456     AS_HELP_STRING([--enable-breakpad],
1457         [Enables breakpad for crash reporting.])
1460 libo_FUZZ_ARG_ENABLE(crashdump,
1461     AS_HELP_STRING([--disable-crashdump],
1462         [Disable dump.ini and dump-file, when --enable-breakpad])
1465 AC_ARG_ENABLE(fetch-external,
1466     AS_HELP_STRING([--disable-fetch-external],
1467         [Disables fetching external tarballs from web sources.])
1470 AC_ARG_ENABLE(fuzzers,
1471     AS_HELP_STRING([--enable-fuzzers],
1472         [Enables building libfuzzer targets for fuzz testing.])
1475 libo_FUZZ_ARG_ENABLE(pch,
1476     AS_HELP_STRING([--enable-pch=<yes/no/system/base/normal/full>],
1477         [Enables precompiled header support for C++. Forced default on Windows/VC build.
1478          Using 'system' will include only external headers, 'base' will add also headers
1479          from base modules, 'normal' will also add all headers except from the module built,
1480          'full' will use all suitable headers even from a module itself.])
1483 libo_FUZZ_ARG_ENABLE(epm,
1484     AS_HELP_STRING([--enable-epm],
1485         [LibreOffice includes self-packaging code, that requires epm, however epm is
1486          useless for large scale package building.])
1489 libo_FUZZ_ARG_ENABLE(odk,
1490     AS_HELP_STRING([--enable-odk],
1491         [Enable building the Office Development Kit, the part that extensions need to build against])
1494 AC_ARG_ENABLE(mpl-subset,
1495     AS_HELP_STRING([--enable-mpl-subset],
1496         [Don't compile any pieces which are not MPL or more liberally licensed])
1499 libo_FUZZ_ARG_ENABLE(evolution2,
1500     AS_HELP_STRING([--enable-evolution2],
1501         [Allows the built-in evolution 2 addressbook connectivity build to be
1502          enabled.])
1505 AC_ARG_ENABLE(avahi,
1506     AS_HELP_STRING([--enable-avahi],
1507         [Determines whether to use Avahi to advertise Impress to remote controls.])
1510 libo_FUZZ_ARG_ENABLE(werror,
1511     AS_HELP_STRING([--enable-werror],
1512         [Turn warnings to errors. (Has no effect in modules where the treating
1513          of warnings as errors is disabled explicitly.)]),
1516 libo_FUZZ_ARG_ENABLE(assert-always-abort,
1517     AS_HELP_STRING([--enable-assert-always-abort],
1518         [make assert() failures abort even when building without --enable-debug or --enable-dbgutil.]),
1521 libo_FUZZ_ARG_ENABLE(dbgutil,
1522     AS_HELP_STRING([--enable-dbgutil],
1523         [Provide debugging support from --enable-debug and include additional debugging
1524          utilities such as object counting or more expensive checks.
1525          This is the recommended option for developers.
1526          Note that this makes the build ABI incompatible, it is not possible to mix object
1527          files or libraries from a --enable-dbgutil and a --disable-dbgutil build.]))
1529 libo_FUZZ_ARG_ENABLE(debug,
1530     AS_HELP_STRING([--enable-debug],
1531         [Include debugging information, disable compiler optimization and inlining plus
1532          extra debugging code like assertions. Extra large build! (enables -g compiler flag).]))
1534 libo_FUZZ_ARG_ENABLE(split-debug,
1535     AS_HELP_STRING([--disable-split-debug],
1536         [Disable using split debug information (-gsplit-dwarf compile flag). Split debug information
1537          saves disk space and build time, but requires tools that support it (both build tools and debuggers).]))
1539 libo_FUZZ_ARG_ENABLE(gdb-index,
1540     AS_HELP_STRING([--disable-gdb-index],
1541         [Disables creating debug information in the gdb index format, which makes gdb start faster.
1542          The feature requires the gold or lld linker.]))
1544 libo_FUZZ_ARG_ENABLE(sal-log,
1545     AS_HELP_STRING([--enable-sal-log],
1546         [Make SAL_INFO and SAL_WARN calls do something even in a non-debug build.]))
1548 libo_FUZZ_ARG_ENABLE(symbols,
1549     AS_HELP_STRING([--enable-symbols],
1550         [Generate debug information.
1551          By default, enabled for --enable-debug and --enable-dbgutil, disabled
1552          otherwise. It is possible to explicitly specify gbuild build targets
1553          (where 'all' means everything, '-' prepended means to not enable, '/' appended means
1554          everything in the directory; there is no ordering, more specific overrides
1555          more general, and disabling takes precedence).
1556          Example: --enable-symbols="all -sw/ -Library_sc".]))
1558 libo_FUZZ_ARG_ENABLE(optimized,
1559     AS_HELP_STRING([--enable-optimized=<yes/no/debug>],
1560         [Whether to compile with optimization flags.
1561          By default, disabled for --enable-debug and --enable-dbgutil, enabled
1562          otherwise. Using 'debug' will try to use only optimizations that should
1563          not interfere with debugging. For Emscripten we default to optimized (-O1)
1564          debug build, as otherwise binaries become too large.]))
1566 libo_FUZZ_ARG_ENABLE(runtime-optimizations,
1567     AS_HELP_STRING([--disable-runtime-optimizations],
1568         [Statically disable certain runtime optimizations (like rtl/alloc.h or
1569          JVM JIT) that are known to interact badly with certain dynamic analysis
1570          tools (like -fsanitize=address or Valgrind).  By default, disabled iff
1571          CC contains "-fsanitize=*".  (For Valgrind, those runtime optimizations
1572          are typically disabled dynamically via RUNNING_ON_VALGRIND.)]))
1574 AC_ARG_WITH(valgrind,
1575     AS_HELP_STRING([--with-valgrind],
1576         [Make availability of Valgrind headers a hard requirement.]))
1578 libo_FUZZ_ARG_ENABLE(compiler-plugins,
1579     AS_HELP_STRING([--enable-compiler-plugins],
1580         [Enable compiler plugins that will perform additional checks during
1581          building. Enabled automatically by --enable-dbgutil.
1582          Use --enable-compiler-plugins=debug to also enable debug code in the plugins.]))
1583 COMPILER_PLUGINS_DEBUG=
1584 if test "$enable_compiler_plugins" = debug; then
1585     enable_compiler_plugins=yes
1586     COMPILER_PLUGINS_DEBUG=TRUE
1589 libo_FUZZ_ARG_ENABLE(compiler-plugins-analyzer-pch,
1590     AS_HELP_STRING([--disable-compiler-plugins-analyzer-pch],
1591         [Disable use of precompiled headers when running the Clang compiler plugin analyzer.  Not
1592          relevant in the --disable-compiler-plugins case.]))
1594 libo_FUZZ_ARG_ENABLE(ooenv,
1595     AS_HELP_STRING([--enable-ooenv],
1596         [Enable ooenv for the instdir installation.]))
1598 AC_ARG_ENABLE(lto,
1599     AS_HELP_STRING([--enable-lto],
1600         [Enable link-time optimization. Suitable for (optimised) product builds. Building might take
1601          longer but libraries and executables are optimized for speed. For GCC, best to use the 'gold'
1602          linker.)]))
1604 AC_ARG_ENABLE(python,
1605     AS_HELP_STRING([--enable-python=<no/auto/system/internal/fully-internal>],
1606         [Enables or disables Python support at run-time.
1607          Also specifies what Python to use at build-time.
1608          'fully-internal' even forces the internal version for uses of Python
1609          during the build.
1610          On macOS the only choices are
1611          'internal' (default) or 'fully-internal'. Otherwise the default is 'auto'.
1612          ]))
1614 libo_FUZZ_ARG_ENABLE(gtk3,
1615     AS_HELP_STRING([--disable-gtk3],
1616         [Determines whether to use Gtk+ 3.0 vclplug on platforms where Gtk+ 3.0 is available.]),
1617 ,test "${enable_gtk3+set}" = set || enable_gtk3=yes)
1619 AC_ARG_ENABLE(gtk4,
1620     AS_HELP_STRING([--enable-gtk4],
1621         [Determines whether to use Gtk+ 4.0 vclplug on platforms where Gtk+ 4.0 is available.]))
1623 AC_ARG_ENABLE(introspection,
1624     AS_HELP_STRING([--enable-introspection],
1625         [Generate files for GObject introspection.  Requires --enable-gtk3.  (Typically used by
1626          Linux distributions.)]))
1628 AC_ARG_ENABLE(split-app-modules,
1629     AS_HELP_STRING([--enable-split-app-modules],
1630         [Split file lists for app modules, e.g. base, calc.
1631          Has effect only with make distro-pack-install]),
1634 AC_ARG_ENABLE(split-opt-features,
1635     AS_HELP_STRING([--enable-split-opt-features],
1636         [Split file lists for some optional features, e.g. pyuno, testtool.
1637          Has effect only with make distro-pack-install]),
1640 libo_FUZZ_ARG_ENABLE(cairo-canvas,
1641     AS_HELP_STRING([--disable-cairo-canvas],
1642         [Determines whether to build the Cairo canvas on platforms where Cairo is available.]),
1645 libo_FUZZ_ARG_ENABLE(dbus,
1646     AS_HELP_STRING([--disable-dbus],
1647         [Determines whether to enable features that depend on dbus.
1648          e.g. Presentation mode screensaver control, bluetooth presentation control, automatic font install]),
1649 ,test "${enable_dbus+set}" = set || enable_dbus=yes)
1651 libo_FUZZ_ARG_ENABLE(sdremote,
1652     AS_HELP_STRING([--disable-sdremote],
1653         [Determines whether to enable Impress remote control (i.e. the server component).]),
1654 ,test "${enable_sdremote+set}" = set || enable_sdremote=yes)
1656 libo_FUZZ_ARG_ENABLE(sdremote-bluetooth,
1657     AS_HELP_STRING([--disable-sdremote-bluetooth],
1658         [Determines whether to build sdremote with bluetooth support.
1659          Requires dbus on Linux.]))
1661 libo_FUZZ_ARG_ENABLE(gio,
1662     AS_HELP_STRING([--disable-gio],
1663         [Determines whether to use the GIO support.]),
1664 ,test "${enable_gio+set}" = set || enable_gio=yes)
1666 AC_ARG_ENABLE(qt5,
1667     AS_HELP_STRING([--enable-qt5],
1668         [Determines whether to use Qt5 vclplug on platforms where Qt5 is
1669          available.]),
1672 AC_ARG_ENABLE(qt6,
1673     AS_HELP_STRING([--enable-qt6],
1674         [Determines whether to use Qt6 vclplug on platforms where Qt6 is
1675          available.]),
1678 AC_ARG_ENABLE(kf5,
1679     AS_HELP_STRING([--enable-kf5],
1680         [Determines whether to use Qt5/KF5 vclplug on platforms where Qt5 and
1681          KF5 are available.]),
1684 AC_ARG_ENABLE(gtk3_kde5,
1685     AS_HELP_STRING([--enable-gtk3-kde5],
1686         [Determines whether to use Gtk3 vclplug with KF5 file dialogs on
1687          platforms where Gtk3, Qt5 and Plasma is available.]),
1690 AC_ARG_ENABLE(gui,
1691     AS_HELP_STRING([--disable-gui],
1692         [Disable use of X11 or Wayland to reduce dependencies (e.g. for building LibreOfficeKit).]),
1693 ,enable_gui=yes)
1695 libo_FUZZ_ARG_ENABLE(randr,
1696     AS_HELP_STRING([--disable-randr],
1697         [Disable RandR support in the vcl project.]),
1698 ,test "${enable_randr+set}" = set || enable_randr=yes)
1700 libo_FUZZ_ARG_ENABLE(gstreamer-1-0,
1701     AS_HELP_STRING([--disable-gstreamer-1-0],
1702         [Disable building with the gstreamer 1.0 avmedia backend.]),
1703 ,test "${enable_gstreamer_1_0+set}" = set || enable_gstreamer_1_0=yes)
1705 libo_FUZZ_ARG_ENABLE([eot],
1706     [AS_HELP_STRING([--enable-eot],
1707         [Enable support for Embedded OpenType fonts.])],
1708 ,test "${enable_eot+set}" = set || enable_eot=no)
1710 libo_FUZZ_ARG_ENABLE(cve-tests,
1711     AS_HELP_STRING([--disable-cve-tests],
1712         [Prevent CVE tests to be executed]),
1715 libo_FUZZ_ARG_ENABLE(chart-tests,
1716     AS_HELP_STRING([--enable-chart-tests],
1717         [Executes chart XShape tests. In a perfect world these tests would be
1718          stable and everyone could run them, in reality it is best to run them
1719          only on a few machines that are known to work and maintained by people
1720          who can judge if a test failure is a regression or not.]),
1723 AC_ARG_ENABLE(build-opensymbol,
1724     AS_HELP_STRING([--enable-build-opensymbol],
1725         [Do not use the prebuilt opens___.ttf. Build it instead. This needs
1726          fontforge installed.]),
1729 AC_ARG_ENABLE(dependency-tracking,
1730     AS_HELP_STRING([--enable-dependency-tracking],
1731         [Do not reject slow dependency extractors.])[
1732   --disable-dependency-tracking
1733                           Disables generation of dependency information.
1734                           Speed up one-time builds.],
1737 AC_ARG_ENABLE(icecream,
1738     AS_HELP_STRING([--enable-icecream],
1739         [Use the 'icecream' distributed compiling tool to speedup the compilation.
1740          It defaults to /opt/icecream for the location of the icecream gcc/g++
1741          wrappers, you can override that using --with-gcc-home=/the/path switch.]),
1744 AC_ARG_ENABLE(ld,
1745     AS_HELP_STRING([--enable-ld=<linker>],
1746         [Use the specified linker. Both 'gold' and 'lld' linkers generally use less memory and link faster.
1747          By default tries to use the best linker possible, use --disable-ld to use the default linker.
1748          If <linker> contains any ':', the part before the first ':' is used as the value of
1749          -fuse-ld, while the part after the first ':' is used as the value of --ld-path (which is
1750          needed for Clang 12).]),
1753 libo_FUZZ_ARG_ENABLE(cups,
1754     AS_HELP_STRING([--disable-cups],
1755         [Do not build cups support.])
1758 AC_ARG_ENABLE(ccache,
1759     AS_HELP_STRING([--disable-ccache],
1760         [Do not try to use ccache automatically.
1761          By default we will try to detect if ccache is available; in that case if
1762          CC/CXX are not yet set, and --enable-icecream is not given, we
1763          attempt to use ccache. --disable-ccache disables ccache completely.
1764          Additionally ccache's depend mode is enabled if possible,
1765          use --enable-ccache=nodepend to enable ccache without depend mode.
1769 AC_ARG_ENABLE(z7-debug,
1770     AS_HELP_STRING([--enable-z7-debug],
1771         [Makes the MSVC compiler use -Z7 for debugging instead of the default -Zi. Using this option takes
1772          more disk spaces but allows to use ccache. Final PDB files are created even with this option enabled.
1773          Enabled by default if ccache is detected.]))
1775 libo_FUZZ_ARG_ENABLE(online-update,
1776     AS_HELP_STRING([--enable-online-update],
1777         [Enable the online update service that will check for new versions of
1778          LibreOffice. Disabled by default. Requires --with-privacy-policy-url to be set.
1779          If the value is "mar", the experimental Mozilla-like update will be
1780          enabled instead of the traditional update mechanism.]),
1783 AC_ARG_WITH(update-config,
1784     AS_HELP_STRING([--with-update-config=/tmp/update.ini],
1785                    [Path to the update config ini file]))
1787 libo_FUZZ_ARG_ENABLE(extension-update,
1788     AS_HELP_STRING([--disable-extension-update],
1789         [Disable possibility to update installed extensions.]),
1792 libo_FUZZ_ARG_ENABLE(release-build,
1793     AS_HELP_STRING([--enable-release-build],
1794         [Enable release build. Note that the "release build" choice is orthogonal to
1795          whether symbols are present, debug info is generated, or optimization
1796          is done.
1797          See http://wiki.documentfoundation.org/Development/DevBuild]),
1800 AC_ARG_ENABLE(windows-build-signing,
1801     AS_HELP_STRING([--enable-windows-build-signing],
1802         [Enable signing of windows binaries (*.exe, *.dll)]),
1805 AC_ARG_ENABLE(silent-msi,
1806     AS_HELP_STRING([--enable-silent-msi],
1807         [Enable MSI with LIMITUI=1 (silent install).]),
1810 AC_ARG_ENABLE(macosx-code-signing,
1811     AS_HELP_STRING([--enable-macosx-code-signing=<identity>],
1812         [Sign executables, dylibs, frameworks and the app bundle. If you
1813          don't provide an identity the first suitable certificate
1814          in your keychain is used.]),
1817 AC_ARG_ENABLE(macosx-package-signing,
1818     AS_HELP_STRING([--enable-macosx-package-signing=<identity>],
1819         [Create a .pkg suitable for uploading to the Mac App Store and sign
1820          it. If you don't provide an identity the first suitable certificate
1821          in your keychain is used.]),
1824 AC_ARG_ENABLE(macosx-sandbox,
1825     AS_HELP_STRING([--enable-macosx-sandbox],
1826         [Make the app bundle run in a sandbox. Requires code signing.
1827          Is required by apps distributed in the Mac App Store, and implies
1828          adherence to App Store rules.]),
1831 AC_ARG_WITH(macosx-bundle-identifier,
1832     AS_HELP_STRING([--with-macosx-bundle-identifier=tld.mumble.orifice.TheOffice],
1833         [Define the macOS bundle identifier. Default is the somewhat weird
1834          org.libreoffice.script ("script", huh?).]),
1835 ,with_macosx_bundle_identifier=org.libreoffice.script)
1837 AC_ARG_WITH(product-name,
1838     AS_HELP_STRING([--with-product-name='My Own Office Suite'],
1839         [Define the product name. Default is AC_PACKAGE_NAME.]),
1840 ,with_product_name=$PRODUCTNAME)
1842 libo_FUZZ_ARG_ENABLE(community-flavor,
1843     AS_HELP_STRING([--disable-community-flavor],
1844         [Disable the Community branding.]),
1847 AC_ARG_WITH(package-version,
1848     AS_HELP_STRING([--with-package-version='3.1.4.5'],
1849         [Define the package version. Default is AC_PACKAGE_VERSION. Use only if you distribute an own build for macOS.]),
1852 libo_FUZZ_ARG_ENABLE(readonly-installset,
1853     AS_HELP_STRING([--enable-readonly-installset],
1854         [Prevents any attempts by LibreOffice to write into its installation. That means
1855          at least that no "system-wide" extensions can be added. Partly experimental work in
1856          progress, probably not fully implemented. Always enabled for macOS.]),
1859 libo_FUZZ_ARG_ENABLE(mariadb-sdbc,
1860     AS_HELP_STRING([--disable-mariadb-sdbc],
1861         [Disable the build of the MariaDB/MySQL-SDBC driver.])
1864 libo_FUZZ_ARG_ENABLE(postgresql-sdbc,
1865     AS_HELP_STRING([--disable-postgresql-sdbc],
1866         [Disable the build of the PostgreSQL-SDBC driver.])
1869 libo_FUZZ_ARG_ENABLE(lotuswordpro,
1870     AS_HELP_STRING([--disable-lotuswordpro],
1871         [Disable the build of the Lotus Word Pro filter.]),
1872 ,test "${enable_lotuswordpro+set}" = set || enable_lotuswordpro=yes)
1874 libo_FUZZ_ARG_ENABLE(firebird-sdbc,
1875     AS_HELP_STRING([--disable-firebird-sdbc],
1876         [Disable the build of the Firebird-SDBC driver if it doesn't compile for you.]),
1877 ,test "${enable_firebird_sdbc+set}" = set || enable_firebird_sdbc=yes)
1879 AC_ARG_ENABLE(bogus-pkg-config,
1880     AS_HELP_STRING([--enable-bogus-pkg-config],
1881         [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.]),
1884 AC_ARG_ENABLE(openssl,
1885     AS_HELP_STRING([--disable-openssl],
1886         [Disable using libssl/libcrypto from OpenSSL. If disabled,
1887          components will either use GNUTLS or NSS. Work in progress,
1888          use only if you are hacking on it.]),
1889 ,enable_openssl=yes)
1891 libo_FUZZ_ARG_ENABLE(cipher-openssl-backend,
1892     AS_HELP_STRING([--enable-cipher-openssl-backend],
1893         [Enable using OpenSSL as the actual implementation of the rtl/cipher.h functionality.
1894          Requires --enable-openssl.]))
1896 AC_ARG_ENABLE(nss,
1897     AS_HELP_STRING([--disable-nss],
1898         [Disable using NSS. If disabled,
1899          components will either use GNUTLS or openssl. Work in progress,
1900          use only if you are hacking on it.]),
1901 ,enable_nss=yes)
1903 AC_ARG_ENABLE(library-bin-tar,
1904     AS_HELP_STRING([--enable-library-bin-tar],
1905         [Enable the building and reused of tarball of binary build for some 'external' libraries.
1906         Some libraries can save their build result in a tarball
1907         stored in TARFILE_LOCATION. That binary tarball is
1908         uniquely identified by the source tarball,
1909         the content of the config_host.mk file and the content
1910         of the top-level directory in core for that library
1911         If this option is enabled, then if such a tarfile exist, it will be untarred
1912         instead of the source tarfile, and the build step will be skipped for that
1913         library.
1914         If a proper tarfile does not exist, then the normal source-based
1915         build is done for that library and a proper binary tarfile is created
1916         for the next time.]),
1919 AC_ARG_ENABLE(dconf,
1920     AS_HELP_STRING([--disable-dconf],
1921         [Disable the dconf configuration backend (enabled by default where
1922          available).]))
1924 libo_FUZZ_ARG_ENABLE(formula-logger,
1925     AS_HELP_STRING(
1926         [--enable-formula-logger],
1927         [Enable formula logger for logging formula calculation flow in Calc.]
1928     )
1931 AC_ARG_ENABLE(ldap,
1932     AS_HELP_STRING([--disable-ldap],
1933         [Disable LDAP support.]),
1934 ,enable_ldap=yes)
1936 AC_ARG_ENABLE(opencl,
1937     AS_HELP_STRING([--disable-opencl],
1938         [Disable OpenCL support.]),
1939 ,enable_opencl=yes)
1941 libo_FUZZ_ARG_ENABLE(librelogo,
1942     AS_HELP_STRING([--disable-librelogo],
1943         [Do not build LibreLogo.]),
1944 ,enable_librelogo=yes)
1946 AC_ARG_ENABLE(cmis,
1947     AS_HELP_STRING([--disable-cmis],
1948         [Disable CMIS support.]),
1949 ,enable_cmis=yes)
1951 AC_ARG_ENABLE(curl,
1952     AS_HELP_STRING([--disable-curl],
1953         [Disable CURL support.]),
1954 ,enable_curl=yes)
1956 AC_ARG_ENABLE(wasm-strip,
1957     AS_HELP_STRING([--enable-wasm-strip],
1958         [Strip the static build like for WASM/emscripten platform.]),
1959 ,enable_wasm_strip=yes)
1961 AC_ARG_ENABLE(xmlhelp,
1962     AS_HELP_STRING([--disable-xmlhelp],
1963         [Disable XML help support]),
1964 ,enable_xmlhelp=yes)
1967 dnl ===================================================================
1968 dnl Optional Packages (--with/without-)
1969 dnl ===================================================================
1971 AC_ARG_WITH(gcc-home,
1972     AS_HELP_STRING([--with-gcc-home],
1973         [Specify the location of gcc/g++ manually. This can be used in conjunction
1974          with --enable-icecream when icecream gcc/g++ wrappers are installed in a
1975          non-default path.]),
1978 AC_ARG_WITH(gnu-patch,
1979     AS_HELP_STRING([--with-gnu-patch],
1980         [Specify location of GNU patch on Solaris or FreeBSD.]),
1983 AC_ARG_WITH(build-platform-configure-options,
1984     AS_HELP_STRING([--with-build-platform-configure-options],
1985         [Specify options for the configure script run for the *build* platform in a cross-compilation]),
1988 AC_ARG_WITH(gnu-cp,
1989     AS_HELP_STRING([--with-gnu-cp],
1990         [Specify location of GNU cp on Solaris or FreeBSD.]),
1993 AC_ARG_WITH(external-tar,
1994     AS_HELP_STRING([--with-external-tar=<TARFILE_PATH>],
1995         [Specify an absolute path of where to find (and store) tarfiles.]),
1996     TARFILE_LOCATION=$withval ,
1999 AC_ARG_WITH(referenced-git,
2000     AS_HELP_STRING([--with-referenced-git=<OTHER_CHECKOUT_DIR>],
2001         [Specify another checkout directory to reference. This makes use of
2002                  git submodule update --reference, and saves a lot of diskspace
2003                  when having multiple trees side-by-side.]),
2004     GIT_REFERENCE_SRC=$withval ,
2007 AC_ARG_WITH(linked-git,
2008     AS_HELP_STRING([--with-linked-git=<submodules repo basedir>],
2009         [Specify a directory where the repositories of submodules are located.
2010          This uses a method similar to git-new-workdir to get submodules.]),
2011     GIT_LINK_SRC=$withval ,
2014 AC_ARG_WITH(galleries,
2015     AS_HELP_STRING([--with-galleries],
2016         [Specify how galleries should be built. It is possible either to
2017          build these internally from source ("build"),
2018          or to disable them ("no")]),
2021 AC_ARG_WITH(theme,
2022     AS_HELP_STRING([--with-theme="theme1 theme2..."],
2023         [Choose which themes to include. By default those themes with an '*' are included.
2024          Possible choices: *breeze, *breeze_dark, *breeze_dark_svg, *breeze_svg, *colibre, *colibre_svg, *elementary,
2025          *elementary_svg, *karasa_jaga, *karasa_jaga_svg, *sifr, *sifr_dark, *sifr_dark_svg, *sifr_svg, *sukapura, *sukapura_svg.]),
2028 libo_FUZZ_ARG_WITH(helppack-integration,
2029     AS_HELP_STRING([--without-helppack-integration],
2030         [It will not integrate the helppacks to the installer
2031          of the product. Please use this switch to use the online help
2032          or separate help packages.]),
2035 libo_FUZZ_ARG_WITH(fonts,
2036     AS_HELP_STRING([--without-fonts],
2037         [LibreOffice includes some third-party fonts to provide a reliable basis for
2038          help content, templates, samples, etc. When these fonts are already
2039          known to be available on the system then you should use this option.]),
2042 AC_ARG_WITH(epm,
2043     AS_HELP_STRING([--with-epm],
2044         [Decides which epm to use. Default is to use the one from the system if
2045          one is built. When either this is not there or you say =internal epm
2046          will be built.]),
2049 AC_ARG_WITH(package-format,
2050     AS_HELP_STRING([--with-package-format],
2051         [Specify package format(s) for LibreOffice installation sets. The
2052          implicit --without-package-format leads to no installation sets being
2053          generated. Possible values: aix, archive, bsd, deb, dmg,
2054          installed, msi, pkg, and rpm.
2055          Example: --with-package-format='deb rpm']),
2058 AC_ARG_WITH(tls,
2059     AS_HELP_STRING([--with-tls],
2060         [Decides which TLS/SSL and cryptographic implementations to use for
2061          LibreOffice's code. Notice that this doesn't apply for depending
2062          libraries like "neon", for example. Default is to use NSS
2063          although OpenSSL is also possible. Notice that selecting NSS restricts
2064          the usage of OpenSSL in LO's code but selecting OpenSSL doesn't
2065          restrict by now the usage of NSS in LO's code. Possible values:
2066          openssl, nss. Example: --with-tls="nss"]),
2069 AC_ARG_WITH(system-libs,
2070     AS_HELP_STRING([--with-system-libs],
2071         [Use libraries already on system -- enables all --with-system-* flags.]),
2074 AC_ARG_WITH(system-bzip2,
2075     AS_HELP_STRING([--with-system-bzip2],
2076         [Use bzip2 already on system. Used only when --enable-online-update=mar]),,
2077     [with_system_bzip2="$with_system_libs"])
2079 AC_ARG_WITH(system-headers,
2080     AS_HELP_STRING([--with-system-headers],
2081         [Use headers already on system -- enables all --with-system-* flags for
2082          external packages whose headers are the only entities used i.e.
2083          boost/odbc/sane-header(s).]),,
2084     [with_system_headers="$with_system_libs"])
2086 AC_ARG_WITH(system-jars,
2087     AS_HELP_STRING([--without-system-jars],
2088         [When building with --with-system-libs, also the needed jars are expected
2089          on the system. Use this to disable that]),,
2090     [with_system_jars="$with_system_libs"])
2092 AC_ARG_WITH(system-cairo,
2093     AS_HELP_STRING([--with-system-cairo],
2094         [Use cairo libraries already on system.  Happens automatically for
2095          (implicit) --enable-gtk3.]))
2097 AC_ARG_WITH(system-epoxy,
2098     AS_HELP_STRING([--with-system-epoxy],
2099         [Use epoxy libraries already on system.  Happens automatically for
2100          (implicit) --enable-gtk3.]),,
2101        [with_system_epoxy="$with_system_libs"])
2103 AC_ARG_WITH(myspell-dicts,
2104     AS_HELP_STRING([--with-myspell-dicts],
2105         [Adds myspell dictionaries to the LibreOffice installation set]),
2108 AC_ARG_WITH(system-dicts,
2109     AS_HELP_STRING([--without-system-dicts],
2110         [Do not use dictionaries from system paths.]),
2113 AC_ARG_WITH(external-dict-dir,
2114     AS_HELP_STRING([--with-external-dict-dir],
2115         [Specify external dictionary dir.]),
2118 AC_ARG_WITH(external-hyph-dir,
2119     AS_HELP_STRING([--with-external-hyph-dir],
2120         [Specify external hyphenation pattern dir.]),
2123 AC_ARG_WITH(external-thes-dir,
2124     AS_HELP_STRING([--with-external-thes-dir],
2125         [Specify external thesaurus dir.]),
2128 AC_ARG_WITH(system-zlib,
2129     AS_HELP_STRING([--with-system-zlib],
2130         [Use zlib already on system.]),,
2131     [with_system_zlib=auto])
2133 AC_ARG_WITH(system-jpeg,
2134     AS_HELP_STRING([--with-system-jpeg],
2135         [Use jpeg already on system.]),,
2136     [with_system_jpeg="$with_system_libs"])
2138 AC_ARG_WITH(system-clucene,
2139     AS_HELP_STRING([--with-system-clucene],
2140         [Use clucene already on system.]),,
2141     [with_system_clucene="$with_system_libs"])
2143 AC_ARG_WITH(system-expat,
2144     AS_HELP_STRING([--with-system-expat],
2145         [Use expat already on system.]),,
2146     [with_system_expat="$with_system_libs"])
2148 AC_ARG_WITH(system-libxml,
2149     AS_HELP_STRING([--with-system-libxml],
2150         [Use libxml/libxslt already on system.]),,
2151     [with_system_libxml=auto])
2153 AC_ARG_WITH(system-icu,
2154     AS_HELP_STRING([--with-system-icu],
2155         [Use icu already on system.]),,
2156     [with_system_icu="$with_system_libs"])
2158 AC_ARG_WITH(system-ucpp,
2159     AS_HELP_STRING([--with-system-ucpp],
2160         [Use ucpp already on system.]),,
2161     [])
2163 AC_ARG_WITH(system-openldap,
2164     AS_HELP_STRING([--with-system-openldap],
2165         [Use the OpenLDAP LDAP SDK already on system.]),,
2166     [with_system_openldap="$with_system_libs"])
2168 libo_FUZZ_ARG_ENABLE(poppler,
2169     AS_HELP_STRING([--disable-poppler],
2170         [Disable building Poppler.])
2173 AC_ARG_WITH(system-poppler,
2174     AS_HELP_STRING([--with-system-poppler],
2175         [Use system poppler (only needed for PDF import).]),,
2176     [with_system_poppler="$with_system_libs"])
2178 AC_ARG_WITH(system-abseil,
2179     AS_HELP_STRING([--with-system-abseil],
2180         [Use the abseil libraries already on system.]),,
2181     [with_system_abseil="$with_system_libs"])
2183 AC_ARG_WITH(system-openjpeg,
2184     AS_HELP_STRING([--with-system-openjpeg],
2185         [Use the OpenJPEG library already on system.]),,
2186     [with_system_openjpeg="$with_system_libs"])
2188 libo_FUZZ_ARG_ENABLE(gpgmepp,
2189     AS_HELP_STRING([--disable-gpgmepp],
2190         [Disable building gpgmepp. Do not use in normal cases unless you want to fix potential problems it causes.])
2193 AC_ARG_WITH(system-gpgmepp,
2194     AS_HELP_STRING([--with-system-gpgmepp],
2195         [Use gpgmepp already on system]),,
2196     [with_system_gpgmepp="$with_system_libs"])
2198 AC_ARG_WITH(system-mariadb,
2199     AS_HELP_STRING([--with-system-mariadb],
2200         [Use MariaDB/MySQL libraries already on system.]),,
2201     [with_system_mariadb="$with_system_libs"])
2203 AC_ARG_ENABLE(bundle-mariadb,
2204     AS_HELP_STRING([--enable-bundle-mariadb],
2205         [When using MariaDB/MySQL libraries already on system, bundle them with the MariaDB Connector/LibreOffice.])
2208 AC_ARG_WITH(system-postgresql,
2209     AS_HELP_STRING([--with-system-postgresql],
2210         [Use PostgreSQL libraries already on system, for building the PostgreSQL-SDBC
2211          driver. If pg_config is not in PATH, use PGCONFIG to point to it.]),,
2212     [with_system_postgresql="$with_system_libs"])
2214 AC_ARG_WITH(libpq-path,
2215     AS_HELP_STRING([--with-libpq-path=<absolute path to your libpq installation>],
2216         [Use this PostgreSQL C interface (libpq) installation for building
2217          the PostgreSQL-SDBC extension.]),
2220 AC_ARG_WITH(system-firebird,
2221     AS_HELP_STRING([--with-system-firebird],
2222         [Use Firebird libraries already on system, for building the Firebird-SDBC
2223          driver. If fb_config is not in PATH, use FBCONFIG to point to it.]),,
2224     [with_system_firebird="$with_system_libs"])
2226 AC_ARG_WITH(system-libtommath,
2227             AS_HELP_STRING([--with-system-libtommath],
2228                            [Use libtommath already on system]),,
2229             [with_system_libtommath="$with_system_libs"])
2231 AC_ARG_WITH(system-hsqldb,
2232     AS_HELP_STRING([--with-system-hsqldb],
2233         [Use hsqldb already on system.]))
2235 AC_ARG_WITH(hsqldb-jar,
2236     AS_HELP_STRING([--with-hsqldb-jar=JARFILE],
2237         [Specify path to jarfile manually.]),
2238     HSQLDB_JAR=$withval)
2240 libo_FUZZ_ARG_ENABLE(scripting-beanshell,
2241     AS_HELP_STRING([--disable-scripting-beanshell],
2242         [Disable support for scripts in BeanShell.]),
2246 AC_ARG_WITH(system-beanshell,
2247     AS_HELP_STRING([--with-system-beanshell],
2248         [Use beanshell already on system.]),,
2249     [with_system_beanshell="$with_system_jars"])
2251 AC_ARG_WITH(beanshell-jar,
2252     AS_HELP_STRING([--with-beanshell-jar=JARFILE],
2253         [Specify path to jarfile manually.]),
2254     BSH_JAR=$withval)
2256 libo_FUZZ_ARG_ENABLE(scripting-javascript,
2257     AS_HELP_STRING([--disable-scripting-javascript],
2258         [Disable support for scripts in JavaScript.]),
2262 AC_ARG_WITH(system-rhino,
2263     AS_HELP_STRING([--with-system-rhino],
2264         [Use rhino already on system.]),,)
2265 #    [with_system_rhino="$with_system_jars"])
2266 # Above is not used as we have different debug interface
2267 # patched into internal rhino. This code needs to be fixed
2268 # before we can enable it by default.
2270 AC_ARG_WITH(rhino-jar,
2271     AS_HELP_STRING([--with-rhino-jar=JARFILE],
2272         [Specify path to jarfile manually.]),
2273     RHINO_JAR=$withval)
2275 AC_ARG_WITH(system-jfreereport,
2276     AS_HELP_STRING([--with-system-jfreereport],
2277         [Use JFreeReport already on system.]),,
2278     [with_system_jfreereport="$with_system_jars"])
2280 AC_ARG_WITH(sac-jar,
2281     AS_HELP_STRING([--with-sac-jar=JARFILE],
2282         [Specify path to jarfile manually.]),
2283     SAC_JAR=$withval)
2285 AC_ARG_WITH(libxml-jar,
2286     AS_HELP_STRING([--with-libxml-jar=JARFILE],
2287         [Specify path to jarfile manually.]),
2288     LIBXML_JAR=$withval)
2290 AC_ARG_WITH(flute-jar,
2291     AS_HELP_STRING([--with-flute-jar=JARFILE],
2292         [Specify path to jarfile manually.]),
2293     FLUTE_JAR=$withval)
2295 AC_ARG_WITH(jfreereport-jar,
2296     AS_HELP_STRING([--with-jfreereport-jar=JARFILE],
2297         [Specify path to jarfile manually.]),
2298     JFREEREPORT_JAR=$withval)
2300 AC_ARG_WITH(liblayout-jar,
2301     AS_HELP_STRING([--with-liblayout-jar=JARFILE],
2302         [Specify path to jarfile manually.]),
2303     LIBLAYOUT_JAR=$withval)
2305 AC_ARG_WITH(libloader-jar,
2306     AS_HELP_STRING([--with-libloader-jar=JARFILE],
2307         [Specify path to jarfile manually.]),
2308     LIBLOADER_JAR=$withval)
2310 AC_ARG_WITH(libformula-jar,
2311     AS_HELP_STRING([--with-libformula-jar=JARFILE],
2312         [Specify path to jarfile manually.]),
2313     LIBFORMULA_JAR=$withval)
2315 AC_ARG_WITH(librepository-jar,
2316     AS_HELP_STRING([--with-librepository-jar=JARFILE],
2317         [Specify path to jarfile manually.]),
2318     LIBREPOSITORY_JAR=$withval)
2320 AC_ARG_WITH(libfonts-jar,
2321     AS_HELP_STRING([--with-libfonts-jar=JARFILE],
2322         [Specify path to jarfile manually.]),
2323     LIBFONTS_JAR=$withval)
2325 AC_ARG_WITH(libserializer-jar,
2326     AS_HELP_STRING([--with-libserializer-jar=JARFILE],
2327         [Specify path to jarfile manually.]),
2328     LIBSERIALIZER_JAR=$withval)
2330 AC_ARG_WITH(libbase-jar,
2331     AS_HELP_STRING([--with-libbase-jar=JARFILE],
2332         [Specify path to jarfile manually.]),
2333     LIBBASE_JAR=$withval)
2335 AC_ARG_WITH(system-odbc,
2336     AS_HELP_STRING([--with-system-odbc],
2337         [Use the odbc headers already on system.]),,
2338     [with_system_odbc="auto"])
2340 AC_ARG_WITH(system-sane,
2341     AS_HELP_STRING([--with-system-sane],
2342         [Use sane.h already on system.]),,
2343     [with_system_sane="$with_system_headers"])
2345 AC_ARG_WITH(system-bluez,
2346     AS_HELP_STRING([--with-system-bluez],
2347         [Use bluetooth.h already on system.]),,
2348     [with_system_bluez="$with_system_headers"])
2350 AC_ARG_WITH(system-curl,
2351     AS_HELP_STRING([--with-system-curl],
2352         [Use curl already on system.]),,
2353     [with_system_curl=auto])
2355 AC_ARG_WITH(system-boost,
2356     AS_HELP_STRING([--with-system-boost],
2357         [Use boost already on system.]),,
2358     [with_system_boost="$with_system_headers"])
2360 AC_ARG_WITH(system-cuckoo,
2361     AS_HELP_STRING([--with-system-cuckoo],
2362         [Use libcuckoo already on system.]),,
2363     [with_system_cuckoo="$with_system_headers"])
2365 AC_ARG_WITH(system-glm,
2366     AS_HELP_STRING([--with-system-glm],
2367         [Use glm already on system.]),,
2368     [with_system_glm="$with_system_headers"])
2370 AC_ARG_WITH(system-hunspell,
2371     AS_HELP_STRING([--with-system-hunspell],
2372         [Use libhunspell already on system.]),,
2373     [with_system_hunspell="$with_system_libs"])
2375 libo_FUZZ_ARG_ENABLE(zxing,
2376     AS_HELP_STRING([--disable-zxing],
2377        [Disable use of zxing external library.]))
2379 AC_ARG_WITH(system-zxing,
2380     AS_HELP_STRING([--with-system-zxing],
2381         [Use libzxing already on system.]),,
2382     [with_system_zxing="$with_system_libs"])
2384 AC_ARG_WITH(system-box2d,
2385     AS_HELP_STRING([--with-system-box2d],
2386         [Use box2d already on system.]),,
2387     [with_system_box2d="$with_system_libs"])
2389 AC_ARG_WITH(system-mythes,
2390     AS_HELP_STRING([--with-system-mythes],
2391         [Use mythes already on system.]),,
2392     [with_system_mythes="$with_system_libs"])
2394 AC_ARG_WITH(system-altlinuxhyph,
2395     AS_HELP_STRING([--with-system-altlinuxhyph],
2396         [Use ALTLinuxhyph already on system.]),,
2397     [with_system_altlinuxhyph="$with_system_libs"])
2399 AC_ARG_WITH(system-lpsolve,
2400     AS_HELP_STRING([--with-system-lpsolve],
2401         [Use lpsolve already on system.]),,
2402     [with_system_lpsolve="$with_system_libs"])
2404 AC_ARG_WITH(system-coinmp,
2405     AS_HELP_STRING([--with-system-coinmp],
2406         [Use CoinMP already on system.]),,
2407     [with_system_coinmp="$with_system_libs"])
2409 AC_ARG_WITH(system-liblangtag,
2410     AS_HELP_STRING([--with-system-liblangtag],
2411         [Use liblangtag library already on system.]),,
2412     [with_system_liblangtag="$with_system_libs"])
2414 AC_ARG_WITH(webdav,
2415     AS_HELP_STRING([--with-webdav],
2416         [Specify which library to use for webdav implementation.
2417          Possible values: "neon", "serf", "curl", "no". The default value is "neon".
2418          Example: --with-webdav="serf"]))
2420 AC_ARG_WITH(linker-hash-style,
2421     AS_HELP_STRING([--with-linker-hash-style],
2422         [Use linker with --hash-style=<style> when linking shared objects.
2423          Possible values: "sysv", "gnu", "both". The default value is "gnu"
2424          if supported on the build system, and "sysv" otherwise.]))
2426 AC_ARG_WITH(jdk-home,
2427     AS_HELP_STRING([--with-jdk-home=<absolute path to JDK home>],
2428         [If you have installed JDK 9 or later on your system please supply the
2429          path here. Note that this is not the location of the java command but the
2430          location of the entire distribution. In case of cross-compiling, this
2431          is the JDK of the host os. Use --with-build-platform-configure-options
2432          to point to a different build platform JDK.]),
2435 AC_ARG_WITH(help,
2436     AS_HELP_STRING([--with-help],
2437         [Enable the build of help. There is a special parameter "common" that
2438          can be used to bundle only the common part, .e.g help-specific icons.
2439          This is useful when you build the helpcontent separately.])
2440     [
2441                           Usage:     --with-help    build the old local help
2442                                  --without-help     no local help (default)
2443                                  --with-help=html   build the new HTML local help
2444                                  --with-help=online build the new HTML online help
2445     ],
2448 AC_ARG_WITH(omindex,
2449    AS_HELP_STRING([--with-omindex],
2450         [Enable the support of xapian-omega index for online help.])
2451    [
2452                          Usage: --with-omindex=server prepare the pages for omindex
2453                                 but let xapian-omega be built in server.
2454                                 --with-omindex=noxap do not prepare online pages
2455                                 for xapian-omega
2456   ],
2459 libo_FUZZ_ARG_WITH(java,
2460     AS_HELP_STRING([--with-java=<java command>],
2461         [Specify the name of the Java interpreter command. Typically "java"
2462          which is the default.
2464          To build without support for Java components, applets, accessibility
2465          or the XML filters written in Java, use --without-java or --with-java=no.]),
2466     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ],
2467     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ]
2470 AC_ARG_WITH(jvm-path,
2471     AS_HELP_STRING([--with-jvm-path=<absolute path to parent of jvm home>],
2472         [Use a specific JVM search path at runtime.
2473          e.g. use --with-jvm-path=/usr/lib/ to find JRE/JDK in /usr/lib/jvm/]),
2476 AC_ARG_WITH(ant-home,
2477     AS_HELP_STRING([--with-ant-home=<absolute path to Ant home>],
2478         [If you have installed Apache Ant on your system, please supply the path here.
2479          Note that this is not the location of the Ant binary but the location
2480          of the entire distribution.]),
2483 AC_ARG_WITH(symbol-config,
2484     AS_HELP_STRING([--with-symbol-config],
2485         [Configuration for the crashreport symbol upload]),
2486         [],
2487         [with_symbol_config=no])
2489 AC_ARG_WITH(export-validation,
2490     AS_HELP_STRING([--without-export-validation],
2491         [Disable validating OOXML and ODF files as exported from in-tree tests.]),
2492 ,with_export_validation=auto)
2494 AC_ARG_WITH(bffvalidator,
2495     AS_HELP_STRING([--with-bffvalidator=<absolute path to BFFValidator>],
2496         [Enables export validation for Microsoft Binary formats (doc, xls, ppt).
2497          Requires installed Microsoft Office Binary File Format Validator.
2498          Note: export-validation (--with-export-validation) is required to be turned on.
2499          See https://www.microsoft.com/en-us/download/details.aspx?id=26794]),
2500 ,with_bffvalidator=no)
2502 libo_FUZZ_ARG_WITH(junit,
2503     AS_HELP_STRING([--with-junit=<absolute path to JUnit 4 jar>],
2504         [Specifies the JUnit 4 jar file to use for JUnit-based tests.
2505          --without-junit disables those tests. Not relevant in the --without-java case.]),
2506 ,with_junit=yes)
2508 AC_ARG_WITH(hamcrest,
2509     AS_HELP_STRING([--with-hamcrest=<absolute path to hamcrest jar>],
2510         [Specifies the hamcrest jar file to use for JUnit-based tests.
2511          --without-junit disables those tests. Not relevant in the --without-java case.]),
2512 ,with_hamcrest=yes)
2514 AC_ARG_WITH(perl-home,
2515     AS_HELP_STRING([--with-perl-home=<abs. path to Perl 5 home>],
2516         [If you have installed Perl 5 Distribution, on your system, please
2517          supply the path here. Note that this is not the location of the Perl
2518          binary but the location of the entire distribution.]),
2521 libo_FUZZ_ARG_WITH(doxygen,
2522     AS_HELP_STRING(
2523         [--with-doxygen=<absolute path to doxygen executable>],
2524         [Specifies the doxygen executable to use when generating ODK C/C++
2525          documentation. --without-doxygen disables generation of ODK C/C++
2526          documentation. Not relevant in the --disable-odk case.]),
2527 ,with_doxygen=yes)
2529 AC_ARG_WITH(visual-studio,
2530     AS_HELP_STRING([--with-visual-studio=<2019/2022>],
2531         [Specify which Visual Studio version to use in case several are
2532          installed. Currently 2019 (default) and 2022 are supported.]),
2535 AC_ARG_WITH(windows-sdk,
2536     AS_HELP_STRING([--with-windows-sdk=<8.0(A)/8.1(A)/10.0>],
2537         [Specify which Windows SDK, or "Windows Kit", version to use
2538          in case the one that came with the selected Visual Studio
2539          is not what you want for some reason. Note that not all compiler/SDK
2540          combinations are supported. The intent is that this option should not
2541          be needed.]),
2544 AC_ARG_WITH(lang,
2545     AS_HELP_STRING([--with-lang="es sw tu cs sk"],
2546         [Use this option to build LibreOffice with additional UI language support.
2547          English (US) is always included by default.
2548          Separate multiple languages with space.
2549          For all languages, use --with-lang=ALL.]),
2552 AC_ARG_WITH(locales,
2553     AS_HELP_STRING([--with-locales="en es pt fr zh kr ja"],
2554         [Use this option to limit the locale information built in.
2555          Separate multiple locales with space.
2556          Very experimental and might well break stuff.
2557          Just a desperate measure to shrink code and data size.
2558          By default all the locales available is included.
2559          This option is completely unrelated to --with-lang.])
2560     [
2561                           Affects also our character encoding conversion
2562                           tables for encodings mainly targeted for a
2563                           particular locale, like EUC-CN and EUC-TW for
2564                           zh, ISO-2022-JP for ja.
2566                           Affects also our add-on break iterator data for
2567                           some languages.
2569                           For the default, all locales, don't use this switch at all.
2570                           Specifying just the language part of a locale means all matching
2571                           locales will be included.
2572     ],
2575 # Kerberos and GSSAPI used only by PostgreSQL as of LibO 3.5
2576 libo_FUZZ_ARG_WITH(krb5,
2577     AS_HELP_STRING([--with-krb5],
2578         [Enable MIT Kerberos 5 support in modules that support it.
2579          By default automatically enabled on platforms
2580          where a good system Kerberos 5 is available.]),
2583 libo_FUZZ_ARG_WITH(gssapi,
2584     AS_HELP_STRING([--with-gssapi],
2585         [Enable GSSAPI support in modules that support it.
2586          By default automatically enabled on platforms
2587          where a good system GSSAPI is available.]),
2590 AC_ARG_WITH(iwyu,
2591     AS_HELP_STRING([--with-iwyu],
2592         [Use given IWYU binary path to check unneeded includes instead of building.
2593          Use only if you are hacking on it.]),
2596 libo_FUZZ_ARG_WITH(lxml,
2597     AS_HELP_STRING([--without-lxml],
2598         [gla11y will use python lxml when available, potentially building a local copy if necessary.
2599          --without-lxml tells it to not use python lxml at all, which means that gla11y will only
2600          report widget classes and ids.]),
2603 libo_FUZZ_ARG_WITH(latest-c++,
2604     AS_HELP_STRING([--with-latest-c++],
2605         [Try to enable the latest features of the C++ compiler, even if they are not yet part of a
2606          published standard.]),,
2607         [with_latest_c__=no])
2609 dnl ===================================================================
2610 dnl Branding
2611 dnl ===================================================================
2613 AC_ARG_WITH(branding,
2614     AS_HELP_STRING([--with-branding=/path/to/images],
2615         [Use given path to retrieve branding images set.])
2616     [
2617                           Search for intro.png about.svg and logo.svg.
2618                           If any is missing, default ones will be used instead.
2620                           Search also progress.conf for progress
2621                           settings on intro screen :
2623                           PROGRESSBARCOLOR="255,255,255" Set color of
2624                           progress bar. Comma separated RGB decimal values.
2625                           PROGRESSSIZE="407,6" Set size of progress bar.
2626                           Comma separated decimal values (width, height).
2627                           PROGRESSPOSITION="61,317" Set position of progress
2628                           bar from left,top. Comma separated decimal values.
2629                           PROGRESSFRAMECOLOR="20,136,3" Set color of progress
2630                           bar frame. Comma separated RGB decimal values.
2631                           PROGRESSTEXTCOLOR="0,0,0" Set color of progress
2632                           bar text. Comma separated RGB decimal values.
2633                           PROGRESSTEXTBASELINE="287" Set vertical position of
2634                           progress bar text from top. Decimal value.
2636                           Default values will be used if not found.
2637     ],
2641 AC_ARG_WITH(extra-buildid,
2642     AS_HELP_STRING([--with-extra-buildid="Tinderbox: Win-x86@6, Branch:master, Date:2012-11-26_00.29.34"],
2643         [Show addition build identification in about dialog.]),
2647 AC_ARG_WITH(vendor,
2648     AS_HELP_STRING([--with-vendor="John the Builder"],
2649         [Set vendor of the build.]),
2652 AC_ARG_WITH(privacy-policy-url,
2653     AS_HELP_STRING([--with-privacy-policy-url="https://yourdomain/privacy-policy"],
2654         [The URL to your privacy policy (needed when
2655          enabling online-update or crashreporting via breakpad)]),
2656         [if test "x$with_privacy_policy_url" = "xyes"; then
2657             AC_MSG_FAILURE([you need to specify an argument when using --with-privacy-policy-url])
2658          elif test "x$with_privacy_policy_url" = "xno"; then
2659             with_privacy_policy_url="undefined"
2660          fi]
2661 ,[with_privacy_policy_url="undefined"])
2663 AC_ARG_WITH(android-package-name,
2664     AS_HELP_STRING([--with-android-package-name="org.libreoffice"],
2665         [Set Android package name of the build.]),
2668 AC_ARG_WITH(compat-oowrappers,
2669     AS_HELP_STRING([--with-compat-oowrappers],
2670         [Install oo* wrappers in parallel with
2671          lo* ones to keep backward compatibility.
2672          Has effect only with make distro-pack-install]),
2675 AC_ARG_WITH(os-version,
2676     AS_HELP_STRING([--with-os-version=<OSVERSION>],
2677         [For FreeBSD users, use this option to override the detected OSVERSION.]),
2680 AC_ARG_WITH(idlc-cpp,
2681     AS_HELP_STRING([--with-idlc-cpp=<cpp/ucpp>],
2682         [Specify the C Preprocessor to use for idlc. Default is ucpp.]),
2685 AC_ARG_WITH(parallelism,
2686     AS_HELP_STRING([--with-parallelism],
2687         [Number of jobs to run simultaneously during build. Parallel builds can
2688         save a lot of time on multi-cpu machines. Defaults to the number of
2689         CPUs on the machine, unless you configure --enable-icecream - then to
2690         40.]),
2693 AC_ARG_WITH(all-tarballs,
2694     AS_HELP_STRING([--with-all-tarballs],
2695         [Download all external tarballs unconditionally]))
2697 AC_ARG_WITH(gdrive-client-id,
2698     AS_HELP_STRING([--with-gdrive-client-id],
2699         [Provides the client id of the application for OAuth2 authentication
2700         on Google Drive. If either this or --with-gdrive-client-secret is
2701         empty, the feature will be disabled]),
2704 AC_ARG_WITH(gdrive-client-secret,
2705     AS_HELP_STRING([--with-gdrive-client-secret],
2706         [Provides the client secret of the application for OAuth2
2707         authentication on Google Drive. If either this or
2708         --with-gdrive-client-id is empty, the feature will be disabled]),
2711 AC_ARG_WITH(alfresco-cloud-client-id,
2712     AS_HELP_STRING([--with-alfresco-cloud-client-id],
2713         [Provides the client id of the application for OAuth2 authentication
2714         on Alfresco Cloud. If either this or --with-alfresco-cloud-client-secret is
2715         empty, the feature will be disabled]),
2718 AC_ARG_WITH(alfresco-cloud-client-secret,
2719     AS_HELP_STRING([--with-alfresco-cloud-client-secret],
2720         [Provides the client secret of the application for OAuth2
2721         authentication on Alfresco Cloud. If either this or
2722         --with-alfresco-cloud-client-id is empty, the feature will be disabled]),
2725 AC_ARG_WITH(onedrive-client-id,
2726     AS_HELP_STRING([--with-onedrive-client-id],
2727         [Provides the client id of the application for OAuth2 authentication
2728         on OneDrive. If either this or --with-onedrive-client-secret is
2729         empty, the feature will be disabled]),
2732 AC_ARG_WITH(onedrive-client-secret,
2733     AS_HELP_STRING([--with-onedrive-client-secret],
2734         [Provides the client secret of the application for OAuth2
2735         authentication on OneDrive. If either this or
2736         --with-onedrive-client-id is empty, the feature will be disabled]),
2738 dnl ===================================================================
2739 dnl Do we want to use pre-build binary tarball for recompile
2740 dnl ===================================================================
2742 if test "$enable_library_bin_tar" = "yes" ; then
2743     USE_LIBRARY_BIN_TAR=TRUE
2744 else
2745     USE_LIBRARY_BIN_TAR=
2747 AC_SUBST(USE_LIBRARY_BIN_TAR)
2749 dnl ===================================================================
2750 dnl Test whether build target is Release Build
2751 dnl ===================================================================
2752 AC_MSG_CHECKING([whether build target is Release Build])
2753 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
2754     AC_MSG_RESULT([no])
2755     ENABLE_RELEASE_BUILD=
2756     GET_TASK_ALLOW_ENTITLEMENT='
2757         <!-- We want to be able to debug a hardened process when not building for release -->
2758         <key>com.apple.security.get-task-allow</key>
2759         <true/>'
2760 else
2761     AC_MSG_RESULT([yes])
2762     ENABLE_RELEASE_BUILD=TRUE
2763     GET_TASK_ALLOW_ENTITLEMENT=''
2765 AC_SUBST(ENABLE_RELEASE_BUILD)
2766 AC_SUBST(GET_TASK_ALLOW_ENTITLEMENT)
2768 AC_MSG_CHECKING([whether to build a Community flavor])
2769 if test -z "$enable_community_flavor" -o "$enable_community_flavor" = "yes"; then
2770     AC_DEFINE(HAVE_FEATURE_COMMUNITY_FLAVOR)
2771     AC_MSG_RESULT([yes])
2772 else
2773     AC_MSG_RESULT([no])
2776 dnl ===================================================================
2777 dnl Test whether to sign Windows Build
2778 dnl ===================================================================
2779 AC_MSG_CHECKING([whether to sign windows build])
2780 if test "$enable_windows_build_signing" = "yes" -a "$_os" = "WINNT"; then
2781     AC_MSG_RESULT([yes])
2782     WINDOWS_BUILD_SIGNING="TRUE"
2783 else
2784     AC_MSG_RESULT([no])
2785     WINDOWS_BUILD_SIGNING="FALSE"
2787 AC_SUBST(WINDOWS_BUILD_SIGNING)
2789 dnl ===================================================================
2790 dnl MacOSX build and runtime environment options
2791 dnl ===================================================================
2793 AC_ARG_WITH(macosx-version-min-required,
2794     AS_HELP_STRING([--with-macosx-version-min-required=<version>],
2795         [set the minimum OS version needed to run the built LibreOffice])
2796     [
2797                           e. g.: --with-macosx-version-min-required=10.12
2798     ],
2801 AC_ARG_WITH(macosx-version-max-allowed,
2802     AS_HELP_STRING([--with-macosx-version-max-allowed=<version>],
2803         [set the maximum allowed OS version the LibreOffice compilation can use APIs from])
2804     [
2805                           e. g.: --with-macosx-version-max-allowed=11.0
2806     ],
2810 dnl ===================================================================
2811 dnl options for stuff used during cross-compilation build
2812 dnl Not quite superseded by --with-build-platform-configure-options.
2813 dnl TODO: check, if the "force" option is still needed anywhere.
2814 dnl ===================================================================
2816 AC_ARG_WITH(system-icu-for-build,
2817     AS_HELP_STRING([--with-system-icu-for-build=yes/no/force],
2818         [Use icu already on system for build tools (cross-compilation only).]))
2821 dnl ===================================================================
2822 dnl Check for incompatible options set by fuzzing, and reset those
2823 dnl automatically to working combinations
2824 dnl ===================================================================
2826 if test "$libo_fuzzed_enable_dbus" = yes -a "$libo_fuzzed_enable_avahi" -a \
2827         "$enable_dbus" != "$enable_avahi"; then
2828     AC_MSG_NOTICE([Resetting --enable-avahi=$enable_dbus])
2829     enable_avahi=$enable_dbus
2832 add_lopath_after ()
2834     if ! echo "$LO_PATH" | $EGREP -q "(^|${P_SEP})$1($|${P_SEP})"; then
2835         LO_PATH="${LO_PATH:+$LO_PATH$P_SEP}$1"
2836     fi
2839 add_lopath_before ()
2841     local IFS=${P_SEP}
2842     local path_cleanup
2843     local dir
2844     for dir in $LO_PATH ; do
2845         if test "$dir" != "$1" ; then
2846             path_cleanup=${path_cleanup:+$path_cleanup$P_SEP}$dir
2847         fi
2848     done
2849     LO_PATH="$1${path_cleanup:+$P_SEP$path_cleanup}"
2852 dnl ===================================================================
2853 dnl check for required programs (grep, awk, sed, bash)
2854 dnl ===================================================================
2856 pathmunge ()
2858     local new_path
2859     if test -n "$1"; then
2860         if test "$build_os" = "cygwin"; then
2861             if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
2862                 PathFormat "$1"
2863                 new_path=`cygpath -sm "$formatted_path"`
2864             else
2865                 PathFormat "$1"
2866                 new_path=`cygpath -u "$formatted_path"`
2867             fi
2868         else
2869             new_path="$1"
2870         fi
2871         if test "$2" = "after"; then
2872             add_lopath_after "$new_path"
2873         else
2874             add_lopath_before "$new_path"
2875         fi
2876     fi
2879 AC_PROG_AWK
2880 AC_PATH_PROG( AWK, $AWK)
2881 if test -z "$AWK"; then
2882     AC_MSG_ERROR([install awk to run this script])
2885 AC_PATH_PROG(BASH, bash)
2886 if test -z "$BASH"; then
2887     AC_MSG_ERROR([bash not found in \$PATH])
2889 AC_SUBST(BASH)
2891 AC_MSG_CHECKING([for GNU or BSD tar])
2892 for a in $GNUTAR gtar gnutar bsdtar tar /usr/sfw/bin/gtar; do
2893     $a --version 2> /dev/null | egrep "GNU|bsdtar"  2>&1 > /dev/null
2894     if test $? -eq 0;  then
2895         GNUTAR=$a
2896         break
2897     fi
2898 done
2899 AC_MSG_RESULT($GNUTAR)
2900 if test -z "$GNUTAR"; then
2901     AC_MSG_ERROR([not found. install GNU or BSD tar.])
2903 AC_SUBST(GNUTAR)
2905 AC_MSG_CHECKING([for tar's option to strip components])
2906 $GNUTAR --help 2> /dev/null | egrep "bsdtar|strip-components" 2>&1 >/dev/null
2907 if test $? -eq 0; then
2908     STRIP_COMPONENTS="--strip-components"
2909 else
2910     $GNUTAR --help 2> /dev/null | egrep "strip-path" 2>&1 >/dev/null
2911     if test $? -eq 0; then
2912         STRIP_COMPONENTS="--strip-path"
2913     else
2914         STRIP_COMPONENTS="unsupported"
2915     fi
2917 AC_MSG_RESULT($STRIP_COMPONENTS)
2918 if test x$STRIP_COMPONENTS = xunsupported; then
2919     AC_MSG_ERROR([you need a tar that is able to strip components.])
2921 AC_SUBST(STRIP_COMPONENTS)
2923 dnl It is useful to have a BUILD_TYPE keyword to distinguish "normal"
2924 dnl desktop OSes from "mobile" ones.
2926 dnl We assume that a non-DESKTOP build type is also a non-NATIVE one.
2927 dnl In other words, that when building for an OS that is not a
2928 dnl "desktop" one but a "mobile" one, we are always cross-compiling.
2930 dnl Note the direction of the implication; there is no assumption that
2931 dnl cross-compiling would imply a non-desktop OS.
2933 if test $_os != iOS -a $_os != Android -a $_os != Emscripten -a "$enable_fuzzers" != "yes"; then
2934     BUILD_TYPE="$BUILD_TYPE DESKTOP"
2935     AC_DEFINE(HAVE_FEATURE_DESKTOP)
2936     AC_DEFINE(HAVE_FEATURE_MULTIUSER_ENVIRONMENT)
2939 # Whether to build "avmedia" functionality or not.
2941 if test -z "$enable_avmedia"; then
2942     enable_avmedia=yes
2945 BUILD_TYPE="$BUILD_TYPE AVMEDIA"
2946 if test "$enable_avmedia" = yes; then
2947     AC_DEFINE(HAVE_FEATURE_AVMEDIA)
2948 else
2949     USE_AVMEDIA_DUMMY='TRUE'
2951 AC_SUBST(USE_AVMEDIA_DUMMY)
2953 # Decide whether to build database connectivity stuff (including Base) or not.
2954 if test "$enable_database_connectivity" != no; then
2955     BUILD_TYPE="$BUILD_TYPE DBCONNECTIVITY"
2956     AC_DEFINE(HAVE_FEATURE_DBCONNECTIVITY)
2957 else
2958     if test "$_os" = iOS; then
2959         AC_MSG_ERROR([Presumly can't disable DB connectivity on iOS.])
2960     fi
2961     disable_database_connectivity_dependencies
2964 if test -z "$enable_extensions"; then
2965     # For iOS and Android Viewer, disable extensions unless specifically overridden with --enable-extensions.
2966     if test $_os != iOS && test $_os != Android -o "$ENABLE_ANDROID_LOK" = TRUE ; then
2967         enable_extensions=yes
2968     fi
2971 if test "$enable_extensions" = yes; then
2972     BUILD_TYPE="$BUILD_TYPE EXTENSIONS"
2973     AC_DEFINE(HAVE_FEATURE_EXTENSIONS)
2974 else
2975     enable_extension_integration=no
2976     enable_extension_update=no
2979 if test -z "$enable_scripting"; then
2980     # Disable scripting for iOS unless specifically overridden
2981     # with --enable-scripting.
2982     if test $_os != iOS -o $_os = Emscripten; then
2983         enable_scripting=yes
2984     fi
2987 DISABLE_SCRIPTING=''
2988 if test "$enable_scripting" = yes; then
2989     BUILD_TYPE="$BUILD_TYPE SCRIPTING"
2990     AC_DEFINE(HAVE_FEATURE_SCRIPTING)
2991 else
2992     DISABLE_SCRIPTING='TRUE'
2993     SCPDEFS="$SCPDEFS -DDISABLE_SCRIPTING"
2996 if test $_os = iOS -o $_os = Android -o $_os = Emscripten; then
2997     # Disable dynamic_loading always for iOS and Android
2998     enable_dynamic_loading=no
2999 elif test -z "$enable_dynamic_loading"; then
3000     # Otherwise enable it unless specifically disabled
3001     enable_dynamic_loading=yes
3004 DISABLE_DYNLOADING=''
3005 if test "$enable_dynamic_loading" = yes; then
3006     BUILD_TYPE="$BUILD_TYPE DYNLOADING"
3007 else
3008     DISABLE_DYNLOADING='TRUE'
3010 AC_SUBST(DISABLE_DYNLOADING)
3012 # remember SYSBASE value
3013 AC_SUBST(SYSBASE)
3015 dnl ===================================================================
3016 dnl  Sort out various gallery compilation options
3017 dnl ===================================================================
3018 WITH_GALLERY_BUILD=TRUE
3019 AC_MSG_CHECKING([how to build and package galleries])
3020 if test -n "${with_galleries}"; then
3021     if test "$with_galleries" = "build"; then
3022         if test "$enable_database_connectivity" = no; then
3023             AC_MSG_ERROR([DB connectivity is needed for gengal / svx])
3024         fi
3025         AC_MSG_RESULT([build from source images internally])
3026     elif test "$with_galleries" = "no"; then
3027         WITH_GALLERY_BUILD=
3028         AC_MSG_RESULT([disable non-internal gallery build])
3029     else
3030         AC_MSG_ERROR([unknown value --with-galleries=$with_galleries])
3031     fi
3032 else
3033     if test $_os != iOS -a $_os != Android; then
3034         AC_MSG_RESULT([internal src images for desktop])
3035     else
3036         WITH_GALLERY_BUILD=
3037         AC_MSG_RESULT([disable src image build])
3038     fi
3040 AC_SUBST(WITH_GALLERY_BUILD)
3042 dnl ===================================================================
3043 dnl  Checks if ccache is available
3044 dnl ===================================================================
3045 CCACHE_DEPEND_MODE=
3046 if test "$enable_ccache" = "no"; then
3047     CCACHE=""
3048 elif test -n "$enable_ccache" -o \( "$enable_ccache" = "" -a "$enable_icecream" != "yes" \); then
3049     case "%$CC%$CXX%" in
3050     # If $CC and/or $CXX already contain "ccache" (possibly suffixed with some version number etc),
3051     # assume that's good then
3052     *%ccache[[-_' ']]*|*/ccache[[-_' ']]*)
3053         AC_MSG_NOTICE([ccache seems to be included in a pre-defined CC and/or CXX])
3054         CCACHE_DEPEND_MODE=1
3055         ;;
3056     *)
3057         # try to use our own ccache if it is available and CCACHE was not already defined
3058         if test -z "$CCACHE"; then
3059             if test "$_os" = "WINNT"; then
3060                 ccache_ext=.exe # e.g. openssl build needs ccache.exe, not just ccache
3061             fi
3062             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/ccache$ccache_ext" ; then
3063                 CCACHE="$LODE_HOME/opt/bin/ccache$ccache_ext"
3064             elif test -x "/opt/lo/bin/ccache$ccache_ext"; then
3065                 CCACHE="/opt/lo/bin/ccache$ccache_ext"
3066             fi
3067         fi
3068         AC_PATH_PROG([CCACHE],[ccache],[not found])
3069         if test "$CCACHE" != "not found" -a "$_os" = "WINNT"; then
3070             CCACHE=`win_short_path_for_make "$CCACHE"`
3071         fi
3072         if test "$CCACHE" != "not found" -a "$COM" = MSC; then
3073             # check that it has MSVC support (it should recognize it in CCACHE_COMPILERTYPE)
3074             rm -f conftest.txt
3075             AC_MSG_CHECKING([whether $CCACHE has MSVC support])
3076             CCACHE_COMPILERTYPE=cl CCACHE_LOGFILE=conftest.txt $CCACHE echo >/dev/null 2>/dev/null
3077             if grep -q 'Config: (environment) compiler_type = cl' conftest.txt; then
3078                 AC_MSG_RESULT(yes)
3079             else
3080                 AC_MSG_RESULT(no)
3081                 CCACHE="not found"
3082             fi
3083             rm -f conftest.txt
3084         fi
3085         if test "$CCACHE" = "not found" -a "$_os" = "WINNT"; then
3086             # on windows/VC perhaps sccache is around?
3087             case "%$CC%$CXX%" in
3088             # If $CC and/or $CXX already contain "sccache" (possibly suffixed with some version number etc),
3089             # assume that's good then
3090             *%sccache[[-_' ']]*|*/sccache[[-_' ']]*)
3091                 AC_MSG_NOTICE([sccache seems to be included in a pre-defined CC and/or CXX])
3092                 CCACHE_DEPEND_MODE=1
3093                 SCCACHE=1
3094                 ;;
3095             *)
3096                 # for sharing code below, reuse CCACHE env var
3097                 AC_PATH_PROG([CCACHE],[sccache],[not found])
3098                 if test "$CCACHE" != "not found"; then
3099                     CCACHE=`win_short_path_for_make "$CCACHE"`
3100                     SCCACHE=1
3101                     CCACHE_DEPEND_MODE=1
3102                 fi
3103                 ;;
3104             esac
3105         fi
3106         if test "$CCACHE" = "not found"; then
3107             CCACHE=""
3108         fi
3109         if test -n "$CCACHE" -a -z "$SCCACHE"; then
3110             CCACHE_DEPEND_MODE=1
3111             # Need to check for ccache version: otherwise prevents
3112             # caching of the results (like "-x objective-c++" for Mac)
3113             if test $_os = Darwin -o $_os = iOS; then
3114                 # Check ccache version
3115                 AC_MSG_CHECKING([whether version of ccache is suitable])
3116                 CCACHE_VERSION=`"$CCACHE" -V | "$AWK" '/^ccache version/{print $3}'`
3117                 CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
3118                 if test "$CCACHE_VERSION" = "2.4_OOo" -o "$CCACHE_NUMVER" -ge "030100"; then
3119                     AC_MSG_RESULT([yes, $CCACHE_VERSION])
3120                 else
3121                     AC_MSG_RESULT([no, $CCACHE_VERSION])
3122                     CCACHE=""
3123                     CCACHE_DEPEND_MODE=
3124                 fi
3125             fi
3126         fi
3127         ;;
3128     esac
3129 else
3130     CCACHE=""
3132 if test "$enable_ccache" = "nodepend"; then
3133     CCACHE_DEPEND_MODE=""
3135 AC_SUBST(CCACHE_DEPEND_MODE)
3137 # sccache defaults are good enough
3138 if test "$CCACHE" != "" -a -z "$SCCACHE"; then
3139     # e.g. (/home/rene/.config/ccache/ccache.conf) max_size = 20.0G
3140     # -p works with both 4.2 and 4.4
3141     ccache_size_msg=$([ccache -p | $AWK /max_size/'{ print $4 }' | sed -e 's/\.[0-9]*//'])
3142     ccache_size=$(echo "$ccache_size_msg" | grep "G" | sed -e 's/G.*$//')
3143     if test "$ccache_size" = ""; then
3144         ccache_size=$(echo "$ccache_size_msg" | grep "M" | sed -e 's/\ M.*$//')
3145         if test "$ccache_size" = ""; then
3146             ccache_size=0
3147         fi
3148         # we could not determine the size or it was less than 1GB -> disable auto-ccache
3149         if test $ccache_size -lt 1024; then
3150             CCACHE=""
3151             AC_MSG_WARN([ccache's cache size is less than 1GB using it is counter-productive: Disabling auto-ccache detection])
3152             add_warning "ccache's cache size is less than 1GB using it is counter-productive: auto-ccache detection disabled"
3153         else
3154             # warn that ccache may be too small for debug build
3155             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3156             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3157         fi
3158     else
3159         if test $ccache_size -lt 5; then
3160             #warn that ccache may be too small for debug build
3161             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3162             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3163         fi
3164     fi
3167 ENABLE_Z7_DEBUG=
3168 if test "$enable_z7_debug" != no; then
3169     if test "$enable_z7_debug" = yes -o -n "$CCACHE"; then
3170         ENABLE_Z7_DEBUG=TRUE
3171     fi
3172 else
3173     AC_MSG_WARN([ccache will not work with --disable-z7-debug])
3174     add_warning "ccache will not work with --disable-z7-debug"
3176 AC_SUBST(ENABLE_Z7_DEBUG)
3178 dnl ===================================================================
3179 dnl  Checks for C compiler,
3180 dnl  The check for the C++ compiler is later on.
3181 dnl ===================================================================
3182 if test "$_os" != "WINNT"; then
3183     GCC_HOME_SET="true"
3184     AC_MSG_CHECKING([gcc home])
3185     if test -z "$with_gcc_home"; then
3186         if test "$enable_icecream" = "yes"; then
3187             if test -d "/usr/lib/icecc/bin"; then
3188                 GCC_HOME="/usr/lib/icecc/"
3189             elif test -d "/usr/libexec/icecc/bin"; then
3190                 GCC_HOME="/usr/libexec/icecc/"
3191             elif test -d "/opt/icecream/bin"; then
3192                 GCC_HOME="/opt/icecream/"
3193             else
3194                 AC_MSG_ERROR([Could not figure out the location of icecream GCC wrappers, manually use --with-gcc-home])
3196             fi
3197         else
3198             GCC_HOME=`which gcc | $SED -e s,/bin/gcc,,`
3199             GCC_HOME_SET="false"
3200         fi
3201     else
3202         GCC_HOME="$with_gcc_home"
3203     fi
3204     AC_MSG_RESULT($GCC_HOME)
3205     AC_SUBST(GCC_HOME)
3207     if test "$GCC_HOME_SET" = "true"; then
3208         if test -z "$CC"; then
3209             CC="$GCC_HOME/bin/gcc"
3210             CC_BASE="gcc"
3211         fi
3212         if test -z "$CXX"; then
3213             CXX="$GCC_HOME/bin/g++"
3214             CXX_BASE="g++"
3215         fi
3216     fi
3219 COMPATH=`dirname "$CC"`
3220 if test "$COMPATH" = "."; then
3221     AC_PATH_PROGS(COMPATH, $CC)
3222     dnl double square bracket to get single because of M4 quote...
3223     COMPATH=`echo $COMPATH | $SED "s@/[[^/:]]*\\\$@@"`
3225 COMPATH=`echo $COMPATH | $SED "s@/[[Bb]][[Ii]][[Nn]]\\\$@@"`
3227 dnl ===================================================================
3228 dnl Java support
3229 dnl ===================================================================
3230 AC_MSG_CHECKING([whether to build with Java support])
3231 if test "$with_java" != "no"; then
3232     if test "$DISABLE_SCRIPTING" = TRUE; then
3233         AC_MSG_RESULT([no, overridden by --disable-scripting])
3234         ENABLE_JAVA=""
3235         with_java=no
3236     else
3237         AC_MSG_RESULT([yes])
3238         ENABLE_JAVA="TRUE"
3239         AC_DEFINE(HAVE_FEATURE_JAVA)
3240     fi
3241 else
3242     AC_MSG_RESULT([no])
3243     ENABLE_JAVA=""
3246 AC_SUBST(ENABLE_JAVA)
3248 dnl ENABLE_JAVA="TRUE" if we want there to be *run-time* (and build-time) support for Java
3250 dnl ENABLE_JAVA="" indicate no Java support at all
3252 dnl ===================================================================
3253 dnl Check macOS SDK and compiler
3254 dnl ===================================================================
3256 if test $_os = Darwin; then
3258     # The SDK in the currently selected Xcode should be found.
3260     AC_MSG_CHECKING([what macOS SDK to use])
3261     for macosx_sdk in 12.0 11.3 11.1 11.0 10.15 10.14 10.13; do
3262         MACOSX_SDK_PATH=`xcrun --sdk macosx${macosx_sdk} --show-sdk-path 2> /dev/null`
3263         if test -d "$MACOSX_SDK_PATH"; then
3264             break
3265         else
3266             MACOSX_SDK_PATH="`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${macosx_sdk}.sdk"
3267             if test -d "$MACOSX_SDK_PATH"; then
3268                 break
3269             fi
3270         fi
3271     done
3272     if test ! -d "$MACOSX_SDK_PATH"; then
3273         AC_MSG_ERROR([Could not find an appropriate macOS SDK])
3274     fi
3276     AC_MSG_RESULT([macOS SDK $macosx_sdk at $MACOSX_SDK_PATH])
3278     case $macosx_sdk in
3279     10.13)
3280         MACOSX_SDK_VERSION=101300
3281         ;;
3282     10.14)
3283         MACOSX_SDK_VERSION=101400
3284         ;;
3285     10.15)
3286         MACOSX_SDK_VERSION=101500
3287         ;;
3288     11.0)
3289         MACOSX_SDK_VERSION=110000
3290         ;;
3291     11.1)
3292         MACOSX_SDK_VERSION=110100
3293         ;;
3294     11.3)
3295         MACOSX_SDK_VERSION=110300
3296         ;;
3297     12.0)
3298         MACOSX_SDK_VERSION=120000
3299         ;;
3300     *)
3301         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported])
3302         ;;
3303     esac
3305     if test "$host_cpu" = arm64 -a $MACOSX_SDK_VERSION -lt 110000; then
3306         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported for Apple Silicon])
3307     fi
3309     if test "$with_macosx_version_min_required" = "" ; then
3310         if test "$host_cpu" = x86_64; then
3311             with_macosx_version_min_required="10.12";
3312         else
3313             with_macosx_version_min_required="11.0";
3314         fi
3315     fi
3317     if test "$with_macosx_version_max_allowed" = "" ; then
3318         with_macosx_version_max_allowed="$macosx_sdk"
3319     fi
3321     # export this so that "xcrun" invocations later return matching values
3322     DEVELOPER_DIR="${MACOSX_SDK_PATH%/SDKs*}"
3323     DEVELOPER_DIR="${DEVELOPER_DIR%/Platforms*}"
3324     export DEVELOPER_DIR
3325     FRAMEWORKSHOME="$MACOSX_SDK_PATH/System/Library/Frameworks"
3326     MACOSX_DEPLOYMENT_TARGET="$with_macosx_version_min_required"
3328     AC_MSG_CHECKING([whether Xcode is new enough])
3329     my_xcode_ver1=$(xcrun xcodebuild -version | head -n 1)
3330     my_xcode_ver2=${my_xcode_ver1#Xcode }
3331     my_xcode_ver3=$(printf %s "$my_xcode_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
3332     if test "$my_xcode_ver3" -ge 1103; then
3333         AC_MSG_RESULT([yes ($my_xcode_ver2)])
3334     else
3335         AC_MSG_ERROR(["$my_xcode_ver1" is too old or unrecognized, must be at least Xcode 11.3])
3336     fi
3338     case "$with_macosx_version_min_required" in
3339     10.12)
3340         MAC_OS_X_VERSION_MIN_REQUIRED="101200"
3341         ;;
3342     10.13)
3343         MAC_OS_X_VERSION_MIN_REQUIRED="101300"
3344         ;;
3345     10.14)
3346         MAC_OS_X_VERSION_MIN_REQUIRED="101400"
3347         ;;
3348     10.15)
3349         MAC_OS_X_VERSION_MIN_REQUIRED="101500"
3350         ;;
3351     10.16)
3352         MAC_OS_X_VERSION_MIN_REQUIRED="101600"
3353         ;;
3354     11.0)
3355         MAC_OS_X_VERSION_MIN_REQUIRED="110000"
3356         ;;
3357     11.1)
3358         MAC_OS_X_VERSION_MIN_REQUIRED="110100"
3359         ;;
3360     11.3)
3361         MAC_OS_X_VERSION_MIN_REQUIRED="110300"
3362         ;;
3363     12.0)
3364         MAC_OS_X_VERSION_MIN_REQUIRED="120000"
3365         ;;
3366     *)
3367         AC_MSG_ERROR([with-macosx-version-min-required $with_macosx_version_min_required is not a supported value, supported values are 10.12--12.0])
3368         ;;
3369     esac
3371     LIBTOOL=/usr/bin/libtool
3372     INSTALL_NAME_TOOL=install_name_tool
3373     if test -z "$save_CC"; then
3374         stdlib=-stdlib=libc++
3376         AC_MSG_CHECKING([what C compiler to use])
3377         CC="`xcrun -find clang`"
3378         CC_BASE=`first_arg_basename "$CC"`
3379         if test "$host_cpu" = x86_64; then
3380             CC+=" -target x86_64-apple-macos"
3381         else
3382             CC+=" -target arm64-apple-macos"
3383         fi
3384         CC+=" -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3385         AC_MSG_RESULT([$CC])
3387         AC_MSG_CHECKING([what C++ compiler to use])
3388         CXX="`xcrun -find clang++`"
3389         CXX_BASE=`first_arg_basename "$CXX"`
3390         if test "$host_cpu" = x86_64; then
3391             CXX+=" -target x86_64-apple-macos"
3392         else
3393             CXX+=" -target arm64-apple-macos"
3394         fi
3395         CXX+=" $stdlib -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3396         AC_MSG_RESULT([$CXX])
3398         INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3399         AR=`xcrun -find ar`
3400         NM=`xcrun -find nm`
3401         STRIP=`xcrun -find strip`
3402         LIBTOOL=`xcrun -find libtool`
3403         RANLIB=`xcrun -find ranlib`
3404     fi
3406     case "$with_macosx_version_max_allowed" in
3407     10.12)
3408         MAC_OS_X_VERSION_MAX_ALLOWED="101200"
3409         ;;
3410     10.13)
3411         MAC_OS_X_VERSION_MAX_ALLOWED="101300"
3412         ;;
3413     10.14)
3414         MAC_OS_X_VERSION_MAX_ALLOWED="101400"
3415         ;;
3416     10.15)
3417         MAC_OS_X_VERSION_MAX_ALLOWED="101500"
3418         ;;
3419     11.0)
3420         MAC_OS_X_VERSION_MAX_ALLOWED="110000"
3421         ;;
3422     11.1)
3423         MAC_OS_X_VERSION_MAX_ALLOWED="110100"
3424         ;;
3425     11.3)
3426         MAC_OS_X_VERSION_MAX_ALLOWED="110300"
3427         ;;
3428     12.0)
3429         MAC_OS_X_VERSION_MAX_ALLOWED="120000"
3430         ;;
3431     *)
3432         AC_MSG_ERROR([with-macosx-version-max-allowed $with_macosx_version_max_allowed is not a supported value, supported values are 10.12--12.0])
3433         ;;
3434     esac
3436     AC_MSG_CHECKING([that macosx-version-min-required is coherent with macosx-version-max-allowed])
3437     if test $MAC_OS_X_VERSION_MIN_REQUIRED -gt $MAC_OS_X_VERSION_MAX_ALLOWED; then
3438         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])
3439     else
3440         AC_MSG_RESULT([ok])
3441     fi
3443     AC_MSG_CHECKING([that macosx-version-max-allowed is coherent with macos-with-sdk])
3444     if test $MAC_OS_X_VERSION_MAX_ALLOWED -gt $MACOSX_SDK_VERSION; then
3445         AC_MSG_ERROR([the version maximum allowed cannot be greater than the sdk level])
3446     else
3447         AC_MSG_RESULT([ok])
3448     fi
3449     AC_MSG_NOTICE([MAC_OS_X_VERSION_MIN_REQUIRED=$MAC_OS_X_VERSION_MIN_REQUIRED])
3450     AC_MSG_NOTICE([MAC_OS_X_VERSION_MAX_ALLOWED=$MAC_OS_X_VERSION_MAX_ALLOWED])
3452     AC_MSG_CHECKING([whether to do code signing])
3454     if test "$enable_macosx_code_signing" = yes; then
3455         # By default use the first suitable certificate (?).
3457         # http://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3458         # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3459         # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3460         # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3461         # "Developer ID Application" one.
3463         identity=`security find-identity -p codesigning -v 2>/dev/null | grep 'Developer ID Application:' | $AWK '{print $2}' |head -1`
3464         if test -n "$identity"; then
3465             MACOSX_CODESIGNING_IDENTITY=$identity
3466             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3467             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3468         else
3469             AC_MSG_ERROR([cannot determine identity to use])
3470         fi
3471     elif test -n "$enable_macosx_code_signing" -a "$enable_macosx_code_signing" != no ; then
3472         MACOSX_CODESIGNING_IDENTITY=$enable_macosx_code_signing
3473         pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3474         AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3475     else
3476         AC_MSG_RESULT([no])
3477     fi
3479     AC_MSG_CHECKING([whether to create a Mac App Store package])
3481     if test -z "$enable_macosx_package_signing" || test "$enable_macosx_package_signing" == no; then
3482         AC_MSG_RESULT([no])
3483     elif test -z "$MACOSX_CODESIGNING_IDENTITY"; then
3484         AC_MSG_ERROR([You forgot --enable-macosx-code-signing])
3485     elif test "$enable_macosx_package_signing" = yes; then
3486         # By default use the first suitable certificate.
3487         # It should be a "3rd Party Mac Developer Installer" one
3489         identity=`security find-identity -v 2>/dev/null | grep '3rd Party Mac Developer Installer:' | awk '{print $2}' |head -1`
3490         if test -n "$identity"; then
3491             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3492             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3493             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3494         else
3495             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3496         fi
3497     else
3498         MACOSX_PACKAGE_SIGNING_IDENTITY=$enable_macosx_package_signing
3499         pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3500         AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3501     fi
3503     if test -n "$MACOSX_CODESIGNING_IDENTITY" -a -n "$MACOSX_PACKAGE_SIGNING_IDENTITY" -a "$MACOSX_CODESIGNING_IDENTITY" = "$MACOSX_PACKAGE_SIGNING_IDENTITY"; then
3504         AC_MSG_ERROR([You should not use the same identity for code and package signing])
3505     fi
3507     AC_MSG_CHECKING([whether to sandbox the application])
3509     if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then
3510         AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java])
3511     elif test "$enable_macosx_sandbox" = yes; then
3512         ENABLE_MACOSX_SANDBOX=TRUE
3513         AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX)
3514         AC_MSG_RESULT([yes])
3515     else
3516         AC_MSG_RESULT([no])
3517     fi
3519     AC_MSG_CHECKING([what macOS app bundle identifier to use])
3520     MACOSX_BUNDLE_IDENTIFIER=$with_macosx_bundle_identifier
3521     AC_MSG_RESULT([$MACOSX_BUNDLE_IDENTIFIER])
3523 AC_SUBST(MACOSX_SDK_PATH)
3524 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3525 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3526 AC_SUBST(MAC_OS_X_VERSION_MAX_ALLOWED)
3527 AC_SUBST(INSTALL_NAME_TOOL)
3528 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3529 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3530 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3531 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3532 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3534 dnl ===================================================================
3535 dnl Check iOS SDK and compiler
3536 dnl ===================================================================
3538 if test $_os = iOS; then
3539     AC_MSG_CHECKING([what iOS SDK to use])
3540     current_sdk_ver=15.0
3541     older_sdk_vers="14.5"
3542     if test "$enable_ios_simulator" = "yes"; then
3543         platform=iPhoneSimulator
3544         versionmin=-mios-simulator-version-min=13.6
3545     else
3546         platform=iPhoneOS
3547         versionmin=-miphoneos-version-min=13.6
3548     fi
3549     xcode_developer=`xcode-select -print-path`
3551     for sdkver in $current_sdk_ver $older_sdk_vers; do
3552         t=$xcode_developer/Platforms/$platform.platform/Developer/SDKs/$platform$sdkver.sdk
3553         if test -d $t; then
3554             sysroot=$t
3555             break
3556         fi
3557     done
3559     if test -z "$sysroot"; then
3560         AC_MSG_ERROR([Could not find iOS SDK, expected something like $xcode_developer/Platforms/$platform.platform/Developer/SDKs/${platform}${current_sdk_ver}.sdk])
3561     fi
3563     AC_MSG_RESULT($sysroot)
3565     stdlib="-stdlib=libc++"
3567     AC_MSG_CHECKING([what C compiler to use])
3568     CC="`xcrun -find clang`"
3569     CC_BASE=`first_arg_basename "$CC"`
3570     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3571     AC_MSG_RESULT([$CC])
3573     AC_MSG_CHECKING([what C++ compiler to use])
3574     CXX="`xcrun -find clang++`"
3575     CXX_BASE=`first_arg_basename "$CXX"`
3576     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3577     AC_MSG_RESULT([$CXX])
3579     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3580     AR=`xcrun -find ar`
3581     NM=`xcrun -find nm`
3582     STRIP=`xcrun -find strip`
3583     LIBTOOL=`xcrun -find libtool`
3584     RANLIB=`xcrun -find ranlib`
3587 AC_MSG_CHECKING([whether to treat the installation as read-only])
3589 if test $_os = Darwin; then
3590     enable_readonly_installset=yes
3591 elif test "$enable_extensions" != yes; then
3592     enable_readonly_installset=yes
3594 if test "$enable_readonly_installset" = yes; then
3595     AC_MSG_RESULT([yes])
3596     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3597 else
3598     AC_MSG_RESULT([no])
3601 dnl ===================================================================
3602 dnl Structure of install set
3603 dnl ===================================================================
3605 if test $_os = Darwin; then
3606     LIBO_BIN_FOLDER=MacOS
3607     LIBO_ETC_FOLDER=Resources
3608     LIBO_LIBEXEC_FOLDER=MacOS
3609     LIBO_LIB_FOLDER=Frameworks
3610     LIBO_LIB_PYUNO_FOLDER=Resources
3611     LIBO_SHARE_FOLDER=Resources
3612     LIBO_SHARE_HELP_FOLDER=Resources/help
3613     LIBO_SHARE_JAVA_FOLDER=Resources/java
3614     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3615     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3616     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3617     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3618     LIBO_URE_BIN_FOLDER=MacOS
3619     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3620     LIBO_URE_LIB_FOLDER=Frameworks
3621     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3622     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3623 elif test $_os = WINNT; then
3624     LIBO_BIN_FOLDER=program
3625     LIBO_ETC_FOLDER=program
3626     LIBO_LIBEXEC_FOLDER=program
3627     LIBO_LIB_FOLDER=program
3628     LIBO_LIB_PYUNO_FOLDER=program
3629     LIBO_SHARE_FOLDER=share
3630     LIBO_SHARE_HELP_FOLDER=help
3631     LIBO_SHARE_JAVA_FOLDER=program/classes
3632     LIBO_SHARE_PRESETS_FOLDER=presets
3633     LIBO_SHARE_READMES_FOLDER=readmes
3634     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3635     LIBO_SHARE_SHELL_FOLDER=program/shell
3636     LIBO_URE_BIN_FOLDER=program
3637     LIBO_URE_ETC_FOLDER=program
3638     LIBO_URE_LIB_FOLDER=program
3639     LIBO_URE_MISC_FOLDER=program
3640     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3641 else
3642     LIBO_BIN_FOLDER=program
3643     LIBO_ETC_FOLDER=program
3644     LIBO_LIBEXEC_FOLDER=program
3645     LIBO_LIB_FOLDER=program
3646     LIBO_LIB_PYUNO_FOLDER=program
3647     LIBO_SHARE_FOLDER=share
3648     LIBO_SHARE_HELP_FOLDER=help
3649     LIBO_SHARE_JAVA_FOLDER=program/classes
3650     LIBO_SHARE_PRESETS_FOLDER=presets
3651     LIBO_SHARE_READMES_FOLDER=readmes
3652     if test "$enable_fuzzers" != yes; then
3653         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3654     else
3655         LIBO_SHARE_RESOURCE_FOLDER=resource
3656     fi
3657     LIBO_SHARE_SHELL_FOLDER=program/shell
3658     LIBO_URE_BIN_FOLDER=program
3659     LIBO_URE_ETC_FOLDER=program
3660     LIBO_URE_LIB_FOLDER=program
3661     LIBO_URE_MISC_FOLDER=program
3662     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3664 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3665 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3666 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3667 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3668 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3669 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3670 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3671 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3672 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3673 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3674 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3675 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3676 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3677 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3678 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3679 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3681 # Not all of them needed in config_host.mk, add more if need arises
3682 AC_SUBST(LIBO_BIN_FOLDER)
3683 AC_SUBST(LIBO_ETC_FOLDER)
3684 AC_SUBST(LIBO_LIB_FOLDER)
3685 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3686 AC_SUBST(LIBO_SHARE_FOLDER)
3687 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3688 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3689 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3690 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3691 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3692 AC_SUBST(LIBO_URE_BIN_FOLDER)
3693 AC_SUBST(LIBO_URE_ETC_FOLDER)
3694 AC_SUBST(LIBO_URE_LIB_FOLDER)
3695 AC_SUBST(LIBO_URE_MISC_FOLDER)
3696 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3698 dnl ===================================================================
3699 dnl Windows specific tests and stuff
3700 dnl ===================================================================
3702 reg_get_value()
3704     # Return value: $regvalue
3705     unset regvalue
3707     if test "$build_os" = "wsl"; then
3708         regvalue=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --read-registry $1 "$2" 2>/dev/null)
3709         return
3710     fi
3712     local _regentry="/proc/registry${1}/${2}"
3713     if test -f "$_regentry"; then
3714         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3715         # Registry keys read via /proc/registry* are always \0 terminated!
3716         local _regvalue=$(tr -d '\0' < "$_regentry")
3717         if test $? -eq 0; then
3718             regvalue=$_regvalue
3719         fi
3720     fi
3723 # Get a value from the 32-bit side of the Registry
3724 reg_get_value_32()
3726     reg_get_value "32" "$1"
3729 # Get a value from the 64-bit side of the Registry
3730 reg_get_value_64()
3732     reg_get_value "64" "$1"
3735 case "$host_os" in
3736 cygwin*|wsl*)
3737     COM=MSC
3738     OS=WNT
3739     RTL_OS=Windows
3740     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3741         P_SEP=";"
3742     else
3743         P_SEP=:
3744     fi
3745     case "$host_cpu" in
3746     x86_64)
3747         CPUNAME=X86_64
3748         RTL_ARCH=X86_64
3749         PLATFORMID=windows_x86_64
3750         WINDOWS_X64=1
3751         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
3752         WIN_HOST_ARCH="x64"
3753         WIN_MULTI_ARCH="x86"
3754         WIN_HOST_BITS=64
3755         ;;
3756     i*86)
3757         CPUNAME=INTEL
3758         RTL_ARCH=x86
3759         PLATFORMID=windows_x86
3760         WIN_HOST_ARCH="x86"
3761         WIN_HOST_BITS=32
3762         WIN_OTHER_ARCH="x64"
3763         ;;
3764     aarch64)
3765         CPUNAME=AARCH64
3766         RTL_ARCH=AARCH64
3767         PLATFORMID=windows_aarch64
3768         WINDOWS_X64=1
3769         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
3770         WIN_HOST_ARCH="arm64"
3771         WIN_HOST_BITS=64
3772         with_ucrt_dir=no
3773         ;;
3774     *)
3775         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
3776         ;;
3777     esac
3779     case "$build_cpu" in
3780     x86_64) WIN_BUILD_ARCH="x64" ;;
3781     i*86) WIN_BUILD_ARCH="x86" ;;
3782     aarch64) WIN_BUILD_ARCH="arm64" ;;
3783     *)
3784         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
3785         ;;
3786     esac
3788     SCPDEFS="$SCPDEFS -D_MSC_VER"
3789     ;;
3790 esac
3792 # multi-arch is an arch, which can execute on the host (x86 on x64), while
3793 # other-arch won't, but wouldn't break the build (x64 on x86).
3794 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
3795     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
3799 if test "$_os" = "iOS" -o "$build_cpu" != "$host_cpu"; then
3800     # To allow building Windows multi-arch releases without cross-tooling
3801     if test -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH"; then
3802         cross_compiling="yes"
3803     fi
3806 ENABLE_WASM_STRIP=''
3807 if test "$cross_compiling" = "yes"; then
3808     export CROSS_COMPILING=TRUE
3809     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
3810         ENABLE_WASM_STRIP=TRUE
3811     fi
3812 else
3813     CROSS_COMPILING=
3814     BUILD_TYPE="$BUILD_TYPE NATIVE"
3816 AC_SUBST(CROSS_COMPILING)
3817 AC_SUBST(ENABLE_WASM_STRIP)
3819 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
3820 # NOTE: must _not_ be used for bundled external libraries!
3821 ISYSTEM=
3822 if test "$GCC" = "yes"; then
3823     AC_MSG_CHECKING( for -isystem )
3824     save_CFLAGS=$CFLAGS
3825     CFLAGS="$CFLAGS -isystem /usr/include -Werror"
3826     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
3827     CFLAGS=$save_CFLAGS
3828     if test -n "$ISYSTEM"; then
3829         AC_MSG_RESULT(yes)
3830     else
3831         AC_MSG_RESULT(no)
3832     fi
3834 if test -z "$ISYSTEM"; then
3835     # fall back to using -I
3836     ISYSTEM=-I
3838 AC_SUBST(ISYSTEM)
3840 dnl ===================================================================
3841 dnl  Check which Visual Studio compiler is used
3842 dnl ===================================================================
3844 map_vs_year_to_version()
3846     # Return value: $vsversion
3848     unset vsversion
3850     case $1 in
3851     2019)
3852         vsversion=16;;
3853     2022)
3854         vsversion=17;;
3855     *)
3856         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
3857     esac
3860 vs_versions_to_check()
3862     # Args: $1 (optional) : versions to check, in the order of preference
3863     # Return value: $vsversions
3865     unset vsversions
3867     if test -n "$1"; then
3868         map_vs_year_to_version "$1"
3869         vsversions=$vsversion
3870     else
3871         # Default version is 2019
3872         vsversions="16"
3873     fi
3876 win_get_env_from_vsvars32bat()
3878     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
3879     # Also seems to be located in another directory under the same name: vsvars32.bat
3880     # https://github.com/bazelbuild/bazel/blob/master/src/main/native/build_windows_jni.sh#L56-L57
3881     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$(cygpath -w $VC_PRODUCT_DIR)" > $WRAPPERBATCHFILEPATH
3882     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
3883     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
3884     local result
3885     if test "$build_os" = "wsl"; then
3886         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
3887     else
3888         chmod +x $WRAPPERBATCHFILEPATH
3889         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
3890     fi
3891     rm -f $WRAPPERBATCHFILEPATH
3892     printf '%s' "$result"
3895 find_ucrt()
3897     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/InstallationFolder"
3898     if test -n "$regvalue"; then
3899         PathFormat "$regvalue"
3900         UCRTSDKDIR=$formatted_path_unix
3901         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion"
3902         UCRTVERSION=$regvalue
3903         # Rest if not exist
3904         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
3905           UCRTSDKDIR=
3906         fi
3907     fi
3908     if test -z "$UCRTSDKDIR"; then
3909         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
3910         ide_env_file="${ide_env_dir}VsDevCmd.bat"
3911         if test -f "$ide_env_file"; then
3912             PathFormat "$(win_get_env_from_vsvars32bat UniversalCRTSdkDir)"
3913             UCRTSDKDIR=$formatted_path
3914             UCRTVERSION=$(win_get_env_from_vsvars32bat UCRTVersion)
3915             dnl Hack needed at least by tml:
3916             if test "$UCRTVERSION" = 10.0.15063.0 \
3917                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
3918                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
3919             then
3920                 UCRTVERSION=10.0.14393.0
3921             fi
3922         else
3923           AC_MSG_ERROR([No UCRT found])
3924         fi
3925     fi
3928 find_msvc()
3930     # Find Visual C++
3931     # Args: $1 (optional) : The VS version year
3932     # Return values: $vctest, $vcyear, $vctoolset, $vcnumwithdot, $vcbuildnumber
3934     unset vctest vctoolset vcnumwithdot vcbuildnumber
3936     vs_versions_to_check "$1"
3937     if test "$build_os" = wsl; then
3938         vswhere="$PROGRAMFILESX86"
3939     else
3940         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
3941     fi
3942     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
3943     PathFormat "$vswhere"
3944     vswhere=$formatted_path_unix
3945     for ver in $vsversions; do
3946         vswhereoutput=`$vswhere -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3947         if test -z "$vswhereoutput"; then
3948             vswhereoutput=`$vswhere -prerelease -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3949         fi
3950         # Fall back to all MS products (this includes VC++ Build Tools)
3951         if ! test -n "$vswhereoutput"; then
3952             AC_MSG_CHECKING([VC++ Build Tools and similar])
3953             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3954         fi
3955         if test -n "$vswhereoutput"; then
3956             PathFormat "$vswhereoutput"
3957             vctest=$formatted_path_unix
3958             break
3959         fi
3960     done
3962     if test -n "$vctest"; then
3963         vcnumwithdot="$ver.0"
3964         case "$vcnumwithdot" in
3965         16.0)
3966             vcyear=2019
3967             vctoolset=v142
3968             ;;
3969         17.0)
3970             vcyear=2022
3971             vctoolset=v143
3972             ;;
3973         esac
3974         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
3976     fi
3979 test_cl_exe()
3981     AC_MSG_CHECKING([$1 compiler])
3983     CL_EXE_PATH="$2/cl.exe"
3985     if test ! -f "$CL_EXE_PATH"; then
3986         if test "$1" = "multi-arch"; then
3987             AC_MSG_WARN([no compiler (cl.exe) in $2])
3988             return 1
3989         else
3990             AC_MSG_ERROR([no compiler (cl.exe) in $2])
3991         fi
3992     fi
3994     dnl ===========================================================
3995     dnl  Check for the corresponding mspdb*.dll
3996     dnl ===========================================================
3998     # MSVC 15.0 has libraries from 14.0?
3999     mspdbnum="140"
4001     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
4002         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
4003     fi
4005     # The compiles has to find its shared libraries
4006     OLD_PATH="$PATH"
4007     TEMP_PATH=`cygpath -d "$2"`
4008     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
4010     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
4011         AC_MSG_ERROR([no compiler (cl.exe) in $2])
4012     fi
4014     PATH="$OLD_PATH"
4016     AC_MSG_RESULT([$CL_EXE_PATH])
4019 SOLARINC=
4020 MSBUILD_PATH=
4021 DEVENV=
4022 if test "$_os" = "WINNT"; then
4023     AC_MSG_CHECKING([Visual C++])
4024     find_msvc "$with_visual_studio"
4025     if test -z "$vctest"; then
4026         if test -n "$with_visual_studio"; then
4027             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
4028         else
4029             AC_MSG_ERROR([no Visual Studio installation found])
4030         fi
4031     fi
4032     AC_MSG_RESULT([])
4034     VC_PRODUCT_DIR="$vctest/VC"
4035     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
4037     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
4038     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
4039         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
4040         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
4041         if test $? -ne 0; then
4042             WIN_MULTI_ARCH=""
4043             WIN_OTHER_ARCH=""
4044         fi
4045     fi
4047     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
4048         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
4049         test_cl_exe "build" "$MSVC_BUILD_PATH"
4050     fi
4052     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
4053         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
4054         test_cl_exe "host" "$MSVC_HOST_PATH"
4055     else
4056         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
4057     fi
4059     AC_MSG_CHECKING([for short pathname of VC product directory])
4060     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
4061     AC_MSG_RESULT([$VC_PRODUCT_DIR])
4063     UCRTSDKDIR=
4064     UCRTVERSION=
4066     AC_MSG_CHECKING([for UCRT location])
4067     find_ucrt
4068     # find_ucrt errors out if it doesn't find it
4069     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
4070     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
4071     ucrtincpath_formatted=$formatted_path
4072     # SOLARINC is used for external modules and must be set too.
4073     # And no, it's not sufficient to set SOLARINC only, as configure
4074     # itself doesn't honour it.
4075     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
4076     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
4077     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
4078     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4080     AC_SUBST(UCRTSDKDIR)
4081     AC_SUBST(UCRTVERSION)
4083     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4084     # Find the proper version of MSBuild.exe to use based on the VS version
4085     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath
4086     if test -z "$regvalue" ; then
4087         if test "$WIN_BUILD_ARCH" != "x64"; then
4088             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4089         else
4090             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4091         fi
4092     fi
4093     if test -d "$regvalue" ; then
4094         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4095         AC_MSG_RESULT([$regvalue])
4096     else
4097         AC_MSG_ERROR([MSBuild.exe location not found])
4098     fi
4100     # Find the version of devenv.exe
4101     # MSVC 2017 devenv does not start properly from a DOS 8.3 path
4102     DEVENV=$(cygpath -lm "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe")
4103     DEVENV_unix=$(cygpath -u "$DEVENV")
4104     if test ! -e "$DEVENV_unix"; then
4105         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4106     fi
4108     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4109     dnl needed when building CLR code:
4110     if test -z "$MSVC_CXX"; then
4111         # This gives us a posix path with 8.3 filename restrictions
4112         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4113     fi
4115     if test -z "$CC"; then
4116         CC=$MSVC_CXX
4117         CC_BASE=`first_arg_basename "$CC"`
4118     fi
4119     if test -z "$CXX"; then
4120         CXX=$MSVC_CXX
4121         CXX_BASE=`first_arg_basename "$CXX"`
4122     fi
4124     if test -n "$CC"; then
4125         # Remove /cl.exe from CC case insensitive
4126         AC_MSG_NOTICE([found Visual C++ $vcyear])
4128         main_include_dir=`cygpath -d -m "$COMPATH/Include"`
4129         CPPFLAGS="$CPPFLAGS -I$main_include_dir"
4131         PathFormat "$COMPATH"
4132         COMPATH=`win_short_path_for_make "$formatted_path"`
4134         VCVER=$vcnumwithdot
4135         VCTOOLSET=$vctoolset
4137         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4138         # are always "better", we list them in reverse chronological order.
4140         case "$vcnumwithdot" in
4141         16.0 | 17.0)
4142             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4143             ;;
4144         esac
4146         # The expectation is that --with-windows-sdk should not need to be used
4147         if test -n "$with_windows_sdk"; then
4148             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4149             *" "$with_windows_sdk" "*)
4150                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4151                 ;;
4152             *)
4153                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4154                 ;;
4155             esac
4156         fi
4158         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4159         ac_objext=obj
4160         ac_exeext=exe
4162     else
4163         AC_MSG_ERROR([Visual C++ not found after all, huh])
4164     fi
4166     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4167     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4168         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4169         // between Visual Studio versions and _MSC_VER:
4170         #if _MSC_VER < 1925
4171         #error
4172         #endif
4173     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4175     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4176     # version of the Explorer extension (and maybe other small
4177     # bits, too) needed when installing a 32-bit LibreOffice on a
4178     # 64-bit OS. The 64-bit Explorer extension is a feature that
4179     # has been present since long in OOo. Don't confuse it with
4180     # building LibreOffice itself as 64-bit code.
4182     BUILD_X64=
4183     CXX_X64_BINARY=
4185     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4186         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4187         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4188              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4189         then
4190             BUILD_X64=TRUE
4191             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4192             AC_MSG_RESULT([found])
4193         else
4194             AC_MSG_RESULT([not found])
4195             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4196         fi
4197     elif test "$WIN_HOST_ARCH" = "x64"; then
4198         CXX_X64_BINARY=$CXX
4199     fi
4200     AC_SUBST(BUILD_X64)
4202     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4203     AC_SUBST(CXX_X64_BINARY)
4205     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4206     # needed to support TWAIN scan on both 32- and 64-bit systems
4208     case "$WIN_HOST_ARCH" in
4209     x64)
4210         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4211         if test -n "$CXX_X86_BINARY"; then
4212             BUILD_X86=TRUE
4213             AC_MSG_RESULT([preset])
4214         elif test -n "$WIN_MULTI_ARCH"; then
4215             BUILD_X86=TRUE
4216             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4217             CXX_X86_BINARY+=" /arch:SSE"
4218             AC_MSG_RESULT([found])
4219         else
4220             AC_MSG_RESULT([not found])
4221             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4222         fi
4223         ;;
4224     x86)
4225         BUILD_X86=TRUE
4226         CXX_X86_BINARY=$MSVC_CXX
4227         ;;
4228     esac
4229     AC_SUBST(BUILD_X86)
4230     AC_SUBST(CXX_X86_BINARY)
4232 AC_SUBST(VCVER)
4233 AC_SUBST(VCTOOLSET)
4234 AC_SUBST(DEVENV)
4235 AC_SUBST(MSVC_CXX)
4237 COM_IS_CLANG=
4238 AC_MSG_CHECKING([whether the compiler is actually Clang])
4239 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4240     #ifndef __clang__
4241     you lose
4242     #endif
4243     int foo=42;
4244     ]])],
4245     [AC_MSG_RESULT([yes])
4246      COM_IS_CLANG=TRUE],
4247     [AC_MSG_RESULT([no])])
4248 AC_SUBST(COM_IS_CLANG)
4250 CC_PLAIN=$CC
4251 CLANGVER=
4252 if test "$COM_IS_CLANG" = TRUE; then
4253     AC_MSG_CHECKING([whether Clang is new enough])
4254     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4255         #if !defined __apple_build_version__
4256         #error
4257         #endif
4258         ]])],
4259         [my_apple_clang=yes],[my_apple_clang=])
4260     if test "$my_apple_clang" = yes; then
4261         AC_MSG_RESULT([assumed yes (Apple Clang)])
4262     elif test "$_os" = Emscripten; then
4263         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4264     else
4265         if test "$_os" = WINNT; then
4266             dnl In which case, assume clang-cl:
4267             my_args="/EP /TC"
4268             dnl Filter out -FIIntrin.h, which needs to be explicitly stated for
4269             dnl clang-cl:
4270             CC_PLAIN=
4271             for i in $CC; do
4272                 case $i in
4273                 -FIIntrin.h)
4274                     ;;
4275                 *)
4276                     CC_PLAIN="$CC_PLAIN $i"
4277                     ;;
4278                 esac
4279             done
4280         else
4281             my_args="-E -P"
4282         fi
4283         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC_PLAIN $my_args - | sed 's/ //g'`
4284         CLANG_FULL_VERSION=`echo __clang_version__ | $CC_PLAIN $my_args -`
4285         CLANGVER=`echo $clang_version \
4286             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4287         if test "$CLANGVER" -ge 50002; then
4288             AC_MSG_RESULT([yes ($clang_version)])
4289         else
4290             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 5.0.2])
4291         fi
4292         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4293         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4294     fi
4297 SHOWINCLUDES_PREFIX=
4298 if test "$_os" = WINNT; then
4299     dnl We need to guess the prefix of the -showIncludes output, it can be
4300     dnl localized
4301     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4302     echo "#include <stdlib.h>" > conftest.c
4303     SHOWINCLUDES_PREFIX=`$CC_PLAIN $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4304         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4305     rm -f conftest.c conftest.obj
4306     if test -z "$SHOWINCLUDES_PREFIX"; then
4307         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4308     else
4309         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4310     fi
4312 AC_SUBST(SHOWINCLUDES_PREFIX)
4315 # prefix C with ccache if needed
4317 if test "$CCACHE" != ""; then
4318     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4320     AC_LANG_PUSH([C])
4321     save_CFLAGS=$CFLAGS
4322     CFLAGS="$CFLAGS --ccache-skip -O2"
4323     # msvc does not fail on unknown options, check stdout
4324     if test "$COM" = MSC; then
4325         CFLAGS="$CFLAGS -nologo"
4326     fi
4327     save_ac_c_werror_flag=$ac_c_werror_flag
4328     ac_c_werror_flag=yes
4329     dnl an empty program will do, we're checking the compiler flags
4330     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4331                       [use_ccache=yes], [use_ccache=no])
4332     CFLAGS=$save_CFLAGS
4333     ac_c_werror_flag=$save_ac_c_werror_flag
4334     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4335         AC_MSG_RESULT([yes])
4336     else
4337         CC="$CCACHE $CC"
4338         CC_BASE="ccache $CC_BASE"
4339         AC_MSG_RESULT([no])
4340     fi
4341     AC_LANG_POP([C])
4344 # ===================================================================
4345 # check various GCC options that Clang does not support now but maybe
4346 # will somewhen in the future, check them even for GCC, so that the
4347 # flags are set
4348 # ===================================================================
4350 HAVE_GCC_GGDB2=
4351 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4352     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4353     save_CFLAGS=$CFLAGS
4354     CFLAGS="$CFLAGS -Werror -ggdb2"
4355     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4356     CFLAGS=$save_CFLAGS
4357     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4358         AC_MSG_RESULT([yes])
4359     else
4360         AC_MSG_RESULT([no])
4361     fi
4363     if test "$host_cpu" = "m68k"; then
4364         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4365         save_CFLAGS=$CFLAGS
4366         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4367         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4368         CFLAGS=$save_CFLAGS
4369         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4370             AC_MSG_RESULT([yes])
4371         else
4372             AC_MSG_ERROR([no])
4373         fi
4374     fi
4376 AC_SUBST(HAVE_GCC_GGDB2)
4378 dnl ===================================================================
4379 dnl  Test the gcc version
4380 dnl ===================================================================
4381 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4382     AC_MSG_CHECKING([the GCC version])
4383     _gcc_version=`$CC -dumpfullversion`
4384     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4385         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4386     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4388     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4390     if test "$gcc_full_version" -lt 70000; then
4391         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 7.0.0])
4392     fi
4393 else
4394     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4395     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4396     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4397     # (which reports itself as GCC 4.2.1).
4398     GCC_VERSION=
4400 AC_SUBST(GCC_VERSION)
4402 dnl Set the ENABLE_DBGUTIL variable
4403 dnl ===================================================================
4404 AC_MSG_CHECKING([whether to build with additional debug utilities])
4405 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4406     ENABLE_DBGUTIL="TRUE"
4407     # this is an extra var so it can have different default on different MSVC
4408     # versions (in case there are version specific problems with it)
4409     MSVC_USE_DEBUG_RUNTIME="TRUE"
4411     AC_MSG_RESULT([yes])
4412     # cppunit and graphite expose STL in public headers
4413     if test "$with_system_cppunit" = "yes"; then
4414         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4415     else
4416         with_system_cppunit=no
4417     fi
4418     if test "$with_system_graphite" = "yes"; then
4419         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4420     else
4421         with_system_graphite=no
4422     fi
4423     if test "$with_system_orcus" = "yes"; then
4424         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4425     else
4426         with_system_orcus=no
4427     fi
4428     if test "$with_system_libcmis" = "yes"; then
4429         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4430     else
4431         with_system_libcmis=no
4432     fi
4433     if test "$with_system_hunspell" = "yes"; then
4434         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4435     else
4436         with_system_hunspell=no
4437     fi
4438     if test "$with_system_gpgmepp" = "yes"; then
4439         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4440     else
4441         with_system_gpgmepp=no
4442     fi
4443     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4444     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4445     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4446     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4447     # of those two is using the system variant:
4448     if test "$with_system_libnumbertext" = "yes"; then
4449         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4450     else
4451         with_system_libnumbertext=no
4452     fi
4453     if test "$with_system_libwps" = "yes"; then
4454         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4455     else
4456         with_system_libwps=no
4457     fi
4458 else
4459     ENABLE_DBGUTIL=""
4460     MSVC_USE_DEBUG_RUNTIME=""
4461     AC_MSG_RESULT([no])
4463 AC_SUBST(ENABLE_DBGUTIL)
4464 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4466 dnl Set the ENABLE_DEBUG variable.
4467 dnl ===================================================================
4468 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4469     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4471 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4472     if test -z "$libo_fuzzed_enable_debug"; then
4473         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4474     else
4475         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4476         enable_debug=yes
4477     fi
4480 AC_MSG_CHECKING([whether to do a debug build])
4481 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4482     ENABLE_DEBUG="TRUE"
4483     if test -n "$ENABLE_DBGUTIL" ; then
4484         AC_MSG_RESULT([yes (dbgutil)])
4485     else
4486         AC_MSG_RESULT([yes])
4487     fi
4488 else
4489     ENABLE_DEBUG=""
4490     AC_MSG_RESULT([no])
4492 AC_SUBST(ENABLE_DEBUG)
4494 dnl ===================================================================
4495 dnl Select the linker to use (gold/lld/ld.bfd).
4496 dnl This is done only after compiler checks (need to know if Clang is
4497 dnl used, for different defaults) and after checking if a debug build
4498 dnl is wanted (non-debug builds get the default linker if not explicitly
4499 dnl specified otherwise).
4500 dnl All checks for linker features/options should come after this.
4501 dnl ===================================================================
4502 check_use_ld()
4504     use_ld=-fuse-ld=${1%%:*}
4505     use_ld_path=${1#*:}
4506     if test "$use_ld_path" != "$1"; then
4507         use_ld="$use_ld --ld-path=$use_ld_path"
4508     fi
4509     use_ld_fail_if_error=$2
4510     use_ld_ok=
4511     AC_MSG_CHECKING([for $use_ld linker support])
4512     use_ld_ldflags_save="$LDFLAGS"
4513     LDFLAGS="$LDFLAGS $use_ld"
4514     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4515 #include <stdio.h>
4516         ],[
4517 printf ("hello world\n");
4518         ])], USE_LD=$use_ld, [])
4519     if test -n "$USE_LD"; then
4520         AC_MSG_RESULT( yes )
4521         use_ld_ok=yes
4522     else
4523         if test -n "$use_ld_fail_if_error"; then
4524             AC_MSG_ERROR( no )
4525         else
4526             AC_MSG_RESULT( no )
4527         fi
4528     fi
4529     if test -n "$use_ld_ok"; then
4530         dnl keep the value of LDFLAGS
4531         return 0
4532     fi
4533     LDFLAGS="$use_ld_ldflags_save"
4534     return 1
4536 USE_LD=
4537 if test "$enable_ld" != "no"; then
4538     if test "$GCC" = "yes"; then
4539         if test -n "$enable_ld"; then
4540             check_use_ld "$enable_ld" fail_if_error
4541         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4542             dnl non-debug builds default to the default linker
4543             true
4544         elif test -n "$COM_IS_CLANG"; then
4545             check_use_ld lld
4546             if test $? -ne 0; then
4547                 check_use_ld gold
4548             fi
4549         else
4550             # For gcc first try gold, new versions also support lld.
4551             check_use_ld gold
4552             if test $? -ne 0; then
4553                 check_use_ld lld
4554             fi
4555         fi
4556         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4557         rm conftest.out
4558         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD)')
4559         if test -z "$ld_used"; then
4560             ld_used="unknown"
4561         fi
4562         AC_MSG_CHECKING([for linker that is used])
4563         AC_MSG_RESULT([$ld_used])
4564         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4565             if echo "$ld_used" | grep -q "^GNU ld"; then
4566                 AC_MSG_WARN([The default GNU linker is slow, consider using the LLD or the GNU gold linker.])
4567                 add_warning "The default GNU linker is slow, consider using the LLD or the GNU gold linker."
4568             fi
4569         fi
4570     else
4571         if test "$enable_ld" = "yes"; then
4572             AC_MSG_ERROR([--enable-ld not supported])
4573         fi
4574     fi
4576 AC_SUBST(USE_LD)
4578 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4579 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4580     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4581     bsymbolic_functions_ldflags_save=$LDFLAGS
4582     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4583     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4584 #include <stdio.h>
4585         ],[
4586 printf ("hello world\n");
4587         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4588     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4589         AC_MSG_RESULT( found )
4590     else
4591         AC_MSG_RESULT( not found )
4592     fi
4593     LDFLAGS=$bsymbolic_functions_ldflags_save
4595 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4597 LD_GC_SECTIONS=
4598 if test "$GCC" = "yes"; then
4599     for flag in "--gc-sections" "-dead_strip"; do
4600         AC_MSG_CHECKING([for $flag linker support])
4601         ldflags_save=$LDFLAGS
4602         LDFLAGS="$LDFLAGS -Wl,$flag"
4603         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4604 #include <stdio.h>
4605             ],[
4606 printf ("hello world\n");
4607             ])],[
4608             LD_GC_SECTIONS="-Wl,$flag"
4609             AC_MSG_RESULT( found )
4610             ], [
4611             AC_MSG_RESULT( not found )
4612             ])
4613         LDFLAGS=$ldflags_save
4614         if test -n "$LD_GC_SECTIONS"; then
4615             break
4616         fi
4617     done
4619 AC_SUBST(LD_GC_SECTIONS)
4621 HAVE_GSPLIT_DWARF=
4622 if test "$enable_split_debug" != no; then
4623     use_split_debug=
4624     if test -n "$ENABLE_LTO"; then
4625         true # Inherently incompatible, since no debug info is created while compiling, GCC complains.
4626     elif test "$enable_split_debug" = yes; then
4627         use_split_debug=1
4628     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4629     elif test "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4630         use_split_debug=1
4631     fi
4632     if test -n "$use_split_debug"; then
4633         AC_MSG_CHECKING([whether $CC_BASE supports -gsplit-dwarf])
4634         save_CFLAGS=$CFLAGS
4635         CFLAGS="$CFLAGS -Werror -gsplit-dwarf"
4636         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_SPLIT_DWARF=TRUE ],[])
4637         CFLAGS=$save_CFLAGS
4638         if test "$HAVE_GCC_SPLIT_DWARF" = "TRUE"; then
4639             AC_MSG_RESULT([yes])
4640         else
4641             if test "$enable_split_debug" = yes; then
4642                 AC_MSG_ERROR([no])
4643             else
4644                 AC_MSG_RESULT([no])
4645             fi
4646         fi
4647     fi
4648     if test -z "$HAVE_GCC_SPLIT_DWARF" -a "$test_split_debug" = "yes" -a -n "$use_split_debug"; then
4649         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4650         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4651     fi
4653 AC_SUBST(HAVE_GCC_SPLIT_DWARF)
4655 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4656 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4657 save_CFLAGS=$CFLAGS
4658 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4659 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4660 CFLAGS=$save_CFLAGS
4661 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4662     AC_MSG_RESULT([yes])
4663 else
4664     AC_MSG_RESULT([no])
4666 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4668 ENABLE_GDB_INDEX=
4669 if test "$enable_gdb_index" != "no"; then
4670     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4671     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4672         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4673         save_CFLAGS=$CFLAGS
4674         CFLAGS="$CFLAGS -Werror -ggnu-pubnames"
4675         have_ggnu_pubnames=
4676         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4677         if test "$have_ggnu_pubnames" != "TRUE"; then
4678             if test "$enable_gdb_index" = "yes"; then
4679                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4680             else
4681                 AC_MSG_RESULT( no )
4682             fi
4683         else
4684             AC_MSG_RESULT( yes )
4685             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4686             ldflags_save=$LDFLAGS
4687             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4688             AC_LINK_IFELSE([AC_LANG_PROGRAM([
4689 #include <stdio.h>
4690                 ],[
4691 printf ("hello world\n");
4692                 ])], ENABLE_GDB_INDEX=TRUE, [])
4693             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
4694                 AC_MSG_RESULT( yes )
4695             else
4696                 if test "$enable_gdb_index" = "yes"; then
4697                     AC_MSG_ERROR( no )
4698                 else
4699                     AC_MSG_RESULT( no )
4700                 fi
4701             fi
4702             LDFLAGS=$ldflags_save
4703         fi
4704         CFLAGS=$save_CFLAGS
4705         fi
4706     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4707         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
4708         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
4709     fi
4711 AC_SUBST(ENABLE_GDB_INDEX)
4713 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
4714     enable_sal_log=yes
4716 if test "$enable_sal_log" = yes; then
4717     ENABLE_SAL_LOG=TRUE
4719 AC_SUBST(ENABLE_SAL_LOG)
4721 dnl Check for enable symbols option
4722 dnl ===================================================================
4723 AC_MSG_CHECKING([whether to generate debug information])
4724 if test -z "$enable_symbols"; then
4725     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4726         enable_symbols=yes
4727     else
4728         enable_symbols=no
4729     fi
4731 if test "$enable_symbols" = yes; then
4732     ENABLE_SYMBOLS_FOR=all
4733     AC_MSG_RESULT([yes])
4734 elif test "$enable_symbols" = no; then
4735     ENABLE_SYMBOLS_FOR=
4736     AC_MSG_RESULT([no])
4737 else
4738     # Selective debuginfo.
4739     ENABLE_SYMBOLS_FOR="$enable_symbols"
4740     AC_MSG_RESULT([for "$enable_symbols"])
4742 AC_SUBST(ENABLE_SYMBOLS_FOR)
4744 if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then
4745     # Building on Android with full symbols: without enough memory the linker never finishes currently.
4746     AC_MSG_CHECKING([whether enough memory is available for linking])
4747     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
4748     # Check for 15GB, as Linux reports a bit less than the physical memory size.
4749     if test -n "$mem_size" -a $mem_size -lt 15728640; then
4750         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
4751     else
4752         AC_MSG_RESULT([yes])
4753     fi
4756 ENABLE_OPTIMIZED=
4757 ENABLE_OPTIMIZED_DEBUG=
4758 AC_MSG_CHECKING([whether to compile with optimization flags])
4759 if test -z "$enable_optimized"; then
4760     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4761         enable_optimized=no
4762     else
4763         enable_optimized=yes
4764     fi
4766 if test "$enable_optimized" = yes; then
4767     ENABLE_OPTIMIZED=TRUE
4768     AC_MSG_RESULT([yes])
4769 elif test "$enable_optimized" = debug; then
4770     ENABLE_OPTIMIZED_DEBUG=TRUE
4771     AC_MSG_RESULT([yes (debug)])
4772     HAVE_GCC_OG=
4773     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4774         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
4775         save_CFLAGS=$CFLAGS
4776         CFLAGS="$CFLAGS -Werror -Og"
4777         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
4778         CFLAGS=$save_CFLAGS
4779         if test "$HAVE_GCC_OG" = "TRUE"; then
4780             AC_MSG_RESULT([yes])
4781         else
4782             AC_MSG_RESULT([no])
4783         fi
4784     fi
4785     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
4786         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
4787     fi
4788 else
4789     AC_MSG_RESULT([no])
4791 AC_SUBST(ENABLE_OPTIMIZED)
4792 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
4795 # determine CPUNAME, OS, ...
4797 case "$host_os" in
4799 aix*)
4800     COM=GCC
4801     CPUNAME=POWERPC
4802     OS=AIX
4803     RTL_OS=AIX
4804     RTL_ARCH=PowerPC
4805     PLATFORMID=aix_powerpc
4806     P_SEP=:
4807     ;;
4809 cygwin*|wsl*)
4810     # Already handled
4811     ;;
4813 darwin*|macos*)
4814     COM=GCC
4815     OS=MACOSX
4816     RTL_OS=MacOSX
4817     P_SEP=:
4819     case "$host_cpu" in
4820     aarch64|arm64)
4821         if test "$enable_ios_simulator" = "yes"; then
4822             OS=iOS
4823         else
4824             CPUNAME=AARCH64
4825             RTL_ARCH=AARCH64
4826             PLATFORMID=macosx_aarch64
4827         fi
4828         ;;
4829     x86_64)
4830         if test "$enable_ios_simulator" = "yes"; then
4831             OS=iOS
4832         fi
4833         CPUNAME=X86_64
4834         RTL_ARCH=X86_64
4835         PLATFORMID=macosx_x86_64
4836         ;;
4837     *)
4838         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4839         ;;
4840     esac
4841     ;;
4843 ios*)
4844     COM=GCC
4845     OS=iOS
4846     RTL_OS=iOS
4847     P_SEP=:
4849     case "$host_cpu" in
4850     aarch64|arm64)
4851         if test "$enable_ios_simulator" = "yes"; then
4852             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
4853         fi
4854         ;;
4855     *)
4856         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4857         ;;
4858     esac
4859     CPUNAME=AARCH64
4860     RTL_ARCH=AARCH64
4861     PLATFORMID=ios_arm64
4862     ;;
4864 dragonfly*)
4865     COM=GCC
4866     OS=DRAGONFLY
4867     RTL_OS=DragonFly
4868     P_SEP=:
4870     case "$host_cpu" in
4871     i*86)
4872         CPUNAME=INTEL
4873         RTL_ARCH=x86
4874         PLATFORMID=dragonfly_x86
4875         ;;
4876     x86_64)
4877         CPUNAME=X86_64
4878         RTL_ARCH=X86_64
4879         PLATFORMID=dragonfly_x86_64
4880         ;;
4881     *)
4882         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4883         ;;
4884     esac
4885     ;;
4887 freebsd*)
4888     COM=GCC
4889     RTL_OS=FreeBSD
4890     OS=FREEBSD
4891     P_SEP=:
4893     case "$host_cpu" in
4894     aarch64)
4895         CPUNAME=AARCH64
4896         PLATFORMID=freebsd_aarch64
4897         RTL_ARCH=AARCH64
4898         ;;
4899     i*86)
4900         CPUNAME=INTEL
4901         RTL_ARCH=x86
4902         PLATFORMID=freebsd_x86
4903         ;;
4904     x86_64|amd64)
4905         CPUNAME=X86_64
4906         RTL_ARCH=X86_64
4907         PLATFORMID=freebsd_x86_64
4908         ;;
4909     powerpc64)
4910         CPUNAME=POWERPC64
4911         RTL_ARCH=PowerPC_64
4912         PLATFORMID=freebsd_powerpc64
4913         ;;
4914     powerpc|powerpcspe)
4915         CPUNAME=POWERPC
4916         RTL_ARCH=PowerPC
4917         PLATFORMID=freebsd_powerpc
4918         ;;
4919     *)
4920         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4921         ;;
4922     esac
4923     ;;
4925 haiku*)
4926     COM=GCC
4927     GUIBASE=haiku
4928     RTL_OS=Haiku
4929     OS=HAIKU
4930     P_SEP=:
4932     case "$host_cpu" in
4933     i*86)
4934         CPUNAME=INTEL
4935         RTL_ARCH=x86
4936         PLATFORMID=haiku_x86
4937         ;;
4938     x86_64|amd64)
4939         CPUNAME=X86_64
4940         RTL_ARCH=X86_64
4941         PLATFORMID=haiku_x86_64
4942         ;;
4943     *)
4944         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4945         ;;
4946     esac
4947     ;;
4949 kfreebsd*)
4950     COM=GCC
4951     OS=LINUX
4952     RTL_OS=kFreeBSD
4953     P_SEP=:
4955     case "$host_cpu" in
4957     i*86)
4958         CPUNAME=INTEL
4959         RTL_ARCH=x86
4960         PLATFORMID=kfreebsd_x86
4961         ;;
4962     x86_64)
4963         CPUNAME=X86_64
4964         RTL_ARCH=X86_64
4965         PLATFORMID=kfreebsd_x86_64
4966         ;;
4967     *)
4968         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4969         ;;
4970     esac
4971     ;;
4973 linux-gnu*|linux-musl*)
4974     COM=GCC
4975     OS=LINUX
4976     RTL_OS=Linux
4977     P_SEP=:
4979     case "$host_cpu" in
4981     aarch64)
4982         CPUNAME=AARCH64
4983         PLATFORMID=linux_aarch64
4984         RTL_ARCH=AARCH64
4985         EPM_FLAGS="-a arm64"
4986         ;;
4987     alpha)
4988         CPUNAME=AXP
4989         RTL_ARCH=ALPHA
4990         PLATFORMID=linux_alpha
4991         ;;
4992     arm*)
4993         CPUNAME=ARM
4994         EPM_FLAGS="-a arm"
4995         RTL_ARCH=ARM_EABI
4996         PLATFORMID=linux_arm_eabi
4997         case "$host_cpu" in
4998         arm*-linux)
4999             RTL_ARCH=ARM_OABI
5000             PLATFORMID=linux_arm_oabi
5001             ;;
5002         esac
5003         ;;
5004     hppa)
5005         CPUNAME=HPPA
5006         RTL_ARCH=HPPA
5007         EPM_FLAGS="-a hppa"
5008         PLATFORMID=linux_hppa
5009         ;;
5010     i*86)
5011         CPUNAME=INTEL
5012         RTL_ARCH=x86
5013         PLATFORMID=linux_x86
5014         ;;
5015     ia64)
5016         CPUNAME=IA64
5017         RTL_ARCH=IA64
5018         PLATFORMID=linux_ia64
5019         ;;
5020     mips)
5021         CPUNAME=GODSON
5022         RTL_ARCH=MIPS_EB
5023         EPM_FLAGS="-a mips"
5024         PLATFORMID=linux_mips_eb
5025         ;;
5026     mips64)
5027         CPUNAME=GODSON64
5028         RTL_ARCH=MIPS64_EB
5029         EPM_FLAGS="-a mips64"
5030         PLATFORMID=linux_mips64_eb
5031         ;;
5032     mips64el)
5033         CPUNAME=GODSON64
5034         RTL_ARCH=MIPS64_EL
5035         EPM_FLAGS="-a mips64el"
5036         PLATFORMID=linux_mips64_el
5037         ;;
5038     mipsel)
5039         CPUNAME=GODSON
5040         RTL_ARCH=MIPS_EL
5041         EPM_FLAGS="-a mipsel"
5042         PLATFORMID=linux_mips_el
5043         ;;
5044     m68k)
5045         CPUNAME=M68K
5046         RTL_ARCH=M68K
5047         PLATFORMID=linux_m68k
5048         ;;
5049     powerpc)
5050         CPUNAME=POWERPC
5051         RTL_ARCH=PowerPC
5052         PLATFORMID=linux_powerpc
5053         ;;
5054     powerpc64)
5055         CPUNAME=POWERPC64
5056         RTL_ARCH=PowerPC_64
5057         PLATFORMID=linux_powerpc64
5058         ;;
5059     powerpc64le)
5060         CPUNAME=POWERPC64
5061         RTL_ARCH=PowerPC_64_LE
5062         PLATFORMID=linux_powerpc64_le
5063         ;;
5064     sparc)
5065         CPUNAME=SPARC
5066         RTL_ARCH=SPARC
5067         PLATFORMID=linux_sparc
5068         ;;
5069     sparc64)
5070         CPUNAME=SPARC64
5071         RTL_ARCH=SPARC64
5072         PLATFORMID=linux_sparc64
5073         ;;
5074     s390)
5075         CPUNAME=S390
5076         RTL_ARCH=S390
5077         PLATFORMID=linux_s390
5078         ;;
5079     s390x)
5080         CPUNAME=S390X
5081         RTL_ARCH=S390x
5082         PLATFORMID=linux_s390x
5083         ;;
5084     x86_64)
5085         CPUNAME=X86_64
5086         RTL_ARCH=X86_64
5087         PLATFORMID=linux_x86_64
5088         ;;
5089     *)
5090         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5091         ;;
5092     esac
5093     ;;
5095 linux-android*)
5096     COM=GCC
5097     OS=ANDROID
5098     RTL_OS=Android
5099     P_SEP=:
5101     case "$host_cpu" in
5103     arm|armel)
5104         CPUNAME=ARM
5105         RTL_ARCH=ARM_EABI
5106         PLATFORMID=android_arm_eabi
5107         ;;
5108     aarch64)
5109         CPUNAME=AARCH64
5110         RTL_ARCH=AARCH64
5111         PLATFORMID=android_aarch64
5112         ;;
5113     i*86)
5114         CPUNAME=INTEL
5115         RTL_ARCH=x86
5116         PLATFORMID=android_x86
5117         ;;
5118     x86_64)
5119         CPUNAME=X86_64
5120         RTL_ARCH=X86_64
5121         PLATFORMID=android_x86_64
5122         ;;
5123     *)
5124         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5125         ;;
5126     esac
5127     ;;
5129 *netbsd*)
5130     COM=GCC
5131     OS=NETBSD
5132     RTL_OS=NetBSD
5133     P_SEP=:
5135     case "$host_cpu" in
5136     i*86)
5137         CPUNAME=INTEL
5138         RTL_ARCH=x86
5139         PLATFORMID=netbsd_x86
5140         ;;
5141     powerpc)
5142         CPUNAME=POWERPC
5143         RTL_ARCH=PowerPC
5144         PLATFORMID=netbsd_powerpc
5145         ;;
5146     sparc)
5147         CPUNAME=SPARC
5148         RTL_ARCH=SPARC
5149         PLATFORMID=netbsd_sparc
5150         ;;
5151     x86_64)
5152         CPUNAME=X86_64
5153         RTL_ARCH=X86_64
5154         PLATFORMID=netbsd_x86_64
5155         ;;
5156     *)
5157         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5158         ;;
5159     esac
5160     ;;
5162 openbsd*)
5163     COM=GCC
5164     OS=OPENBSD
5165     RTL_OS=OpenBSD
5166     P_SEP=:
5168     case "$host_cpu" in
5169     i*86)
5170         CPUNAME=INTEL
5171         RTL_ARCH=x86
5172         PLATFORMID=openbsd_x86
5173         ;;
5174     x86_64)
5175         CPUNAME=X86_64
5176         RTL_ARCH=X86_64
5177         PLATFORMID=openbsd_x86_64
5178         ;;
5179     *)
5180         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5181         ;;
5182     esac
5183     SOLARINC="$SOLARINC -I/usr/local/include"
5184     ;;
5186 solaris*)
5187     COM=GCC
5188     OS=SOLARIS
5189     RTL_OS=Solaris
5190     P_SEP=:
5192     case "$host_cpu" in
5193     i*86)
5194         CPUNAME=INTEL
5195         RTL_ARCH=x86
5196         PLATFORMID=solaris_x86
5197         ;;
5198     sparc)
5199         CPUNAME=SPARC
5200         RTL_ARCH=SPARC
5201         PLATFORMID=solaris_sparc
5202         ;;
5203     sparc64)
5204         CPUNAME=SPARC64
5205         RTL_ARCH=SPARC64
5206         PLATFORMID=solaris_sparc64
5207         ;;
5208     *)
5209         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5210         ;;
5211     esac
5212     SOLARINC="$SOLARINC -I/usr/local/include"
5213     ;;
5215 emscripten*)
5216     COM=GCC
5217     OS=EMSCRIPTEN
5218     RTL_OS=Emscripten
5219     P_SEP=:
5221     case "$host_cpu" in
5222     wasm32|wasm64)
5223         ;;
5224     *)
5225         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5226         ;;
5227     esac
5228     CPUNAME=INTEL
5229     RTL_ARCH=x86
5230     PLATFORMID=linux_x86
5231     ;;
5234     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5235     ;;
5236 esac
5238 if test "$with_x" = "no"; then
5239     AC_MSG_ERROR([Use --disable-gui instead. How can we get rid of this option? No idea where it comes from.])
5242 DISABLE_GUI=""
5243 if test "$enable_gui" = "no"; then
5244     if test "$using_x11" != yes; then
5245         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5246     fi
5247     USING_X11=
5248     DISABLE_GUI=TRUE
5249 else
5250     AC_DEFINE(HAVE_FEATURE_UI)
5252 AC_SUBST(DISABLE_GUI)
5254 if test "$using_x11" = yes; then
5255     if test "$USING_X11" = TRUE; then
5256         AC_DEFINE(USING_X11)
5257     else
5258         disable_x11_tests
5259     fi
5260 else
5261     if test "$USING_X11" = TRUE; then
5262         AC_MSG_ERROR([Platform doesn't support X11 (\$using_x11), but \$USING_X11 is set!])
5263     fi
5266 WORKDIR="${BUILDDIR}/workdir"
5267 INSTDIR="${BUILDDIR}/instdir"
5268 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5269 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5270 SOLARINC="-I$SRC_ROOT/include $SOLARINC"
5271 AC_SUBST(COM)
5272 AC_SUBST(CPUNAME)
5273 AC_SUBST(RTL_OS)
5274 AC_SUBST(RTL_ARCH)
5275 AC_SUBST(EPM_FLAGS)
5276 AC_SUBST(USING_X11)
5277 AC_SUBST([INSTDIR])
5278 AC_SUBST([INSTROOT])
5279 AC_SUBST([INSTROOTBASE])
5280 AC_SUBST(OS)
5281 AC_SUBST(P_SEP)
5282 AC_SUBST(WORKDIR)
5283 AC_SUBST(PLATFORMID)
5284 AC_SUBST(WINDOWS_X64)
5285 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5287 if test "$OS" = WNT -a "$COM" = MSC; then
5288     case "$CPUNAME" in
5289     INTEL) CPPU_ENV=msci ;;
5290     X86_64) CPPU_ENV=mscx ;;
5291     AARCH64) CPPU_ENV=msca ;;
5292     *)
5293         AC_MSG_ERROR([Unknown \$CPUNAME '$CPUNAME' for $OS / $COM"])
5294         ;;
5295     esac
5296 else
5297     CPPU_ENV=gcc3
5299 AC_SUBST(CPPU_ENV)
5301 dnl ===================================================================
5302 dnl Test which package format to use
5303 dnl ===================================================================
5304 AC_MSG_CHECKING([which package format to use])
5305 if test -n "$with_package_format" -a "$with_package_format" != no; then
5306     for i in $with_package_format; do
5307         case "$i" in
5308         aix | bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5309             ;;
5310         *)
5311             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5312 aix - AIX software distribution
5313 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5314 deb - Debian software distribution
5315 pkg - Solaris software distribution
5316 rpm - RedHat software distribution
5318 LibreOffice additionally supports:
5319 archive - .tar.gz or .zip
5320 dmg - macOS .dmg
5321 installed - installation tree
5322 msi - Windows .msi
5323         ])
5324             ;;
5325         esac
5326     done
5327     # fakeroot is needed to ensure correct file ownerships/permissions
5328     # inside deb packages and tar archives created on Linux and Solaris.
5329     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5330         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5331         if test "$FAKEROOT" = "no"; then
5332             AC_MSG_ERROR(
5333                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5334         fi
5335     fi
5336     PKGFORMAT="$with_package_format"
5337     AC_MSG_RESULT([$PKGFORMAT])
5338 else
5339     PKGFORMAT=
5340     AC_MSG_RESULT([none])
5342 AC_SUBST(PKGFORMAT)
5344 dnl ===================================================================
5345 dnl handle help related options
5347 dnl If you change help related options, please update README.help
5348 dnl ===================================================================
5350 ENABLE_HTMLHELP=
5351 HELP_OMINDEX_PAGE=
5352 HELP_ONLINE=
5353 WITH_HELPPACKS=
5355 AC_MSG_CHECKING([which help to build])
5356 if test -n "$with_help" -a "$with_help" != "no"; then
5357     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5358     BUILD_TYPE="$BUILD_TYPE HELP"
5359     case "$with_help" in
5360     "html")
5361         ENABLE_HTMLHELP=TRUE
5362         WITH_HELPPACKS=TRUE
5363         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5364         AC_MSG_RESULT([HTML (local)])
5365         ;;
5366     "online")
5367         ENABLE_HTMLHELP=TRUE
5368         HELP_ONLINE=TRUE
5369         AC_MSG_RESULT([HTML (online)])
5370         ;;
5371     yes)
5372         WITH_HELPPACKS=TRUE
5373         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5374         AC_MSG_RESULT([XML (local)])
5375         ;;
5376     *)
5377         AC_MSG_ERROR([Unknown --with-help=$with_help])
5378         ;;
5379     esac
5380 else
5381     AC_MSG_RESULT([no])
5384 AC_MSG_CHECKING([if we need to build the help index tooling])
5385 if test "$with_help" = yes -o "$enable_extension_integration" != no; then
5386     BUILD_TYPE="$BUILD_TYPE HELPTOOLS"
5387     AC_MSG_RESULT([yes])
5388 else
5389     AC_MSG_RESULT([no])
5392 AC_MSG_CHECKING([whether to enable xapian-omega support for online help])
5393 if test -n "$with_omindex" -a "$with_omindex" != "no"; then
5394     if test "$HELP_ONLINE" != TRUE; then
5395         AC_MSG_ERROR([Can't build xapian-omega index without --help=online])
5396     fi
5397     case "$with_omindex" in
5398     "server")
5399         HELP_OMINDEX_PAGE=TRUE
5400         AC_MSG_RESULT([SERVER])
5401         ;;
5402     "noxap")
5403         AC_MSG_RESULT([NOXAP])
5404         ;;
5405     *)
5406         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5407         ;;
5408     esac
5409 else
5410     AC_MSG_RESULT([no])
5413 AC_MSG_CHECKING([whether to include the XML-help support])
5414 if test "$enable_xmlhelp" = yes; then
5415     BUILD_TYPE="$BUILD_TYPE XMLHELP"
5416     AC_DEFINE(HAVE_FEATURE_XMLHELP)
5417     AC_MSG_RESULT([yes])
5418 else
5419     if test "$with_help" = yes; then
5420         add_warning "Building the XML help, but LO with disabled xmlhelp support. Generated help can't be accessed from this LO build!"
5421     fi
5422     AC_MSG_RESULT([no])
5425 dnl Test whether to integrate helppacks into the product's installer
5426 AC_MSG_CHECKING([for helppack integration])
5427 if test -z "$WITH_HELPPACKS" -o "$with_helppack_integration" = no; then
5428     AC_MSG_RESULT([no integration])
5429 else
5430     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
5431     AC_MSG_RESULT([integration])
5434 AC_SUBST([ENABLE_HTMLHELP])
5435 AC_SUBST([HELP_OMINDEX_PAGE])
5436 AC_SUBST([HELP_ONLINE])
5437 # WITH_HELPPACKS is used only in configure
5439 dnl ===================================================================
5440 dnl Set up a different compiler to produce tools to run on the build
5441 dnl machine when doing cross-compilation
5442 dnl ===================================================================
5444 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5445 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5446 if test "$cross_compiling" = "yes"; then
5447     AC_MSG_CHECKING([for BUILD platform configuration])
5448     echo
5449     rm -rf CONF-FOR-BUILD config_build.mk
5450     mkdir CONF-FOR-BUILD
5451     # Here must be listed all files needed when running the configure script. In particular, also
5452     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5453     # keep them in the same order as there.
5454     (cd $SRC_ROOT && tar cf - \
5455         config.guess \
5456         bin/get_config_variables \
5457         solenv/bin/getcompver.awk \
5458         solenv/inc/langlist.mk \
5459         download.lst \
5460         config_host.mk.in \
5461         config_host_lang.mk.in \
5462         Makefile.in \
5463         bin/bffvalidator.sh.in \
5464         bin/odfvalidator.sh.in \
5465         bin/officeotron.sh.in \
5466         hardened_runtime.xcent.in \
5467         instsetoo_native/util/openoffice.lst.in \
5468         config_host/*.in \
5469         sysui/desktop/macosx/Info.plist.in \
5470         .vscode/vs-code-template.code-workspace.in \
5471         ) \
5472     | (cd CONF-FOR-BUILD && tar xf -)
5473     cp configure CONF-FOR-BUILD
5474     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5475     (
5476     unset COM USING_X11 OS CPUNAME
5477     unset CC CXX SYSBASE CFLAGS
5478     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5479     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5480     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5481     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5482     if test -n "$CC_FOR_BUILD"; then
5483         export CC="$CC_FOR_BUILD"
5484         CC_BASE=`first_arg_basename "$CC"`
5485     fi
5486     if test -n "$CXX_FOR_BUILD"; then
5487         export CXX="$CXX_FOR_BUILD"
5488         CXX_BASE=`first_arg_basename "$CXX"`
5489     fi
5490     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5491     cd CONF-FOR-BUILD
5493     # Handle host configuration, which affects the cross-toolset too
5494     sub_conf_opts=""
5495     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5496     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5497     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5498     if test -n "$ENABLE_JAVA"; then
5499         case "$_os" in
5500         iOS) sub_conf_opts="$sub_conf_opts --without-java" ;; # force it off, like it used to be
5501         Android)
5502             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5503             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5504             ;;
5505         *)
5506             if test -z "$with_jdk_home"; then
5507                 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.])
5508             fi
5509             ;;
5510         esac
5511     else
5512         sub_conf_opts="$sub_conf_opts --without-java"
5513     fi
5514     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5515     test "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" && sub_conf_opts="$sub_conf_opts --with-system-icu"
5516     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no --disable-database-connectivity"
5517     test -n "$with_help" -a "$with_help" != "no" && sub_conf_opts="$sub_conf_opts --with-help=$with_help"
5518     test "$enable_extensions" = yes || sub_conf_opts="$sub_conf_opts --disable-extensions"
5519     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5521     # Don't bother having configure look for stuff not needed for the build platform anyway
5522     sub_conf_defaults=" \
5523         --build="$build_alias" \
5524         --disable-cairo-canvas \
5525         --disable-cups \
5526         --disable-firebird-sdbc \
5527         --disable-gpgmepp \
5528         --disable-gstreamer-1-0 \
5529         --disable-gtk3 \
5530         --disable-gtk4 \
5531         --disable-mariadb-sdbc \
5532         --disable-nss \
5533         --disable-online-update \
5534         --disable-opencl \
5535         --disable-pdfimport \
5536         --disable-postgresql-sdbc \
5537         --disable-skia \
5538         --enable-icecream="$enable_icecream" \
5539         --without-doxygen \
5540         --without-webdav \
5541         --with-parallelism="$with_parallelism" \
5542         --with-theme="$with_theme" \
5543         --with-tls=openssl \
5545     echo "    Running CONF-FOR-BUILD/configure" $sub_conf_defaults $sub_conf_opts $with_build_platform_configure_options --srcdir=$srcdir
5546     ./configure \
5547         $sub_conf_defaults \
5548         $sub_conf_opts \
5549         $with_build_platform_configure_options \
5550         --srcdir=$srcdir \
5551         2>&1 | sed -e 's/^/    /'
5552     if test [${PIPESTATUS[0]}] -ne 0; then
5553         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5554     fi
5556     # filter permitted build targets
5557     PERMITTED_BUILD_TARGETS="
5558         AVMEDIA
5559         BOOST
5560         CAIRO
5561         CLUCENE
5562         CUCKOO
5563         CURL
5564         DBCONNECTIVITY
5565         DESKTOP
5566         DYNLOADING
5567         EPOXY
5568         EXPAT
5569         GLM
5570         GRAPHITE
5571         HARFBUZZ
5572         HELPTOOLS
5573         ICU
5574         LCMS2
5575         LIBJPEG_TURBO
5576         LIBLANGTAG
5577         LibO
5578         LIBFFI
5579         LIBPN
5580         LIBXML2
5581         LIBXSLT
5582         MDDS
5583         NATIVE
5584         OPENSSL
5585         ORCUS
5586         PYTHON
5587         SCRIPTING
5588         ZLIB
5590     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5591     # newlined lists, to use grep as a filter
5592     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5593     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5594     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5595     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5597     cp config_host.mk ../config_build.mk
5598     cp config_host_lang.mk ../config_build_lang.mk
5599     mv config.log ../config.Build.log
5600     mkdir -p ../config_build
5601     mv config_host/*.h ../config_build
5602     test -f "$WARNINGS_FILE" && mv "$WARNINGS_FILE" "../$WARNINGS_FILE_FOR_BUILD"
5604     # all these will get a _FOR_BUILD postfix
5605     DIRECT_FOR_BUILD_SETTINGS="
5606         CC
5607         CPPU_ENV
5608         CXX
5609         ILIB
5610         JAVA_HOME
5611         JAVAIFLAGS
5612         JDK
5613         LIBO_BIN_FOLDER
5614         LIBO_LIB_FOLDER
5615         LIBO_URE_LIB_FOLDER
5616         LIBO_URE_MISC_FOLDER
5617         OS
5618         SDKDIRNAME
5619         SYSTEM_LIBXML
5620         SYSTEM_LIBXSLT
5622     # these overwrite host config with build config
5623     OVERWRITING_SETTINGS="
5624         ANT
5625         ANT_HOME
5626         ANT_LIB
5627         HSQLDB_USE_JDBC_4_1
5628         JAVA_CLASSPATH_NOT_SET
5629         JAVA_SOURCE_VER
5630         JAVA_TARGET_VER
5631         JAVACFLAGS
5632         JAVACOMPILER
5633         JAVADOC
5634         JAVADOCISGJDOC
5636     # these need some special handling
5637     EXTRA_HANDLED_SETTINGS="
5638         INSTDIR
5639         INSTROOT
5640         PATH
5641         WORKDIR
5643     OLD_PATH=$PATH
5644     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
5645     BUILD_PATH=$PATH
5646     PATH=$OLD_PATH
5648     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
5649     echo "$line" >>build-config
5651     for V in $DIRECT_FOR_BUILD_SETTINGS; do
5652         VV='$'$V
5653         VV=`eval "echo $VV"`
5654         if test -n "$VV"; then
5655             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
5656             echo "$line" >>build-config
5657         fi
5658     done
5660     for V in $OVERWRITING_SETTINGS; do
5661         VV='$'$V
5662         VV=`eval "echo $VV"`
5663         if test -n "$VV"; then
5664             line=${V}='${'${V}:-$VV'}'
5665             echo "$line" >>build-config
5666         fi
5667     done
5669     for V in INSTDIR INSTROOT WORKDIR; do
5670         VV='$'$V
5671         VV=`eval "echo $VV"`
5672         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
5673         if test -n "$VV"; then
5674             line="${V}_FOR_BUILD='$VV'"
5675             echo "$line" >>build-config
5676         fi
5677     done
5679     )
5680     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
5681     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])
5682     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
5683              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
5685     eval `cat CONF-FOR-BUILD/build-config`
5687     AC_MSG_RESULT([checking for BUILD platform configuration... done])
5689     rm -rf CONF-FOR-BUILD
5690 else
5691     OS_FOR_BUILD="$OS"
5692     CC_FOR_BUILD="$CC"
5693     CPPU_ENV_FOR_BUILD="$CPPU_ENV"
5694     CXX_FOR_BUILD="$CXX"
5695     INSTDIR_FOR_BUILD="$INSTDIR"
5696     INSTROOT_FOR_BUILD="$INSTROOT"
5697     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
5698     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
5699     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
5700     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
5701     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
5702     WORKDIR_FOR_BUILD="$WORKDIR"
5704 AC_SUBST(OS_FOR_BUILD)
5705 AC_SUBST(INSTDIR_FOR_BUILD)
5706 AC_SUBST(INSTROOT_FOR_BUILD)
5707 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
5708 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
5709 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
5710 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
5711 AC_SUBST(SDKDIRNAME_FOR_BUILD)
5712 AC_SUBST(WORKDIR_FOR_BUILD)
5713 AC_SUBST(CC_FOR_BUILD)
5714 AC_SUBST(CXX_FOR_BUILD)
5715 AC_SUBST(CPPU_ENV_FOR_BUILD)
5717 dnl ===================================================================
5718 dnl Check for syslog header
5719 dnl ===================================================================
5720 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
5722 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
5723 dnl ===================================================================
5724 AC_MSG_CHECKING([whether to turn warnings to errors])
5725 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
5726     ENABLE_WERROR="TRUE"
5727     PYTHONWARNINGS="error"
5728     AC_MSG_RESULT([yes])
5729 else
5730     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
5731         ENABLE_WERROR="TRUE"
5732         PYTHONWARNINGS="error"
5733         AC_MSG_RESULT([yes])
5734     else
5735         AC_MSG_RESULT([no])
5736     fi
5738 AC_SUBST(ENABLE_WERROR)
5739 AC_SUBST(PYTHONWARNINGS)
5741 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
5742 dnl ===================================================================
5743 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
5744 if test -z "$enable_assert_always_abort"; then
5745    if test "$ENABLE_DEBUG" = TRUE; then
5746        enable_assert_always_abort=yes
5747    else
5748        enable_assert_always_abort=no
5749    fi
5751 if test "$enable_assert_always_abort" = "yes"; then
5752     ASSERT_ALWAYS_ABORT="TRUE"
5753     AC_MSG_RESULT([yes])
5754 else
5755     ASSERT_ALWAYS_ABORT="FALSE"
5756     AC_MSG_RESULT([no])
5758 AC_SUBST(ASSERT_ALWAYS_ABORT)
5760 # Determine whether to use ooenv for the instdir installation
5761 # ===================================================================
5762 if test $_os != "WINNT" -a $_os != "Darwin"; then
5763     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
5764     if test -z "$enable_ooenv"; then
5765         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5766             enable_ooenv=yes
5767         else
5768             enable_ooenv=no
5769         fi
5770     fi
5771     if test "$enable_ooenv" = "no"; then
5772         AC_MSG_RESULT([no])
5773     else
5774         ENABLE_OOENV="TRUE"
5775         AC_MSG_RESULT([yes])
5776     fi
5778 AC_SUBST(ENABLE_OOENV)
5780 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
5781     if test "$enable_qt5" = "no"; then
5782         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
5783     else
5784         enable_qt5=yes
5785     fi
5788 dnl ===================================================================
5789 dnl check for cups support
5790 dnl ===================================================================
5792 AC_MSG_CHECKING([whether to enable CUPS support])
5793 if test "$test_cups" = yes -a "$enable_cups" != no; then
5794     ENABLE_CUPS=TRUE
5795     AC_MSG_RESULT([yes])
5797     AC_MSG_CHECKING([whether cups support is present])
5798     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
5799     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
5800     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
5801         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
5802     fi
5803 else
5804     AC_MSG_RESULT([no])
5807 AC_SUBST(ENABLE_CUPS)
5809 # fontconfig checks
5810 if test "$using_freetype_fontconfig" = yes; then
5811     AC_MSG_CHECKING([which fontconfig to use])
5813 if test "$using_freetype_fontconfig" = yes -a "$test_system_fontconfig" != no; then
5814     AC_MSG_RESULT([external])
5815     PKG_CHECK_MODULES([FONTCONFIG], [fontconfig >= 2.4.1])
5816     SYSTEM_FONTCONFIG=TRUE
5817     FilterLibs "${FONTCONFIG_LIBS}"
5818     FONTCONFIG_LIBS="${filteredlibs}"
5819 elif test "$using_freetype_fontconfig" = yes; then
5820     AC_MSG_RESULT([internal])
5821     BUILD_TYPE="$BUILD_TYPE FONTCONFIG"
5823 AC_SUBST(FONTCONFIG_CFLAGS)
5824 AC_SUBST(FONTCONFIG_LIBS)
5825 AC_SUBST([SYSTEM_FONTCONFIG])
5827 dnl whether to find & fetch external tarballs?
5828 dnl ===================================================================
5829 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
5830    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
5831        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
5832    else
5833        TARFILE_LOCATION="$LODE_HOME/ext_tar"
5834    fi
5836 if test -z "$TARFILE_LOCATION"; then
5837     if test -d "$SRC_ROOT/src" ; then
5838         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
5839         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
5840     fi
5841     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
5842 else
5843     AbsolutePath "$TARFILE_LOCATION"
5844     PathFormat "${absolute_path}"
5845     TARFILE_LOCATION="${formatted_path}"
5847 AC_SUBST(TARFILE_LOCATION)
5849 AC_MSG_CHECKING([whether we want to fetch tarballs])
5850 if test "$enable_fetch_external" != "no"; then
5851     if test "$with_all_tarballs" = "yes"; then
5852         AC_MSG_RESULT([yes, all of them])
5853         DO_FETCH_TARBALLS="ALL"
5854     else
5855         AC_MSG_RESULT([yes, if we use them])
5856         DO_FETCH_TARBALLS="TRUE"
5857     fi
5858 else
5859     AC_MSG_RESULT([no])
5860     DO_FETCH_TARBALLS=
5862 AC_SUBST(DO_FETCH_TARBALLS)
5864 dnl Test whether to include MySpell dictionaries
5865 dnl ===================================================================
5866 AC_MSG_CHECKING([whether to include MySpell dictionaries])
5867 if test "$with_myspell_dicts" = "yes"; then
5868     AC_MSG_RESULT([yes])
5869     WITH_MYSPELL_DICTS=TRUE
5870     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
5871     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
5872 else
5873     AC_MSG_RESULT([no])
5874     WITH_MYSPELL_DICTS=
5876 AC_SUBST(WITH_MYSPELL_DICTS)
5878 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
5879 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
5880     if test "$with_system_dicts" = yes; then
5881         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
5882     fi
5883     with_system_dicts=no
5886 AC_MSG_CHECKING([whether to use dicts from external paths])
5887 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
5888     AC_MSG_RESULT([yes])
5889     SYSTEM_DICTS=TRUE
5890     AC_MSG_CHECKING([for spelling dictionary directory])
5891     if test -n "$with_external_dict_dir"; then
5892         DICT_SYSTEM_DIR=file://$with_external_dict_dir
5893     else
5894         DICT_SYSTEM_DIR=file:///usr/share/hunspell
5895         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
5896             DICT_SYSTEM_DIR=file:///usr/share/myspell
5897         fi
5898     fi
5899     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
5900     AC_MSG_CHECKING([for hyphenation patterns directory])
5901     if test -n "$with_external_hyph_dir"; then
5902         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
5903     else
5904         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
5905     fi
5906     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
5907     AC_MSG_CHECKING([for thesaurus directory])
5908     if test -n "$with_external_thes_dir"; then
5909         THES_SYSTEM_DIR=file://$with_external_thes_dir
5910     else
5911         THES_SYSTEM_DIR=file:///usr/share/mythes
5912     fi
5913     AC_MSG_RESULT([$THES_SYSTEM_DIR])
5914 else
5915     AC_MSG_RESULT([no])
5916     SYSTEM_DICTS=
5918 AC_SUBST(SYSTEM_DICTS)
5919 AC_SUBST(DICT_SYSTEM_DIR)
5920 AC_SUBST(HYPH_SYSTEM_DIR)
5921 AC_SUBST(THES_SYSTEM_DIR)
5923 dnl ===================================================================
5924 dnl Precompiled headers.
5925 ENABLE_PCH=""
5926 AC_MSG_CHECKING([whether to enable pch feature])
5927 if test -z "$enable_pch"; then
5928     if test "$_os" = "WINNT"; then
5929         # Enabled by default on Windows.
5930         enable_pch=yes
5931         # never use [s]ccache on auto-enabled PCH builds, except if requested explicitly
5932         if test -z "$enable_ccache"; then
5933             CCACHE=""
5934         fi
5935     else
5936         enable_pch=no
5937     fi
5939 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
5940     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
5942 if test "$enable_pch" = "system"; then
5943     ENABLE_PCH="1"
5944     AC_MSG_RESULT([yes (system headers)])
5945 elif test "$enable_pch" = "base"; then
5946     ENABLE_PCH="2"
5947     AC_MSG_RESULT([yes (system and base headers)])
5948 elif test "$enable_pch" = "normal"; then
5949     ENABLE_PCH="3"
5950     AC_MSG_RESULT([yes (normal)])
5951 elif test "$enable_pch" = "full"; then
5952     ENABLE_PCH="4"
5953     AC_MSG_RESULT([yes (full)])
5954 elif test "$enable_pch" = "yes"; then
5955     # Pick a suitable default.
5956     if test "$GCC" = "yes"; then
5957         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
5958         # while making the PCHs larger and rebuilds more likely.
5959         ENABLE_PCH="2"
5960         AC_MSG_RESULT([yes (system and base headers)])
5961     else
5962         # With MSVC the highest level makes a significant difference,
5963         # and it was the default when there used to be no PCH levels.
5964         ENABLE_PCH="4"
5965         AC_MSG_RESULT([yes (full)])
5966     fi
5967 elif test "$enable_pch" = "no"; then
5968     AC_MSG_RESULT([no])
5969 else
5970     AC_MSG_ERROR([Unknown value for --enable-pch])
5972 AC_SUBST(ENABLE_PCH)
5973 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
5974 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
5975     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
5976     if test "$CCACHE_BIN" != "not found"; then
5977         AC_MSG_CHECKING([ccache version])
5978         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
5979         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
5980         AC_MSG_RESULT([$CCACHE_VERSION])
5981         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
5982         if test "$CCACHE_NUMVER" -gt "030701"; then
5983             AC_MSG_RESULT([yes])
5984         else
5985             AC_MSG_RESULT([no (not newer than 3.7.1)])
5986             CCACHE_DEPEND_MODE=
5987         fi
5988     fi
5991 PCH_INSTANTIATE_TEMPLATES=
5992 if test -n "$ENABLE_PCH"; then
5993     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
5994     save_CFLAGS=$CFLAGS
5995     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
5996     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
5997     CFLAGS=$save_CFLAGS
5998     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
5999         AC_MSG_RESULT(yes)
6000     else
6001         AC_MSG_RESULT(no)
6002     fi
6004 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
6006 BUILDING_PCH_WITH_OBJ=
6007 if test -n "$ENABLE_PCH"; then
6008     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
6009     save_CFLAGS=$CFLAGS
6010     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
6011     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
6012     CFLAGS=$save_CFLAGS
6013     if test -n "$BUILDING_PCH_WITH_OBJ"; then
6014         AC_MSG_RESULT(yes)
6015     else
6016         AC_MSG_RESULT(no)
6017     fi
6019 AC_SUBST(BUILDING_PCH_WITH_OBJ)
6021 PCH_CODEGEN=
6022 PCH_NO_CODEGEN=
6023 fpch_prefix=
6024 if test "$COM" = MSC; then
6025     fpch_prefix="-Xclang "
6027 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6028     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-codegen])
6029     save_CFLAGS=$CFLAGS
6030     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-codegen"
6031     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6032         [
6033         PCH_CODEGEN="${fpch_prefix}-fpch-codegen"
6034         PCH_NO_CODEGEN="${fpch_prefix}-fno-pch-codegen"
6035         ],[])
6036     CFLAGS=$save_CFLAGS
6037     if test -n "$PCH_CODEGEN"; then
6038         AC_MSG_RESULT(yes)
6039     else
6040         AC_MSG_RESULT(no)
6041     fi
6043 AC_SUBST(PCH_CODEGEN)
6044 AC_SUBST(PCH_NO_CODEGEN)
6045 PCH_DEBUGINFO=
6046 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6047     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-debuginfo])
6048     save_CFLAGS=$CFLAGS
6049     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-debuginfo"
6050     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="${fpch_prefix}-fpch-debuginfo" ],[])
6051     CFLAGS=$save_CFLAGS
6052     if test -n "$PCH_DEBUGINFO"; then
6053         AC_MSG_RESULT(yes)
6054     else
6055         AC_MSG_RESULT(no)
6056     fi
6058 AC_SUBST(PCH_DEBUGINFO)
6060 TAB=`printf '\t'`
6062 AC_MSG_CHECKING([the GNU Make version])
6063 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
6064 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6065 if test "$_make_longver" -ge "038200"; then
6066     AC_MSG_RESULT([$GNUMAKE $_make_version])
6068 elif test "$_make_longver" -ge "038100"; then
6069     if test "$build_os" = "cygwin"; then
6070         AC_MSG_ERROR([failed ($GNUMAKE version >= 3.82 needed])
6071     fi
6072     AC_MSG_RESULT([$GNUMAKE $_make_version])
6074     dnl ===================================================================
6075     dnl Search all the common names for sha1sum
6076     dnl ===================================================================
6077     AC_CHECK_PROGS(SHA1SUM, sha1sum sha1 shasum openssl)
6078     if test -z "$SHA1SUM"; then
6079         AC_MSG_ERROR([install the appropriate SHA-1 checksumming program for this OS])
6080     elif test "$SHA1SUM" = "openssl"; then
6081         SHA1SUM="openssl sha1"
6082     fi
6083     AC_MSG_CHECKING([for GNU Make bug 20033])
6084     TESTGMAKEBUG20033=`mktemp -d tmp.XXXXXX`
6085     $SED -e "s/<TAB>/$TAB/g" > $TESTGMAKEBUG20033/Makefile << EOF
6086 A := \$(wildcard *.a)
6088 .PHONY: all
6089 all: \$(A:.a=.b)
6090 <TAB>@echo survived bug20033.
6092 .PHONY: setup
6093 setup:
6094 <TAB>@touch 1.a 2.a 3.a 4.a 5.a 6.a
6096 define d1
6097 @echo lala \$(1)
6098 @sleep 1
6099 endef
6101 define d2
6102 @echo tyty \$(1)
6103 @sleep 1
6104 endef
6106 %.b : %.a
6107 <TAB>\$(eval CHECKSUM := \$(word 1,\$(shell cat \$^ | $SHA1SUM))) \$(if \$(wildcard \$(CACHEDIR)/\$(CHECKSUM)),\
6108 <TAB>\$(call d1,\$(CHECKSUM)),\
6109 <TAB>\$(call d2,\$(CHECKSUM)))
6111     if test -z "`(cd $TESTGMAKEBUG20033 && $GNUMAKE setup && $GNUMAKE -j)|grep survived`"; then
6112         no_parallelism_make="YES"
6113         AC_MSG_RESULT([yes, disable parallelism])
6114     else
6115         AC_MSG_RESULT([no, keep parallelism enabled])
6116     fi
6117     rm -rf $TESTGMAKEBUG20033
6118 else
6119     AC_MSG_ERROR([failed ($GNUMAKE version >= 3.81 needed])
6122 # find if gnumake support file function
6123 AC_MSG_CHECKING([whether GNU Make supports the 'file' function])
6124 TESTGMAKEFILEFUNC="`mktemp -d -t tst.XXXXXX`"
6125 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6126     TESTGMAKEFILEFUNC=`cygpath -m $TESTGMAKEFILEFUNC`
6128 $SED -e "s/<TAB>/$TAB/" > $TESTGMAKEFILEFUNC/Makefile << EOF
6129 \$(file >test.txt,Success )
6131 .PHONY: all
6132 all:
6133 <TAB>@cat test.txt
6136 $GNUMAKE -C $TESTGMAKEFILEFUNC 2>/dev/null 1>&2
6137 if test -f $TESTGMAKEFILEFUNC/test.txt; then
6138     HAVE_GNUMAKE_FILE_FUNC=TRUE
6139     AC_MSG_RESULT([yes])
6140 else
6141     AC_MSG_RESULT([no])
6143 rm -rf $TESTGMAKEFILEFUNC
6144 AC_SUBST(HAVE_GNUMAKE_FILE_FUNC)
6146 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6147 STALE_MAKE=
6148 if test "$_make_ver_check" = ""; then
6149    STALE_MAKE=TRUE
6152 HAVE_LD_HASH_STYLE=FALSE
6153 WITH_LINKER_HASH_STYLE=
6154 AC_MSG_CHECKING([for --hash-style gcc linker support])
6155 if test "$GCC" = "yes"; then
6156     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6157         hash_styles="gnu sysv"
6158     elif test "$with_linker_hash_style" = "no"; then
6159         hash_styles=
6160     else
6161         hash_styles="$with_linker_hash_style"
6162     fi
6164     for hash_style in $hash_styles; do
6165         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6166         hash_style_ldflags_save=$LDFLAGS
6167         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6169         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6170             [
6171 #include <stdio.h>
6172             ],[
6173 printf ("");
6174             ])],
6175             [
6176                   HAVE_LD_HASH_STYLE=TRUE
6177                   WITH_LINKER_HASH_STYLE=$hash_style
6178             ],
6179             [HAVE_LD_HASH_STYLE=FALSE],
6180             [HAVE_LD_HASH_STYLE=FALSE])
6181         LDFLAGS=$hash_style_ldflags_save
6182     done
6184     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6185         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6186     else
6187         AC_MSG_RESULT( no )
6188     fi
6189     LDFLAGS=$hash_style_ldflags_save
6190 else
6191     AC_MSG_RESULT( no )
6193 AC_SUBST(HAVE_LD_HASH_STYLE)
6194 AC_SUBST(WITH_LINKER_HASH_STYLE)
6196 dnl ===================================================================
6197 dnl Check whether there's a Perl version available.
6198 dnl ===================================================================
6199 if test -z "$with_perl_home"; then
6200     AC_PATH_PROG(PERL, perl)
6201 else
6202     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6203     _perl_path="$with_perl_home/bin/perl"
6204     if test -x "$_perl_path"; then
6205         PERL=$_perl_path
6206     else
6207         AC_MSG_ERROR([$_perl_path not found])
6208     fi
6211 dnl ===================================================================
6212 dnl Testing for Perl version 5 or greater.
6213 dnl $] is the Perl version variable, it is returned as an integer
6214 dnl ===================================================================
6215 if test "$PERL"; then
6216     AC_MSG_CHECKING([the Perl version])
6217     ${PERL} -e "exit($]);"
6218     _perl_version=$?
6219     if test "$_perl_version" -lt 5; then
6220         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6221     fi
6222     AC_MSG_RESULT([Perl $_perl_version])
6223 else
6224     AC_MSG_ERROR([Perl not found, install Perl 5])
6227 dnl ===================================================================
6228 dnl Testing for required Perl modules
6229 dnl ===================================================================
6231 AC_MSG_CHECKING([for required Perl modules])
6232 perl_use_string="use Cwd ; use Digest::MD5"
6233 if test "$_os" = "WINNT"; then
6234     if test -n "$PKGFORMAT"; then
6235         for i in $PKGFORMAT; do
6236             case "$i" in
6237             msi)
6238                 # for getting fonts versions to use in MSI
6239                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6240                 ;;
6241             esac
6242         done
6243     fi
6245 if test "$with_system_hsqldb" = "yes"; then
6246     perl_use_string="$perl_use_string ; use Archive::Zip"
6248 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6249     # OpenSSL needs that to build
6250     perl_use_string="$perl_use_string ; use FindBin"
6252 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6253     AC_MSG_RESULT([all modules found])
6254 else
6255     AC_MSG_RESULT([failed to find some modules])
6256     # Find out which modules are missing.
6257     for i in $perl_use_string; do
6258         if test "$i" != "use" -a "$i" != ";"; then
6259             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6260                 missing_perl_modules="$missing_perl_modules $i"
6261             fi
6262         fi
6263     done
6264     AC_MSG_ERROR([
6265     The missing Perl modules are: $missing_perl_modules
6266     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6269 dnl ===================================================================
6270 dnl Check for pkg-config
6271 dnl ===================================================================
6272 if test "$_os" != "WINNT"; then
6273     PKG_PROG_PKG_CONFIG
6276 if test "$_os" != "WINNT"; then
6278     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6279     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6280     # explicitly. Or put /path/to/compiler in PATH yourself.
6282     # Use wrappers for LTO
6283     if test "$ENABLE_LTO" = "TRUE" -a "$COM_IS_CLANG" != "TRUE"; then
6284         AC_CHECK_TOOL(AR,gcc-ar)
6285         AC_CHECK_TOOL(NM,gcc-nm)
6286         AC_CHECK_TOOL(RANLIB,gcc-ranlib)
6287     else
6288         AC_CHECK_TOOL(AR,ar)
6289         AC_CHECK_TOOL(NM,nm)
6290         AC_CHECK_TOOL(RANLIB,ranlib)
6291     fi
6292     AC_CHECK_TOOL(OBJDUMP,objdump)
6293     AC_CHECK_TOOL(READELF,readelf)
6294     AC_CHECK_TOOL(STRIP,strip)
6296 AC_SUBST(AR)
6297 AC_SUBST(LD)
6298 AC_SUBST(NM)
6299 AC_SUBST(OBJDUMP)
6300 AC_SUBST(PKG_CONFIG)
6301 AC_SUBST(PKG_CONFIG_PATH)
6302 AC_SUBST(PKG_CONFIG_LIBDIR)
6303 AC_SUBST(RANLIB)
6304 AC_SUBST(READELF)
6305 AC_SUBST(STRIP)
6307 dnl ===================================================================
6308 dnl pkg-config checks on macOS
6309 dnl ===================================================================
6311 if test $_os = Darwin; then
6312     AC_MSG_CHECKING([for bogus pkg-config])
6313     if test -n "$PKG_CONFIG"; then
6314         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6315             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6316         else
6317             if test "$enable_bogus_pkg_config" = "yes"; then
6318                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6319             else
6320                 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.])
6321             fi
6322         fi
6323     else
6324         AC_MSG_RESULT([no, good])
6325     fi
6328 find_csc()
6330     # Return value: $csctest
6332     unset csctest
6334     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client/InstallPath"
6335     if test -n "$regvalue"; then
6336         csctest=$regvalue
6337         return
6338     fi
6341 find_al()
6343     # Return value: $altest
6345     unset altest
6347     # We need this check to detect 4.6.1 or above.
6348     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6349         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools/InstallationFolder"
6350         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6351             altest=$regvalue
6352             return
6353         fi
6354     done
6356     for x in `ls /proc/registry32/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft\ SDKs/Windows`; do
6357         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools/InstallationFolder"
6358         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6359             altest=$regvalue
6360             return
6361         fi
6362     done
6365 find_dotnetsdk46()
6367     unset frametest
6369     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6; do
6370         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder"
6371         if test -n "$regvalue"; then
6372             frametest=$regvalue
6373             return
6374         fi
6375     done
6378 find_winsdk_version()
6380     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6381     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6383     unset winsdktest winsdkbinsubdir winsdklibsubdir
6385     case "$1" in
6386     8.0|8.0A)
6387         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
6388         if test -n "$regvalue"; then
6389             winsdktest=$regvalue
6390             winsdklibsubdir=win8
6391             return
6392         fi
6393         ;;
6394     8.1|8.1A)
6395         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot81"
6396         if test -n "$regvalue"; then
6397             winsdktest=$regvalue
6398             winsdklibsubdir=winv6.3
6399             return
6400         fi
6401         ;;
6402     10.0)
6403         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/InstallationFolder"
6404         if test -n "$regvalue"; then
6405             winsdktest=$regvalue
6406             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion"
6407             if test -n "$regvalue"; then
6408                 winsdkbinsubdir="$regvalue".0
6409                 winsdklibsubdir=$winsdkbinsubdir
6410                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6411                 local tmppath_unix=$(cygpath -u "$tmppath")
6412                 # test exist the SDK path
6413                 if test -d "$tmppath_unix"; then
6414                    # when path is convertible to a short path then path is okay
6415                    cygpath -d "$tmppath" >/dev/null 2>&1
6416                    if test $? -ne 0; then
6417                       AC_MSG_ERROR([Windows SDK doesn't have a 8.3 name, see NtfsDisable8dot3NameCreation])
6418                    fi
6419                 else
6420                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6421                 fi
6422             fi
6423             return
6424         fi
6425         ;;
6426     esac
6429 find_winsdk()
6431     # Return value: From find_winsdk_version
6433     unset winsdktest
6435     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6436         find_winsdk_version $ver
6437         if test -n "$winsdktest"; then
6438             return
6439         fi
6440     done
6443 find_msms()
6445     # Return value: $msmdir
6447     AC_MSG_CHECKING([for MSVC merge modules directory])
6448     local my_msm_files
6449     local my_msm_dir
6451     dnl Order my_msm_files in increasing order. Then check the directories returned
6452     dnl by ls in an inner loop; assuming they are also ordered in increasing order,
6453     dnl the result will be the highest MSM version found in the highest directory.
6455     case "$VCVER" in
6456         16.0 | 17.0)
6457         my_msm_files="Microsoft_VC141_CRT_x86.msm Microsoft_VC142_CRT_x86.msm ${my_msm_files}"
6458         ;;
6459     esac
6460     for f in $my_msm_files; do
6461         echo "$as_me:$LINENO: searching for $f" >&5
6462     done
6464     msmdir=
6465     case "$VCVER" in
6466     16.0 | 17.0)
6467         for f in ${my_msm_files}; do
6468             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6469                 my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6470                 echo "$as_me:$LINENO: looking for $my_msm_dir${f}])" >&5
6471                 if test -e "$my_msm_dir${f}"; then
6472                     msmdir=$my_msm_dir
6473                 fi
6474             done
6475         done
6476         ;;
6477     esac
6479     if test -n "$msmdir"; then
6480         msmdir=`cygpath -m "$msmdir"`
6481         AC_MSG_RESULT([$msmdir])
6482     else
6483         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6484             AC_MSG_FAILURE([not found])
6485         else
6486             AC_MSG_WARN([not found (check config.log)])
6487             add_warning "MSM none of ${my_msm_files} found"
6488         fi
6489     fi
6492 find_msvc_x64_dlls()
6494     # Return value: $msvcdllpath, $msvcdlls
6496     AC_MSG_CHECKING([for MSVC x64 DLL path])
6498     dnl Order crtver in increasing order. Then check the directories returned by
6499     dnl ls in an inner loop; assuming they are also ordered in increasing order,
6500     dnl the result will be the highest CRT version found in the highest directory.
6502     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6503     case "$VCVER" in
6504     16.0 | 17.0)
6505         for crtver in 141 142 143; do
6506             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6507                 echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT" >&5
6508                 if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"; then
6509                     msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"
6510                 fi
6511             done
6512         done
6513         ;;
6514     esac
6515     AC_MSG_RESULT([$msvcdllpath])
6516     AC_MSG_CHECKING([for MSVC x64 DLLs])
6517     msvcdlls="msvcp140.dll vcruntime140.dll"
6518     for dll in $msvcdlls; do
6519         if ! test -f "$msvcdllpath/$dll"; then
6520             AC_MSG_FAILURE([missing $dll])
6521         fi
6522     done
6523     AC_MSG_RESULT([found all ($msvcdlls)])
6526 dnl =========================================
6527 dnl Check for the Windows  SDK.
6528 dnl =========================================
6529 if test "$_os" = "WINNT"; then
6530     AC_MSG_CHECKING([for Windows SDK])
6531     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6532         find_winsdk
6533         WINDOWS_SDK_HOME=$winsdktest
6535         # normalize if found
6536         if test -n "$WINDOWS_SDK_HOME"; then
6537             WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
6538             WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
6539         fi
6541         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6542     fi
6544     if test -n "$WINDOWS_SDK_HOME"; then
6545         # Remove a possible trailing backslash
6546         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6548         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6549              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6550              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6551             have_windows_sdk_headers=yes
6552         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6553              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6554              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6555             have_windows_sdk_headers=yes
6556         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6557              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6558              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6559             have_windows_sdk_headers=yes
6560         else
6561             have_windows_sdk_headers=no
6562         fi
6564         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6565             have_windows_sdk_libs=yes
6566         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6567             have_windows_sdk_libs=yes
6568         else
6569             have_windows_sdk_libs=no
6570         fi
6572         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6573             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6574 the  Windows SDK are installed.])
6575         fi
6576     fi
6578     if test -z "$WINDOWS_SDK_HOME"; then
6579         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6580     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6581         WINDOWS_SDK_VERSION=80
6582         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6583     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6584         WINDOWS_SDK_VERSION=81
6585         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6586     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6587         WINDOWS_SDK_VERSION=10
6588         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6589     else
6590         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6591     fi
6592     PathFormat "$WINDOWS_SDK_HOME"
6593     WINDOWS_SDK_HOME="$formatted_path"
6594     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6595     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6596         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6597         if test -d "$WINDOWS_SDK_HOME/include/um"; then
6598             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6599         elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then
6600             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6601         fi
6602     fi
6604     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6605     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6606     dnl but not in v8.0), so allow this to be overridden with a
6607     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6608     dnl and configuration error if no WiLangId.vbs is found would arguably be
6609     dnl better, but I do not know under which conditions exactly it is needed by
6610     dnl msiglobal.pm:
6611     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6612         WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6613         WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6614         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6615             WINDOWS_SDK_WILANGID="${WINDOWS_SDK_HOME}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6616             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6617         fi
6618         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6619             WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6620             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6621         fi
6622         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6623             WINDOWS_SDK_WILANGID=$(cygpath -sm "C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs")
6624             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6625         fi
6626     fi
6627     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6628         if test -n "$with_package_format" -a "$with_package_format" != no; then
6629             for i in "$with_package_format"; do
6630                 if test "$i" = "msi"; then
6631                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6632                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6633                     fi
6634                 fi
6635             done
6636         fi
6637     fi
6639 AC_SUBST(WINDOWS_SDK_HOME)
6640 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6641 AC_SUBST(WINDOWS_SDK_VERSION)
6642 AC_SUBST(WINDOWS_SDK_WILANGID)
6644 if test "$build_os" = "cygwin"; then
6645     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6646     dnl dir, it also determines that dir's path w/o an arch segment if any,
6647     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6648     AC_MSG_CHECKING([for midl.exe])
6650     find_winsdk
6651     if test -n "$winsdkbinsubdir" \
6652         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6653     then
6654         MIDL_PATH=$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6655         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin/$winsdkbinsubdir
6656     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6657         MIDL_PATH=$winsdktest/Bin/$WIN_BUILD_ARCH
6658         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6659     elif test -f "$winsdktest/Bin/midl.exe"; then
6660         MIDL_PATH=$winsdktest/Bin
6661         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6662     fi
6663     if test ! -f "$MIDL_PATH/midl.exe"; then
6664         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6665     else
6666         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6667     fi
6669     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6670     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6672     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6673          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6674          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6675          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6676     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6677          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6678          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6679          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
6680     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
6681          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
6682          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6683          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
6684     else
6685         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
6686     fi
6688     dnl Check csc.exe
6689     AC_MSG_CHECKING([for csc.exe])
6690     find_csc
6691     if test -f "$csctest/csc.exe"; then
6692         CSC_PATH="$csctest"
6693     fi
6694     if test ! -f "$CSC_PATH/csc.exe"; then
6695         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
6696     else
6697         AC_MSG_RESULT([$CSC_PATH/csc.exe])
6698     fi
6700     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
6702     dnl Check al.exe
6703     AC_MSG_CHECKING([for al.exe])
6704     find_winsdk
6705     if test -n "$winsdkbinsubdir" \
6706         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
6707     then
6708         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
6709     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/al.exe"; then
6710         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
6711     elif test -f "$winsdktest/Bin/al.exe"; then
6712         AL_PATH="$winsdktest/Bin"
6713     fi
6715     if test -z "$AL_PATH"; then
6716         find_al
6717         if test -f "$altest/bin/al.exe"; then
6718             AL_PATH="$altest/bin"
6719         elif test -f "$altest/al.exe"; then
6720             AL_PATH="$altest"
6721         fi
6722     fi
6723     if test ! -f "$AL_PATH/al.exe"; then
6724         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
6725     else
6726         AC_MSG_RESULT([$AL_PATH/al.exe])
6727     fi
6729     AL_PATH=`win_short_path_for_make "$AL_PATH"`
6731     dnl Check mscoree.lib / .NET Framework dir
6732     AC_MSG_CHECKING(.NET Framework)
6733     find_dotnetsdk46
6734     PathFormat "$frametest"
6735     frametest="$formatted_path"
6736     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6737         DOTNET_FRAMEWORK_HOME="$frametest"
6738     else
6739         find_winsdk
6740         if test -f "$winsdktest/lib/mscoree.lib" -o -f "$winsdktest/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6741             DOTNET_FRAMEWORK_HOME="$winsdktest"
6742         fi
6743     fi
6744     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
6745         AC_MSG_ERROR([mscoree.lib not found])
6746     fi
6747     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
6749     PathFormat "$MIDL_PATH"
6750     MIDL_PATH="$formatted_path"
6752     PathFormat "$AL_PATH"
6753     AL_PATH="$formatted_path"
6755     PathFormat "$DOTNET_FRAMEWORK_HOME"
6756     DOTNET_FRAMEWORK_HOME="$formatted_path"
6758     PathFormat "$CSC_PATH"
6759     CSC_PATH="$formatted_path"
6762 dnl ===================================================================
6763 dnl Testing for C++ compiler and version...
6764 dnl ===================================================================
6766 if test "$_os" != "WINNT"; then
6767     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that
6768     save_CXXFLAGS=$CXXFLAGS
6769     AC_PROG_CXX
6770     CXXFLAGS=$save_CXXFLAGS
6771     if test -z "$CXX_BASE"; then
6772         CXX_BASE=`first_arg_basename "$CXX"`
6773     fi
6776 dnl check for GNU C++ compiler version
6777 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
6778     AC_MSG_CHECKING([the GNU C++ compiler version])
6780     _gpp_version=`$CXX -dumpversion`
6781     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
6783     if test "$_gpp_majmin" -lt "700"; then
6784         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
6785     else
6786         AC_MSG_RESULT([ok (g++ $_gpp_version)])
6787     fi
6789     dnl see https://code.google.com/p/android/issues/detail?id=41770
6790         glibcxx_threads=no
6791         AC_LANG_PUSH([C++])
6792         AC_REQUIRE_CPP
6793         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
6794         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
6795             #include <bits/c++config.h>]],[[
6796             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
6797             && !defined(_GLIBCXX__PTHREADS) \
6798             && !defined(_GLIBCXX_HAS_GTHREADS)
6799             choke me
6800             #endif
6801         ]])],[AC_MSG_RESULT([yes])
6802         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
6803         AC_LANG_POP([C++])
6804         if test $glibcxx_threads = yes; then
6805             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
6806         fi
6808 AC_SUBST(BOOST_CXXFLAGS)
6811 # prefx CXX with ccache if needed
6813 if test "$CCACHE" != ""; then
6814     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
6815     AC_LANG_PUSH([C++])
6816     save_CXXFLAGS=$CXXFLAGS
6817     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
6818     # msvc does not fail on unknown options, check stdout
6819     if test "$COM" = MSC; then
6820         CXXFLAGS="$CXXFLAGS -nologo"
6821     fi
6822     save_ac_cxx_werror_flag=$ac_cxx_werror_flag
6823     ac_cxx_werror_flag=yes
6824     dnl an empty program will do, we're checking the compiler flags
6825     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
6826                       [use_ccache=yes], [use_ccache=no])
6827     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
6828         AC_MSG_RESULT([yes])
6829     else
6830         CXX="$CCACHE $CXX"
6831         CXX_BASE="ccache $CXX_BASE"
6832         AC_MSG_RESULT([no])
6833     fi
6834     CXXFLAGS=$save_CXXFLAGS
6835     ac_cxx_werror_flag=$save_ac_cxx_werror_flag
6836     AC_LANG_POP([C++])
6839 dnl ===================================================================
6840 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
6841 dnl ===================================================================
6843 if test "$_os" != "WINNT"; then
6844     AC_PROG_CXXCPP
6846     dnl Check whether there's a C pre-processor.
6847     AC_PROG_CPP
6851 dnl ===================================================================
6852 dnl Find integral type sizes and alignments
6853 dnl ===================================================================
6855 if test "$_os" != "WINNT"; then
6857     AC_CHECK_SIZEOF(long)
6858     AC_CHECK_SIZEOF(short)
6859     AC_CHECK_SIZEOF(int)
6860     AC_CHECK_SIZEOF(long long)
6861     AC_CHECK_SIZEOF(double)
6862     AC_CHECK_SIZEOF(void*)
6863     AC_CHECK_SIZEOF(size_t)
6865     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
6866     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
6867     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
6868     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
6869     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
6870     SIZEOF_SIZE_T=$ac_cv_sizeof_size_t
6872     dnl Allow build without AC_CHECK_ALIGNOF, grrr
6873     m4_pattern_allow([AC_CHECK_ALIGNOF])
6874     m4_ifdef([AC_CHECK_ALIGNOF],
6875         [
6876             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
6877             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
6878             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
6879             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
6880         ],
6881         [
6882             case "$_os-$host_cpu" in
6883             Linux-i686)
6884                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6885                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6886                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
6887                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
6888                 ;;
6889             Linux-x86_64)
6890                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6891                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6892                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
6893                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
6894                 ;;
6895             *)
6896                 if test -z "$ac_cv_alignof_short" -o \
6897                         -z "$ac_cv_alignof_int" -o \
6898                         -z "$ac_cv_alignof_long" -o \
6899                         -z "$ac_cv_alignof_double"; then
6900                    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.])
6901                 fi
6902                 ;;
6903             esac
6904         ])
6906     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
6907     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
6908     if test $ac_cv_sizeof_long -eq 8; then
6909         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
6910     elif test $ac_cv_sizeof_double -eq 8; then
6911         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
6912     else
6913         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
6914     fi
6916     dnl Check for large file support
6917     AC_SYS_LARGEFILE
6918     if test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
6919         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
6920     fi
6921     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
6922         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
6923     fi
6924 else
6925     # Hardcode for MSVC
6926     SAL_TYPES_SIZEOFSHORT=2
6927     SAL_TYPES_SIZEOFINT=4
6928     SAL_TYPES_SIZEOFLONG=4
6929     SAL_TYPES_SIZEOFLONGLONG=8
6930     if test $WIN_HOST_BITS -eq 32; then
6931         SAL_TYPES_SIZEOFPOINTER=4
6932         SIZEOF_SIZE_T=4
6933     else
6934         SAL_TYPES_SIZEOFPOINTER=8
6935         SIZEOF_SIZE_T=8
6936     fi
6937     SAL_TYPES_ALIGNMENT2=2
6938     SAL_TYPES_ALIGNMENT4=4
6939     SAL_TYPES_ALIGNMENT8=8
6940     LFS_CFLAGS=''
6942 AC_SUBST(LFS_CFLAGS)
6943 AC_SUBST(SIZEOF_SIZE_T)
6945 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
6946 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
6947 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
6948 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
6949 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
6950 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
6951 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
6952 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
6954 dnl ===================================================================
6955 dnl Check whether to enable runtime optimizations
6956 dnl ===================================================================
6957 ENABLE_RUNTIME_OPTIMIZATIONS=
6958 AC_MSG_CHECKING([whether to enable runtime optimizations])
6959 if test -z "$enable_runtime_optimizations"; then
6960     for i in $CC; do
6961         case $i in
6962         -fsanitize=*)
6963             enable_runtime_optimizations=no
6964             break
6965             ;;
6966         esac
6967     done
6969 if test "$enable_runtime_optimizations" != no; then
6970     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
6971     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
6972     AC_MSG_RESULT([yes])
6973 else
6974     AC_MSG_RESULT([no])
6976 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
6978 dnl ===================================================================
6979 dnl Check if valgrind headers are available
6980 dnl ===================================================================
6981 ENABLE_VALGRIND=
6982 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
6983     prev_cppflags=$CPPFLAGS
6984     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
6985     # or where does it come from?
6986     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
6987     AC_CHECK_HEADER([valgrind/valgrind.h],
6988         [ENABLE_VALGRIND=TRUE])
6989     CPPFLAGS=$prev_cppflags
6991 AC_SUBST([ENABLE_VALGRIND])
6992 if test -z "$ENABLE_VALGRIND"; then
6993     if test "$with_valgrind" = yes; then
6994         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
6995     fi
6996     VALGRIND_CFLAGS=
6998 AC_SUBST([VALGRIND_CFLAGS])
7001 dnl ===================================================================
7002 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
7003 dnl ===================================================================
7005 # We need at least the sys/sdt.h include header.
7006 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
7007 if test "$SDT_H_FOUND" = "TRUE"; then
7008     # Found sys/sdt.h header, now make sure the c++ compiler works.
7009     # Old g++ versions had problems with probes in constructors/destructors.
7010     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
7011     AC_LANG_PUSH([C++])
7012     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
7013     #include <sys/sdt.h>
7014     class ProbeClass
7015     {
7016     private:
7017       int& ref;
7018       const char *name;
7020     public:
7021       ProbeClass(int& v, const char *n) : ref(v), name(n)
7022       {
7023         DTRACE_PROBE2(_test_, cons, name, ref);
7024       }
7026       void method(int min)
7027       {
7028         DTRACE_PROBE3(_test_, meth, name, ref, min);
7029         ref -= min;
7030       }
7032       ~ProbeClass()
7033       {
7034         DTRACE_PROBE2(_test_, dest, name, ref);
7035       }
7036     };
7037     ]],[[
7038     int i = 64;
7039     DTRACE_PROBE1(_test_, call, i);
7040     ProbeClass inst = ProbeClass(i, "call");
7041     inst.method(24);
7042     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
7043           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
7044     AC_LANG_POP([C++])
7046 AC_CONFIG_HEADERS([config_host/config_probes.h])
7048 dnl ===================================================================
7049 dnl GCC features
7050 dnl ===================================================================
7051 HAVE_GCC_STACK_CLASH_PROTECTION=
7052 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7053     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
7054     save_CFLAGS=$CFLAGS
7055     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
7056     AC_LINK_IFELSE(
7057         [AC_LANG_PROGRAM(, [[return 0;]])],
7058         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
7059         [AC_MSG_RESULT([no])])
7060     CFLAGS=$save_CFLAGS
7062     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
7063     save_CFLAGS=$CFLAGS
7064     CFLAGS="$CFLAGS -Werror -mno-avx"
7065     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
7066     CFLAGS=$save_CFLAGS
7067     if test "$HAVE_GCC_AVX" = "TRUE"; then
7068         AC_MSG_RESULT([yes])
7069     else
7070         AC_MSG_RESULT([no])
7071     fi
7073     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
7074     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7075     int v = 0;
7076     if (__sync_add_and_fetch(&v, 1) != 1 ||
7077         __sync_sub_and_fetch(&v, 1) != 0)
7078         return 1;
7079     __sync_synchronize();
7080     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
7081         v != 1)
7082         return 1;
7083     return 0;
7084 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
7085     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
7086         AC_MSG_RESULT([yes])
7087         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
7088     else
7089         AC_MSG_RESULT([no])
7090     fi
7092     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
7093     AC_LANG_PUSH([C++])
7094     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7095             #include <cstddef>
7096             #include <cxxabi.h>
7097             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
7098         ])], [
7099             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
7100             AC_MSG_RESULT([yes])
7101         ], [AC_MSG_RESULT([no])])
7102     AC_LANG_POP([C++])
7104     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
7105     AC_LANG_PUSH([C++])
7106     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7107             #include <cstddef>
7108             #include <cxxabi.h>
7109             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7110         ])], [
7111             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7112             AC_MSG_RESULT([yes])
7113         ], [AC_MSG_RESULT([no])])
7114     AC_LANG_POP([C++])
7116     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7117     AC_LANG_PUSH([C++])
7118     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7119             #include <cxxabi.h>
7120             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7121         ])], [
7122             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7123             AC_MSG_RESULT([yes])
7124         ], [AC_MSG_RESULT([no])])
7125     AC_LANG_POP([C++])
7127     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7128     AC_LANG_PUSH([C++])
7129     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7130             #include <cstddef>
7131             #include <cxxabi.h>
7132             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7133         ])], [
7134             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7135             AC_MSG_RESULT([yes])
7136         ], [AC_MSG_RESULT([no])])
7137     AC_LANG_POP([C++])
7139     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7140     AC_LANG_PUSH([C++])
7141     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7142             #include <cstddef>
7143             #include <cxxabi.h>
7144             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7145         ])], [
7146             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7147             AC_MSG_RESULT([yes])
7148         ], [AC_MSG_RESULT([no])])
7149     AC_LANG_POP([C++])
7151     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7152     AC_LANG_PUSH([C++])
7153     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7154             #include <cxxabi.h>
7155             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7156         ])], [
7157             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7158             AC_MSG_RESULT([yes])
7159         ], [AC_MSG_RESULT([no])])
7160     AC_LANG_POP([C++])
7162     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7163     AC_LANG_PUSH([C++])
7164     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7165             #include <cxxabi.h>
7166             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7167         ])], [
7168             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7169             AC_MSG_RESULT([yes])
7170         ], [AC_MSG_RESULT([no])])
7171     AC_LANG_POP([C++])
7173     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7174     AC_LANG_PUSH([C++])
7175     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7176             #include <cxxabi.h>
7177             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7178         ])], [
7179             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7180             AC_MSG_RESULT([yes])
7181         ], [AC_MSG_RESULT([no])])
7182     AC_LANG_POP([C++])
7184     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info in cxxabi.h])
7185     AC_LANG_PUSH([C++])
7186     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7187             #include <cstddef>
7188             #include <cxxabi.h>
7189             std::size_t f() { return sizeof(__cxxabiv1::__si_class_type_info); }
7190         ])], [
7191             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7192             AC_MSG_RESULT([yes])
7193         ], [AC_MSG_RESULT([no])])
7194     AC_LANG_POP([C++])
7196     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7197     AC_LANG_PUSH([C++])
7198     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7199             #include <cstddef>
7200             #include <cxxabi.h>
7201             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7202         ])], [
7203             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7204             AC_MSG_RESULT([yes])
7205         ], [AC_MSG_RESULT([no])])
7206     AC_LANG_POP([C++])
7209 AC_SUBST(HAVE_GCC_AVX)
7210 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7211 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7213 dnl ===================================================================
7214 dnl Identify the C++ library
7215 dnl ===================================================================
7217 AC_MSG_CHECKING([what the C++ library is])
7218 HAVE_LIBSTDCPP=
7219 AC_LANG_PUSH([C++])
7220 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7221 #include <utility>
7222 #ifndef __GLIBCXX__
7223 foo bar
7224 #endif
7225 ]])],
7226     [CPP_LIBRARY=GLIBCXX
7227      cpp_library_name="GNU libstdc++"
7228      HAVE_LIBSTDCPP=TRUE
7229     ],
7230     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7231 #include <utility>
7232 #ifndef _LIBCPP_VERSION
7233 foo bar
7234 #endif
7235 ]])],
7236     [CPP_LIBRARY=LIBCPP
7237      cpp_library_name="LLVM libc++"
7238      AC_DEFINE([HAVE_LIBCXX])
7239     ],
7240     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7241 #include <utility>
7242 #ifndef _MSC_VER
7243 foo bar
7244 #endif
7245 ]])],
7246     [CPP_LIBRARY=MSVCRT
7247      cpp_library_name="Microsoft"
7248     ],
7249     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7250 AC_MSG_RESULT([$cpp_library_name])
7251 AC_LANG_POP([C++])
7252 AC_SUBST([HAVE_LIBSTDCPP])
7254 dnl ===================================================================
7255 dnl Check for gperf
7256 dnl ===================================================================
7257 AC_PATH_PROG(GPERF, gperf)
7258 if test -z "$GPERF"; then
7259     AC_MSG_ERROR([gperf not found but needed. Install it.])
7261 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7262     GPERF=`cygpath -m $GPERF`
7264 AC_MSG_CHECKING([whether gperf is new enough])
7265 my_gperf_ver1=$($GPERF --version | head -n 1)
7266 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7267 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7268 if test "$my_gperf_ver3" -ge 301; then
7269     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7270 else
7271     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7273 AC_SUBST(GPERF)
7275 dnl ===================================================================
7276 dnl Check for system libcmis
7277 dnl ===================================================================
7278 # libcmis requires curl and we can't build curl for iOS
7279 if test "$test_cmis" = "yes" -a "$enable_cmis" = "yes"; then
7280     libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.5 >= 0.5.2])
7281     ENABLE_LIBCMIS=TRUE
7282 else
7283     ENABLE_LIBCMIS=
7285 AC_SUBST(ENABLE_LIBCMIS)
7287 dnl ===================================================================
7288 dnl C++11
7289 dnl ===================================================================
7291 AC_MSG_CHECKING([whether $CXX_BASE supports C++17])
7292 CXXFLAGS_CXX11=
7293 if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7294     if test "$with_latest_c__" = yes; then
7295         CXXFLAGS_CXX11=-std:c++latest
7296     else
7297         CXXFLAGS_CXX11=-std:c++17
7298     fi
7299     CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus"
7300 elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7301     my_flags='-std=c++17 -std=c++1z'
7302     if test "$with_latest_c__" = yes; then
7303         my_flags="-std=c++23 -std=c++2b -std=c++20 -std=c++2a $my_flags"
7304     fi
7305     for flag in $my_flags; do
7306         if test "$COM" = MSC; then
7307             flag="-Xclang $flag"
7308         fi
7309         save_CXXFLAGS=$CXXFLAGS
7310         CXXFLAGS="$CXXFLAGS $flag -Werror"
7311         if test "$SYSTEM_LIBCMIS" = TRUE; then
7312             CXXFLAGS="$CXXFLAGS -DSYSTEM_LIBCMIS $LIBCMIS_CFLAGS"
7313         fi
7314         AC_LANG_PUSH([C++])
7315         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7316             #include <algorithm>
7317             #include <functional>
7318             #include <vector>
7320             #if defined SYSTEM_LIBCMIS
7321             // See ucb/source/ucp/cmis/auth_provider.hxx:
7322             #if !defined __clang__
7323             #pragma GCC diagnostic push
7324             #pragma GCC diagnostic ignored "-Wdeprecated"
7325             #pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
7326             #endif
7327             #include <libcmis/libcmis.hxx>
7328             #if !defined __clang__
7329             #pragma GCC diagnostic pop
7330             #endif
7331             #endif
7333             void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7334                 std::sort(v.begin(), v.end(), fn);
7335             }
7336             ]])],[CXXFLAGS_CXX11=$flag])
7337         AC_LANG_POP([C++])
7338         CXXFLAGS=$save_CXXFLAGS
7339         if test -n "$CXXFLAGS_CXX11"; then
7340             break
7341         fi
7342     done
7344 if test -n "$CXXFLAGS_CXX11"; then
7345     AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7346 else
7347     AC_MSG_ERROR(no)
7349 AC_SUBST(CXXFLAGS_CXX11)
7351 if test "$GCC" = "yes"; then
7352     save_CXXFLAGS=$CXXFLAGS
7353     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7354     CHECK_L_ATOMIC
7355     CXXFLAGS=$save_CXXFLAGS
7356     AC_SUBST(ATOMIC_LIB)
7359 dnl Test for temporarily incompatible libstdc++ 4.7.{0,1}, where
7360 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=179528> introduced
7361 dnl an additional member _M_size into C++11 std::list towards 4.7.0 and
7362 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=189186> removed it
7363 dnl again towards 4.7.2:
7364 if test $CPP_LIBRARY = GLIBCXX; then
7365     AC_MSG_CHECKING([whether using C++11 causes libstdc++ 4.7.0/4.7.1 ABI breakage])
7366     AC_LANG_PUSH([C++])
7367     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7368 #include <list>
7369 #if !defined __GLIBCXX__ || (__GLIBCXX__ != 20120322 && __GLIBCXX__ != 20120614)
7370     // according to <https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html>:
7371     //   GCC 4.7.0: 20120322
7372     //   GCC 4.7.1: 20120614
7373     // and using a range check is not possible as the mapping between
7374     // __GLIBCXX__ values and GCC versions is not monotonic
7375 /* ok */
7376 #else
7377 abi broken
7378 #endif
7379         ]])], [AC_MSG_RESULT(no, ok)],
7380         [AC_MSG_ERROR(yes)])
7381     AC_LANG_POP([C++])
7384 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7385 save_CXXFLAGS=$CXXFLAGS
7386 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7387 AC_LANG_PUSH([C++])
7389 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7390 #include <stddef.h>
7392 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7394 namespace
7396         struct b
7397         {
7398                 int i;
7399                 int j;
7400         };
7402 ]], [[
7403 struct a
7405         int i;
7406         int j;
7408 a thinga[]={{0,0}, {1,1}};
7409 b thingb[]={{0,0}, {1,1}};
7410 size_t i = sizeof(sal_n_array_size(thinga));
7411 size_t j = sizeof(sal_n_array_size(thingb));
7412 return !(i != 0 && j != 0);
7414     ], [ AC_MSG_RESULT(yes) ],
7415     [ AC_MSG_ERROR(no)])
7416 AC_LANG_POP([C++])
7417 CXXFLAGS=$save_CXXFLAGS
7419 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7420 if test "$GCC" = yes; then
7421     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7422     AC_LANG_PUSH([C++])
7423     save_CXXFLAGS=$CXXFLAGS
7424     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7425     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7426     CXXFLAGS=$save_CXXFLAGS
7427     AC_LANG_POP([C++])
7428     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7429         AC_MSG_RESULT([yes])
7430     else
7431         AC_MSG_RESULT([no])
7432     fi
7434 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7436 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7437 AC_LANG_PUSH([C++])
7438 save_CXXFLAGS=$CXXFLAGS
7439 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7440 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7441         #include <algorithm>
7442         #include <initializer_list>
7443         #include <vector>
7444         template<typename T> class S {
7445         private:
7446             std::vector<T> v_;
7447         public:
7448             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7449         };
7450         constinit S<int> s{3, 2, 1};
7451     ])], [
7452         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7453         AC_MSG_RESULT([yes])
7454     ], [AC_MSG_RESULT([no])])
7455 CXXFLAGS=$save_CXXFLAGS
7456 AC_LANG_POP([C++])
7458 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a <span> with unsigned size_type])
7459 AC_LANG_PUSH([C++])
7460 save_CXXFLAGS=$CXXFLAGS
7461 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7462 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7463         #include <span>
7464         #include <type_traits>
7465         // Don't check size_type directly, as it was called index_type before P1872R0:
7466         void f(std::span<int> s) { static_assert(std::is_unsigned_v<decltype(s.size())>); };
7467     ])], [
7468         AC_DEFINE([HAVE_CPP_SPAN],[1])
7469         AC_MSG_RESULT([yes])
7470     ], [AC_MSG_RESULT([no])])
7471 CXXFLAGS=$save_CXXFLAGS
7472 AC_LANG_POP([C++])
7474 AC_MSG_CHECKING([whether $CXX_BASE implements C++ DR P1155R3])
7475 AC_LANG_PUSH([C++])
7476 save_CXXFLAGS=$CXXFLAGS
7477 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7478 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7479         struct S1 { S1(S1 &&); };
7480         struct S2: S1 {};
7481         S1 f(S2 s) { return s; }
7482     ])], [
7483         AC_DEFINE([HAVE_P1155R3],[1])
7484         AC_MSG_RESULT([yes])
7485     ], [AC_MSG_RESULT([no])])
7486 CXXFLAGS=$save_CXXFLAGS
7487 AC_LANG_POP([C++])
7489 AC_MSG_CHECKING([whether $CXX_BASE supports C++20 std::atomic_ref])
7490 HAVE_CXX20_ATOMIC_REF=
7491 AC_LANG_PUSH([C++])
7492 save_CXXFLAGS=$CXXFLAGS
7493 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7494 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7495         #include <atomic>
7496         int x;
7497         std::atomic_ref<int> y(x);
7498     ])], [
7499         HAVE_CXX20_ATOMIC_REF=TRUE
7500         AC_MSG_RESULT([yes])
7501     ], [AC_MSG_RESULT([no])])
7502 CXXFLAGS=$save_CXXFLAGS
7503 AC_LANG_POP([C++])
7504 AC_SUBST([HAVE_CXX20_ATOMIC_REF])
7506 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7507 dnl which is included in -Wextra anyway):
7508 HAVE_WDEPRECATED_COPY_DTOR=
7509 if test "$GCC" = yes; then
7510     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7511     AC_LANG_PUSH([C++])
7512     save_CXXFLAGS=$CXXFLAGS
7513     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7514     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7515             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7516             AC_MSG_RESULT([yes])
7517         ], [AC_MSG_RESULT([no])])
7518     CXXFLAGS=$save_CXXFLAGS
7519     AC_LANG_POP([C++])
7521 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7523 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7524 dnl uninitialized warning for code like
7526 dnl   OString f();
7527 dnl   boost::optional<OString> * g(bool b) {
7528 dnl       boost::optional<OString> o;
7529 dnl       if (b) o = f();
7530 dnl       return new boost::optional<OString>(o);
7531 dnl   }
7533 dnl (as is e.g. present, in a slightly more elaborate form, in
7534 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7535 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7536 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7537 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7538     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7539     AC_LANG_PUSH([C++])
7540     save_CXXFLAGS=$CXXFLAGS
7541     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7542     if test "$ENABLE_OPTIMIZED" = TRUE; then
7543         CXXFLAGS="$CXXFLAGS -O2"
7544     else
7545         CXXFLAGS="$CXXFLAGS -O0"
7546     fi
7547     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7548             #include <new>
7549             void f1(int);
7550             struct S1 {
7551                 ~S1() { f1(n); }
7552                 int n = 0;
7553             };
7554             struct S2 {
7555                 S2() {}
7556                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7557                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7558                 void set(S1 s) {
7559                     new (stg) S1(s);
7560                     init = true;
7561                 }
7562                 bool init = false;
7563                 char stg[sizeof (S1)];
7564             } ;
7565             S1 f2();
7566             S2 * f3(bool b) {
7567                 S2 o;
7568                 if (b) o.set(f2());
7569                 return new S2(o);
7570             }
7571         ]])], [AC_MSG_RESULT([no])], [
7572             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7573             AC_MSG_RESULT([yes])
7574         ])
7575     CXXFLAGS=$save_CXXFLAGS
7576     AC_LANG_POP([C++])
7578 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7580 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7581 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7582 dnl hits us e.g. with GCC 10 and --enable-optimized at
7584 dnl   In file included from include/rtl/string.hxx:49,
7585 dnl                    from include/rtl/ustring.hxx:43,
7586 dnl                    from include/osl/file.hxx:35,
7587 dnl                    from include/codemaker/global.hxx:28,
7588 dnl                    from include/codemaker/options.hxx:23,
7589 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7590 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7591 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,
7592 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,
7593 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,
7594 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7595 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7596 dnl      78 |         memcpy( buffer, data, length );
7597 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7598 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7599 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7600     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7601     AC_LANG_PUSH([C++])
7602     save_CXXFLAGS=$CXXFLAGS
7603     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7604     if test "$ENABLE_OPTIMIZED" = TRUE; then
7605         CXXFLAGS="$CXXFLAGS -O2"
7606     else
7607         CXXFLAGS="$CXXFLAGS -O0"
7608     fi
7609     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7610     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7611             void fill(char const * begin, char const * end, char c);
7612             struct q {
7613                 char ids[4];
7614                 char username[6];
7615             };
7616             void test(q & c) {
7617                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
7618                 __builtin_strncpy(c.username, "root", sizeof(c.username));
7619             }
7620         ]])], [AC_MSG_RESULT([no])], [
7621             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
7622             AC_MSG_RESULT([yes])
7623         ])
7624     CXXFLAGS=$save_CXXFLAGS
7625     AC_LANG_POP([C++])
7627 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
7629 HAVE_DLLEXPORTINLINES=
7630 if test "$_os" = "WINNT"; then
7631     AC_MSG_CHECKING([whether $CXX_BASE supports -Zc:dllexportInlines-])
7632     AC_LANG_PUSH([C++])
7633     save_CXXFLAGS=$CXXFLAGS
7634     CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
7635     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7636             HAVE_DLLEXPORTINLINES=TRUE
7637             AC_MSG_RESULT([yes])
7638         ], [AC_MSG_RESULT([no])])
7639     CXXFLAGS=$save_CXXFLAGS
7640     AC_LANG_POP([C++])
7642 AC_SUBST([HAVE_DLLEXPORTINLINES])
7644 dnl ===================================================================
7645 dnl CPU Intrinsics support - SSE, AVX
7646 dnl ===================================================================
7648 CXXFLAGS_INTRINSICS_SSE2=
7649 CXXFLAGS_INTRINSICS_SSSE3=
7650 CXXFLAGS_INTRINSICS_SSE41=
7651 CXXFLAGS_INTRINSICS_SSE42=
7652 CXXFLAGS_INTRINSICS_AVX=
7653 CXXFLAGS_INTRINSICS_AVX2=
7654 CXXFLAGS_INTRINSICS_AVX512=
7655 CXXFLAGS_INTRINSICS_AVX512F=
7656 CXXFLAGS_INTRINSICS_F16C=
7657 CXXFLAGS_INTRINSICS_FMA=
7659 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7660     # GCC, Clang or Clang-cl (clang-cl + MSVC's -arch options don't work well together)
7661     flag_sse2=-msse2
7662     flag_ssse3=-mssse3
7663     flag_sse41=-msse4.1
7664     flag_sse42=-msse4.2
7665     flag_avx=-mavx
7666     flag_avx2=-mavx2
7667     flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
7668     flag_avx512f=-mavx512f
7669     flag_f16c=-mf16c
7670     flag_fma=-mfma
7671 else
7672     # https://docs.microsoft.com/en-us/cpp/build/reference/arch-x86
7673     # MSVC seems to differentiate only between SSE and SSE2, where in fact
7674     # SSE2 seems to be SSE2+.
7675     # Even if -arch:SSE2 is the default, set it explicitly, so that the variable
7676     # is not empty (and can be tested in gbuild).
7677     flag_sse2=-arch:SSE2
7678     flag_ssse3=-arch:SSE2
7679     flag_sse41=-arch:SSE2
7680     flag_sse42=-arch:SSE2
7681     flag_avx=-arch:AVX
7682     flag_avx2=-arch:AVX2
7683     flag_avx512=-arch:AVX512
7684     flag_avx512f=-arch:AVX512
7685     # These are part of -arch:AVX2
7686     flag_f16c=-arch:AVX2
7687     flag_fma=-arch:AVX2
7690 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
7691 AC_LANG_PUSH([C++])
7692 save_CXXFLAGS=$CXXFLAGS
7693 CXXFLAGS="$CXXFLAGS $flag_sse2"
7694 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7695     #include <emmintrin.h>
7696     int main () {
7697         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7698         c = _mm_xor_si128 (a, b);
7699         return 0;
7700     }
7701     ])],
7702     [can_compile_sse2=yes],
7703     [can_compile_sse2=no])
7704 AC_LANG_POP([C++])
7705 CXXFLAGS=$save_CXXFLAGS
7706 AC_MSG_RESULT([${can_compile_sse2}])
7707 if test "${can_compile_sse2}" = "yes" ; then
7708     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
7711 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
7712 AC_LANG_PUSH([C++])
7713 save_CXXFLAGS=$CXXFLAGS
7714 CXXFLAGS="$CXXFLAGS $flag_ssse3"
7715 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7716     #include <tmmintrin.h>
7717     int main () {
7718         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7719         c = _mm_maddubs_epi16 (a, b);
7720         return 0;
7721     }
7722     ])],
7723     [can_compile_ssse3=yes],
7724     [can_compile_ssse3=no])
7725 AC_LANG_POP([C++])
7726 CXXFLAGS=$save_CXXFLAGS
7727 AC_MSG_RESULT([${can_compile_ssse3}])
7728 if test "${can_compile_ssse3}" = "yes" ; then
7729     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
7732 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
7733 AC_LANG_PUSH([C++])
7734 save_CXXFLAGS=$CXXFLAGS
7735 CXXFLAGS="$CXXFLAGS $flag_sse41"
7736 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7737     #include <smmintrin.h>
7738     int main () {
7739         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7740         c = _mm_cmpeq_epi64 (a, b);
7741         return 0;
7742     }
7743     ])],
7744     [can_compile_sse41=yes],
7745     [can_compile_sse41=no])
7746 AC_LANG_POP([C++])
7747 CXXFLAGS=$save_CXXFLAGS
7748 AC_MSG_RESULT([${can_compile_sse41}])
7749 if test "${can_compile_sse41}" = "yes" ; then
7750     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
7753 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
7754 AC_LANG_PUSH([C++])
7755 save_CXXFLAGS=$CXXFLAGS
7756 CXXFLAGS="$CXXFLAGS $flag_sse42"
7757 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7758     #include <nmmintrin.h>
7759     int main () {
7760         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7761         c = _mm_cmpgt_epi64 (a, b);
7762         return 0;
7763     }
7764     ])],
7765     [can_compile_sse42=yes],
7766     [can_compile_sse42=no])
7767 AC_LANG_POP([C++])
7768 CXXFLAGS=$save_CXXFLAGS
7769 AC_MSG_RESULT([${can_compile_sse42}])
7770 if test "${can_compile_sse42}" = "yes" ; then
7771     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
7774 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
7775 AC_LANG_PUSH([C++])
7776 save_CXXFLAGS=$CXXFLAGS
7777 CXXFLAGS="$CXXFLAGS $flag_avx"
7778 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7779     #include <immintrin.h>
7780     int main () {
7781         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
7782         c = _mm256_xor_ps(a, b);
7783         return 0;
7784     }
7785     ])],
7786     [can_compile_avx=yes],
7787     [can_compile_avx=no])
7788 AC_LANG_POP([C++])
7789 CXXFLAGS=$save_CXXFLAGS
7790 AC_MSG_RESULT([${can_compile_avx}])
7791 if test "${can_compile_avx}" = "yes" ; then
7792     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
7795 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
7796 AC_LANG_PUSH([C++])
7797 save_CXXFLAGS=$CXXFLAGS
7798 CXXFLAGS="$CXXFLAGS $flag_avx2"
7799 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7800     #include <immintrin.h>
7801     int main () {
7802         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
7803         c = _mm256_maddubs_epi16(a, b);
7804         return 0;
7805     }
7806     ])],
7807     [can_compile_avx2=yes],
7808     [can_compile_avx2=no])
7809 AC_LANG_POP([C++])
7810 CXXFLAGS=$save_CXXFLAGS
7811 AC_MSG_RESULT([${can_compile_avx2}])
7812 if test "${can_compile_avx2}" = "yes" ; then
7813     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
7816 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
7817 AC_LANG_PUSH([C++])
7818 save_CXXFLAGS=$CXXFLAGS
7819 CXXFLAGS="$CXXFLAGS $flag_avx512"
7820 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7821     #include <immintrin.h>
7822     int main () {
7823         __m512i a = _mm512_loadu_si512(0);
7824         __m512d v1 = _mm512_load_pd(0);
7825         // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
7826         __m512d v2 = _mm512_abs_pd(v1);
7827         return 0;
7828     }
7829     ])],
7830     [can_compile_avx512=yes],
7831     [can_compile_avx512=no])
7832 AC_LANG_POP([C++])
7833 CXXFLAGS=$save_CXXFLAGS
7834 AC_MSG_RESULT([${can_compile_avx512}])
7835 if test "${can_compile_avx512}" = "yes" ; then
7836     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
7837     CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
7840 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
7841 AC_LANG_PUSH([C++])
7842 save_CXXFLAGS=$CXXFLAGS
7843 CXXFLAGS="$CXXFLAGS $flag_f16c"
7844 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7845     #include <immintrin.h>
7846     int main () {
7847         __m128i a = _mm_set1_epi32 (0);
7848         __m128 c;
7849         c = _mm_cvtph_ps(a);
7850         return 0;
7851     }
7852     ])],
7853     [can_compile_f16c=yes],
7854     [can_compile_f16c=no])
7855 AC_LANG_POP([C++])
7856 CXXFLAGS=$save_CXXFLAGS
7857 AC_MSG_RESULT([${can_compile_f16c}])
7858 if test "${can_compile_f16c}" = "yes" ; then
7859     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
7862 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
7863 AC_LANG_PUSH([C++])
7864 save_CXXFLAGS=$CXXFLAGS
7865 CXXFLAGS="$CXXFLAGS $flag_fma"
7866 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7867     #include <immintrin.h>
7868     int main () {
7869         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
7870         d = _mm256_fmadd_ps(a, b, c);
7871         return 0;
7872     }
7873     ])],
7874     [can_compile_fma=yes],
7875     [can_compile_fma=no])
7876 AC_LANG_POP([C++])
7877 CXXFLAGS=$save_CXXFLAGS
7878 AC_MSG_RESULT([${can_compile_fma}])
7879 if test "${can_compile_fma}" = "yes" ; then
7880     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
7883 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
7884 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
7885 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
7886 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
7887 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
7888 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
7889 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
7890 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512F])
7891 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
7892 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
7894 dnl ===================================================================
7895 dnl system stl sanity tests
7896 dnl ===================================================================
7897 if test "$_os" != "WINNT"; then
7899     AC_LANG_PUSH([C++])
7901     save_CPPFLAGS="$CPPFLAGS"
7902     if test -n "$MACOSX_SDK_PATH"; then
7903         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
7904     fi
7906     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
7907     # only.
7908     if test "$CPP_LIBRARY" = GLIBCXX; then
7909         dnl gcc#19664, gcc#22482, rhbz#162935
7910         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
7911         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
7912         AC_MSG_RESULT([$stlvisok])
7913         if test "$stlvisok" = "no"; then
7914             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
7915         fi
7916     fi
7918     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
7919     # when we don't make any dynamic libraries?
7920     if test "$DISABLE_DYNLOADING" = ""; then
7921         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
7922         cat > conftestlib1.cc <<_ACEOF
7923 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7924 struct S2: S1<int> { virtual ~S2(); };
7925 S2::~S2() {}
7926 _ACEOF
7927         cat > conftestlib2.cc <<_ACEOF
7928 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7929 struct S2: S1<int> { virtual ~S2(); };
7930 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
7931 _ACEOF
7932         gccvisinlineshiddenok=yes
7933         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
7934             gccvisinlineshiddenok=no
7935         else
7936             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
7937             dnl known to not work with -z defs (unsetting which makes the test
7938             dnl moot, though):
7939             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
7940             if test "$COM_IS_CLANG" = TRUE; then
7941                 for i in $CXX $CXXFLAGS; do
7942                     case $i in
7943                     -fsanitize=*)
7944                         my_linkflagsnoundefs=
7945                         break
7946                         ;;
7947                     esac
7948                 done
7949             fi
7950             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
7951                 gccvisinlineshiddenok=no
7952             fi
7953         fi
7955         rm -fr libconftest*
7956         AC_MSG_RESULT([$gccvisinlineshiddenok])
7957         if test "$gccvisinlineshiddenok" = "no"; then
7958             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
7959         fi
7960     fi
7962    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
7963     cat >visibility.cxx <<_ACEOF
7964 #pragma GCC visibility push(hidden)
7965 struct __attribute__ ((visibility ("default"))) TestStruct {
7966   static void Init();
7968 __attribute__ ((visibility ("default"))) void TestFunc() {
7969   TestStruct::Init();
7971 _ACEOF
7972     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
7973         gccvisbroken=yes
7974     else
7975         case "$host_cpu" in
7976         i?86|x86_64)
7977             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
7978                 gccvisbroken=no
7979             else
7980                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
7981                     gccvisbroken=no
7982                 else
7983                     gccvisbroken=yes
7984                 fi
7985             fi
7986             ;;
7987         *)
7988             gccvisbroken=no
7989             ;;
7990         esac
7991     fi
7992     rm -f visibility.s visibility.cxx
7994     AC_MSG_RESULT([$gccvisbroken])
7995     if test "$gccvisbroken" = "yes"; then
7996         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
7997     fi
7999     CPPFLAGS="$save_CPPFLAGS"
8001     AC_LANG_POP([C++])
8004 dnl ===================================================================
8005 dnl  Clang++ tests
8006 dnl ===================================================================
8008 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
8009 if test "$GCC" = "yes"; then
8010     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
8011     AC_LANG_PUSH([C++])
8012     save_CXXFLAGS=$CXXFLAGS
8013     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
8014     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
8015     CXXFLAGS=$save_CXXFLAGS
8016     AC_LANG_POP([C++])
8017     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
8018         AC_MSG_RESULT([yes])
8019     else
8020         AC_MSG_RESULT([no])
8021     fi
8023 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
8025 dnl ===================================================================
8026 dnl Compiler plugins
8027 dnl ===================================================================
8029 COMPILER_PLUGINS=
8030 # currently only Clang
8032 if test "$COM_IS_CLANG" != "TRUE"; then
8033     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
8034         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
8035         enable_compiler_plugins=no
8036     fi
8039 COMPILER_PLUGINS_COM_IS_CLANG=
8040 if test "$COM_IS_CLANG" = "TRUE"; then
8041     if test -n "$enable_compiler_plugins"; then
8042         compiler_plugins="$enable_compiler_plugins"
8043     elif test -n "$ENABLE_DBGUTIL"; then
8044         compiler_plugins=test
8045     else
8046         compiler_plugins=no
8047     fi
8048     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
8049         if test "$CLANGVER" -lt 50002; then
8050             if test "$compiler_plugins" = yes; then
8051                 AC_MSG_ERROR([Clang $CLANGVER is too old to build compiler plugins; need >= 5.0.2.])
8052             else
8053                 compiler_plugins=no
8054             fi
8055         fi
8056     fi
8057     if test "$compiler_plugins" != "no"; then
8058         dnl The prefix where Clang resides, override to where Clang resides if
8059         dnl using a source build:
8060         if test -z "$CLANGDIR"; then
8061             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
8062         fi
8063         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
8064         if test -z "$COMPILER_PLUGINS_CXX"; then
8065             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
8066         fi
8067         clangbindir=$CLANGDIR/bin
8068         if test "$build_os" = "cygwin"; then
8069             clangbindir=$(cygpath -u "$clangbindir")
8070         fi
8071         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
8072         if test -n "$LLVM_CONFIG"; then
8073             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
8074             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
8075             if test -z "$CLANGLIBDIR"; then
8076                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
8077             fi
8078             # Try if clang is built from source (in which case its includes are not together with llvm includes).
8079             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
8080             clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
8081             if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
8082                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
8083             fi
8084             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
8085             clangobjdir=$($LLVM_CONFIG --obj-root)
8086             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
8087                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
8088             fi
8089         fi
8090         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
8091         AC_LANG_PUSH([C++])
8092         save_CXX=$CXX
8093         save_CXXCPP=$CXXCPP
8094         save_CPPFLAGS=$CPPFLAGS
8095         save_CXXFLAGS=$CXXFLAGS
8096         save_LDFLAGS=$LDFLAGS
8097         save_LIBS=$LIBS
8098         CXX=$COMPILER_PLUGINS_CXX
8099         CXXCPP="$COMPILER_PLUGINS_CXX -E"
8100         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8101         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8102         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
8103             [COMPILER_PLUGINS=TRUE],
8104             [
8105             if test "$compiler_plugins" = "yes"; then
8106                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
8107             else
8108                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
8109                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
8110             fi
8111             ])
8112         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8113         dnl comment in compilerplugins/Makefile-clang.mk:
8114         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8115             LDFLAGS=""
8116             AC_MSG_CHECKING([for clang libraries to use])
8117             if test -z "$CLANGTOOLLIBS"; then
8118                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8119  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8120                 AC_LINK_IFELSE([
8121                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8122                         [[ clang::FullSourceLoc().dump(); ]])
8123                 ],[CLANGTOOLLIBS="$LIBS"],[])
8124             fi
8125             if test -z "$CLANGTOOLLIBS"; then
8126                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8127                 AC_LINK_IFELSE([
8128                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8129                         [[ clang::FullSourceLoc().dump(); ]])
8130                 ],[CLANGTOOLLIBS="$LIBS"],[])
8131             fi
8132             AC_MSG_RESULT([$CLANGTOOLLIBS])
8133             if test -z "$CLANGTOOLLIBS"; then
8134                 if test "$compiler_plugins" = "yes"; then
8135                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8136                 else
8137                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8138                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8139                 fi
8140                 COMPILER_PLUGINS=
8141             fi
8142             if test -n "$COMPILER_PLUGINS"; then
8143                 if test -z "$CLANGSYSINCLUDE"; then
8144                     if test -n "$LLVM_CONFIG"; then
8145                         # Path to the clang system headers (no idea if there's a better way to get it).
8146                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8147                     fi
8148                 fi
8149             fi
8150         fi
8151         CXX=$save_CXX
8152         CXXCPP=$save_CXXCPP
8153         CPPFLAGS=$save_CPPFLAGS
8154         CXXFLAGS=$save_CXXFLAGS
8155         LDFLAGS=$save_LDFLAGS
8156         LIBS="$save_LIBS"
8157         AC_LANG_POP([C++])
8159         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8160         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8161             #ifndef __clang__
8162             you lose
8163             #endif
8164             int foo=42;
8165             ]])],
8166             [AC_MSG_RESULT([yes])
8167              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8168             [AC_MSG_RESULT([no])])
8169         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8170     fi
8171 else
8172     if test "$enable_compiler_plugins" = "yes"; then
8173         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8174     fi
8176 COMPILER_PLUGINS_ANALYZER_PCH=
8177 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8178     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8180 AC_SUBST(COMPILER_PLUGINS)
8181 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8182 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8183 AC_SUBST(COMPILER_PLUGINS_CXX)
8184 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8185 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8186 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8187 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8188 AC_SUBST(CLANGDIR)
8189 AC_SUBST(CLANGLIBDIR)
8190 AC_SUBST(CLANGTOOLLIBS)
8191 AC_SUBST(CLANGSYSINCLUDE)
8193 # Plugin to help linker.
8194 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8195 # This makes --enable-lto build with clang work.
8196 AC_SUBST(LD_PLUGIN)
8198 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8199 AC_SUBST(HAVE_POSIX_FALLOCATE)
8201 JITC_PROCESSOR_TYPE=""
8202 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8203     # IBMs JDK needs this...
8204     JITC_PROCESSOR_TYPE=6
8205     export JITC_PROCESSOR_TYPE
8207 AC_SUBST([JITC_PROCESSOR_TYPE])
8209 # Misc Windows Stuff
8210 AC_ARG_WITH(ucrt-dir,
8211     AS_HELP_STRING([--with-ucrt-dir],
8212         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8213         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8214         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8215             Windows6.1-KB2999226-x64.msu
8216             Windows6.1-KB2999226-x86.msu
8217             Windows8.1-KB2999226-x64.msu
8218             Windows8.1-KB2999226-x86.msu
8219             Windows8-RT-KB2999226-x64.msu
8220             Windows8-RT-KB2999226-x86.msu
8221         A zip archive including those files is available from Microsoft site:
8222         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8225 UCRT_REDISTDIR="$with_ucrt_dir"
8226 if test $_os = "WINNT"; then
8227     find_msvc_x64_dlls
8228     for i in $PKGFORMAT; do
8229         if test "$i" = msi; then
8230             find_msms
8231             break
8232         fi
8233     done
8234     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8235     MSVC_DLLS="$msvcdlls"
8236     test -n "$msmdir" && MSM_PATH=`win_short_path_for_make "$msmdir"`
8237     # MSVC 15.3 changed it to VC141
8238     if echo "$msvcdllpath" | grep -q "VC143.CRT$"; then
8239         SCPDEFS="$SCPDEFS -DWITH_VC143_REDIST"
8240     elif echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8241         SCPDEFS="$SCPDEFS -DWITH_VC142_REDIST"
8242     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8243         SCPDEFS="$SCPDEFS -DWITH_VC141_REDIST"
8244     else
8245         SCPDEFS="$SCPDEFS -DWITH_VC${VCVER}_REDIST"
8246     fi
8248     if test "$UCRT_REDISTDIR" = "no"; then
8249         dnl explicitly disabled
8250         UCRT_REDISTDIR=""
8251     else
8252         if ! test -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x64.msu" -a \
8253                   -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x86.msu" -a \
8254                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x64.msu" -a \
8255                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x86.msu" -a \
8256                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x64.msu" -a \
8257                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x86.msu"; then
8258             UCRT_REDISTDIR=""
8259             if test -n "$PKGFORMAT"; then
8260                for i in $PKGFORMAT; do
8261                    case "$i" in
8262                    msi)
8263                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8264                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8265                        ;;
8266                    esac
8267                done
8268             fi
8269         fi
8270     fi
8273 AC_SUBST(UCRT_REDISTDIR)
8274 AC_SUBST(MSVC_DLL_PATH)
8275 AC_SUBST(MSVC_DLLS)
8276 AC_SUBST(MSM_PATH)
8279 dnl ===================================================================
8280 dnl Checks for Java
8281 dnl ===================================================================
8282 if test "$ENABLE_JAVA" != ""; then
8284     # Windows-specific tests
8285     if test "$build_os" = "cygwin"; then
8286         if test -z "$with_jdk_home"; then
8287             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8288             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8289             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/CurrentVersion"
8290             if test -n "$regvalue"; then
8291                 ver=$regvalue
8292                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver/JavaHome"
8293                 with_jdk_home=$regvalue
8294             fi
8295             howfound="found automatically"
8296         else
8297             with_jdk_home=`win_short_path_for_make "$with_jdk_home"`
8298             howfound="you passed"
8299         fi
8301         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8302             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])
8303         fi
8304     fi
8306     # 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.
8307     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8308     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8309         with_jdk_home=`/usr/libexec/java_home`
8310     fi
8312     JAVA_HOME=; export JAVA_HOME
8313     if test -z "$with_jdk_home"; then
8314         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8315     else
8316         _java_path="$with_jdk_home/bin/$with_java"
8317         dnl Check if there is a Java interpreter at all.
8318         if test -x "$_java_path"; then
8319             JAVAINTERPRETER=$_java_path
8320         else
8321             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8322         fi
8323     fi
8325     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8326     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8327     dnl loaded by java to run JunitTests:
8328     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8329         shortjdkhome=`cygpath -d "$with_jdk_home"`
8330         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
8331             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8332             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8333         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
8334             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8335             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8336         fi
8338         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8339             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8340         fi
8341         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8342     elif test "$cross_compiling" != "yes"; then
8343         case $CPUNAME in
8344             AARCH64|AXP|X86_64|HPPA|IA64|POWERPC64|S390X|SPARC64|GODSON64)
8345                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8346                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8347                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8348                 fi
8349                 ;;
8350             *) # assumption: everything else 32-bit
8351                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8352                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8353                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8354                 fi
8355                 ;;
8356         esac
8357     fi
8360 dnl ===================================================================
8361 dnl Checks for JDK.
8362 dnl ===================================================================
8364 # Whether all the complexity here actually is needed any more or not, no idea.
8366 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8367     _gij_longver=0
8368     AC_MSG_CHECKING([the installed JDK])
8369     if test -n "$JAVAINTERPRETER"; then
8370         dnl java -version sends output to stderr!
8371         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8372             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8373         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8374             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8375         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8376             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8377         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8378             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8379         else
8380             JDK=sun
8382             dnl Sun JDK specific tests
8383             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8384             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8386             if test "$_jdk_ver" -lt 10900; then
8387                 AC_MSG_ERROR([JDK is too old, you need at least 9 ($_jdk_ver < 10900)])
8388             fi
8389             if test "$_jdk_ver" -gt 10900; then
8390                 JAVA_CLASSPATH_NOT_SET=TRUE
8391             fi
8393             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8394             if test "$_os" = "WINNT"; then
8395                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8396             fi
8397             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8399             # set to limit VM usage for JunitTests
8400             JAVAIFLAGS=-Xmx64M
8401             # set to limit VM usage for javac
8402             JAVACFLAGS=-J-Xmx128M
8403         fi
8404     else
8405         AC_MSG_ERROR([Java not found. You need at least JDK 9])
8406     fi
8407 else
8408     if test -z "$ENABLE_JAVA"; then
8409         dnl Java disabled
8410         JAVA_HOME=
8411         export JAVA_HOME
8412     elif test "$cross_compiling" = "yes"; then
8413         # Just assume compatibility of build and host JDK
8414         JDK=$JDK_FOR_BUILD
8415         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8416     fi
8419 dnl ===================================================================
8420 dnl Checks for javac
8421 dnl ===================================================================
8422 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8423     javacompiler="javac"
8424     : ${JAVA_SOURCE_VER=8}
8425     : ${JAVA_TARGET_VER=8}
8426     if test -z "$with_jdk_home"; then
8427         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8428     else
8429         _javac_path="$with_jdk_home/bin/$javacompiler"
8430         dnl Check if there is a Java compiler at all.
8431         if test -x "$_javac_path"; then
8432             JAVACOMPILER=$_javac_path
8433         fi
8434     fi
8435     if test -z "$JAVACOMPILER"; then
8436         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8437     fi
8438     if test "$build_os" = "cygwin"; then
8439         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8440             JAVACOMPILER="${JAVACOMPILER}.exe"
8441         fi
8442         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8443     fi
8446 dnl ===================================================================
8447 dnl Checks for javadoc
8448 dnl ===================================================================
8449 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8450     if test -z "$with_jdk_home"; then
8451         AC_PATH_PROG(JAVADOC, javadoc)
8452     else
8453         _javadoc_path="$with_jdk_home/bin/javadoc"
8454         dnl Check if there is a javadoc at all.
8455         if test -x "$_javadoc_path"; then
8456             JAVADOC=$_javadoc_path
8457         else
8458             AC_PATH_PROG(JAVADOC, javadoc)
8459         fi
8460     fi
8461     if test -z "$JAVADOC"; then
8462         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8463     fi
8464     if test "$build_os" = "cygwin"; then
8465         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8466             JAVADOC="${JAVADOC}.exe"
8467         fi
8468         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8469     fi
8471     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8472     JAVADOCISGJDOC="yes"
8473     fi
8475 AC_SUBST(JAVADOC)
8476 AC_SUBST(JAVADOCISGJDOC)
8478 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8479     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8480     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8481         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8482            # try to recover first by looking whether we have an alternative
8483            # system as in Debian or newer SuSEs where following /usr/bin/javac
8484            # over /etc/alternatives/javac leads to the right bindir where we
8485            # just need to strip a bit away to get a valid JAVA_HOME
8486            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8487         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8488             # maybe only one level of symlink (e.g. on Mac)
8489             JAVA_HOME=$(readlink $JAVACOMPILER)
8490             if test "$(dirname $JAVA_HOME)" = "."; then
8491                 # we've got no path to trim back
8492                 JAVA_HOME=""
8493             fi
8494         else
8495             # else warn
8496             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8497             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8498             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8499             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8500         fi
8501         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8502         if test "$JAVA_HOME" != "/usr"; then
8503             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8504                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8505                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8506                 dnl Tiger already returns a JDK path...
8507                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8508             else
8509                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8510                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8511                 dnl that checks which version to run
8512                 if test -f "$JAVA_HOME"; then
8513                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8514                 fi
8515             fi
8516         fi
8517     fi
8518     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8520     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8521     if test -z "$JAVA_HOME"; then
8522         if test "x$with_jdk_home" = "x"; then
8523             cat > findhome.java <<_ACEOF
8524 [import java.io.File;
8526 class findhome
8528     public static void main(String args[])
8529     {
8530         String jrelocation = System.getProperty("java.home");
8531         File jre = new File(jrelocation);
8532         System.out.println(jre.getParent());
8533     }
8535 _ACEOF
8536             AC_MSG_CHECKING([if javac works])
8537             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8538             AC_TRY_EVAL(javac_cmd)
8539             if test $? = 0 -a -f ./findhome.class; then
8540                 AC_MSG_RESULT([javac works])
8541             else
8542                 echo "configure: javac test failed" >&5
8543                 cat findhome.java >&5
8544                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8545             fi
8546             AC_MSG_CHECKING([if gij knows its java.home])
8547             JAVA_HOME=`$JAVAINTERPRETER findhome`
8548             if test $? = 0 -a "$JAVA_HOME" != ""; then
8549                 AC_MSG_RESULT([$JAVA_HOME])
8550             else
8551                 echo "configure: java test failed" >&5
8552                 cat findhome.java >&5
8553                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8554             fi
8555             # clean-up after ourselves
8556             rm -f ./findhome.java ./findhome.class
8557         else
8558             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8559         fi
8560     fi
8562     # now check if $JAVA_HOME is really valid
8563     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8564         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8565             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8566             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8567             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
8568             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
8569             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
8570             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
8571         fi
8572     fi
8573     PathFormat "$JAVA_HOME"
8574     JAVA_HOME="$formatted_path"
8577 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
8578     "$_os" != Darwin
8579 then
8580     AC_MSG_CHECKING([for JAWT lib])
8581     if test "$_os" = WINNT; then
8582         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
8583         JAWTLIB=jawt.lib
8584     else
8585         case "$host_cpu" in
8586         arm*)
8587             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
8588             JAVA_ARCH=$my_java_arch
8589             ;;
8590         i*86)
8591             my_java_arch=i386
8592             ;;
8593         m68k)
8594             my_java_arch=m68k
8595             ;;
8596         powerpc)
8597             my_java_arch=ppc
8598             ;;
8599         powerpc64)
8600             my_java_arch=ppc64
8601             ;;
8602         powerpc64le)
8603             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
8604             JAVA_ARCH=$my_java_arch
8605             ;;
8606         sparc64)
8607             my_java_arch=sparcv9
8608             ;;
8609         x86_64)
8610             my_java_arch=amd64
8611             ;;
8612         *)
8613             my_java_arch=$host_cpu
8614             ;;
8615         esac
8616         # This is where JDK9 puts the library
8617         if test -e "$JAVA_HOME/lib/libjawt.so"; then
8618             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
8619         else
8620             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
8621         fi
8622         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
8623     fi
8624     AC_MSG_RESULT([$JAWTLIB])
8626 AC_SUBST(JAWTLIB)
8628 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
8629     case "$host_os" in
8631     aix*)
8632         JAVAINC="-I$JAVA_HOME/include"
8633         JAVAINC="$JAVAINC -I$JAVA_HOME/include/aix"
8634         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8635         ;;
8637     cygwin*|wsl*)
8638         JAVAINC="-I$JAVA_HOME/include/win32"
8639         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
8640         ;;
8642     darwin*|macos*)
8643         if test -d "$JAVA_HOME/include/darwin"; then
8644             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
8645         else
8646             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
8647         fi
8648         ;;
8650     dragonfly*)
8651         JAVAINC="-I$JAVA_HOME/include"
8652         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8653         ;;
8655     freebsd*)
8656         JAVAINC="-I$JAVA_HOME/include"
8657         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
8658         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
8659         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8660         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8661         ;;
8663     k*bsd*-gnu*)
8664         JAVAINC="-I$JAVA_HOME/include"
8665         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8666         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8667         ;;
8669     linux-gnu*)
8670         JAVAINC="-I$JAVA_HOME/include"
8671         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8672         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8673         ;;
8675     *netbsd*)
8676         JAVAINC="-I$JAVA_HOME/include"
8677         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
8678         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8679        ;;
8681     openbsd*)
8682         JAVAINC="-I$JAVA_HOME/include"
8683         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
8684         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8685         ;;
8687     solaris*)
8688         JAVAINC="-I$JAVA_HOME/include"
8689         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
8690         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8691         ;;
8692     esac
8694 SOLARINC="$SOLARINC $JAVAINC"
8696 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8697     JAVA_HOME_FOR_BUILD=$JAVA_HOME
8698     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
8699     JDK_FOR_BUILD=$JDK
8702 AC_SUBST(JAVACFLAGS)
8703 AC_SUBST(JAVACOMPILER)
8704 AC_SUBST(JAVAINTERPRETER)
8705 AC_SUBST(JAVAIFLAGS)
8706 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
8707 AC_SUBST(JAVA_CLASSPATH_NOT_SET)
8708 AC_SUBST(JAVA_HOME)
8709 AC_SUBST(JAVA_HOME_FOR_BUILD)
8710 AC_SUBST(JDK)
8711 AC_SUBST(JDK_FOR_BUILD)
8712 AC_SUBST(JAVA_SOURCE_VER)
8713 AC_SUBST(JAVA_TARGET_VER)
8716 dnl ===================================================================
8717 dnl Export file validation
8718 dnl ===================================================================
8719 AC_MSG_CHECKING([whether to enable export file validation])
8720 if test "$with_export_validation" != "no"; then
8721     if test -z "$ENABLE_JAVA"; then
8722         if test "$with_export_validation" = "yes"; then
8723             AC_MSG_ERROR([requested, but Java is disabled])
8724         else
8725             AC_MSG_RESULT([no, as Java is disabled])
8726         fi
8727     elif ! test -d "${SRC_ROOT}/schema"; then
8728         if test "$with_export_validation" = "yes"; then
8729             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
8730         else
8731             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
8732         fi
8733     else
8734         AC_MSG_RESULT([yes])
8735         AC_DEFINE(HAVE_EXPORT_VALIDATION)
8737         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
8738         if test -z "$ODFVALIDATOR"; then
8739             # remember to download the ODF toolkit with validator later
8740             AC_MSG_NOTICE([no odfvalidator found, will download it])
8741             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
8742             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
8744             # and fetch name of odfvalidator jar name from download.lst
8745             ODFVALIDATOR_JAR=`$SED -n -e "s/export *ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8746             AC_SUBST(ODFVALIDATOR_JAR)
8748             if test -z "$ODFVALIDATOR_JAR"; then
8749                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
8750             fi
8751         fi
8752         if test "$build_os" = "cygwin"; then
8753             # In case of Cygwin it will be executed from Windows,
8754             # so we need to run bash and absolute path to validator
8755             # so instead of "odfvalidator" it will be
8756             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8757             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
8758         else
8759             ODFVALIDATOR="sh $ODFVALIDATOR"
8760         fi
8761         AC_SUBST(ODFVALIDATOR)
8764         AC_PATH_PROGS(OFFICEOTRON, officeotron)
8765         if test -z "$OFFICEOTRON"; then
8766             # remember to download the officeotron with validator later
8767             AC_MSG_NOTICE([no officeotron found, will download it])
8768             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
8769             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
8771             # and fetch name of officeotron jar name from download.lst
8772             OFFICEOTRON_JAR=`$SED -n -e "s/export *OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8773             AC_SUBST(OFFICEOTRON_JAR)
8775             if test -z "$OFFICEOTRON_JAR"; then
8776                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
8777             fi
8778         else
8779             # check version of existing officeotron
8780             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
8781             if test 0"$OFFICEOTRON_VER" -lt 704; then
8782                 AC_MSG_ERROR([officeotron too old])
8783             fi
8784         fi
8785         if test "$build_os" = "cygwin"; then
8786             # In case of Cygwin it will be executed from Windows,
8787             # so we need to run bash and absolute path to validator
8788             # so instead of "odfvalidator" it will be
8789             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8790             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
8791         else
8792             OFFICEOTRON="sh $OFFICEOTRON"
8793         fi
8794     fi
8795     AC_SUBST(OFFICEOTRON)
8796 else
8797     AC_MSG_RESULT([no])
8800 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
8801 if test "$with_bffvalidator" != "no"; then
8802     AC_DEFINE(HAVE_BFFVALIDATOR)
8804     if test "$with_export_validation" = "no"; then
8805         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
8806     fi
8808     if test "$with_bffvalidator" = "yes"; then
8809         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
8810     else
8811         BFFVALIDATOR="$with_bffvalidator"
8812     fi
8814     if test "$build_os" = "cygwin"; then
8815         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
8816             AC_MSG_RESULT($BFFVALIDATOR)
8817         else
8818             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8819         fi
8820     elif test -n "$BFFVALIDATOR"; then
8821         # We are not in Cygwin but need to run Windows binary with wine
8822         AC_PATH_PROGS(WINE, wine)
8824         # so swap in a shell wrapper that converts paths transparently
8825         BFFVALIDATOR_EXE="$BFFVALIDATOR"
8826         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
8827         AC_SUBST(BFFVALIDATOR_EXE)
8828         AC_MSG_RESULT($BFFVALIDATOR)
8829     else
8830         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8831     fi
8832     AC_SUBST(BFFVALIDATOR)
8833 else
8834     AC_MSG_RESULT([no])
8837 dnl ===================================================================
8838 dnl Check for C preprocessor to use
8839 dnl ===================================================================
8840 AC_MSG_CHECKING([which C preprocessor to use in idlc])
8841 SYSTEM_UCPP_IS_GCC=
8842 if test -n "$with_idlc_cpp"; then
8843     AC_MSG_RESULT([$with_idlc_cpp])
8844     AC_PATH_PROG(SYSTEM_UCPP, $with_idlc_cpp)
8845     AC_MSG_CHECKING([if $with_idlc_cpp is GCC CPP])
8846     # ucpp will accept -v (to output version), warn about the others as unknown
8847     # and return 1 (due to -v)
8848     # gcc will accept -v (as verbose), --version (to output version) and -nostdinc
8849     # and return 0 (due to --version ) if all options are supported
8850     $SYSTEM_UCPP -v --version -nostdinc >/dev/null 2>/dev/null
8851     if test $? -eq 0;  then
8852         SYSTEM_UCPP_IS_GCC=TRUE
8853         AC_MSG_RESULT([yes])
8854     else
8855         AC_MSG_RESULT([no])
8856     fi
8857 else
8858     AC_MSG_RESULT([ucpp])
8859     AC_MSG_CHECKING([which ucpp to use])
8860     if test -n "$with_system_ucpp" -a "$with_system_ucpp" != "no"; then
8861         AC_MSG_RESULT([external])
8862         AC_PATH_PROG(SYSTEM_UCPP, ucpp)
8863     else
8864         AC_MSG_RESULT([internal])
8865         BUILD_TYPE="$BUILD_TYPE UCPP"
8866     fi
8868 AC_SUBST(SYSTEM_UCPP)
8869 AC_SUBST(SYSTEM_UCPP_IS_GCC)
8871 dnl ===================================================================
8872 dnl Check for epm (not needed for Windows)
8873 dnl ===================================================================
8874 AC_MSG_CHECKING([whether to enable EPM for packing])
8875 if test "$enable_epm" = "yes"; then
8876     AC_MSG_RESULT([yes])
8877     if test "$_os" != "WINNT"; then
8878         if test $_os = Darwin; then
8879             EPM=internal
8880         elif test -n "$with_epm"; then
8881             EPM=$with_epm
8882         else
8883             AC_PATH_PROG(EPM, epm, no)
8884         fi
8885         if test "$EPM" = "no" -o "$EPM" = "internal"; then
8886             AC_MSG_NOTICE([EPM will be built.])
8887             BUILD_TYPE="$BUILD_TYPE EPM"
8888             EPM=${WORKDIR}/UnpackedTarball/epm/epm
8889         else
8890             # Gentoo has some epm which is something different...
8891             AC_MSG_CHECKING([whether the found epm is the right epm])
8892             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
8893                 AC_MSG_RESULT([yes])
8894             else
8895                 AC_MSG_ERROR([no. Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8896             fi
8897             AC_MSG_CHECKING([epm version])
8898             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
8899             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
8900                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
8901                 AC_MSG_RESULT([OK, >= 3.7])
8902             else
8903                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
8904                 AC_MSG_ERROR([Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8905             fi
8906         fi
8907     fi
8909     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
8910         AC_MSG_CHECKING([for rpm])
8911         for a in "$RPM" rpmbuild rpm; do
8912             $a --usage >/dev/null 2> /dev/null
8913             if test $? -eq 0; then
8914                 RPM=$a
8915                 break
8916             else
8917                 $a --version >/dev/null 2> /dev/null
8918                 if test $? -eq 0; then
8919                     RPM=$a
8920                     break
8921                 fi
8922             fi
8923         done
8924         if test -z "$RPM"; then
8925             AC_MSG_ERROR([not found])
8926         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
8927             RPM_PATH=`which $RPM`
8928             AC_MSG_RESULT([$RPM_PATH])
8929             SCPDEFS="$SCPDEFS -DWITH_RPM"
8930         else
8931             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
8932         fi
8933     fi
8934     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
8935         AC_PATH_PROG(DPKG, dpkg, no)
8936         if test "$DPKG" = "no"; then
8937             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
8938         fi
8939     fi
8940     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
8941        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
8942         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
8943             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
8944                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
8945                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
8946                     AC_MSG_RESULT([yes])
8947                 else
8948                     AC_MSG_RESULT([no])
8949                     if echo "$PKGFORMAT" | $GREP -q rpm; then
8950                         _pt="rpm"
8951                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
8952                         add_warning "the rpms will need to be installed with --nodeps"
8953                     else
8954                         _pt="pkg"
8955                     fi
8956                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
8957                     add_warning "the ${_pt}s will not be relocatable"
8958                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
8959                                  relocation will work, you need to patch your epm with the
8960                                  patch in epm/epm-3.7.patch or build with
8961                                  --with-epm=internal which will build a suitable epm])
8962                 fi
8963             fi
8964         fi
8965     fi
8966     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
8967         AC_PATH_PROG(PKGMK, pkgmk, no)
8968         if test "$PKGMK" = "no"; then
8969             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
8970         fi
8971     fi
8972     AC_SUBST(RPM)
8973     AC_SUBST(DPKG)
8974     AC_SUBST(PKGMK)
8975 else
8976     for i in $PKGFORMAT; do
8977         case "$i" in
8978         aix | bsd | deb | pkg | rpm | native | portable)
8979             AC_MSG_ERROR(
8980                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
8981             ;;
8982         esac
8983     done
8984     AC_MSG_RESULT([no])
8985     EPM=NO
8987 AC_SUBST(EPM)
8989 ENABLE_LWP=
8990 if test "$enable_lotuswordpro" = "yes"; then
8991     ENABLE_LWP="TRUE"
8993 AC_SUBST(ENABLE_LWP)
8995 dnl ===================================================================
8996 dnl Check for building ODK
8997 dnl ===================================================================
8998 if test "$enable_odk" != yes; then
8999     unset DOXYGEN
9000 else
9001     if test "$with_doxygen" = no; then
9002         AC_MSG_CHECKING([for doxygen])
9003         unset DOXYGEN
9004         AC_MSG_RESULT([no])
9005     else
9006         if test "$with_doxygen" = yes; then
9007             AC_PATH_PROG([DOXYGEN], [doxygen])
9008             if test -z "$DOXYGEN"; then
9009                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
9010             fi
9011             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
9012                 if ! dot -V 2>/dev/null; then
9013                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
9014                 fi
9015             fi
9016         else
9017             AC_MSG_CHECKING([for doxygen])
9018             DOXYGEN=$with_doxygen
9019             AC_MSG_RESULT([$DOXYGEN])
9020         fi
9021         if test -n "$DOXYGEN"; then
9022             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
9023             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
9024             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
9025                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
9026             fi
9027         fi
9028     fi
9030 AC_SUBST([DOXYGEN])
9032 AC_MSG_CHECKING([whether to build the ODK])
9033 if test "$enable_odk" = yes; then
9034     AC_MSG_RESULT([yes])
9035     BUILD_TYPE="$BUILD_TYPE ODK"
9036 else
9037     AC_MSG_RESULT([no])
9040 dnl ===================================================================
9041 dnl Check for system zlib
9042 dnl ===================================================================
9043 if test "$with_system_zlib" = "auto"; then
9044     case "$_os" in
9045     WINNT)
9046         with_system_zlib="$with_system_libs"
9047         ;;
9048     *)
9049         if test "$enable_fuzzers" != "yes"; then
9050             with_system_zlib=yes
9051         else
9052             with_system_zlib=no
9053         fi
9054         ;;
9055     esac
9058 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
9059 dnl and has no pkg-config for it at least on some tinderboxes,
9060 dnl so leaving that out for now
9061 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
9062 AC_MSG_CHECKING([which zlib to use])
9063 if test "$with_system_zlib" = "yes"; then
9064     AC_MSG_RESULT([external])
9065     SYSTEM_ZLIB=TRUE
9066     AC_CHECK_HEADER(zlib.h, [],
9067         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
9068     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
9069         [AC_MSG_ERROR(zlib not found or functional)], [])
9070 else
9071     AC_MSG_RESULT([internal])
9072     SYSTEM_ZLIB=
9073     BUILD_TYPE="$BUILD_TYPE ZLIB"
9074     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
9075     ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
9077 AC_SUBST(ZLIB_CFLAGS)
9078 AC_SUBST(ZLIB_LIBS)
9079 AC_SUBST(SYSTEM_ZLIB)
9081 dnl ===================================================================
9082 dnl Check for system jpeg
9083 dnl ===================================================================
9084 AC_MSG_CHECKING([which libjpeg to use])
9085 if test "$with_system_jpeg" = "yes"; then
9086     AC_MSG_RESULT([external])
9087     SYSTEM_LIBJPEG=TRUE
9088     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
9089         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
9090     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
9091         [AC_MSG_ERROR(jpeg library not found or functional)], [])
9092 else
9093     SYSTEM_LIBJPEG=
9094     AC_MSG_RESULT([internal, libjpeg-turbo])
9095     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
9097     case "$host_cpu" in
9098     x86_64 | amd64 | i*86 | x86 | ia32)
9099         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
9100         if test -z "$NASM" -a "$build_os" = "cygwin"; then
9101             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
9102                 NASM="$LODE_HOME/opt/bin/nasm"
9103             elif test -x "/opt/lo/bin/nasm"; then
9104                 NASM="/opt/lo/bin/nasm"
9105             fi
9106         fi
9108         if test -n "$NASM"; then
9109             AC_MSG_CHECKING([for object file format of host system])
9110             case "$host_os" in
9111               cygwin* | mingw* | pw32* | wsl*)
9112                 case "$host_cpu" in
9113                   x86_64)
9114                     objfmt='Win64-COFF'
9115                     ;;
9116                   *)
9117                     objfmt='Win32-COFF'
9118                     ;;
9119                 esac
9120               ;;
9121               msdosdjgpp* | go32*)
9122                 objfmt='COFF'
9123               ;;
9124               os2-emx*) # not tested
9125                 objfmt='MSOMF' # obj
9126               ;;
9127               linux*coff* | linux*oldld*)
9128                 objfmt='COFF' # ???
9129               ;;
9130               linux*aout*)
9131                 objfmt='a.out'
9132               ;;
9133               linux*)
9134                 case "$host_cpu" in
9135                   x86_64)
9136                     objfmt='ELF64'
9137                     ;;
9138                   *)
9139                     objfmt='ELF'
9140                     ;;
9141                 esac
9142               ;;
9143               kfreebsd* | freebsd* | netbsd* | openbsd*)
9144                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9145                   objfmt='BSD-a.out'
9146                 else
9147                   case "$host_cpu" in
9148                     x86_64 | amd64)
9149                       objfmt='ELF64'
9150                       ;;
9151                     *)
9152                       objfmt='ELF'
9153                       ;;
9154                   esac
9155                 fi
9156               ;;
9157               solaris* | sunos* | sysv* | sco*)
9158                 case "$host_cpu" in
9159                   x86_64)
9160                     objfmt='ELF64'
9161                     ;;
9162                   *)
9163                     objfmt='ELF'
9164                     ;;
9165                 esac
9166               ;;
9167               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9168                 case "$host_cpu" in
9169                   x86_64)
9170                     objfmt='Mach-O64'
9171                     ;;
9172                   *)
9173                     objfmt='Mach-O'
9174                     ;;
9175                 esac
9176               ;;
9177               *)
9178                 objfmt='ELF ?'
9179               ;;
9180             esac
9182             AC_MSG_RESULT([$objfmt])
9183             if test "$objfmt" = 'ELF ?'; then
9184               objfmt='ELF'
9185               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9186             fi
9188             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9189             case "$objfmt" in
9190               MSOMF)      NAFLAGS='-fobj -DOBJ32 -DPIC';;
9191               Win32-COFF) NAFLAGS='-fwin32 -DWIN32 -DPIC';;
9192               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__ -DPIC';;
9193               COFF)       NAFLAGS='-fcoff -DCOFF -DPIC';;
9194               a.out)      NAFLAGS='-faout -DAOUT -DPIC';;
9195               BSD-a.out)  NAFLAGS='-faoutb -DAOUT -DPIC';;
9196               ELF)        NAFLAGS='-felf -DELF -DPIC';;
9197               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__ -DPIC';;
9198               RDF)        NAFLAGS='-frdf -DRDF -DPIC';;
9199               Mach-O)     NAFLAGS='-fmacho -DMACHO -DPIC';;
9200               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__ -DPIC';;
9201             esac
9202             AC_MSG_RESULT([$NAFLAGS])
9204             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9205             cat > conftest.asm << EOF
9206             [%line __oline__ "configure"
9207                     section .text
9208                     global  _main,main
9209             _main:
9210             main:   xor     eax,eax
9211                     ret
9212             ]
9214             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9215             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9216               AC_MSG_RESULT(yes)
9217             else
9218               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9219               cat conftest.asm >&AS_MESSAGE_LOG_FD
9220               rm -rf conftest*
9221               AC_MSG_RESULT(no)
9222               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9223               NASM=""
9224             fi
9226         fi
9228         if test -z "$NASM"; then
9229 cat << _EOS
9230 ****************************************************************************
9231 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9232 To get one please:
9234 _EOS
9235             if test "$build_os" = "cygwin"; then
9236 cat << _EOS
9237 install a pre-compiled binary for Win32
9239 mkdir -p /opt/lo/bin
9240 cd /opt/lo/bin
9241 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9242 chmod +x nasm
9244 or get and install one from http://www.nasm.us/
9246 Then re-run autogen.sh
9248 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9249 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`which nasm\` finds it.
9251 _EOS
9252             else
9253 cat << _EOS
9254 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md
9256 _EOS
9257             fi
9258             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9259             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9260         fi
9261       ;;
9262     esac
9265 AC_SUBST(NASM)
9266 AC_SUBST(NAFLAGS)
9267 AC_SUBST(LIBJPEG_CFLAGS)
9268 AC_SUBST(LIBJPEG_LIBS)
9269 AC_SUBST(SYSTEM_LIBJPEG)
9271 dnl ===================================================================
9272 dnl Check for system clucene
9273 dnl ===================================================================
9274 dnl we should rather be using
9275 dnl libo_CHECK_SYSTEM_MODULE([clucence],[CLUCENE],[liblucence-core]) here
9276 dnl but the contribs-lib check seems tricky
9277 if test "$enable_xmlhelp" = yes -o "$enable_extension_integration" = yes; then
9278 AC_MSG_CHECKING([which clucene to use])
9279 if test "$with_system_clucene" = "yes"; then
9280     AC_MSG_RESULT([external])
9281     SYSTEM_CLUCENE=TRUE
9282     PKG_CHECK_MODULES(CLUCENE, libclucene-core)
9283     CLUCENE_CFLAGS=[$(printf '%s' "$CLUCENE_CFLAGS" | sed -e 's@-I[^ ]*/CLucene/ext@@' -e "s/-I/${ISYSTEM?}/g")]
9284     FilterLibs "${CLUCENE_LIBS}"
9285     CLUCENE_LIBS="${filteredlibs}"
9286     AC_LANG_PUSH([C++])
9287     save_CXXFLAGS=$CXXFLAGS
9288     save_CPPFLAGS=$CPPFLAGS
9289     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9290     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9291     dnl http://sourceforge.net/tracker/index.php?func=detail&aid=3392466&group_id=80013&atid=558446
9292     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9293     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9294                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9295     CXXFLAGS=$save_CXXFLAGS
9296     CPPFLAGS=$save_CPPFLAGS
9297     AC_LANG_POP([C++])
9299     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9300 else
9301     AC_MSG_RESULT([internal])
9302     SYSTEM_CLUCENE=
9303     BUILD_TYPE="$BUILD_TYPE CLUCENE"
9306 AC_SUBST(SYSTEM_CLUCENE)
9307 AC_SUBST(CLUCENE_CFLAGS)
9308 AC_SUBST(CLUCENE_LIBS)
9310 dnl ===================================================================
9311 dnl Check for system expat
9312 dnl ===================================================================
9313 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9315 dnl ===================================================================
9316 dnl Check for system xmlsec
9317 dnl ===================================================================
9318 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.28])
9320 AC_MSG_CHECKING([whether to enable Embedded OpenType support])
9321 if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_eot" = "yes"; then
9322     ENABLE_EOT="TRUE"
9323     AC_DEFINE([ENABLE_EOT])
9324     AC_MSG_RESULT([yes])
9326     libo_CHECK_SYSTEM_MODULE([libeot],[LIBEOT],[libeot >= 0.01])
9327 else
9328     ENABLE_EOT=
9329     AC_MSG_RESULT([no])
9331 AC_SUBST([ENABLE_EOT])
9333 dnl ===================================================================
9334 dnl Check for DLP libs
9335 dnl ===================================================================
9336 AS_IF([test "$COM" = "MSC"],
9337       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9338       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9340 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1],["-I${WORKDIR}/UnpackedTarball/librevenge/inc"],["-L${librevenge_libdir} -lrevenge-0.0"])
9342 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9344 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9346 AS_IF([test "$COM" = "MSC"],
9347       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9348       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9350 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10],["-I${WORKDIR}/UnpackedTarball/libwpd/inc"],["-L${libwpd_libdir} -lwpd-0.10"])
9352 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9354 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9355 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.12])
9357 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9359 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9361 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9363 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.1])
9364 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.20])
9366 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9367 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10])
9369 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9371 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9372 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9374 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9376 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9378 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9380 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9382 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9383 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9385 dnl ===================================================================
9386 dnl Check for system lcms2
9387 dnl ===================================================================
9388 if test "$with_system_lcms2" != "yes"; then
9389     SYSTEM_LCMS2=
9391 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2],["-I${WORKDIR}/UnpackedTarball/lcms2/include"],["-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"])
9392 if test "$GCC" = "yes"; then
9393     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9395 if test "$COM" = "MSC"; then # override the above
9396     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9399 dnl ===================================================================
9400 dnl Check for system cppunit
9401 dnl ===================================================================
9402 if test "$_os" != "Android" ; then
9403     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9406 dnl ===================================================================
9407 dnl Check whether freetype is available
9408 dnl ===================================================================
9409 if test "$using_freetype_fontconfig" = yes; then
9410     AC_MSG_CHECKING([which freetype to use])
9412 if test "$using_freetype_fontconfig" = yes -a "$test_system_freetype" != no; then
9413     AC_MSG_RESULT([external])
9414     # FreeType has 3 different kinds of versions
9415     # * release, like 2.4.10
9416     # * libtool, like 13.0.7 (this what pkg-config returns)
9417     # * soname
9418     # FreeType's docs/VERSION.DLL provides a table mapping between the three
9419     #
9420     # 9.9.3 is 2.2.0
9421     # When the minimal version is at least 2.8.1, remove Skia's check down below.
9422     PKG_CHECK_MODULES(FREETYPE, freetype2 >= 9.9.3)
9423     FREETYPE_CFLAGS=$(printf '%s' "$FREETYPE_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9424     FilterLibs "${FREETYPE_LIBS}"
9425     FREETYPE_LIBS="${filteredlibs}"
9426     SYSTEM_FREETYPE=TRUE
9427 elif test "$using_freetype_fontconfig" = yes; then
9428     AC_MSG_RESULT([internal])
9429     FREETYPE_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"
9430     if test "x$ac_config_site_64bit_host" = xYES; then
9431         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9432     else
9433         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9434     fi
9435     BUILD_TYPE="$BUILD_TYPE FREETYPE"
9437 AC_SUBST(FREETYPE_CFLAGS)
9438 AC_SUBST(FREETYPE_LIBS)
9439 AC_SUBST([SYSTEM_FREETYPE])
9441 # ===================================================================
9442 # Check for system libxslt
9443 # to prevent incompatibilities between internal libxml2 and external libxslt,
9444 # or vice versa, use with_system_libxml here
9445 # ===================================================================
9446 if test "$with_system_libxml" = "auto"; then
9447     case "$_os" in
9448     WINNT|iOS|Android)
9449         with_system_libxml="$with_system_libs"
9450         ;;
9451     Emscripten)
9452         with_system_libxml=no
9453         ;;
9454     *)
9455         if test "$enable_fuzzers" != "yes"; then
9456             with_system_libxml=yes
9457         else
9458             with_system_libxml=no
9459         fi
9460         ;;
9461     esac
9464 AC_MSG_CHECKING([which libxslt to use])
9465 if test "$with_system_libxml" = "yes"; then
9466     AC_MSG_RESULT([external])
9467     SYSTEM_LIBXSLT=TRUE
9468     if test "$_os" = "Darwin"; then
9469         dnl make sure to use SDK path
9470         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9471         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9472         dnl omit -L/usr/lib
9473         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9474         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9475     else
9476         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9477         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9478         FilterLibs "${LIBXSLT_LIBS}"
9479         LIBXSLT_LIBS="${filteredlibs}"
9480         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9481         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9482         FilterLibs "${LIBEXSLT_LIBS}"
9483         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9484     fi
9486     dnl Check for xsltproc
9487     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9488     if test "$XSLTPROC" = "no"; then
9489         AC_MSG_ERROR([xsltproc is required])
9490     fi
9491 else
9492     AC_MSG_RESULT([internal])
9493     SYSTEM_LIBXSLT=
9494     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9496 AC_SUBST(SYSTEM_LIBXSLT)
9497 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9498     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9500 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9502 AC_SUBST(LIBEXSLT_CFLAGS)
9503 AC_SUBST(LIBEXSLT_LIBS)
9504 AC_SUBST(LIBXSLT_CFLAGS)
9505 AC_SUBST(LIBXSLT_LIBS)
9506 AC_SUBST(XSLTPROC)
9508 # ===================================================================
9509 # Check for system libxml
9510 # ===================================================================
9511 AC_MSG_CHECKING([which libxml to use])
9512 if test "$with_system_libxml" = "yes"; then
9513     AC_MSG_RESULT([external])
9514     SYSTEM_LIBXML=TRUE
9515     if test "$_os" = "Darwin"; then
9516         dnl make sure to use SDK path
9517         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9518         dnl omit -L/usr/lib
9519         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9520     elif test $_os = iOS; then
9521         dnl make sure to use SDK path
9522         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9523         LIBXML_CFLAGS="-I$usr/include/libxml2"
9524         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9525     else
9526         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9527         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9528         FilterLibs "${LIBXML_LIBS}"
9529         LIBXML_LIBS="${filteredlibs}"
9530     fi
9532     dnl Check for xmllint
9533     AC_PATH_PROG(XMLLINT, xmllint, no)
9534     if test "$XMLLINT" = "no"; then
9535         AC_MSG_ERROR([xmllint is required])
9536     fi
9537 else
9538     AC_MSG_RESULT([internal])
9539     SYSTEM_LIBXML=
9540     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9541     if test "$COM" = "MSC"; then
9542         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9543     fi
9544     if test "$COM" = "MSC"; then
9545         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9546     else
9547         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9548         if test "$_os" = Android; then
9549             LIBXML_LIBS="$LIBXML_LIBS -lm"
9550         fi
9551     fi
9552     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9554 AC_SUBST(SYSTEM_LIBXML)
9555 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9556     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9558 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9559 AC_SUBST(LIBXML_CFLAGS)
9560 AC_SUBST(LIBXML_LIBS)
9561 AC_SUBST(XMLLINT)
9563 # =====================================================================
9564 # Checking for a Python interpreter with version >= 3.3.
9565 # Optionally user can pass an option to configure, i. e.
9566 # ./configure PYTHON=/usr/bin/python
9567 # =====================================================================
9568 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9569     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9570     # unless PYTHON is defined as above which allows 'system'
9571     enable_python=internal
9573 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9574     if test -n "$PYTHON"; then
9575         PYTHON_FOR_BUILD=$PYTHON
9576     else
9577         # This allows a lack of system python with no error, we use internal one in that case.
9578         AM_PATH_PYTHON([3.3],, [:])
9579         # Clean PYTHON_VERSION checked below if cross-compiling
9580         PYTHON_VERSION=""
9581         if test "$PYTHON" != ":"; then
9582             PYTHON_FOR_BUILD=$PYTHON
9583         fi
9584     fi
9586 AC_SUBST(PYTHON_FOR_BUILD)
9588 # Checks for Python to use for Pyuno
9589 AC_MSG_CHECKING([which Python to use for Pyuno])
9590 case "$enable_python" in
9591 no|disable)
9592     if test -z $PYTHON_FOR_BUILD; then
9593         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9594         # requirement from the choice whether to include Python stuff in the installer, but why
9595         # bother?
9596         if test "$cross_compiling" = yes; then
9597             enable_python=system
9598         else
9599             AC_MSG_ERROR([Python is required at build time.])
9600         fi
9601     fi
9602     enable_python=no
9603     AC_MSG_RESULT([none])
9604     ;;
9605 ""|yes|auto)
9606     if test "$DISABLE_SCRIPTING" = TRUE -a -n "$PYTHON_FOR_BUILD"; then
9607         AC_MSG_RESULT([no, overridden by --disable-scripting])
9608         enable_python=no
9609     elif test $build_os = cygwin; then
9610         dnl When building on Windows we don't attempt to use any installed
9611         dnl "system"  Python.
9612         AC_MSG_RESULT([fully internal])
9613         enable_python=internal
9614     elif test "$cross_compiling" = yes; then
9615         AC_MSG_RESULT([system])
9616         enable_python=system
9617     else
9618         # Unset variables set by the above AM_PATH_PYTHON so that
9619         # we actually do check anew.
9620         AC_MSG_RESULT([])
9621         unset PYTHON am_cv_pathless_PYTHON ac_cv_path_PYTHON am_cv_python_version am_cv_python_platform am_cv_python_pythondir am_cv_python_pyexecdir
9622         AM_PATH_PYTHON([3.3],, [:])
9623         AC_MSG_CHECKING([which Python to use for Pyuno])
9624         if test "$PYTHON" = ":"; then
9625             if test -z "$PYTHON_FOR_BUILD"; then
9626                 AC_MSG_RESULT([fully internal])
9627             else
9628                 AC_MSG_RESULT([internal])
9629             fi
9630             enable_python=internal
9631         else
9632             AC_MSG_RESULT([system])
9633             enable_python=system
9634         fi
9635     fi
9636     ;;
9637 internal)
9638     AC_MSG_RESULT([internal])
9639     ;;
9640 fully-internal)
9641     AC_MSG_RESULT([fully internal])
9642     enable_python=internal
9643     ;;
9644 system)
9645     AC_MSG_RESULT([system])
9646     if test "$_os" = Darwin -a -z "$PYTHON"; then
9647         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
9648     fi
9649     ;;
9651     AC_MSG_ERROR([Incorrect --enable-python option])
9652     ;;
9653 esac
9655 if test $enable_python != no; then
9656     BUILD_TYPE="$BUILD_TYPE PYUNO"
9659 if test $enable_python = system; then
9660     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
9661         # Fallback: Accept these in the environment, or as set above
9662         # for MacOSX.
9663         :
9664     elif test "$cross_compiling" != yes; then
9665         # Unset variables set by the above AM_PATH_PYTHON so that
9666         # we actually do check anew.
9667         unset PYTHON am_cv_pathless_PYTHON ac_cv_path_PYTHON am_cv_python_version am_cv_python_platform am_cv_python_pythondir am_cv_python_pyexecdir
9668         # This causes an error if no python command is found
9669         AM_PATH_PYTHON([3.3])
9670         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
9671         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
9672         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
9673         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
9674         if test -z "$PKG_CONFIG"; then
9675             PYTHON_CFLAGS="-I$python_include"
9676             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9677         elif $PKG_CONFIG --exists python-$python_version-embed; then
9678             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
9679             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
9680         elif $PKG_CONFIG --exists python-$python_version; then
9681             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
9682             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
9683         else
9684             PYTHON_CFLAGS="-I$python_include"
9685             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9686         fi
9687         FilterLibs "${PYTHON_LIBS}"
9688         PYTHON_LIBS="${filteredlibs}"
9689     else
9690         dnl How to find out the cross-compilation Python installation path?
9691         AC_MSG_CHECKING([for python version])
9692         AS_IF([test -n "$PYTHON_VERSION"],
9693               [AC_MSG_RESULT([$PYTHON_VERSION])],
9694               [AC_MSG_RESULT([not found])
9695                AC_MSG_ERROR([no usable python found])])
9696         test -n "$PYTHON_CFLAGS" && break
9697     fi
9699     dnl Check if the headers really work
9700     save_CPPFLAGS="$CPPFLAGS"
9701     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
9702     AC_CHECK_HEADER(Python.h)
9703     CPPFLAGS="$save_CPPFLAGS"
9705     # let the PYTHON_FOR_BUILD match the same python installation that
9706     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
9707     # better for PythonTests.
9708     PYTHON_FOR_BUILD=$PYTHON
9711 if test "$with_lxml" != no; then
9712     if test -z "$PYTHON_FOR_BUILD"; then
9713         case $build_os in
9714             cygwin)
9715                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
9716                 ;;
9717             *)
9718                 if test "$cross_compiling" != yes ; then
9719                     BUILD_TYPE="$BUILD_TYPE LXML"
9720                 fi
9721                 ;;
9722         esac
9723     else
9724         AC_MSG_CHECKING([for python lxml])
9725         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
9726             AC_MSG_RESULT([yes])
9727         else
9728             case $build_os in
9729                 cygwin)
9730                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
9731                     ;;
9732                 *)
9733                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
9734                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
9735                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
9736                         else
9737                             BUILD_TYPE="$BUILD_TYPE LXML"
9738                             AC_MSG_RESULT([no, using internal lxml])
9739                         fi
9740                     else
9741                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
9742                     fi
9743                     ;;
9744             esac
9745         fi
9746     fi
9749 dnl By now enable_python should be "system", "internal" or "no"
9750 case $enable_python in
9751 system)
9752     SYSTEM_PYTHON=TRUE
9754     if test "x$ac_cv_header_Python_h" != "xyes"; then
9755        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
9756     fi
9758     AC_LANG_PUSH(C)
9759     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
9760     AC_MSG_CHECKING([for correct python library version])
9761        AC_RUN_IFELSE([AC_LANG_SOURCE([[
9762 #include <Python.h>
9764 int main(int argc, char **argv) {
9765    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
9766    else return 1;
9768        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
9769     AC_LANG_POP(C)
9771     dnl FIXME Check if the Python library can be linked with, too?
9772     ;;
9774 internal)
9775     SYSTEM_PYTHON=
9776     PYTHON_VERSION_MAJOR=3
9777     PYTHON_VERSION_MINOR=8
9778     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.10
9779     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
9780         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
9781     fi
9782     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
9783     BUILD_TYPE="$BUILD_TYPE PYTHON"
9784     if test "$OS" = LINUX -o "$OS" = WNT ; then
9785         BUILD_TYPE="$BUILD_TYPE LIBFFI"
9786     fi
9787     # Embedded Python dies without Home set
9788     if test "$HOME" = ""; then
9789         export HOME=""
9790     fi
9791     ;;
9793     DISABLE_PYTHON=TRUE
9794     SYSTEM_PYTHON=
9795     ;;
9797     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
9798     ;;
9799 esac
9801 AC_SUBST(DISABLE_PYTHON)
9802 AC_SUBST(SYSTEM_PYTHON)
9803 AC_SUBST(PYTHON_CFLAGS)
9804 AC_SUBST(PYTHON_LIBS)
9805 AC_SUBST(PYTHON_VERSION)
9806 AC_SUBST(PYTHON_VERSION_MAJOR)
9807 AC_SUBST(PYTHON_VERSION_MINOR)
9809 AC_MSG_CHECKING([whether to build LibreLogo])
9810 case "$enable_python" in
9811 no|disable)
9812     AC_MSG_RESULT([no; Python disabled])
9813     ;;
9815     if test "${enable_librelogo}" = "no"; then
9816         AC_MSG_RESULT([no])
9817     else
9818         AC_MSG_RESULT([yes])
9819         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
9820         AC_DEFINE([ENABLE_LIBRELOGO],1)
9821     fi
9822     ;;
9823 esac
9824 AC_SUBST(ENABLE_LIBRELOGO)
9826 ENABLE_MARIADBC=
9827 MARIADBC_MAJOR=1
9828 MARIADBC_MINOR=0
9829 MARIADBC_MICRO=2
9830 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
9831 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
9832     ENABLE_MARIADBC=TRUE
9833     AC_MSG_RESULT([yes])
9834     BUILD_TYPE="$BUILD_TYPE MARIADBC"
9835 else
9836     AC_MSG_RESULT([no])
9838 AC_SUBST(ENABLE_MARIADBC)
9839 AC_SUBST(MARIADBC_MAJOR)
9840 AC_SUBST(MARIADBC_MINOR)
9841 AC_SUBST(MARIADBC_MICRO)
9843 if test "$ENABLE_MARIADBC" = "TRUE"; then
9844     dnl ===================================================================
9845     dnl Check for system MariaDB
9846     dnl ===================================================================
9847     AC_MSG_CHECKING([which MariaDB to use])
9848     if test "$with_system_mariadb" = "yes"; then
9849         AC_MSG_RESULT([external])
9850         SYSTEM_MARIADB_CONNECTOR_C=TRUE
9851         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
9852         if test -z "$MARIADBCONFIG"; then
9853             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
9854             if test -z "$MARIADBCONFIG"; then
9855                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
9856                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
9857             fi
9858         fi
9859         AC_MSG_CHECKING([MariaDB version])
9860         MARIADB_VERSION=`$MARIADBCONFIG --version`
9861         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
9862         if test "$MARIADB_MAJOR" -ge "5"; then
9863             AC_MSG_RESULT([OK])
9864         else
9865             AC_MSG_ERROR([too old, use 5.0.x or later])
9866         fi
9867         AC_MSG_CHECKING([for MariaDB Client library])
9868         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
9869         if test "$COM_IS_CLANG" = TRUE; then
9870             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
9871         fi
9872         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
9873         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
9874         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
9875         dnl linux32:
9876         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
9877             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
9878             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
9879                 | sed -e 's|/lib64/|/lib/|')
9880         fi
9881         FilterLibs "${MARIADB_LIBS}"
9882         MARIADB_LIBS="${filteredlibs}"
9883         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
9884         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
9885         if test "$enable_bundle_mariadb" = "yes"; then
9886             AC_MSG_RESULT([yes])
9887             BUNDLE_MARIADB_CONNECTOR_C=TRUE
9888             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
9890 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
9892 /g' | grep -E '(mysqlclient|mariadb)')
9893             if test "$_os" = "Darwin"; then
9894                 LIBMARIADB=${LIBMARIADB}.dylib
9895             elif test "$_os" = "WINNT"; then
9896                 LIBMARIADB=${LIBMARIADB}.dll
9897             else
9898                 LIBMARIADB=${LIBMARIADB}.so
9899             fi
9900             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
9901             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
9902             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
9903                 AC_MSG_RESULT([found.])
9904                 PathFormat "$LIBMARIADB_PATH"
9905                 LIBMARIADB_PATH="$formatted_path"
9906             else
9907                 AC_MSG_ERROR([not found.])
9908             fi
9909         else
9910             AC_MSG_RESULT([no])
9911             BUNDLE_MARIADB_CONNECTOR_C=
9912         fi
9913     else
9914         AC_MSG_RESULT([internal])
9915         SYSTEM_MARIADB_CONNECTOR_C=
9916         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
9917         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
9918         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
9919     fi
9921     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
9922     AC_SUBST(MARIADB_CFLAGS)
9923     AC_SUBST(MARIADB_LIBS)
9924     AC_SUBST(LIBMARIADB)
9925     AC_SUBST(LIBMARIADB_PATH)
9926     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
9929 dnl ===================================================================
9930 dnl Check for system hsqldb
9931 dnl ===================================================================
9932 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
9933     HSQLDB_USE_JDBC_4_1=
9934     AC_MSG_CHECKING([which hsqldb to use])
9935     if test "$with_system_hsqldb" = "yes"; then
9936         AC_MSG_RESULT([external])
9937         SYSTEM_HSQLDB=TRUE
9938         if test -z $HSQLDB_JAR; then
9939             HSQLDB_JAR=/usr/share/java/hsqldb.jar
9940         fi
9941         if ! test -f $HSQLDB_JAR; then
9942                AC_MSG_ERROR(hsqldb.jar not found.)
9943         fi
9944         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
9945         export HSQLDB_JAR
9946         if $PERL -e \
9947            'use Archive::Zip;
9948             my $file = "$ENV{'HSQLDB_JAR'}";
9949             my $zip = Archive::Zip->new( $file );
9950             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
9951             if ( $mf =~ m/Specification-Version: 1.8.*/ )
9952             {
9953                 push @l, split(/\n/, $mf);
9954                 foreach my $line (@l)
9955                 {
9956                     if ($line =~ m/Specification-Version:/)
9957                     {
9958                         ($t, $version) = split (/:/,$line);
9959                         $version =~ s/^\s//;
9960                         ($a, $b, $c, $d) = split (/\./,$version);
9961                         if ($c == "0" && $d > "8")
9962                         {
9963                             exit 0;
9964                         }
9965                         else
9966                         {
9967                             exit 1;
9968                         }
9969                     }
9970                 }
9971             }
9972             else
9973             {
9974                 exit 1;
9975             }'; then
9976             AC_MSG_RESULT([yes])
9977         else
9978             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
9979         fi
9980     else
9981         AC_MSG_RESULT([internal])
9982         SYSTEM_HSQLDB=
9983         BUILD_TYPE="$BUILD_TYPE HSQLDB"
9984         NEED_ANT=TRUE
9985         AC_MSG_CHECKING([whether hsqldb should be built with JDBC 4.1])
9986         javanumver=`$JAVAINTERPRETER -version 2>&1 | $AWK -v num=true -f $SRC_ROOT/solenv/bin/getcompver.awk`
9987         if expr "$javanumver" '>=' 000100060000 > /dev/null; then
9988             AC_MSG_RESULT([yes])
9989             HSQLDB_USE_JDBC_4_1=TRUE
9990         else
9991             AC_MSG_RESULT([no])
9992         fi
9993     fi
9994 else
9995     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
9996         BUILD_TYPE="$BUILD_TYPE HSQLDB"
9997     fi
9999 AC_SUBST(SYSTEM_HSQLDB)
10000 AC_SUBST(HSQLDB_JAR)
10001 AC_SUBST([HSQLDB_USE_JDBC_4_1])
10003 dnl ===================================================================
10004 dnl Check for PostgreSQL stuff
10005 dnl ===================================================================
10006 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
10007 if test "x$enable_postgresql_sdbc" != "xno"; then
10008     AC_MSG_RESULT([yes])
10009     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
10011     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
10012         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
10013     fi
10014     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
10015         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
10016     fi
10018     postgres_interface=""
10019     if test "$with_system_postgresql" = "yes"; then
10020         postgres_interface="external PostgreSQL"
10021         SYSTEM_POSTGRESQL=TRUE
10022         if test "$_os" = Darwin; then
10023             supp_path=''
10024             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
10025                 pg_supp_path="$P_SEP$d$pg_supp_path"
10026             done
10027         fi
10028         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
10029         if test -n "$PGCONFIG"; then
10030             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
10031             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
10032         else
10033             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
10034               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
10035               POSTGRESQL_LIB=$POSTGRESQL_LIBS
10036             ],[
10037               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
10038             ])
10039         fi
10040         FilterLibs "${POSTGRESQL_LIB}"
10041         POSTGRESQL_LIB="${filteredlibs}"
10042     else
10043         # if/when anything else than PostgreSQL uses Kerberos,
10044         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
10045         WITH_KRB5=
10046         WITH_GSSAPI=
10047         case "$_os" in
10048         Darwin)
10049             # macOS has system MIT Kerberos 5 since 10.4
10050             if test "$with_krb5" != "no"; then
10051                 WITH_KRB5=TRUE
10052                 save_LIBS=$LIBS
10053                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
10054                 # that the libraries where these functions are located on macOS will change, is it?
10055                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10056                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10057                 KRB5_LIBS=$LIBS
10058                 LIBS=$save_LIBS
10059                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10060                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10061                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10062                 LIBS=$save_LIBS
10063             fi
10064             if test "$with_gssapi" != "no"; then
10065                 WITH_GSSAPI=TRUE
10066                 save_LIBS=$LIBS
10067                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10068                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10069                 GSSAPI_LIBS=$LIBS
10070                 LIBS=$save_LIBS
10071             fi
10072             ;;
10073         WINNT)
10074             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
10075                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
10076             fi
10077             ;;
10078         Linux|GNU|*BSD|DragonFly)
10079             if test "$with_krb5" != "no"; then
10080                 WITH_KRB5=TRUE
10081                 save_LIBS=$LIBS
10082                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10083                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10084                 KRB5_LIBS=$LIBS
10085                 LIBS=$save_LIBS
10086                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10087                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10088                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10089                 LIBS=$save_LIBS
10090             fi
10091             if test "$with_gssapi" != "no"; then
10092                 WITH_GSSAPI=TRUE
10093                 save_LIBS=$LIBS
10094                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10095                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10096                 GSSAPI_LIBS=$LIBS
10097                 LIBS=$save_LIBS
10098             fi
10099             ;;
10100         *)
10101             if test "$with_krb5" = "yes"; then
10102                 WITH_KRB5=TRUE
10103                 save_LIBS=$LIBS
10104                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10105                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10106                 KRB5_LIBS=$LIBS
10107                 LIBS=$save_LIBS
10108                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10109                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10110                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10111                 LIBS=$save_LIBS
10112             fi
10113             if test "$with_gssapi" = "yes"; then
10114                 WITH_GSSAPI=TRUE
10115                 save_LIBS=$LIBS
10116                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10117                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10118                 LIBS=$save_LIBS
10119                 GSSAPI_LIBS=$LIBS
10120             fi
10121         esac
10123         if test -n "$with_libpq_path"; then
10124             SYSTEM_POSTGRESQL=TRUE
10125             postgres_interface="external libpq"
10126             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
10127             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
10128         else
10129             SYSTEM_POSTGRESQL=
10130             postgres_interface="internal"
10131             POSTGRESQL_LIB=""
10132             POSTGRESQL_INC="%OVERRIDE_ME%"
10133             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10134         fi
10135     fi
10137     AC_MSG_CHECKING([PostgreSQL C interface])
10138     AC_MSG_RESULT([$postgres_interface])
10140     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10141         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10142         save_CFLAGS=$CFLAGS
10143         save_CPPFLAGS=$CPPFLAGS
10144         save_LIBS=$LIBS
10145         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10146         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10147         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10148         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10149             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10150         CFLAGS=$save_CFLAGS
10151         CPPFLAGS=$save_CPPFLAGS
10152         LIBS=$save_LIBS
10153     fi
10154     BUILD_POSTGRESQL_SDBC=TRUE
10155 else
10156     AC_MSG_RESULT([no])
10158 AC_SUBST(WITH_KRB5)
10159 AC_SUBST(WITH_GSSAPI)
10160 AC_SUBST(GSSAPI_LIBS)
10161 AC_SUBST(KRB5_LIBS)
10162 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10163 AC_SUBST(SYSTEM_POSTGRESQL)
10164 AC_SUBST(POSTGRESQL_INC)
10165 AC_SUBST(POSTGRESQL_LIB)
10167 dnl ===================================================================
10168 dnl Check for Firebird stuff
10169 dnl ===================================================================
10170 ENABLE_FIREBIRD_SDBC=
10171 if test "$enable_firebird_sdbc" = "yes" ; then
10172     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10174     dnl ===================================================================
10175     dnl Check for system Firebird
10176     dnl ===================================================================
10177     AC_MSG_CHECKING([which Firebird to use])
10178     if test "$with_system_firebird" = "yes"; then
10179         AC_MSG_RESULT([external])
10180         SYSTEM_FIREBIRD=TRUE
10181         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10182         if test -z "$FIREBIRDCONFIG"; then
10183             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10184             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10185                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10186             ])
10187             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10188         else
10189             AC_MSG_NOTICE([fb_config found])
10190             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10191             AC_MSG_CHECKING([for Firebird Client library])
10192             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10193             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10194             FilterLibs "${FIREBIRD_LIBS}"
10195             FIREBIRD_LIBS="${filteredlibs}"
10196         fi
10197         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10198         AC_MSG_CHECKING([Firebird version])
10199         if test -n "${FIREBIRD_VERSION}"; then
10200             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10201             if test "$FIREBIRD_MAJOR" -ge "3"; then
10202                 AC_MSG_RESULT([OK])
10203             else
10204                 AC_MSG_ERROR([Ensure firebird >= 3 is installed])
10205             fi
10206         else
10207             save_CFLAGS="${CFLAGS}"
10208             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10209             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10210 #if defined(FB_API_VER) && FB_API_VER == 30
10211 int fb_api_is_30(void) { return 0; }
10212 #else
10213 #error "Wrong Firebird API version"
10214 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10215             CFLAGS="$save_CFLAGS"
10216         fi
10217         ENABLE_FIREBIRD_SDBC=TRUE
10218         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10219     elif test "$enable_database_connectivity" = no; then
10220         AC_MSG_RESULT([none])
10221     elif test "$cross_compiling" = "yes"; then
10222         AC_MSG_RESULT([none])
10223     else
10224         dnl Embedded Firebird has version 3.0
10225         dnl We need libatomic_ops for any non X86/X64 system
10226         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10227             dnl ===================================================================
10228             dnl Check for system libatomic_ops
10229             dnl ===================================================================
10230             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10231             if test "$with_system_libatomic_ops" = "yes"; then
10232                 SYSTEM_LIBATOMIC_OPS=TRUE
10233                 AC_CHECK_HEADERS(atomic_ops.h, [],
10234                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10235             else
10236                 SYSTEM_LIBATOMIC_OPS=
10237                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10238                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10239                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10240             fi
10241         fi
10243         AC_MSG_RESULT([internal])
10244         SYSTEM_FIREBIRD=
10245         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10246         FIREBIRD_LIBS="-lfbclient"
10248         if test "$with_system_libtommath" = "yes"; then
10249             SYSTEM_LIBTOMMATH=TRUE
10250             dnl check for tommath presence
10251             save_LIBS=$LIBS
10252             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10253             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10254             LIBS=$save_LIBS
10255         else
10256             SYSTEM_LIBTOMMATH=
10257             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10258             LIBTOMMATH_LIBS="-ltommath"
10259             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10260         fi
10262         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10263         ENABLE_FIREBIRD_SDBC=TRUE
10264         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10265     fi
10267 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10268 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10269 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10270 AC_SUBST(LIBATOMIC_OPS_LIBS)
10271 AC_SUBST(SYSTEM_FIREBIRD)
10272 AC_SUBST(FIREBIRD_CFLAGS)
10273 AC_SUBST(FIREBIRD_LIBS)
10274 AC_SUBST(SYSTEM_LIBTOMMATH)
10275 AC_SUBST(LIBTOMMATH_CFLAGS)
10276 AC_SUBST(LIBTOMMATH_LIBS)
10278 dnl ===================================================================
10279 dnl Check for system curl
10280 dnl ===================================================================
10281 AC_MSG_CHECKING([which libcurl to use])
10282 if test "$with_system_curl" = "auto"; then
10283     with_system_curl="$with_system_libs"
10286 if test "$enable_curl" = "yes" -a "$with_system_curl" = "yes"; then
10287     AC_MSG_RESULT([external])
10288     SYSTEM_CURL=TRUE
10290     # First try PKGCONFIG and then fall back
10291     PKG_CHECK_MODULES(CURL, libcurl >= 7.63.0,, [:])
10293     if test -n "$CURL_PKG_ERRORS"; then
10294         AC_PATH_PROG(CURLCONFIG, curl-config)
10295         if test -z "$CURLCONFIG"; then
10296             AC_MSG_ERROR([curl development files not found])
10297         fi
10298         CURL_LIBS=`$CURLCONFIG --libs`
10299         FilterLibs "${CURL_LIBS}"
10300         CURL_LIBS="${filteredlibs}"
10301         CURL_CFLAGS=$("$CURLCONFIG" --cflags | sed -e "s/-I/${ISYSTEM?}/g")
10302         curl_version=`$CURLCONFIG --version | $SED -e 's/^libcurl //'`
10304         AC_MSG_CHECKING([whether libcurl is >= 7.19.4])
10305         case $curl_version in
10306         dnl brackets doubled below because Autoconf uses them as m4 quote characters,
10307         dnl so they need to be doubled to end up in the configure script
10308         7.19.4|7.19.[[5-9]]|7.[[2-9]]?.*|7.???.*|[[8-9]].*|[[1-9]][[0-9]].*)
10309             AC_MSG_RESULT([yes])
10310             ;;
10311         *)
10312             AC_MSG_ERROR([no, you have $curl_version])
10313             ;;
10314         esac
10315     fi
10317     ENABLE_CURL=TRUE
10318 elif test "$enable_curl" = "no"; then
10319     AC_MSG_RESULT([none])
10320 else
10321     AC_MSG_RESULT([internal])
10322     SYSTEM_CURL=
10323     BUILD_TYPE="$BUILD_TYPE CURL"
10324     ENABLE_CURL=TRUE
10326 AC_SUBST(SYSTEM_CURL)
10327 AC_SUBST(CURL_CFLAGS)
10328 AC_SUBST(CURL_LIBS)
10329 AC_SUBST(ENABLE_CURL)
10331 dnl ===================================================================
10332 dnl Check for system boost
10333 dnl ===================================================================
10334 AC_MSG_CHECKING([which boost to use])
10335 if test "$with_system_boost" = "yes"; then
10336     AC_MSG_RESULT([external])
10337     SYSTEM_BOOST=TRUE
10338     AX_BOOST_BASE([1.66],,[AC_MSG_ERROR([no suitable Boost found])])
10339     AX_BOOST_DATE_TIME
10340     AX_BOOST_FILESYSTEM
10341     AX_BOOST_IOSTREAMS
10342     AX_BOOST_LOCALE
10343     AC_LANG_PUSH([C++])
10344     save_CXXFLAGS=$CXXFLAGS
10345     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10346     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10347        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10348     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10349        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10350     CXXFLAGS=$save_CXXFLAGS
10351     AC_LANG_POP([C++])
10352     # this is in m4/ax_boost_base.m4
10353     FilterLibs "${BOOST_LDFLAGS}"
10354     BOOST_LDFLAGS="${filteredlibs}"
10355 else
10356     AC_MSG_RESULT([internal])
10357     BUILD_TYPE="$BUILD_TYPE BOOST"
10358     SYSTEM_BOOST=
10359     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10360         # use warning-suppressing wrapper headers
10361         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10362     else
10363         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10364     fi
10366 AC_SUBST(SYSTEM_BOOST)
10368 dnl ===================================================================
10369 dnl Check for system mdds
10370 dnl ===================================================================
10371 libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-2.0 >= 2.0.0], ["-I${WORKDIR}/UnpackedTarball/mdds/include"])
10373 dnl ===================================================================
10374 dnl Check for system cuckoo
10375 dnl ===================================================================
10376 AC_MSG_CHECKING([which cuckoo to use])
10377 if test "$with_system_cuckoo" = "yes"; then
10378     AC_MSG_RESULT([external])
10379     SYSTEM_CUCKOO=TRUE
10380     AC_LANG_PUSH([C++])
10381     AC_CHECK_HEADER([libcuckoo/cuckoohash_map.hh], [],
10382        [AC_MSG_ERROR([libcuckoo/cuckoohash_map.hh not found. install cuckoo])], [])
10383     AC_LANG_POP([C++])
10384 else
10385     AC_MSG_RESULT([internal])
10386     BUILD_TYPE="$BUILD_TYPE CUCKOO"
10387     SYSTEM_CUCKOO=
10388     CUCKOO_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/cuckoo"
10390 AC_SUBST([CUCKOO_CFLAGS])
10391 AC_SUBST([SYSTEM_CUCKOO])
10393 dnl ===================================================================
10394 dnl Check for system glm
10395 dnl ===================================================================
10396 AC_MSG_CHECKING([which glm to use])
10397 if test "$with_system_glm" = "yes"; then
10398     AC_MSG_RESULT([external])
10399     SYSTEM_GLM=TRUE
10400     AC_LANG_PUSH([C++])
10401     AC_CHECK_HEADER([glm/glm.hpp], [],
10402        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10403     AC_LANG_POP([C++])
10404 else
10405     AC_MSG_RESULT([internal])
10406     BUILD_TYPE="$BUILD_TYPE GLM"
10407     SYSTEM_GLM=
10408     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10410 AC_SUBST([GLM_CFLAGS])
10411 AC_SUBST([SYSTEM_GLM])
10413 dnl ===================================================================
10414 dnl Check for system odbc
10415 dnl ===================================================================
10416 AC_MSG_CHECKING([which odbc headers to use])
10417 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
10418     AC_MSG_RESULT([external])
10419     SYSTEM_ODBC_HEADERS=TRUE
10421     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10422         save_CPPFLAGS=$CPPFLAGS
10423         find_winsdk
10424         PathFormat "$winsdktest"
10425         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"
10426         AC_CHECK_HEADER(sqlext.h, [],
10427             [AC_MSG_ERROR(odbc not found. install odbc)],
10428             [#include <windows.h>])
10429         CPPFLAGS=$save_CPPFLAGS
10430     else
10431         AC_CHECK_HEADER(sqlext.h, [],
10432             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10433     fi
10434 elif test "$enable_database_connectivity" = no; then
10435     AC_MSG_RESULT([none])
10436 else
10437     AC_MSG_RESULT([internal])
10438     SYSTEM_ODBC_HEADERS=
10440 AC_SUBST(SYSTEM_ODBC_HEADERS)
10442 dnl ===================================================================
10443 dnl Check for system NSS
10444 dnl ===================================================================
10445 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10446     libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8])
10447     AC_DEFINE(HAVE_FEATURE_NSS)
10448     ENABLE_NSS=TRUE
10449 elif test $_os != iOS ; then
10450     with_tls=openssl
10452 AC_SUBST(ENABLE_NSS)
10454 dnl ===================================================================
10455 dnl Enable LDAP support
10456 dnl ===================================================================
10458 if test "$test_openldap" = yes; then
10459     AC_MSG_CHECKING([whether to enable LDAP support])
10460     if test "$enable_ldap" = yes -a \( "$ENABLE_NSS" = TRUE -o "$with_system_openldap" = yes \); then
10461         AC_MSG_RESULT([yes])
10462         ENABLE_LDAP=TRUE
10463     else
10464         if test "$enable_ldap" != "yes"; then
10465             AC_MSG_RESULT([no])
10466         else
10467             AC_MSG_RESULT([no (needs NSS or system openldap)])
10468         fi
10469     fi
10471 dnl ===================================================================
10472 dnl Check for system openldap
10473 dnl ===================================================================
10475     if test "$ENABLE_LDAP" = TRUE; then
10476         AC_MSG_CHECKING([which openldap library to use])
10477         if test "$with_system_openldap" = yes; then
10478             AC_MSG_RESULT([external])
10479             SYSTEM_OPENLDAP=TRUE
10480             AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10481             AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10482             AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10483         else
10484             AC_MSG_RESULT([internal])
10485             BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10486         fi
10487     fi
10490 AC_SUBST(ENABLE_LDAP)
10491 AC_SUBST(SYSTEM_OPENLDAP)
10493 dnl ===================================================================
10494 dnl Check for TLS/SSL and cryptographic implementation to use
10495 dnl ===================================================================
10496 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10497 if test -n "$with_tls"; then
10498     case $with_tls in
10499     openssl)
10500         AC_DEFINE(USE_TLS_OPENSSL)
10501         TLS=OPENSSL
10502         AC_MSG_RESULT([$TLS])
10504         if test "$enable_openssl" != "yes"; then
10505             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10506         fi
10508         # warn that OpenSSL has been selected but not all TLS code has this option
10509         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS])
10510         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS"
10511         ;;
10512     nss)
10513         AC_DEFINE(USE_TLS_NSS)
10514         TLS=NSS
10515         AC_MSG_RESULT([$TLS])
10516         ;;
10517     no)
10518         AC_MSG_RESULT([none])
10519         AC_MSG_WARN([Skipping TLS/SSL])
10520         ;;
10521     *)
10522         AC_MSG_RESULT([])
10523         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10524 openssl - OpenSSL
10525 nss - Mozilla's Network Security Services (NSS)
10526     ])
10527         ;;
10528     esac
10529 else
10530     # default to using NSS, it results in smaller oox lib
10531     AC_DEFINE(USE_TLS_NSS)
10532     TLS=NSS
10533     AC_MSG_RESULT([$TLS])
10535 AC_SUBST(TLS)
10537 dnl ===================================================================
10538 dnl Check for system sane
10539 dnl ===================================================================
10540 AC_MSG_CHECKING([which sane header to use])
10541 if test "$with_system_sane" = "yes"; then
10542     AC_MSG_RESULT([external])
10543     AC_CHECK_HEADER(sane/sane.h, [],
10544       [AC_MSG_ERROR(sane not found. install sane)], [])
10545 else
10546     AC_MSG_RESULT([internal])
10547     BUILD_TYPE="$BUILD_TYPE SANE"
10550 dnl ===================================================================
10551 dnl Check for system icu
10552 dnl ===================================================================
10553 SYSTEM_GENBRK=
10554 SYSTEM_GENCCODE=
10555 SYSTEM_GENCMN=
10557 ICU_MAJOR=70
10558 ICU_MINOR=1
10559 ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10560 ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10561 ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10562 AC_MSG_CHECKING([which icu to use])
10563 if test "$with_system_icu" = "yes"; then
10564     AC_MSG_RESULT([external])
10565     SYSTEM_ICU=TRUE
10566     AC_LANG_PUSH([C++])
10567     AC_MSG_CHECKING([for unicode/rbbi.h])
10568     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10569     AC_LANG_POP([C++])
10571     if test "$cross_compiling" != "yes"; then
10572         PKG_CHECK_MODULES(ICU, icu-i18n >= 4.6)
10573         ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10574         ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10575         ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10576     fi
10578     if test "$cross_compiling" = "yes" -a \( "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" \); then
10579         ICU_VERSION_FOR_BUILD=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10580         ICU_MAJOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f1`
10581         ICU_MINOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f2`
10582         AC_MSG_CHECKING([if MinGW and system versions of ICU are compatible])
10583         if test "$ICU_MAJOR" -eq "$ICU_MAJOR_FOR_BUILD" -a "$ICU_MINOR" -eq "$ICU_MINOR_FOR_BUILD"; then
10584             AC_MSG_RESULT([yes])
10585         else
10586             AC_MSG_RESULT([no])
10587             if test "$with_system_icu_for_build" != "force"; then
10588                 AC_MSG_ERROR([System ICU is not version-compatible with MinGW ICU.
10589 You can use --with-system-icu-for-build=force to use it anyway.])
10590             fi
10591         fi
10592     fi
10594     if test "$cross_compiling" != "yes" -o "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force"; then
10595         # using the system icu tools can lead to version confusion, use the
10596         # ones from the build environment when cross-compiling
10597         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10598         if test -z "$SYSTEM_GENBRK"; then
10599             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10600         fi
10601         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10602         if test -z "$SYSTEM_GENCCODE"; then
10603             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10604         fi
10605         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10606         if test -z "$SYSTEM_GENCMN"; then
10607             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10608         fi
10609         if test "$ICU_MAJOR" -ge "49"; then
10610             ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10611             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10612             ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10613         else
10614             ICU_RECLASSIFIED_PREPEND_SET_EMPTY=
10615             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER=
10616             ICU_RECLASSIFIED_HEBREW_LETTER=
10617         fi
10618     fi
10620     if test "$cross_compiling" = "yes"; then
10621         if test "$ICU_MAJOR" -ge "50"; then
10622             AC_MSG_RESULT([Ignore ICU_MINOR as obviously the libraries don't include the minor version in their names any more])
10623             ICU_MINOR=""
10624         fi
10625     fi
10626 else
10627     AC_MSG_RESULT([internal])
10628     SYSTEM_ICU=
10629     BUILD_TYPE="$BUILD_TYPE ICU"
10630     # surprisingly set these only for "internal" (to be used by various other
10631     # external libs): the system icu-config is quite unhelpful and spits out
10632     # dozens of weird flags and also default path -I/usr/include
10633     ICU_CFLAGS="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10634     ICU_LIBS="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10636 if test "$ICU_MAJOR" -ge "59"; then
10637     # As of ICU 59 it defaults to typedef char16_t UChar; which is available
10638     # with -std=c++11 but not all external libraries can be built with that,
10639     # for those use a bit-compatible typedef uint16_t UChar; see
10640     # icu/source/common/unicode/umachine.h
10641     ICU_UCHAR_TYPE="-DUCHAR_TYPE=uint16_t"
10642 else
10643     ICU_UCHAR_TYPE=""
10645 AC_SUBST(SYSTEM_ICU)
10646 AC_SUBST(SYSTEM_GENBRK)
10647 AC_SUBST(SYSTEM_GENCCODE)
10648 AC_SUBST(SYSTEM_GENCMN)
10649 AC_SUBST(ICU_MAJOR)
10650 AC_SUBST(ICU_MINOR)
10651 AC_SUBST(ICU_RECLASSIFIED_PREPEND_SET_EMPTY)
10652 AC_SUBST(ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER)
10653 AC_SUBST(ICU_RECLASSIFIED_HEBREW_LETTER)
10654 AC_SUBST(ICU_CFLAGS)
10655 AC_SUBST(ICU_LIBS)
10656 AC_SUBST(ICU_UCHAR_TYPE)
10658 dnl ==================================================================
10659 dnl Breakpad
10660 dnl ==================================================================
10661 DEFAULT_CRASHDUMP_VALUE="true"
10662 AC_MSG_CHECKING([whether to enable breakpad])
10663 if test "$enable_breakpad" != yes; then
10664     AC_MSG_RESULT([no])
10665 else
10666     AC_MSG_RESULT([yes])
10667     ENABLE_BREAKPAD="TRUE"
10668     AC_DEFINE(ENABLE_BREAKPAD)
10669     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
10670     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
10672     AC_MSG_CHECKING([for disable crash dump])
10673     if test "$enable_crashdump" = no; then
10674         DEFAULT_CRASHDUMP_VALUE="false"
10675         AC_MSG_RESULT([yes])
10676     else
10677        AC_MSG_RESULT([no])
10678     fi
10680     AC_MSG_CHECKING([for crashreport config])
10681     if test "$with_symbol_config" = "no"; then
10682         BREAKPAD_SYMBOL_CONFIG="invalid"
10683         AC_MSG_RESULT([no])
10684     else
10685         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
10686         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
10687         AC_MSG_RESULT([yes])
10688     fi
10689     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
10691 AC_SUBST(ENABLE_BREAKPAD)
10692 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
10694 dnl ==================================================================
10695 dnl libfuzzer
10696 dnl ==================================================================
10697 AC_MSG_CHECKING([whether to enable fuzzers])
10698 if test "$enable_fuzzers" != yes; then
10699     AC_MSG_RESULT([no])
10700 else
10701     if test -z $LIB_FUZZING_ENGINE; then
10702       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
10703     fi
10704     AC_MSG_RESULT([yes])
10705     ENABLE_FUZZERS="TRUE"
10706     AC_DEFINE([ENABLE_FUZZERS],1)
10707     BUILD_TYPE="$BUILD_TYPE FUZZERS"
10709 AC_SUBST(LIB_FUZZING_ENGINE)
10710 AC_SUBST(ENABLE_FUZZERS)
10712 dnl ===================================================================
10713 dnl Orcus
10714 dnl ===================================================================
10715 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.17 >= 0.17.0])
10716 if test "$with_system_orcus" != "yes"; then
10717     if test "$SYSTEM_BOOST" = "TRUE"; then
10718         dnl Link with Boost.System
10719         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
10720         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
10721         dnl in documentation has no effect.
10722         AX_BOOST_SYSTEM
10723     fi
10725 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
10726 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
10727 AC_SUBST([BOOST_SYSTEM_LIB])
10728 AC_SUBST(SYSTEM_LIBORCUS)
10730 dnl ===================================================================
10731 dnl HarfBuzz
10732 dnl ===================================================================
10733 libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3],
10734                          ["-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"],
10735                          ["-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"])
10737 libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 0.9.42],
10738                          ["-I${WORKDIR}/UnpackedTarball/harfbuzz/src"],
10739                          ["-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"])
10741 if test "$COM" = "MSC"; then # override the above
10742     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
10743     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
10746 if test "$with_system_harfbuzz" = "yes"; then
10747     if test "$with_system_graphite" = "no"; then
10748         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
10749     fi
10750     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
10751     save_LIBS="$LIBS"
10752     save_CFLAGS="$CFLAGS"
10753     LIBS="$LIBS $HARFBUZZ_LIBS"
10754     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
10755     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
10756     LIBS="$save_LIBS"
10757     CFLAGS="$save_CFLAGS"
10758 else
10759     if test "$with_system_graphite" = "yes"; then
10760         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
10761     fi
10764 if test "$USING_X11" = TRUE; then
10765     AC_PATH_X
10766     AC_PATH_XTRA
10767     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
10769     if test -z "$x_includes"; then
10770         x_includes="default_x_includes"
10771     fi
10772     if test -z "$x_libraries"; then
10773         x_libraries="default_x_libraries"
10774     fi
10775     CFLAGS="$CFLAGS $X_CFLAGS"
10776     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
10777     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
10778 else
10779     x_includes="no_x_includes"
10780     x_libraries="no_x_libraries"
10783 if test "$USING_X11" = TRUE; then
10784     dnl ===================================================================
10785     dnl Check for extension headers
10786     dnl ===================================================================
10787     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
10788      [#include <X11/extensions/shape.h>])
10790     # vcl needs ICE and SM
10791     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
10792     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
10793         [AC_MSG_ERROR(ICE library not found)])
10794     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
10795     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
10796         [AC_MSG_ERROR(SM library not found)])
10799 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
10800     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
10801     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
10804 dnl ===================================================================
10805 dnl Check for system Xrender
10806 dnl ===================================================================
10807 AC_MSG_CHECKING([whether to use Xrender])
10808 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
10809     AC_MSG_RESULT([yes])
10810     PKG_CHECK_MODULES(XRENDER, xrender)
10811     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10812     FilterLibs "${XRENDER_LIBS}"
10813     XRENDER_LIBS="${filteredlibs}"
10814     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
10815       [AC_MSG_ERROR(libXrender not found or functional)], [])
10816     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
10817       [AC_MSG_ERROR(Xrender not found. install X)], [])
10818 else
10819     AC_MSG_RESULT([no])
10821 AC_SUBST(XRENDER_CFLAGS)
10822 AC_SUBST(XRENDER_LIBS)
10824 dnl ===================================================================
10825 dnl Check for XRandr
10826 dnl ===================================================================
10827 AC_MSG_CHECKING([whether to enable RandR support])
10828 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
10829     AC_MSG_RESULT([yes])
10830     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
10831     if test "$ENABLE_RANDR" != "TRUE"; then
10832         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
10833                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
10834         XRANDR_CFLAGS=" "
10835         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
10836           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
10837         XRANDR_LIBS="-lXrandr "
10838         ENABLE_RANDR="TRUE"
10839     fi
10840     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10841     FilterLibs "${XRANDR_LIBS}"
10842     XRANDR_LIBS="${filteredlibs}"
10843 else
10844     ENABLE_RANDR=""
10845     AC_MSG_RESULT([no])
10847 AC_SUBST(XRANDR_CFLAGS)
10848 AC_SUBST(XRANDR_LIBS)
10849 AC_SUBST(ENABLE_RANDR)
10851 if test "$test_webdav" = yes; then
10852     if test -z "$with_webdav"; then
10853         WITH_WEBDAV=neon
10854         if test "$enable_mpl_subset" = yes; then
10855             WITH_WEBDAV=serf
10856         fi
10857     else
10858         WITH_WEBDAV="$with_webdav"
10859     fi
10862 AC_MSG_CHECKING([for webdav library])
10863 case "$WITH_WEBDAV" in
10864 curl)
10865     AC_MSG_RESULT([curl])
10866     # curl is already mandatory (almost) and checked elsewhere
10867     if test "$enable_curl" = "no"; then
10868         AC_MSG_ERROR(["--with-webdav=curl conflicts with --disable-curl"])
10869     fi
10870     ;;
10871 serf)
10872     AC_MSG_RESULT([serf])
10873     # Check for system apr-util
10874     libo_CHECK_SYSTEM_MODULE([apr],[APR],[apr-util-1],
10875                              ["-I${WORKDIR}/UnpackedTarball/apr/include -I${WORKDIR}/UnpackedTarball/apr_util/include"],
10876                              ["-L${WORKDIR}/UnpackedTarball/apr/.libs -lapr-1 -L${WORKDIR}/UnpackedTarball/apr_util/.libs -laprutil-1"])
10877     if test "$COM" = "MSC"; then
10878         APR_LIB_DIR="LibR"
10879         test -n "${MSVC_USE_DEBUG_RUNTIME}" && APR_LIB_DIR="LibD"
10880         APR_LIBS="${WORKDIR}/UnpackedTarball/apr/${APR_LIB_DIR}/apr-1.lib ${WORKDIR}/UnpackedTarball/apr_util/${APR_LIB_DIR}/aprutil-1.lib"
10881     fi
10883     # Check for system serf
10884     libo_CHECK_SYSTEM_MODULE([serf],[SERF],[serf-1 >= 1.3.9])
10885     ;;
10886 neon)
10887     AC_MSG_RESULT([neon])
10888     # Check for system neon
10889     libo_CHECK_SYSTEM_MODULE([neon],[NEON],[neon >= 0.31.2])
10890     if test "$with_system_neon" = "yes"; then
10891         NEON_VERSION="`$PKG_CONFIG --modversion neon | $SED 's/\.//g'`"
10892     else
10893         NEON_VERSION=0312
10894     fi
10895     AC_SUBST(NEON_VERSION)
10896     ;;
10898     AC_MSG_RESULT([none, disabled])
10899     WITH_WEBDAV=""
10900     ;;
10901 esac
10902 AC_SUBST(WITH_WEBDAV)
10904 dnl ===================================================================
10905 dnl Check for disabling cve_tests
10906 dnl ===================================================================
10907 AC_MSG_CHECKING([whether to execute CVE tests])
10908 # If not explicitly enabled or disabled, default
10909 if test -z "$enable_cve_tests"; then
10910     case "$OS" in
10911     WNT)
10912         # Default cves off for Windows with its wild and wonderful
10913         # variety of AV software kicking in and panicking
10914         enable_cve_tests=no
10915         ;;
10916     *)
10917         # otherwise yes
10918         enable_cve_tests=yes
10919         ;;
10920     esac
10922 if test "$enable_cve_tests" = "no"; then
10923     AC_MSG_RESULT([no])
10924     DISABLE_CVE_TESTS=TRUE
10925     AC_SUBST(DISABLE_CVE_TESTS)
10926 else
10927     AC_MSG_RESULT([yes])
10930 dnl ===================================================================
10931 dnl Check for enabling chart XShape tests
10932 dnl ===================================================================
10933 AC_MSG_CHECKING([whether to execute chart XShape tests])
10934 if test "$enable_chart_tests" = "yes" -o '(' "$_os" = "WINNT" -a "$enable_chart_tests" != "no" ')'; then
10935     AC_MSG_RESULT([yes])
10936     ENABLE_CHART_TESTS=TRUE
10937     AC_SUBST(ENABLE_CHART_TESTS)
10938 else
10939     AC_MSG_RESULT([no])
10942 dnl ===================================================================
10943 dnl Check for system openssl
10944 dnl ===================================================================
10945 ENABLE_OPENSSL=
10946 AC_MSG_CHECKING([whether to disable OpenSSL usage])
10947 if test "$enable_openssl" = "yes"; then
10948     AC_MSG_RESULT([no])
10949     ENABLE_OPENSSL=TRUE
10950     if test "$_os" = Darwin ; then
10951         # OpenSSL is deprecated when building for 10.7 or later.
10952         #
10953         # http://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
10954         # http://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
10956         with_system_openssl=no
10957         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10958     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
10959             && test "$with_system_openssl" != "no"; then
10960         with_system_openssl=yes
10961         SYSTEM_OPENSSL=TRUE
10962         OPENSSL_CFLAGS=
10963         OPENSSL_LIBS="-lssl -lcrypto"
10964     else
10965         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10966     fi
10967     if test "$with_system_openssl" = "yes"; then
10968         AC_MSG_CHECKING([whether openssl supports SHA512])
10969         AC_LANG_PUSH([C])
10970         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
10971             SHA512_CTX context;
10972 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
10973         AC_LANG_POP(C)
10974     fi
10975 else
10976     AC_MSG_RESULT([yes])
10978     # warn that although OpenSSL is disabled, system libraries may depend on it
10979     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
10980     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
10983 AC_SUBST([ENABLE_OPENSSL])
10985 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
10986     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
10987         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
10988         enable_cipher_openssl_backend=no
10989     else
10990         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
10991     fi
10993 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
10994 ENABLE_CIPHER_OPENSSL_BACKEND=
10995 if test "$enable_cipher_openssl_backend" = yes; then
10996     AC_MSG_RESULT([yes])
10997     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
10998 else
10999     AC_MSG_RESULT([no])
11001 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
11003 dnl ===================================================================
11004 dnl Select the crypto backends used by LO
11005 dnl ===================================================================
11007 if test "$build_crypto" = yes; then
11008     if test "$OS" = WNT; then
11009         BUILD_TYPE="$BUILD_TYPE CRYPTO_MSCAPI"
11010         AC_DEFINE([USE_CRYPTO_MSCAPI])
11011     elif test "$ENABLE_NSS" = TRUE; then
11012         BUILD_TYPE="$BUILD_TYPE CRYPTO_NSS"
11013         AC_DEFINE([USE_CRYPTO_NSS])
11014     fi
11017 dnl ===================================================================
11018 dnl Check for building gnutls
11019 dnl ===================================================================
11020 AC_MSG_CHECKING([whether to use gnutls])
11021 if test "$WITH_WEBDAV" = "neon" -a "$with_system_neon" = no -a "$enable_openssl" = "no"; then
11022     AC_MSG_RESULT([yes])
11023     AM_PATH_LIBGCRYPT()
11024     PKG_CHECK_MODULES(GNUTLS, [gnutls],,
11025         AC_MSG_ERROR([[Disabling OpenSSL was requested, but GNUTLS is not
11026                       available in the system to use as replacement.]]))
11027     FilterLibs "${LIBGCRYPT_LIBS}"
11028     LIBGCRYPT_LIBS="${filteredlibs}"
11029 else
11030     AC_MSG_RESULT([no])
11033 AC_SUBST([LIBGCRYPT_CFLAGS])
11034 AC_SUBST([LIBGCRYPT_LIBS])
11036 dnl ===================================================================
11037 dnl Check for system redland
11038 dnl ===================================================================
11039 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
11040 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
11041 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
11042 if test "$with_system_redland" = "yes"; then
11043     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
11044             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
11045 else
11046     RAPTOR_MAJOR="0"
11047     RASQAL_MAJOR="3"
11048     REDLAND_MAJOR="0"
11050 AC_SUBST(RAPTOR_MAJOR)
11051 AC_SUBST(RASQAL_MAJOR)
11052 AC_SUBST(REDLAND_MAJOR)
11054 dnl ===================================================================
11055 dnl Check for system hunspell
11056 dnl ===================================================================
11057 AC_MSG_CHECKING([which libhunspell to use])
11058 if test "$with_system_hunspell" = "yes"; then
11059     AC_MSG_RESULT([external])
11060     SYSTEM_HUNSPELL=TRUE
11061     AC_LANG_PUSH([C++])
11062     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
11063     if test "$HUNSPELL_PC" != "TRUE"; then
11064         AC_CHECK_HEADER(hunspell.hxx, [],
11065             [
11066             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
11067             [AC_MSG_ERROR(hunspell headers not found.)], [])
11068             ], [])
11069         AC_CHECK_LIB([hunspell], [main], [:],
11070            [ AC_MSG_ERROR(hunspell library not found.) ], [])
11071         HUNSPELL_LIBS=-lhunspell
11072     fi
11073     AC_LANG_POP([C++])
11074     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11075     FilterLibs "${HUNSPELL_LIBS}"
11076     HUNSPELL_LIBS="${filteredlibs}"
11077 else
11078     AC_MSG_RESULT([internal])
11079     SYSTEM_HUNSPELL=
11080     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
11081     if test "$COM" = "MSC"; then
11082         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
11083     else
11084         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
11085     fi
11086     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
11088 AC_SUBST(SYSTEM_HUNSPELL)
11089 AC_SUBST(HUNSPELL_CFLAGS)
11090 AC_SUBST(HUNSPELL_LIBS)
11092 dnl ===================================================================
11093 dnl Check for system zxing
11094 dnl ===================================================================
11095 AC_MSG_CHECKING([whether to use zxing])
11096 if test "$enable_zxing" = "no"; then
11097     AC_MSG_RESULT([no])
11098     ENABLE_ZXING=
11099     SYSTEM_ZXING=
11100 else
11101     AC_MSG_RESULT([yes])
11102     ENABLE_ZXING=TRUE
11103     AC_MSG_CHECKING([which libzxing to use])
11104     if test "$with_system_zxing" = "yes"; then
11105         AC_MSG_RESULT([external])
11106         SYSTEM_ZXING=TRUE
11107         AC_LANG_PUSH([C++])
11108         AC_CHECK_HEADER(ZXing/MultiFormatWriter.h, [],
11109             [AC_MSG_ERROR(zxing headers not found.)], [#include <stdexcept>])
11110         ZXING_CFLAGS=-I/usr/include/ZXing
11111         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
11112             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
11113             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
11114         AC_LANG_POP([C++])
11115         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11116         FilterLibs "${ZXING_LIBS}"
11117         ZXING_LIBS="${filteredlibs}"
11118     else
11119         AC_MSG_RESULT([internal])
11120         SYSTEM_ZXING=
11121         BUILD_TYPE="$BUILD_TYPE ZXING"
11122     fi
11123     if test "$ENABLE_ZXING" = TRUE; then
11124         AC_DEFINE(ENABLE_ZXING)
11125     fi
11127 AC_SUBST(SYSTEM_ZXING)
11128 AC_SUBST(ENABLE_ZXING)
11129 AC_SUBST(ZXING_CFLAGS)
11130 AC_SUBST(ZXING_LIBS)
11132 dnl ===================================================================
11133 dnl Check for system box2d
11134 dnl ===================================================================
11135 AC_MSG_CHECKING([which box2d to use])
11136 if test "$with_system_box2d" = "yes"; then
11137     AC_MSG_RESULT([external])
11138     SYSTEM_BOX2D=TRUE
11139     AC_LANG_PUSH([C++])
11140     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
11141         [BOX2D_H_FOUND='FALSE'])
11142     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
11143         _BOX2D_LIB=box2d
11144         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
11145     else
11146         # fail this. there's no other alternative to check when we are here.
11147         AC_CHECK_HEADER([Box2D/Box2D.h], [],
11148             [AC_MSG_ERROR(box2d headers not found.)])
11149         _BOX2D_LIB=Box2D
11150         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11151     fi
11152     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11153         [ AC_MSG_ERROR(box2d library not found.) ], [])
11154     BOX2D_LIBS=-l$_BOX2D_LIB
11155     AC_LANG_POP([C++])
11156     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11157     FilterLibs "${BOX2D_LIBS}"
11158     BOX2D_LIBS="${filteredlibs}"
11159 else
11160     AC_MSG_RESULT([internal])
11161     SYSTEM_BOX2D=
11162     BUILD_TYPE="$BUILD_TYPE BOX2D"
11164 AC_SUBST(SYSTEM_BOX2D)
11165 AC_SUBST(BOX2D_CFLAGS)
11166 AC_SUBST(BOX2D_LIBS)
11168 dnl ===================================================================
11169 dnl Checking for altlinuxhyph
11170 dnl ===================================================================
11171 AC_MSG_CHECKING([which altlinuxhyph to use])
11172 if test "$with_system_altlinuxhyph" = "yes"; then
11173     AC_MSG_RESULT([external])
11174     SYSTEM_HYPH=TRUE
11175     AC_CHECK_HEADER(hyphen.h, [],
11176        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11177     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11178        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11179        [#include <hyphen.h>])
11180     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11181         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11182     if test -z "$HYPHEN_LIB"; then
11183         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11184            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11185     fi
11186     if test -z "$HYPHEN_LIB"; then
11187         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11188            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11189     fi
11190 else
11191     AC_MSG_RESULT([internal])
11192     SYSTEM_HYPH=
11193     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11194     if test "$COM" = "MSC"; then
11195         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11196     else
11197         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11198     fi
11200 AC_SUBST(SYSTEM_HYPH)
11201 AC_SUBST(HYPHEN_LIB)
11203 dnl ===================================================================
11204 dnl Checking for mythes
11205 dnl ===================================================================
11206 AC_MSG_CHECKING([which mythes to use])
11207 if test "$with_system_mythes" = "yes"; then
11208     AC_MSG_RESULT([external])
11209     SYSTEM_MYTHES=TRUE
11210     AC_LANG_PUSH([C++])
11211     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11212     if test "$MYTHES_PKGCONFIG" = "no"; then
11213         AC_CHECK_HEADER(mythes.hxx, [],
11214             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11215         AC_CHECK_LIB([mythes-1.2], [main], [:],
11216             [ MYTHES_FOUND=no], [])
11217     if test "$MYTHES_FOUND" = "no"; then
11218         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11219                 [ MYTHES_FOUND=no], [])
11220     fi
11221     if test "$MYTHES_FOUND" = "no"; then
11222         AC_MSG_ERROR([mythes library not found!.])
11223     fi
11224     fi
11225     AC_LANG_POP([C++])
11226     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11227     FilterLibs "${MYTHES_LIBS}"
11228     MYTHES_LIBS="${filteredlibs}"
11229 else
11230     AC_MSG_RESULT([internal])
11231     SYSTEM_MYTHES=
11232     BUILD_TYPE="$BUILD_TYPE MYTHES"
11233     if test "$COM" = "MSC"; then
11234         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11235     else
11236         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11237     fi
11239 AC_SUBST(SYSTEM_MYTHES)
11240 AC_SUBST(MYTHES_CFLAGS)
11241 AC_SUBST(MYTHES_LIBS)
11243 dnl ===================================================================
11244 dnl How should we build the linear programming solver ?
11245 dnl ===================================================================
11247 ENABLE_COINMP=
11248 AC_MSG_CHECKING([whether to build with CoinMP])
11249 if test "$enable_coinmp" != "no"; then
11250     ENABLE_COINMP=TRUE
11251     AC_MSG_RESULT([yes])
11252     if test "$with_system_coinmp" = "yes"; then
11253         SYSTEM_COINMP=TRUE
11254         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11255         FilterLibs "${COINMP_LIBS}"
11256         COINMP_LIBS="${filteredlibs}"
11257     else
11258         BUILD_TYPE="$BUILD_TYPE COINMP"
11259     fi
11260 else
11261     AC_MSG_RESULT([no])
11263 AC_SUBST(ENABLE_COINMP)
11264 AC_SUBST(SYSTEM_COINMP)
11265 AC_SUBST(COINMP_CFLAGS)
11266 AC_SUBST(COINMP_LIBS)
11268 ENABLE_LPSOLVE=
11269 AC_MSG_CHECKING([whether to build with lpsolve])
11270 if test "$enable_lpsolve" != "no"; then
11271     ENABLE_LPSOLVE=TRUE
11272     AC_MSG_RESULT([yes])
11273 else
11274     AC_MSG_RESULT([no])
11276 AC_SUBST(ENABLE_LPSOLVE)
11278 if test "$ENABLE_LPSOLVE" = TRUE; then
11279     AC_MSG_CHECKING([which lpsolve to use])
11280     if test "$with_system_lpsolve" = "yes"; then
11281         AC_MSG_RESULT([external])
11282         SYSTEM_LPSOLVE=TRUE
11283         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11284            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11285         save_LIBS=$LIBS
11286         # some systems need this. Like Ubuntu...
11287         AC_CHECK_LIB(m, floor)
11288         AC_CHECK_LIB(dl, dlopen)
11289         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11290             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11291         LIBS=$save_LIBS
11292     else
11293         AC_MSG_RESULT([internal])
11294         SYSTEM_LPSOLVE=
11295         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11296     fi
11298 AC_SUBST(SYSTEM_LPSOLVE)
11300 dnl ===================================================================
11301 dnl Checking for libexttextcat
11302 dnl ===================================================================
11303 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11304 if test "$with_system_libexttextcat" = "yes"; then
11305     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11307 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11309 dnl ===================================================================
11310 dnl Checking for libnumbertext
11311 dnl ===================================================================
11312 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11313 if test "$with_system_libnumbertext" = "yes"; then
11314     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11315     SYSTEM_LIBNUMBERTEXT=YES
11316 else
11317     SYSTEM_LIBNUMBERTEXT=
11318     AC_LANG_PUSH([C++])
11319     save_CPPFLAGS=$CPPFLAGS
11320     CPPFLAGS="$CPPFLAGS $CXXFLAGS_CXX11"
11321     AC_CHECK_HEADERS([codecvt regex])
11322     AS_IF([test "x$ac_cv_header_codecvt" != xyes -o "x$ac_cv_header_regex" != xyes],
11323             [ LIBNUMBERTEXT_CFLAGS=''
11324               AC_MSG_WARN([No system-provided libnumbertext or codecvt/regex C++11 headers (min. libstdc++ 4.9).
11325                            Enable libnumbertext fallback (missing number to number name conversion).])
11326             ])
11327     CPPFLAGS=$save_CPPFLAGS
11328     AC_LANG_POP([C++])
11330 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11331 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11332 AC_SUBST(LIBNUMBERTEXT_CFLAGS)
11334 dnl ***************************************
11335 dnl testing libc version for Linux...
11336 dnl ***************************************
11337 if test "$_os" = "Linux"; then
11338     AC_MSG_CHECKING([whether the libc is recent enough])
11339     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
11340     #include <features.h>
11341     #if defined(__GNU_LIBRARY__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1))
11342     #error glibc >= 2.1 is required
11343     #endif
11344     ]])],, [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([no, upgrade libc])])
11347 dnl =========================================
11348 dnl Check for uuidgen
11349 dnl =========================================
11350 if test "$_os" = "WINNT"; then
11351     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11352     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11353     UUIDGEN=uuidgen.exe
11354     AC_SUBST(UUIDGEN)
11355 else
11356     AC_PATH_PROG([UUIDGEN], [uuidgen])
11357     if test -z "$UUIDGEN"; then
11358         AC_MSG_WARN([uuid is needed for building installation sets])
11359     fi
11362 dnl ***************************************
11363 dnl Checking for bison and flex
11364 dnl ***************************************
11365 AC_PATH_PROG(BISON, bison)
11366 if test -z "$BISON"; then
11367     AC_MSG_ERROR([no bison found in \$PATH, install it])
11368 else
11369     AC_MSG_CHECKING([the bison version])
11370     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11371     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11372     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11373     dnl cause
11374     dnl
11375     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]
11376     dnl   typedef union YYSTYPE
11377     dnl           ~~~~~~^~~~~~~
11378     dnl
11379     dnl while at least 3.4.1 is know to be good:
11380     if test "$COMPILER_PLUGINS" = TRUE; then
11381         if test "$_bison_longver" -lt 2004; then
11382             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11383         fi
11384     else
11385         if test "$_bison_longver" -lt 2000; then
11386             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11387         fi
11388     fi
11390 AC_SUBST([BISON])
11392 AC_PATH_PROG(FLEX, flex)
11393 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11394     FLEX=`cygpath -m $FLEX`
11396 if test -z "$FLEX"; then
11397     AC_MSG_ERROR([no flex found in \$PATH, install it])
11398 else
11399     AC_MSG_CHECKING([the flex version])
11400     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11401     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11402         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11403     fi
11405 AC_SUBST([FLEX])
11406 dnl ***************************************
11407 dnl Checking for patch
11408 dnl ***************************************
11409 AC_PATH_PROG(PATCH, patch)
11410 if test -z "$PATCH"; then
11411     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11414 dnl On Solaris or macOS, check if --with-gnu-patch was used
11415 if test "$_os" = "SunOS" -o "$_os" = "Darwin"; then
11416     if test -z "$with_gnu_patch"; then
11417         GNUPATCH=$PATCH
11418     else
11419         if test -x "$with_gnu_patch"; then
11420             GNUPATCH=$with_gnu_patch
11421         else
11422             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11423         fi
11424     fi
11426     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11427     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11428         AC_MSG_RESULT([yes])
11429     else
11430         AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11431     fi
11432 else
11433     GNUPATCH=$PATCH
11436 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11437     GNUPATCH=`cygpath -m $GNUPATCH`
11440 dnl We also need to check for --with-gnu-cp
11442 if test -z "$with_gnu_cp"; then
11443     # check the place where the good stuff is hidden on Solaris...
11444     if test -x /usr/gnu/bin/cp; then
11445         GNUCP=/usr/gnu/bin/cp
11446     else
11447         AC_PATH_PROGS(GNUCP, gnucp cp)
11448     fi
11449     if test -z $GNUCP; then
11450         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11451     fi
11452 else
11453     if test -x "$with_gnu_cp"; then
11454         GNUCP=$with_gnu_cp
11455     else
11456         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11457     fi
11460 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11461     GNUCP=`cygpath -m $GNUCP`
11464 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11465 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11466     AC_MSG_RESULT([yes])
11467 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11468     AC_MSG_RESULT([yes])
11469 else
11470     case "$build_os" in
11471     darwin*|macos*|netbsd*|openbsd*|freebsd*|dragonfly*|aix*)
11472         x_GNUCP=[\#]
11473         GNUCP=''
11474         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11475         ;;
11476     *)
11477         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11478         ;;
11479     esac
11482 AC_SUBST(GNUPATCH)
11483 AC_SUBST(GNUCP)
11484 AC_SUBST(x_GNUCP)
11486 dnl ***************************************
11487 dnl testing assembler path
11488 dnl ***************************************
11489 ML_EXE=""
11490 if test "$_os" = "WINNT"; then
11491     case "$WIN_HOST_ARCH" in
11492     x86) assembler=ml.exe ;;
11493     x64) assembler=ml64.exe ;;
11494     arm64) assembler=armasm64.exe ;;
11495     esac
11497     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11498     if test -f "$MSVC_HOST_PATH/$assembler"; then
11499         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11500         AC_MSG_RESULT([$ML_EXE])
11501     else
11502         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11503     fi
11506 AC_SUBST(ML_EXE)
11508 dnl ===================================================================
11509 dnl We need zip and unzip
11510 dnl ===================================================================
11511 AC_PATH_PROG(ZIP, zip)
11512 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11513 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11514     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],,)
11517 AC_PATH_PROG(UNZIP, unzip)
11518 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11520 dnl ===================================================================
11521 dnl Zip must be a specific type for different build types.
11522 dnl ===================================================================
11523 if test $build_os = cygwin; then
11524     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11525         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11526     fi
11529 dnl ===================================================================
11530 dnl We need touch with -h option support.
11531 dnl ===================================================================
11532 AC_PATH_PROG(TOUCH, touch)
11533 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11534 touch "$WARNINGS_FILE"
11535 if ! "$TOUCH" -h "$WARNINGS_FILE" 2>/dev/null > /dev/null; then
11536     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],,)
11539 dnl ===================================================================
11540 dnl Check for system epoxy
11541 dnl ===================================================================
11542 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2], ["-I${WORKDIR}/UnpackedTarball/epoxy/include"])
11544 dnl ===================================================================
11545 dnl Set vcl option: coordinate device in double or sal_Int32
11546 dnl ===================================================================
11548 dnl disabled for now, we don't want subtle differences between OSs
11549 dnl AC_MSG_CHECKING([Type to use for Device Pixel coordinates])
11550 dnl if test "$_os" = "Darwin" -o  $_os = iOS ; then
11551 dnl     AC_DEFINE(VCL_FLOAT_DEVICE_PIXEL)
11552 dnl     AC_MSG_RESULT([double])
11553 dnl else
11554 dnl     AC_MSG_RESULT([sal_Int32])
11555 dnl fi
11557 dnl ===================================================================
11558 dnl Show which vclplugs will be built.
11559 dnl ===================================================================
11560 R=""
11561 if test "$USING_X11" != TRUE; then
11562     enable_gtk3=no
11565 ENABLE_GTK3=""
11566 if test "x$enable_gtk3" = "xyes"; then
11567     ENABLE_GTK3="TRUE"
11568     AC_DEFINE(ENABLE_GTK3)
11569     R="$R gtk3"
11571 AC_SUBST(ENABLE_GTK3)
11573 ENABLE_GTK3_KDE5=""
11574 if test "x$enable_gtk3_kde5" = "xyes"; then
11575     ENABLE_GTK3_KDE5="TRUE"
11576     AC_DEFINE(ENABLE_GTK3_KDE5)
11577     R="$R gtk3_kde5"
11579 AC_SUBST(ENABLE_GTK3_KDE5)
11581 ENABLE_GTK4=""
11582 if test "x$enable_gtk4" = "xyes"; then
11583     ENABLE_GTK4="TRUE"
11584     AC_DEFINE(ENABLE_GTK4)
11585     R="$R gtk4"
11587 AC_SUBST(ENABLE_GTK4)
11589 ENABLE_QT5=""
11590 if test "x$enable_qt5" = "xyes"; then
11591     ENABLE_QT5="TRUE"
11592     AC_DEFINE(ENABLE_QT5)
11593     R="$R qt5"
11595 AC_SUBST(ENABLE_QT5)
11597 ENABLE_QT6=""
11598 if test "x$enable_qt6" = "xyes"; then
11599     ENABLE_QT6="TRUE"
11600     AC_DEFINE(ENABLE_QT6)
11601     R="$R qt6"
11603 AC_SUBST(ENABLE_QT6)
11606 ENABLE_KF5=""
11607 if test "x$enable_kf5" = "xyes"; then
11608     ENABLE_KF5="TRUE"
11609     AC_DEFINE(ENABLE_KF5)
11610     R="$R kf5"
11612 AC_SUBST(ENABLE_KF5)
11614 if test "x$USING_X11" = "xyes"; then
11615     R="$R gen"
11618 if test "$_os" = "WINNT"; then
11619     R="$R win"
11620 elif test "$_os" = "Darwin"; then
11621     R="$R osx"
11622 elif test "$_os" = "iOS"; then
11623     R="ios"
11624 elif test "$_os" = Android; then
11625     R="android"
11628 build_vcl_plugins="$R"
11629 if test -z "$build_vcl_plugins"; then
11630     build_vcl_plugins=" none"
11632 AC_MSG_NOTICE([VCLplugs to be built:${build_vcl_plugins}])
11633 VCL_PLUGIN_INFO=$R
11634 AC_SUBST([VCL_PLUGIN_INFO])
11636 dnl ===================================================================
11637 dnl Check for GTK libraries
11638 dnl ===================================================================
11640 GTK3_CFLAGS=""
11641 GTK3_LIBS=""
11642 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11643     if test "$with_system_cairo" = no; then
11644         add_warning 'Non-system cairo combined with gtk3 is assumed to cause trouble; proceed at your own risk.'
11645     fi
11646     : ${with_system_cairo:=yes}
11647     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)
11648     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11649     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11650     FilterLibs "${GTK3_LIBS}"
11651     GTK3_LIBS="${filteredlibs}"
11653     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11654     if test "$with_system_epoxy" != "yes"; then
11655         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11656         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11657                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11658     fi
11660 AC_SUBST(GTK3_LIBS)
11661 AC_SUBST(GTK3_CFLAGS)
11663 GTK4_CFLAGS=""
11664 GTK4_LIBS=""
11665 if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then
11666     if test "$with_system_cairo" = no; then
11667         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11668     fi
11669     : ${with_system_cairo:=yes}
11670     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11671     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11672     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11673     FilterLibs "${GTK4_LIBS}"
11674     GTK4_LIBS="${filteredlibs}"
11676     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11677     if test "$with_system_epoxy" != "yes"; then
11678         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11679         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11680                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11681     fi
11683 AC_SUBST(GTK4_LIBS)
11684 AC_SUBST(GTK4_CFLAGS)
11686 if test "$enable_introspection" = yes; then
11687     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11688         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11689     else
11690         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
11691     fi
11694 dnl ===================================================================
11695 dnl check for dbus support
11696 dnl ===================================================================
11697 ENABLE_DBUS=""
11698 DBUS_CFLAGS=""
11699 DBUS_LIBS=""
11700 DBUS_GLIB_CFLAGS=""
11701 DBUS_GLIB_LIBS=""
11702 DBUS_HAVE_GLIB=""
11704 if test "$enable_dbus" = "no"; then
11705     test_dbus=no
11708 AC_MSG_CHECKING([whether to enable DBUS support])
11709 if test "$test_dbus" = "yes"; then
11710     ENABLE_DBUS="TRUE"
11711     AC_MSG_RESULT([yes])
11712     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
11713     AC_DEFINE(ENABLE_DBUS)
11714     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11715     FilterLibs "${DBUS_LIBS}"
11716     DBUS_LIBS="${filteredlibs}"
11718     # Glib is needed for BluetoothServer
11719     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
11720     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
11721         [
11722             DBUS_HAVE_GLIB="TRUE"
11723             AC_DEFINE(DBUS_HAVE_GLIB,1)
11724         ],
11725         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
11726     )
11727 else
11728     AC_MSG_RESULT([no])
11731 AC_SUBST(ENABLE_DBUS)
11732 AC_SUBST(DBUS_CFLAGS)
11733 AC_SUBST(DBUS_LIBS)
11734 AC_SUBST(DBUS_GLIB_CFLAGS)
11735 AC_SUBST(DBUS_GLIB_LIBS)
11736 AC_SUBST(DBUS_HAVE_GLIB)
11738 AC_MSG_CHECKING([whether to enable Impress remote control])
11739 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
11740     AC_MSG_RESULT([yes])
11741     ENABLE_SDREMOTE=TRUE
11742     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
11744     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
11745         # The Bluetooth code doesn't compile with macOS SDK 10.15
11746         if test "$enable_sdremote_bluetooth" = yes; then
11747             AC_MSG_ERROR([macOS SDK $macosx_sdk does not currently support --enable-sdremote-bluetooth])
11748         fi
11749         enable_sdremote_bluetooth=no
11750     fi
11751     # If not explicitly enabled or disabled, default
11752     if test -z "$enable_sdremote_bluetooth"; then
11753         case "$OS" in
11754         LINUX|MACOSX|WNT)
11755             # Default to yes for these
11756             enable_sdremote_bluetooth=yes
11757             ;;
11758         *)
11759             # otherwise no
11760             enable_sdremote_bluetooth=no
11761             ;;
11762         esac
11763     fi
11764     # $enable_sdremote_bluetooth is guaranteed non-empty now
11766     if test "$enable_sdremote_bluetooth" != "no"; then
11767         if test "$OS" = "LINUX"; then
11768             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
11769                 AC_MSG_RESULT([yes])
11770                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
11771                 dnl ===================================================================
11772                 dnl Check for system bluez
11773                 dnl ===================================================================
11774                 AC_MSG_CHECKING([which Bluetooth header to use])
11775                 if test "$with_system_bluez" = "yes"; then
11776                     AC_MSG_RESULT([external])
11777                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
11778                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
11779                     SYSTEM_BLUEZ=TRUE
11780                 else
11781                     AC_MSG_RESULT([internal])
11782                     SYSTEM_BLUEZ=
11783                 fi
11784             else
11785                 AC_MSG_RESULT([no, dbus disabled])
11786                 ENABLE_SDREMOTE_BLUETOOTH=
11787                 SYSTEM_BLUEZ=
11788             fi
11789         else
11790             AC_MSG_RESULT([yes])
11791             ENABLE_SDREMOTE_BLUETOOTH=TRUE
11792             SYSTEM_BLUEZ=
11793         fi
11794     else
11795         AC_MSG_RESULT([no])
11796         ENABLE_SDREMOTE_BLUETOOTH=
11797         SYSTEM_BLUEZ=
11798     fi
11799 else
11800     ENABLE_SDREMOTE=
11801     SYSTEM_BLUEZ=
11802     AC_MSG_RESULT([no])
11804 AC_SUBST(ENABLE_SDREMOTE)
11805 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
11806 AC_SUBST(SYSTEM_BLUEZ)
11808 dnl ===================================================================
11809 dnl Check whether to enable GIO support
11810 dnl ===================================================================
11811 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11812     AC_MSG_CHECKING([whether to enable GIO support])
11813     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
11814         dnl Need at least 2.26 for the dbus support.
11815         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
11816                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
11817         if test "$ENABLE_GIO" = "TRUE"; then
11818             AC_DEFINE(ENABLE_GIO)
11819             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11820             FilterLibs "${GIO_LIBS}"
11821             GIO_LIBS="${filteredlibs}"
11822         fi
11823     else
11824         AC_MSG_RESULT([no])
11825     fi
11827 AC_SUBST(ENABLE_GIO)
11828 AC_SUBST(GIO_CFLAGS)
11829 AC_SUBST(GIO_LIBS)
11832 dnl ===================================================================
11834 SPLIT_APP_MODULES=""
11835 if test "$enable_split_app_modules" = "yes"; then
11836     SPLIT_APP_MODULES="TRUE"
11838 AC_SUBST(SPLIT_APP_MODULES)
11840 SPLIT_OPT_FEATURES=""
11841 if test "$enable_split_opt_features" = "yes"; then
11842     SPLIT_OPT_FEATURES="TRUE"
11844 AC_SUBST(SPLIT_OPT_FEATURES)
11846 dnl ===================================================================
11847 dnl Check whether the GStreamer libraries are available.
11848 dnl ===================================================================
11850 ENABLE_GSTREAMER_1_0=""
11852 if test "$test_gstreamer_1_0" = yes; then
11854     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
11855     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
11856         ENABLE_GSTREAMER_1_0="TRUE"
11857         AC_MSG_RESULT([yes])
11858         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
11859         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11860         FilterLibs "${GSTREAMER_1_0_LIBS}"
11861         GSTREAMER_1_0_LIBS="${filteredlibs}"
11862         AC_DEFINE(ENABLE_GSTREAMER_1_0)
11863     else
11864         AC_MSG_RESULT([no])
11865     fi
11867 AC_SUBST(GSTREAMER_1_0_CFLAGS)
11868 AC_SUBST(GSTREAMER_1_0_LIBS)
11869 AC_SUBST(ENABLE_GSTREAMER_1_0)
11871 ENABLE_OPENGL_TRANSITIONS=
11872 ENABLE_OPENGL_CANVAS=
11873 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
11874    : # disable
11875 elif test "$_os" = "Darwin"; then
11876     # We use frameworks on macOS, no need for detail checks
11877     ENABLE_OPENGL_TRANSITIONS=TRUE
11878     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11879     ENABLE_OPENGL_CANVAS=TRUE
11880 elif test $_os = WINNT; then
11881     ENABLE_OPENGL_TRANSITIONS=TRUE
11882     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11883     ENABLE_OPENGL_CANVAS=TRUE
11884 else
11885     if test "$USING_X11" = TRUE; then
11886         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
11887         ENABLE_OPENGL_TRANSITIONS=TRUE
11888         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11889         ENABLE_OPENGL_CANVAS=TRUE
11890     fi
11893 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
11894 AC_SUBST(ENABLE_OPENGL_CANVAS)
11896 dnl =================================================
11897 dnl Check whether to build with OpenCL support.
11898 dnl =================================================
11900 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
11901     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
11902     # platform (optional at run-time, used through clew).
11903     BUILD_TYPE="$BUILD_TYPE OPENCL"
11904     AC_DEFINE(HAVE_FEATURE_OPENCL)
11907 dnl =================================================
11908 dnl Check whether to build with dconf support.
11909 dnl =================================================
11911 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
11912     PKG_CHECK_MODULES([DCONF], [dconf >= 0.15.2], [], [
11913         if test "$enable_dconf" = yes; then
11914             AC_MSG_ERROR([dconf not found])
11915         else
11916             enable_dconf=no
11917         fi])
11919 AC_MSG_CHECKING([whether to enable dconf])
11920 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
11921     DCONF_CFLAGS=
11922     DCONF_LIBS=
11923     ENABLE_DCONF=
11924     AC_MSG_RESULT([no])
11925 else
11926     ENABLE_DCONF=TRUE
11927     AC_DEFINE(ENABLE_DCONF)
11928     AC_MSG_RESULT([yes])
11930 AC_SUBST([DCONF_CFLAGS])
11931 AC_SUBST([DCONF_LIBS])
11932 AC_SUBST([ENABLE_DCONF])
11934 # pdf import?
11935 AC_MSG_CHECKING([whether to build the PDF import feature])
11936 ENABLE_PDFIMPORT=
11937 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
11938     AC_MSG_RESULT([yes])
11939     ENABLE_PDFIMPORT=TRUE
11940     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
11941 else
11942     AC_MSG_RESULT([no])
11945 # Pdfium?
11946 AC_MSG_CHECKING([whether to build PDFium])
11947 ENABLE_PDFIUM=
11948 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
11949     AC_MSG_RESULT([yes])
11950     ENABLE_PDFIUM=TRUE
11951     BUILD_TYPE="$BUILD_TYPE PDFIUM"
11952 else
11953     AC_MSG_RESULT([no])
11955 AC_SUBST(ENABLE_PDFIUM)
11957 if test "$ENABLE_PDFIUM" = "TRUE"; then
11958         AC_MSG_CHECKING([which OpenJPEG library to use])
11959         if test "$with_system_openjpeg" = "yes"; then
11960                 SYSTEM_OPENJPEG2=TRUE
11961                 AC_MSG_RESULT([external])
11962                 PKG_CHECK_MODULES( OPENJPEG2, libopenjp2 )
11963                 OPENJPEG2_CFLAGS=$(printf '%s' "$OPENJPEG2_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11964                 FilterLibs "${OPENJPEG2_LIBS}"
11965                 OPENJPEG2_LIBS="${filteredlibs}"
11966         else
11967                 SYSTEM_OPENJPEG2=FALSE
11968                 AC_MSG_RESULT([internal])
11969         fi
11970         AC_MSG_CHECKING([which Abseil library to use])
11971         if test "$with_system_abseil" = "yes"; then
11972                 AC_MSG_RESULT([external])
11973                 SYSTEM_ABSEIL=TRUE
11974                 AC_LANG_PUSH([C++])
11975                 AC_CHECK_HEADER(absl/types/bad_optional_access.h, [],
11976                         [AC_MSG_ERROR(abseil headers not found.)], [])
11977                 #ABSEIL_CFLAGS=-I/usr/include
11978                 AC_CHECK_LIB([absl_bad_optional_access], [main], [ABSEIL_LIBS=-labsl_bad_optional_access],
11979                         [ AC_MSG_ERROR([libabsl_bad_optional_access library not found.]) ])
11980                 AC_LANG_POP([C++])
11981                 ABSEIL_CFLAGS=$(printf '%s' "$ABSEIL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11982                 FilterLibs "${ABSEIL_LIBS}"
11983                 ABSEIL_LIBS="${filteredlibs}"
11984         else
11985                 AC_MSG_RESULT([internal])
11986         fi
11988 AC_SUBST(SYSTEM_OPENJPEG2)
11989 AC_SUBST(SYSTEM_ABSEIL)
11990 AC_SUBST(ABSEIL_CFLAGS)
11991 AC_SUBST(ABSEIL_LIBS)
11993 dnl ===================================================================
11994 dnl Check for poppler
11995 dnl ===================================================================
11996 ENABLE_POPPLER=
11997 AC_MSG_CHECKING([whether to build Poppler])
11998 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
11999     AC_MSG_RESULT([yes])
12000     ENABLE_POPPLER=TRUE
12001     AC_DEFINE(HAVE_FEATURE_POPPLER)
12002 else
12003     AC_MSG_RESULT([no])
12005 AC_SUBST(ENABLE_POPPLER)
12007 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
12008     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
12011 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
12012     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
12015 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
12016     dnl ===================================================================
12017     dnl Check for system poppler
12018     dnl ===================================================================
12019     AC_MSG_CHECKING([which PDF import poppler to use])
12020     if test "$with_system_poppler" = "yes"; then
12021         AC_MSG_RESULT([external])
12022         SYSTEM_POPPLER=TRUE
12023         PKG_CHECK_MODULES( POPPLER, poppler >= 0.12.0 )
12024         AC_LANG_PUSH([C++])
12025         save_CXXFLAGS=$CXXFLAGS
12026         save_CPPFLAGS=$CPPFLAGS
12027         CXXFLAGS="$CXXFLAGS $POPPLER_CFLAGS"
12028         CPPFLAGS="$CPPFLAGS $POPPLER_CFLAGS"
12029         AC_CHECK_HEADER([cpp/poppler-version.h],
12030             [AC_DEFINE([HAVE_POPPLER_VERSION_H], 1)],
12031             [])
12032         CXXFLAGS=$save_CXXFLAGS
12033         CPPFLAGS=$save_CPPFLAGS
12034         AC_LANG_POP([C++])
12035         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12037         FilterLibs "${POPPLER_LIBS}"
12038         POPPLER_LIBS="${filteredlibs}"
12039     else
12040         AC_MSG_RESULT([internal])
12041         SYSTEM_POPPLER=
12042         BUILD_TYPE="$BUILD_TYPE POPPLER"
12043         AC_DEFINE([HAVE_POPPLER_VERSION_H], 1)
12044     fi
12045     AC_DEFINE([ENABLE_PDFIMPORT],1)
12047 AC_SUBST(ENABLE_PDFIMPORT)
12048 AC_SUBST(SYSTEM_POPPLER)
12049 AC_SUBST(POPPLER_CFLAGS)
12050 AC_SUBST(POPPLER_LIBS)
12052 # Skia?
12053 ENABLE_SKIA=
12054 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
12055     # Skia now requires at least freetype2 >= 2.8.1, which is less that what LO requires as system freetype.
12056     if test "$SYSTEM_FREETYPE" = TRUE; then
12057         PKG_CHECK_EXISTS(freetype2 >= 21.0.15, # 21.0.15 = 2.8.1
12058             [skia_freetype_ok=yes],
12059             [skia_freetype_ok=no])
12060     else # internal is ok
12061         skia_freetype_ok=yes
12062     fi
12063     AC_MSG_CHECKING([whether to build Skia])
12064     if test "$skia_freetype_ok" = "yes"; then
12065         if test "$enable_skia" = "debug"; then
12066             AC_MSG_RESULT([yes (debug)])
12067             ENABLE_SKIA_DEBUG=TRUE
12068         else
12069             AC_MSG_RESULT([yes])
12070             ENABLE_SKIA_DEBUG=
12071         fi
12072         ENABLE_SKIA=TRUE
12073         AC_DEFINE(HAVE_FEATURE_SKIA)
12074         BUILD_TYPE="$BUILD_TYPE SKIA"
12076         if test "$OS" = "MACOSX"; then
12077             AC_DEFINE(SK_SUPPORT_GPU,1)
12078             AC_DEFINE(SK_METAL,1)
12079             SKIA_GPU=METAL
12080             AC_SUBST(SKIA_GPU)
12081         else
12082             AC_DEFINE(SK_SUPPORT_GPU,1)
12083             AC_DEFINE(SK_VULKAN,1)
12084             SKIA_GPU=VULKAN
12085             AC_SUBST(SKIA_GPU)
12086         fi
12088         if test -n "$MAC_OS_X_VERSION_MIN_REQUIRED" && test "$MAC_OS_X_VERSION_MIN_REQUIRED" -lt "101200"; then
12089             SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX=1
12090             AC_SUBST(SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX)
12091         fi
12092     else
12093         AC_MSG_RESULT([no (freetype too old)])
12094         add_warning "freetype version is too old for Skia library, at least 2.8.1 required, Skia support disabled"
12095     fi
12097 else
12098     AC_MSG_CHECKING([whether to build Skia])
12099     AC_MSG_RESULT([no])
12101 AC_SUBST(ENABLE_SKIA)
12102 AC_SUBST(ENABLE_SKIA_DEBUG)
12104 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
12105 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
12106 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
12107 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
12108 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
12109 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
12110 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
12111 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F=
12112 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
12113 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
12114 HAVE_LO_CLANG_DLLEXPORTINLINES=
12116 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE; then
12117     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12118         AC_MSG_CHECKING([for Clang])
12119         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
12120     else
12121         if test "$_os" = "WINNT"; then
12122             AC_MSG_CHECKING([for clang-cl])
12123             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
12124                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
12125                 dnl explicitly set -m32/-m64
12126                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
12127                 LO_CLANG_CXX="$LO_CLANG_CC"
12128                 AC_MSG_RESULT([$LO_CLANG_CC])
12129             else
12130                 AC_MSG_RESULT([no])
12131             fi
12132         else
12133             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
12134             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
12135         fi
12136     fi
12137     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12138         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
12139         clang2_ver=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
12140         if test "$clang2_ver" -lt 50002; then
12141             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
12142             LO_CLANG_CC=
12143             LO_CLANG_CXX=
12144         fi
12145     fi
12146     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX" -a "$_os" = "WINNT"; then
12147         save_CXX="$CXX"
12148         CXX="$LO_CLANG_CXX"
12149         AC_MSG_CHECKING([whether $CXX supports -Zc:dllexportInlines-])
12150         AC_LANG_PUSH([C++])
12151         save_CXXFLAGS=$CXXFLAGS
12152         CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
12153         AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
12154                 HAVE_LO_CLANG_DLLEXPORTINLINES=TRUE
12155                 AC_MSG_RESULT([yes])
12156             ], [AC_MSG_RESULT([no])])
12157         CXXFLAGS=$save_CXXFLAGS
12158         AC_LANG_POP([C++])
12159         CXX="$save_CXX"
12160         if test -z "$HAVE_LO_CLANG_DLLEXPORTINLINES"; then
12161             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.])
12162         fi
12163     fi
12164     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
12165         # Skia is the default on Windows and Mac, so hard-require Clang.
12166         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
12167         if test "$_os" = "WINNT" -o "$_os" = "Darwin"; then
12168             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang, or use --disable-skia.])
12169         else
12170             AC_MSG_WARN([Clang compiler not found.])
12171         fi
12172     else
12174         save_CXX="$CXX"
12175         CXX="$LO_CLANG_CXX"
12176         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
12177         flag_sse2=-msse2
12178         flag_ssse3=-mssse3
12179         flag_sse41=-msse4.1
12180         flag_sse42=-msse4.2
12181         flag_avx=-mavx
12182         flag_avx2=-mavx2
12183         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
12184         flag_avx512f=-mavx512f
12185         flag_f16c=-mf16c
12186         flag_fma=-mfma
12188         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
12189         AC_LANG_PUSH([C++])
12190         save_CXXFLAGS=$CXXFLAGS
12191         CXXFLAGS="$CXXFLAGS $flag_sse2"
12192         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12193             #include <emmintrin.h>
12194             int main () {
12195                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12196                 c = _mm_xor_si128 (a, b);
12197                 return 0;
12198             }
12199             ])],
12200             [can_compile_sse2=yes],
12201             [can_compile_sse2=no])
12202         AC_LANG_POP([C++])
12203         CXXFLAGS=$save_CXXFLAGS
12204         AC_MSG_RESULT([${can_compile_sse2}])
12205         if test "${can_compile_sse2}" = "yes" ; then
12206             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
12207         fi
12209         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
12210         AC_LANG_PUSH([C++])
12211         save_CXXFLAGS=$CXXFLAGS
12212         CXXFLAGS="$CXXFLAGS $flag_ssse3"
12213         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12214             #include <tmmintrin.h>
12215             int main () {
12216                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12217                 c = _mm_maddubs_epi16 (a, b);
12218                 return 0;
12219             }
12220             ])],
12221             [can_compile_ssse3=yes],
12222             [can_compile_ssse3=no])
12223         AC_LANG_POP([C++])
12224         CXXFLAGS=$save_CXXFLAGS
12225         AC_MSG_RESULT([${can_compile_ssse3}])
12226         if test "${can_compile_ssse3}" = "yes" ; then
12227             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
12228         fi
12230         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
12231         AC_LANG_PUSH([C++])
12232         save_CXXFLAGS=$CXXFLAGS
12233         CXXFLAGS="$CXXFLAGS $flag_sse41"
12234         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12235             #include <smmintrin.h>
12236             int main () {
12237                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12238                 c = _mm_cmpeq_epi64 (a, b);
12239                 return 0;
12240             }
12241             ])],
12242             [can_compile_sse41=yes],
12243             [can_compile_sse41=no])
12244         AC_LANG_POP([C++])
12245         CXXFLAGS=$save_CXXFLAGS
12246         AC_MSG_RESULT([${can_compile_sse41}])
12247         if test "${can_compile_sse41}" = "yes" ; then
12248             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12249         fi
12251         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12252         AC_LANG_PUSH([C++])
12253         save_CXXFLAGS=$CXXFLAGS
12254         CXXFLAGS="$CXXFLAGS $flag_sse42"
12255         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12256             #include <nmmintrin.h>
12257             int main () {
12258                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12259                 c = _mm_cmpgt_epi64 (a, b);
12260                 return 0;
12261             }
12262             ])],
12263             [can_compile_sse42=yes],
12264             [can_compile_sse42=no])
12265         AC_LANG_POP([C++])
12266         CXXFLAGS=$save_CXXFLAGS
12267         AC_MSG_RESULT([${can_compile_sse42}])
12268         if test "${can_compile_sse42}" = "yes" ; then
12269             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12270         fi
12272         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12273         AC_LANG_PUSH([C++])
12274         save_CXXFLAGS=$CXXFLAGS
12275         CXXFLAGS="$CXXFLAGS $flag_avx"
12276         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12277             #include <immintrin.h>
12278             int main () {
12279                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12280                 c = _mm256_xor_ps(a, b);
12281                 return 0;
12282             }
12283             ])],
12284             [can_compile_avx=yes],
12285             [can_compile_avx=no])
12286         AC_LANG_POP([C++])
12287         CXXFLAGS=$save_CXXFLAGS
12288         AC_MSG_RESULT([${can_compile_avx}])
12289         if test "${can_compile_avx}" = "yes" ; then
12290             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12291         fi
12293         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12294         AC_LANG_PUSH([C++])
12295         save_CXXFLAGS=$CXXFLAGS
12296         CXXFLAGS="$CXXFLAGS $flag_avx2"
12297         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12298             #include <immintrin.h>
12299             int main () {
12300                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12301                 c = _mm256_maddubs_epi16(a, b);
12302                 return 0;
12303             }
12304             ])],
12305             [can_compile_avx2=yes],
12306             [can_compile_avx2=no])
12307         AC_LANG_POP([C++])
12308         CXXFLAGS=$save_CXXFLAGS
12309         AC_MSG_RESULT([${can_compile_avx2}])
12310         if test "${can_compile_avx2}" = "yes" ; then
12311             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12312         fi
12314         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12315         AC_LANG_PUSH([C++])
12316         save_CXXFLAGS=$CXXFLAGS
12317         CXXFLAGS="$CXXFLAGS $flag_avx512"
12318         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12319             #include <immintrin.h>
12320             int main () {
12321                 __m512i a = _mm512_loadu_si512(0);
12322                 __m512d v1 = _mm512_load_pd(0);
12323                 // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
12324                 __m512d v2 = _mm512_abs_pd(v1);
12325                 return 0;
12326             }
12327             ])],
12328             [can_compile_avx512=yes],
12329             [can_compile_avx512=no])
12330         AC_LANG_POP([C++])
12331         CXXFLAGS=$save_CXXFLAGS
12332         AC_MSG_RESULT([${can_compile_avx512}])
12333         if test "${can_compile_avx512}" = "yes" ; then
12334             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12335             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
12336         fi
12338         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12339         AC_LANG_PUSH([C++])
12340         save_CXXFLAGS=$CXXFLAGS
12341         CXXFLAGS="$CXXFLAGS $flag_f16c"
12342         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12343             #include <immintrin.h>
12344             int main () {
12345                 __m128i a = _mm_set1_epi32 (0);
12346                 __m128 c;
12347                 c = _mm_cvtph_ps(a);
12348                 return 0;
12349             }
12350             ])],
12351             [can_compile_f16c=yes],
12352             [can_compile_f16c=no])
12353         AC_LANG_POP([C++])
12354         CXXFLAGS=$save_CXXFLAGS
12355         AC_MSG_RESULT([${can_compile_f16c}])
12356         if test "${can_compile_f16c}" = "yes" ; then
12357             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12358         fi
12360         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12361         AC_LANG_PUSH([C++])
12362         save_CXXFLAGS=$CXXFLAGS
12363         CXXFLAGS="$CXXFLAGS $flag_fma"
12364         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12365             #include <immintrin.h>
12366             int main () {
12367                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12368                 d = _mm256_fmadd_ps(a, b, c);
12369                 return 0;
12370             }
12371             ])],
12372             [can_compile_fma=yes],
12373             [can_compile_fma=no])
12374         AC_LANG_POP([C++])
12375         CXXFLAGS=$save_CXXFLAGS
12376         AC_MSG_RESULT([${can_compile_fma}])
12377         if test "${can_compile_fma}" = "yes" ; then
12378             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12379         fi
12381         CXX="$save_CXX"
12382     fi
12385 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12387 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12388     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12389     AC_LANG_PUSH([C])
12390     save_CC="$CC"
12391     CC="$LO_CLANG_CC"
12392     save_CFLAGS=$CFLAGS
12393     CFLAGS="$CFLAGS --ccache-skip -O2 -Werror"
12394     dnl an empty program will do, we're checking the compiler flags
12395     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12396                       [use_ccache=yes], [use_ccache=no])
12397     CFLAGS=$save_CFLAGS
12398     CC=$save_CC
12399     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12400         AC_MSG_RESULT([yes])
12401     else
12402         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12403         AC_MSG_RESULT([no])
12404     fi
12405     AC_LANG_POP([C])
12407     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12408     AC_LANG_PUSH([C++])
12409     save_CXX="$CXX"
12410     CXX="$LO_CLANG_CXX"
12411     save_CXXFLAGS=$CXXFLAGS
12412     CXXFLAGS="$CXXFLAGS --ccache-skip -O2 -Werror"
12413     dnl an empty program will do, we're checking the compiler flags
12414     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12415                       [use_ccache=yes], [use_ccache=no])
12416     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12417         AC_MSG_RESULT([yes])
12418     else
12419         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12420         AC_MSG_RESULT([no])
12421     fi
12422     CXXFLAGS=$save_CXXFLAGS
12423     CXX=$save_CXX
12424     AC_LANG_POP([C++])
12427 AC_SUBST(LO_CLANG_CC)
12428 AC_SUBST(LO_CLANG_CXX)
12429 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12430 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12431 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12432 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12433 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12434 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12435 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12436 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F)
12437 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12438 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12439 AC_SUBST(CLANG_USE_LD)
12440 AC_SUBST([HAVE_LO_CLANG_DLLEXPORTINLINES])
12442 SYSTEM_GPGMEPP=
12444 if test "$enable_gpgmepp" = no; then
12445     AC_MSG_CHECKING([whether to enable gpgmepp])
12446     AC_MSG_RESULT([no])
12447 elif test "$enable_mpl_subset" = "yes"; then
12448     AC_MSG_CHECKING([whether gpgmepp should be disabled due to building just MPL])
12449     AC_MSG_RESULT([yes])
12450 elif test "$enable_fuzzers" = "yes"; then
12451     AC_MSG_CHECKING([whether gpgmepp should be disabled due to oss-fuzz])
12452     AC_MSG_RESULT([yes])
12453 elif test "$_os" = "Linux" -o "$_os" = "Darwin" -o "$_os" = "WINNT" ; then
12454     dnl ===================================================================
12455     dnl Check for system gpgme
12456     dnl ===================================================================
12457     AC_MSG_CHECKING([which gpgmepp to use])
12458     if test "$with_system_gpgmepp" = "yes"; then
12459         AC_MSG_RESULT([external])
12460         SYSTEM_GPGMEPP=TRUE
12462         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12463         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12464             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp development package])], [])
12465         # progress_callback is the only func with plain C linkage
12466         # checking for it also filters out older, KDE-dependent libgpgmepp versions
12467         AC_CHECK_LIB(gpgmepp, progress_callback, [ GPGMEPP_LIBS=-lgpgmepp ],
12468             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12469         AC_CHECK_HEADER(gpgme.h, [],
12470             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12471     else
12472         AC_MSG_RESULT([internal])
12473         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12474         AC_DEFINE([GPGME_CAN_EXPORT_MINIMAL_KEY])
12476         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12477         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12478         if test "$_os" != "WINNT"; then
12479             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12480             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12481         fi
12482     fi
12483     ENABLE_GPGMEPP=TRUE
12484     AC_DEFINE([HAVE_FEATURE_GPGME])
12485     AC_PATH_PROG(GPG, gpg)
12486     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12487     # so let's exclude that manually for the moment
12488     if test -n "$GPG" -a "$_os" != "WINNT"; then
12489         # make sure we not only have a working gpgme, but a full working
12490         # gpg installation to run OpenPGP signature verification
12491         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12492     fi
12493     if test "$_os" = "Linux"; then
12494       uid=`id -u`
12495       AC_MSG_CHECKING([for /run/user/$uid])
12496       if test -d /run/user/$uid; then
12497         AC_MSG_RESULT([yes])
12498         AC_PATH_PROG(GPGCONF, gpgconf)
12500         # Older versions of gpgconf are not working as expected, since
12501         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12502         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12503         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12504         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12505         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12506         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12507         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12508           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12509           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12510           if $GPGCONF --dump-options > /dev/null ; then
12511             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12512               AC_MSG_RESULT([yes])
12513               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12514               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12515             else
12516               AC_MSG_RESULT([no])
12517             fi
12518           else
12519             AC_MSG_RESULT([no. missing or broken gpgconf?])
12520           fi
12521         else
12522           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12523         fi
12524       else
12525         AC_MSG_RESULT([no])
12526      fi
12527    fi
12529 AC_SUBST(ENABLE_GPGMEPP)
12530 AC_SUBST(SYSTEM_GPGMEPP)
12531 AC_SUBST(GPG_ERROR_CFLAGS)
12532 AC_SUBST(GPG_ERROR_LIBS)
12533 AC_SUBST(LIBASSUAN_CFLAGS)
12534 AC_SUBST(LIBASSUAN_LIBS)
12535 AC_SUBST(GPGMEPP_CFLAGS)
12536 AC_SUBST(GPGMEPP_LIBS)
12538 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12539 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12540     AC_MSG_RESULT([yes])
12541     ENABLE_MEDIAWIKI=TRUE
12542     BUILD_TYPE="$BUILD_TYPE XSLTML"
12543     if test  "x$with_java" = "xno"; then
12544         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12545     fi
12546 else
12547     AC_MSG_RESULT([no])
12548     ENABLE_MEDIAWIKI=
12549     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12551 AC_SUBST(ENABLE_MEDIAWIKI)
12553 AC_MSG_CHECKING([whether to build the Report Builder])
12554 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12555     AC_MSG_RESULT([yes])
12556     ENABLE_REPORTBUILDER=TRUE
12557     AC_MSG_CHECKING([which jfreereport libs to use])
12558     if test "$with_system_jfreereport" = "yes"; then
12559         SYSTEM_JFREEREPORT=TRUE
12560         AC_MSG_RESULT([external])
12561         if test -z $SAC_JAR; then
12562             SAC_JAR=/usr/share/java/sac.jar
12563         fi
12564         if ! test -f $SAC_JAR; then
12565              AC_MSG_ERROR(sac.jar not found.)
12566         fi
12568         if test -z $LIBXML_JAR; then
12569             if test -f /usr/share/java/libxml-1.0.0.jar; then
12570                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12571             elif test -f /usr/share/java/libxml.jar; then
12572                 LIBXML_JAR=/usr/share/java/libxml.jar
12573             else
12574                 AC_MSG_ERROR(libxml.jar replacement not found.)
12575             fi
12576         elif ! test -f $LIBXML_JAR; then
12577             AC_MSG_ERROR(libxml.jar not found.)
12578         fi
12580         if test -z $FLUTE_JAR; then
12581             if test -f /usr/share/java/flute-1.3.0.jar; then
12582                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12583             elif test -f /usr/share/java/flute.jar; then
12584                 FLUTE_JAR=/usr/share/java/flute.jar
12585             else
12586                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12587             fi
12588         elif ! test -f $FLUTE_JAR; then
12589             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12590         fi
12592         if test -z $JFREEREPORT_JAR; then
12593             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12594                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12595             elif test -f /usr/share/java/flow-engine.jar; then
12596                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12597             else
12598                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12599             fi
12600         elif ! test -f  $JFREEREPORT_JAR; then
12601                 AC_MSG_ERROR(jfreereport.jar not found.)
12602         fi
12604         if test -z $LIBLAYOUT_JAR; then
12605             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12606                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12607             elif test -f /usr/share/java/liblayout.jar; then
12608                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12609             else
12610                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12611             fi
12612         elif ! test -f $LIBLAYOUT_JAR; then
12613                 AC_MSG_ERROR(liblayout.jar not found.)
12614         fi
12616         if test -z $LIBLOADER_JAR; then
12617             if test -f /usr/share/java/libloader-1.0.0.jar; then
12618                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
12619             elif test -f /usr/share/java/libloader.jar; then
12620                 LIBLOADER_JAR=/usr/share/java/libloader.jar
12621             else
12622                 AC_MSG_ERROR(libloader.jar replacement not found.)
12623             fi
12624         elif ! test -f  $LIBLOADER_JAR; then
12625             AC_MSG_ERROR(libloader.jar not found.)
12626         fi
12628         if test -z $LIBFORMULA_JAR; then
12629             if test -f /usr/share/java/libformula-0.2.0.jar; then
12630                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
12631             elif test -f /usr/share/java/libformula.jar; then
12632                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
12633             else
12634                 AC_MSG_ERROR(libformula.jar replacement not found.)
12635             fi
12636         elif ! test -f $LIBFORMULA_JAR; then
12637                 AC_MSG_ERROR(libformula.jar not found.)
12638         fi
12640         if test -z $LIBREPOSITORY_JAR; then
12641             if test -f /usr/share/java/librepository-1.0.0.jar; then
12642                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
12643             elif test -f /usr/share/java/librepository.jar; then
12644                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
12645             else
12646                 AC_MSG_ERROR(librepository.jar replacement not found.)
12647             fi
12648         elif ! test -f $LIBREPOSITORY_JAR; then
12649             AC_MSG_ERROR(librepository.jar not found.)
12650         fi
12652         if test -z $LIBFONTS_JAR; then
12653             if test -f /usr/share/java/libfonts-1.0.0.jar; then
12654                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
12655             elif test -f /usr/share/java/libfonts.jar; then
12656                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
12657             else
12658                 AC_MSG_ERROR(libfonts.jar replacement not found.)
12659             fi
12660         elif ! test -f $LIBFONTS_JAR; then
12661                 AC_MSG_ERROR(libfonts.jar not found.)
12662         fi
12664         if test -z $LIBSERIALIZER_JAR; then
12665             if test -f /usr/share/java/libserializer-1.0.0.jar; then
12666                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
12667             elif test -f /usr/share/java/libserializer.jar; then
12668                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
12669             else
12670                 AC_MSG_ERROR(libserializer.jar replacement not found.)
12671             fi
12672         elif ! test -f $LIBSERIALIZER_JAR; then
12673                 AC_MSG_ERROR(libserializer.jar not found.)
12674         fi
12676         if test -z $LIBBASE_JAR; then
12677             if test -f /usr/share/java/libbase-1.0.0.jar; then
12678                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
12679             elif test -f /usr/share/java/libbase.jar; then
12680                 LIBBASE_JAR=/usr/share/java/libbase.jar
12681             else
12682                 AC_MSG_ERROR(libbase.jar replacement not found.)
12683             fi
12684         elif ! test -f $LIBBASE_JAR; then
12685             AC_MSG_ERROR(libbase.jar not found.)
12686         fi
12688     else
12689         AC_MSG_RESULT([internal])
12690         SYSTEM_JFREEREPORT=
12691         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
12692         NEED_ANT=TRUE
12693     fi
12694 else
12695     AC_MSG_RESULT([no])
12696     ENABLE_REPORTBUILDER=
12697     SYSTEM_JFREEREPORT=
12699 AC_SUBST(ENABLE_REPORTBUILDER)
12700 AC_SUBST(SYSTEM_JFREEREPORT)
12701 AC_SUBST(SAC_JAR)
12702 AC_SUBST(LIBXML_JAR)
12703 AC_SUBST(FLUTE_JAR)
12704 AC_SUBST(JFREEREPORT_JAR)
12705 AC_SUBST(LIBBASE_JAR)
12706 AC_SUBST(LIBLAYOUT_JAR)
12707 AC_SUBST(LIBLOADER_JAR)
12708 AC_SUBST(LIBFORMULA_JAR)
12709 AC_SUBST(LIBREPOSITORY_JAR)
12710 AC_SUBST(LIBFONTS_JAR)
12711 AC_SUBST(LIBSERIALIZER_JAR)
12713 # scripting provider for BeanShell?
12714 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
12715 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
12716     AC_MSG_RESULT([yes])
12717     ENABLE_SCRIPTING_BEANSHELL=TRUE
12719     dnl ===================================================================
12720     dnl Check for system beanshell
12721     dnl ===================================================================
12722     AC_MSG_CHECKING([which beanshell to use])
12723     if test "$with_system_beanshell" = "yes"; then
12724         AC_MSG_RESULT([external])
12725         SYSTEM_BSH=TRUE
12726         if test -z $BSH_JAR; then
12727             BSH_JAR=/usr/share/java/bsh.jar
12728         fi
12729         if ! test -f $BSH_JAR; then
12730             AC_MSG_ERROR(bsh.jar not found.)
12731         fi
12732     else
12733         AC_MSG_RESULT([internal])
12734         SYSTEM_BSH=
12735         BUILD_TYPE="$BUILD_TYPE BSH"
12736     fi
12737 else
12738     AC_MSG_RESULT([no])
12739     ENABLE_SCRIPTING_BEANSHELL=
12740     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
12742 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
12743 AC_SUBST(SYSTEM_BSH)
12744 AC_SUBST(BSH_JAR)
12746 # scripting provider for JavaScript?
12747 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
12748 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
12749     AC_MSG_RESULT([yes])
12750     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
12752     dnl ===================================================================
12753     dnl Check for system rhino
12754     dnl ===================================================================
12755     AC_MSG_CHECKING([which rhino to use])
12756     if test "$with_system_rhino" = "yes"; then
12757         AC_MSG_RESULT([external])
12758         SYSTEM_RHINO=TRUE
12759         if test -z $RHINO_JAR; then
12760             RHINO_JAR=/usr/share/java/js.jar
12761         fi
12762         if ! test -f $RHINO_JAR; then
12763             AC_MSG_ERROR(js.jar not found.)
12764         fi
12765     else
12766         AC_MSG_RESULT([internal])
12767         SYSTEM_RHINO=
12768         BUILD_TYPE="$BUILD_TYPE RHINO"
12769         NEED_ANT=TRUE
12770     fi
12771 else
12772     AC_MSG_RESULT([no])
12773     ENABLE_SCRIPTING_JAVASCRIPT=
12774     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
12776 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
12777 AC_SUBST(SYSTEM_RHINO)
12778 AC_SUBST(RHINO_JAR)
12780 # This is only used in Qt5/Qt6/KF5 checks to determine if /usr/lib64
12781 # paths should be added to library search path. So lets put all 64-bit
12782 # platforms there.
12783 supports_multilib=
12784 case "$host_cpu" in
12785 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el)
12786     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
12787         supports_multilib="yes"
12788     fi
12789     ;;
12791     ;;
12792 esac
12794 dnl ===================================================================
12795 dnl QT5 Integration
12796 dnl ===================================================================
12798 QT5_CFLAGS=""
12799 QT5_LIBS=""
12800 QMAKE5="qmake"
12801 MOC5="moc"
12802 QT5_GOBJECT_CFLAGS=""
12803 QT5_GOBJECT_LIBS=""
12804 QT5_HAVE_GOBJECT=""
12805 QT5_PLATFORMS_SRCDIR=""
12806 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12807         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
12808         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12809 then
12810     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
12811     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
12813     if test -n "$supports_multilib"; then
12814         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
12815     fi
12817     qt5_test_include="QtWidgets/qapplication.h"
12818     if test "$_os" = "Emscripten"; then
12819         qt5_test_library="libQt5Widgets.a"
12820     else
12821         qt5_test_library="libQt5Widgets.so"
12822     fi
12824     dnl Check for qmake5
12825     if test -n "$QT5DIR"; then
12826         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
12827     else
12828         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
12829     fi
12830     if test "$QMAKE5" = "no"; then
12831         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12832     else
12833         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
12834         if test -z "$qmake5_test_ver"; then
12835             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12836         fi
12837         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
12838         qt5_minimal_minor="6"
12839         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
12840             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
12841         else
12842             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
12843         fi
12844     fi
12846     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
12847     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
12848     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
12849     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
12851     AC_MSG_CHECKING([for Qt5 headers])
12852     qt5_incdir="no"
12853     for inc_dir in $qt5_incdirs; do
12854         if test -r "$inc_dir/$qt5_test_include"; then
12855             qt5_incdir="$inc_dir"
12856             break
12857         fi
12858     done
12859     AC_MSG_RESULT([$qt5_incdir])
12860     if test "x$qt5_incdir" = "xno"; then
12861         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12862     fi
12863     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
12864     AC_LANG_PUSH([C++])
12865     save_CPPFLAGS=$CPPFLAGS
12866     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
12867     AC_CHECK_HEADER(QtCore/qconfig.h, [],
12868         [AC_MSG_ERROR(qconfig.h header not found.)], [])
12869     CPPFLAGS=$save_CPPFLAGS
12870     AC_LANG_POP([C++])
12872     AC_MSG_CHECKING([for Qt5 libraries])
12873     qt5_libdir="no"
12874     for lib_dir in $qt5_libdirs; do
12875         if test -r "$lib_dir/$qt5_test_library"; then
12876             qt5_libdir="$lib_dir"
12877             break
12878         fi
12879     done
12880     AC_MSG_RESULT([$qt5_libdir])
12881     if test "x$qt5_libdir" = "xno"; then
12882         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12883     fi
12885     if test "$_os" = "Emscripten"; then
12886         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
12887             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
12888         fi
12889         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
12890             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
12891         fi
12892     fi
12894     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
12895     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12896     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
12897     if test "$_os" = "Emscripten"; then
12898         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
12899     fi
12901     if test "$USING_X11" = TRUE; then
12902         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
12903         PKG_CHECK_MODULES(QT5_XCB_ICCCM,[xcb-icccm],[
12904             QT5_HAVE_XCB_ICCCM=1
12905             AC_DEFINE(QT5_HAVE_XCB_ICCCM)
12906         ],[
12907             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)])
12908             add_warning "XCB ICCCM not found, which is needed for Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)"
12909         ])
12910         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
12911         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
12912         QT5_USING_X11=1
12913         AC_DEFINE(QT5_USING_X11)
12914     fi
12916     dnl Check for Meta Object Compiler
12918     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
12919     if test "$MOC5" = "no"; then
12920         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
12921 the root of your Qt installation by exporting QT5DIR before running "configure".])
12922     fi
12924     if test "$test_gstreamer_1_0" = yes; then
12925         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
12926                 QT5_HAVE_GOBJECT=1
12927                 AC_DEFINE(QT5_HAVE_GOBJECT)
12928             ],
12929             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
12930         )
12931     fi
12933 AC_SUBST(QT5_CFLAGS)
12934 AC_SUBST(QT5_LIBS)
12935 AC_SUBST(MOC5)
12936 AC_SUBST(QT5_GOBJECT_CFLAGS)
12937 AC_SUBST(QT5_GOBJECT_LIBS)
12938 AC_SUBST(QT5_HAVE_GOBJECT)
12939 AC_SUBST(QT5_PLATFORMS_SRCDIR)
12941 dnl ===================================================================
12942 dnl QT6 Integration
12943 dnl ===================================================================
12945 QT6_CFLAGS=""
12946 QT6_LIBS=""
12947 QMAKE6="qmake"
12948 MOC6="moc"
12949 QT6_PLATFORMS_SRCDIR=""
12950 if test \( "$test_qt6" = "yes" -a "$ENABLE_QT6" = "TRUE" \)
12951 then
12952     qt6_incdirs="$QT6INC /usr/include/qt6 /usr/include $x_includes"
12953     qt6_libdirs="$QT6LIB /usr/lib/qt6 /usr/lib $x_libraries"
12955     if test -n "$supports_multilib"; then
12956         qt6_libdirs="$qt6_libdirs /usr/lib64/qt6 /usr/lib64/qt /usr/lib64"
12957     fi
12959     qt6_test_include="QtWidgets/qapplication.h"
12960     if test "$_os" = "Emscripten"; then
12961         qt6_test_library="libQt6Widgets.a"
12962     else
12963         qt6_test_library="libQt6Widgets.so"
12964     fi
12966     dnl Check for qmake6
12967     if test -n "$QT6DIR"; then
12968         AC_PATH_PROG(QMAKE6, [qmake], no, [$QT6DIR/bin])
12969     else
12970         AC_PATH_PROGS(QMAKE6, [qmake-qt6 qmake], no)
12971     fi
12972     if test "$QMAKE6" = "no"; then
12973         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
12974     else
12975         qmake6_test_ver="`$QMAKE6 -v 2>&1 | $SED -n -e 's/^Using Qt version \(6\.[[0-9.]]\+\).*$/\1/p'`"
12976         if test -z "$qmake6_test_ver"; then
12977             AC_MSG_ERROR([Wrong qmake for Qt6 found. Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
12978         fi
12979         AC_MSG_NOTICE([Detected Qt6 version: $qmake6_test_ver])
12980     fi
12982     qt6_incdirs="`$QMAKE6 -query QT_INSTALL_HEADERS` $qt6_incdirs"
12983     qt6_libdirs="`$QMAKE6 -query QT_INSTALL_LIBS` $qt6_libdirs"
12984     qt6_platformsdir="`$QMAKE6 -query QT_INSTALL_PLUGINS`/platforms"
12985     QT6_PLATFORMS_SRCDIR="$qt6_platformsdir"
12987     AC_MSG_CHECKING([for Qt6 headers])
12988     qt6_incdir="no"
12989     for inc_dir in $qt6_incdirs; do
12990         if test -r "$inc_dir/$qt6_test_include"; then
12991             qt6_incdir="$inc_dir"
12992             break
12993         fi
12994     done
12995     AC_MSG_RESULT([$qt6_incdir])
12996     if test "x$qt6_incdir" = "xno"; then
12997         AC_MSG_ERROR([Qt6 headers not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
12998     fi
12999     # check for scenario: qt6-qtbase-devel-*.86_64 installed but host is i686
13000     AC_LANG_PUSH([C++])
13001     save_CPPFLAGS=$CPPFLAGS
13002     CPPFLAGS="${CPPFLAGS} -I${qt6_incdir}"
13003     AC_CHECK_HEADER(QtCore/qconfig.h, [],
13004         [AC_MSG_ERROR(qconfig.h header not found.)], [])
13005     CPPFLAGS=$save_CPPFLAGS
13006     AC_LANG_POP([C++])
13008     AC_MSG_CHECKING([for Qt6 libraries])
13009     qt6_libdir="no"
13010     for lib_dir in $qt6_libdirs; do
13011         if test -r "$lib_dir/$qt6_test_library"; then
13012             qt6_libdir="$lib_dir"
13013             break
13014         fi
13015     done
13016     AC_MSG_RESULT([$qt6_libdir])
13017     if test "x$qt6_libdir" = "xno"; then
13018         AC_MSG_ERROR([Qt6 libraries not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13019     fi
13021     if test "$_os" = "Emscripten"; then
13022         if test ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html ; then
13023             QT6_PLATFORMS_SRCDIR="${QT6_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
13024         fi
13025         if test ! -f "${qt6_platformsdir}"/libqwasm.a -o ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html; then
13026             AC_MSG_ERROR([No Qt6 WASM QPA plugin found in ${qt6_platformsdir} or ${QT6_PLATFORMS_SRCDIR}])
13027         fi
13028     fi
13030     QT6_CFLAGS="-I$qt6_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13031     QT6_CFLAGS=$(printf '%s' "$QT6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13032     QT6_LIBS="-L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
13033     if test "$_os" = "Emscripten"; then
13034         QT6_LIBS="$QT6_LIBS -lqtpcre2 -lQt6EventDispatcherSupport -lQt6FontDatabaseSupport -L${qt6_platformsdir} -lqwasm"
13035     fi
13037     if test "$USING_X11" = TRUE; then
13038         PKG_CHECK_MODULES(QT6_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for key modifier handling in X11.])])
13039         QT6_CFLAGS="$QT6_CFLAGS $QT6_XCB_CFLAGS"
13040         QT6_LIBS="$QT6_LIBS $QT6_XCB_LIBS"
13041         QT6_USING_X11=1
13042         AC_DEFINE(QT6_USING_X11)
13043     fi
13045     dnl Check for Meta Object Compiler
13047     AC_PATH_PROGS( MOC6, [moc-qt6 moc], no, [`dirname $qt6_libdir`/libexec:$QT6DIR/libexec:$PATH])
13048     if test "$MOC6" = "no"; then
13049         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13050 the root of your Qt installation by exporting QT6DIR before running "configure".])
13051     fi
13053 AC_SUBST(QT6_CFLAGS)
13054 AC_SUBST(QT6_LIBS)
13055 AC_SUBST(MOC6)
13056 AC_SUBST(QT6_PLATFORMS_SRCDIR)
13058 dnl ===================================================================
13059 dnl KF5 Integration
13060 dnl ===================================================================
13062 KF5_CFLAGS=""
13063 KF5_LIBS=""
13064 KF5_CONFIG="kf5-config"
13065 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13066         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13067 then
13068     if test "$OS" = "HAIKU"; then
13069         haiku_arch="`echo $RTL_ARCH | tr X x`"
13070         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13071         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13072     fi
13074     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
13075     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
13076     if test -n "$supports_multilib"; then
13077         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
13078     fi
13080     kf5_test_include="KF5/kcoreaddons_version.h"
13081     kf5_test_library="libKF5CoreAddons.so"
13082     kf5_libdirs="$qt5_libdir $kf5_libdirs"
13084     dnl kf5 KDE4 support compatibility installed
13085     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
13086     if test "$KF5_CONFIG" != "no"; then
13087         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
13088         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
13089     fi
13091     dnl Check for KF5 headers
13092     AC_MSG_CHECKING([for KF5 headers])
13093     kf5_incdir="no"
13094     for kf5_check in $kf5_incdirs; do
13095         if test -r "$kf5_check/$kf5_test_include"; then
13096             kf5_incdir="$kf5_check/KF5"
13097             break
13098         fi
13099     done
13100     AC_MSG_RESULT([$kf5_incdir])
13101     if test "x$kf5_incdir" = "xno"; then
13102         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13103     fi
13105     dnl Check for KF5 libraries
13106     AC_MSG_CHECKING([for KF5 libraries])
13107     kf5_libdir="no"
13108     for kf5_check in $kf5_libdirs; do
13109         if test -r "$kf5_check/$kf5_test_library"; then
13110             kf5_libdir="$kf5_check"
13111             break
13112         fi
13113     done
13115     AC_MSG_RESULT([$kf5_libdir])
13116     if test "x$kf5_libdir" = "xno"; then
13117         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13118     fi
13120     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"
13121     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13122     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13124     if test "$USING_X11" = TRUE; then
13125         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
13126     fi
13128     AC_LANG_PUSH([C++])
13129     save_CXXFLAGS=$CXXFLAGS
13130     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
13131     AC_MSG_CHECKING([whether KDE is >= 5.0])
13132        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13133 #include <kcoreaddons_version.h>
13135 int main(int argc, char **argv) {
13136        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
13137        else return 1;
13139        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13140     CXXFLAGS=$save_CXXFLAGS
13141     AC_LANG_POP([C++])
13143 AC_SUBST(KF5_CFLAGS)
13144 AC_SUBST(KF5_LIBS)
13146 dnl ===================================================================
13147 dnl Test whether to include Evolution 2 support
13148 dnl ===================================================================
13149 AC_MSG_CHECKING([whether to enable evolution 2 support])
13150 if test "$enable_evolution2" = yes; then
13151     AC_MSG_RESULT([yes])
13152     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
13153     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13154     FilterLibs "${GOBJECT_LIBS}"
13155     GOBJECT_LIBS="${filteredlibs}"
13156     ENABLE_EVOAB2="TRUE"
13157 else
13158     AC_MSG_RESULT([no])
13160 AC_SUBST(ENABLE_EVOAB2)
13161 AC_SUBST(GOBJECT_CFLAGS)
13162 AC_SUBST(GOBJECT_LIBS)
13164 dnl ===================================================================
13165 dnl Test which themes to include
13166 dnl ===================================================================
13167 AC_MSG_CHECKING([which themes to include])
13168 # if none given use default subset of available themes
13169 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
13170     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"
13173 WITH_THEMES=""
13174 if test "x$with_theme" != "xno"; then
13175     for theme in $with_theme; do
13176         case $theme in
13177         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" ;;
13178         default) real_theme=colibre ;;
13179         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
13180         esac
13181         WITH_THEMES=`echo "$WITH_THEMES $real_theme"|tr '\ ' '\n'|sort|uniq|tr '\n' '\ '`
13182     done
13184 AC_MSG_RESULT([$WITH_THEMES])
13185 AC_SUBST([WITH_THEMES])
13186 # FIXME: remove this, and the convenience default->colibre remapping after a grace period
13187 for theme in $with_theme; do
13188     case $theme in
13189     default) AC_MSG_WARN([--with-theme=default is deprecated and will be removed, use --with-theme=colibre]) ;;
13190     *) ;;
13191     esac
13192 done
13194 ###############################################################################
13195 # Extensions checking
13196 ###############################################################################
13197 AC_MSG_CHECKING([for extensions integration])
13198 if test "x$enable_extension_integration" != "xno"; then
13199     WITH_EXTENSION_INTEGRATION=TRUE
13200     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
13201     AC_MSG_RESULT([yes, use integration])
13202 else
13203     WITH_EXTENSION_INTEGRATION=
13204     AC_MSG_RESULT([no, do not integrate])
13206 AC_SUBST(WITH_EXTENSION_INTEGRATION)
13208 dnl Should any extra extensions be included?
13209 dnl There are standalone tests for each of these below.
13210 WITH_EXTRA_EXTENSIONS=
13211 AC_SUBST([WITH_EXTRA_EXTENSIONS])
13213 libo_CHECK_EXTENSION([ConvertTextToNumber],[CT2N],[ct2n],[ct2n],[])
13214 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
13215 if test "x$with_java" != "xno"; then
13216     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
13217     libo_CHECK_EXTENSION([LanguageTool],[LANGUAGETOOL],[languagetool],[languagetool],[])
13220 AC_MSG_CHECKING([whether to build opens___.ttf])
13221 if test "$enable_build_opensymbol" = "yes"; then
13222     AC_MSG_RESULT([yes])
13223     AC_PATH_PROG(FONTFORGE, fontforge)
13224     if test -z "$FONTFORGE"; then
13225         AC_MSG_ERROR([fontforge not installed])
13226     fi
13227 else
13228     AC_MSG_RESULT([no])
13229     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
13231 AC_SUBST(FONTFORGE)
13233 dnl ===================================================================
13234 dnl Test whether to include fonts
13235 dnl ===================================================================
13236 AC_MSG_CHECKING([whether to include third-party fonts])
13237 if test "$with_fonts" != "no"; then
13238     AC_MSG_RESULT([yes])
13239     WITH_FONTS=TRUE
13240     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
13241     AC_DEFINE(HAVE_MORE_FONTS)
13242 else
13243     AC_MSG_RESULT([no])
13244     WITH_FONTS=
13245     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
13247 AC_SUBST(WITH_FONTS)
13250 dnl ===================================================================
13251 dnl Test whether to enable online update service
13252 dnl ===================================================================
13253 AC_MSG_CHECKING([whether to enable online update])
13254 ENABLE_ONLINE_UPDATE=
13255 ENABLE_ONLINE_UPDATE_MAR=
13256 UPDATE_CONFIG=
13257 if test "$enable_online_update" = ""; then
13258     AC_MSG_RESULT([no])
13259 else
13260     if test "$enable_online_update" = "mar"; then
13261         AC_MSG_RESULT([yes - MAR-based online update])
13262         ENABLE_ONLINE_UPDATE_MAR="TRUE"
13263         if test "$with_update_config" = ""; then
13264             AC_MSG_ERROR([mar based online updater needs an update config specified with "with-update-config])
13265         fi
13266         UPDATE_CONFIG="$with_update_config"
13267         AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
13268     elif test "$enable_online_update" = "yes"; then
13269         AC_MSG_RESULT([yes])
13270         ENABLE_ONLINE_UPDATE="TRUE"
13271     else
13272         AC_MSG_RESULT([no])
13273     fi
13275 AC_SUBST(ENABLE_ONLINE_UPDATE)
13276 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
13277 AC_SUBST(UPDATE_CONFIG)
13280 PRIVACY_POLICY_URL="$with_privacy_policy_url"
13281 if test "$ENABLE_ONLINE_UPDATE" = TRUE -o "$ENABLE_BREAKPAD" = "TRUE"; then
13282     if test "x$with_privacy_policy_url" = "xundefined"; then
13283         AC_MSG_FAILURE([online update or breakpad/crashreporting are enabled, but no --with-privacy-policy-url=... was provided])
13284     fi
13286 AC_SUBST(PRIVACY_POLICY_URL)
13287 dnl ===================================================================
13288 dnl Test whether we need bzip2
13289 dnl ===================================================================
13290 SYSTEM_BZIP2=
13291 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE"; then
13292     AC_MSG_CHECKING([whether to use system bzip2])
13293     if test "$with_system_bzip2" = yes; then
13294         SYSTEM_BZIP2=TRUE
13295         AC_MSG_RESULT([yes])
13296         PKG_CHECK_MODULES(BZIP2, bzip2)
13297         FilterLibs "${BZIP2_LIBS}"
13298         BZIP2_LIBS="${filteredlibs}"
13299     else
13300         AC_MSG_RESULT([no])
13301         BUILD_TYPE="$BUILD_TYPE BZIP2"
13302     fi
13304 AC_SUBST(SYSTEM_BZIP2)
13305 AC_SUBST(BZIP2_CFLAGS)
13306 AC_SUBST(BZIP2_LIBS)
13308 dnl ===================================================================
13309 dnl Test whether to enable extension update
13310 dnl ===================================================================
13311 AC_MSG_CHECKING([whether to enable extension update])
13312 ENABLE_EXTENSION_UPDATE=
13313 if test "x$enable_extension_update" = "xno"; then
13314     AC_MSG_RESULT([no])
13315 else
13316     AC_MSG_RESULT([yes])
13317     ENABLE_EXTENSION_UPDATE="TRUE"
13318     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
13319     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
13321 AC_SUBST(ENABLE_EXTENSION_UPDATE)
13324 dnl ===================================================================
13325 dnl Test whether to create MSI with LIMITUI=1 (silent install)
13326 dnl ===================================================================
13327 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
13328 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
13329     AC_MSG_RESULT([no])
13330     ENABLE_SILENT_MSI=
13331 else
13332     AC_MSG_RESULT([yes])
13333     ENABLE_SILENT_MSI=TRUE
13334     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
13336 AC_SUBST(ENABLE_SILENT_MSI)
13338 AC_MSG_CHECKING([whether and how to use Xinerama])
13339 if test "$_os" = "Linux" -o "$_os" = "FreeBSD"; then
13340     if test "$x_libraries" = "default_x_libraries"; then
13341         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
13342         if test "x$XINERAMALIB" = x; then
13343            XINERAMALIB="/usr/lib"
13344         fi
13345     else
13346         XINERAMALIB="$x_libraries"
13347     fi
13348     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13349         # we have both versions, let the user decide but use the dynamic one
13350         # per default
13351         USE_XINERAMA=TRUE
13352         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13353             XINERAMA_LINK=dynamic
13354         else
13355             XINERAMA_LINK=static
13356         fi
13357     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13358         # we have only the dynamic version
13359         USE_XINERAMA=TRUE
13360         XINERAMA_LINK=dynamic
13361     elif test -e "$XINERAMALIB/libXinerama.a"; then
13362         # static version
13363         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13364             USE_XINERAMA=TRUE
13365             XINERAMA_LINK=static
13366         else
13367             USE_XINERAMA=
13368             XINERAMA_LINK=none
13369         fi
13370     else
13371         # no Xinerama
13372         USE_XINERAMA=
13373         XINERAMA_LINK=none
13374     fi
13375     if test "$USE_XINERAMA" = "TRUE"; then
13376         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13377         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13378             [AC_MSG_ERROR(Xinerama header not found.)], [])
13379         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13380         if test "x$XEXTLIB" = x; then
13381            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13382         fi
13383         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13384         if test "$_os" = "FreeBSD"; then
13385             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13386         fi
13387         if test "$_os" = "Linux"; then
13388             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13389         fi
13390         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13391             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13392     else
13393         AC_MSG_RESULT([no, libXinerama not found or wrong architecture.])
13394     fi
13395 else
13396     USE_XINERAMA=
13397     XINERAMA_LINK=none
13398     AC_MSG_RESULT([no])
13400 AC_SUBST(USE_XINERAMA)
13401 AC_SUBST(XINERAMA_LINK)
13403 dnl ===================================================================
13404 dnl Test whether to build cairo or rely on the system version
13405 dnl ===================================================================
13407 if test "$test_cairo" = "yes"; then
13408     AC_MSG_CHECKING([whether to use the system cairo])
13410     : ${with_system_cairo:=$with_system_libs}
13411     if test "$with_system_cairo" = "yes"; then
13412         SYSTEM_CAIRO=TRUE
13413         AC_MSG_RESULT([yes])
13415         PKG_CHECK_MODULES( CAIRO, cairo >= 1.8.0 )
13416         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13417         FilterLibs "${CAIRO_LIBS}"
13418         CAIRO_LIBS="${filteredlibs}"
13420         if test "$test_xrender" = "yes"; then
13421             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13422             AC_LANG_PUSH([C])
13423             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13424 #ifdef PictStandardA8
13425 #else
13426       return fail;
13427 #endif
13428 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13430             AC_LANG_POP([C])
13431         fi
13432     else
13433         AC_MSG_RESULT([no])
13434         BUILD_TYPE="$BUILD_TYPE CAIRO"
13435     fi
13437     if test "$enable_cairo_canvas" != no; then
13438         AC_DEFINE(ENABLE_CAIRO_CANVAS)
13439         ENABLE_CAIRO_CANVAS=TRUE
13440     fi
13443 AC_SUBST(CAIRO_CFLAGS)
13444 AC_SUBST(CAIRO_LIBS)
13445 AC_SUBST(ENABLE_CAIRO_CANVAS)
13446 AC_SUBST(SYSTEM_CAIRO)
13448 dnl ===================================================================
13449 dnl Test whether to use avahi
13450 dnl ===================================================================
13451 if test "$_os" = "WINNT"; then
13452     # Windows uses bundled mDNSResponder
13453     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13454 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13455     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13456                       [ENABLE_AVAHI="TRUE"])
13457     AC_DEFINE(HAVE_FEATURE_AVAHI)
13458     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13459     FilterLibs "${AVAHI_LIBS}"
13460     AVAHI_LIBS="${filteredlibs}"
13463 AC_SUBST(ENABLE_AVAHI)
13464 AC_SUBST(AVAHI_CFLAGS)
13465 AC_SUBST(AVAHI_LIBS)
13467 dnl ===================================================================
13468 dnl Test whether to use liblangtag
13469 dnl ===================================================================
13470 SYSTEM_LIBLANGTAG=
13471 AC_MSG_CHECKING([whether to use system liblangtag])
13472 if test "$with_system_liblangtag" = yes; then
13473     SYSTEM_LIBLANGTAG=TRUE
13474     AC_MSG_RESULT([yes])
13475     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
13476     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
13477     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
13478     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13479     FilterLibs "${LIBLANGTAG_LIBS}"
13480     LIBLANGTAG_LIBS="${filteredlibs}"
13481 else
13482     SYSTEM_LIBLANGTAG=
13483     AC_MSG_RESULT([no])
13484     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
13485     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
13486     if test "$COM" = "MSC"; then
13487         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
13488     else
13489         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
13490     fi
13492 AC_SUBST(SYSTEM_LIBLANGTAG)
13493 AC_SUBST(LIBLANGTAG_CFLAGS)
13494 AC_SUBST(LIBLANGTAG_LIBS)
13496 dnl ===================================================================
13497 dnl Test whether to build libpng or rely on the system version
13498 dnl ===================================================================
13500 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng],["-I${WORKDIR}/UnpackedTarball/libpng"],["-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"])
13502 dnl ===================================================================
13503 dnl Check for runtime JVM search path
13504 dnl ===================================================================
13505 if test "$ENABLE_JAVA" != ""; then
13506     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
13507     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
13508         AC_MSG_RESULT([yes])
13509         if ! test -d "$with_jvm_path"; then
13510             AC_MSG_ERROR(["$with_jvm_path" not a directory])
13511         fi
13512         if ! test -d "$with_jvm_path"jvm; then
13513             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
13514         fi
13515         JVM_ONE_PATH_CHECK="$with_jvm_path"
13516         AC_SUBST(JVM_ONE_PATH_CHECK)
13517     else
13518         AC_MSG_RESULT([no])
13519     fi
13522 dnl ===================================================================
13523 dnl Test for the presence of Ant and that it works
13524 dnl ===================================================================
13526 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
13527     ANT_HOME=; export ANT_HOME
13528     WITH_ANT_HOME=; export WITH_ANT_HOME
13529     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
13530         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
13531             if test "$_os" = "WINNT"; then
13532                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
13533             else
13534                 with_ant_home="$LODE_HOME/opt/ant"
13535             fi
13536         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
13537             with_ant_home="$LODE_HOME/opt/ant"
13538         fi
13539     fi
13540     if test -z "$with_ant_home"; then
13541         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
13542     else
13543         if test "$_os" = "WINNT"; then
13544             # AC_PATH_PROGS needs unix path
13545             with_ant_home=`cygpath -u "$with_ant_home"`
13546         fi
13547         AbsolutePath "$with_ant_home"
13548         with_ant_home=$absolute_path
13549         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
13550         WITH_ANT_HOME=$with_ant_home
13551         ANT_HOME=$with_ant_home
13552     fi
13554     if test -z "$ANT"; then
13555         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
13556     else
13557         # resolve relative or absolute symlink
13558         while test -h "$ANT"; do
13559             a_cwd=`pwd`
13560             a_basename=`basename "$ANT"`
13561             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
13562             cd "`dirname "$ANT"`"
13563             cd "`dirname "$a_script"`"
13564             ANT="`pwd`"/"`basename "$a_script"`"
13565             cd "$a_cwd"
13566         done
13568         AC_MSG_CHECKING([if $ANT works])
13569         mkdir -p conftest.dir
13570         a_cwd=$(pwd)
13571         cd conftest.dir
13572         cat > conftest.java << EOF
13573         public class conftest {
13574             int testmethod(int a, int b) {
13575                     return a + b;
13576             }
13577         }
13580         cat > conftest.xml << EOF
13581         <project name="conftest" default="conftest">
13582         <target name="conftest">
13583             <javac srcdir="." includes="conftest.java">
13584             </javac>
13585         </target>
13586         </project>
13589         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
13590         if test $? = 0 -a -f ./conftest.class; then
13591             AC_MSG_RESULT([Ant works])
13592             if test -z "$WITH_ANT_HOME"; then
13593                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
13594                 if test -z "$ANT_HOME"; then
13595                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
13596                 fi
13597             else
13598                 ANT_HOME="$WITH_ANT_HOME"
13599             fi
13600         else
13601             echo "configure: Ant test failed" >&5
13602             cat conftest.java >&5
13603             cat conftest.xml >&5
13604             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
13605         fi
13606         cd "$a_cwd"
13607         rm -fr conftest.dir
13608     fi
13609     if test -z "$ANT_HOME"; then
13610         ANT_HOME="NO_ANT_HOME"
13611     else
13612         PathFormat "$ANT_HOME"
13613         ANT_HOME="$formatted_path"
13614         PathFormat "$ANT"
13615         ANT="$formatted_path"
13616     fi
13618     dnl Checking for ant.jar
13619     if test "$ANT_HOME" != "NO_ANT_HOME"; then
13620         AC_MSG_CHECKING([Ant lib directory])
13621         if test -f $ANT_HOME/lib/ant.jar; then
13622             ANT_LIB="$ANT_HOME/lib"
13623         else
13624             if test -f $ANT_HOME/ant.jar; then
13625                 ANT_LIB="$ANT_HOME"
13626             else
13627                 if test -f /usr/share/java/ant.jar; then
13628                     ANT_LIB=/usr/share/java
13629                 else
13630                     if test -f /usr/share/ant-core/lib/ant.jar; then
13631                         ANT_LIB=/usr/share/ant-core/lib
13632                     else
13633                         if test -f $ANT_HOME/lib/ant/ant.jar; then
13634                             ANT_LIB="$ANT_HOME/lib/ant"
13635                         else
13636                             if test -f /usr/share/lib/ant/ant.jar; then
13637                                 ANT_LIB=/usr/share/lib/ant
13638                             else
13639                                 AC_MSG_ERROR([Ant libraries not found!])
13640                             fi
13641                         fi
13642                     fi
13643                 fi
13644             fi
13645         fi
13646         PathFormat "$ANT_LIB"
13647         ANT_LIB="$formatted_path"
13648         AC_MSG_RESULT([Ant lib directory found.])
13649     fi
13651     ant_minver=1.6.0
13652     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
13654     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
13655     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
13656     ant_version_major=`echo $ant_version | cut -d. -f1`
13657     ant_version_minor=`echo $ant_version | cut -d. -f2`
13658     echo "configure: ant_version $ant_version " >&5
13659     echo "configure: ant_version_major $ant_version_major " >&5
13660     echo "configure: ant_version_minor $ant_version_minor " >&5
13661     if test "$ant_version_major" -ge "2"; then
13662         AC_MSG_RESULT([yes, $ant_version])
13663     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
13664         AC_MSG_RESULT([yes, $ant_version])
13665     else
13666         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
13667     fi
13669     rm -f conftest* core core.* *.core
13671 AC_SUBST(ANT)
13672 AC_SUBST(ANT_HOME)
13673 AC_SUBST(ANT_LIB)
13675 OOO_JUNIT_JAR=
13676 HAMCREST_JAR=
13677 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
13678     AC_MSG_CHECKING([for JUnit 4])
13679     if test "$with_junit" = "yes"; then
13680         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
13681             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
13682         elif test -e /usr/share/java/junit4.jar; then
13683             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
13684         else
13685            if test -e /usr/share/lib/java/junit.jar; then
13686               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
13687            else
13688               OOO_JUNIT_JAR=/usr/share/java/junit.jar
13689            fi
13690         fi
13691     else
13692         OOO_JUNIT_JAR=$with_junit
13693     fi
13694     if test "$_os" = "WINNT"; then
13695         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
13696     fi
13697     printf 'import org.junit.Before;' > conftest.java
13698     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13699         AC_MSG_RESULT([$OOO_JUNIT_JAR])
13700     else
13701         AC_MSG_ERROR(
13702 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
13703  specify its pathname via --with-junit=..., or disable it via --without-junit])
13704     fi
13705     rm -f conftest.class conftest.java
13706     if test $OOO_JUNIT_JAR != ""; then
13707         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
13708     fi
13710     AC_MSG_CHECKING([for included Hamcrest])
13711     printf 'import org.hamcrest.BaseDescription;' > conftest.java
13712     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13713         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
13714     else
13715         AC_MSG_RESULT([Not included])
13716         AC_MSG_CHECKING([for standalone hamcrest jar.])
13717         if test "$with_hamcrest" = "yes"; then
13718             if test -e /usr/share/lib/java/hamcrest.jar; then
13719                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
13720             elif test -e /usr/share/java/hamcrest/core.jar; then
13721                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
13722             elif test -e /usr/share/java/hamcrest/hamcrest.jar; then
13723                 HAMCREST_JAR=/usr/share/java/hamcrest/hamcrest.jar
13724             else
13725                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
13726             fi
13727         else
13728             HAMCREST_JAR=$with_hamcrest
13729         fi
13730         if test "$_os" = "WINNT"; then
13731             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
13732         fi
13733         if "$JAVACOMPILER" -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
13734             AC_MSG_RESULT([$HAMCREST_JAR])
13735         else
13736             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),
13737                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
13738         fi
13739     fi
13740     rm -f conftest.class conftest.java
13742 AC_SUBST(OOO_JUNIT_JAR)
13743 AC_SUBST(HAMCREST_JAR)
13746 AC_SUBST(SCPDEFS)
13749 # check for wget and curl
13751 WGET=
13752 CURL=
13754 if test "$enable_fetch_external" != "no"; then
13756 CURL=`which curl 2>/dev/null`
13758 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
13759     # wget new enough?
13760     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
13761     if test $? -eq 0; then
13762         WGET=$i
13763         break
13764     fi
13765 done
13767 if test -z "$WGET" -a -z "$CURL"; then
13768     AC_MSG_ERROR([neither wget nor curl found!])
13773 AC_SUBST(WGET)
13774 AC_SUBST(CURL)
13777 # check for sha256sum
13779 SHA256SUM=
13781 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
13782     eval "$i -a 256 --version" > /dev/null 2>&1
13783     ret=$?
13784     if test $ret -eq 0; then
13785         SHA256SUM="$i -a 256"
13786         break
13787     fi
13788 done
13790 if test -z "$SHA256SUM"; then
13791     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
13792         eval "$i --version" > /dev/null 2>&1
13793         ret=$?
13794         if test $ret -eq 0; then
13795             SHA256SUM=$i
13796             break
13797         fi
13798     done
13801 if test -z "$SHA256SUM"; then
13802     AC_MSG_ERROR([no sha256sum found!])
13805 AC_SUBST(SHA256SUM)
13807 dnl ===================================================================
13808 dnl Dealing with l10n options
13809 dnl ===================================================================
13810 AC_MSG_CHECKING([which languages to be built])
13811 # get list of all languages
13812 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
13813 # the sed command does the following:
13814 #   + if a line ends with a backslash, append the next line to it
13815 #   + adds " on the beginning of the value (after =)
13816 #   + adds " at the end of the value
13817 #   + removes en-US; we want to put it on the beginning
13818 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
13819 [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)]
13820 ALL_LANGS="en-US $completelangiso"
13821 # check the configured localizations
13822 WITH_LANG="$with_lang"
13824 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
13825 # (Norwegian is "nb" and "nn".)
13826 if test "$WITH_LANG" = "no"; then
13827     WITH_LANG=
13830 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
13831     AC_MSG_RESULT([en-US])
13832 else
13833     AC_MSG_RESULT([$WITH_LANG])
13834     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
13835     if test -z "$MSGFMT"; then
13836         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
13837             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
13838         elif test -x "/opt/lo/bin/msgfmt"; then
13839             MSGFMT="/opt/lo/bin/msgfmt"
13840         else
13841             AC_CHECK_PROGS(MSGFMT, [msgfmt])
13842             if test -z "$MSGFMT"; then
13843                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
13844             fi
13845         fi
13846     fi
13847     if test -z "$MSGUNIQ"; then
13848         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
13849             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
13850         elif test -x "/opt/lo/bin/msguniq"; then
13851             MSGUNIQ="/opt/lo/bin/msguniq"
13852         else
13853             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
13854             if test -z "$MSGUNIQ"; then
13855                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
13856             fi
13857         fi
13858     fi
13860 AC_SUBST(MSGFMT)
13861 AC_SUBST(MSGUNIQ)
13862 # check that the list is valid
13863 for lang in $WITH_LANG; do
13864     test "$lang" = "ALL" && continue
13865     # need to check for the exact string, so add space before and after the list of all languages
13866     for vl in $ALL_LANGS; do
13867         if test "$vl" = "$lang"; then
13868            break
13869         fi
13870     done
13871     if test "$vl" != "$lang"; then
13872         # if you're reading this - you prolly quoted your languages remove the quotes ...
13873         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
13874     fi
13875 done
13876 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
13877     echo $WITH_LANG | grep -q en-US
13878     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
13880 # list with substituted ALL
13881 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
13882 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
13883 test "$WITH_LANG" = "en-US" && WITH_LANG=
13884 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
13885     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
13886     ALL_LANGS=`echo $ALL_LANGS qtz`
13888 AC_SUBST(ALL_LANGS)
13889 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
13890 AC_SUBST(WITH_LANG)
13891 AC_SUBST(WITH_LANG_LIST)
13892 AC_SUBST(GIT_NEEDED_SUBMODULES)
13894 WITH_POOR_HELP_LOCALIZATIONS=
13895 if test -d "$SRC_ROOT/translations/source"; then
13896     for l in `ls -1 $SRC_ROOT/translations/source`; do
13897         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
13898             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
13899         fi
13900     done
13902 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
13904 if test -n "$with_locales"; then
13905     WITH_LOCALES="$with_locales"
13907     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
13908     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
13909     # config_host/config_locales.h.in
13910     for locale in $WITH_LOCALES; do
13911         lang=${locale%_*}
13913         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
13915         case $lang in
13916         hi|mr*ne)
13917             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
13918             ;;
13919         bg|ru)
13920             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
13921             ;;
13922         esac
13923     done
13924 else
13925     AC_DEFINE(WITH_LOCALE_ALL)
13927 AC_SUBST(WITH_LOCALES)
13929 dnl git submodule update --reference
13930 dnl ===================================================================
13931 if test -n "${GIT_REFERENCE_SRC}"; then
13932     for repo in ${GIT_NEEDED_SUBMODULES}; do
13933         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
13934             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
13935         fi
13936     done
13938 AC_SUBST(GIT_REFERENCE_SRC)
13940 dnl git submodules linked dirs
13941 dnl ===================================================================
13942 if test -n "${GIT_LINK_SRC}"; then
13943     for repo in ${GIT_NEEDED_SUBMODULES}; do
13944         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
13945             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
13946         fi
13947     done
13949 AC_SUBST(GIT_LINK_SRC)
13951 dnl branding
13952 dnl ===================================================================
13953 AC_MSG_CHECKING([for alternative branding images directory])
13954 # initialize mapped arrays
13955 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
13956 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
13958 if test -z "$with_branding" -o "$with_branding" = "no"; then
13959     AC_MSG_RESULT([none])
13960     DEFAULT_BRAND_IMAGES="$brand_files"
13961 else
13962     if ! test -d $with_branding ; then
13963         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
13964     else
13965         AC_MSG_RESULT([$with_branding])
13966         CUSTOM_BRAND_DIR="$with_branding"
13967         for lfile in $brand_files
13968         do
13969             if ! test -f $with_branding/$lfile ; then
13970                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
13971                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
13972             else
13973                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
13974             fi
13975         done
13976         check_for_progress="yes"
13977     fi
13979 AC_SUBST([BRAND_INTRO_IMAGES])
13980 AC_SUBST([CUSTOM_BRAND_DIR])
13981 AC_SUBST([CUSTOM_BRAND_IMAGES])
13982 AC_SUBST([DEFAULT_BRAND_IMAGES])
13985 AC_MSG_CHECKING([for 'intro' progress settings])
13986 PROGRESSBARCOLOR=
13987 PROGRESSSIZE=
13988 PROGRESSPOSITION=
13989 PROGRESSFRAMECOLOR=
13990 PROGRESSTEXTCOLOR=
13991 PROGRESSTEXTBASELINE=
13993 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
13994     source "$with_branding/progress.conf"
13995     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
13996 else
13997     AC_MSG_RESULT([none])
14000 AC_SUBST(PROGRESSBARCOLOR)
14001 AC_SUBST(PROGRESSSIZE)
14002 AC_SUBST(PROGRESSPOSITION)
14003 AC_SUBST(PROGRESSFRAMECOLOR)
14004 AC_SUBST(PROGRESSTEXTCOLOR)
14005 AC_SUBST(PROGRESSTEXTBASELINE)
14008 dnl ===================================================================
14009 dnl Custom build version
14010 dnl ===================================================================
14011 AC_MSG_CHECKING([for extra build ID])
14012 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
14013     EXTRA_BUILDID="$with_extra_buildid"
14015 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
14016 if test -n "$EXTRA_BUILDID" ; then
14017     AC_MSG_RESULT([$EXTRA_BUILDID])
14018 else
14019     AC_MSG_RESULT([not set])
14021 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
14023 OOO_VENDOR=
14024 AC_MSG_CHECKING([for vendor])
14025 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
14026     OOO_VENDOR="$USERNAME"
14028     if test -z "$OOO_VENDOR"; then
14029         OOO_VENDOR="$USER"
14030     fi
14032     if test -z "$OOO_VENDOR"; then
14033         OOO_VENDOR="`id -u -n`"
14034     fi
14036     AC_MSG_RESULT([not set, using $OOO_VENDOR])
14037 else
14038     OOO_VENDOR="$with_vendor"
14039     AC_MSG_RESULT([$OOO_VENDOR])
14041 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
14042 AC_SUBST(OOO_VENDOR)
14044 if test "$_os" = "Android" ; then
14045     ANDROID_PACKAGE_NAME=
14046     AC_MSG_CHECKING([for Android package name])
14047     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
14048         if test -n "$ENABLE_DEBUG"; then
14049             # Default to the package name that makes ndk-gdb happy.
14050             ANDROID_PACKAGE_NAME="org.libreoffice"
14051         else
14052             ANDROID_PACKAGE_NAME="org.example.libreoffice"
14053         fi
14055         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
14056     else
14057         ANDROID_PACKAGE_NAME="$with_android_package_name"
14058         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
14059     fi
14060     AC_SUBST(ANDROID_PACKAGE_NAME)
14063 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
14064 if test "$with_compat_oowrappers" = "yes"; then
14065     WITH_COMPAT_OOWRAPPERS=TRUE
14066     AC_MSG_RESULT(yes)
14067 else
14068     WITH_COMPAT_OOWRAPPERS=
14069     AC_MSG_RESULT(no)
14071 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
14073 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{print tolower($0)}'`
14074 AC_MSG_CHECKING([for install dirname])
14075 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
14076     INSTALLDIRNAME="$with_install_dirname"
14078 AC_MSG_RESULT([$INSTALLDIRNAME])
14079 AC_SUBST(INSTALLDIRNAME)
14081 AC_MSG_CHECKING([for prefix])
14082 test "x$prefix" = xNONE && prefix=$ac_default_prefix
14083 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
14084 PREFIXDIR="$prefix"
14085 AC_MSG_RESULT([$PREFIXDIR])
14086 AC_SUBST(PREFIXDIR)
14088 LIBDIR=[$(eval echo $(eval echo $libdir))]
14089 AC_SUBST(LIBDIR)
14091 DATADIR=[$(eval echo $(eval echo $datadir))]
14092 AC_SUBST(DATADIR)
14094 MANDIR=[$(eval echo $(eval echo $mandir))]
14095 AC_SUBST(MANDIR)
14097 DOCDIR=[$(eval echo $(eval echo $docdir))]
14098 AC_SUBST(DOCDIR)
14100 BINDIR=[$(eval echo $(eval echo $bindir))]
14101 AC_SUBST(BINDIR)
14103 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
14104 AC_SUBST(INSTALLDIR)
14106 TESTINSTALLDIR="${BUILDDIR}/test-install"
14107 AC_SUBST(TESTINSTALLDIR)
14110 # ===================================================================
14111 # OAuth2 id and secrets
14112 # ===================================================================
14114 AC_MSG_CHECKING([for Google Drive client id and secret])
14115 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
14116     AC_MSG_RESULT([not set])
14117     GDRIVE_CLIENT_ID="\"\""
14118     GDRIVE_CLIENT_SECRET="\"\""
14119 else
14120     AC_MSG_RESULT([set])
14121     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
14122     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
14124 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
14125 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
14127 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
14128 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
14129     AC_MSG_RESULT([not set])
14130     ALFRESCO_CLOUD_CLIENT_ID="\"\""
14131     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
14132 else
14133     AC_MSG_RESULT([set])
14134     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
14135     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
14137 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
14138 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
14140 AC_MSG_CHECKING([for OneDrive client id and secret])
14141 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
14142     AC_MSG_RESULT([not set])
14143     ONEDRIVE_CLIENT_ID="\"\""
14144     ONEDRIVE_CLIENT_SECRET="\"\""
14145 else
14146     AC_MSG_RESULT([set])
14147     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
14148     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
14150 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
14151 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
14154 dnl ===================================================================
14155 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
14156 dnl --enable-dependency-tracking configure option
14157 dnl ===================================================================
14158 AC_MSG_CHECKING([whether to enable dependency tracking])
14159 if test "$enable_dependency_tracking" = "no"; then
14160     nodep=TRUE
14161     AC_MSG_RESULT([no])
14162 else
14163     AC_MSG_RESULT([yes])
14165 AC_SUBST(nodep)
14167 dnl ===================================================================
14168 dnl Number of CPUs to use during the build
14169 dnl ===================================================================
14170 AC_MSG_CHECKING([for number of processors to use])
14171 # plain --with-parallelism is just the default
14172 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
14173     if test "$with_parallelism" = "no"; then
14174         PARALLELISM=0
14175     else
14176         PARALLELISM=$with_parallelism
14177     fi
14178 else
14179     if test "$enable_icecream" = "yes"; then
14180         PARALLELISM="40"
14181     else
14182         case `uname -s` in
14184         Darwin|FreeBSD|NetBSD|OpenBSD)
14185             PARALLELISM=`sysctl -n hw.ncpu`
14186             ;;
14188         Linux)
14189             PARALLELISM=`getconf _NPROCESSORS_ONLN`
14190         ;;
14191         # what else than above does profit here *and* has /proc?
14192         *)
14193             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
14194             ;;
14195         esac
14197         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
14198         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
14199     fi
14202 if test "$no_parallelism_make" = "YES" && test $PARALLELISM -gt 1; then
14203     if test -z "$with_parallelism"; then
14204             AC_MSG_WARN([gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this.])
14205             add_warning "gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this."
14206             PARALLELISM="1"
14207     else
14208         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."
14209     fi
14212 if test $PARALLELISM -eq 0; then
14213     AC_MSG_RESULT([explicit make -j option needed])
14214 else
14215     AC_MSG_RESULT([$PARALLELISM])
14217 AC_SUBST(PARALLELISM)
14219 IWYU_PATH="$with_iwyu"
14220 AC_SUBST(IWYU_PATH)
14221 if test ! -z "$IWYU_PATH"; then
14222     if test ! -f "$IWYU_PATH"; then
14223         AC_MSG_ERROR([cannot find include-what-you-use binary specified by --with-iwyu])
14224     fi
14228 # Set up ILIB for MSVC build
14230 ILIB1=
14231 if test "$build_os" = "cygwin"; then
14232     ILIB="."
14233     if test -n "$JAVA_HOME"; then
14234         ILIB="$ILIB;$JAVA_HOME/lib"
14235     fi
14236     ILIB1=-link
14237     ILIB="$ILIB;$COMPATH/lib/$WIN_HOST_ARCH"
14238     ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/$WIN_HOST_ARCH"
14239     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14240     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14241     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
14242         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14243         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14244     fi
14245     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
14246     ucrtlibpath_formatted=$formatted_path
14247     ILIB="$ILIB;$ucrtlibpath_formatted"
14248     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
14249     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
14250         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/lib"
14251     else
14252         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
14253     fi
14255     if test "$cross_compiling" != "yes"; then
14256         ILIB_FOR_BUILD="$ILIB"
14257     fi
14259 AC_SUBST(ILIB)
14260 AC_SUBST(ILIB_FOR_BUILD)
14262 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
14263 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
14264 dnl from consteval constructor initializing const variable",
14265 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
14266 dnl expression' with consteval constructor", <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
14267 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
14268 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'", or
14269 dnl <https://developercommunity.visualstudio.com/t/1581879> "Bogus error C7595 with consteval
14270 dnl constructor in ternary expression (/std:c++latest)":
14271 AC_LANG_PUSH([C++])
14272 save_CXX=$CXX
14273 if test "$COM" = MSC && test "$COM_IS_CLANG" != TRUE; then
14274     CXX="env LIB=$ILIB $CXX"
14276 save_CXXFLAGS=$CXXFLAGS
14277 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
14278 AC_RUN_IFELSE([AC_LANG_PROGRAM([
14279         struct S {
14280             consteval S() { i = 1; }
14281             int i = 0;
14282         };
14283         S const s;
14285         struct S1 { consteval S1(int) {} };
14286         struct S2 {
14287             S1 x;
14288             S2(): x(0) {}
14289         };
14291         struct S3 {
14292             consteval S3() {}
14293             union {
14294                 int a;
14295                 unsigned b = 0;
14296             };
14297         };
14298         void f() { S3(); }
14300         struct S4 { consteval S4() = default; };
14301         void f4(bool b) { b ? S4() : S4(); }
14302     ], [
14303         return (s.i == 1) ? 0 : 1;
14304     ])], [
14305         AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
14306         AC_MSG_RESULT([yes])
14307     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
14308 CXX=$save_CXX
14309 CXXFLAGS=$save_CXXFLAGS
14310 AC_LANG_POP([C++])
14312 # ===================================================================
14313 # Creating bigger shared library to link against
14314 # ===================================================================
14315 AC_MSG_CHECKING([whether to create huge library])
14316 MERGELIBS=
14318 if test $_os = iOS -o $_os = Android; then
14319     # Never any point in mergelibs for these as we build just static
14320     # libraries anyway...
14321     enable_mergelibs=no
14324 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
14325     if test $_os != Linux -a $_os != WINNT; then
14326         add_warning "--enable-mergelibs is not tested for this platform"
14327     fi
14328     MERGELIBS="TRUE"
14329     AC_MSG_RESULT([yes])
14330     AC_DEFINE(ENABLE_MERGELIBS)
14331 else
14332     AC_MSG_RESULT([no])
14334 AC_SUBST([MERGELIBS])
14336 dnl ===================================================================
14337 dnl icerun is a wrapper that stops us spawning tens of processes
14338 dnl locally - for tools that can't be executed on the compile cluster
14339 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
14340 dnl ===================================================================
14341 AC_MSG_CHECKING([whether to use icerun wrapper])
14342 ICECREAM_RUN=
14343 if test "$enable_icecream" = "yes" && which icerun >/dev/null 2>&1 ; then
14344     ICECREAM_RUN=icerun
14345     AC_MSG_RESULT([yes])
14346 else
14347     AC_MSG_RESULT([no])
14349 AC_SUBST(ICECREAM_RUN)
14351 dnl ===================================================================
14352 dnl Setup the ICECC_VERSION for the build the same way it was set for
14353 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
14354 dnl ===================================================================
14355 x_ICECC_VERSION=[\#]
14356 if test -n "$ICECC_VERSION" ; then
14357     x_ICECC_VERSION=
14359 AC_SUBST(x_ICECC_VERSION)
14360 AC_SUBST(ICECC_VERSION)
14362 dnl ===================================================================
14364 AC_MSG_CHECKING([MPL subset])
14365 MPL_SUBSET=
14367 if test "$enable_mpl_subset" = "yes"; then
14368     warn_report=false
14369     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
14370         warn_report=true
14371     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
14372         warn_report=true
14373     fi
14374     if test "$warn_report" = "true"; then
14375         AC_MSG_ERROR([need to --disable-report-builder - extended database report builder.])
14376     fi
14377     if test "x$enable_postgresql_sdbc" != "xno"; then
14378         AC_MSG_ERROR([need to --disable-postgresql-sdbc - the PostgreSQL database backend.])
14379     fi
14380     if test "$enable_lotuswordpro" = "yes"; then
14381         AC_MSG_ERROR([need to --disable-lotuswordpro - a Lotus Word Pro file format import filter.])
14382     fi
14383     if test "$WITH_WEBDAV" = "neon"; then
14384         AC_MSG_ERROR([need --with-webdav=serf or --without-webdav - webdav support.])
14385     fi
14386     if test -n "$ENABLE_POPPLER"; then
14387         if test "x$SYSTEM_POPPLER" = "x"; then
14388             AC_MSG_ERROR([need to disable PDF import via poppler or use system library])
14389         fi
14390     fi
14391     # cf. m4/libo_check_extension.m4
14392     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
14393         AC_MSG_ERROR([need to disable extra extensions '$WITH_EXTRA_EXTENSIONS'])
14394     fi
14395     for theme in $WITH_THEMES; do
14396         case $theme in
14397         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
14398             AC_MSG_ERROR([need to disable icon themes from '$WITH_THEMES': $theme present, use --with-theme=colibre]) ;;
14399         *) : ;;
14400         esac
14401     done
14403     ENABLE_OPENGL_TRANSITIONS=
14405     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
14406         AC_MSG_ERROR([need to --disable-lpsolve - calc linear programming solver.])
14407     fi
14409     MPL_SUBSET="TRUE"
14410     AC_DEFINE(MPL_HAVE_SUBSET)
14411     AC_MSG_RESULT([only])
14412 else
14413     AC_MSG_RESULT([no restrictions])
14415 AC_SUBST(MPL_SUBSET)
14417 dnl ===================================================================
14419 AC_MSG_CHECKING([formula logger])
14420 ENABLE_FORMULA_LOGGER=
14422 if test "x$enable_formula_logger" = "xyes"; then
14423     AC_MSG_RESULT([yes])
14424     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14425     ENABLE_FORMULA_LOGGER=TRUE
14426 elif test -n "$ENABLE_DBGUTIL" ; then
14427     AC_MSG_RESULT([yes])
14428     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14429     ENABLE_FORMULA_LOGGER=TRUE
14430 else
14431     AC_MSG_RESULT([no])
14434 AC_SUBST(ENABLE_FORMULA_LOGGER)
14436 dnl ===================================================================
14437 dnl Checking for active Antivirus software.
14438 dnl ===================================================================
14440 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
14441     AC_MSG_CHECKING([for active Antivirus software])
14442     ANTIVIRUS_LIST=`cscript.exe //Nologo $SRC_ROOT/antivirusDetection.vbs`
14443     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
14444         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
14445             AC_MSG_RESULT([found])
14446             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
14447             echo $EICAR_STRING > $SRC_ROOT/eicar
14448             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
14449             rm $SRC_ROOT/eicar
14450             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14451                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14452             fi
14453             echo $EICAR_STRING > $BUILDDIR/eicar
14454             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
14455             rm $BUILDDIR/eicar
14456             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14457                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14458             fi
14459             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"
14460         else
14461             AC_MSG_RESULT([not found])
14462         fi
14463     else
14464         AC_MSG_RESULT([n/a])
14465     fi
14468 dnl ===================================================================
14469 dnl Setting up the environment.
14470 dnl ===================================================================
14471 AC_MSG_NOTICE([setting up the build environment variables...])
14473 AC_SUBST(COMPATH)
14475 if test "$build_os" = "cygwin"; then
14476     if test -d "$COMPATH/atlmfc/lib/spectre"; then
14477         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
14478         ATL_INCLUDE="$COMPATH/atlmfc/include"
14479     elif test -d "$COMPATH/atlmfc/lib"; then
14480         ATL_LIB="$COMPATH/atlmfc/lib"
14481         ATL_INCLUDE="$COMPATH/atlmfc/include"
14482     else
14483         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
14484         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
14485     fi
14486     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
14487     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
14488     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
14490     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
14491     PathFormat "/usr/bin/find.exe"
14492     FIND="$formatted_path"
14493     PathFormat "/usr/bin/sort.exe"
14494     SORT="$formatted_path"
14495     PathFormat "/usr/bin/grep.exe"
14496     WIN_GREP="$formatted_path"
14497     PathFormat "/usr/bin/ls.exe"
14498     WIN_LS="$formatted_path"
14499     PathFormat "/usr/bin/touch.exe"
14500     WIN_TOUCH="$formatted_path"
14501 else
14502     FIND=find
14503     SORT=sort
14506 AC_SUBST(ATL_INCLUDE)
14507 AC_SUBST(ATL_LIB)
14508 AC_SUBST(FIND)
14509 AC_SUBST(SORT)
14510 AC_SUBST(WIN_GREP)
14511 AC_SUBST(WIN_LS)
14512 AC_SUBST(WIN_TOUCH)
14514 AC_SUBST(BUILD_TYPE)
14516 AC_SUBST(SOLARINC)
14518 PathFormat "$PERL"
14519 PERL="$formatted_path"
14520 AC_SUBST(PERL)
14522 if test -n "$TMPDIR"; then
14523     TEMP_DIRECTORY="$TMPDIR"
14524 else
14525     TEMP_DIRECTORY="/tmp"
14527 if test "$build_os" = "cygwin"; then
14528     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
14530 AC_SUBST(TEMP_DIRECTORY)
14532 # setup the PATH for the environment
14533 if test -n "$LO_PATH_FOR_BUILD"; then
14534     LO_PATH="$LO_PATH_FOR_BUILD"
14535     case "$host_os" in
14536     cygwin*|wsl*)
14537         pathmunge "$MSVC_HOST_PATH" "before"
14538         ;;
14539     esac
14540 else
14541     LO_PATH="$PATH"
14543     case "$host_os" in
14545     aix*|dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
14546         if test "$ENABLE_JAVA" != ""; then
14547             pathmunge "$JAVA_HOME/bin" "after"
14548         fi
14549         ;;
14551     cygwin*|wsl*)
14552         # Win32 make needs native paths
14553         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
14554             LO_PATH=`cygpath -p -m "$PATH"`
14555         fi
14556         if test "$WIN_BUILD_ARCH" = "x64"; then
14557             # needed for msi packaging
14558             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
14559         fi
14560         # .NET 4.6 and higher don't have bin directory
14561         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
14562             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
14563         fi
14564         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
14565         pathmunge "$CSC_PATH" "before"
14566         pathmunge "$MIDL_PATH" "before"
14567         pathmunge "$AL_PATH" "before"
14568         pathmunge "$MSVC_MULTI_PATH" "before"
14569         pathmunge "$MSVC_BUILD_PATH" "before"
14570         if test -n "$MSBUILD_PATH" ; then
14571             pathmunge "$MSBUILD_PATH" "before"
14572         fi
14573         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
14574         if test "$ENABLE_JAVA" != ""; then
14575             if test -d "$JAVA_HOME/jre/bin/client"; then
14576                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
14577             fi
14578             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
14579                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
14580             fi
14581             pathmunge "$JAVA_HOME/bin" "before"
14582         fi
14583         pathmunge "$MSVC_HOST_PATH" "before"
14584         ;;
14586     solaris*)
14587         pathmunge "/usr/css/bin" "before"
14588         if test "$ENABLE_JAVA" != ""; then
14589             pathmunge "$JAVA_HOME/bin" "after"
14590         fi
14591         ;;
14592     esac
14595 AC_SUBST(LO_PATH)
14597 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
14598 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
14599     x_LO_ELFCHECK_ALLOWLIST=
14600 else
14601     x_LO_ELFCHECK_ALLOWLIST=[\#]
14603 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
14604 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
14606 libo_FUZZ_SUMMARY
14608 # Generate a configuration sha256 we can use for deps
14609 if test -f config_host.mk; then
14610     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
14612 if test -f config_host_lang.mk; then
14613     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
14616 CFLAGS=$my_original_CFLAGS
14617 CXXFLAGS=$my_original_CXXFLAGS
14618 CPPFLAGS=$my_original_CPPFLAGS
14620 AC_CONFIG_LINKS([include:include])
14622 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
14623 # BUILD platform configuration] - otherwise breaks cross building
14624 AC_CONFIG_FILES([config_host.mk
14625                  config_host_lang.mk
14626                  Makefile
14627                  bin/bffvalidator.sh
14628                  bin/odfvalidator.sh
14629                  bin/officeotron.sh
14630                  hardened_runtime.xcent
14631                  instsetoo_native/util/openoffice.lst
14632                  sysui/desktop/macosx/Info.plist
14633                  vs-code-template.code-workspace:.vscode/vs-code-template.code-workspace.in])
14634 AC_CONFIG_HEADERS([config_host/config_buildid.h])
14635 AC_CONFIG_HEADERS([config_host/config_box2d.h])
14636 AC_CONFIG_HEADERS([config_host/config_clang.h])
14637 AC_CONFIG_HEADERS([config_host/config_crypto.h])
14638 AC_CONFIG_HEADERS([config_host/config_dconf.h])
14639 AC_CONFIG_HEADERS([config_host/config_eot.h])
14640 AC_CONFIG_HEADERS([config_host/config_extensions.h])
14641 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
14642 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
14643 AC_CONFIG_HEADERS([config_host/config_dbus.h])
14644 AC_CONFIG_HEADERS([config_host/config_features.h])
14645 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
14646 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
14647 AC_CONFIG_HEADERS([config_host/config_firebird.h])
14648 AC_CONFIG_HEADERS([config_host/config_folders.h])
14649 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
14650 AC_CONFIG_HEADERS([config_host/config_gio.h])
14651 AC_CONFIG_HEADERS([config_host/config_global.h])
14652 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
14653 AC_CONFIG_HEADERS([config_host/config_java.h])
14654 AC_CONFIG_HEADERS([config_host/config_langs.h])
14655 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
14656 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
14657 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
14658 AC_CONFIG_HEADERS([config_host/config_locales.h])
14659 AC_CONFIG_HEADERS([config_host/config_mpl.h])
14660 AC_CONFIG_HEADERS([config_host/config_oox.h])
14661 AC_CONFIG_HEADERS([config_host/config_options.h])
14662 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
14663 AC_CONFIG_HEADERS([config_host/config_zxing.h])
14664 AC_CONFIG_HEADERS([config_host/config_skia.h])
14665 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
14666 AC_CONFIG_HEADERS([config_host/config_vendor.h])
14667 AC_CONFIG_HEADERS([config_host/config_vcl.h])
14668 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
14669 AC_CONFIG_HEADERS([config_host/config_version.h])
14670 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
14671 AC_CONFIG_HEADERS([config_host/config_poppler.h])
14672 AC_CONFIG_HEADERS([config_host/config_python.h])
14673 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
14674 AC_OUTPUT
14676 if test "$CROSS_COMPILING" = TRUE; then
14677     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
14680 # touch the config timestamp file
14681 if test ! -f config_host.mk.stamp; then
14682     echo > config_host.mk.stamp
14683 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
14684     echo "Host Configuration unchanged - avoiding scp2 stamp update"
14685 else
14686     echo > config_host.mk.stamp
14689 # touch the config lang timestamp file
14690 if test ! -f config_host_lang.mk.stamp; then
14691     echo > config_host_lang.mk.stamp
14692 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
14693     echo "Language Configuration unchanged - avoiding scp2 stamp update"
14694 else
14695     echo > config_host_lang.mk.stamp
14699 if test \( "$STALE_MAKE" = "TRUE" -o "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE" \) \
14700         -a "$build_os" = "cygwin"; then
14702 cat << _EOS
14703 ****************************************************************************
14704 WARNING:
14705 Your make version is known to be horribly slow, and hard to debug
14706 problems with. To get a reasonably functional make please do:
14708 to install a pre-compiled binary make for Win32
14710  mkdir -p /opt/lo/bin
14711  cd /opt/lo/bin
14712  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
14713  cp make-4.2.1-msvc.exe make
14714  chmod +x make
14716 to install from source:
14717 place yourself in a working directory of you choice.
14719  git clone git://git.savannah.gnu.org/make.git
14721  [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"]
14722  set PATH=%PATH%;C:\Cygwin\bin
14723  [or Cygwin64, if that is what you have]
14724  cd path-to-make-repo-you-cloned-above
14725  build_w32.bat --without-guile
14727 should result in a WinRel/gnumake.exe.
14728 Copy it to the Cygwin /opt/lo/bin directory as make.exe
14730 Then re-run autogen.sh
14732 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
14733 Alternatively, you can install the 'new' make where ever you want and make sure that `which make` finds it.
14735 _EOS
14736 if test "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE"; then
14737     AC_MSG_ERROR([no file function found; the build will fail without it; use GNU make 4.0 or later])
14742 cat << _EOF
14743 ****************************************************************************
14745 To build, run:
14746 $GNUMAKE
14748 To view some help, run:
14749 $GNUMAKE help
14751 _EOF
14753 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
14754     cat << _EOF
14755 After the build has finished successfully, you can immediately run what you built using the command:
14756 _EOF
14758     if test $_os = Darwin; then
14759         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
14760     else
14761         echo instdir/program/soffice
14762     fi
14763     cat << _EOF
14765 If you want to run the smoketest, run:
14766 $GNUMAKE check
14768 _EOF
14771 if test -s "$WARNINGS_FILE_FOR_BUILD"; then
14772     echo "BUILD / cross-toolset config, repeated ($WARNINGS_FILE_FOR_BUILD)"
14773     cat "$WARNINGS_FILE_FOR_BUILD"
14774     echo
14777 if test -s "$WARNINGS_FILE"; then
14778     echo "HOST config ($WARNINGS_FILE)"
14779     cat "$WARNINGS_FILE"
14782 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: