Update git submodules
[LibreOffice.git] / configure.ac
blob1c54aeac5d3bac6065c84cf4184f7f7a2f8d26ea
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.2.0.0.alpha0+],[],[],[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 rm -f warn
206 have_WARNINGS="no"
207 add_warning()
209     if test "$have_WARNINGS" = "no"; then
210         echo "*************************************" > warn
211         have_WARNINGS="yes"
212         if which tput >/dev/null && test "`tput colors 2>/dev/null || echo 0`" -ge 8; then
213             dnl <esc> as actual byte (U+1b), [ escaped using quadrigraph @<:@
214             COLORWARN='*\e@<:@1;33;40m WARNING \e@<:@0m:'
215         else
216             COLORWARN="* WARNING :"
217         fi
218     fi
219     echo "$COLORWARN $@" >> warn
222 dnl Some Mac User have the bad habit of letting a lot of crap
223 dnl accumulate in their PATH and even adding stuff in /usr/local/bin
224 dnl that confuse the build.
225 dnl For the ones that use LODE, let's be nice and protect them
226 dnl from themselves
228 mac_sanitize_path()
230     mac_path="$LODE_HOME/opt/bin:/usr/bin:/bin:/usr/sbin:/sbin"
231 dnl a common but nevertheless necessary thing that may be in a fancy
232 dnl path location is git, so make sure we have it
233     mac_git_path=`which git 2>/dev/null`
234     if test -n "$mac_git_path" -a -x "$mac_git_path" -a "$mac_git_path" != "/usr/bin/git" ; then
235         mac_path="$mac_path:`dirname $mac_git_path`"
236     fi
237 dnl a not so common but nevertheless quite helpful thing that may be in a fancy
238 dnl path location is gpg, so make sure we find it
239     mac_gpg_path=`which gpg 2>/dev/null`
240     if test -n "$mac_gpg_path" -a -x "$mac_gpg_path" -a "$mac_gpg_path" != "/usr/bin/gpg" ; then
241         mac_path="$mac_path:`dirname $mac_gpg_path`"
242     fi
243     PATH="$mac_path"
244     unset mac_path
245     unset mac_git_path
246     unset mac_gpg_path
249 echo "********************************************************************"
250 echo "*"
251 echo "*   Running ${PACKAGE_NAME} build configuration."
252 echo "*"
253 echo "********************************************************************"
254 echo ""
256 dnl ===================================================================
257 dnl checks build and host OSes
258 dnl do this before argument processing to allow for platform dependent defaults
259 dnl ===================================================================
261 # Check for WSL (version 2, at least). But if --host is explicitly specified (to really do build for
262 # Linux on WSL) trust that.
263 if test -z "$host" -a -z "$build" -a "`wslsys -v 2>/dev/null`" != ""; then
264     ac_cv_host="x86_64-pc-wsl"
265     ac_cv_host_cpu="x86_64"
266     ac_cv_host_os="wsl"
267     ac_cv_build="$ac_cv_host"
268     ac_cv_build_cpu="$ac_cv_host_cpu"
269     ac_cv_build_os="$ac_cv_host_os"
271     # Emulation of Cygwin's cygpath command for WSL.
272     cygpath()
273     {
274         if test -n "$UNITTEST_WSL_CYGPATH"; then
275             echo -n cygpath "$@" "==> "
276         fi
278         # Cygwin's real cygpath has a plethora of options but we use only a few here.
279         local args="$@"
280         local opt
281         local opt_d opt_m opt_u opt_w opt_l opt_s opt_p
282         OPTIND=1
284         while getopts dmuwlsp opt; do
285             case "$opt" in
286                 \?)
287                     AC_MSG_ERROR([Unimplemented cygpath emulation option in invocation: cygpath $args])
288                     ;;
289                 ?)
290                     eval opt_$opt=yes
291                     ;;
292             esac
293         done
295         shift $((OPTIND-1))
297         if test $# -ne 1; then
298             AC_MSG_ERROR([Invalid cygpath emulation invocation: Pathname missing]);
299         fi
301         local input="$1"
303         local result
305         if test -n "$opt_d" -o -n "$opt_m" -o -n "$opt_w"; then
306             # Print Windows path, possibly in 8.3 form (-d) or with forward slashes (-m)
308             if test -n "$opt_u"; then
309                 AC_MSG_ERROR([Invalid cygpath invocation: Both Windows and Unix path output requested])
310             fi
312             case "$input" in
313                 /mnt/*)
314                     # A Windows file in WSL format
315                     input=$(wslpath -w "$input")
316                     ;;
317                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
318                     # Already in Windows format
319                     ;;
320                 /*)
321                     input=$(wslpath -w "$input")
322                     ;;
323                 *)
324                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
325                     ;;
326             esac
327             if test -n "$opt_d" -o -n "$opt_s"; then
328                 input=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --8.3 "$input")
329             fi
330             if test -n "$opt_m"; then
331                 input="${input//\\//}"
332             fi
333             echo "$input"
334         else
335             # Print Unix path
337             case "$input" in
338                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
339                     wslpath -u "$input"
340                     ;;
341                 /)
342                     echo "$input"
343                     ;;
344                 *)
345                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
346                     ;;
347             esac
348         fi
349     }
351     if test -n "$UNITTEST_WSL_CYGPATH"; then
352         BUILDDIR=.
354         # Nothing special with these file names, just arbitrary ones picked to test with
355         cygpath -d /usr/lib64/ld-linux-x86-64.so.2
356         cygpath -w /usr/lib64/ld-linux-x86-64.so.2
357         cygpath -m /usr/lib64/ld-linux-x86-64.so.2
358         cygpath -m -s /usr/lib64/ld-linux-x86-64.so.2
359         # At least on my machine for instance this file does have an 8.3 name
360         cygpath -d /mnt/c/windows/WindowsUpdate.log
361         # But for instance this one doesn't
362         cygpath -w /mnt/c/windows/system32/AboutSettingsHandlers.dll
363         cygpath -ws /mnt/c/windows/WindowsUpdate.log
364         cygpath -m /mnt/c/windows/system32/AboutSettingsHandlers.dll
365         cygpath -ms /mnt/c/windows/WindowsUpdate.log
367         cygpath -u 'c:\windows\system32\AboutSettingsHandlers.dll'
368         cygpath -u 'c:/windows/system32/AboutSettingsHandlers.dll'
370         exit 0
371     fi
374 AC_CANONICAL_HOST
375 AC_CANONICAL_BUILD
377 if test -n "$UNITTEST_WSL_PATHFORMAT"; then
378     BUILDDIR=.
379     GREP=grep
381     # Use of PathFormat must be after AC_CANONICAL_BUILD above
382     PathFormat /
383     printf "$formatted_path , $formatted_path_unix\n"
385     PathFormat $PWD
386     printf "$formatted_path , $formatted_path_unix\n"
388     PathFormat "$PROGRAMFILESX86"
389     printf "$formatted_path , $formatted_path_unix\n"
391     exit 0
394 AC_MSG_CHECKING([for product name])
395 PRODUCTNAME="AC_PACKAGE_NAME"
396 if test -n "$with_product_name" -a "$with_product_name" != no; then
397     PRODUCTNAME="$with_product_name"
399 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
400     PRODUCTNAME="${PRODUCTNAME}Dev"
402 AC_MSG_RESULT([$PRODUCTNAME])
403 AC_SUBST(PRODUCTNAME)
404 PRODUCTNAME_WITHOUT_SPACES=$(printf %s "$PRODUCTNAME" | sed 's/ //g')
405 AC_SUBST(PRODUCTNAME_WITHOUT_SPACES)
407 dnl ===================================================================
408 dnl Our version is defined by the AC_INIT() at the top of this script.
409 dnl ===================================================================
411 AC_MSG_CHECKING([for package version])
412 if test -n "$with_package_version" -a "$with_package_version" != no; then
413     PACKAGE_VERSION="$with_package_version"
415 AC_MSG_RESULT([$PACKAGE_VERSION])
417 set `echo "$PACKAGE_VERSION" | sed "s/\./ /g"`
419 LIBO_VERSION_MAJOR=$1
420 LIBO_VERSION_MINOR=$2
421 LIBO_VERSION_MICRO=$3
422 LIBO_VERSION_PATCH=$4
424 LIBO_VERSION_SUFFIX=$5
426 # Split out LIBO_VERSION_SUFFIX_SUFFIX... horrible crack. But apparently wanted separately in
427 # openoffice.lst as ABOUTBOXPRODUCTVERSIONSUFFIX. Note that the double brackets are for m4's sake,
428 # they get undoubled before actually passed to sed.
429 LIBO_VERSION_SUFFIX_SUFFIX=`echo "$LIBO_VERSION_SUFFIX" | sed -e 's/.*[[a-zA-Z0-9]]\([[^a-zA-Z0-9]]*\)$/\1/'`
430 test -n "$LIBO_VERSION_SUFFIX_SUFFIX" && LIBO_VERSION_SUFFIX="${LIBO_VERSION_SUFFIX%${LIBO_VERSION_SUFFIX_SUFFIX}}"
431 # LIBO_VERSION_SUFFIX, if non-empty, should include the period separator
432 test -n "$LIBO_VERSION_SUFFIX" && LIBO_VERSION_SUFFIX=".$LIBO_VERSION_SUFFIX"
434 # The value for key CFBundleVersion in the Info.plist file must be a period-separated list of at most
435 # three non-negative integers. Please find more information about CFBundleVersion at
436 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleversion
438 # The value for key CFBundleShortVersionString in the Info.plist file must be a period-separated list
439 # of at most three non-negative integers. Please find more information about
440 # CFBundleShortVersionString at
441 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring
443 # But that is enforced only in the App Store, and we apparently want to break the rules otherwise.
445 if test "$enable_macosx_sandbox" = yes; then
446     MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.`expr $LIBO_VERSION_MICRO '*' 1000 + $LIBO_VERSION_PATCH`
447     MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION
448 else
449     MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.$LIBO_VERSION_MICRO.$LIBO_VERSION_PATCH
450     MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION$LIBO_VERSION_SUFFIX
453 AC_SUBST(LIBO_VERSION_MAJOR)
454 AC_SUBST(LIBO_VERSION_MINOR)
455 AC_SUBST(LIBO_VERSION_MICRO)
456 AC_SUBST(LIBO_VERSION_PATCH)
457 AC_SUBST(LIBO_VERSION_SUFFIX)
458 AC_SUBST(LIBO_VERSION_SUFFIX_SUFFIX)
459 AC_SUBST(MACOSX_BUNDLE_SHORTVERSION)
460 AC_SUBST(MACOSX_BUNDLE_VERSION)
462 AC_DEFINE_UNQUOTED(LIBO_VERSION_MAJOR,$LIBO_VERSION_MAJOR)
463 AC_DEFINE_UNQUOTED(LIBO_VERSION_MINOR,$LIBO_VERSION_MINOR)
464 AC_DEFINE_UNQUOTED(LIBO_VERSION_MICRO,$LIBO_VERSION_MICRO)
465 AC_DEFINE_UNQUOTED(LIBO_VERSION_PATCH,$LIBO_VERSION_PATCH)
467 LIBO_THIS_YEAR=`date +%Y`
468 AC_DEFINE_UNQUOTED(LIBO_THIS_YEAR,$LIBO_THIS_YEAR)
470 dnl ===================================================================
471 dnl Product version
472 dnl ===================================================================
473 AC_MSG_CHECKING([for product version])
474 PRODUCTVERSION="$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR"
475 AC_MSG_RESULT([$PRODUCTVERSION])
476 AC_SUBST(PRODUCTVERSION)
478 AC_PROG_EGREP
479 # AC_PROG_EGREP doesn't set GREP on all systems as well
480 AC_PATH_PROG(GREP, grep)
482 BUILDDIR=`pwd`
483 cd $srcdir
484 SRC_ROOT=`pwd`
485 cd $BUILDDIR
486 x_Cygwin=[\#]
488 dnl ======================================
489 dnl Required GObject introspection version
490 dnl ======================================
491 INTROSPECTION_REQUIRED_VERSION=1.32.0
493 dnl ===================================================================
494 dnl Search all the common names for GNU Make
495 dnl ===================================================================
496 AC_MSG_CHECKING([for GNU Make])
498 # try to use our own make if it is available and GNUMAKE was not already defined
499 if test -z "$GNUMAKE"; then
500     if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/make" ; then
501         GNUMAKE="$LODE_HOME/opt/bin/make"
502     elif test -x "/opt/lo/bin/make"; then
503         GNUMAKE="/opt/lo/bin/make"
504     fi
507 GNUMAKE_WIN_NATIVE=
508 for a in "$MAKE" "$GNUMAKE" make gmake gnumake; do
509     if test -n "$a"; then
510         $a --version 2> /dev/null | grep GNU  2>&1 > /dev/null
511         if test $? -eq 0;  then
512             if test "$build_os" = "cygwin"; then
513                 if test -n "$($a -v | grep 'Built for Windows')" ; then
514                     GNUMAKE="$(cygpath -m "$(which "$(cygpath -u $a)")")"
515                     GNUMAKE_WIN_NATIVE="TRUE"
516                 else
517                     GNUMAKE=`which $a`
518                 fi
519             else
520                 GNUMAKE=`which $a`
521             fi
522             break
523         fi
524     fi
525 done
526 AC_MSG_RESULT($GNUMAKE)
527 if test -z "$GNUMAKE"; then
528     AC_MSG_ERROR([not found. install GNU Make.])
529 else
530     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
531         AC_MSG_NOTICE([Using a native Win32 GNU Make version.])
532     fi
535 win_short_path_for_make()
537     local short_path="$1"
538     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
539         cygpath -sm "$short_path"
540     else
541         cygpath -u "$(cygpath -d "$short_path")"
542     fi
546 if test "$build_os" = "cygwin"; then
547     PathFormat "$SRC_ROOT"
548     SRC_ROOT="$formatted_path"
549     PathFormat "$BUILDDIR"
550     BUILDDIR="$formatted_path"
551     x_Cygwin=
552     AC_MSG_CHECKING(for explicit COMSPEC)
553     if test -z "$COMSPEC"; then
554         AC_MSG_ERROR([COMSPEC not set in environment, please set it and rerun])
555     else
556         AC_MSG_RESULT([found: $COMSPEC])
557     fi
560 AC_SUBST(SRC_ROOT)
561 AC_SUBST(BUILDDIR)
562 AC_SUBST(x_Cygwin)
563 AC_DEFINE_UNQUOTED(SRCDIR,"$SRC_ROOT")
564 AC_DEFINE_UNQUOTED(SRC_ROOT,"$SRC_ROOT")
565 AC_DEFINE_UNQUOTED(BUILDDIR,"$BUILDDIR")
567 if test "z$EUID" = "z0" -a "`uname -o 2>/dev/null`" = "Cygwin"; then
568     AC_MSG_ERROR([You must build LibreOffice as a normal user - not using an administrative account])
571 # need sed in os checks...
572 AC_PATH_PROGS(SED, sed)
573 if test -z "$SED"; then
574     AC_MSG_ERROR([install sed to run this script])
577 # Set the ENABLE_LTO variable
578 # ===================================================================
579 AC_MSG_CHECKING([whether to use link-time optimization])
580 if test -n "$enable_lto" -a "$enable_lto" != "no"; then
581     ENABLE_LTO="TRUE"
582     AC_MSG_RESULT([yes])
583 else
584     ENABLE_LTO=""
585     AC_MSG_RESULT([no])
587 AC_SUBST(ENABLE_LTO)
589 AC_ARG_ENABLE(fuzz-options,
590     AS_HELP_STRING([--enable-fuzz-options],
591         [Randomly enable or disable each of those configurable options
592          that are supposed to be freely selectable without interdependencies,
593          or where bad interaction from interdependencies is automatically avoided.])
596 dnl ===================================================================
597 dnl When building for Android, --with-android-ndk,
598 dnl --with-android-ndk-toolchain-version and --with-android-sdk are
599 dnl mandatory
600 dnl ===================================================================
602 AC_ARG_WITH(android-ndk,
603     AS_HELP_STRING([--with-android-ndk],
604         [Specify location of the Android Native Development Kit. Mandatory when building for Android.]),
607 AC_ARG_WITH(android-ndk-toolchain-version,
608     AS_HELP_STRING([--with-android-ndk-toolchain-version],
609         [Specify which toolchain version to use, of those present in the
610         Android NDK you are using. The default (and only supported version currently) is "clang5.0"]),,
611         with_android_ndk_toolchain_version=clang5.0)
613 AC_ARG_WITH(android-sdk,
614     AS_HELP_STRING([--with-android-sdk],
615         [Specify location of the Android SDK. Mandatory when building for Android.]),
618 AC_ARG_WITH(android-api-level,
619     AS_HELP_STRING([--with-android-api-level],
620         [Specify the API level when building for Android. Defaults to 16 for ARM and x86 and to 21 for ARM64 and x86-64]),
623 ANDROID_NDK_HOME=
624 if test -z "$with_android_ndk" -a -e "$SRC_ROOT/external/android-ndk" -a "$build" != "$host"; then
625     with_android_ndk="$SRC_ROOT/external/android-ndk"
627 if test -n "$with_android_ndk"; then
628     eval ANDROID_NDK_HOME=$with_android_ndk
630     # Set up a lot of pre-canned defaults
632     if test ! -f $ANDROID_NDK_HOME/RELEASE.TXT; then
633         if test ! -f $ANDROID_NDK_HOME/source.properties; then
634             AC_MSG_ERROR([Unrecognized Android NDK. Missing RELEASE.TXT or source.properties file in $ANDROID_NDK_HOME.])
635         fi
636         ANDROID_NDK_VERSION=`sed -n -e 's/Pkg.Revision = //p' $ANDROID_NDK_HOME/source.properties`
637     else
638         ANDROID_NDK_VERSION=`cut -f1 -d' ' <$ANDROID_NDK_HOME/RELEASE.TXT`
639     fi
640     if test -z "$ANDROID_NDK_VERSION";  then
641         AC_MSG_ERROR([Failed to determine Android NDK version. Please check your installation.])
642     fi
643     case $ANDROID_NDK_VERSION in
644     r9*|r10*)
645         AC_MSG_ERROR([Building for Android is only supported with NDK versions above 16.x*])
646         ;;
647     11.1.*|12.1.*|13.1.*|14.1.*)
648         AC_MSG_ERROR([Building for Android is only supported with NDK versions above 16.x.*])
649         ;;
650     16.*|17.*|18.*|19.*|20.*)
651         ;;
652     *)
653         AC_MSG_WARN([Untested Android NDK version $ANDROID_NDK_VERSION, only versions 16.* til 20.* have been used successfully. Proceed at your own risk.])
654         add_warning "Untested Android NDK version $ANDROID_NDK_VERSION, only versions 16.* til 20.* have been used successfully. Proceed at your own risk."
655         ;;
656     esac
658     ANDROID_API_LEVEL=16
659     if test -n "$with_android_api_level" ; then
660         ANDROID_API_LEVEL="$with_android_api_level"
661     fi
663     android_cpu=$host_cpu
664     if test $host_cpu = arm; then
665         android_platform_prefix=arm-linux-androideabi
666         android_gnu_prefix=$android_platform_prefix
667         LLVM_TRIPLE=armv7a-linux-androideabi
668         ANDROID_APP_ABI=armeabi-v7a
669         ANDROIDCFLAGS="-mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=neon -Wl,--fix-cortex-a8"
670     elif test $host_cpu = aarch64; then
671         android_platform_prefix=aarch64-linux-android
672         android_gnu_prefix=$android_platform_prefix
673         LLVM_TRIPLE=$android_platform_prefix
674         # minimum android version that supports aarch64
675         if test "$ANDROID_API_LEVEL" -lt "21" ; then
676             ANDROID_API_LEVEL=21
677         fi
678         ANDROID_APP_ABI=arm64-v8a
679     elif test $host_cpu = x86_64; then
680         android_platform_prefix=x86_64-linux-android
681         android_gnu_prefix=$android_platform_prefix
682         LLVM_TRIPLE=$android_platform_prefix
683         # minimum android version that supports x86_64
684         ANDROID_API_LEVEL=21
685         ANDROID_APP_ABI=x86_64
686     else
687         # host_cpu is something like "i386" or "i686" I guess, NDK uses
688         # "x86" in some contexts
689         android_cpu=x86
690         android_platform_prefix=$android_cpu
691         android_gnu_prefix=i686-linux-android
692         LLVM_TRIPLE=$android_gnu_prefix
693         ANDROID_APP_ABI=x86
694     fi
696     case "$with_android_ndk_toolchain_version" in
697     clang5.0)
698         ANDROID_GCC_TOOLCHAIN_VERSION=4.9
699         ;;
700     *)
701         AC_MSG_ERROR([Unrecognized value for the --with-android-ndk-toolchain-version option. Building for Android is only supported with Clang 5.*])
702     esac
704     AC_MSG_NOTICE([using the Android API level... $ANDROID_API_LEVEL])
706     # NDK 15 or later toolchain is 64bit-only, except for Windows that we don't support. Using a 64-bit
707     # linker is required if you compile large parts of the code with -g. A 32-bit linker just won't
708     # manage to link the (app-specific) single huge .so that is built for the app in
709     # android/source/ if there is debug information in a significant part of the object files.
710     # (A 64-bit ld.gold grows too much over 10 gigabytes of virtual space when linking such a .so if
711     # all objects have been built with debug information.)
712     case $build_os in
713     linux-gnu*)
714         android_HOST_TAG=linux-x86_64
715         ;;
716     darwin*)
717         android_HOST_TAG=darwin-x86_64
718         ;;
719     *)
720         AC_MSG_ERROR([We only support building for Android from Linux or macOS])
721         # ndk would also support windows and windows-x86_64
722         ;;
723     esac
724     android_TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/$android_HOST_TAG
725     ANDROID_COMPILER_BIN=$android_TOOLCHAIN/bin
726     dnl TODO: NSS build uses it...
727     ANDROID_BINUTILS_PREBUILT_ROOT=$ANDROID_NDK_HOME/toolchains/$android_platform_prefix-$ANDROID_GCC_TOOLCHAIN_VERSION/prebuilt/$android_HOST_TAG
728     AC_SUBST(ANDROID_BINUTILS_PREBUILT_ROOT)
730     test -z "$AR" && AR=$ANDROID_COMPILER_BIN/$android_gnu_prefix-ar
731     test -z "$NM" && NM=$ANDROID_COMPILER_BIN/$android_gnu_prefix-nm
732     test -z "$OBJDUMP" && OBJDUMP=$ANDROID_COMPILER_BIN/$android_gnu_prefix-objdump
733     test -z "$RANLIB" && RANLIB=$ANDROID_COMPILER_BIN/$android_gnu_prefix-ranlib
734     test -z "$STRIP" && STRIP=$ANDROID_COMPILER_BIN/$android_gnu_prefix-strip
736     ANDROIDCFLAGS="$ANDROIDCFLAGS -target ${LLVM_TRIPLE}${ANDROID_API_LEVEL}"
737     ANDROIDCFLAGS="$ANDROIDCFLAGS -no-canonical-prefixes -ffunction-sections -fdata-sections -Qunused-arguments"
738     if test "$ENABLE_LTO" = TRUE; then
739         # -flto comes from com_GCC_defs.mk, too, but we need to make sure it gets passed as part of
740         # $CC and $CXX when building external libraries
741         ANDROIDCFLAGS="$ANDROIDCFLAGS -flto -fuse-linker-plugin -O2"
742     fi
744     ANDROIDCXXFLAGS="$ANDROIDCFLAGS -stdlib=libc++"
746     if test -z "$CC"; then
747         CC="$ANDROID_COMPILER_BIN/clang $ANDROIDCFLAGS"
748         CC_BASE="clang"
749     fi
750     if test -z "$CXX"; then
751         CXX="$ANDROID_COMPILER_BIN/clang++ $ANDROIDCXXFLAGS"
752         CXX_BASE="clang++"
753     fi
755 AC_SUBST(ANDROID_NDK_HOME)
756 AC_SUBST(ANDROID_APP_ABI)
757 AC_SUBST(ANDROID_GCC_TOOLCHAIN_VERSION)
759 dnl ===================================================================
760 dnl --with-android-sdk
761 dnl ===================================================================
762 ANDROID_SDK_HOME=
763 if test -z "$with_android_sdk" -a -e "$SRC_ROOT/external/android-sdk-linux" -a "$build" != "$host"; then
764     with_android_sdk="$SRC_ROOT/external/android-sdk-linux"
766 if test -n "$with_android_sdk"; then
767     eval ANDROID_SDK_HOME=$with_android_sdk
768     PATH="$ANDROID_SDK_HOME/platform-tools:$ANDROID_SDK_HOME/tools:$PATH"
770 AC_SUBST(ANDROID_SDK_HOME)
772 AC_ARG_ENABLE([android-lok],
773     AS_HELP_STRING([--enable-android-lok],
774         [The Android app from the android/ subdir needs several tweaks all
775          over the place that break the LOK when used in the Online-based
776          Android app.  This switch indicates that the intent of this build is
777          actually the Online-based, non-modified LOK.])
779 ENABLE_ANDROID_LOK=
780 if test -n "$ANDROID_NDK_HOME" ; then
781     if test "$enable_android_lok" = yes; then
782         ENABLE_ANDROID_LOK=TRUE
783         AC_DEFINE(HAVE_FEATURE_ANDROID_LOK)
784         AC_MSG_NOTICE([building the Android version... for the Online-based Android app])
785     else
786         AC_MSG_NOTICE([building the Android version... for the app from the android/ subdir])
787     fi
789 AC_SUBST([ENABLE_ANDROID_LOK])
791 libo_FUZZ_ARG_ENABLE([android-editing],
792     AS_HELP_STRING([--enable-android-editing],
793         [Enable the experimental editing feature on Android.])
795 ENABLE_ANDROID_EDITING=
796 if test "$enable_android_editing" = yes; then
797     ENABLE_ANDROID_EDITING=TRUE
799 AC_SUBST([ENABLE_ANDROID_EDITING])
801 dnl ===================================================================
802 dnl The following is a list of supported systems.
803 dnl Sequential to keep the logic very simple
804 dnl These values may be checked and reset later.
805 dnl ===================================================================
806 #defaults unless the os test overrides this:
807 test_cmis=yes
808 test_curl=yes
809 test_randr=yes
810 test_xrender=yes
811 test_cups=yes
812 test_dbus=yes
813 test_fontconfig=yes
814 test_cairo=no
815 test_gdb_index=no
816 test_split_debug=no
818 # Default values, as such probably valid just for Linux, set
819 # differently below just for Mac OSX, but at least better than
820 # hardcoding these as we used to do. Much of this is duplicated also
821 # in solenv for old build system and for gbuild, ideally we should
822 # perhaps define stuff like this only here in configure.ac?
824 LINKFLAGSSHL="-shared"
825 PICSWITCH="-fpic"
826 DLLPOST=".so"
828 LINKFLAGSNOUNDEFS="-Wl,-z,defs"
830 INSTROOTBASESUFFIX=
831 INSTROOTCONTENTSUFFIX=
832 SDKDIRNAME=sdk
834 HOST_PLATFORM="$host"
836 host_cpu_for_clang="$host_cpu"
838 case "$host_os" in
840 solaris*)
841     build_gstreamer_1_0=yes
842     test_freetype=yes
843     build_skia=yes
844     _os=SunOS
846     dnl ===========================================================
847     dnl Check whether we're using Solaris 10 - SPARC or Intel.
848     dnl ===========================================================
849     AC_MSG_CHECKING([the Solaris operating system release])
850     _os_release=`echo $host_os | $SED -e s/solaris2\.//`
851     if test "$_os_release" -lt "10"; then
852         AC_MSG_ERROR([use Solaris >= 10 to build LibreOffice])
853     else
854         AC_MSG_RESULT([ok ($_os_release)])
855     fi
857     dnl Check whether we're using a SPARC or i386 processor
858     AC_MSG_CHECKING([the processor type])
859     if test "$host_cpu" = "sparc" -o "$host_cpu" = "i386"; then
860         AC_MSG_RESULT([ok ($host_cpu)])
861     else
862         AC_MSG_ERROR([only SPARC and i386 processors are supported])
863     fi
864     ;;
866 linux-gnu*|k*bsd*-gnu*)
867     build_gstreamer_1_0=yes
868     test_kf5=yes
869     test_gtk3_kde5=yes
870     build_skia=yes
871     test_gdb_index=yes
872     test_split_debug=yes
873     if test "$enable_fuzzers" != yes; then
874         test_freetype=yes
875         test_fontconfig=yes
876     else
877         test_freetype=no
878         test_fontconfig=no
879         BUILD_TYPE="$BUILD_TYPE FONTCONFIG FREETYPE"
880     fi
881     _os=Linux
882     ;;
884 gnu)
885     test_randr=no
886     test_xrender=no
887     _os=GNU
888      ;;
890 cygwin*|wsl*)
892     # When building on Windows normally with MSVC under Cygwin,
893     # configure thinks that the host platform (the platform the
894     # built code will run on) is Cygwin, even if it obviously is
895     # Windows, which in Autoconf terminology is called
896     # "mingw32". (Which is misleading as MinGW is the name of the
897     # tool-chain, not an operating system.)
899     # Somewhat confusing, yes. But this configure script doesn't
900     # look at $host etc that much, it mostly uses its own $_os
901     # variable, set here in this case statement.
903     test_cups=no
904     test_dbus=no
905     test_randr=no
906     test_xrender=no
907     test_freetype=no
908     test_fontconfig=no
909     build_skia=yes
910     _os=WINNT
912     DLLPOST=".dll"
913     LINKFLAGSNOUNDEFS=
915     if test "$host_cpu" = "aarch64"; then
916         enable_gpgmepp=no
917         enable_coinmp=no
918         enable_firebird_sdbc=no
919     fi
920     ;;
922 darwin*|macos*) # macOS
923     test_randr=no
924     test_xrender=no
925     test_freetype=no
926     test_fontconfig=no
927     test_dbus=no
928     if test -n "$LODE_HOME" ; then
929         mac_sanitize_path
930         AC_MSG_NOTICE([sanitized the PATH to $PATH])
931     fi
932     _os=Darwin
933     INSTROOTBASESUFFIX=/$PRODUCTNAME_WITHOUT_SPACES.app
934     INSTROOTCONTENTSUFFIX=/Contents
935     SDKDIRNAME=${PRODUCTNAME_WITHOUT_SPACES}${PRODUCTVERSION}_SDK
936     # See comment above the case "$host_os"
937     LINKFLAGSSHL="-dynamiclib -single_module"
939     # -fPIC is default
940     PICSWITCH=""
942     DLLPOST=".dylib"
944     # -undefined error is the default
945     LINKFLAGSNOUNDEFS=""
946     case "$host_cpu" in
947     aarch64|arm64)
948         case "$host_os" in
949         macos*)
950             # HOST_PLATFORM is used for external projects and their configury occasionally doesn't like
951             # the "macos" part so be sure to use aarch64-apple-darwin for now.
952             HOST_PLATFORM=aarch64-apple-darwin
953             ;;
954         esac
956         # Apple's Clang uses "arm64"
957         host_cpu_for_clang=arm64
958     esac
961 ios*) # iOS
962     test_cmis=no
963     test_randr=no
964     test_xrender=no
965     test_freetype=no
966     test_fontconfig=no
967     test_dbus=no
968     if test -n "$LODE_HOME" ; then
969         mac_sanitize_path
970         AC_MSG_NOTICE([sanitized the PATH to $PATH])
971     fi
972     enable_gpgmepp=no
973     _os=iOS
974     test_cups=no
975     enable_mpl_subset=yes
976     enable_lotuswordpro=no
977     enable_coinmp=no
978     enable_lpsolve=no
979     enable_mariadb_sdbc=no
980     enable_postgresql_sdbc=no
981     enable_extension_integration=no
982     enable_report_builder=no
983     with_ppds=no
984     if test "$enable_ios_simulator" = "yes"; then
985         host=x86_64-apple-darwin
986     fi
987     # See comment above the case "$host_os"
988     LINKFLAGSSHL="-dynamiclib -single_module"
990     # -fPIC is default
991     PICSWITCH=""
993     DLLPOST=".dylib"
995     # -undefined error is the default
996     LINKFLAGSNOUNDEFS=""
998     # HOST_PLATFORM is used for external projects and their configury typically doesn't like the "ios"
999     # part, so use aarch64-apple-darwin for now.
1000     HOST_PLATFORM=aarch64-apple-darwin
1002     # Apple's Clang uses "arm64"
1003     host_cpu_for_clang=arm64
1006 freebsd*)
1007     build_gstreamer_1_0=yes
1008     test_kf5=yes
1009     test_gtk3_kde5=yes
1010     test_freetype=yes
1011     build_skia=yes
1012     AC_MSG_CHECKING([the FreeBSD operating system release])
1013     if test -n "$with_os_version"; then
1014         OSVERSION="$with_os_version"
1015     else
1016         OSVERSION=`/sbin/sysctl -n kern.osreldate`
1017     fi
1018     AC_MSG_RESULT([found OSVERSION=$OSVERSION])
1019     AC_MSG_CHECKING([which thread library to use])
1020     if test "$OSVERSION" -lt "500016"; then
1021         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1022         PTHREAD_LIBS="-pthread"
1023     elif test "$OSVERSION" -lt "502102"; then
1024         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1025         PTHREAD_LIBS="-lc_r"
1026     else
1027         PTHREAD_CFLAGS=""
1028         PTHREAD_LIBS="-pthread"
1029     fi
1030     AC_MSG_RESULT([$PTHREAD_LIBS])
1031     _os=FreeBSD
1032     ;;
1034 *netbsd*)
1035     build_gstreamer_1_0=yes
1036     test_kf5=yes
1037     test_gtk3_kde5=yes
1038     test_freetype=yes
1039     build_skia=yes
1040     PTHREAD_LIBS="-pthread -lpthread"
1041     _os=NetBSD
1042     ;;
1044 aix*)
1045     test_randr=no
1046     test_freetype=yes
1047     PTHREAD_LIBS=-pthread
1048     _os=AIX
1049     ;;
1051 openbsd*)
1052     test_freetype=yes
1053     PTHREAD_CFLAGS="-D_THREAD_SAFE"
1054     PTHREAD_LIBS="-pthread"
1055     _os=OpenBSD
1056     ;;
1058 dragonfly*)
1059     build_gstreamer_1_0=yes
1060     test_kf5=yes
1061     test_gtk3_kde5=yes
1062     test_freetype=yes
1063     build_skia=yes
1064     PTHREAD_LIBS="-pthread"
1065     _os=DragonFly
1066     ;;
1068 linux-android*)
1069     build_gstreamer_1_0=no
1070     enable_lotuswordpro=no
1071     enable_mpl_subset=yes
1072     enable_coinmp=yes
1073     enable_lpsolve=no
1074     enable_mariadb_sdbc=no
1075     enable_report_builder=no
1076     enable_odk=no
1077     enable_postgresql_sdbc=no
1078     enable_python=no
1079     test_cups=no
1080     test_dbus=no
1081     test_fontconfig=no
1082     test_freetype=no
1083     test_kf5=no
1084     test_qt5=no
1085     test_gtk3_kde5=no
1086     test_randr=no
1087     test_xrender=no
1088     _os=Android
1090     AC_DEFINE(HAVE_FT_FACE_GETCHARVARIANTINDEX)
1091     BUILD_TYPE="$BUILD_TYPE CAIRO FONTCONFIG FREETYPE"
1092     ;;
1094 haiku*)
1095     test_cups=no
1096     test_dbus=no
1097     test_randr=no
1098     test_xrender=no
1099     test_freetype=yes
1100     enable_odk=no
1101     enable_gstreamer_1_0=no
1102     enable_coinmp=no
1103     enable_pdfium=no
1104     enable_sdremote=no
1105     enable_postgresql_sdbc=no
1106     enable_firebird_sdbc=no
1107     _os=Haiku
1108     ;;
1110 emscripten)
1111     build_gstreamer_1_0=no
1112     enable_lpsolve=no
1113     enable_report_builder=no
1114     with_theme="breeze"
1115     test_cmis=no
1116     test_cups=no
1117     test_curl=no
1118     test_dbus=no
1119     test_fontconfig=no
1120     test_freetype=no
1121     test_gtk=no
1122     test_randr=no
1123     test_xrender=no
1124     enable_postgresql_sdbc=no
1125     enable_firebird_sdbc=no
1126     enable_mariadb_sdbc=no
1127     with_system_zlib=no
1128     _os=Emscripten
1130     BUILD_TYPE="$BUILD_TYPE FONTCONFIG FREETYPE"
1131     ;;
1134     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
1135     ;;
1136 esac
1138 AC_SUBST(HOST_PLATFORM)
1140 if test "$_os" = "Android" ; then
1141     # Verify that the NDK and SDK options are proper
1142     if test -z "$with_android_ndk"; then
1143         AC_MSG_ERROR([the --with-android-ndk option is mandatory, unless it is available at external/android-ndk/.])
1144     elif test ! -f "$ANDROID_NDK_HOME/meta/abis.json"; then
1145         AC_MSG_ERROR([the --with-android-ndk option does not point to an Android NDK])
1146     fi
1148     if test -z "$ANDROID_SDK_HOME"; then
1149         AC_MSG_ERROR([the --with-android-sdk option is mandatory, unless it is available at external/android-sdk-linux/.])
1150     elif test ! -d "$ANDROID_SDK_HOME/platforms"; then
1151         AC_MSG_ERROR([the --with-android-sdk option does not point to an Android SDK])
1152     fi
1154     BUILD_TOOLS_VERSION=`$SED -n -e 's/.*buildToolsVersion "\(.*\)"/\1/p' $SRC_ROOT/android/source/build.gradle`
1155     if test ! -d "$ANDROID_SDK_HOME/build-tools/$BUILD_TOOLS_VERSION"; then
1156         AC_MSG_WARN([android build-tools $BUILD_TOOLS_VERSION not found - install with
1157                          $ANDROID_SDK_HOME/tools/android update sdk -u --all --filter build-tools-$BUILD_TOOLS_VERSION
1158                     or adjust change $SRC_ROOT/android/source/build.gradle accordingly])
1159         add_warning "android build-tools $BUILD_TOOLS_VERSION not found - install with"
1160         add_warning "    $ANDROID_SDK_HOME/tools/android update sdk -u --all --filter build-tools-$BUILD_TOOLS_VERSION"
1161         add_warning "or adjust $SRC_ROOT/android/source/build.gradle accordingly"
1162     fi
1163     if test ! -f "$ANDROID_SDK_HOME/extras/android/m2repository/source.properties"; then
1164         AC_MSG_WARN([android support repository not found - install with
1165                          $ANDROID_SDK_HOME/tools/android update sdk -u --filter extra-android-m2repository
1166                      to allow the build to download the specified version of the android support libraries])
1167         add_warning "android support repository not found - install with"
1168         add_warning "    $ANDROID_SDK_HOME/tools/android update sdk -u --filter extra-android-m2repository"
1169         add_warning "to allow the build to download the specified version of the android support libraries"
1170     fi
1173 if test "$_os" = "AIX"; then
1174     AC_PATH_PROG(GAWK, gawk)
1175     if test -z "$GAWK"; then
1176         AC_MSG_ERROR([gawk not found in \$PATH])
1177     fi
1180 AC_SUBST(SDKDIRNAME)
1182 AC_SUBST(PTHREAD_CFLAGS)
1183 AC_SUBST(PTHREAD_LIBS)
1185 # Check for explicit A/C/CXX/OBJC/OBJCXX/LDFLAGS.
1186 # By default use the ones specified by our build system,
1187 # but explicit override is possible.
1188 AC_MSG_CHECKING(for explicit AFLAGS)
1189 if test -n "$AFLAGS"; then
1190     AC_MSG_RESULT([$AFLAGS])
1191     x_AFLAGS=
1192 else
1193     AC_MSG_RESULT(no)
1194     x_AFLAGS=[\#]
1196 AC_MSG_CHECKING(for explicit CFLAGS)
1197 if test -n "$CFLAGS"; then
1198     AC_MSG_RESULT([$CFLAGS])
1199     x_CFLAGS=
1200 else
1201     AC_MSG_RESULT(no)
1202     x_CFLAGS=[\#]
1204 AC_MSG_CHECKING(for explicit CXXFLAGS)
1205 if test -n "$CXXFLAGS"; then
1206     AC_MSG_RESULT([$CXXFLAGS])
1207     x_CXXFLAGS=
1208 else
1209     AC_MSG_RESULT(no)
1210     x_CXXFLAGS=[\#]
1212 AC_MSG_CHECKING(for explicit OBJCFLAGS)
1213 if test -n "$OBJCFLAGS"; then
1214     AC_MSG_RESULT([$OBJCFLAGS])
1215     x_OBJCFLAGS=
1216 else
1217     AC_MSG_RESULT(no)
1218     x_OBJCFLAGS=[\#]
1220 AC_MSG_CHECKING(for explicit OBJCXXFLAGS)
1221 if test -n "$OBJCXXFLAGS"; then
1222     AC_MSG_RESULT([$OBJCXXFLAGS])
1223     x_OBJCXXFLAGS=
1224 else
1225     AC_MSG_RESULT(no)
1226     x_OBJCXXFLAGS=[\#]
1228 AC_MSG_CHECKING(for explicit LDFLAGS)
1229 if test -n "$LDFLAGS"; then
1230     AC_MSG_RESULT([$LDFLAGS])
1231     x_LDFLAGS=
1232 else
1233     AC_MSG_RESULT(no)
1234     x_LDFLAGS=[\#]
1236 AC_SUBST(AFLAGS)
1237 AC_SUBST(CFLAGS)
1238 AC_SUBST(CXXFLAGS)
1239 AC_SUBST(OBJCFLAGS)
1240 AC_SUBST(OBJCXXFLAGS)
1241 AC_SUBST(LDFLAGS)
1242 AC_SUBST(x_AFLAGS)
1243 AC_SUBST(x_CFLAGS)
1244 AC_SUBST(x_CXXFLAGS)
1245 AC_SUBST(x_OBJCFLAGS)
1246 AC_SUBST(x_OBJCXXFLAGS)
1247 AC_SUBST(x_LDFLAGS)
1249 dnl These are potentially set for MSVC, in the code checking for UCRT below:
1250 my_original_CFLAGS=$CFLAGS
1251 my_original_CXXFLAGS=$CXXFLAGS
1252 my_original_CPPFLAGS=$CPPFLAGS
1254 dnl The following checks for gcc, cc and then cl (if it weren't guarded for win32)
1255 dnl Needs to precede the AC_C_BIGENDIAN and AC_SEARCH_LIBS calls below, which apparently call
1256 dnl AC_PROG_CC internally.
1257 if test "$_os" != "WINNT"; then
1258     # AC_PROG_CC sets CFLAGS to -g -O2 if not set, avoid that
1259     save_CFLAGS=$CFLAGS
1260     AC_PROG_CC
1261     CFLAGS=$save_CFLAGS
1262     if test -z "$CC_BASE"; then
1263         CC_BASE=`first_arg_basename "$CC"`
1264     fi
1267 if test "$_os" != "WINNT"; then
1268     AC_C_BIGENDIAN([ENDIANNESS=big], [ENDIANNESS=little])
1269 else
1270     ENDIANNESS=little
1272 AC_SUBST(ENDIANNESS)
1274 if test $_os != "WINNT"; then
1275     save_LIBS="$LIBS"
1276     AC_SEARCH_LIBS([dlsym], [dl],
1277         [case "$ac_cv_search_dlsym" in -l*) DLOPEN_LIBS="$ac_cv_search_dlsym";; esac],
1278         [AC_MSG_ERROR([dlsym not found in either libc nor libdl])])
1279     LIBS="$save_LIBS"
1281 AC_SUBST(DLOPEN_LIBS)
1283 dnl ===================================================================
1284 dnl Sanity checks for Emscripten SDK setup
1285 dnl ===================================================================
1287 if test "$_os" = "Emscripten"; then
1288     EMSCRIPTEN_ERROR=0
1289     if ! which emconfigure >/dev/null 2>&1; then
1290         AC_MSG_WARN([emconfigure must be in your \$PATH])
1291         EMSCRIPTEN_ERROR=1
1292     fi
1293     if test -z "$EMMAKEN_JUST_CONFIGURE"; then
1294         AC_MSG_WARN(["\$EMMAKEN_JUST_CONFIGURE wasn't set by emconfigure. Prefix configure or use autogen.sh])
1295         EMSCRIPTEN_ERROR=1
1296     fi
1297     if test $EMSCRIPTEN_ERROR -ne 0; then
1298         AC_MSG_ERROR(["Please fix your EMSDK setup to build with Emscripten!"])
1299     fi
1302 ###############################################################################
1303 # Extensions switches --enable/--disable
1304 ###############################################################################
1305 # By default these should be enabled unless having extra dependencies.
1306 # If there is extra dependency over configure options then the enable should
1307 # be automagic based on whether the requiring feature is enabled or not.
1308 # All this options change anything only with --enable-extension-integration.
1310 # The name of this option and its help string makes it sound as if
1311 # extensions are built anyway, just not integrated in the installer,
1312 # if you use --disable-extension-integration. Is that really the
1313 # case?
1315 AC_ARG_ENABLE(ios-simulator,
1316     AS_HELP_STRING([--enable-ios-simulator],
1317         [build for iOS simulator])
1320 libo_FUZZ_ARG_ENABLE(extension-integration,
1321     AS_HELP_STRING([--disable-extension-integration],
1322         [Disable integration of the built extensions in the installer of the
1323          product. Use this switch to disable the integration.])
1326 AC_ARG_ENABLE(avmedia,
1327     AS_HELP_STRING([--disable-avmedia],
1328         [Disable displaying and inserting AV media in documents. Work in progress, use only if you are hacking on it.])
1331 AC_ARG_ENABLE(database-connectivity,
1332     AS_HELP_STRING([--disable-database-connectivity],
1333         [Disable various database connectivity. Work in progress, use only if you are hacking on it.])
1336 # This doesn't mean not building (or "integrating") extensions
1337 # (although it probably should; i.e. it should imply
1338 # --disable-extension-integration I guess), it means not supporting
1339 # any extension mechanism at all
1340 libo_FUZZ_ARG_ENABLE(extensions,
1341     AS_HELP_STRING([--disable-extensions],
1342         [Disable all add-on extension functionality. Work in progress, use only if you are hacking on it.])
1345 AC_ARG_ENABLE(scripting,
1346     AS_HELP_STRING([--disable-scripting],
1347         [Disable BASIC, Java and Python. Work in progress, use only if you are hacking on it.])
1350 # This is mainly for Android and iOS, but could potentially be used in some
1351 # special case otherwise, too, so factored out as a separate setting
1353 AC_ARG_ENABLE(dynamic-loading,
1354     AS_HELP_STRING([--disable-dynamic-loading],
1355         [Disable any use of dynamic loading of code. Work in progress, use only if you are hacking on it.])
1358 libo_FUZZ_ARG_ENABLE(report-builder,
1359     AS_HELP_STRING([--disable-report-builder],
1360         [Disable the Report Builder.])
1363 libo_FUZZ_ARG_ENABLE(ext-wiki-publisher,
1364     AS_HELP_STRING([--enable-ext-wiki-publisher],
1365         [Enable the Wiki Publisher extension.])
1368 libo_FUZZ_ARG_ENABLE(lpsolve,
1369     AS_HELP_STRING([--disable-lpsolve],
1370         [Disable compilation of the lp solve solver ])
1372 libo_FUZZ_ARG_ENABLE(coinmp,
1373     AS_HELP_STRING([--disable-coinmp],
1374         [Disable compilation of the CoinMP solver ])
1377 libo_FUZZ_ARG_ENABLE(pdfimport,
1378     AS_HELP_STRING([--disable-pdfimport],
1379         [Disable building the PDF import feature.])
1382 libo_FUZZ_ARG_ENABLE(pdfium,
1383     AS_HELP_STRING([--disable-pdfium],
1384         [Disable building PDFium. Results in unsecure PDF signature verification.])
1387 libo_FUZZ_ARG_ENABLE(skia,
1388     AS_HELP_STRING([--disable-skia],
1389         [Disable building Skia. Use --enable-skia=debug to build without optimizations.])
1392 ###############################################################################
1394 dnl ---------- *** ----------
1396 libo_FUZZ_ARG_ENABLE(mergelibs,
1397     AS_HELP_STRING([--enable-mergelibs],
1398         [Merge several of the smaller libraries into one big, "merged", one.])
1401 libo_FUZZ_ARG_ENABLE(breakpad,
1402     AS_HELP_STRING([--enable-breakpad],
1403         [Enables breakpad for crash reporting.])
1406 libo_FUZZ_ARG_ENABLE(crashdump,
1407     AS_HELP_STRING([--disable-crashdump],
1408         [Disable dump.ini and dump-file, when --enable-breakpad])
1411 AC_ARG_ENABLE(fetch-external,
1412     AS_HELP_STRING([--disable-fetch-external],
1413         [Disables fetching external tarballs from web sources.])
1416 AC_ARG_ENABLE(fuzzers,
1417     AS_HELP_STRING([--enable-fuzzers],
1418         [Enables building libfuzzer targets for fuzz testing.])
1421 libo_FUZZ_ARG_ENABLE(pch,
1422     AS_HELP_STRING([--enable-pch=<yes/no/system/base/normal/full>],
1423         [Enables precompiled header support for C++. Forced default on Windows/VC build.
1424          Using 'system' will include only external headers, 'base' will add also headers
1425          from base modules, 'normal' will also add all headers except from the module built,
1426          'full' will use all suitable headers even from a module itself.])
1429 libo_FUZZ_ARG_ENABLE(epm,
1430     AS_HELP_STRING([--enable-epm],
1431         [LibreOffice includes self-packaging code, that requires epm, however epm is
1432          useless for large scale package building.])
1435 libo_FUZZ_ARG_ENABLE(odk,
1436     AS_HELP_STRING([--disable-odk],
1437         [LibreOffice includes an ODK, office development kit which some packagers may
1438          wish to build without.])
1441 AC_ARG_ENABLE(mpl-subset,
1442     AS_HELP_STRING([--enable-mpl-subset],
1443         [Don't compile any pieces which are not MPL or more liberally licensed])
1446 libo_FUZZ_ARG_ENABLE(evolution2,
1447     AS_HELP_STRING([--enable-evolution2],
1448         [Allows the built-in evolution 2 addressbook connectivity build to be
1449          enabled.])
1452 AC_ARG_ENABLE(avahi,
1453     AS_HELP_STRING([--enable-avahi],
1454         [Determines whether to use Avahi to advertise Impress to remote controls.])
1457 libo_FUZZ_ARG_ENABLE(werror,
1458     AS_HELP_STRING([--enable-werror],
1459         [Turn warnings to errors. (Has no effect in modules where the treating
1460          of warnings as errors is disabled explicitly.)]),
1463 libo_FUZZ_ARG_ENABLE(assert-always-abort,
1464     AS_HELP_STRING([--enable-assert-always-abort],
1465         [make assert() failures abort even when building without --enable-debug or --enable-dbgutil.]),
1468 libo_FUZZ_ARG_ENABLE(dbgutil,
1469     AS_HELP_STRING([--enable-dbgutil],
1470         [Provide debugging support from --enable-debug and include additional debugging
1471          utilities such as object counting or more expensive checks.
1472          This is the recommended option for developers.
1473          Note that this makes the build ABI incompatible, it is not possible to mix object
1474          files or libraries from a --enable-dbgutil and a --disable-dbgutil build.]))
1476 libo_FUZZ_ARG_ENABLE(debug,
1477     AS_HELP_STRING([--enable-debug],
1478         [Include debugging information, disable compiler optimization and inlining plus
1479          extra debugging code like assertions. Extra large build! (enables -g compiler flag).]))
1481 libo_FUZZ_ARG_ENABLE(split-debug,
1482     AS_HELP_STRING([--disable-split-debug],
1483         [Disable using split debug information (-gsplit-dwarf compile flag). Split debug information
1484          saves disk space and build time, but requires tools that support it (both build tools and debuggers).]))
1486 libo_FUZZ_ARG_ENABLE(gdb-index,
1487     AS_HELP_STRING([--disable-gdb-index],
1488         [Disables creating debug information in the gdb index format, which makes gdb start faster.
1489          The feature requires the gold or lld linker.]))
1491 libo_FUZZ_ARG_ENABLE(sal-log,
1492     AS_HELP_STRING([--enable-sal-log],
1493         [Make SAL_INFO and SAL_WARN calls do something even in a non-debug build.]))
1495 libo_FUZZ_ARG_ENABLE(symbols,
1496     AS_HELP_STRING([--enable-symbols],
1497         [Generate debug information.
1498          By default, enabled for --enable-debug and --enable-dbgutil, disabled
1499          otherwise. It is possible to explicitly specify gbuild build targets
1500          (where 'all' means everything, '-' prepended means to not enable, '/' appended means
1501          everything in the directory; there is no ordering, more specific overrides
1502          more general, and disabling takes precedence).
1503          Example: --enable-symbols="all -sw/ -Library_sc".]))
1505 libo_FUZZ_ARG_ENABLE(optimized,
1506     AS_HELP_STRING([--enable-optimized=<yes/no/debug>],
1507         [Whether to compile with optimization flags.
1508          By default, disabled for --enable-debug and --enable-dbgutil, enabled
1509          otherwise. Using 'debug' will try to use only optimizations that should
1510          not interfere with debugging. For Emscripten we default to optimized (-O1)
1511          debug build, as otherwise binaries become too large.]))
1513 libo_FUZZ_ARG_ENABLE(runtime-optimizations,
1514     AS_HELP_STRING([--disable-runtime-optimizations],
1515         [Statically disable certain runtime optimizations (like rtl/alloc.h or
1516          JVM JIT) that are known to interact badly with certain dynamic analysis
1517          tools (like -fsanitize=address or Valgrind).  By default, disabled iff
1518          CC contains "-fsanitize=*".  (For Valgrind, those runtime optimizations
1519          are typically disabled dynamically via RUNNING_ON_VALGRIND.)]))
1521 AC_ARG_WITH(valgrind,
1522     AS_HELP_STRING([--with-valgrind],
1523         [Make availability of Valgrind headers a hard requirement.]))
1525 libo_FUZZ_ARG_ENABLE(compiler-plugins,
1526     AS_HELP_STRING([--enable-compiler-plugins],
1527         [Enable compiler plugins that will perform additional checks during
1528          building. Enabled automatically by --enable-dbgutil.
1529          Use --enable-compiler-plugins=debug to also enable debug code in the plugins.]))
1530 COMPILER_PLUGINS_DEBUG=
1531 if test "$enable_compiler_plugins" = debug; then
1532     enable_compiler_plugins=yes
1533     COMPILER_PLUGINS_DEBUG=TRUE
1536 libo_FUZZ_ARG_ENABLE(compiler-plugins-analyzer-pch,
1537     AS_HELP_STRING([--disable-compiler-plugins-analyzer-pch],
1538         [Disable use of precompiled headers when running the Clang compiler plugin analyzer.  Not
1539          relevant in the --disable-compiler-plugins case.]))
1541 libo_FUZZ_ARG_ENABLE(ooenv,
1542     AS_HELP_STRING([--enable-ooenv],
1543         [Enable ooenv for the instdir installation.]))
1545 AC_ARG_ENABLE(lto,
1546     AS_HELP_STRING([--enable-lto],
1547         [Enable link-time optimization. Suitable for (optimised) product builds. Building might take
1548          longer but libraries and executables are optimized for speed. For GCC, best to use the 'gold'
1549          linker. For MSVC, this option is broken at the moment. This is experimental work
1550          in progress that shouldn't be used unless you are working on it.)]))
1552 AC_ARG_ENABLE(python,
1553     AS_HELP_STRING([--enable-python=<no/auto/system/internal/fully-internal>],
1554         [Enables or disables Python support at run-time.
1555          Also specifies what Python to use at build-time.
1556          'fully-internal' even forces the internal version for uses of Python
1557          during the build.
1558          On macOS the only choices are
1559          'internal' (default) or 'fully-internal'. Otherwise the default is 'auto'.
1560          ]))
1562 libo_FUZZ_ARG_ENABLE(gtk3,
1563     AS_HELP_STRING([--disable-gtk3],
1564         [Determines whether to use Gtk+ 3.0 vclplug on platforms where Gtk+ 3.0 is available.]),
1565 ,test "${enable_gtk3+set}" = set || enable_gtk3=yes)
1567 AC_ARG_ENABLE(gtk4,
1568     AS_HELP_STRING([--enable-gtk4],
1569         [Determines whether to use Gtk+ 4.0 vclplug on platforms where Gtk+ 4.0 is available.]))
1571 AC_ARG_ENABLE(introspection,
1572     AS_HELP_STRING([--enable-introspection],
1573         [Generate files for GObject introspection.  Requires --enable-gtk3.  (Typically used by
1574          Linux distributions.)]))
1576 AC_ARG_ENABLE(split-app-modules,
1577     AS_HELP_STRING([--enable-split-app-modules],
1578         [Split file lists for app modules, e.g. base, calc.
1579          Has effect only with make distro-pack-install]),
1582 AC_ARG_ENABLE(split-opt-features,
1583     AS_HELP_STRING([--enable-split-opt-features],
1584         [Split file lists for some optional features, e.g. pyuno, testtool.
1585          Has effect only with make distro-pack-install]),
1588 libo_FUZZ_ARG_ENABLE(cairo-canvas,
1589     AS_HELP_STRING([--disable-cairo-canvas],
1590         [Determines whether to build the Cairo canvas on platforms where Cairo is available.]),
1593 libo_FUZZ_ARG_ENABLE(dbus,
1594     AS_HELP_STRING([--disable-dbus],
1595         [Determines whether to enable features that depend on dbus.
1596          e.g. Presentation mode screensaver control, bluetooth presentation control, automatic font install]),
1597 ,test "${enable_dbus+set}" = set || enable_dbus=yes)
1599 libo_FUZZ_ARG_ENABLE(sdremote,
1600     AS_HELP_STRING([--disable-sdremote],
1601         [Determines whether to enable Impress remote control (i.e. the server component).]),
1602 ,test "${enable_sdremote+set}" = set || enable_sdremote=yes)
1604 libo_FUZZ_ARG_ENABLE(sdremote-bluetooth,
1605     AS_HELP_STRING([--disable-sdremote-bluetooth],
1606         [Determines whether to build sdremote with bluetooth support.
1607          Requires dbus on Linux.]))
1609 libo_FUZZ_ARG_ENABLE(gio,
1610     AS_HELP_STRING([--disable-gio],
1611         [Determines whether to use the GIO support.]),
1612 ,test "${enable_gio+set}" = set || enable_gio=yes)
1614 AC_ARG_ENABLE(qt5,
1615     AS_HELP_STRING([--enable-qt5],
1616         [Determines whether to use Qt5 vclplug on platforms where Qt5 is
1617          available.]),
1620 AC_ARG_ENABLE(kf5,
1621     AS_HELP_STRING([--enable-kf5],
1622         [Determines whether to use Qt5/KF5 vclplug on platforms where Qt5 and
1623          KF5 are available.]),
1626 AC_ARG_ENABLE(kde5,
1627     AS_HELP_STRING([--enable-kde5],
1628         [Compatibility switch for the kde5 => kf5 rename. Use --enable-kf5!])
1631 AC_ARG_ENABLE(gtk3_kde5,
1632     AS_HELP_STRING([--enable-gtk3-kde5],
1633         [Determines whether to use Gtk3 vclplug with KF5 file dialogs on
1634          platforms where Gtk3, Qt5 and Plasma is available.]),
1637 AC_ARG_ENABLE(gui,
1638     AS_HELP_STRING([--disable-gui],
1639         [Disable use of X11 or Wayland to reduce dependencies (e.g. for building LibreOfficeKit).]),
1640 ,enable_gui=yes)
1642 libo_FUZZ_ARG_ENABLE(randr,
1643     AS_HELP_STRING([--disable-randr],
1644         [Disable RandR support in the vcl project.]),
1645 ,test "${enable_randr+set}" = set || enable_randr=yes)
1647 libo_FUZZ_ARG_ENABLE(gstreamer-1-0,
1648     AS_HELP_STRING([--disable-gstreamer-1-0],
1649         [Disable building with the gstreamer 1.0 avmedia backend.]),
1650 ,test "${enable_gstreamer_1_0+set}" = set || enable_gstreamer_1_0=yes)
1652 libo_FUZZ_ARG_ENABLE(neon,
1653     AS_HELP_STRING([--disable-neon],
1654         [Disable neon and the compilation of webdav binding.]),
1657 libo_FUZZ_ARG_ENABLE([eot],
1658     [AS_HELP_STRING([--enable-eot],
1659         [Enable support for Embedded OpenType fonts.])],
1660 ,test "${enable_eot+set}" = set || enable_eot=no)
1662 libo_FUZZ_ARG_ENABLE(cve-tests,
1663     AS_HELP_STRING([--disable-cve-tests],
1664         [Prevent CVE tests to be executed]),
1667 libo_FUZZ_ARG_ENABLE(chart-tests,
1668     AS_HELP_STRING([--enable-chart-tests],
1669         [Executes chart XShape tests. In a perfect world these tests would be
1670          stable and everyone could run them, in reality it is best to run them
1671          only on a few machines that are known to work and maintained by people
1672          who can judge if a test failure is a regression or not.]),
1675 AC_ARG_ENABLE(build-opensymbol,
1676     AS_HELP_STRING([--enable-build-opensymbol],
1677         [Do not use the prebuilt opens___.ttf. Build it instead. This needs
1678          fontforge installed.]),
1681 AC_ARG_ENABLE(dependency-tracking,
1682     AS_HELP_STRING([--enable-dependency-tracking],
1683         [Do not reject slow dependency extractors.])[
1684   --disable-dependency-tracking
1685                           Disables generation of dependency information.
1686                           Speed up one-time builds.],
1689 AC_ARG_ENABLE(icecream,
1690     AS_HELP_STRING([--enable-icecream],
1691         [Use the 'icecream' distributed compiling tool to speedup the compilation.
1692          It defaults to /opt/icecream for the location of the icecream gcc/g++
1693          wrappers, you can override that using --with-gcc-home=/the/path switch.]),
1696 AC_ARG_ENABLE(ld,
1697     AS_HELP_STRING([--enable-ld=<linker>],
1698         [Use the specified linker. Both 'gold' and 'lld' linkers generally use less memory and link faster.
1699          By default tries to use the best linker possible, use --disable-ld to use the default linker.
1700          If <linker> contains any ':', the part before the first ':' is used as the value of
1701          -fuse-ld, while the part after the first ':' is used as the value of --ld-path (which is
1702          needed for Clang 12).]),
1705 libo_FUZZ_ARG_ENABLE(cups,
1706     AS_HELP_STRING([--disable-cups],
1707         [Do not build cups support.])
1710 AC_ARG_ENABLE(ccache,
1711     AS_HELP_STRING([--disable-ccache],
1712         [Do not try to use ccache automatically.
1713          By default, unless on Windows, we will try to detect if ccache is available; in that case if
1714          CC/CXX are not yet set, and --enable-icecream is not given, we
1715          attempt to use ccache. --disable-ccache disables ccache completely.
1716          Additionally ccache's depend mode is enabled if possible,
1717          use --enable-ccache=nodepend to enable ccache without depend mode.
1721 libo_FUZZ_ARG_ENABLE(online-update,
1722     AS_HELP_STRING([--enable-online-update],
1723         [Enable the online update service that will check for new versions of
1724          LibreOffice. By default, it is enabled on Windows and Mac, disabled on Linux.
1725          If the value is "mar", the experimental Mozilla-like update will be
1726          enabled instead of the traditional update mechanism.]),
1729 AC_ARG_WITH(update-config,
1730     AS_HELP_STRING([--with-update-config=/tmp/update.ini],
1731                    [Path to the update config ini file]))
1733 libo_FUZZ_ARG_ENABLE(extension-update,
1734     AS_HELP_STRING([--disable-extension-update],
1735         [Disable possibility to update installed extensions.]),
1738 libo_FUZZ_ARG_ENABLE(release-build,
1739     AS_HELP_STRING([--enable-release-build],
1740         [Enable release build. Note that the "release build" choice is orthogonal to
1741          whether symbols are present, debug info is generated, or optimization
1742          is done.
1743          See http://wiki.documentfoundation.org/Development/DevBuild]),
1746 AC_ARG_ENABLE(windows-build-signing,
1747     AS_HELP_STRING([--enable-windows-build-signing],
1748         [Enable signing of windows binaries (*.exe, *.dll)]),
1751 AC_ARG_ENABLE(silent-msi,
1752     AS_HELP_STRING([--enable-silent-msi],
1753         [Enable MSI with LIMITUI=1 (silent install).]),
1756 AC_ARG_ENABLE(macosx-code-signing,
1757     AS_HELP_STRING([--enable-macosx-code-signing=<identity>],
1758         [Sign executables, dylibs, frameworks and the app bundle. If you
1759          don't provide an identity the first suitable certificate
1760          in your keychain is used.]),
1763 AC_ARG_ENABLE(macosx-package-signing,
1764     AS_HELP_STRING([--enable-macosx-package-signing=<identity>],
1765         [Create a .pkg suitable for uploading to the Mac App Store and sign
1766          it. If you don't provide an identity the first suitable certificate
1767          in your keychain is used.]),
1770 AC_ARG_ENABLE(macosx-sandbox,
1771     AS_HELP_STRING([--enable-macosx-sandbox],
1772         [Make the app bundle run in a sandbox. Requires code signing.
1773          Is required by apps distributed in the Mac App Store, and implies
1774          adherence to App Store rules.]),
1777 AC_ARG_WITH(macosx-bundle-identifier,
1778     AS_HELP_STRING([--with-macosx-bundle-identifier=tld.mumble.orifice.TheOffice],
1779         [Define the macOS bundle identifier. Default is the somewhat weird
1780          org.libreoffice.script ("script", huh?).]),
1781 ,with_macosx_bundle_identifier=org.libreoffice.script)
1783 AC_ARG_WITH(product-name,
1784     AS_HELP_STRING([--with-product-name='My Own Office Suite'],
1785         [Define the product name. Default is AC_PACKAGE_NAME.]),
1786 ,with_product_name=$PRODUCTNAME)
1788 libo_FUZZ_ARG_ENABLE(community-flavor,
1789     AS_HELP_STRING([--disable-community-flavor],
1790         [Disable the Community branding.]),
1793 AC_ARG_WITH(package-version,
1794     AS_HELP_STRING([--with-package-version='3.1.4.5'],
1795         [Define the package version. Default is AC_PACKAGE_VERSION. Use only if you distribute an own build for macOS.]),
1798 libo_FUZZ_ARG_ENABLE(readonly-installset,
1799     AS_HELP_STRING([--enable-readonly-installset],
1800         [Prevents any attempts by LibreOffice to write into its installation. That means
1801          at least that no "system-wide" extensions can be added. Partly experimental work in
1802          progress, probably not fully implemented. Always enabled for macOS.]),
1805 libo_FUZZ_ARG_ENABLE(mariadb-sdbc,
1806     AS_HELP_STRING([--disable-mariadb-sdbc],
1807         [Disable the build of the MariaDB/MySQL-SDBC driver.])
1810 libo_FUZZ_ARG_ENABLE(postgresql-sdbc,
1811     AS_HELP_STRING([--disable-postgresql-sdbc],
1812         [Disable the build of the PostgreSQL-SDBC driver.])
1815 libo_FUZZ_ARG_ENABLE(lotuswordpro,
1816     AS_HELP_STRING([--disable-lotuswordpro],
1817         [Disable the build of the Lotus Word Pro filter.]),
1818 ,test "${enable_lotuswordpro+set}" = set || enable_lotuswordpro=yes)
1820 libo_FUZZ_ARG_ENABLE(firebird-sdbc,
1821     AS_HELP_STRING([--disable-firebird-sdbc],
1822         [Disable the build of the Firebird-SDBC driver if it doesn't compile for you.]),
1823 ,test "${enable_firebird_sdbc+set}" = set || enable_firebird_sdbc=yes)
1825 AC_ARG_ENABLE(bogus-pkg-config,
1826     AS_HELP_STRING([--enable-bogus-pkg-config],
1827         [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.]),
1830 AC_ARG_ENABLE(openssl,
1831     AS_HELP_STRING([--disable-openssl],
1832         [Disable using libssl/libcrypto from OpenSSL. If disabled,
1833          components will either use GNUTLS or NSS. Work in progress,
1834          use only if you are hacking on it.]),
1835 ,enable_openssl=yes)
1837 libo_FUZZ_ARG_ENABLE(cipher-openssl-backend,
1838     AS_HELP_STRING([--enable-cipher-openssl-backend],
1839         [Enable using OpenSSL as the actual implementation of the rtl/cipher.h functionality.
1840          Requires --enable-openssl.]))
1842 AC_ARG_ENABLE(nss,
1843     AS_HELP_STRING([--disable-nss],
1844         [Disable using NSS. If disabled,
1845          components will either use GNUTLS or openssl. Work in progress,
1846          use only if you are hacking on it.]),
1847 ,enable_nss=yes)
1849 AC_ARG_ENABLE(library-bin-tar,
1850     AS_HELP_STRING([--enable-library-bin-tar],
1851         [Enable the building and reused of tarball of binary build for some 'external' libraries.
1852         Some libraries can save their build result in a tarball
1853         stored in TARFILE_LOCATION. That binary tarball is
1854         uniquely identified by the source tarball,
1855         the content of the config_host.mk file and the content
1856         of the top-level directory in core for that library
1857         If this option is enabled, then if such a tarfile exist, it will be untarred
1858         instead of the source tarfile, and the build step will be skipped for that
1859         library.
1860         If a proper tarfile does not exist, then the normal source-based
1861         build is done for that library and a proper binary tarfile is created
1862         for the next time.]),
1865 AC_ARG_ENABLE(dconf,
1866     AS_HELP_STRING([--disable-dconf],
1867         [Disable the dconf configuration backend (enabled by default where
1868          available).]))
1870 libo_FUZZ_ARG_ENABLE(formula-logger,
1871     AS_HELP_STRING(
1872         [--enable-formula-logger],
1873         [Enable formula logger for logging formula calculation flow in Calc.]
1874     )
1877 AC_ARG_ENABLE(ldap,
1878     AS_HELP_STRING([--disable-ldap],
1879         [Disable LDAP support.]),
1880 ,enable_ldap=yes)
1882 AC_ARG_ENABLE(opencl,
1883     AS_HELP_STRING([--disable-opencl],
1884         [Disable OpenCL support.]),
1885 ,enable_opencl=yes)
1887 libo_FUZZ_ARG_ENABLE(librelogo,
1888     AS_HELP_STRING([--disable-librelogo],
1889         [Do not build LibreLogo.]),
1890 ,enable_librelogo=yes)
1892 AC_ARG_ENABLE(cmis,
1893     AS_HELP_STRING([--disable-cmis],
1894         [Disable CMIS support.]),
1895 ,enable_cmis=yes)
1897 AC_ARG_ENABLE(curl,
1898     AS_HELP_STRING([--disable-curl],
1899         [Disable CURL support.]),
1900 ,enable_curl=yes)
1902 AC_ARG_ENABLE(wasm-strip,
1903     AS_HELP_STRING([--enable-wasm-strip],
1904         [Strip the static build like for WASM/emscripten platform.]),
1905 ,enable_wasm_strip=yes)
1908 dnl ===================================================================
1909 dnl Optional Packages (--with/without-)
1910 dnl ===================================================================
1912 AC_ARG_WITH(gcc-home,
1913     AS_HELP_STRING([--with-gcc-home],
1914         [Specify the location of gcc/g++ manually. This can be used in conjunction
1915          with --enable-icecream when icecream gcc/g++ wrappers are installed in a
1916          non-default path.]),
1919 AC_ARG_WITH(gnu-patch,
1920     AS_HELP_STRING([--with-gnu-patch],
1921         [Specify location of GNU patch on Solaris or FreeBSD.]),
1924 AC_ARG_WITH(build-platform-configure-options,
1925     AS_HELP_STRING([--with-build-platform-configure-options],
1926         [Specify options for the configure script run for the *build* platform in a cross-compilation]),
1929 AC_ARG_WITH(gnu-cp,
1930     AS_HELP_STRING([--with-gnu-cp],
1931         [Specify location of GNU cp on Solaris or FreeBSD.]),
1934 AC_ARG_WITH(external-tar,
1935     AS_HELP_STRING([--with-external-tar=<TARFILE_PATH>],
1936         [Specify an absolute path of where to find (and store) tarfiles.]),
1937     TARFILE_LOCATION=$withval ,
1940 AC_ARG_WITH(referenced-git,
1941     AS_HELP_STRING([--with-referenced-git=<OTHER_CHECKOUT_DIR>],
1942         [Specify another checkout directory to reference. This makes use of
1943                  git submodule update --reference, and saves a lot of diskspace
1944                  when having multiple trees side-by-side.]),
1945     GIT_REFERENCE_SRC=$withval ,
1948 AC_ARG_WITH(linked-git,
1949     AS_HELP_STRING([--with-linked-git=<submodules repo basedir>],
1950         [Specify a directory where the repositories of submodules are located.
1951          This uses a method similar to git-new-workdir to get submodules.]),
1952     GIT_LINK_SRC=$withval ,
1955 AC_ARG_WITH(galleries,
1956     AS_HELP_STRING([--with-galleries],
1957         [Specify how galleries should be built. It is possible either to
1958          build these internally from source ("build"),
1959          or to disable them ("no")]),
1962 AC_ARG_WITH(theme,
1963     AS_HELP_STRING([--with-theme="theme1 theme2..."],
1964         [Choose which themes to include. By default those themes with an '*' are included.
1965          Possible choices: *breeze, *breeze_dark, *breeze_dark_svg, *breeze_svg, *colibre, *colibre_svg, *elementary,
1966          *elementary_svg, *karasa_jaga, *karasa_jaga_svg, *sifr, *sifr_dark, *sifr_dark_svg, *sifr_svg, *sukapura, *sukapura_svg.]),
1969 libo_FUZZ_ARG_WITH(helppack-integration,
1970     AS_HELP_STRING([--without-helppack-integration],
1971         [It will not integrate the helppacks to the installer
1972          of the product. Please use this switch to use the online help
1973          or separate help packages.]),
1976 libo_FUZZ_ARG_WITH(fonts,
1977     AS_HELP_STRING([--without-fonts],
1978         [LibreOffice includes some third-party fonts to provide a reliable basis for
1979          help content, templates, samples, etc. When these fonts are already
1980          known to be available on the system then you should use this option.]),
1983 AC_ARG_WITH(epm,
1984     AS_HELP_STRING([--with-epm],
1985         [Decides which epm to use. Default is to use the one from the system if
1986          one is built. When either this is not there or you say =internal epm
1987          will be built.]),
1990 AC_ARG_WITH(package-format,
1991     AS_HELP_STRING([--with-package-format],
1992         [Specify package format(s) for LibreOffice installation sets. The
1993          implicit --without-package-format leads to no installation sets being
1994          generated. Possible values: aix, archive, bsd, deb, dmg,
1995          installed, msi, pkg, and rpm.
1996          Example: --with-package-format='deb rpm']),
1999 AC_ARG_WITH(tls,
2000     AS_HELP_STRING([--with-tls],
2001         [Decides which TLS/SSL and cryptographic implementations to use for
2002          LibreOffice's code. Notice that this doesn't apply for depending
2003          libraries like "neon", for example. Default is to use NSS
2004          although OpenSSL is also possible. Notice that selecting NSS restricts
2005          the usage of OpenSSL in LO's code but selecting OpenSSL doesn't
2006          restrict by now the usage of NSS in LO's code. Possible values:
2007          openssl, nss. Example: --with-tls="nss"]),
2010 AC_ARG_WITH(system-libs,
2011     AS_HELP_STRING([--with-system-libs],
2012         [Use libraries already on system -- enables all --with-system-* flags.]),
2015 AC_ARG_WITH(system-bzip2,
2016     AS_HELP_STRING([--with-system-bzip2],
2017         [Use bzip2 already on system. Used only when --enable-online-update=mar]),,
2018     [with_system_bzip2="$with_system_libs"])
2020 AC_ARG_WITH(system-headers,
2021     AS_HELP_STRING([--with-system-headers],
2022         [Use headers already on system -- enables all --with-system-* flags for
2023          external packages whose headers are the only entities used i.e.
2024          boost/odbc/sane-header(s).]),,
2025     [with_system_headers="$with_system_libs"])
2027 AC_ARG_WITH(system-jars,
2028     AS_HELP_STRING([--without-system-jars],
2029         [When building with --with-system-libs, also the needed jars are expected
2030          on the system. Use this to disable that]),,
2031     [with_system_jars="$with_system_libs"])
2033 AC_ARG_WITH(system-cairo,
2034     AS_HELP_STRING([--with-system-cairo],
2035         [Use cairo libraries already on system.  Happens automatically for
2036          (implicit) --enable-gtk3.]))
2038 AC_ARG_WITH(system-epoxy,
2039     AS_HELP_STRING([--with-system-epoxy],
2040         [Use epoxy libraries already on system.  Happens automatically for
2041          (implicit) --enable-gtk3.]),,
2042        [with_system_epoxy="$with_system_libs"])
2044 AC_ARG_WITH(myspell-dicts,
2045     AS_HELP_STRING([--with-myspell-dicts],
2046         [Adds myspell dictionaries to the LibreOffice installation set]),
2049 AC_ARG_WITH(system-dicts,
2050     AS_HELP_STRING([--without-system-dicts],
2051         [Do not use dictionaries from system paths.]),
2054 AC_ARG_WITH(external-dict-dir,
2055     AS_HELP_STRING([--with-external-dict-dir],
2056         [Specify external dictionary dir.]),
2059 AC_ARG_WITH(external-hyph-dir,
2060     AS_HELP_STRING([--with-external-hyph-dir],
2061         [Specify external hyphenation pattern dir.]),
2064 AC_ARG_WITH(external-thes-dir,
2065     AS_HELP_STRING([--with-external-thes-dir],
2066         [Specify external thesaurus dir.]),
2069 AC_ARG_WITH(system-zlib,
2070     AS_HELP_STRING([--with-system-zlib],
2071         [Use zlib already on system.]),,
2072     [with_system_zlib=auto])
2074 AC_ARG_WITH(system-jpeg,
2075     AS_HELP_STRING([--with-system-jpeg],
2076         [Use jpeg already on system.]),,
2077     [with_system_jpeg="$with_system_libs"])
2079 AC_ARG_WITH(system-clucene,
2080     AS_HELP_STRING([--with-system-clucene],
2081         [Use clucene already on system.]),,
2082     [with_system_clucene="$with_system_libs"])
2084 AC_ARG_WITH(system-expat,
2085     AS_HELP_STRING([--with-system-expat],
2086         [Use expat already on system.]),,
2087     [with_system_expat="$with_system_libs"])
2089 AC_ARG_WITH(system-libxml,
2090     AS_HELP_STRING([--with-system-libxml],
2091         [Use libxml/libxslt already on system.]),,
2092     [with_system_libxml=auto])
2094 AC_ARG_WITH(system-icu,
2095     AS_HELP_STRING([--with-system-icu],
2096         [Use icu already on system.]),,
2097     [with_system_icu="$with_system_libs"])
2099 AC_ARG_WITH(system-ucpp,
2100     AS_HELP_STRING([--with-system-ucpp],
2101         [Use ucpp already on system.]),,
2102     [])
2104 AC_ARG_WITH(system-openldap,
2105     AS_HELP_STRING([--with-system-openldap],
2106         [Use the OpenLDAP LDAP SDK already on system.]),,
2107     [with_system_openldap="$with_system_libs"])
2109 libo_FUZZ_ARG_ENABLE(poppler,
2110     AS_HELP_STRING([--disable-poppler],
2111         [Disable building Poppler.])
2114 AC_ARG_WITH(system-poppler,
2115     AS_HELP_STRING([--with-system-poppler],
2116         [Use system poppler (only needed for PDF import).]),,
2117     [with_system_poppler="$with_system_libs"])
2119 libo_FUZZ_ARG_ENABLE(gpgmepp,
2120     AS_HELP_STRING([--disable-gpgmepp],
2121         [Disable building gpgmepp. Do not use in normal cases unless you want to fix potential problems it causes.])
2124 AC_ARG_WITH(system-gpgmepp,
2125     AS_HELP_STRING([--with-system-gpgmepp],
2126         [Use gpgmepp already on system]),,
2127     [with_system_gpgmepp="$with_system_libs"])
2129 AC_ARG_WITH(system-mariadb,
2130     AS_HELP_STRING([--with-system-mariadb],
2131         [Use MariaDB/MySQL libraries already on system.]),,
2132     [with_system_mariadb="$with_system_libs"])
2134 AC_ARG_ENABLE(bundle-mariadb,
2135     AS_HELP_STRING([--enable-bundle-mariadb],
2136         [When using MariaDB/MySQL libraries already on system, bundle them with the MariaDB Connector/LibreOffice.])
2139 AC_ARG_WITH(system-postgresql,
2140     AS_HELP_STRING([--with-system-postgresql],
2141         [Use PostgreSQL libraries already on system, for building the PostgreSQL-SDBC
2142          driver. If pg_config is not in PATH, use PGCONFIG to point to it.]),,
2143     [with_system_postgresql="$with_system_libs"])
2145 AC_ARG_WITH(libpq-path,
2146     AS_HELP_STRING([--with-libpq-path=<absolute path to your libpq installation>],
2147         [Use this PostgreSQL C interface (libpq) installation for building
2148          the PostgreSQL-SDBC extension.]),
2151 AC_ARG_WITH(system-firebird,
2152     AS_HELP_STRING([--with-system-firebird],
2153         [Use Firebird libraries already on system, for building the Firebird-SDBC
2154          driver. If fb_config is not in PATH, use FBCONFIG to point to it.]),,
2155     [with_system_firebird="$with_system_libs"])
2157 AC_ARG_WITH(system-libtommath,
2158             AS_HELP_STRING([--with-system-libtommath],
2159                            [Use libtommath already on system]),,
2160             [with_system_libtommath="$with_system_libs"])
2162 AC_ARG_WITH(system-hsqldb,
2163     AS_HELP_STRING([--with-system-hsqldb],
2164         [Use hsqldb already on system.]))
2166 AC_ARG_WITH(hsqldb-jar,
2167     AS_HELP_STRING([--with-hsqldb-jar=JARFILE],
2168         [Specify path to jarfile manually.]),
2169     HSQLDB_JAR=$withval)
2171 libo_FUZZ_ARG_ENABLE(scripting-beanshell,
2172     AS_HELP_STRING([--disable-scripting-beanshell],
2173         [Disable support for scripts in BeanShell.]),
2177 AC_ARG_WITH(system-beanshell,
2178     AS_HELP_STRING([--with-system-beanshell],
2179         [Use beanshell already on system.]),,
2180     [with_system_beanshell="$with_system_jars"])
2182 AC_ARG_WITH(beanshell-jar,
2183     AS_HELP_STRING([--with-beanshell-jar=JARFILE],
2184         [Specify path to jarfile manually.]),
2185     BSH_JAR=$withval)
2187 libo_FUZZ_ARG_ENABLE(scripting-javascript,
2188     AS_HELP_STRING([--disable-scripting-javascript],
2189         [Disable support for scripts in JavaScript.]),
2193 AC_ARG_WITH(system-rhino,
2194     AS_HELP_STRING([--with-system-rhino],
2195         [Use rhino already on system.]),,)
2196 #    [with_system_rhino="$with_system_jars"])
2197 # Above is not used as we have different debug interface
2198 # patched into internal rhino. This code needs to be fixed
2199 # before we can enable it by default.
2201 AC_ARG_WITH(rhino-jar,
2202     AS_HELP_STRING([--with-rhino-jar=JARFILE],
2203         [Specify path to jarfile manually.]),
2204     RHINO_JAR=$withval)
2206 AC_ARG_WITH(system-jfreereport,
2207     AS_HELP_STRING([--with-system-jfreereport],
2208         [Use JFreeReport already on system.]),,
2209     [with_system_jfreereport="$with_system_jars"])
2211 AC_ARG_WITH(sac-jar,
2212     AS_HELP_STRING([--with-sac-jar=JARFILE],
2213         [Specify path to jarfile manually.]),
2214     SAC_JAR=$withval)
2216 AC_ARG_WITH(libxml-jar,
2217     AS_HELP_STRING([--with-libxml-jar=JARFILE],
2218         [Specify path to jarfile manually.]),
2219     LIBXML_JAR=$withval)
2221 AC_ARG_WITH(flute-jar,
2222     AS_HELP_STRING([--with-flute-jar=JARFILE],
2223         [Specify path to jarfile manually.]),
2224     FLUTE_JAR=$withval)
2226 AC_ARG_WITH(jfreereport-jar,
2227     AS_HELP_STRING([--with-jfreereport-jar=JARFILE],
2228         [Specify path to jarfile manually.]),
2229     JFREEREPORT_JAR=$withval)
2231 AC_ARG_WITH(liblayout-jar,
2232     AS_HELP_STRING([--with-liblayout-jar=JARFILE],
2233         [Specify path to jarfile manually.]),
2234     LIBLAYOUT_JAR=$withval)
2236 AC_ARG_WITH(libloader-jar,
2237     AS_HELP_STRING([--with-libloader-jar=JARFILE],
2238         [Specify path to jarfile manually.]),
2239     LIBLOADER_JAR=$withval)
2241 AC_ARG_WITH(libformula-jar,
2242     AS_HELP_STRING([--with-libformula-jar=JARFILE],
2243         [Specify path to jarfile manually.]),
2244     LIBFORMULA_JAR=$withval)
2246 AC_ARG_WITH(librepository-jar,
2247     AS_HELP_STRING([--with-librepository-jar=JARFILE],
2248         [Specify path to jarfile manually.]),
2249     LIBREPOSITORY_JAR=$withval)
2251 AC_ARG_WITH(libfonts-jar,
2252     AS_HELP_STRING([--with-libfonts-jar=JARFILE],
2253         [Specify path to jarfile manually.]),
2254     LIBFONTS_JAR=$withval)
2256 AC_ARG_WITH(libserializer-jar,
2257     AS_HELP_STRING([--with-libserializer-jar=JARFILE],
2258         [Specify path to jarfile manually.]),
2259     LIBSERIALIZER_JAR=$withval)
2261 AC_ARG_WITH(libbase-jar,
2262     AS_HELP_STRING([--with-libbase-jar=JARFILE],
2263         [Specify path to jarfile manually.]),
2264     LIBBASE_JAR=$withval)
2266 AC_ARG_WITH(system-odbc,
2267     AS_HELP_STRING([--with-system-odbc],
2268         [Use the odbc headers already on system.]),,
2269     [with_system_odbc="auto"])
2271 AC_ARG_WITH(system-sane,
2272     AS_HELP_STRING([--with-system-sane],
2273         [Use sane.h already on system.]),,
2274     [with_system_sane="$with_system_headers"])
2276 AC_ARG_WITH(system-bluez,
2277     AS_HELP_STRING([--with-system-bluez],
2278         [Use bluetooth.h already on system.]),,
2279     [with_system_bluez="$with_system_headers"])
2281 AC_ARG_WITH(system-curl,
2282     AS_HELP_STRING([--with-system-curl],
2283         [Use curl already on system.]),,
2284     [with_system_curl=auto])
2286 AC_ARG_WITH(system-boost,
2287     AS_HELP_STRING([--with-system-boost],
2288         [Use boost already on system.]),,
2289     [with_system_boost="$with_system_headers"])
2291 AC_ARG_WITH(system-glm,
2292     AS_HELP_STRING([--with-system-glm],
2293         [Use glm already on system.]),,
2294     [with_system_glm="$with_system_headers"])
2296 AC_ARG_WITH(system-hunspell,
2297     AS_HELP_STRING([--with-system-hunspell],
2298         [Use libhunspell already on system.]),,
2299     [with_system_hunspell="$with_system_libs"])
2301 libo_FUZZ_ARG_ENABLE(zxing,
2302     AS_HELP_STRING([--disable-zxing],
2303        [Disable use of zxing external library.]))
2305 AC_ARG_WITH(system-zxing,
2306     AS_HELP_STRING([--with-system-zxing],
2307         [Use libzxing already on system.]),,
2308     [with_system_zxing="$with_system_libs"])
2310 AC_ARG_WITH(system-box2d,
2311     AS_HELP_STRING([--with-system-box2d],
2312         [Use box2d already on system.]),,
2313     [with_system_box2d="$with_system_libs"])
2315 AC_ARG_WITH(system-mythes,
2316     AS_HELP_STRING([--with-system-mythes],
2317         [Use mythes already on system.]),,
2318     [with_system_mythes="$with_system_libs"])
2320 AC_ARG_WITH(system-altlinuxhyph,
2321     AS_HELP_STRING([--with-system-altlinuxhyph],
2322         [Use ALTLinuxhyph already on system.]),,
2323     [with_system_altlinuxhyph="$with_system_libs"])
2325 AC_ARG_WITH(system-lpsolve,
2326     AS_HELP_STRING([--with-system-lpsolve],
2327         [Use lpsolve already on system.]),,
2328     [with_system_lpsolve="$with_system_libs"])
2330 AC_ARG_WITH(system-coinmp,
2331     AS_HELP_STRING([--with-system-coinmp],
2332         [Use CoinMP already on system.]),,
2333     [with_system_coinmp="$with_system_libs"])
2335 AC_ARG_WITH(system-liblangtag,
2336     AS_HELP_STRING([--with-system-liblangtag],
2337         [Use liblangtag library already on system.]),,
2338     [with_system_liblangtag="$with_system_libs"])
2340 AC_ARG_WITH(webdav,
2341     AS_HELP_STRING([--with-webdav],
2342         [Specify which library to use for webdav implementation.
2343          Possible values: "neon", "serf", "no". The default value is "neon".
2344          Example: --with-webdav="serf"]),
2345     WITH_WEBDAV=$withval,
2346     WITH_WEBDAV="neon")
2348 AC_ARG_WITH(linker-hash-style,
2349     AS_HELP_STRING([--with-linker-hash-style],
2350         [Use linker with --hash-style=<style> when linking shared objects.
2351          Possible values: "sysv", "gnu", "both". The default value is "gnu"
2352          if supported on the build system, and "sysv" otherwise.]))
2354 AC_ARG_WITH(jdk-home,
2355     AS_HELP_STRING([--with-jdk-home=<absolute path to JDK home>],
2356         [If you have installed JDK 9 or later on your system please supply the
2357          path here. Note that this is not the location of the java command but the
2358          location of the entire distribution. In case of cross-compiling, this
2359          is the JDK of the host os. Use --with-build-platform-configure-options
2360          to point to a different build platform JDK.]),
2363 AC_ARG_WITH(help,
2364     AS_HELP_STRING([--with-help],
2365         [Enable the build of help. There is a special parameter "common" that
2366          can be used to bundle only the common part, .e.g help-specific icons.
2367          This is useful when you build the helpcontent separately.])
2368     [
2369                           Usage:     --with-help    build the old local help
2370                                  --without-help     no local help (default)
2371                                  --with-help=html   build the new HTML local help
2372                                  --with-help=online build the new HTML online help
2373     ],
2376 AC_ARG_WITH(omindex,
2377    AS_HELP_STRING([--with-omindex],
2378         [Enable the support of xapian-omega index for online help.])
2379    [
2380                          Usage: --with-omindex=server prepare the pages for omindex
2381                                 but let xapian-omega be built in server.
2382                                 --with-omindex=noxap do not prepare online pages
2383                                 for xapian-omega
2384   ],
2387 libo_FUZZ_ARG_WITH(java,
2388     AS_HELP_STRING([--with-java=<java command>],
2389         [Specify the name of the Java interpreter command. Typically "java"
2390          which is the default.
2392          To build without support for Java components, applets, accessibility
2393          or the XML filters written in Java, use --without-java or --with-java=no.]),
2394     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ],
2395     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ]
2398 AC_ARG_WITH(jvm-path,
2399     AS_HELP_STRING([--with-jvm-path=<absolute path to parent of jvm home>],
2400         [Use a specific JVM search path at runtime.
2401          e.g. use --with-jvm-path=/usr/lib/ to find JRE/JDK in /usr/lib/jvm/]),
2404 AC_ARG_WITH(ant-home,
2405     AS_HELP_STRING([--with-ant-home=<absolute path to Ant home>],
2406         [If you have installed Apache Ant on your system, please supply the path here.
2407          Note that this is not the location of the Ant binary but the location
2408          of the entire distribution.]),
2411 AC_ARG_WITH(symbol-config,
2412     AS_HELP_STRING([--with-symbol-config],
2413         [Configuration for the crashreport symbol upload]),
2414         [],
2415         [with_symbol_config=no])
2417 AC_ARG_WITH(export-validation,
2418     AS_HELP_STRING([--without-export-validation],
2419         [Disable validating OOXML and ODF files as exported from in-tree tests.]),
2420 ,with_export_validation=auto)
2422 AC_ARG_WITH(bffvalidator,
2423     AS_HELP_STRING([--with-bffvalidator=<absolute path to BFFValidator>],
2424         [Enables export validation for Microsoft Binary formats (doc, xls, ppt).
2425          Requires installed Microsoft Office Binary File Format Validator.
2426          Note: export-validation (--with-export-validation) is required to be turned on.
2427          See https://www.microsoft.com/en-us/download/details.aspx?id=26794]),
2428 ,with_bffvalidator=no)
2430 libo_FUZZ_ARG_WITH(junit,
2431     AS_HELP_STRING([--with-junit=<absolute path to JUnit 4 jar>],
2432         [Specifies the JUnit 4 jar file to use for JUnit-based tests.
2433          --without-junit disables those tests. Not relevant in the --without-java case.]),
2434 ,with_junit=yes)
2436 AC_ARG_WITH(hamcrest,
2437     AS_HELP_STRING([--with-hamcrest=<absolute path to hamcrest jar>],
2438         [Specifies the hamcrest jar file to use for JUnit-based tests.
2439          --without-junit disables those tests. Not relevant in the --without-java case.]),
2440 ,with_hamcrest=yes)
2442 AC_ARG_WITH(perl-home,
2443     AS_HELP_STRING([--with-perl-home=<abs. path to Perl 5 home>],
2444         [If you have installed Perl 5 Distribution, on your system, please
2445          supply the path here. Note that this is not the location of the Perl
2446          binary but the location of the entire distribution.]),
2449 libo_FUZZ_ARG_WITH(doxygen,
2450     AS_HELP_STRING(
2451         [--with-doxygen=<absolute path to doxygen executable>],
2452         [Specifies the doxygen executable to use when generating ODK C/C++
2453          documentation. --without-doxygen disables generation of ODK C/C++
2454          documentation. Not relevant in the --disable-odk case.]),
2455 ,with_doxygen=yes)
2457 AC_ARG_WITH(visual-studio,
2458     AS_HELP_STRING([--with-visual-studio=<2019>],
2459         [Specify which Visual Studio version to use in case several are
2460          installed. Currently only 2019 (default) is supported.]),
2463 AC_ARG_WITH(windows-sdk,
2464     AS_HELP_STRING([--with-windows-sdk=<8.0(A)/8.1(A)/10.0>],
2465         [Specify which Windows SDK, or "Windows Kit", version to use
2466          in case the one that came with the selected Visual Studio
2467          is not what you want for some reason. Note that not all compiler/SDK
2468          combinations are supported. The intent is that this option should not
2469          be needed.]),
2472 AC_ARG_WITH(lang,
2473     AS_HELP_STRING([--with-lang="es sw tu cs sk"],
2474         [Use this option to build LibreOffice with additional UI language support.
2475          English (US) is always included by default.
2476          Separate multiple languages with space.
2477          For all languages, use --with-lang=ALL.]),
2480 AC_ARG_WITH(locales,
2481     AS_HELP_STRING([--with-locales="en es pt fr zh kr ja"],
2482         [Use this option to limit the locale information built in.
2483          Separate multiple locales with space.
2484          Very experimental and might well break stuff.
2485          Just a desperate measure to shrink code and data size.
2486          By default all the locales available is included.
2487          This option is completely unrelated to --with-lang.])
2488     [
2489                           Affects also our character encoding conversion
2490                           tables for encodings mainly targeted for a
2491                           particular locale, like EUC-CN and EUC-TW for
2492                           zh, ISO-2022-JP for ja.
2494                           Affects also our add-on break iterator data for
2495                           some languages.
2497                           For the default, all locales, don't use this switch at all.
2498                           Specifying just the language part of a locale means all matching
2499                           locales will be included.
2500     ],
2503 # Kerberos and GSSAPI used only by PostgreSQL as of LibO 3.5
2504 libo_FUZZ_ARG_WITH(krb5,
2505     AS_HELP_STRING([--with-krb5],
2506         [Enable MIT Kerberos 5 support in modules that support it.
2507          By default automatically enabled on platforms
2508          where a good system Kerberos 5 is available.]),
2511 libo_FUZZ_ARG_WITH(gssapi,
2512     AS_HELP_STRING([--with-gssapi],
2513         [Enable GSSAPI support in modules that support it.
2514          By default automatically enabled on platforms
2515          where a good system GSSAPI is available.]),
2518 AC_ARG_WITH(iwyu,
2519     AS_HELP_STRING([--with-iwyu],
2520         [Use given IWYU binary path to check unneeded includes instead of building.
2521          Use only if you are hacking on it.]),
2524 libo_FUZZ_ARG_WITH(lxml,
2525     AS_HELP_STRING([--without-lxml],
2526         [gla11y will use python lxml when available, potentially building a local copy if necessary.
2527          --without-lxml tells it to not use python lxml at all, which means that gla11y will only
2528          report widget classes and ids.]),
2531 libo_FUZZ_ARG_WITH(latest-c++,
2532     AS_HELP_STRING([--with-latest-c++],
2533         [Try to enable the latest features of the C++ compiler, even if they are not yet part of a
2534          published standard.]),,
2535         [with_latest_c__=no])
2537 dnl ===================================================================
2538 dnl Branding
2539 dnl ===================================================================
2541 AC_ARG_WITH(branding,
2542     AS_HELP_STRING([--with-branding=/path/to/images],
2543         [Use given path to retrieve branding images set.])
2544     [
2545                           Search for intro.png about.svg and logo.svg.
2546                           If any is missing, default ones will be used instead.
2548                           Search also progress.conf for progress
2549                           settings on intro screen :
2551                           PROGRESSBARCOLOR="255,255,255" Set color of
2552                           progress bar. Comma separated RGB decimal values.
2553                           PROGRESSSIZE="407,6" Set size of progress bar.
2554                           Comma separated decimal values (width, height).
2555                           PROGRESSPOSITION="61,317" Set position of progress
2556                           bar from left,top. Comma separated decimal values.
2557                           PROGRESSFRAMECOLOR="20,136,3" Set color of progress
2558                           bar frame. Comma separated RGB decimal values.
2559                           PROGRESSTEXTCOLOR="0,0,0" Set color of progress
2560                           bar text. Comma separated RGB decimal values.
2561                           PROGRESSTEXTBASELINE="287" Set vertical position of
2562                           progress bar text from top. Decimal value.
2564                           Default values will be used if not found.
2565     ],
2569 AC_ARG_WITH(extra-buildid,
2570     AS_HELP_STRING([--with-extra-buildid="Tinderbox: Win-x86@6, Branch:master, Date:2012-11-26_00.29.34"],
2571         [Show addition build identification in about dialog.]),
2575 AC_ARG_WITH(vendor,
2576     AS_HELP_STRING([--with-vendor="John the Builder"],
2577         [Set vendor of the build.]),
2580 AC_ARG_WITH(android-package-name,
2581     AS_HELP_STRING([--with-android-package-name="org.libreoffice"],
2582         [Set Android package name of the build.]),
2585 AC_ARG_WITH(compat-oowrappers,
2586     AS_HELP_STRING([--with-compat-oowrappers],
2587         [Install oo* wrappers in parallel with
2588          lo* ones to keep backward compatibility.
2589          Has effect only with make distro-pack-install]),
2592 AC_ARG_WITH(os-version,
2593     AS_HELP_STRING([--with-os-version=<OSVERSION>],
2594         [For FreeBSD users, use this option to override the detected OSVERSION.]),
2597 AC_ARG_WITH(idlc-cpp,
2598     AS_HELP_STRING([--with-idlc-cpp=<cpp/ucpp>],
2599         [Specify the C Preprocessor to use for idlc. Default is ucpp.]),
2602 AC_ARG_WITH(parallelism,
2603     AS_HELP_STRING([--with-parallelism],
2604         [Number of jobs to run simultaneously during build. Parallel builds can
2605         save a lot of time on multi-cpu machines. Defaults to the number of
2606         CPUs on the machine, unless you configure --enable-icecream - then to
2607         40.]),
2610 AC_ARG_WITH(all-tarballs,
2611     AS_HELP_STRING([--with-all-tarballs],
2612         [Download all external tarballs unconditionally]))
2614 AC_ARG_WITH(gdrive-client-id,
2615     AS_HELP_STRING([--with-gdrive-client-id],
2616         [Provides the client id of the application for OAuth2 authentication
2617         on Google Drive. If either this or --with-gdrive-client-secret is
2618         empty, the feature will be disabled]),
2621 AC_ARG_WITH(gdrive-client-secret,
2622     AS_HELP_STRING([--with-gdrive-client-secret],
2623         [Provides the client secret of the application for OAuth2
2624         authentication on Google Drive. If either this or
2625         --with-gdrive-client-id is empty, the feature will be disabled]),
2628 AC_ARG_WITH(alfresco-cloud-client-id,
2629     AS_HELP_STRING([--with-alfresco-cloud-client-id],
2630         [Provides the client id of the application for OAuth2 authentication
2631         on Alfresco Cloud. If either this or --with-alfresco-cloud-client-secret is
2632         empty, the feature will be disabled]),
2635 AC_ARG_WITH(alfresco-cloud-client-secret,
2636     AS_HELP_STRING([--with-alfresco-cloud-client-secret],
2637         [Provides the client secret of the application for OAuth2
2638         authentication on Alfresco Cloud. If either this or
2639         --with-alfresco-cloud-client-id is empty, the feature will be disabled]),
2642 AC_ARG_WITH(onedrive-client-id,
2643     AS_HELP_STRING([--with-onedrive-client-id],
2644         [Provides the client id of the application for OAuth2 authentication
2645         on OneDrive. If either this or --with-onedrive-client-secret is
2646         empty, the feature will be disabled]),
2649 AC_ARG_WITH(onedrive-client-secret,
2650     AS_HELP_STRING([--with-onedrive-client-secret],
2651         [Provides the client secret of the application for OAuth2
2652         authentication on OneDrive. If either this or
2653         --with-onedrive-client-id is empty, the feature will be disabled]),
2655 dnl ===================================================================
2656 dnl Do we want to use pre-build binary tarball for recompile
2657 dnl ===================================================================
2659 if test "$enable_library_bin_tar" = "yes" ; then
2660     USE_LIBRARY_BIN_TAR=TRUE
2661 else
2662     USE_LIBRARY_BIN_TAR=
2664 AC_SUBST(USE_LIBRARY_BIN_TAR)
2666 dnl ===================================================================
2667 dnl Test whether build target is Release Build
2668 dnl ===================================================================
2669 AC_MSG_CHECKING([whether build target is Release Build])
2670 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
2671     AC_MSG_RESULT([no])
2672     ENABLE_RELEASE_BUILD=
2673     GET_TASK_ALLOW_ENTITLEMENT='
2674         <!-- We want to be able to debug a hardened process when not building for release -->
2675         <key>com.apple.security.get-task-allow</key>
2676         <true/>'
2677 else
2678     AC_MSG_RESULT([yes])
2679     ENABLE_RELEASE_BUILD=TRUE
2680     GET_TASK_ALLOW_ENTITLEMENT=''
2682 AC_SUBST(ENABLE_RELEASE_BUILD)
2683 AC_SUBST(GET_TASK_ALLOW_ENTITLEMENT)
2685 AC_MSG_CHECKING([whether to build a Community flavor])
2686 if test -z "$enable_community_flavor" -o "$enable_community_flavor" == "yes"; then
2687     AC_DEFINE(HAVE_FEATURE_COMMUNITY_FLAVOR)
2688     AC_MSG_RESULT([yes])
2689 else
2690     AC_MSG_RESULT([no])
2693 dnl ===================================================================
2694 dnl Test whether to sign Windows Build
2695 dnl ===================================================================
2696 AC_MSG_CHECKING([whether to sign windows build])
2697 if test "$enable_windows_build_signing" = "yes" -a "$_os" = "WINNT"; then
2698     AC_MSG_RESULT([yes])
2699     WINDOWS_BUILD_SIGNING="TRUE"
2700 else
2701     AC_MSG_RESULT([no])
2702     WINDOWS_BUILD_SIGNING="FALSE"
2704 AC_SUBST(WINDOWS_BUILD_SIGNING)
2706 dnl ===================================================================
2707 dnl MacOSX build and runtime environment options
2708 dnl ===================================================================
2710 AC_ARG_WITH(macosx-sdk,
2711     AS_HELP_STRING([--with-macosx-sdk=<version>],
2712         [Prefer a specific SDK for building.])
2713     [
2714                           If the requested SDK is not available, a search for the oldest one will be done.
2715                           With current Xcode versions, only the latest SDK is included, so this option is
2716                           not terribly useful. It works fine to build with a new SDK and run the result
2717                           on an older OS.
2719                           e. g.: --with-macosx-sdk=10.10
2721                           there are 3 options to control the MacOSX build:
2722                           --with-macosx-sdk (referred as 'sdk' below)
2723                           --with-macosx-version-min-required (referred as 'min' below)
2724                           --with-macosx-version-max-allowed (referred as 'max' below)
2726                           the connection between these value and the default they take is as follow:
2727                           ( ? means not specified on the command line, s means the SDK version found,
2728                           constraint: 8 <= x <= y <= z)
2730                           ==========================================
2731                            command line      || config result
2732                           ==========================================
2733                           min  | max  | sdk  || min   | max  | sdk  |
2734                           ?    | ?    | ?    || 10.10 | 10.s | 10.s |
2735                           ?    | ?    | 10.x || 10.10 | 10.x | 10.x |
2736                           ?    | 10.x | ?    || 10.10 | 10.s | 10.s |
2737                           ?    | 10.x | 10.y || 10.10 | 10.x | 10.y |
2738                           10.x | ?    | ?    || 10.x  | 10.s | 10.s |
2739                           10.x | ?    | 10.y || 10.x  | 10.y | 10.y |
2740                           10.x | 10.y | ?    || 10.x  | 10.y | 10.y |
2741                           10.x | 10.y | 10.z || 10.x  | 10.y | 10.z |
2744                           see: http://developer.apple.com/library/mac/#technotes/tn2064/_index.html
2745                           for a detailed technical explanation of these variables
2747                           Note: MACOSX_DEPLOYMENT_TARGET will be set to the value of 'min'.
2748     ],
2751 AC_ARG_WITH(macosx-version-min-required,
2752     AS_HELP_STRING([--with-macosx-version-min-required=<version>],
2753         [set the minimum OS version needed to run the built LibreOffice])
2754     [
2755                           e. g.: --with-macosx-version-min-required=10.10
2756                           see --with-macosx-sdk for more info
2757     ],
2760 AC_ARG_WITH(macosx-version-max-allowed,
2761     AS_HELP_STRING([--with-macosx-version-max-allowed=<version>],
2762         [set the maximum allowed OS version the LibreOffice compilation can use APIs from])
2763     [
2764                           e. g.: --with-macosx-version-max-allowed=10.10
2765                           see --with-macosx-sdk for more info
2766     ],
2770 dnl ===================================================================
2771 dnl options for stuff used during cross-compilation build
2772 dnl Not quite superseded by --with-build-platform-configure-options.
2773 dnl TODO: check, if the "force" option is still needed anywhere.
2774 dnl ===================================================================
2776 AC_ARG_WITH(system-icu-for-build,
2777     AS_HELP_STRING([--with-system-icu-for-build=yes/no/force],
2778         [Use icu already on system for build tools (cross-compilation only).]))
2781 dnl ===================================================================
2782 dnl Check for incompatible options set by fuzzing, and reset those
2783 dnl automatically to working combinations
2784 dnl ===================================================================
2786 if test "$libo_fuzzed_enable_dbus" = yes -a "$libo_fuzzed_enable_avahi" -a \
2787         "$enable_dbus" != "$enable_avahi"; then
2788     AC_MSG_NOTICE([Resetting --enable-avahi=$enable_dbus])
2789     enable_avahi=$enable_dbus
2792 add_lopath_after ()
2794     if ! echo "$LO_PATH" | $EGREP -q "(^|${P_SEP})$1($|${P_SEP})"; then
2795         LO_PATH="${LO_PATH:+$LO_PATH$P_SEP}$1"
2796     fi
2799 add_lopath_before ()
2801     local IFS=${P_SEP}
2802     local path_cleanup
2803     local dir
2804     for dir in $LO_PATH ; do
2805         if test "$dir" != "$1" ; then
2806             path_cleanup=${path_cleanup:+$path_cleanup$P_SEP}$dir
2807         fi
2808     done
2809     LO_PATH="$1${path_cleanup:+$P_SEP$path_cleanup}"
2812 dnl ===================================================================
2813 dnl check for required programs (grep, awk, sed, bash)
2814 dnl ===================================================================
2816 pathmunge ()
2818     local new_path
2819     if test -n "$1"; then
2820         if test "$build_os" = "cygwin"; then
2821             if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
2822                 PathFormat "$1"
2823                 new_path=`cygpath -sm "$formatted_path"`
2824             else
2825                 PathFormat "$1"
2826                 new_path=`cygpath -u "$formatted_path"`
2827             fi
2828         else
2829             new_path="$1"
2830         fi
2831         if test "$2" = "after"; then
2832             add_lopath_after "$new_path"
2833         else
2834             add_lopath_before "$new_path"
2835         fi
2836     fi
2839 AC_PROG_AWK
2840 AC_PATH_PROG( AWK, $AWK)
2841 if test -z "$AWK"; then
2842     AC_MSG_ERROR([install awk to run this script])
2845 AC_PATH_PROG(BASH, bash)
2846 if test -z "$BASH"; then
2847     AC_MSG_ERROR([bash not found in \$PATH])
2849 AC_SUBST(BASH)
2851 AC_MSG_CHECKING([for GNU or BSD tar])
2852 for a in $GNUTAR gtar gnutar bsdtar tar /usr/sfw/bin/gtar; do
2853     $a --version 2> /dev/null | egrep "GNU|bsdtar"  2>&1 > /dev/null
2854     if test $? -eq 0;  then
2855         GNUTAR=$a
2856         break
2857     fi
2858 done
2859 AC_MSG_RESULT($GNUTAR)
2860 if test -z "$GNUTAR"; then
2861     AC_MSG_ERROR([not found. install GNU or BSD tar.])
2863 AC_SUBST(GNUTAR)
2865 AC_MSG_CHECKING([for tar's option to strip components])
2866 $GNUTAR --help 2> /dev/null | egrep "bsdtar|strip-components" 2>&1 >/dev/null
2867 if test $? -eq 0; then
2868     STRIP_COMPONENTS="--strip-components"
2869 else
2870     $GNUTAR --help 2> /dev/null | egrep "strip-path" 2>&1 >/dev/null
2871     if test $? -eq 0; then
2872         STRIP_COMPONENTS="--strip-path"
2873     else
2874         STRIP_COMPONENTS="unsupported"
2875     fi
2877 AC_MSG_RESULT($STRIP_COMPONENTS)
2878 if test x$STRIP_COMPONENTS = xunsupported; then
2879     AC_MSG_ERROR([you need a tar that is able to strip components.])
2881 AC_SUBST(STRIP_COMPONENTS)
2883 dnl It is useful to have a BUILD_TYPE keyword to distinguish "normal"
2884 dnl desktop OSes from "mobile" ones.
2886 dnl We assume that a non-DESKTOP build type is also a non-NATIVE one.
2887 dnl In other words, that when building for an OS that is not a
2888 dnl "desktop" one but a "mobile" one, we are always cross-compiling.
2890 dnl Note the direction of the implication; there is no assumption that
2891 dnl cross-compiling would imply a non-desktop OS.
2893 if test $_os != iOS -a $_os != Android -a $_os != Emscripten -a "$enable_fuzzers" != "yes"; then
2894     BUILD_TYPE="$BUILD_TYPE DESKTOP"
2895     AC_DEFINE(HAVE_FEATURE_DESKTOP)
2896     AC_DEFINE(HAVE_FEATURE_MULTIUSER_ENVIRONMENT)
2899 # Whether to build "avmedia" functionality or not.
2901 if test -z "$enable_avmedia"; then
2902     enable_avmedia=yes
2905 BUILD_TYPE="$BUILD_TYPE AVMEDIA"
2906 if test "$enable_avmedia" = yes; then
2907     AC_DEFINE(HAVE_FEATURE_AVMEDIA)
2908 else
2909     USE_AVMEDIA_DUMMY='TRUE'
2911 AC_SUBST(USE_AVMEDIA_DUMMY)
2913 # Decide whether to build database connectivity stuff (including
2914 # Base) or not. We probably don't want to on non-desktop OSes.
2915 if test -z "$enable_database_connectivity"; then
2916     # --disable-database-connectivity is unfinished work in progress
2917     # and the iOS test app doesn't link if we actually try to use it.
2918     # if test $_os != iOS -a $_os != Android; then
2919     if test $_os != iOS; then
2920         enable_database_connectivity=yes
2921     fi
2924 if test "$enable_database_connectivity" = yes; then
2925     BUILD_TYPE="$BUILD_TYPE DBCONNECTIVITY"
2926     AC_DEFINE(HAVE_FEATURE_DBCONNECTIVITY)
2929 if test -z "$enable_extensions"; then
2930     # For iOS and Android Viewer, disable extensions unless specifically overridden with --enable-extensions.
2931     if test $_os != iOS && test $_os != Android -o "$ENABLE_ANDROID_LOK" = TRUE ; then
2932         enable_extensions=yes
2933     fi
2936 if test "$enable_extensions" = yes; then
2937     BUILD_TYPE="$BUILD_TYPE EXTENSIONS"
2938     AC_DEFINE(HAVE_FEATURE_EXTENSIONS)
2941 if test -z "$enable_scripting"; then
2942     # Disable scripting for iOS unless specifically overridden
2943     # with --enable-scripting.
2944     if test $_os != iOS -o $_os = Emscripten; then
2945         enable_scripting=yes
2946     fi
2949 DISABLE_SCRIPTING=''
2950 if test "$enable_scripting" = yes; then
2951     BUILD_TYPE="$BUILD_TYPE SCRIPTING"
2952     AC_DEFINE(HAVE_FEATURE_SCRIPTING)
2953 else
2954     DISABLE_SCRIPTING='TRUE'
2955     SCPDEFS="$SCPDEFS -DDISABLE_SCRIPTING"
2958 if test $_os = iOS -o $_os = Android -o $_os = Emscripten; then
2959     # Disable dynamic_loading always for iOS and Android
2960     enable_dynamic_loading=no
2961 elif test -z "$enable_dynamic_loading"; then
2962     # Otherwise enable it unless specifically disabled
2963     enable_dynamic_loading=yes
2966 DISABLE_DYNLOADING=''
2967 if test "$enable_dynamic_loading" = yes; then
2968     BUILD_TYPE="$BUILD_TYPE DYNLOADING"
2969 else
2970     DISABLE_DYNLOADING='TRUE'
2972 AC_SUBST(DISABLE_DYNLOADING)
2974 # remember SYSBASE value
2975 AC_SUBST(SYSBASE)
2977 dnl ===================================================================
2978 dnl  Sort out various gallery compilation options
2979 dnl ===================================================================
2980 WITH_GALLERY_BUILD=TRUE
2981 AC_MSG_CHECKING([how to build and package galleries])
2982 if test -n "${with_galleries}"; then
2983     if test "$with_galleries" = "build"; then
2984         AC_MSG_RESULT([build from source images internally])
2985     elif test "$with_galleries" = "no"; then
2986         WITH_GALLERY_BUILD=
2987         AC_MSG_RESULT([disable non-internal gallery build])
2988     else
2989         AC_MSG_ERROR([unknown value --with-galleries=$with_galleries])
2990     fi
2991 else
2992     if test $_os != iOS -a $_os != Android; then
2993         AC_MSG_RESULT([internal src images for desktop])
2994     else
2995         WITH_GALLERY_BUILD=
2996         AC_MSG_RESULT([disable src image build])
2997     fi
2999 AC_SUBST(WITH_GALLERY_BUILD)
3001 dnl ===================================================================
3002 dnl  Checks if ccache is available
3003 dnl ===================================================================
3004 CCACHE_DEPEND_MODE=
3005 if test "$enable_ccache" = "no"; then
3006     CCACHE=""
3007 elif test "$_os" = "WINNT"; then
3008     # on windows/VC build do not use ccache - but perhaps sccache is around?
3009     case "%$CC%$CXX%" in
3010     # If $CC and/or $CXX already contain "sccache" (possibly suffixed with some version number etc),
3011     # assume that's good then
3012     *%sccache[[-_' ']]*|*/sccache[[-_' ']]*)
3013         AC_MSG_NOTICE([sccache seems to be included in a pre-defined CC and/or CXX])
3014         CCACHE_DEPEND_MODE=1
3015         ;;
3016     *)
3017         # for sharing code below, reuse CCACHE env var
3018         AC_PATH_PROG([CCACHE],[sccache],[not found])
3019         if test "$CCACHE" = "not found"; then
3020             CCACHE=""
3021         else
3022             CCACHE=`win_short_path_for_make "$CCACHE"`
3023             CCACHE_DEPEND_MODE=1
3024         fi
3025         ;;
3026     esac
3027 elif test -n "$enable_ccache" -o \( "$enable_ccache" = "" -a "$enable_icecream" != "yes" \); then
3028     case "%$CC%$CXX%" in
3029     # If $CC and/or $CXX already contain "ccache" (possibly suffixed with some version number etc),
3030     # assume that's good then
3031     *%ccache[[-_' ']]*|*/ccache[[-_' ']]*)
3032         AC_MSG_NOTICE([ccache seems to be included in a pre-defined CC and/or CXX])
3033         CCACHE_DEPEND_MODE=1
3034         ;;
3035     *)
3036         AC_PATH_PROG([CCACHE],[ccache],[not found])
3037         if test "$CCACHE" = "not found"; then
3038             CCACHE=""
3039         else
3040             CCACHE_DEPEND_MODE=1
3041             # Need to check for ccache version: otherwise prevents
3042             # caching of the results (like "-x objective-c++" for Mac)
3043             if test $_os = Darwin -o $_os = iOS; then
3044                 # Check ccache version
3045                 AC_MSG_CHECKING([whether version of ccache is suitable])
3046                 CCACHE_VERSION=`"$CCACHE" -V | "$AWK" '/^ccache version/{print $3}'`
3047                 CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
3048                 if test "$CCACHE_VERSION" = "2.4_OOo" -o "$CCACHE_NUMVER" -ge "030100"; then
3049                     AC_MSG_RESULT([yes, $CCACHE_VERSION])
3050                 else
3051                     AC_MSG_RESULT([no, $CCACHE_VERSION])
3052                     CCACHE=""
3053                     CCACHE_DEPEND_MODE=
3054                 fi
3055             fi
3056         fi
3057         ;;
3058     esac
3059 else
3060     CCACHE=""
3062 if test "$enable_ccache" = "nodepend"; then
3063     CCACHE_DEPEND_MODE=""
3065 AC_SUBST(CCACHE_DEPEND_MODE)
3067 # skip on windows - sccache defaults are good enough
3068 if test "$CCACHE" != "" -a "$_os" != "WINNT"; then
3069     ccache_size_msg=$([ccache -s | tail -n 1 | sed 's/^[^0-9]*//' | sed -e 's/\.[0-9]*//'])
3070     ccache_size=$(echo "$ccache_size_msg" | grep "G" | sed -e 's/G.*$//')
3071     if test "$ccache_size" = ""; then
3072         ccache_size=$(echo "$ccache_size_msg" | grep "M" | sed -e 's/\ M.*$//')
3073         if test "$ccache_size" = ""; then
3074             ccache_size=0
3075         fi
3076         # we could not determine the size or it was less than 1GB -> disable auto-ccache
3077         if test $ccache_size -lt 1024; then
3078             CCACHE=""
3079             AC_MSG_WARN([ccache's cache size is less than 1GB using it is counter-productive: Disabling auto-ccache detection])
3080             add_warning "ccache's cache size is less than 1GB using it is counter-productive: auto-ccache detection disabled"
3081         else
3082             # warn that ccache may be too small for debug build
3083             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3084             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3085         fi
3086     else
3087         if test $ccache_size -lt 5; then
3088             #warn that ccache may be too small for debug build
3089             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3090             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3091         fi
3092     fi
3095 dnl ===================================================================
3096 dnl  Checks for C compiler,
3097 dnl  The check for the C++ compiler is later on.
3098 dnl ===================================================================
3099 if test "$_os" != "WINNT"; then
3100     GCC_HOME_SET="true"
3101     AC_MSG_CHECKING([gcc home])
3102     if test -z "$with_gcc_home"; then
3103         if test "$enable_icecream" = "yes"; then
3104             if test -d "/usr/lib/icecc/bin"; then
3105                 GCC_HOME="/usr/lib/icecc/"
3106             elif test -d "/usr/libexec/icecc/bin"; then
3107                 GCC_HOME="/usr/libexec/icecc/"
3108             elif test -d "/opt/icecream/bin"; then
3109                 GCC_HOME="/opt/icecream/"
3110             else
3111                 AC_MSG_ERROR([Could not figure out the location of icecream GCC wrappers, manually use --with-gcc-home])
3113             fi
3114         else
3115             GCC_HOME=`which gcc | $SED -e s,/bin/gcc,,`
3116             GCC_HOME_SET="false"
3117         fi
3118     else
3119         GCC_HOME="$with_gcc_home"
3120     fi
3121     AC_MSG_RESULT($GCC_HOME)
3122     AC_SUBST(GCC_HOME)
3124     if test "$GCC_HOME_SET" = "true"; then
3125         if test -z "$CC"; then
3126             CC="$GCC_HOME/bin/gcc"
3127             CC_BASE="gcc"
3128         fi
3129         if test -z "$CXX"; then
3130             CXX="$GCC_HOME/bin/g++"
3131             CXX_BASE="g++"
3132         fi
3133     fi
3136 COMPATH=`dirname "$CC"`
3137 if test "$COMPATH" = "."; then
3138     AC_PATH_PROGS(COMPATH, $CC)
3139     dnl double square bracket to get single because of M4 quote...
3140     COMPATH=`echo $COMPATH | $SED "s@/[[^/:]]*\\\$@@"`
3142 COMPATH=`echo $COMPATH | $SED "s@/[[Bb]][[Ii]][[Nn]]\\\$@@"`
3144 dnl ===================================================================
3145 dnl Java support
3146 dnl ===================================================================
3147 AC_MSG_CHECKING([whether to build with Java support])
3148 if test "$with_java" != "no"; then
3149     if test "$DISABLE_SCRIPTING" = TRUE; then
3150         AC_MSG_RESULT([no, overridden by --disable-scripting])
3151         ENABLE_JAVA=""
3152         with_java=no
3153     else
3154         AC_MSG_RESULT([yes])
3155         ENABLE_JAVA="TRUE"
3156         AC_DEFINE(HAVE_FEATURE_JAVA)
3157     fi
3158 else
3159     AC_MSG_RESULT([no])
3160     ENABLE_JAVA=""
3163 AC_SUBST(ENABLE_JAVA)
3165 dnl ENABLE_JAVA="TRUE" if we want there to be *run-time* (and build-time) support for Java
3167 dnl ENABLE_JAVA="" indicate no Java support at all
3169 dnl ===================================================================
3170 dnl Check macOS SDK and compiler
3171 dnl ===================================================================
3173 if test $_os = Darwin; then
3175     # If no --with-macosx-sdk option is given, look for one
3177     # The intent is that for "most" Mac-based developers, a suitable
3178     # SDK will be found automatically without any configure options.
3180     # For developers with a current Xcode, the lowest-numbered SDK
3181     # higher than or equal to the minimum required should be found.
3183     AC_MSG_CHECKING([what macOS SDK to use])
3184     for _macosx_sdk in ${with_macosx_sdk-11.3 11.1 11.0 10.15 10.14 10.13}; do
3185         MACOSX_SDK_PATH=`xcrun --sdk macosx${_macosx_sdk} --show-sdk-path 2> /dev/null`
3186         if test -d "$MACOSX_SDK_PATH"; then
3187             with_macosx_sdk="${_macosx_sdk}"
3188             break
3189         else
3190             MACOSX_SDK_PATH="`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${_macosx_sdk}.sdk"
3191             if test -d "$MACOSX_SDK_PATH"; then
3192                 with_macosx_sdk="${_macosx_sdk}"
3193                 break
3194             fi
3195         fi
3196     done
3197     if test ! -d "$MACOSX_SDK_PATH"; then
3198         AC_MSG_ERROR([Could not find an appropriate macOS SDK])
3199     fi
3201     AC_MSG_RESULT([SDK $with_macosx_sdk at $MACOSX_SDK_PATH])
3203     case $with_macosx_sdk in
3204     10.13)
3205         MACOSX_SDK_VERSION=101300
3206         ;;
3207     10.14)
3208         MACOSX_SDK_VERSION=101400
3209         ;;
3210     10.15)
3211         MACOSX_SDK_VERSION=101500
3212         ;;
3213     11.0)
3214         MACOSX_SDK_VERSION=110000
3215         ;;
3216     11.1)
3217         MACOSX_SDK_VERSION=110100
3218         ;;
3219     11.3)
3220         MACOSX_SDK_VERSION=110300
3221         ;;
3222     *)
3223         AC_MSG_ERROR([with-macosx-sdk $with_macosx_sdk is not a supported value, supported values are 10.13--11.3])
3224         ;;
3225     esac
3227     if test "$host_cpu" = arm64 -a $MACOSX_SDK_VERSION -lt 110000; then
3228         AC_MSG_ERROR([with-macosx-sdk $with_macosx_sdk is not a supported value for Apple Silicon])
3229     fi
3231     if test "$with_macosx_version_min_required" = "" ; then
3232         if test "$host_cpu" = x86_64; then
3233             with_macosx_version_min_required="10.10";
3234         else
3235             with_macosx_version_min_required="11.0";
3236         fi
3237     fi
3239     if test "$with_macosx_version_max_allowed" = "" ; then
3240         with_macosx_version_max_allowed="$with_macosx_sdk"
3241     fi
3243     # export this so that "xcrun" invocations later return matching values
3244     DEVELOPER_DIR="${MACOSX_SDK_PATH%/SDKs*}"
3245     DEVELOPER_DIR="${DEVELOPER_DIR%/Platforms*}"
3246     export DEVELOPER_DIR
3247     FRAMEWORKSHOME="$MACOSX_SDK_PATH/System/Library/Frameworks"
3248     MACOSX_DEPLOYMENT_TARGET="$with_macosx_version_min_required"
3250     AC_MSG_CHECKING([whether Xcode is new enough])
3251     my_xcode_ver1=$(xcrun xcodebuild -version | head -n 1)
3252     my_xcode_ver2=${my_xcode_ver1#Xcode }
3253     my_xcode_ver3=$(printf %s "$my_xcode_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
3254     if test "$my_xcode_ver3" -ge 1103; then
3255         AC_MSG_RESULT([yes ($my_xcode_ver2)])
3256     else
3257         AC_MSG_ERROR(["$my_xcode_ver1" is too old or unrecognized, must be at least Xcode 11.3])
3258     fi
3260     case "$with_macosx_version_min_required" in
3261     10.10)
3262         MAC_OS_X_VERSION_MIN_REQUIRED="101000"
3263         ;;
3264     10.11)
3265         MAC_OS_X_VERSION_MIN_REQUIRED="101100"
3266         ;;
3267     10.12)
3268         MAC_OS_X_VERSION_MIN_REQUIRED="101200"
3269         ;;
3270     10.13)
3271         MAC_OS_X_VERSION_MIN_REQUIRED="101300"
3272         ;;
3273     10.14)
3274         MAC_OS_X_VERSION_MIN_REQUIRED="101400"
3275         ;;
3276     10.15)
3277         MAC_OS_X_VERSION_MIN_REQUIRED="101500"
3278         ;;
3279     10.16)
3280         MAC_OS_X_VERSION_MIN_REQUIRED="101600"
3281         ;;
3282     11.0)
3283         MAC_OS_X_VERSION_MIN_REQUIRED="110000"
3284         ;;
3285     11.1)
3286         MAC_OS_X_VERSION_MIN_REQUIRED="110100"
3287         ;;
3288     11.3)
3289         MAC_OS_X_VERSION_MIN_REQUIRED="110300"
3290         ;;
3291     *)
3292         AC_MSG_ERROR([with-macosx-version-min-required $with_macosx_version_min_required is not a supported value, supported values are 10.10--11.3])
3293         ;;
3294     esac
3296     LIBTOOL=/usr/bin/libtool
3297     INSTALL_NAME_TOOL=install_name_tool
3298     if test -z "$save_CC"; then
3299         stdlib=-stdlib=libc++
3301         AC_MSG_CHECKING([what C compiler to use])
3302         CC="`xcrun -find clang`"
3303         CC_BASE=`first_arg_basename "$CC"`
3304         if test "$host_cpu" = x86_64; then
3305             CC+=" -target x86_64-apple-macos"
3306         else
3307             CC+=" -target arm64-apple-macos"
3308         fi
3309         CC+=" -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3310         AC_MSG_RESULT([$CC])
3312         AC_MSG_CHECKING([what C++ compiler to use])
3313         CXX="`xcrun -find clang++`"
3314         CXX_BASE=`first_arg_basename "$CXX"`
3315         if test "$host_cpu" = x86_64; then
3316             CXX+=" -target x86_64-apple-macos"
3317         else
3318             CXX+=" -target arm64-apple-macos"
3319         fi
3320         CXX+=" $stdlib -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3321         AC_MSG_RESULT([$CXX])
3323         INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3324         AR=`xcrun -find ar`
3325         NM=`xcrun -find nm`
3326         STRIP=`xcrun -find strip`
3327         LIBTOOL=`xcrun -find libtool`
3328         RANLIB=`xcrun -find ranlib`
3329     fi
3331     case "$with_macosx_version_max_allowed" in
3332     10.10)
3333         MAC_OS_X_VERSION_MAX_ALLOWED="101000"
3334         ;;
3335     10.11)
3336         MAC_OS_X_VERSION_MAX_ALLOWED="101100"
3337         ;;
3338     10.12)
3339         MAC_OS_X_VERSION_MAX_ALLOWED="101200"
3340         ;;
3341     10.13)
3342         MAC_OS_X_VERSION_MAX_ALLOWED="101300"
3343         ;;
3344     10.14)
3345         MAC_OS_X_VERSION_MAX_ALLOWED="101400"
3346         ;;
3347     10.15)
3348         MAC_OS_X_VERSION_MAX_ALLOWED="101500"
3349         ;;
3350     11.0)
3351         MAC_OS_X_VERSION_MAX_ALLOWED="110000"
3352         ;;
3353     11.1)
3354         MAC_OS_X_VERSION_MAX_ALLOWED="110100"
3355         ;;
3356     11.3)
3357         MAC_OS_X_VERSION_MAX_ALLOWED="110300"
3358         ;;
3359     *)
3360         AC_MSG_ERROR([with-macosx-version-max-allowed $with_macosx_version_max_allowed is not a supported value, supported values are 10.10--11.3])
3361         ;;
3362     esac
3364     AC_MSG_CHECKING([that macosx-version-min-required is coherent with macosx-version-max-allowed])
3365     if test $MAC_OS_X_VERSION_MIN_REQUIRED -gt $MAC_OS_X_VERSION_MAX_ALLOWED; then
3366         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])
3367     else
3368         AC_MSG_RESULT([ok])
3369     fi
3371     AC_MSG_CHECKING([that macosx-version-max-allowed is coherent with macos-with-sdk])
3372     if test $MAC_OS_X_VERSION_MAX_ALLOWED -gt $MACOSX_SDK_VERSION; then
3373         AC_MSG_ERROR([the version maximum allowed cannot be greater than the sdk level])
3374     else
3375         AC_MSG_RESULT([ok])
3376     fi
3377     AC_MSG_NOTICE([MAC_OS_X_VERSION_MIN_REQUIRED=$MAC_OS_X_VERSION_MIN_REQUIRED])
3378     AC_MSG_NOTICE([MAC_OS_X_VERSION_MAX_ALLOWED=$MAC_OS_X_VERSION_MAX_ALLOWED])
3380     AC_MSG_CHECKING([whether to do code signing])
3382     if test "$enable_macosx_code_signing" = yes; then
3383         # By default use the first suitable certificate (?).
3385         # http://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3386         # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3387         # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3388         # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3389         # "Developer ID Application" one.
3391         identity=`security find-identity -p codesigning -v 2>/dev/null | grep 'Developer ID Application:' | $AWK '{print $2}' |head -1`
3392         if test -n "$identity"; then
3393             MACOSX_CODESIGNING_IDENTITY=$identity
3394             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3395             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3396         else
3397             AC_MSG_ERROR([cannot determine identity to use])
3398         fi
3399     elif test -n "$enable_macosx_code_signing" -a "$enable_macosx_code_signing" != no ; then
3400         MACOSX_CODESIGNING_IDENTITY=$enable_macosx_code_signing
3401         pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3402         AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3403     else
3404         AC_MSG_RESULT([no])
3405     fi
3407     AC_MSG_CHECKING([whether to create a Mac App Store package])
3409     if test -z "$enable_macosx_package_signing" || test "$enable_macosx_package_signing" == no; then
3410         AC_MSG_RESULT([no])
3411     elif test -z "$MACOSX_CODESIGNING_IDENTITY"; then
3412         AC_MSG_ERROR([You forgot --enable-macosx-code-signing])
3413     elif test "$enable_macosx_package_signing" = yes; then
3414         # By default use the first suitable certificate.
3415         # It should be a "3rd Party Mac Developer Installer" one
3417         identity=`security find-identity -v 2>/dev/null | grep '3rd Party Mac Developer Installer:' | awk '{print $2}' |head -1`
3418         if test -n "$identity"; then
3419             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3420             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3421             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3422         else
3423             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3424         fi
3425     else
3426         MACOSX_PACKAGE_SIGNING_IDENTITY=$enable_macosx_package_signing
3427         pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3428         AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3429     fi
3431     if test -n "$MACOSX_CODESIGNING_IDENTITY" -a -n "$MACOSX_PACKAGE_SIGNING_IDENTITY" -a "$MACOSX_CODESIGNING_IDENTITY" = "$MACOSX_PACKAGE_SIGNING_IDENTITY"; then
3432         AC_MSG_ERROR([You should not use the same identity for code and package signing])
3433     fi
3435     AC_MSG_CHECKING([whether to sandbox the application])
3437     if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then
3438         AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java])
3439     elif test "$enable_macosx_sandbox" = yes; then
3440         ENABLE_MACOSX_SANDBOX=TRUE
3441         AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX)
3442         AC_MSG_RESULT([yes])
3443     else
3444         AC_MSG_RESULT([no])
3445     fi
3447     AC_MSG_CHECKING([what macOS app bundle identifier to use])
3448     MACOSX_BUNDLE_IDENTIFIER=$with_macosx_bundle_identifier
3449     AC_MSG_RESULT([$MACOSX_BUNDLE_IDENTIFIER])
3451 AC_SUBST(MACOSX_SDK_PATH)
3452 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3453 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3454 AC_SUBST(MAC_OS_X_VERSION_MAX_ALLOWED)
3455 AC_SUBST(INSTALL_NAME_TOOL)
3456 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3457 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3458 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3459 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3460 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3462 dnl ===================================================================
3463 dnl Check iOS SDK and compiler
3464 dnl ===================================================================
3466 if test $_os = iOS; then
3467     AC_MSG_CHECKING([what iOS SDK to use])
3468     current_sdk_ver=14.5
3469     older_sdk_vers="14.4 14.3 14.2 14.1 14.0 13.7"
3470     if test "$enable_ios_simulator" = "yes"; then
3471         platform=iPhoneSimulator
3472         versionmin=-mios-simulator-version-min=12.2
3473     else
3474         platform=iPhoneOS
3475         versionmin=-miphoneos-version-min=12.2
3476     fi
3477     xcode_developer=`xcode-select -print-path`
3479     for sdkver in $current_sdk_ver $older_sdk_vers; do
3480         t=$xcode_developer/Platforms/$platform.platform/Developer/SDKs/$platform$sdkver.sdk
3481         if test -d $t; then
3482             sysroot=$t
3483             break
3484         fi
3485     done
3487     if test -z "$sysroot"; then
3488         AC_MSG_ERROR([Could not find iOS SDK, expected something like $xcode_developer/Platforms/$platform.platform/Developer/SDKs/${platform}${current_sdk_ver}.sdk])
3489     fi
3491     AC_MSG_RESULT($sysroot)
3493     stdlib="-stdlib=libc++"
3495     AC_MSG_CHECKING([what C compiler to use])
3496     CC="`xcrun -find clang`"
3497     CC_BASE=`first_arg_basename "$CC"`
3498     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3499     AC_MSG_RESULT([$CC])
3501     AC_MSG_CHECKING([what C++ compiler to use])
3502     CXX="`xcrun -find clang++`"
3503     CXX_BASE=`first_arg_basename "$CXX"`
3504     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3505     AC_MSG_RESULT([$CXX])
3507     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3508     AR=`xcrun -find ar`
3509     NM=`xcrun -find nm`
3510     STRIP=`xcrun -find strip`
3511     LIBTOOL=`xcrun -find libtool`
3512     RANLIB=`xcrun -find ranlib`
3515 AC_MSG_CHECKING([whether to treat the installation as read-only])
3517 if test $_os = Darwin; then
3518     enable_readonly_installset=yes
3519 elif test "$enable_extensions" != yes; then
3520     enable_readonly_installset=yes
3522 if test "$enable_readonly_installset" = yes; then
3523     AC_MSG_RESULT([yes])
3524     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3525 else
3526     AC_MSG_RESULT([no])
3529 dnl ===================================================================
3530 dnl Structure of install set
3531 dnl ===================================================================
3533 if test $_os = Darwin; then
3534     LIBO_BIN_FOLDER=MacOS
3535     LIBO_ETC_FOLDER=Resources
3536     LIBO_LIBEXEC_FOLDER=MacOS
3537     LIBO_LIB_FOLDER=Frameworks
3538     LIBO_LIB_PYUNO_FOLDER=Resources
3539     LIBO_SHARE_FOLDER=Resources
3540     LIBO_SHARE_HELP_FOLDER=Resources/help
3541     LIBO_SHARE_JAVA_FOLDER=Resources/java
3542     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3543     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3544     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3545     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3546     LIBO_URE_BIN_FOLDER=MacOS
3547     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3548     LIBO_URE_LIB_FOLDER=Frameworks
3549     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3550     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3551 elif test $_os = WINNT; then
3552     LIBO_BIN_FOLDER=program
3553     LIBO_ETC_FOLDER=program
3554     LIBO_LIBEXEC_FOLDER=program
3555     LIBO_LIB_FOLDER=program
3556     LIBO_LIB_PYUNO_FOLDER=program
3557     LIBO_SHARE_FOLDER=share
3558     LIBO_SHARE_HELP_FOLDER=help
3559     LIBO_SHARE_JAVA_FOLDER=program/classes
3560     LIBO_SHARE_PRESETS_FOLDER=presets
3561     LIBO_SHARE_READMES_FOLDER=readmes
3562     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3563     LIBO_SHARE_SHELL_FOLDER=program/shell
3564     LIBO_URE_BIN_FOLDER=program
3565     LIBO_URE_ETC_FOLDER=program
3566     LIBO_URE_LIB_FOLDER=program
3567     LIBO_URE_MISC_FOLDER=program
3568     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3569 else
3570     LIBO_BIN_FOLDER=program
3571     LIBO_ETC_FOLDER=program
3572     LIBO_LIBEXEC_FOLDER=program
3573     LIBO_LIB_FOLDER=program
3574     LIBO_LIB_PYUNO_FOLDER=program
3575     LIBO_SHARE_FOLDER=share
3576     LIBO_SHARE_HELP_FOLDER=help
3577     LIBO_SHARE_JAVA_FOLDER=program/classes
3578     LIBO_SHARE_PRESETS_FOLDER=presets
3579     LIBO_SHARE_READMES_FOLDER=readmes
3580     if test "$enable_fuzzers" != yes; then
3581         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3582     else
3583         LIBO_SHARE_RESOURCE_FOLDER=resource
3584     fi
3585     LIBO_SHARE_SHELL_FOLDER=program/shell
3586     LIBO_URE_BIN_FOLDER=program
3587     LIBO_URE_ETC_FOLDER=program
3588     LIBO_URE_LIB_FOLDER=program
3589     LIBO_URE_MISC_FOLDER=program
3590     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3592 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3593 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3594 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3595 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3596 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3597 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3598 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3599 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3600 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3601 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3602 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3603 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3604 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3605 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3606 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3607 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3609 # Not all of them needed in config_host.mk, add more if need arises
3610 AC_SUBST(LIBO_BIN_FOLDER)
3611 AC_SUBST(LIBO_ETC_FOLDER)
3612 AC_SUBST(LIBO_LIB_FOLDER)
3613 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3614 AC_SUBST(LIBO_SHARE_FOLDER)
3615 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3616 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3617 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3618 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3619 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3620 AC_SUBST(LIBO_URE_BIN_FOLDER)
3621 AC_SUBST(LIBO_URE_ETC_FOLDER)
3622 AC_SUBST(LIBO_URE_LIB_FOLDER)
3623 AC_SUBST(LIBO_URE_MISC_FOLDER)
3624 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3626 dnl ===================================================================
3627 dnl Windows specific tests and stuff
3628 dnl ===================================================================
3630 reg_get_value()
3632     # Return value: $regvalue
3633     unset regvalue
3635     if test "$build_os" = "wsl"; then
3636         regvalue=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --read-registry $1 "$2" 2>/dev/null)
3637         return
3638     fi
3640     local _regentry="/proc/registry${1}/${2}"
3641     if test -f "$_regentry"; then
3642         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3643         # Registry keys read via /proc/registry* are always \0 terminated!
3644         local _regvalue=$(tr -d '\0' < "$_regentry")
3645         if test $? -eq 0; then
3646             regvalue=$_regvalue
3647         fi
3648     fi
3651 # Get a value from the 32-bit side of the Registry
3652 reg_get_value_32()
3654     reg_get_value "32" "$1"
3657 # Get a value from the 64-bit side of the Registry
3658 reg_get_value_64()
3660     reg_get_value "64" "$1"
3663 case "$host_os" in
3664 cygwin*|wsl*)
3665     COM=MSC
3666     USING_X11=
3667     OS=WNT
3668     RTL_OS=Windows
3669     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3670         P_SEP=";"
3671     else
3672         P_SEP=:
3673     fi
3674     case "$host_cpu" in
3675     x86_64)
3676         CPUNAME=X86_64
3677         RTL_ARCH=X86_64
3678         PLATFORMID=windows_x86_64
3679         WINDOWS_X64=1
3680         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
3681         WIN_HOST_ARCH="x64"
3682         WIN_MULTI_ARCH="x86"
3683         WIN_HOST_BITS=64
3684         ;;
3685     i*86)
3686         CPUNAME=INTEL
3687         RTL_ARCH=x86
3688         PLATFORMID=windows_x86
3689         WIN_HOST_ARCH="x86"
3690         WIN_HOST_BITS=32
3691         WIN_OTHER_ARCH="x64"
3692         ;;
3693     aarch64)
3694         CPUNAME=AARCH64
3695         RTL_ARCH=AARCH64
3696         PLATFORMID=windows_aarch64
3697         WINDOWS_X64=1
3698         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
3699         WIN_HOST_ARCH="arm64"
3700         WIN_HOST_BITS=64
3701         with_ucrt_dir=no
3702         ;;
3703     *)
3704         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
3705         ;;
3706     esac
3708     case "$build_cpu" in
3709     x86_64) WIN_BUILD_ARCH="x64" ;;
3710     i*86) WIN_BUILD_ARCH="x86" ;;
3711     aarch64) WIN_BUILD_ARCH="arm64" ;;
3712     *)
3713         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
3714         ;;
3715     esac
3717     SCPDEFS="$SCPDEFS -D_MSC_VER"
3718     ;;
3719 esac
3721 # multi-arch is an arch, which can execute on the host (x86 on x64), while
3722 # other-arch won't, but wouldn't break the build (x64 on x86).
3723 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
3724     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
3728 if test "$_os" = "iOS" -o "$build_cpu" != "$host_cpu"; then
3729     # To allow building Windows multi-arch releases without cross-tooling
3730     if test -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH"; then
3731         cross_compiling="yes"
3732     fi
3735 ENABLE_WASM_STRIP=''
3736 if test "$cross_compiling" = "yes"; then
3737     export CROSS_COMPILING=TRUE
3738     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
3739         ENABLE_WASM_STRIP=TRUE
3740     fi
3741 else
3742     CROSS_COMPILING=
3743     BUILD_TYPE="$BUILD_TYPE NATIVE"
3745 AC_SUBST(CROSS_COMPILING)
3746 AC_SUBST(ENABLE_WASM_STRIP)
3748 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
3749 # NOTE: must _not_ be used for bundled external libraries!
3750 ISYSTEM=
3751 if test "$GCC" = "yes"; then
3752     AC_MSG_CHECKING( for -isystem )
3753     save_CFLAGS=$CFLAGS
3754     CFLAGS="$CFLAGS -Werror"
3755     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
3756     CFLAGS=$save_CFLAGS
3757     if test -n "$ISYSTEM"; then
3758         AC_MSG_RESULT(yes)
3759     else
3760         AC_MSG_RESULT(no)
3761     fi
3763 if test -z "$ISYSTEM"; then
3764     # fall back to using -I
3765     ISYSTEM=-I
3767 AC_SUBST(ISYSTEM)
3769 dnl ===================================================================
3770 dnl  Check which Visual Studio compiler is used
3771 dnl ===================================================================
3773 map_vs_year_to_version()
3775     # Return value: $vsversion
3777     unset vsversion
3779     case $1 in
3780     2019)
3781         vsversion=16;;
3782     *)
3783         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
3784     esac
3787 vs_versions_to_check()
3789     # Args: $1 (optional) : versions to check, in the order of preference
3790     # Return value: $vsversions
3792     unset vsversions
3794     if test -n "$1"; then
3795         map_vs_year_to_version "$1"
3796         vsversions=$vsversion
3797     else
3798         # We accept only 2019
3799         vsversions="16"
3800     fi
3803 win_get_env_from_vsvars32bat()
3805     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
3806     # Also seems to be located in another directory under the same name: vsvars32.bat
3807     # https://github.com/bazelbuild/bazel/blob/master/src/main/native/build_windows_jni.sh#L56-L57
3808     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$(cygpath -w $VC_PRODUCT_DIR)" > $WRAPPERBATCHFILEPATH
3809     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
3810     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
3811     local result
3812     if test "$build_os" = "wsl"; then
3813         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
3814     else
3815         chmod +x $WRAPPERBATCHFILEPATH
3816         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
3817     fi
3818     rm -f $WRAPPERBATCHFILEPATH
3819     printf '%s' "$result"
3822 find_ucrt()
3824     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/InstallationFolder"
3825     if test -n "$regvalue"; then
3826         PathFormat "$regvalue"
3827         UCRTSDKDIR=$formatted_path_unix
3828         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion"
3829         UCRTVERSION=$regvalue
3830         # Rest if not exist
3831         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
3832           UCRTSDKDIR=
3833         fi
3834     fi
3835     if test -z "$UCRTSDKDIR"; then
3836         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
3837         ide_env_file="${ide_env_dir}VsDevCmd.bat"
3838         if test -f "$ide_env_file"; then
3839             PathFormat "$(win_get_env_from_vsvars32bat UniversalCRTSdkDir)"
3840             UCRTSDKDIR=$formatted_path
3841             UCRTVERSION=$(win_get_env_from_vsvars32bat UCRTVersion)
3842             dnl Hack needed at least by tml:
3843             if test "$UCRTVERSION" = 10.0.15063.0 \
3844                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
3845                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
3846             then
3847                 UCRTVERSION=10.0.14393.0
3848             fi
3849         else
3850           AC_MSG_ERROR([No UCRT found])
3851         fi
3852     fi
3855 find_msvc()
3857     # Find Visual C++ 2019
3858     # Args: $1 (optional) : The VS version year
3859     # Return values: $vctest, $vcyear, $vcnum, $vcnumwithdot, $vcbuildnumber
3861     unset vctest vcnum vcnumwithdot vcbuildnumber
3863     vs_versions_to_check "$1"
3864     if test "$build_os" = wsl; then
3865         vswhere="$PROGRAMFILESX86"
3866     else
3867         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
3868     fi
3869     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
3870     PathFormat "$vswhere"
3871     vswhere=$formatted_path_unix
3872     for ver in $vsversions; do
3873         vswhereoutput=`$vswhere -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3874         # Fall back to all MS products (this includes VC++ Build Tools)
3875         if ! test -n "$vswhereoutput"; then
3876             AC_MSG_CHECKING([VC++ Build Tools and similar])
3877             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3878         fi
3879         if test -n "$vswhereoutput"; then
3880             PathFormat "$vswhereoutput"
3881             vctest=$formatted_path_unix
3882             break
3883         fi
3884     done
3886     if test -n "$vctest"; then
3887         vcnumwithdot="$ver.0"
3888         case "$vcnumwithdot" in
3889         16.0)
3890             vcyear=2019
3891             vcnum=160
3892             ;;
3893         esac
3894         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
3896     fi
3899 test_cl_exe()
3901     AC_MSG_CHECKING([$1 compiler])
3903     CL_EXE_PATH="$2/cl.exe"
3905     if test ! -f "$CL_EXE_PATH"; then
3906         if test "$1" = "multi-arch"; then
3907             AC_MSG_WARN([no compiler (cl.exe) in $2])
3908             return 1
3909         else
3910             AC_MSG_ERROR([no compiler (cl.exe) in $2])
3911         fi
3912     fi
3914     dnl ===========================================================
3915     dnl  Check for the corresponding mspdb*.dll
3916     dnl ===========================================================
3918     # MSVC 15.0 has libraries from 14.0?
3919     mspdbnum="140"
3921     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
3922         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
3923     fi
3925     # The compiles has to find its shared libraries
3926     OLD_PATH="$PATH"
3927     TEMP_PATH=`cygpath -d "$2"`
3928     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
3930     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
3931         AC_MSG_ERROR([no compiler (cl.exe) in $2])
3932     fi
3934     PATH="$OLD_PATH"
3936     AC_MSG_RESULT([$CL_EXE_PATH])
3939 SOLARINC=
3940 MSBUILD_PATH=
3941 DEVENV=
3942 if test "$_os" = "WINNT"; then
3943     AC_MSG_CHECKING([Visual C++])
3944     find_msvc "$with_visual_studio"
3945     if test -z "$vctest"; then
3946         if test -n "$with_visual_studio"; then
3947             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
3948         else
3949             AC_MSG_ERROR([no Visual Studio 2019 installation found])
3950         fi
3951     fi
3952     AC_MSG_RESULT([])
3954     VC_PRODUCT_DIR="$vctest/VC"
3955     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
3957     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
3958     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
3959         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
3960         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
3961         if test $? -ne 0; then
3962             WIN_MULTI_ARCH=""
3963             WIN_OTHER_ARCH=""
3964         fi
3965     fi
3967     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
3968         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
3969         test_cl_exe "build" "$MSVC_BUILD_PATH"
3970     fi
3972     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
3973         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
3974         test_cl_exe "host" "$MSVC_HOST_PATH"
3975     else
3976         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
3977     fi
3979     AC_MSG_CHECKING([for short pathname of VC product directory])
3980     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
3981     AC_MSG_RESULT([$VC_PRODUCT_DIR])
3983     UCRTSDKDIR=
3984     UCRTVERSION=
3986     AC_MSG_CHECKING([for UCRT location])
3987     find_ucrt
3988     # find_ucrt errors out if it doesn't find it
3989     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
3990     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
3991     ucrtincpath_formatted=$formatted_path
3992     # SOLARINC is used for external modules and must be set too.
3993     # And no, it's not sufficient to set SOLARINC only, as configure
3994     # itself doesn't honour it.
3995     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
3996     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
3997     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
3998     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4000     AC_SUBST(UCRTSDKDIR)
4001     AC_SUBST(UCRTVERSION)
4003     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4004     # Find the proper version of MSBuild.exe to use based on the VS version
4005     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath
4006     if test -n "$regvalue" ; then
4007         AC_MSG_RESULT([found: $regvalue])
4008         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4009     else
4010         if test "$vcnumwithdot" = "16.0"; then
4011             if test "$WIN_BUILD_ARCH" != "x64"; then
4012                 regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4013             else
4014                 regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4015             fi
4016         else
4017             if test "$WIN_BUILD_ARCH" != "x64"; then
4018                 regvalue="$VC_PRODUCT_DIR/../MSBuild/$vcnumwithdot/Bin"
4019             else
4020                 regvalue="$VC_PRODUCT_DIR/../MSBuild/$vcnumwithdot/Bin/amd64"
4021             fi
4022         fi
4023         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4024         AC_MSG_RESULT([$regvalue])
4025     fi
4027     # Find the version of devenv.exe
4028     # MSVC 2017 devenv does not start properly from a DOS 8.3 path
4029     DEVENV=$(cygpath -lm "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe")
4030     DEVENV_unix=$(cygpath -u "$DEVENV")
4031     if test ! -e "$DEVENV_unix"; then
4032         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4033     fi
4035     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4036     dnl needed when building CLR code:
4037     if test -z "$MSVC_CXX"; then
4038         # This gives us a posix path with 8.3 filename restrictions
4039         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4040     fi
4042     if test -z "$CC"; then
4043         CC=$MSVC_CXX
4044         CC_BASE=`first_arg_basename "$CC"`
4045     fi
4046     if test -z "$CXX"; then
4047         CXX=$MSVC_CXX
4048         CXX_BASE=`first_arg_basename "$CXX"`
4049     fi
4051     if test -n "$CC"; then
4052         # Remove /cl.exe from CC case insensitive
4053         AC_MSG_NOTICE([found Visual C++ $vcyear])
4055         main_include_dir=`cygpath -d -m "$COMPATH/Include"`
4056         CPPFLAGS="$CPPFLAGS -I$main_include_dir"
4058         PathFormat "$COMPATH"
4059         COMPATH=`win_short_path_for_make "$formatted_path"`
4061         VCVER=$vcnum
4063         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4064         # are always "better", we list them in reverse chronological order.
4066         case "$vcnum" in
4067         160)
4068             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4069             ;;
4070         esac
4072         # The expectation is that --with-windows-sdk should not need to be used
4073         if test -n "$with_windows_sdk"; then
4074             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4075             *" "$with_windows_sdk" "*)
4076                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4077                 ;;
4078             *)
4079                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4080                 ;;
4081             esac
4082         fi
4084         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4085         ac_objext=obj
4086         ac_exeext=exe
4088     else
4089         AC_MSG_ERROR([Visual C++ not found after all, huh])
4090     fi
4092     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4093     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4094         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4095         // between Visual Studio versions and _MSC_VER:
4096         #if _MSC_VER < 1925
4097         #error
4098         #endif
4099     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4101     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4102     # version of the Explorer extension (and maybe other small
4103     # bits, too) needed when installing a 32-bit LibreOffice on a
4104     # 64-bit OS. The 64-bit Explorer extension is a feature that
4105     # has been present since long in OOo. Don't confuse it with
4106     # building LibreOffice itself as 64-bit code.
4108     BUILD_X64=
4109     CXX_X64_BINARY=
4111     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4112         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4113         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4114              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4115         then
4116             BUILD_X64=TRUE
4117             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4118             AC_MSG_RESULT([found])
4119         else
4120             AC_MSG_RESULT([not found])
4121             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4122         fi
4123     elif test "$WIN_HOST_ARCH" = "x64"; then
4124         CXX_X64_BINARY=$CXX
4125     fi
4126     AC_SUBST(BUILD_X64)
4128     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4129     AC_SUBST(CXX_X64_BINARY)
4131     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4132     # needed to support TWAIN scan on both 32- and 64-bit systems
4134     case "$WIN_HOST_ARCH" in
4135     x64)
4136         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4137         if test -n "$CXX_X86_BINARY"; then
4138             BUILD_X86=TRUE
4139             AC_MSG_RESULT([preset])
4140         elif test -n "$WIN_MULTI_ARCH"; then
4141             BUILD_X86=TRUE
4142             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4143             CXX_X86_BINARY+=" /arch:SSE"
4144             AC_MSG_RESULT([found])
4145         else
4146             AC_MSG_RESULT([not found])
4147             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4148         fi
4149         ;;
4150     x86)
4151         BUILD_X86=TRUE
4152         CXX_X86_BINARY=$MSVC_CXX
4153         ;;
4154     esac
4155     AC_SUBST(BUILD_X86)
4156     AC_SUBST(CXX_X86_BINARY)
4158 AC_SUBST(VCVER)
4159 AC_SUBST(DEVENV)
4160 AC_SUBST(MSVC_CXX)
4162 COM_IS_CLANG=
4163 AC_MSG_CHECKING([whether the compiler is actually Clang])
4164 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4165     #ifndef __clang__
4166     you lose
4167     #endif
4168     int foo=42;
4169     ]])],
4170     [AC_MSG_RESULT([yes])
4171      COM_IS_CLANG=TRUE],
4172     [AC_MSG_RESULT([no])])
4173 AC_SUBST(COM_IS_CLANG)
4175 CC_PLAIN=$CC
4176 CLANGVER=
4177 if test "$COM_IS_CLANG" = TRUE; then
4178     AC_MSG_CHECKING([whether Clang is new enough])
4179     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4180         #if !defined __apple_build_version__
4181         #error
4182         #endif
4183         ]])],
4184         [my_apple_clang=yes],[my_apple_clang=])
4185     if test "$my_apple_clang" = yes; then
4186         AC_MSG_RESULT([assumed yes (Apple Clang)])
4187     elif test "$_os" = Emscripten; then
4188         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4189     else
4190         if test "$_os" = WINNT; then
4191             dnl In which case, assume clang-cl:
4192             my_args="/EP /TC"
4193             dnl Filter out -FIIntrin.h, which needs to be explicitly stated for
4194             dnl clang-cl:
4195             CC_PLAIN=
4196             for i in $CC; do
4197                 case $i in
4198                 -FIIntrin.h)
4199                     ;;
4200                 *)
4201                     CC_PLAIN="$CC_PLAIN $i"
4202                     ;;
4203                 esac
4204             done
4205         else
4206             my_args="-E -P"
4207         fi
4208         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC_PLAIN $my_args - | sed 's/ //g'`
4209         CLANG_FULL_VERSION=`echo __clang_version__ | $CC_PLAIN $my_args -`
4210         CLANGVER=`echo $clang_version \
4211             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4212         if test "$CLANGVER" -ge 50002; then
4213             AC_MSG_RESULT([yes ($clang_version)])
4214         else
4215             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 5.0.2])
4216         fi
4217         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4218         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4219     fi
4222 SHOWINCLUDES_PREFIX=
4223 if test "$_os" = WINNT; then
4224     dnl We need to guess the prefix of the -showIncludes output, it can be
4225     dnl localized
4226     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4227     echo "#include <stdlib.h>" > conftest.c
4228     SHOWINCLUDES_PREFIX=`$CC_PLAIN $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4229         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4230     rm -f conftest.c conftest.obj
4231     if test -z "$SHOWINCLUDES_PREFIX"; then
4232         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4233     else
4234         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4235     fi
4237 AC_SUBST(SHOWINCLUDES_PREFIX)
4240 # prefix C with ccache if needed
4242 UNCACHED_CC="$CC"
4243 if test "$CCACHE" != ""; then
4244     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4246     AC_LANG_PUSH([C])
4247     save_CFLAGS=$CFLAGS
4248     CFLAGS="$CFLAGS --ccache-skip -O2"
4249     dnl an empty program will do, we're checking the compiler flags
4250     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4251                       [use_ccache=yes], [use_ccache=no])
4252     CFLAGS=$save_CFLAGS
4253     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4254         AC_MSG_RESULT([yes])
4255     else
4256         CC="$CCACHE $CC"
4257         CC_BASE="ccache $CC_BASE"
4258         AC_MSG_RESULT([no])
4259     fi
4260     AC_LANG_POP([C])
4263 # ===================================================================
4264 # check various GCC options that Clang does not support now but maybe
4265 # will somewhen in the future, check them even for GCC, so that the
4266 # flags are set
4267 # ===================================================================
4269 HAVE_GCC_GGDB2=
4270 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4271     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4272     save_CFLAGS=$CFLAGS
4273     CFLAGS="$CFLAGS -Werror -ggdb2"
4274     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4275     CFLAGS=$save_CFLAGS
4276     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4277         AC_MSG_RESULT([yes])
4278     else
4279         AC_MSG_RESULT([no])
4280     fi
4282     if test "$host_cpu" = "m68k"; then
4283         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4284         save_CFLAGS=$CFLAGS
4285         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4286         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4287         CFLAGS=$save_CFLAGS
4288         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4289             AC_MSG_RESULT([yes])
4290         else
4291             AC_MSG_ERROR([no])
4292         fi
4293     fi
4295 AC_SUBST(HAVE_GCC_GGDB2)
4297 dnl ===================================================================
4298 dnl  Test the gcc version
4299 dnl ===================================================================
4300 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4301     AC_MSG_CHECKING([the GCC version])
4302     _gcc_version=`$CC -dumpversion`
4303     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4304         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4305     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4307     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4309     if test "$gcc_full_version" -lt 70000; then
4310         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 7.0.0])
4311     fi
4312 else
4313     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4314     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4315     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4316     # (which reports itself as GCC 4.2.1).
4317     GCC_VERSION=
4319 AC_SUBST(GCC_VERSION)
4321 dnl Set the ENABLE_DBGUTIL variable
4322 dnl ===================================================================
4323 AC_MSG_CHECKING([whether to build with additional debug utilities])
4324 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4325     ENABLE_DBGUTIL="TRUE"
4326     # this is an extra var so it can have different default on different MSVC
4327     # versions (in case there are version specific problems with it)
4328     MSVC_USE_DEBUG_RUNTIME="TRUE"
4330     AC_MSG_RESULT([yes])
4331     # cppunit and graphite expose STL in public headers
4332     if test "$with_system_cppunit" = "yes"; then
4333         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4334     else
4335         with_system_cppunit=no
4336     fi
4337     if test "$with_system_graphite" = "yes"; then
4338         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4339     else
4340         with_system_graphite=no
4341     fi
4342     if test "$with_system_orcus" = "yes"; then
4343         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4344     else
4345         with_system_orcus=no
4346     fi
4347     if test "$with_system_libcmis" = "yes"; then
4348         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4349     else
4350         with_system_libcmis=no
4351     fi
4352     if test "$with_system_hunspell" = "yes"; then
4353         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4354     else
4355         with_system_hunspell=no
4356     fi
4357     if test "$with_system_gpgmepp" = "yes"; then
4358         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4359     else
4360         with_system_gpgmepp=no
4361     fi
4362     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4363     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4364     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4365     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4366     # of those two is using the system variant:
4367     if test "$with_system_libnumbertext" = "yes"; then
4368         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4369     else
4370         with_system_libnumbertext=no
4371     fi
4372     if test "$with_system_libwps" = "yes"; then
4373         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4374     else
4375         with_system_libwps=no
4376     fi
4377 else
4378     ENABLE_DBGUTIL=""
4379     MSVC_USE_DEBUG_RUNTIME=""
4380     AC_MSG_RESULT([no])
4382 AC_SUBST(ENABLE_DBGUTIL)
4383 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4385 dnl Set the ENABLE_DEBUG variable.
4386 dnl ===================================================================
4387 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4388     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4390 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4391     if test -z "$libo_fuzzed_enable_debug"; then
4392         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4393     else
4394         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4395         enable_debug=yes
4396     fi
4399 AC_MSG_CHECKING([whether to do a debug build])
4400 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4401     ENABLE_DEBUG="TRUE"
4402     if test -n "$ENABLE_DBGUTIL" ; then
4403         AC_MSG_RESULT([yes (dbgutil)])
4404     else
4405         AC_MSG_RESULT([yes])
4406     fi
4407 else
4408     ENABLE_DEBUG=""
4409     AC_MSG_RESULT([no])
4411 AC_SUBST(ENABLE_DEBUG)
4413 dnl ===================================================================
4414 dnl Select the linker to use (gold/lld/ld.bfd).
4415 dnl This is done only after compiler checks (need to know if Clang is
4416 dnl used, for different defaults) and after checking if a debug build
4417 dnl is wanted (non-debug builds get the default linker if not explicitly
4418 dnl specified otherwise).
4419 dnl All checks for linker features/options should come after this.
4420 dnl ===================================================================
4421 check_use_ld()
4423     use_ld=-fuse-ld=${1%%:*}
4424     use_ld_path=${1#*:}
4425     if test "$use_ld_path" != "$1"; then
4426         use_ld="$use_ld --ld-path=$use_ld_path"
4427     fi
4428     use_ld_fail_if_error=$2
4429     use_ld_ok=
4430     AC_MSG_CHECKING([for $use_ld linker support])
4431     use_ld_ldflags_save="$LDFLAGS"
4432     LDFLAGS="$LDFLAGS $use_ld"
4433     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4434 #include <stdio.h>
4435         ],[
4436 printf ("hello world\n");
4437         ])], USE_LD=$use_ld, [])
4438     if test -n "$USE_LD"; then
4439         AC_MSG_RESULT( yes )
4440         use_ld_ok=yes
4441     else
4442         if test -n "$use_ld_fail_if_error"; then
4443             AC_MSG_ERROR( no )
4444         else
4445             AC_MSG_RESULT( no )
4446         fi
4447     fi
4448     if test -n "$use_ld_ok"; then
4449         dnl keep the value of LDFLAGS
4450         return 0
4451     fi
4452     LDFLAGS="$use_ld_ldflags_save"
4453     return 1
4455 USE_LD=
4456 if test "$enable_ld" != "no"; then
4457     if test "$GCC" = "yes"; then
4458         if test -n "$enable_ld"; then
4459             check_use_ld "$enable_ld" fail_if_error
4460         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4461             dnl non-debug builds default to the default linker
4462             true
4463         elif test -n "$COM_IS_CLANG"; then
4464             check_use_ld lld
4465             if test $? -ne 0; then
4466                 check_use_ld gold
4467             fi
4468         else
4469             # For gcc first try gold, new versions also support lld.
4470             check_use_ld gold
4471             if test $? -ne 0; then
4472                 check_use_ld lld
4473             fi
4474         fi
4475         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4476         rm conftest.out
4477         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD)')
4478         if test -z "$ld_used"; then
4479             ld_used="unknown"
4480         fi
4481         AC_MSG_CHECKING([for linker that is used])
4482         AC_MSG_RESULT([$ld_used])
4483         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4484             if echo "$ld_used" | grep -q "^GNU ld"; then
4485                 AC_MSG_WARN([The default GNU linker is slow, consider using the LLD or the GNU gold linker.])
4486                 add_warning "The default GNU linker is slow, consider using the LLD or the GNU gold linker."
4487             fi
4488         fi
4489     else
4490         if test "$enable_ld" = "yes"; then
4491             AC_MSG_ERROR([--enable-ld not supported])
4492         fi
4493     fi
4495 AC_SUBST(USE_LD)
4497 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4498 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4499     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4500     bsymbolic_functions_ldflags_save=$LDFLAGS
4501     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4502     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4503 #include <stdio.h>
4504         ],[
4505 printf ("hello world\n");
4506         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4507     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4508         AC_MSG_RESULT( found )
4509     else
4510         AC_MSG_RESULT( not found )
4511     fi
4512     LDFLAGS=$bsymbolic_functions_ldflags_save
4514 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4516 LD_GC_SECTIONS=
4517 if test "$GCC" = "yes"; then
4518     for flag in "--gc-sections" "-dead_strip"; do
4519         AC_MSG_CHECKING([for $flag linker support])
4520         ldflags_save=$LDFLAGS
4521         LDFLAGS="$LDFLAGS -Wl,$flag"
4522         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4523 #include <stdio.h>
4524             ],[
4525 printf ("hello world\n");
4526             ])],[
4527             LD_GC_SECTIONS="-Wl,$flag"
4528             AC_MSG_RESULT( found )
4529             ], [
4530             AC_MSG_RESULT( not found )
4531             ])
4532         LDFLAGS=$ldflags_save
4533         if test -n "$LD_GC_SECTIONS"; then
4534             break
4535         fi
4536     done
4538 AC_SUBST(LD_GC_SECTIONS)
4540 HAVE_GSPLIT_DWARF=
4541 if test "$enable_split_debug" != no; then
4542     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4543     if test "$enable_split_debug" = yes -o \( "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4544         AC_MSG_CHECKING([whether $CC_BASE supports -gsplit-dwarf])
4545         save_CFLAGS=$CFLAGS
4546         CFLAGS="$CFLAGS -Werror -gsplit-dwarf"
4547         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_SPLIT_DWARF=TRUE ],[])
4548         CFLAGS=$save_CFLAGS
4549         if test "$HAVE_GCC_SPLIT_DWARF" = "TRUE"; then
4550             AC_MSG_RESULT([yes])
4551         else
4552             if test "$enable_split_debug" = yes; then
4553                 AC_MSG_ERROR([no])
4554             else
4555                 AC_MSG_RESULT([no])
4556             fi
4557         fi
4558     fi
4559     if test -z "$HAVE_GCC_SPLIT_DWARF" -a "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4560         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4561         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4562     fi
4564 AC_SUBST(HAVE_GCC_SPLIT_DWARF)
4566 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4567 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4568 save_CFLAGS=$CFLAGS
4569 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4570 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4571 CFLAGS=$save_CFLAGS
4572 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4573     AC_MSG_RESULT([yes])
4574 else
4575     AC_MSG_RESULT([no])
4577 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4579 ENABLE_GDB_INDEX=
4580 if test "$enable_gdb_index" != "no"; then
4581     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4582     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -o -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4583         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4584         save_CFLAGS=$CFLAGS
4585         CFLAGS="$CFLAGS -Werror -ggnu-pubnames"
4586         have_ggnu_pubnames=
4587         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4588         if test "$have_ggnu_pubnames" != "TRUE"; then
4589             if test "$enable_gdb_index" = "yes"; then
4590                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4591             else
4592                 AC_MSG_RESULT( no )
4593             fi
4594         else
4595             AC_MSG_RESULT( yes )
4596             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4597             ldflags_save=$LDFLAGS
4598             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4599             AC_LINK_IFELSE([AC_LANG_PROGRAM([
4600 #include <stdio.h>
4601                 ],[
4602 printf ("hello world\n");
4603                 ])], ENABLE_GDB_INDEX=TRUE, [])
4604             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
4605                 AC_MSG_RESULT( yes )
4606             else
4607                 if test "$enable_gdb_index" = "yes"; then
4608                     AC_MSG_ERROR( no )
4609                 else
4610                     AC_MSG_RESULT( no )
4611                 fi
4612             fi
4613             LDFLAGS=$ldflags_save
4614         fi
4615         CFLAGS=$save_CFLAGS
4616         fi
4617     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4618         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
4619         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
4620     fi
4622 AC_SUBST(ENABLE_GDB_INDEX)
4624 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
4625     enable_sal_log=yes
4627 if test "$enable_sal_log" = yes; then
4628     ENABLE_SAL_LOG=TRUE
4630 AC_SUBST(ENABLE_SAL_LOG)
4632 dnl Check for enable symbols option
4633 dnl ===================================================================
4634 AC_MSG_CHECKING([whether to generate debug information])
4635 if test -z "$enable_symbols"; then
4636     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4637         enable_symbols=yes
4638     else
4639         enable_symbols=no
4640     fi
4642 if test "$enable_symbols" = yes; then
4643     ENABLE_SYMBOLS_FOR=all
4644     AC_MSG_RESULT([yes])
4645 elif test "$enable_symbols" = no; then
4646     ENABLE_SYMBOLS_FOR=
4647     AC_MSG_RESULT([no])
4648 else
4649     # Selective debuginfo.
4650     ENABLE_SYMBOLS_FOR="$enable_symbols"
4651     AC_MSG_RESULT([for "$enable_symbols"])
4653 AC_SUBST(ENABLE_SYMBOLS_FOR)
4655 if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then
4656     # Building on Android with full symbols: without enough memory the linker never finishes currently.
4657     AC_MSG_CHECKING([whether enough memory is available for linking])
4658     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
4659     # Check for 15GB, as Linux reports a bit less than the physical memory size.
4660     if test -n "$mem_size" -a $mem_size -lt 15728640; then
4661         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
4662     else
4663         AC_MSG_RESULT([yes])
4664     fi
4667 ENABLE_OPTIMIZED=
4668 ENABLE_OPTIMIZED_DEBUG=
4669 AC_MSG_CHECKING([whether to compile with optimization flags])
4670 if test -z "$enable_optimized"; then
4671     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4672         enable_optimized=no
4673     else
4674         enable_optimized=yes
4675     fi
4677 if test "$enable_optimized" = yes; then
4678     ENABLE_OPTIMIZED=TRUE
4679     AC_MSG_RESULT([yes])
4680 elif test "$enable_optimized" = debug; then
4681     ENABLE_OPTIMIZED_DEBUG=TRUE
4682     AC_MSG_RESULT([yes (debug)])
4683     HAVE_GCC_OG=
4684     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4685         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
4686         save_CFLAGS=$CFLAGS
4687         CFLAGS="$CFLAGS -Werror -Og"
4688         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
4689         CFLAGS=$save_CFLAGS
4690         if test "$HAVE_GCC_OG" = "TRUE"; then
4691             AC_MSG_RESULT([yes])
4692         else
4693             AC_MSG_RESULT([no])
4694         fi
4695     fi
4696     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
4697         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
4698     fi
4699 else
4700     AC_MSG_RESULT([no])
4702 AC_SUBST(ENABLE_OPTIMIZED)
4703 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
4706 # determine CPUNAME, OS, ...
4707 # The USING_X11 flag tells whether the host os uses X by default. Can be overridden with the --without-x option.
4709 case "$host_os" in
4711 aix*)
4712     COM=GCC
4713     CPUNAME=POWERPC
4714     USING_X11=TRUE
4715     OS=AIX
4716     RTL_OS=AIX
4717     RTL_ARCH=PowerPC
4718     PLATFORMID=aix_powerpc
4719     P_SEP=:
4720     ;;
4722 cygwin*|wsl*)
4723     # Already handled
4724     ;;
4726 darwin*|macos*)
4727     COM=GCC
4728     USING_X11=
4729     OS=MACOSX
4730     RTL_OS=MacOSX
4731     P_SEP=:
4733     case "$host_cpu" in
4734     aarch64|arm64)
4735         if test "$enable_ios_simulator" = "yes"; then
4736             OS=iOS
4737         else
4738             CPUNAME=AARCH64
4739             RTL_ARCH=AARCH64
4740             PLATFORMID=macosx_aarch64
4741         fi
4742         ;;
4743     x86_64)
4744         if test "$enable_ios_simulator" = "yes"; then
4745             OS=iOS
4746         fi
4747         CPUNAME=X86_64
4748         RTL_ARCH=X86_64
4749         PLATFORMID=macosx_x86_64
4750         ;;
4751     *)
4752         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4753         ;;
4754     esac
4755     ;;
4757 ios*)
4758     COM=GCC
4759     USING_X11=
4760     OS=iOS
4761     RTL_OS=iOS
4762     P_SEP=:
4764     case "$host_cpu" in
4765     aarch64|arm64)
4766         if test "$enable_ios_simulator" = "yes"; then
4767             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
4768         fi
4769         ;;
4770     *)
4771         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4772         ;;
4773     esac
4774     CPUNAME=AARCH64
4775     RTL_ARCH=AARCH64
4776     PLATFORMID=ios_arm64
4777     ;;
4779 dragonfly*)
4780     COM=GCC
4781     USING_X11=TRUE
4782     OS=DRAGONFLY
4783     RTL_OS=DragonFly
4784     P_SEP=:
4786     case "$host_cpu" in
4787     i*86)
4788         CPUNAME=INTEL
4789         RTL_ARCH=x86
4790         PLATFORMID=dragonfly_x86
4791         ;;
4792     x86_64)
4793         CPUNAME=X86_64
4794         RTL_ARCH=X86_64
4795         PLATFORMID=dragonfly_x86_64
4796         ;;
4797     *)
4798         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4799         ;;
4800     esac
4801     ;;
4803 freebsd*)
4804     COM=GCC
4805     USING_X11=TRUE
4806     RTL_OS=FreeBSD
4807     OS=FREEBSD
4808     P_SEP=:
4810     case "$host_cpu" in
4811     aarch64)
4812         CPUNAME=AARCH64
4813         PLATFORMID=freebsd_aarch64
4814         RTL_ARCH=AARCH64
4815         ;;
4816     i*86)
4817         CPUNAME=INTEL
4818         RTL_ARCH=x86
4819         PLATFORMID=freebsd_x86
4820         ;;
4821     x86_64|amd64)
4822         CPUNAME=X86_64
4823         RTL_ARCH=X86_64
4824         PLATFORMID=freebsd_x86_64
4825         ;;
4826     powerpc64)
4827         CPUNAME=POWERPC64
4828         RTL_ARCH=PowerPC_64
4829         PLATFORMID=freebsd_powerpc64
4830         ;;
4831     powerpc|powerpcspe)
4832         CPUNAME=POWERPC
4833         RTL_ARCH=PowerPC
4834         PLATFORMID=freebsd_powerpc
4835         ;;
4836     *)
4837         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4838         ;;
4839     esac
4840     ;;
4842 haiku*)
4843     COM=GCC
4844     USING_X11=
4845     GUIBASE=haiku
4846     RTL_OS=Haiku
4847     OS=HAIKU
4848     P_SEP=:
4850     case "$host_cpu" in
4851     i*86)
4852         CPUNAME=INTEL
4853         RTL_ARCH=x86
4854         PLATFORMID=haiku_x86
4855         ;;
4856     x86_64|amd64)
4857         CPUNAME=X86_64
4858         RTL_ARCH=X86_64
4859         PLATFORMID=haiku_x86_64
4860         ;;
4861     *)
4862         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4863         ;;
4864     esac
4865     ;;
4867 kfreebsd*)
4868     COM=GCC
4869     USING_X11=TRUE
4870     OS=LINUX
4871     RTL_OS=kFreeBSD
4872     P_SEP=:
4874     case "$host_cpu" in
4876     i*86)
4877         CPUNAME=INTEL
4878         RTL_ARCH=x86
4879         PLATFORMID=kfreebsd_x86
4880         ;;
4881     x86_64)
4882         CPUNAME=X86_64
4883         RTL_ARCH=X86_64
4884         PLATFORMID=kfreebsd_x86_64
4885         ;;
4886     *)
4887         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4888         ;;
4889     esac
4890     ;;
4892 linux-gnu*)
4893     COM=GCC
4894     USING_X11=TRUE
4895     OS=LINUX
4896     RTL_OS=Linux
4897     P_SEP=:
4899     case "$host_cpu" in
4901     aarch64)
4902         CPUNAME=AARCH64
4903         PLATFORMID=linux_aarch64
4904         RTL_ARCH=AARCH64
4905         EPM_FLAGS="-a arm64"
4906         ;;
4907     alpha)
4908         CPUNAME=AXP
4909         RTL_ARCH=ALPHA
4910         PLATFORMID=linux_alpha
4911         ;;
4912     arm*)
4913         CPUNAME=ARM
4914         EPM_FLAGS="-a arm"
4915         RTL_ARCH=ARM_EABI
4916         PLATFORMID=linux_arm_eabi
4917         case "$host_cpu" in
4918         arm*-linux)
4919             RTL_ARCH=ARM_OABI
4920             PLATFORMID=linux_arm_oabi
4921             ;;
4922         esac
4923         ;;
4924     hppa)
4925         CPUNAME=HPPA
4926         RTL_ARCH=HPPA
4927         EPM_FLAGS="-a hppa"
4928         PLATFORMID=linux_hppa
4929         ;;
4930     i*86)
4931         CPUNAME=INTEL
4932         RTL_ARCH=x86
4933         PLATFORMID=linux_x86
4934         ;;
4935     ia64)
4936         CPUNAME=IA64
4937         RTL_ARCH=IA64
4938         PLATFORMID=linux_ia64
4939         ;;
4940     mips)
4941         CPUNAME=GODSON
4942         RTL_ARCH=MIPS_EB
4943         EPM_FLAGS="-a mips"
4944         PLATFORMID=linux_mips_eb
4945         ;;
4946     mips64)
4947         CPUNAME=GODSON64
4948         RTL_ARCH=MIPS64_EB
4949         EPM_FLAGS="-a mips64"
4950         PLATFORMID=linux_mips64_eb
4951         ;;
4952     mips64el)
4953         CPUNAME=GODSON64
4954         RTL_ARCH=MIPS64_EL
4955         EPM_FLAGS="-a mips64el"
4956         PLATFORMID=linux_mips64_el
4957         ;;
4958     mipsel)
4959         CPUNAME=GODSON
4960         RTL_ARCH=MIPS_EL
4961         EPM_FLAGS="-a mipsel"
4962         PLATFORMID=linux_mips_el
4963         ;;
4964     m68k)
4965         CPUNAME=M68K
4966         RTL_ARCH=M68K
4967         PLATFORMID=linux_m68k
4968         ;;
4969     powerpc)
4970         CPUNAME=POWERPC
4971         RTL_ARCH=PowerPC
4972         PLATFORMID=linux_powerpc
4973         ;;
4974     powerpc64)
4975         CPUNAME=POWERPC64
4976         RTL_ARCH=PowerPC_64
4977         PLATFORMID=linux_powerpc64
4978         ;;
4979     powerpc64le)
4980         CPUNAME=POWERPC64
4981         RTL_ARCH=PowerPC_64_LE
4982         PLATFORMID=linux_powerpc64_le
4983         ;;
4984     sparc)
4985         CPUNAME=SPARC
4986         RTL_ARCH=SPARC
4987         PLATFORMID=linux_sparc
4988         ;;
4989     sparc64)
4990         CPUNAME=SPARC64
4991         RTL_ARCH=SPARC64
4992         PLATFORMID=linux_sparc64
4993         ;;
4994     s390)
4995         CPUNAME=S390
4996         RTL_ARCH=S390
4997         PLATFORMID=linux_s390
4998         ;;
4999     s390x)
5000         CPUNAME=S390X
5001         RTL_ARCH=S390x
5002         PLATFORMID=linux_s390x
5003         ;;
5004     x86_64)
5005         CPUNAME=X86_64
5006         RTL_ARCH=X86_64
5007         PLATFORMID=linux_x86_64
5008         ;;
5009     *)
5010         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5011         ;;
5012     esac
5013     ;;
5015 linux-android*)
5016     COM=GCC
5017     USING_X11=
5018     OS=ANDROID
5019     RTL_OS=Android
5020     P_SEP=:
5022     case "$host_cpu" in
5024     arm|armel)
5025         CPUNAME=ARM
5026         RTL_ARCH=ARM_EABI
5027         PLATFORMID=android_arm_eabi
5028         ;;
5029     aarch64)
5030         CPUNAME=AARCH64
5031         RTL_ARCH=AARCH64
5032         PLATFORMID=android_aarch64
5033         ;;
5034     i*86)
5035         CPUNAME=INTEL
5036         RTL_ARCH=x86
5037         PLATFORMID=android_x86
5038         ;;
5039     x86_64)
5040         CPUNAME=X86_64
5041         RTL_ARCH=X86_64
5042         PLATFORMID=android_x86_64
5043         ;;
5044     *)
5045         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5046         ;;
5047     esac
5048     ;;
5050 *netbsd*)
5051     COM=GCC
5052     USING_X11=TRUE
5053     OS=NETBSD
5054     RTL_OS=NetBSD
5055     P_SEP=:
5057     case "$host_cpu" in
5058     i*86)
5059         CPUNAME=INTEL
5060         RTL_ARCH=x86
5061         PLATFORMID=netbsd_x86
5062         ;;
5063     powerpc)
5064         CPUNAME=POWERPC
5065         RTL_ARCH=PowerPC
5066         PLATFORMID=netbsd_powerpc
5067         ;;
5068     sparc)
5069         CPUNAME=SPARC
5070         RTL_ARCH=SPARC
5071         PLATFORMID=netbsd_sparc
5072         ;;
5073     x86_64)
5074         CPUNAME=X86_64
5075         RTL_ARCH=X86_64
5076         PLATFORMID=netbsd_x86_64
5077         ;;
5078     *)
5079         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5080         ;;
5081     esac
5082     ;;
5084 openbsd*)
5085     COM=GCC
5086     USING_X11=TRUE
5087     OS=OPENBSD
5088     RTL_OS=OpenBSD
5089     P_SEP=:
5091     case "$host_cpu" in
5092     i*86)
5093         CPUNAME=INTEL
5094         RTL_ARCH=x86
5095         PLATFORMID=openbsd_x86
5096         ;;
5097     x86_64)
5098         CPUNAME=X86_64
5099         RTL_ARCH=X86_64
5100         PLATFORMID=openbsd_x86_64
5101         ;;
5102     *)
5103         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5104         ;;
5105     esac
5106     SOLARINC="$SOLARINC -I/usr/local/include"
5107     ;;
5109 solaris*)
5110     COM=GCC
5111     USING_X11=TRUE
5112     OS=SOLARIS
5113     RTL_OS=Solaris
5114     P_SEP=:
5116     case "$host_cpu" in
5117     i*86)
5118         CPUNAME=INTEL
5119         RTL_ARCH=x86
5120         PLATFORMID=solaris_x86
5121         ;;
5122     sparc)
5123         CPUNAME=SPARC
5124         RTL_ARCH=SPARC
5125         PLATFORMID=solaris_sparc
5126         ;;
5127     sparc64)
5128         CPUNAME=SPARC64
5129         RTL_ARCH=SPARC64
5130         PLATFORMID=solaris_sparc64
5131         ;;
5132     *)
5133         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5134         ;;
5135     esac
5136     SOLARINC="$SOLARINC -I/usr/local/include"
5137     ;;
5139 emscripten*)
5140     COM=GCC
5141     USING_X11=
5142     OS=EMSCRIPTEN
5143     RTL_OS=Emscripten
5144     P_SEP=:
5146     case "$host_cpu" in
5147     wasm32|wasm64)
5148         ;;
5149     *)
5150         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5151         ;;
5152     esac
5153     CPUNAME=INTEL
5154     RTL_ARCH=x86
5155     PLATFORMID=linux_x86
5156     ;;
5159     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5160     ;;
5161 esac
5163 if test "$with_x" = "no"; then
5164     AC_MSG_ERROR([Use --disable-gui instead. How can we get rid of this option? No idea where it comes from.])
5167 DISABLE_GUI=""
5168 if test "$enable_gui" = "no"; then
5169     if test "$USING_X11" != TRUE; then
5170         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5171     fi
5172     USING_X11=
5173     DISABLE_GUI=TRUE
5174     AC_DEFINE(HAVE_FEATURE_UI,0)
5175     test_cairo=yes
5177 AC_SUBST(DISABLE_GUI)
5179 WORKDIR="${BUILDDIR}/workdir"
5180 INSTDIR="${BUILDDIR}/instdir"
5181 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5182 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5183 SOLARINC="-I$SRC_ROOT/include $SOLARINC"
5184 AC_SUBST(COM)
5185 AC_SUBST(CPUNAME)
5186 AC_SUBST(RTL_OS)
5187 AC_SUBST(RTL_ARCH)
5188 AC_SUBST(EPM_FLAGS)
5189 AC_SUBST(USING_X11)
5190 AC_SUBST([INSTDIR])
5191 AC_SUBST([INSTROOT])
5192 AC_SUBST([INSTROOTBASE])
5193 AC_SUBST(OS)
5194 AC_SUBST(P_SEP)
5195 AC_SUBST(WORKDIR)
5196 AC_SUBST(PLATFORMID)
5197 AC_SUBST(WINDOWS_X64)
5198 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5200 dnl ===================================================================
5201 dnl Test which package format to use
5202 dnl ===================================================================
5203 AC_MSG_CHECKING([which package format to use])
5204 if test -n "$with_package_format" -a "$with_package_format" != no; then
5205     for i in $with_package_format; do
5206         case "$i" in
5207         aix | bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5208             ;;
5209         *)
5210             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5211 aix - AIX software distribution
5212 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5213 deb - Debian software distribution
5214 pkg - Solaris software distribution
5215 rpm - RedHat software distribution
5217 LibreOffice additionally supports:
5218 archive - .tar.gz or .zip
5219 dmg - macOS .dmg
5220 installed - installation tree
5221 msi - Windows .msi
5222         ])
5223             ;;
5224         esac
5225     done
5226     # fakeroot is needed to ensure correct file ownerships/permissions
5227     # inside deb packages and tar archives created on Linux and Solaris.
5228     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5229         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5230         if test "$FAKEROOT" = "no"; then
5231             AC_MSG_ERROR(
5232                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5233         fi
5234     fi
5235     PKGFORMAT="$with_package_format"
5236     AC_MSG_RESULT([$PKGFORMAT])
5237 else
5238     PKGFORMAT=
5239     AC_MSG_RESULT([none])
5241 AC_SUBST(PKGFORMAT)
5243 dnl ===================================================================
5244 dnl Set up a different compiler to produce tools to run on the build
5245 dnl machine when doing cross-compilation
5246 dnl ===================================================================
5248 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5249 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5250 if test "$cross_compiling" = "yes"; then
5251     AC_MSG_CHECKING([for BUILD platform configuration])
5252     echo
5253     rm -rf CONF-FOR-BUILD config_build.mk
5254     mkdir CONF-FOR-BUILD
5255     # Here must be listed all files needed when running the configure script. In particular, also
5256     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5257     # keep them in the same order as there.
5258     (cd $SRC_ROOT && tar cf - \
5259         config.guess \
5260         bin/get_config_variables \
5261         solenv/bin/getcompver.awk \
5262         solenv/inc/langlist.mk \
5263         download.lst \
5264         config_host.mk.in \
5265         config_host_lang.mk.in \
5266         Makefile.in \
5267         bin/bffvalidator.sh.in \
5268         bin/odfvalidator.sh.in \
5269         bin/officeotron.sh.in \
5270         hardened_runtime.xcent.in \
5271         instsetoo_native/util/openoffice.lst.in \
5272         config_host/*.in \
5273         sysui/desktop/macosx/Info.plist.in \
5274         .vscode/vs-code-template.code-workspace.in \
5275         ) \
5276     | (cd CONF-FOR-BUILD && tar xf -)
5277     cp configure CONF-FOR-BUILD
5278     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5279     (
5280     unset COM USING_X11 OS CPUNAME
5281     unset CC CXX SYSBASE CFLAGS
5282     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5283     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5284     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5285     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5286     if test -n "$CC_FOR_BUILD"; then
5287         export CC="$CC_FOR_BUILD"
5288         CC_BASE=`first_arg_basename "$CC"`
5289     fi
5290     if test -n "$CXX_FOR_BUILD"; then
5291         export CXX="$CXX_FOR_BUILD"
5292         CXX_BASE=`first_arg_basename "$CXX"`
5293     fi
5294     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5295     cd CONF-FOR-BUILD
5297     # Handle host configuration, which affects the cross-toolset too
5298     sub_conf_opts=""
5299     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5300     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5301     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5302     if test -n "$ENABLE_JAVA"; then
5303         case "$_os" in
5304         iOS) sub_conf_opts="$sub_conf_opts --without-java" ;; # force it off, like it used to be
5305         Android)
5306             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5307             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5308             ;;
5309         *)
5310             if test -z "$with_jdk_home"; then
5311                 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.])
5312             fi
5313             ;;
5314         esac
5315     else
5316         sub_conf_opts="$sub_conf_opts --without-java"
5317     fi
5318     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5319     test "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" && sub_conf_opts="$sub_conf_opts --with-system-icu"
5320     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no"
5321     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5322     sub_conf_opts="$sub_conf_opts $with_build_platform_configure_options"
5324     # Don't bother having configure look for stuff not needed for the build platform anyway
5325     ./configure \
5326         --build="$build_alias" \
5327         --disable-cups \
5328         --disable-firebird-sdbc \
5329         --disable-gpgmepp \
5330         --disable-gstreamer-1-0 \
5331         --disable-gtk3 \
5332         --disable-mariadb-sdbc \
5333         --disable-nss \
5334         --disable-online-update \
5335         --disable-opencl \
5336         --disable-pdfimport \
5337         --disable-postgresql-sdbc \
5338         --disable-skia \
5339         --enable-icecream="$enable_icecream" \
5340         --without-doxygen \
5341         --without-webdav \
5342         --with-parallelism="$with_parallelism" \
5343         --with-theme="$with_theme" \
5344         --with-tls=openssl \
5345         $sub_conf_opts \
5346         --srcdir=$srcdir \
5347         2>&1 | sed -e 's/^/    /'
5348     if test [${PIPESTATUS[0]}] -ne 0; then
5349         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5350     fi
5352     # filter permitted build targets
5353     PERMITTED_BUILD_TARGETS="
5354         AVMEDIA
5355         BOOST
5356         CAIRO
5357         CLUCENE
5358         CURL
5359         DBCONNECTIVITY
5360         DESKTOP
5361         DYNLOADING
5362         EPOXY
5363         EXPAT
5364         GLM
5365         GRAPHITE
5366         HARFBUZZ
5367         ICU
5368         LCMS2
5369         LIBJPEG_TURBO
5370         LIBLANGTAG
5371         LibO
5372         LIBFFI
5373         LIBPN
5374         LIBXML2
5375         LIBXSLT
5376         MDDS
5377         NATIVE
5378         OPENSSL
5379         ORCUS
5380         PYTHON
5381         SCRIPTING
5382         ZLIB
5384     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5385     # newlined lists, to use grep as a filter
5386     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5387     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5388     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5389     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5391     cp config_host.mk ../config_build.mk
5392     cp config_host_lang.mk ../config_build_lang.mk
5393     mv config.log ../config.Build.log
5394     mkdir -p ../config_build
5395     mv config_host/*.h ../config_build
5397     # all these will get a _FOR_BUILD postfix
5398     DIRECT_FOR_BUILD_SETTINGS="
5399         CC
5400         CXX
5401         ILIB
5402         JAVA_HOME
5403         JAVAIFLAGS
5404         JDK
5405         LIBO_BIN_FOLDER
5406         LIBO_LIB_FOLDER
5407         LIBO_URE_LIB_FOLDER
5408         LIBO_URE_MISC_FOLDER
5409         OS
5410         SDKDIRNAME
5411         SYSTEM_LIBXML
5412         SYSTEM_LIBXSLT
5414     # these overwrite host config with build config
5415     OVERWRITING_SETTINGS="
5416         ANT
5417         ANT_HOME
5418         ANT_LIB
5419         HSQLDB_USE_JDBC_4_1
5420         JAVA_CLASSPATH_NOT_SET
5421         JAVA_SOURCE_VER
5422         JAVA_TARGET_VER
5423         JAVACFLAGS
5424         JAVACOMPILER
5425         JAVADOC
5426         JAVADOCISGJDOC
5428     # these need some special handling
5429     EXTRA_HANDLED_SETTINGS="
5430         INSTDIR
5431         INSTROOT
5432         PATH
5433         WORKDIR
5435     OLD_PATH=$PATH
5436     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
5437     BUILD_PATH=$PATH
5438     PATH=$OLD_PATH
5440     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
5441     echo "$line" >>build-config
5443     for V in $DIRECT_FOR_BUILD_SETTINGS; do
5444         VV='$'$V
5445         VV=`eval "echo $VV"`
5446         if test -n "$VV"; then
5447             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
5448             echo "$line" >>build-config
5449         fi
5450     done
5452     for V in $OVERWRITING_SETTINGS; do
5453         VV='$'$V
5454         VV=`eval "echo $VV"`
5455         if test -n "$VV"; then
5456             line=${V}='${'${V}:-$VV'}'
5457             echo "$line" >>build-config
5458         fi
5459     done
5461     for V in INSTDIR INSTROOT WORKDIR; do
5462         VV='$'$V
5463         VV=`eval "echo $VV"`
5464         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
5465         if test -n "$VV"; then
5466             line="${V}_FOR_BUILD='$VV'"
5467             echo "$line" >>build-config
5468         fi
5469     done
5471     )
5472     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
5473     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])
5474     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
5475              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
5477     eval `cat CONF-FOR-BUILD/build-config`
5479     AC_MSG_RESULT([checking for BUILD platform configuration... done])
5481     rm -rf CONF-FOR-BUILD
5482 else
5483     OS_FOR_BUILD="$OS"
5484     CC_FOR_BUILD="$CC"
5485     CXX_FOR_BUILD="$CXX"
5486     INSTDIR_FOR_BUILD="$INSTDIR"
5487     INSTROOT_FOR_BUILD="$INSTROOT"
5488     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
5489     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
5490     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
5491     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
5492     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
5493     WORKDIR_FOR_BUILD="$WORKDIR"
5495 AC_SUBST(OS_FOR_BUILD)
5496 AC_SUBST(INSTDIR_FOR_BUILD)
5497 AC_SUBST(INSTROOT_FOR_BUILD)
5498 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
5499 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
5500 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
5501 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
5502 AC_SUBST(SDKDIRNAME_FOR_BUILD)
5503 AC_SUBST(WORKDIR_FOR_BUILD)
5504 AC_SUBST(CC_FOR_BUILD)
5505 AC_SUBST(CXX_FOR_BUILD)
5507 dnl ===================================================================
5508 dnl Check for syslog header
5509 dnl ===================================================================
5510 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
5512 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
5513 dnl ===================================================================
5514 AC_MSG_CHECKING([whether to turn warnings to errors])
5515 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
5516     ENABLE_WERROR="TRUE"
5517     PYTHONWARNINGS="error"
5518     AC_MSG_RESULT([yes])
5519 else
5520     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
5521         ENABLE_WERROR="TRUE"
5522         PYTHONWARNINGS="error"
5523         AC_MSG_RESULT([yes])
5524     else
5525         AC_MSG_RESULT([no])
5526     fi
5528 AC_SUBST(ENABLE_WERROR)
5529 AC_SUBST(PYTHONWARNINGS)
5531 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
5532 dnl ===================================================================
5533 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
5534 if test -z "$enable_assert_always_abort"; then
5535    if test "$ENABLE_DEBUG" = TRUE; then
5536        enable_assert_always_abort=yes
5537    else
5538        enable_assert_always_abort=no
5539    fi
5541 if test "$enable_assert_always_abort" = "yes"; then
5542     ASSERT_ALWAYS_ABORT="TRUE"
5543     AC_MSG_RESULT([yes])
5544 else
5545     ASSERT_ALWAYS_ABORT="FALSE"
5546     AC_MSG_RESULT([no])
5548 AC_SUBST(ASSERT_ALWAYS_ABORT)
5550 # Determine whether to use ooenv for the instdir installation
5551 # ===================================================================
5552 if test $_os != "WINNT" -a $_os != "Darwin"; then
5553     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
5554     if test -z "$enable_ooenv"; then
5555         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5556             enable_ooenv=yes
5557         else
5558             enable_ooenv=no
5559         fi
5560     fi
5561     if test "$enable_ooenv" = "no"; then
5562         AC_MSG_RESULT([no])
5563     else
5564         ENABLE_OOENV="TRUE"
5565         AC_MSG_RESULT([yes])
5566     fi
5568 AC_SUBST(ENABLE_OOENV)
5570 if test "$USING_X11" != TRUE; then
5571     # be sure to do not mess with unneeded stuff
5572     test_randr=no
5573     test_xrender=no
5574     test_cups=no
5575     test_dbus=no
5576     build_gstreamer_1_0=no
5577     test_kf5=no
5578     test_qt5=no
5579     test_gtk3_kde5=no
5580     enable_cairo_canvas=no
5583 if test "$OS" = "HAIKU"; then
5584     enable_cairo_canvas=yes
5585     test_kf5=yes
5588 if test "$test_kf5" = "yes" -a "$enable_kde5" = "yes"; then
5589     AC_MSG_WARN([The kde5 VCL plugin was renamed to kf5. Please update your configuration to use --enable-kf5, as --enable-kde5 will be removed after the next major release!])
5590     add_warning "The kde5 VCL plugin was renamed to kf5. Please update your configuration to use --enable-kf5, as --enable-kde5 will be removed after the next major release!"
5591     enable_kf5=yes
5594 if test "$test_kf5" = "yes"; then
5595     test_qt5=yes
5598 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
5599     if test "$enable_qt5" = "no"; then
5600         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
5601     else
5602         enable_qt5=yes
5603     fi
5606 dnl ===================================================================
5607 dnl check for cups support
5608 dnl ===================================================================
5609 ENABLE_CUPS=""
5611 if test "$enable_cups" = "no"; then
5612     test_cups=no
5615 AC_MSG_CHECKING([whether to enable CUPS support])
5616 if test "$test_cups" = "yes"; then
5617     ENABLE_CUPS="TRUE"
5618     AC_MSG_RESULT([yes])
5620     AC_MSG_CHECKING([whether cups support is present])
5621     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
5622     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
5623     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
5624         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
5625     fi
5627 else
5628     AC_MSG_RESULT([no])
5631 AC_SUBST(ENABLE_CUPS)
5633 # fontconfig checks
5634 if test "$test_fontconfig" = "yes"; then
5635     PKG_CHECK_MODULES([FONTCONFIG], [fontconfig >= 2.4.1])
5636     SYSTEM_FONTCONFIG=TRUE
5637     FilterLibs "${FONTCONFIG_LIBS}"
5638     FONTCONFIG_LIBS="${filteredlibs}"
5640 AC_SUBST(FONTCONFIG_CFLAGS)
5641 AC_SUBST(FONTCONFIG_LIBS)
5642 AC_SUBST([SYSTEM_FONTCONFIG])
5644 dnl whether to find & fetch external tarballs?
5645 dnl ===================================================================
5646 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
5647    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
5648        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
5649    else
5650        TARFILE_LOCATION="$LODE_HOME/ext_tar"
5651    fi
5653 if test -z "$TARFILE_LOCATION"; then
5654     if test -d "$SRC_ROOT/src" ; then
5655         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
5656         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
5657     fi
5658     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
5659 else
5660     AbsolutePath "$TARFILE_LOCATION"
5661     PathFormat "${absolute_path}"
5662     TARFILE_LOCATION="${formatted_path}"
5664 AC_SUBST(TARFILE_LOCATION)
5666 AC_MSG_CHECKING([whether we want to fetch tarballs])
5667 if test "$enable_fetch_external" != "no"; then
5668     if test "$with_all_tarballs" = "yes"; then
5669         AC_MSG_RESULT([yes, all of them])
5670         DO_FETCH_TARBALLS="ALL"
5671     else
5672         AC_MSG_RESULT([yes, if we use them])
5673         DO_FETCH_TARBALLS="TRUE"
5674     fi
5675 else
5676     AC_MSG_RESULT([no])
5677     DO_FETCH_TARBALLS=
5679 AC_SUBST(DO_FETCH_TARBALLS)
5681 AC_MSG_CHECKING([whether to build help])
5682 if test -n "$with_help" -a "$with_help" != "no" -a $_os != iOS -a $_os != Android; then
5683     BUILD_TYPE="$BUILD_TYPE HELP"
5684     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5685     case "$with_help" in
5686     "html")
5687         ENABLE_HTMLHELP=TRUE
5688         SCPDEFS="$SCPDEFS -DWITH_HELP"
5689         AC_MSG_RESULT([HTML])
5690         ;;
5691     "online")
5692         ENABLE_HTMLHELP=TRUE
5693         HELP_ONLINE=TRUE
5694         AC_MSG_RESULT([HTML])
5695         ;;
5696     yes)
5697         SCPDEFS="$SCPDEFS -DWITH_HELP"
5698         AC_MSG_RESULT([yes])
5699         ;;
5700     *)
5701         AC_MSG_ERROR([Unknown --with-help=$with_help])
5702         ;;
5703     esac
5704 else
5705     AC_MSG_RESULT([no])
5707 AC_SUBST([ENABLE_HTMLHELP])
5708 AC_SUBST([HELP_ONLINE])
5710 AC_MSG_CHECKING([whether to enable xapian-omega support for help])
5711 if test -n "$with_omindex" -a "$with_omindex" != "no" -a $_os != iOS -a $_os != Android; then
5712     BUILD_TYPE="$BUILD_TYPE HELP"
5713     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5714     case "$with_omindex" in
5715     "server")
5716         ENABLE_HTMLHELP=TRUE
5717         HELP_ONLINE=TRUE
5718         HELP_OMINDEX_PAGE=TRUE
5719         AC_MSG_RESULT([SERVER])
5720         ;;
5721     "noxap")
5722         ENABLE_HTMLHELP=TRUE
5723         HELP_ONLINE=TRUE
5724         HELP_OMINDEX_PAGE=FALSE
5725         AC_MSG_RESULT([NOXAP])
5726         ;;
5727     *)
5728         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5729         ;;
5730     esac
5731 else
5732     HELP_OMINDEX_PAGE=FALSE
5733     AC_MSG_RESULT([no])
5735 AC_SUBST([ENABLE_HTMLHELP])
5736 AC_SUBST([HELP_OMINDEX_PAGE])
5737 AC_SUBST([HELP_ONLINE])
5740 dnl Test whether to include MySpell dictionaries
5741 dnl ===================================================================
5742 AC_MSG_CHECKING([whether to include MySpell dictionaries])
5743 if test "$with_myspell_dicts" = "yes"; then
5744     AC_MSG_RESULT([yes])
5745     WITH_MYSPELL_DICTS=TRUE
5746     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
5747     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
5748 else
5749     AC_MSG_RESULT([no])
5750     WITH_MYSPELL_DICTS=
5752 AC_SUBST(WITH_MYSPELL_DICTS)
5754 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
5755 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
5756     if test "$with_system_dicts" = yes; then
5757         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
5758     fi
5759     with_system_dicts=no
5762 AC_MSG_CHECKING([whether to use dicts from external paths])
5763 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
5764     AC_MSG_RESULT([yes])
5765     SYSTEM_DICTS=TRUE
5766     AC_MSG_CHECKING([for spelling dictionary directory])
5767     if test -n "$with_external_dict_dir"; then
5768         DICT_SYSTEM_DIR=file://$with_external_dict_dir
5769     else
5770         DICT_SYSTEM_DIR=file:///usr/share/hunspell
5771         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
5772             DICT_SYSTEM_DIR=file:///usr/share/myspell
5773         fi
5774     fi
5775     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
5776     AC_MSG_CHECKING([for hyphenation patterns directory])
5777     if test -n "$with_external_hyph_dir"; then
5778         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
5779     else
5780         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
5781     fi
5782     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
5783     AC_MSG_CHECKING([for thesaurus directory])
5784     if test -n "$with_external_thes_dir"; then
5785         THES_SYSTEM_DIR=file://$with_external_thes_dir
5786     else
5787         THES_SYSTEM_DIR=file:///usr/share/mythes
5788     fi
5789     AC_MSG_RESULT([$THES_SYSTEM_DIR])
5790 else
5791     AC_MSG_RESULT([no])
5792     SYSTEM_DICTS=
5794 AC_SUBST(SYSTEM_DICTS)
5795 AC_SUBST(DICT_SYSTEM_DIR)
5796 AC_SUBST(HYPH_SYSTEM_DIR)
5797 AC_SUBST(THES_SYSTEM_DIR)
5799 dnl ===================================================================
5800 dnl Precompiled headers.
5801 ENABLE_PCH=""
5802 AC_MSG_CHECKING([whether to enable pch feature])
5803 if test -z "$enable_pch"; then
5804     if test "$_os" = "WINNT"; then
5805         # Enabled by default on Windows.
5806         enable_pch=yes
5807     else
5808         enable_pch=no
5809     fi
5811 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
5812     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
5814 if test "$enable_pch" = "system"; then
5815     ENABLE_PCH="1"
5816     AC_MSG_RESULT([yes (system headers)])
5817 elif test "$enable_pch" = "base"; then
5818     ENABLE_PCH="2"
5819     AC_MSG_RESULT([yes (system and base headers)])
5820 elif test "$enable_pch" = "normal"; then
5821     ENABLE_PCH="3"
5822     AC_MSG_RESULT([yes (normal)])
5823 elif test "$enable_pch" = "full"; then
5824     ENABLE_PCH="4"
5825     AC_MSG_RESULT([yes (full)])
5826 elif test "$enable_pch" = "yes"; then
5827     # Pick a suitable default.
5828     if test "$GCC" = "yes"; then
5829         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
5830         # while making the PCHs larger and rebuilds more likely.
5831         ENABLE_PCH="2"
5832         AC_MSG_RESULT([yes (system and base headers)])
5833     else
5834         # With MSVC the highest level makes a significant difference,
5835         # and it was the default when there used to be no PCH levels.
5836         ENABLE_PCH="4"
5837         AC_MSG_RESULT([yes (full)])
5838     fi
5839 elif test "$enable_pch" = "no"; then
5840     AC_MSG_RESULT([no])
5841 else
5842     AC_MSG_ERROR([Unknown value for --enable-pch])
5844 AC_SUBST(ENABLE_PCH)
5845 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
5846 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
5847     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
5848     if test "$CCACHE_BIN" != "not found"; then
5849         AC_MSG_CHECKING([ccache version])
5850         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
5851         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
5852         AC_MSG_RESULT([$CCACHE_VERSION])
5853         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
5854         if test "$CCACHE_NUMVER" -gt "030701"; then
5855             AC_MSG_RESULT([yes])
5856         else
5857             AC_MSG_RESULT([no (not newer than 3.7.1)])
5858             CCACHE_DEPEND_MODE=
5859         fi
5860     fi
5863 PCH_INSTANTIATE_TEMPLATES=
5864 if test -n "$ENABLE_PCH"; then
5865     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
5866     save_CFLAGS=$CFLAGS
5867     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
5868     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
5869     CFLAGS=$save_CFLAGS
5870     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
5871         AC_MSG_RESULT(yes)
5872     else
5873         AC_MSG_RESULT(no)
5874     fi
5876 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
5878 BUILDING_PCH_WITH_OBJ=
5879 if test -n "$ENABLE_PCH"; then
5880     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
5881     save_CFLAGS=$CFLAGS
5882     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
5883     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
5884     CFLAGS=$save_CFLAGS
5885     if test -n "$BUILDING_PCH_WITH_OBJ"; then
5886         AC_MSG_RESULT(yes)
5887     else
5888         AC_MSG_RESULT(no)
5889     fi
5891 AC_SUBST(BUILDING_PCH_WITH_OBJ)
5893 PCH_CODEGEN=
5894 PCH_NO_CODEGEN=
5895 if test -n "$BUILDING_PCH_WITH_OBJ"; then
5896     AC_MSG_CHECKING([whether $CC supports -fpch-codegen])
5897     save_CFLAGS=$CFLAGS
5898     CFLAGS="$CFLAGS -Werror -fpch-codegen"
5899     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
5900         [
5901         PCH_CODEGEN="-fpch-codegen"
5902         PCH_NO_CODEGEN="-fno-pch-codegen"
5903         ],[])
5904     CFLAGS=$save_CFLAGS
5905     if test -n "$PCH_CODEGEN"; then
5906         AC_MSG_RESULT(yes)
5907     else
5908         AC_MSG_RESULT(no)
5909     fi
5911 AC_SUBST(PCH_CODEGEN)
5912 AC_SUBST(PCH_NO_CODEGEN)
5913 PCH_DEBUGINFO=
5914 if test -n "$BUILDING_PCH_WITH_OBJ"; then
5915     AC_MSG_CHECKING([whether $CC supports -fpch-debuginfo])
5916     save_CFLAGS=$CFLAGS
5917     CFLAGS="$CFLAGS -Werror -fpch-debuginfo"
5918     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="-fpch-debuginfo" ],[])
5919     CFLAGS=$save_CFLAGS
5920     if test -n "$PCH_DEBUGINFO"; then
5921         AC_MSG_RESULT(yes)
5922     else
5923         AC_MSG_RESULT(no)
5924     fi
5926 AC_SUBST(PCH_DEBUGINFO)
5928 TAB=`printf '\t'`
5930 AC_MSG_CHECKING([the GNU Make version])
5931 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
5932 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
5933 if test "$_make_longver" -ge "038200"; then
5934     AC_MSG_RESULT([$GNUMAKE $_make_version])
5936 elif test "$_make_longver" -ge "038100"; then
5937     if test "$build_os" = "cygwin"; then
5938         AC_MSG_ERROR([failed ($GNUMAKE version >= 3.82 needed])
5939     fi
5940     AC_MSG_RESULT([$GNUMAKE $_make_version])
5942     dnl ===================================================================
5943     dnl Search all the common names for sha1sum
5944     dnl ===================================================================
5945     AC_CHECK_PROGS(SHA1SUM, sha1sum sha1 shasum openssl)
5946     if test -z "$SHA1SUM"; then
5947         AC_MSG_ERROR([install the appropriate SHA-1 checksumming program for this OS])
5948     elif test "$SHA1SUM" = "openssl"; then
5949         SHA1SUM="openssl sha1"
5950     fi
5951     AC_MSG_CHECKING([for GNU Make bug 20033])
5952     TESTGMAKEBUG20033=`mktemp -d tmp.XXXXXX`
5953     $SED -e "s/<TAB>/$TAB/g" > $TESTGMAKEBUG20033/Makefile << EOF
5954 A := \$(wildcard *.a)
5956 .PHONY: all
5957 all: \$(A:.a=.b)
5958 <TAB>@echo survived bug20033.
5960 .PHONY: setup
5961 setup:
5962 <TAB>@touch 1.a 2.a 3.a 4.a 5.a 6.a
5964 define d1
5965 @echo lala \$(1)
5966 @sleep 1
5967 endef
5969 define d2
5970 @echo tyty \$(1)
5971 @sleep 1
5972 endef
5974 %.b : %.a
5975 <TAB>\$(eval CHECKSUM := \$(word 1,\$(shell cat \$^ | $SHA1SUM))) \$(if \$(wildcard \$(CACHEDIR)/\$(CHECKSUM)),\
5976 <TAB>\$(call d1,\$(CHECKSUM)),\
5977 <TAB>\$(call d2,\$(CHECKSUM)))
5979     if test -z "`(cd $TESTGMAKEBUG20033 && $GNUMAKE setup && $GNUMAKE -j)|grep survived`"; then
5980         no_parallelism_make="YES"
5981         AC_MSG_RESULT([yes, disable parallelism])
5982     else
5983         AC_MSG_RESULT([no, keep parallelism enabled])
5984     fi
5985     rm -rf $TESTGMAKEBUG20033
5986 else
5987     AC_MSG_ERROR([failed ($GNUMAKE version >= 3.81 needed])
5990 # find if gnumake support file function
5991 AC_MSG_CHECKING([whether GNU Make supports the 'file' function])
5992 TESTGMAKEFILEFUNC="`mktemp -d -t tst.XXXXXX`"
5993 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
5994     TESTGMAKEFILEFUNC=`cygpath -m $TESTGMAKEFILEFUNC`
5996 $SED -e "s/<TAB>/$TAB/" > $TESTGMAKEFILEFUNC/Makefile << EOF
5997 \$(file >test.txt,Success )
5999 .PHONY: all
6000 all:
6001 <TAB>@cat test.txt
6004 $GNUMAKE -C $TESTGMAKEFILEFUNC 2>/dev/null 1>&2
6005 if test -f $TESTGMAKEFILEFUNC/test.txt; then
6006     HAVE_GNUMAKE_FILE_FUNC=TRUE
6007     AC_MSG_RESULT([yes])
6008 else
6009     AC_MSG_RESULT([no])
6011 rm -rf $TESTGMAKEFILEFUNC
6012 AC_SUBST(HAVE_GNUMAKE_FILE_FUNC)
6013 AC_SUBST(GNUMAKE_WIN_NATIVE)
6015 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6016 STALE_MAKE=
6017 if test "$_make_ver_check" = ""; then
6018    STALE_MAKE=TRUE
6021 HAVE_LD_HASH_STYLE=FALSE
6022 WITH_LINKER_HASH_STYLE=
6023 AC_MSG_CHECKING([for --hash-style gcc linker support])
6024 if test "$GCC" = "yes"; then
6025     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6026         hash_styles="gnu sysv"
6027     elif test "$with_linker_hash_style" = "no"; then
6028         hash_styles=
6029     else
6030         hash_styles="$with_linker_hash_style"
6031     fi
6033     for hash_style in $hash_styles; do
6034         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6035         hash_style_ldflags_save=$LDFLAGS
6036         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6038         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6039             [
6040 #include <stdio.h>
6041             ],[
6042 printf ("");
6043             ])],
6044             [
6045                   HAVE_LD_HASH_STYLE=TRUE
6046                   WITH_LINKER_HASH_STYLE=$hash_style
6047             ],
6048             [HAVE_LD_HASH_STYLE=FALSE],
6049             [HAVE_LD_HASH_STYLE=FALSE])
6050         LDFLAGS=$hash_style_ldflags_save
6051     done
6053     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6054         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6055     else
6056         AC_MSG_RESULT( no )
6057     fi
6058     LDFLAGS=$hash_style_ldflags_save
6059 else
6060     AC_MSG_RESULT( no )
6062 AC_SUBST(HAVE_LD_HASH_STYLE)
6063 AC_SUBST(WITH_LINKER_HASH_STYLE)
6065 dnl ===================================================================
6066 dnl Check whether there's a Perl version available.
6067 dnl ===================================================================
6068 if test -z "$with_perl_home"; then
6069     AC_PATH_PROG(PERL, perl)
6070 else
6071     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6072     _perl_path="$with_perl_home/bin/perl"
6073     if test -x "$_perl_path"; then
6074         PERL=$_perl_path
6075     else
6076         AC_MSG_ERROR([$_perl_path not found])
6077     fi
6080 dnl ===================================================================
6081 dnl Testing for Perl version 5 or greater.
6082 dnl $] is the Perl version variable, it is returned as an integer
6083 dnl ===================================================================
6084 if test "$PERL"; then
6085     AC_MSG_CHECKING([the Perl version])
6086     ${PERL} -e "exit($]);"
6087     _perl_version=$?
6088     if test "$_perl_version" -lt 5; then
6089         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6090     fi
6091     AC_MSG_RESULT([Perl $_perl_version])
6092 else
6093     AC_MSG_ERROR([Perl not found, install Perl 5])
6096 dnl ===================================================================
6097 dnl Testing for required Perl modules
6098 dnl ===================================================================
6100 AC_MSG_CHECKING([for required Perl modules])
6101 perl_use_string="use Cwd ; use Digest::MD5"
6102 if test "$_os" = "WINNT"; then
6103     if test -n "$PKGFORMAT"; then
6104         for i in $PKGFORMAT; do
6105             case "$i" in
6106             msi)
6107                 # for getting fonts versions to use in MSI
6108                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6109                 ;;
6110             esac
6111         done
6112     fi
6114 if test "$with_system_hsqldb" = "yes"; then
6115     perl_use_string="$perl_use_string ; use Archive::Zip"
6117 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6118     # OpenSSL needs that to build
6119     perl_use_string="$perl_use_string ; use FindBin"
6121 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6122     AC_MSG_RESULT([all modules found])
6123 else
6124     AC_MSG_RESULT([failed to find some modules])
6125     # Find out which modules are missing.
6126     for i in $perl_use_string; do
6127         if test "$i" != "use" -a "$i" != ";"; then
6128             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6129                 missing_perl_modules="$missing_perl_modules $i"
6130             fi
6131         fi
6132     done
6133     AC_MSG_ERROR([
6134     The missing Perl modules are: $missing_perl_modules
6135     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6138 dnl ===================================================================
6139 dnl Check for pkg-config
6140 dnl ===================================================================
6141 if test "$_os" != "WINNT"; then
6142     PKG_PROG_PKG_CONFIG
6145 if test "$_os" != "WINNT"; then
6147     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6148     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6149     # explicitly. Or put /path/to/compiler in PATH yourself.
6151     # Use wrappers for LTO
6152     if test "$ENABLE_LTO" = "TRUE" -a "$COM_IS_CLANG" != "TRUE"; then
6153         AC_CHECK_TOOL(AR,gcc-ar)
6154         AC_CHECK_TOOL(NM,gcc-nm)
6155         AC_CHECK_TOOL(RANLIB,gcc-ranlib)
6156     else
6157         AC_CHECK_TOOL(AR,ar)
6158         AC_CHECK_TOOL(NM,nm)
6159         AC_CHECK_TOOL(RANLIB,ranlib)
6160     fi
6161     AC_CHECK_TOOL(OBJDUMP,objdump)
6162     AC_CHECK_TOOL(READELF,readelf)
6163     AC_CHECK_TOOL(STRIP,strip)
6164     if test "$_os" = "WINNT"; then
6165         AC_CHECK_TOOL(DLLTOOL,dlltool)
6166         AC_CHECK_TOOL(WINDRES,windres)
6167     fi
6169 AC_SUBST(AR)
6170 AC_SUBST(DLLTOOL)
6171 AC_SUBST(LD)
6172 AC_SUBST(NM)
6173 AC_SUBST(OBJDUMP)
6174 AC_SUBST(PKG_CONFIG)
6175 AC_SUBST(PKG_CONFIG_PATH)
6176 AC_SUBST(PKG_CONFIG_LIBDIR)
6177 AC_SUBST(RANLIB)
6178 AC_SUBST(READELF)
6179 AC_SUBST(STRIP)
6180 AC_SUBST(WINDRES)
6182 dnl ===================================================================
6183 dnl pkg-config checks on macOS
6184 dnl ===================================================================
6186 if test $_os = Darwin; then
6187     AC_MSG_CHECKING([for bogus pkg-config])
6188     if test -n "$PKG_CONFIG"; then
6189         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6190             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6191         else
6192             if test "$enable_bogus_pkg_config" = "yes"; then
6193                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6194             else
6195                 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.])
6196             fi
6197         fi
6198     else
6199         AC_MSG_RESULT([no, good])
6200     fi
6203 find_csc()
6205     # Return value: $csctest
6207     unset csctest
6209     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client/InstallPath"
6210     if test -n "$regvalue"; then
6211         csctest=$regvalue
6212         return
6213     fi
6216 find_al()
6218     # Return value: $altest
6220     unset altest
6222     # We need this check to detect 4.6.1 or above.
6223     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6224         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools/InstallationFolder"
6225         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6226             altest=$regvalue
6227             return
6228         fi
6229     done
6231     for x in `ls /proc/registry32/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft\ SDKs/Windows`; do
6232         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools/InstallationFolder"
6233         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6234             altest=$regvalue
6235             return
6236         fi
6237     done
6240 find_dotnetsdk46()
6242     unset frametest
6244     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6; do
6245         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder"
6246         if test -n "$regvalue"; then
6247             frametest=$regvalue
6248             return
6249         fi
6250     done
6253 find_winsdk_version()
6255     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6256     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6258     unset winsdktest winsdkbinsubdir winsdklibsubdir
6260     case "$1" in
6261     8.0|8.0A)
6262         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
6263         if test -n "$regvalue"; then
6264             winsdktest=$regvalue
6265             winsdklibsubdir=win8
6266             return
6267         fi
6268         ;;
6269     8.1|8.1A)
6270         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot81"
6271         if test -n "$regvalue"; then
6272             winsdktest=$regvalue
6273             winsdklibsubdir=winv6.3
6274             return
6275         fi
6276         ;;
6277     10.0)
6278         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/InstallationFolder"
6279         if test -n "$regvalue"; then
6280             winsdktest=$regvalue
6281             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion"
6282             if test -n "$regvalue"; then
6283                 winsdkbinsubdir="$regvalue".0
6284                 winsdklibsubdir=$winsdkbinsubdir
6285                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6286                 local tmppath_unix=$(cygpath -u "$tmppath")
6287                 # test exist the SDK path
6288                 if test -d "$tmppath_unix"; then
6289                    # when path is convertible to a short path then path is okay
6290                    cygpath -d "$tmppath" >/dev/null 2>&1
6291                    if test $? -ne 0; then
6292                       AC_MSG_ERROR([Windows SDK doesn't have a 8.3 name, see NtfsDisable8dot3NameCreation])
6293                    fi
6294                 else
6295                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6296                 fi
6297             fi
6298             return
6299         fi
6300         ;;
6301     esac
6304 find_winsdk()
6306     # Return value: From find_winsdk_version
6308     unset winsdktest
6310     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6311         find_winsdk_version $ver
6312         if test -n "$winsdktest"; then
6313             return
6314         fi
6315     done
6318 find_msms()
6320     # Return value: $msmdir
6322     AC_MSG_CHECKING([for MSVC merge modules directory])
6323     local my_msm_files=Microsoft_VC${VCVER}_CRT_x86.msm
6324     local my_msm_dir
6326     case "$VCVER" in
6327         160)
6328         my_msm_files="Microsoft_VC141_CRT_x86.msm Microsoft_VC142_CRT_x86.msm ${my_msm_files}"
6329         ;;
6330     esac
6331     for f in $my_msm_files; do
6332         echo "$as_me:$LINENO: searching for $f" >&5
6333     done
6335     msmdir=
6336     for ver in 14.0 15.0; do
6337         reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/$ver/Setup/VS/MSMDir
6338         if test -n "$regvalue"; then
6339             for f in ${my_msm_files}; do
6340                 if test -e "$regvalue/${f}"; then
6341                     msmdir=$regvalue
6342                     break
6343                 fi
6344             done
6345         fi
6346     done
6347     dnl Is the following fallback really necessary, or was it added in response
6348     dnl to never having started Visual Studio on a given machine, so the
6349     dnl registry keys checked above had presumably not yet been created?
6350     dnl Anyway, if it really is necessary, it might be worthwhile to extend it
6351     dnl to also check %CommonProgramFiles(X86)% (typically expanding to
6352     dnl "C:\Program Files (X86)\Common Files" compared to %CommonProgramFiles%
6353     dnl expanding to "C:\Program Files\Common Files"), which would need
6354     dnl something like $(perl -e 'print $ENV{"CommonProgramFiles(x86)"}') to
6355     dnl obtain its value from cygwin:
6356     if test -z "$msmdir"; then
6357         my_msm_dir="${COMMONPROGRAMFILES}/Merge Modules/"
6358         for f in ${my_msm_files}; do
6359             if test -e "$my_msm_dir/${f}"; then
6360                 msmdir=$my_msm_dir
6361             fi
6362         done
6363     fi
6365     dnl Starting from MSVC 15.0, merge modules are located in different directory
6366     case "$VCVER" in
6367     160)
6368         for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6369             echo "$as_me:$LINENO: looking in $VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules])" >&5
6370             my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6371             for f in ${my_msm_files}; do
6372                 if test -e "$my_msm_dir/${f}"; then
6373                     msmdir=$my_msm_dir
6374                     break
6375                 fi
6376             done
6377         done
6378         ;;
6379     esac
6381     if test -n "$msmdir"; then
6382         msmdir=`cygpath -m "$msmdir"`
6383         AC_MSG_RESULT([$msmdir])
6384     else
6385         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6386             AC_MSG_FAILURE([not found])
6387         else
6388             AC_MSG_WARN([not found (check config.log)])
6389             add_warning "MSM none of ${my_msm_files} found"
6390         fi
6391     fi
6394 find_msvc_x64_dlls()
6396     # Return value: $msvcdllpath, $msvcdlls
6398     AC_MSG_CHECKING([for MSVC x64 DLL path])
6399     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6400     case "$VCVER" in
6401     160)
6402         for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6403             echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC141.CRT" >&5
6404             if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC141.CRT"; then
6405                 msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC141.CRT"
6406                 break
6407             fi
6408             echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC142.CRT" >&5
6409             if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC142.CRT"; then
6410                 msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC142.CRT"
6411                 break
6412             fi
6413         done
6414         ;;
6415     esac
6416     AC_MSG_RESULT([$msvcdllpath])
6417     AC_MSG_CHECKING([for MSVC x64 DLLs])
6418     msvcdlls="msvcp140.dll vcruntime140.dll"
6419     for dll in $msvcdlls; do
6420         if ! test -f "$msvcdllpath/$dll"; then
6421             AC_MSG_FAILURE([missing $dll])
6422         fi
6423     done
6424     AC_MSG_RESULT([found all ($msvcdlls)])
6427 dnl =========================================
6428 dnl Check for the Windows  SDK.
6429 dnl =========================================
6430 if test "$_os" = "WINNT"; then
6431     AC_MSG_CHECKING([for Windows SDK])
6432     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6433         find_winsdk
6434         WINDOWS_SDK_HOME=$winsdktest
6436         # normalize if found
6437         if test -n "$WINDOWS_SDK_HOME"; then
6438             WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
6439             WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
6440         fi
6442         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6443     fi
6445     if test -n "$WINDOWS_SDK_HOME"; then
6446         # Remove a possible trailing backslash
6447         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6449         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6450              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6451              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6452             have_windows_sdk_headers=yes
6453         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6454              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6455              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6456             have_windows_sdk_headers=yes
6457         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6458              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6459              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6460             have_windows_sdk_headers=yes
6461         else
6462             have_windows_sdk_headers=no
6463         fi
6465         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6466             have_windows_sdk_libs=yes
6467         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6468             have_windows_sdk_libs=yes
6469         else
6470             have_windows_sdk_libs=no
6471         fi
6473         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6474             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6475 the  Windows SDK are installed.])
6476         fi
6477     fi
6479     if test -z "$WINDOWS_SDK_HOME"; then
6480         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6481     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6482         WINDOWS_SDK_VERSION=80
6483         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6484     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6485         WINDOWS_SDK_VERSION=81
6486         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6487     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6488         WINDOWS_SDK_VERSION=10
6489         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6490     else
6491         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6492     fi
6493     PathFormat "$WINDOWS_SDK_HOME"
6494     WINDOWS_SDK_HOME="$formatted_path"
6495     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6496     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6497         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6498         if test -d "$WINDOWS_SDK_HOME/include/um"; then
6499             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6500         elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then
6501             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6502         fi
6503     fi
6505     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6506     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6507     dnl but not in v8.0), so allow this to be overridden with a
6508     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6509     dnl and configuration error if no WiLangId.vbs is found would arguably be
6510     dnl better, but I do not know under which conditions exactly it is needed by
6511     dnl msiglobal.pm:
6512     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6513         WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6514         WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6515         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6516             WINDOWS_SDK_WILANGID="${WINDOWS_SDK_HOME}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6517             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6518         fi
6519         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6520             WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6521             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6522         fi
6523         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6524             WINDOWS_SDK_WILANGID=$(cygpath -sm "C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs")
6525             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6526         fi
6527     fi
6528     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6529         if test -n "$with_package_format" -a "$with_package_format" != no; then
6530             for i in "$with_package_format"; do
6531                 if test "$i" = "msi"; then
6532                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6533                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6534                     fi
6535                 fi
6536             done
6537         fi
6538     fi
6540 AC_SUBST(WINDOWS_SDK_HOME)
6541 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6542 AC_SUBST(WINDOWS_SDK_VERSION)
6543 AC_SUBST(WINDOWS_SDK_WILANGID)
6545 if test "$build_os" = "cygwin"; then
6546     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6547     dnl dir, it also determines that dir's path w/o an arch segment if any,
6548     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6549     AC_MSG_CHECKING([for midl.exe])
6551     find_winsdk
6552     if test -n "$winsdkbinsubdir" \
6553         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6554     then
6555         MIDL_PATH=$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6556         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin/$winsdkbinsubdir
6557     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6558         MIDL_PATH=$winsdktest/Bin/$WIN_BUILD_ARCH
6559         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6560     elif test -f "$winsdktest/Bin/midl.exe"; then
6561         MIDL_PATH=$winsdktest/Bin
6562         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6563     fi
6564     if test ! -f "$MIDL_PATH/midl.exe"; then
6565         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6566     else
6567         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6568     fi
6570     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6571     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6573     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6574          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6575          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6576          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6577     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6578          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6579          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6580          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
6581     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
6582          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
6583          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6584          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
6585     else
6586         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
6587     fi
6589     dnl Check csc.exe
6590     AC_MSG_CHECKING([for csc.exe])
6591     find_csc
6592     if test -f "$csctest/csc.exe"; then
6593         CSC_PATH="$csctest"
6594     fi
6595     if test ! -f "$CSC_PATH/csc.exe"; then
6596         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
6597     else
6598         AC_MSG_RESULT([$CSC_PATH/csc.exe])
6599     fi
6601     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
6603     dnl Check al.exe
6604     AC_MSG_CHECKING([for al.exe])
6605     find_winsdk
6606     if test -n "$winsdkbinsubdir" \
6607         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
6608     then
6609         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
6610     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/al.exe"; then
6611         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
6612     elif test -f "$winsdktest/Bin/al.exe"; then
6613         AL_PATH="$winsdktest/Bin"
6614     fi
6616     if test -z "$AL_PATH"; then
6617         find_al
6618         if test -f "$altest/bin/al.exe"; then
6619             AL_PATH="$altest/bin"
6620         elif test -f "$altest/al.exe"; then
6621             AL_PATH="$altest"
6622         fi
6623     fi
6624     if test ! -f "$AL_PATH/al.exe"; then
6625         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
6626     else
6627         AC_MSG_RESULT([$AL_PATH/al.exe])
6628     fi
6630     AL_PATH=`win_short_path_for_make "$AL_PATH"`
6632     dnl Check mscoree.lib / .NET Framework dir
6633     AC_MSG_CHECKING(.NET Framework)
6634     find_dotnetsdk46
6635     PathFormat "$frametest"
6636     frametest="$formatted_path"
6637     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6638         DOTNET_FRAMEWORK_HOME="$frametest"
6639     else
6640         find_winsdk
6641         if test -f "$winsdktest/lib/mscoree.lib" -o -f "$winsdktest/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6642             DOTNET_FRAMEWORK_HOME="$winsdktest"
6643         fi
6644     fi
6645     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
6646         AC_MSG_ERROR([mscoree.lib not found])
6647     fi
6648     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
6650     PathFormat "$MIDL_PATH"
6651     MIDL_PATH="$formatted_path"
6653     PathFormat "$AL_PATH"
6654     AL_PATH="$formatted_path"
6656     PathFormat "$DOTNET_FRAMEWORK_HOME"
6657     DOTNET_FRAMEWORK_HOME="$formatted_path"
6659     PathFormat "$CSC_PATH"
6660     CSC_PATH="$formatted_path"
6663 dnl ===================================================================
6664 dnl Testing for C++ compiler and version...
6665 dnl ===================================================================
6667 if test "$_os" != "WINNT"; then
6668     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that
6669     save_CXXFLAGS=$CXXFLAGS
6670     AC_PROG_CXX
6671     CXXFLAGS=$save_CXXFLAGS
6672     if test -z "$CXX_BASE"; then
6673         CXX_BASE=`first_arg_basename "$CXX"`
6674     fi
6677 dnl check for GNU C++ compiler version
6678 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
6679     AC_MSG_CHECKING([the GNU C++ compiler version])
6681     _gpp_version=`$CXX -dumpversion`
6682     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
6684     if test "$_gpp_majmin" -lt "700"; then
6685         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
6686     else
6687         AC_MSG_RESULT([ok (g++ $_gpp_version)])
6688     fi
6690     dnl see https://code.google.com/p/android/issues/detail?id=41770
6691         glibcxx_threads=no
6692         AC_LANG_PUSH([C++])
6693         AC_REQUIRE_CPP
6694         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
6695         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
6696             #include <bits/c++config.h>]],[[
6697             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
6698             && !defined(_GLIBCXX__PTHREADS) \
6699             && !defined(_GLIBCXX_HAS_GTHREADS)
6700             choke me
6701             #endif
6702         ]])],[AC_MSG_RESULT([yes])
6703         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
6704         AC_LANG_POP([C++])
6705         if test $glibcxx_threads = yes; then
6706             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
6707         fi
6709 AC_SUBST(BOOST_CXXFLAGS)
6712 # prefx CXX with ccache if needed
6714 UNCACHED_CXX="$CXX"
6715 if test "$CCACHE" != ""; then
6716     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
6717     AC_LANG_PUSH([C++])
6718     save_CXXFLAGS=$CXXFLAGS
6719     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
6720     dnl an empty program will do, we're checking the compiler flags
6721     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
6722                       [use_ccache=yes], [use_ccache=no])
6723     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
6724         AC_MSG_RESULT([yes])
6725     else
6726         CXX="$CCACHE $CXX"
6727         CXX_BASE="ccache $CXX_BASE"
6728         AC_MSG_RESULT([no])
6729     fi
6730     CXXFLAGS=$save_CXXFLAGS
6731     AC_LANG_POP([C++])
6734 dnl ===================================================================
6735 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
6736 dnl ===================================================================
6738 if test "$_os" != "WINNT"; then
6739     AC_PROG_CXXCPP
6741     dnl Check whether there's a C pre-processor.
6742     AC_PROG_CPP
6746 dnl ===================================================================
6747 dnl Find integral type sizes and alignments
6748 dnl ===================================================================
6750 if test "$_os" != "WINNT"; then
6752     AC_CHECK_SIZEOF(long)
6753     AC_CHECK_SIZEOF(short)
6754     AC_CHECK_SIZEOF(int)
6755     AC_CHECK_SIZEOF(long long)
6756     AC_CHECK_SIZEOF(double)
6757     AC_CHECK_SIZEOF(void*)
6759     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
6760     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
6761     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
6762     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
6763     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
6765     dnl Allow build without AC_CHECK_ALIGNOF, grrr
6766     m4_pattern_allow([AC_CHECK_ALIGNOF])
6767     m4_ifdef([AC_CHECK_ALIGNOF],
6768         [
6769             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
6770             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
6771             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
6772             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
6773         ],
6774         [
6775             case "$_os-$host_cpu" in
6776             Linux-i686)
6777                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6778                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6779                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
6780                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
6781                 ;;
6782             Linux-x86_64)
6783                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6784                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6785                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
6786                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
6787                 ;;
6788             *)
6789                 if test -z "$ac_cv_alignof_short" -o \
6790                         -z "$ac_cv_alignof_int" -o \
6791                         -z "$ac_cv_alignof_long" -o \
6792                         -z "$ac_cv_alignof_double"; then
6793                    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.])
6794                 fi
6795                 ;;
6796             esac
6797         ])
6799     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
6800     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
6801     if test $ac_cv_sizeof_long -eq 8; then
6802         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
6803     elif test $ac_cv_sizeof_double -eq 8; then
6804         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
6805     else
6806         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
6807     fi
6809     dnl Check for large file support
6810     AC_SYS_LARGEFILE
6811     if test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
6812         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
6813     fi
6814     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
6815         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
6816     fi
6817 else
6818     # Hardcode for MSVC
6819     SAL_TYPES_SIZEOFSHORT=2
6820     SAL_TYPES_SIZEOFINT=4
6821     SAL_TYPES_SIZEOFLONG=4
6822     SAL_TYPES_SIZEOFLONGLONG=8
6823     if test $WIN_HOST_BITS -eq 32; then
6824         SAL_TYPES_SIZEOFPOINTER=4
6825     else
6826         SAL_TYPES_SIZEOFPOINTER=8
6827     fi
6828     SAL_TYPES_ALIGNMENT2=2
6829     SAL_TYPES_ALIGNMENT4=4
6830     SAL_TYPES_ALIGNMENT8=8
6831     LFS_CFLAGS=''
6833 AC_SUBST(LFS_CFLAGS)
6835 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
6836 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
6837 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
6838 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
6839 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
6840 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
6841 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
6842 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
6844 dnl ===================================================================
6845 dnl Check whether to enable runtime optimizations
6846 dnl ===================================================================
6847 ENABLE_RUNTIME_OPTIMIZATIONS=
6848 AC_MSG_CHECKING([whether to enable runtime optimizations])
6849 if test -z "$enable_runtime_optimizations"; then
6850     for i in $CC; do
6851         case $i in
6852         -fsanitize=*)
6853             enable_runtime_optimizations=no
6854             break
6855             ;;
6856         esac
6857     done
6859 if test "$enable_runtime_optimizations" != no; then
6860     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
6861     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
6862     AC_MSG_RESULT([yes])
6863 else
6864     AC_MSG_RESULT([no])
6866 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
6868 dnl ===================================================================
6869 dnl Check if valgrind headers are available
6870 dnl ===================================================================
6871 ENABLE_VALGRIND=
6872 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
6873     prev_cppflags=$CPPFLAGS
6874     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
6875     # or where does it come from?
6876     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
6877     AC_CHECK_HEADER([valgrind/valgrind.h],
6878         [ENABLE_VALGRIND=TRUE])
6879     CPPFLAGS=$prev_cppflags
6881 AC_SUBST([ENABLE_VALGRIND])
6882 if test -z "$ENABLE_VALGRIND"; then
6883     if test "$with_valgrind" = yes; then
6884         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
6885     fi
6886     VALGRIND_CFLAGS=
6888 AC_SUBST([VALGRIND_CFLAGS])
6891 dnl ===================================================================
6892 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
6893 dnl ===================================================================
6895 # We need at least the sys/sdt.h include header.
6896 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
6897 if test "$SDT_H_FOUND" = "TRUE"; then
6898     # Found sys/sdt.h header, now make sure the c++ compiler works.
6899     # Old g++ versions had problems with probes in constructors/destructors.
6900     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
6901     AC_LANG_PUSH([C++])
6902     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
6903     #include <sys/sdt.h>
6904     class ProbeClass
6905     {
6906     private:
6907       int& ref;
6908       const char *name;
6910     public:
6911       ProbeClass(int& v, const char *n) : ref(v), name(n)
6912       {
6913         DTRACE_PROBE2(_test_, cons, name, ref);
6914       }
6916       void method(int min)
6917       {
6918         DTRACE_PROBE3(_test_, meth, name, ref, min);
6919         ref -= min;
6920       }
6922       ~ProbeClass()
6923       {
6924         DTRACE_PROBE2(_test_, dest, name, ref);
6925       }
6926     };
6927     ]],[[
6928     int i = 64;
6929     DTRACE_PROBE1(_test_, call, i);
6930     ProbeClass inst = ProbeClass(i, "call");
6931     inst.method(24);
6932     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
6933           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
6934     AC_LANG_POP([C++])
6936 AC_CONFIG_HEADERS([config_host/config_probes.h])
6938 dnl ===================================================================
6939 dnl GCC features
6940 dnl ===================================================================
6941 HAVE_GCC_STACK_CLASH_PROTECTION=
6942 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
6943     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
6944     save_CFLAGS=$CFLAGS
6945     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
6946     AC_LINK_IFELSE(
6947         [AC_LANG_PROGRAM(, [[return 0;]])],
6948         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
6949         [AC_MSG_RESULT([no])])
6950     CFLAGS=$save_CFLAGS
6952     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
6953     save_CFLAGS=$CFLAGS
6954     CFLAGS="$CFLAGS -Werror -mno-avx"
6955     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
6956     CFLAGS=$save_CFLAGS
6957     if test "$HAVE_GCC_AVX" = "TRUE"; then
6958         AC_MSG_RESULT([yes])
6959     else
6960         AC_MSG_RESULT([no])
6961     fi
6963     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
6964     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
6965     int v = 0;
6966     if (__sync_add_and_fetch(&v, 1) != 1 ||
6967         __sync_sub_and_fetch(&v, 1) != 0)
6968         return 1;
6969     __sync_synchronize();
6970     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
6971         v != 1)
6972         return 1;
6973     return 0;
6974 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
6975     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
6976         AC_MSG_RESULT([yes])
6977         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
6978     else
6979         AC_MSG_RESULT([no])
6980     fi
6982     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
6983     AC_LANG_PUSH([C++])
6984     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
6985             #include <cstddef>
6986             #include <cxxabi.h>
6987             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
6988         ])], [
6989             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
6990             AC_MSG_RESULT([yes])
6991         ], [AC_MSG_RESULT([no])])
6992     AC_LANG_POP([C++])
6994     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
6995     AC_LANG_PUSH([C++])
6996     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
6997             #include <cstddef>
6998             #include <cxxabi.h>
6999             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7000         ])], [
7001             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7002             AC_MSG_RESULT([yes])
7003         ], [AC_MSG_RESULT([no])])
7004     AC_LANG_POP([C++])
7006     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7007     AC_LANG_PUSH([C++])
7008     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7009             #include <cxxabi.h>
7010             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7011         ])], [
7012             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7013             AC_MSG_RESULT([yes])
7014         ], [AC_MSG_RESULT([no])])
7015     AC_LANG_POP([C++])
7017     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7018     AC_LANG_PUSH([C++])
7019     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7020             #include <cstddef>
7021             #include <cxxabi.h>
7022             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7023         ])], [
7024             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7025             AC_MSG_RESULT([yes])
7026         ], [AC_MSG_RESULT([no])])
7027     AC_LANG_POP([C++])
7029     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7030     AC_LANG_PUSH([C++])
7031     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7032             #include <cstddef>
7033             #include <cxxabi.h>
7034             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7035         ])], [
7036             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7037             AC_MSG_RESULT([yes])
7038         ], [AC_MSG_RESULT([no])])
7039     AC_LANG_POP([C++])
7041     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7042     AC_LANG_PUSH([C++])
7043     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7044             #include <cxxabi.h>
7045             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7046         ])], [
7047             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7048             AC_MSG_RESULT([yes])
7049         ], [AC_MSG_RESULT([no])])
7050     AC_LANG_POP([C++])
7052     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7053     AC_LANG_PUSH([C++])
7054     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7055             #include <cxxabi.h>
7056             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7057         ])], [
7058             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7059             AC_MSG_RESULT([yes])
7060         ], [AC_MSG_RESULT([no])])
7061     AC_LANG_POP([C++])
7063     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7064     AC_LANG_PUSH([C++])
7065     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7066             #include <cxxabi.h>
7067             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7068         ])], [
7069             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7070             AC_MSG_RESULT([yes])
7071         ], [AC_MSG_RESULT([no])])
7072     AC_LANG_POP([C++])
7074     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info in cxxabi.h])
7075     AC_LANG_PUSH([C++])
7076     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7077             #include <cstddef>
7078             #include <cxxabi.h>
7079             std::size_t f() { return sizeof(__cxxabiv1::__si_class_type_info); }
7080         ])], [
7081             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7082             AC_MSG_RESULT([yes])
7083         ], [AC_MSG_RESULT([no])])
7084     AC_LANG_POP([C++])
7086     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7087     AC_LANG_PUSH([C++])
7088     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7089             #include <cstddef>
7090             #include <cxxabi.h>
7091             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7092         ])], [
7093             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7094             AC_MSG_RESULT([yes])
7095         ], [AC_MSG_RESULT([no])])
7096     AC_LANG_POP([C++])
7099 AC_SUBST(HAVE_GCC_AVX)
7100 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7101 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7103 dnl ===================================================================
7104 dnl Identify the C++ library
7105 dnl ===================================================================
7107 AC_MSG_CHECKING([what the C++ library is])
7108 AC_LANG_PUSH([C++])
7109 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7110 #include <utility>
7111 #ifndef __GLIBCXX__
7112 foo bar
7113 #endif
7114 ]])],
7115     [CPP_LIBRARY=GLIBCXX
7116      cpp_library_name="GNU libstdc++"
7117     ],
7118     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7119 #include <utility>
7120 #ifndef _LIBCPP_VERSION
7121 foo bar
7122 #endif
7123 ]])],
7124     [CPP_LIBRARY=LIBCPP
7125      cpp_library_name="LLVM libc++"
7126      AC_DEFINE([HAVE_LIBCXX])
7127     ],
7128     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7129 #include <utility>
7130 #ifndef _MSC_VER
7131 foo bar
7132 #endif
7133 ]])],
7134     [CPP_LIBRARY=MSVCRT
7135      cpp_library_name="Microsoft"
7136     ],
7137     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7138 AC_MSG_RESULT([$cpp_library_name])
7139 AC_LANG_POP([C++])
7141 dnl ===================================================================
7142 dnl Check for gperf
7143 dnl ===================================================================
7144 AC_PATH_PROG(GPERF, gperf)
7145 if test -z "$GPERF"; then
7146     AC_MSG_ERROR([gperf not found but needed. Install it.])
7148 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7149     GPERF=`cygpath -m $GPERF`
7151 AC_MSG_CHECKING([whether gperf is new enough])
7152 my_gperf_ver1=$($GPERF --version | head -n 1)
7153 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7154 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7155 if test "$my_gperf_ver3" -ge 301; then
7156     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7157 else
7158     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7160 AC_SUBST(GPERF)
7162 dnl ===================================================================
7163 dnl Check for system libcmis
7164 dnl ===================================================================
7165 # libcmis requires curl and we can't build curl for iOS
7166 if test "$test_cmis" = "yes" -a "$enable_cmis" = "yes"; then
7167     libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.5 >= 0.5.2])
7168     ENABLE_LIBCMIS=TRUE
7169 else
7170     ENABLE_LIBCMIS=
7172 AC_SUBST(ENABLE_LIBCMIS)
7174 dnl ===================================================================
7175 dnl C++11
7176 dnl ===================================================================
7178 AC_MSG_CHECKING([whether $CXX_BASE supports C++17])
7179 CXXFLAGS_CXX11=
7180 if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7181     if test "$with_latest_c__" = yes; then
7182         CXXFLAGS_CXX11=-std:c++latest
7183     else
7184         CXXFLAGS_CXX11=-std:c++17
7185     fi
7186     CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus"
7187 elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7188     my_flags='-std=c++17 -std=c++1z'
7189     if test "$with_latest_c__" = yes; then
7190         my_flags="-std=c++23 -std=c++2b -std=c++20 -std=c++2a $my_flags"
7191     fi
7192     for flag in $my_flags; do
7193         if test "$COM" = MSC; then
7194             flag="-Xclang $flag"
7195         fi
7196         save_CXXFLAGS=$CXXFLAGS
7197         CXXFLAGS="$CXXFLAGS $flag -Werror"
7198         if test "$SYSTEM_LIBCMIS" = TRUE; then
7199             CXXFLAGS="$CXXFLAGS -DSYSTEM_LIBCMIS $LIBCMIS_CFLAGS"
7200         fi
7201         AC_LANG_PUSH([C++])
7202         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7203             #include <algorithm>
7204             #include <functional>
7205             #include <vector>
7207             #if defined SYSTEM_LIBCMIS
7208             // See ucb/source/ucp/cmis/auth_provider.hxx:
7209             #if !defined __clang__
7210             #pragma GCC diagnostic push
7211             #pragma GCC diagnostic ignored "-Wdeprecated"
7212             #pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
7213             #endif
7214             #include <libcmis/libcmis.hxx>
7215             #if !defined __clang__
7216             #pragma GCC diagnostic pop
7217             #endif
7218             #endif
7220             void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7221                 std::sort(v.begin(), v.end(), fn);
7222             }
7223             ]])],[CXXFLAGS_CXX11=$flag])
7224         AC_LANG_POP([C++])
7225         CXXFLAGS=$save_CXXFLAGS
7226         if test -n "$CXXFLAGS_CXX11"; then
7227             break
7228         fi
7229     done
7231 if test -n "$CXXFLAGS_CXX11"; then
7232     AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7233 else
7234     AC_MSG_ERROR(no)
7236 AC_SUBST(CXXFLAGS_CXX11)
7238 if test "$GCC" = "yes"; then
7239     save_CXXFLAGS=$CXXFLAGS
7240     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7241     CHECK_L_ATOMIC
7242     CXXFLAGS=$save_CXXFLAGS
7243     AC_SUBST(ATOMIC_LIB)
7246 dnl Test for temporarily incompatible libstdc++ 4.7.{0,1}, where
7247 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=179528> introduced
7248 dnl an additional member _M_size into C++11 std::list towards 4.7.0 and
7249 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=189186> removed it
7250 dnl again towards 4.7.2:
7251 if test $CPP_LIBRARY = GLIBCXX; then
7252     AC_MSG_CHECKING([whether using C++11 causes libstdc++ 4.7.0/4.7.1 ABI breakage])
7253     AC_LANG_PUSH([C++])
7254     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7255 #include <list>
7256 #if !defined __GLIBCXX__ || (__GLIBCXX__ != 20120322 && __GLIBCXX__ != 20120614)
7257     // according to <https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html>:
7258     //   GCC 4.7.0: 20120322
7259     //   GCC 4.7.1: 20120614
7260     // and using a range check is not possible as the mapping between
7261     // __GLIBCXX__ values and GCC versions is not monotonic
7262 /* ok */
7263 #else
7264 abi broken
7265 #endif
7266         ]])], [AC_MSG_RESULT(no, ok)],
7267         [AC_MSG_ERROR(yes)])
7268     AC_LANG_POP([C++])
7271 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7272 save_CXXFLAGS=$CXXFLAGS
7273 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7274 AC_LANG_PUSH([C++])
7276 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7277 #include <stddef.h>
7279 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7281 namespace
7283         struct b
7284         {
7285                 int i;
7286                 int j;
7287         };
7289 ]], [[
7290 struct a
7292         int i;
7293         int j;
7295 a thinga[]={{0,0}, {1,1}};
7296 b thingb[]={{0,0}, {1,1}};
7297 size_t i = sizeof(sal_n_array_size(thinga));
7298 size_t j = sizeof(sal_n_array_size(thingb));
7299 return !(i != 0 && j != 0);
7301     ], [ AC_MSG_RESULT(yes) ],
7302     [ AC_MSG_ERROR(no)])
7303 AC_LANG_POP([C++])
7304 CXXFLAGS=$save_CXXFLAGS
7306 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7307 if test "$GCC" = yes; then
7308     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7309     AC_LANG_PUSH([C++])
7310     save_CXXFLAGS=$CXXFLAGS
7311     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7312     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7313     CXXFLAGS=$save_CXXFLAGS
7314     AC_LANG_POP([C++])
7315     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7316         AC_MSG_RESULT([yes])
7317     else
7318         AC_MSG_RESULT([no])
7319     fi
7321 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7323 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
7324 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
7325 dnl from consteval constructor initializing const variable",
7326 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
7327 dnl expression' with consteval constructor", or <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
7328 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
7329 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'":
7330 AC_LANG_PUSH([C++])
7331 save_CXXFLAGS=$CXXFLAGS
7332 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7333 AC_RUN_IFELSE([AC_LANG_PROGRAM([
7334         struct S {
7335             consteval S() { i = 1; }
7336             int i = 0;
7337         };
7338         S const s;
7340         struct S1 { consteval S1(int) {} };
7341         struct S2 {
7342             S1 x;
7343             S2(): x(0) {}
7344         };
7346         struct S3 {
7347             consteval S3() {}
7348             union {
7349                 int a;
7350                 unsigned b = 0;
7351             };
7352         };
7353         void f() { S3(); }
7354     ], [
7355         return (s.i == 1) ? 0 : 1;
7356     ])], [
7357         AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
7358         AC_MSG_RESULT([yes])
7359     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
7360 CXXFLAGS=$save_CXXFLAGS
7361 AC_LANG_POP([C++])
7363 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7364 AC_LANG_PUSH([C++])
7365 save_CXXFLAGS=$CXXFLAGS
7366 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7367 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7368         #include <algorithm>
7369         #include <initializer_list>
7370         #include <vector>
7371         template<typename T> class S {
7372         private:
7373             std::vector<T> v_;
7374         public:
7375             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7376         };
7377         constinit S<int> s{3, 2, 1};
7378     ])], [
7379         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7380         AC_MSG_RESULT([yes])
7381     ], [AC_MSG_RESULT([no])])
7382 CXXFLAGS=$save_CXXFLAGS
7383 AC_LANG_POP([C++])
7385 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a <span> with unsigned size_type])
7386 AC_LANG_PUSH([C++])
7387 save_CXXFLAGS=$CXXFLAGS
7388 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7389 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7390         #include <span>
7391         #include <type_traits>
7392         // Don't check size_type directly, as it was called index_type before P1872R0:
7393         void f(std::span<int> s) { static_assert(std::is_unsigned_v<decltype(s.size())>); };
7394     ])], [
7395         AC_DEFINE([HAVE_CPP_SPAN],[1])
7396         AC_MSG_RESULT([yes])
7397     ], [AC_MSG_RESULT([no])])
7398 CXXFLAGS=$save_CXXFLAGS
7399 AC_LANG_POP([C++])
7401 AC_MSG_CHECKING([whether $CXX_BASE implements C++ DR P1155R3])
7402 AC_LANG_PUSH([C++])
7403 save_CXXFLAGS=$CXXFLAGS
7404 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7405 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7406         struct S1 { S1(S1 &&); };
7407         struct S2: S1 {};
7408         S1 f(S2 s) { return s; }
7409     ])], [
7410         AC_DEFINE([HAVE_P1155R3],[1])
7411         AC_MSG_RESULT([yes])
7412     ], [AC_MSG_RESULT([no])])
7413 CXXFLAGS=$save_CXXFLAGS
7414 AC_LANG_POP([C++])
7416 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7417 dnl which is included in -Wextra anyway):
7418 HAVE_WDEPRECATED_COPY_DTOR=
7419 if test "$GCC" = yes; then
7420     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7421     AC_LANG_PUSH([C++])
7422     save_CXXFLAGS=$CXXFLAGS
7423     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7424     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7425             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7426             AC_MSG_RESULT([yes])
7427         ], [AC_MSG_RESULT([no])])
7428     CXXFLAGS=$save_CXXFLAGS
7429     AC_LANG_POP([C++])
7431 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7433 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7434 dnl uninitialized warning for code like
7436 dnl   OString f();
7437 dnl   boost::optional<OString> * g(bool b) {
7438 dnl       boost::optional<OString> o;
7439 dnl       if (b) o = f();
7440 dnl       return new boost::optional<OString>(o);
7441 dnl   }
7443 dnl (as is e.g. present, in a slightly more elaborate form, in
7444 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7445 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7446 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7447 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7448     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7449     AC_LANG_PUSH([C++])
7450     save_CXXFLAGS=$CXXFLAGS
7451     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7452     if test "$ENABLE_OPTIMIZED" = TRUE; then
7453         CXXFLAGS="$CXXFLAGS -O2"
7454     else
7455         CXXFLAGS="$CXXFLAGS -O0"
7456     fi
7457     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7458             #include <new>
7459             void f1(int);
7460             struct S1 {
7461                 ~S1() { f1(n); }
7462                 int n = 0;
7463             };
7464             struct S2 {
7465                 S2() {}
7466                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7467                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7468                 void set(S1 s) {
7469                     new (stg) S1(s);
7470                     init = true;
7471                 }
7472                 bool init = false;
7473                 char stg[sizeof (S1)];
7474             } ;
7475             S1 f2();
7476             S2 * f3(bool b) {
7477                 S2 o;
7478                 if (b) o.set(f2());
7479                 return new S2(o);
7480             }
7481         ]])], [AC_MSG_RESULT([no])], [
7482             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7483             AC_MSG_RESULT([yes])
7484         ])
7485     CXXFLAGS=$save_CXXFLAGS
7486     AC_LANG_POP([C++])
7488 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7490 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7491 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7492 dnl hits us e.g. with GCC 10 and --enable-optimized at
7494 dnl   In file included from include/rtl/string.hxx:49,
7495 dnl                    from include/rtl/ustring.hxx:43,
7496 dnl                    from include/osl/file.hxx:35,
7497 dnl                    from include/codemaker/global.hxx:28,
7498 dnl                    from include/codemaker/options.hxx:23,
7499 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7500 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7501 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,
7502 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,
7503 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,
7504 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7505 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7506 dnl      78 |         memcpy( buffer, data, length );
7507 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7508 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7509 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7510     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7511     AC_LANG_PUSH([C++])
7512     save_CXXFLAGS=$CXXFLAGS
7513     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7514     if test "$ENABLE_OPTIMIZED" = TRUE; then
7515         CXXFLAGS="$CXXFLAGS -O2"
7516     else
7517         CXXFLAGS="$CXXFLAGS -O0"
7518     fi
7519     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7520     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7521             void fill(char const * begin, char const * end, char c);
7522             struct q {
7523                 char ids[4];
7524                 char username[6];
7525             };
7526             void test(q & c) {
7527                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
7528                 __builtin_strncpy(c.username, "root", sizeof(c.username));
7529             }
7530         ]])], [AC_MSG_RESULT([no])], [
7531             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
7532             AC_MSG_RESULT([yes])
7533         ])
7534     CXXFLAGS=$save_CXXFLAGS
7535     AC_LANG_POP([C++])
7537 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
7539 dnl ===================================================================
7540 dnl CPU Intrinsics support - SSE, AVX
7541 dnl ===================================================================
7543 CXXFLAGS_INTRINSICS_SSE2=
7544 CXXFLAGS_INTRINSICS_SSSE3=
7545 CXXFLAGS_INTRINSICS_SSE41=
7546 CXXFLAGS_INTRINSICS_SSE42=
7547 CXXFLAGS_INTRINSICS_AVX=
7548 CXXFLAGS_INTRINSICS_AVX2=
7549 CXXFLAGS_INTRINSICS_AVX512=
7550 CXXFLAGS_INTRINSICS_F16C=
7551 CXXFLAGS_INTRINSICS_FMA=
7553 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7554     # GCC, Clang or Clang-cl (clang-cl + MSVC's -arch options don't work well together)
7555     flag_sse2=-msse2
7556     flag_ssse3=-mssse3
7557     flag_sse41=-msse4.1
7558     flag_sse42=-msse4.2
7559     flag_avx=-mavx
7560     flag_avx2=-mavx2
7561     flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
7562     flag_f16c=-mf16c
7563     flag_fma=-mfma
7564 else
7565     # https://docs.microsoft.com/en-us/cpp/build/reference/arch-x86
7566     # MSVC seems to differentiate only between SSE and SSE2, where in fact
7567     # SSE2 seems to be SSE2+.
7568     # Even if -arch:SSE2 is the default, set it explicitly, so that the variable
7569     # is not empty (and can be tested in gbuild).
7570     flag_sse2=-arch:SSE2
7571     flag_ssse3=-arch:SSE2
7572     flag_sse41=-arch:SSE2
7573     flag_sse42=-arch:SSE2
7574     flag_avx=-arch:AVX
7575     flag_avx2=-arch:AVX2
7576     flag_avx512=-arch:AVX512
7577     # These are part of -arch:AVX2
7578     flag_f16c=-arch:AVX2
7579     flag_fma=-arch:AVX2
7582 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
7583 AC_LANG_PUSH([C++])
7584 save_CXXFLAGS=$CXXFLAGS
7585 CXXFLAGS="$CXXFLAGS $flag_sse2"
7586 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7587     #include <emmintrin.h>
7588     int main () {
7589         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7590         c = _mm_xor_si128 (a, b);
7591         return 0;
7592     }
7593     ])],
7594     [can_compile_sse2=yes],
7595     [can_compile_sse2=no])
7596 AC_LANG_POP([C++])
7597 CXXFLAGS=$save_CXXFLAGS
7598 AC_MSG_RESULT([${can_compile_sse2}])
7599 if test "${can_compile_sse2}" = "yes" ; then
7600     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
7603 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
7604 AC_LANG_PUSH([C++])
7605 save_CXXFLAGS=$CXXFLAGS
7606 CXXFLAGS="$CXXFLAGS $flag_ssse3"
7607 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7608     #include <tmmintrin.h>
7609     int main () {
7610         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7611         c = _mm_maddubs_epi16 (a, b);
7612         return 0;
7613     }
7614     ])],
7615     [can_compile_ssse3=yes],
7616     [can_compile_ssse3=no])
7617 AC_LANG_POP([C++])
7618 CXXFLAGS=$save_CXXFLAGS
7619 AC_MSG_RESULT([${can_compile_ssse3}])
7620 if test "${can_compile_ssse3}" = "yes" ; then
7621     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
7624 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
7625 AC_LANG_PUSH([C++])
7626 save_CXXFLAGS=$CXXFLAGS
7627 CXXFLAGS="$CXXFLAGS $flag_sse41"
7628 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7629     #include <smmintrin.h>
7630     int main () {
7631         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7632         c = _mm_cmpeq_epi64 (a, b);
7633         return 0;
7634     }
7635     ])],
7636     [can_compile_sse41=yes],
7637     [can_compile_sse41=no])
7638 AC_LANG_POP([C++])
7639 CXXFLAGS=$save_CXXFLAGS
7640 AC_MSG_RESULT([${can_compile_sse41}])
7641 if test "${can_compile_sse41}" = "yes" ; then
7642     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
7645 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
7646 AC_LANG_PUSH([C++])
7647 save_CXXFLAGS=$CXXFLAGS
7648 CXXFLAGS="$CXXFLAGS $flag_sse42"
7649 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7650     #include <nmmintrin.h>
7651     int main () {
7652         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7653         c = _mm_cmpgt_epi64 (a, b);
7654         return 0;
7655     }
7656     ])],
7657     [can_compile_sse42=yes],
7658     [can_compile_sse42=no])
7659 AC_LANG_POP([C++])
7660 CXXFLAGS=$save_CXXFLAGS
7661 AC_MSG_RESULT([${can_compile_sse42}])
7662 if test "${can_compile_sse42}" = "yes" ; then
7663     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
7666 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
7667 AC_LANG_PUSH([C++])
7668 save_CXXFLAGS=$CXXFLAGS
7669 CXXFLAGS="$CXXFLAGS $flag_avx"
7670 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7671     #include <immintrin.h>
7672     int main () {
7673         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
7674         c = _mm256_xor_ps(a, b);
7675         return 0;
7676     }
7677     ])],
7678     [can_compile_avx=yes],
7679     [can_compile_avx=no])
7680 AC_LANG_POP([C++])
7681 CXXFLAGS=$save_CXXFLAGS
7682 AC_MSG_RESULT([${can_compile_avx}])
7683 if test "${can_compile_avx}" = "yes" ; then
7684     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
7687 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
7688 AC_LANG_PUSH([C++])
7689 save_CXXFLAGS=$CXXFLAGS
7690 CXXFLAGS="$CXXFLAGS $flag_avx2"
7691 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7692     #include <immintrin.h>
7693     int main () {
7694         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
7695         c = _mm256_maddubs_epi16(a, b);
7696         return 0;
7697     }
7698     ])],
7699     [can_compile_avx2=yes],
7700     [can_compile_avx2=no])
7701 AC_LANG_POP([C++])
7702 CXXFLAGS=$save_CXXFLAGS
7703 AC_MSG_RESULT([${can_compile_avx2}])
7704 if test "${can_compile_avx2}" = "yes" ; then
7705     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
7708 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
7709 AC_LANG_PUSH([C++])
7710 save_CXXFLAGS=$CXXFLAGS
7711 CXXFLAGS="$CXXFLAGS $flag_avx512"
7712 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7713     #include <immintrin.h>
7714     int main () {
7715         __m512i a = _mm512_loadu_si512(0);
7716         return 0;
7717     }
7718     ])],
7719     [can_compile_avx512=yes],
7720     [can_compile_avx512=no])
7721 AC_LANG_POP([C++])
7722 CXXFLAGS=$save_CXXFLAGS
7723 AC_MSG_RESULT([${can_compile_avx512}])
7724 if test "${can_compile_avx512}" = "yes" ; then
7725     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
7728 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
7729 AC_LANG_PUSH([C++])
7730 save_CXXFLAGS=$CXXFLAGS
7731 CXXFLAGS="$CXXFLAGS $flag_f16c"
7732 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7733     #include <immintrin.h>
7734     int main () {
7735         __m128i a = _mm_set1_epi32 (0);
7736         __m128 c;
7737         c = _mm_cvtph_ps(a);
7738         return 0;
7739     }
7740     ])],
7741     [can_compile_f16c=yes],
7742     [can_compile_f16c=no])
7743 AC_LANG_POP([C++])
7744 CXXFLAGS=$save_CXXFLAGS
7745 AC_MSG_RESULT([${can_compile_f16c}])
7746 if test "${can_compile_f16c}" = "yes" ; then
7747     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
7750 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
7751 AC_LANG_PUSH([C++])
7752 save_CXXFLAGS=$CXXFLAGS
7753 CXXFLAGS="$CXXFLAGS $flag_fma"
7754 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7755     #include <immintrin.h>
7756     int main () {
7757         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
7758         d = _mm256_fmadd_ps(a, b, c);
7759         return 0;
7760     }
7761     ])],
7762     [can_compile_fma=yes],
7763     [can_compile_fma=no])
7764 AC_LANG_POP([C++])
7765 CXXFLAGS=$save_CXXFLAGS
7766 AC_MSG_RESULT([${can_compile_fma}])
7767 if test "${can_compile_fma}" = "yes" ; then
7768     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
7771 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
7772 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
7773 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
7774 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
7775 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
7776 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
7777 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
7778 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
7779 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
7781 dnl ===================================================================
7782 dnl system stl sanity tests
7783 dnl ===================================================================
7784 if test "$_os" != "WINNT"; then
7786     AC_LANG_PUSH([C++])
7788     save_CPPFLAGS="$CPPFLAGS"
7789     if test -n "$MACOSX_SDK_PATH"; then
7790         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
7791     fi
7793     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
7794     # only.
7795     if test "$CPP_LIBRARY" = GLIBCXX; then
7796         dnl gcc#19664, gcc#22482, rhbz#162935
7797         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
7798         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
7799         AC_MSG_RESULT([$stlvisok])
7800         if test "$stlvisok" = "no"; then
7801             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
7802         fi
7803     fi
7805     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
7806     # when we don't make any dynamic libraries?
7807     if test "$DISABLE_DYNLOADING" = ""; then
7808         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
7809         cat > conftestlib1.cc <<_ACEOF
7810 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7811 struct S2: S1<int> { virtual ~S2(); };
7812 S2::~S2() {}
7813 _ACEOF
7814         cat > conftestlib2.cc <<_ACEOF
7815 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7816 struct S2: S1<int> { virtual ~S2(); };
7817 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
7818 _ACEOF
7819         gccvisinlineshiddenok=yes
7820         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
7821             gccvisinlineshiddenok=no
7822         else
7823             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
7824             dnl known to not work with -z defs (unsetting which makes the test
7825             dnl moot, though):
7826             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
7827             if test "$COM_IS_CLANG" = TRUE; then
7828                 for i in $CXX $CXXFLAGS; do
7829                     case $i in
7830                     -fsanitize=*)
7831                         my_linkflagsnoundefs=
7832                         break
7833                         ;;
7834                     esac
7835                 done
7836             fi
7837             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
7838                 gccvisinlineshiddenok=no
7839             fi
7840         fi
7842         rm -fr libconftest*
7843         AC_MSG_RESULT([$gccvisinlineshiddenok])
7844         if test "$gccvisinlineshiddenok" = "no"; then
7845             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
7846         fi
7847     fi
7849    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
7850     cat >visibility.cxx <<_ACEOF
7851 #pragma GCC visibility push(hidden)
7852 struct __attribute__ ((visibility ("default"))) TestStruct {
7853   static void Init();
7855 __attribute__ ((visibility ("default"))) void TestFunc() {
7856   TestStruct::Init();
7858 _ACEOF
7859     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
7860         gccvisbroken=yes
7861     else
7862         case "$host_cpu" in
7863         i?86|x86_64)
7864             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
7865                 gccvisbroken=no
7866             else
7867                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
7868                     gccvisbroken=no
7869                 else
7870                     gccvisbroken=yes
7871                 fi
7872             fi
7873             ;;
7874         *)
7875             gccvisbroken=no
7876             ;;
7877         esac
7878     fi
7879     rm -f visibility.s visibility.cxx
7881     AC_MSG_RESULT([$gccvisbroken])
7882     if test "$gccvisbroken" = "yes"; then
7883         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
7884     fi
7886     CPPFLAGS="$save_CPPFLAGS"
7888     AC_LANG_POP([C++])
7891 dnl ===================================================================
7892 dnl  Clang++ tests
7893 dnl ===================================================================
7895 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
7896 if test "$GCC" = "yes"; then
7897     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
7898     AC_LANG_PUSH([C++])
7899     save_CXXFLAGS=$CXXFLAGS
7900     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
7901     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
7902     CXXFLAGS=$save_CXXFLAGS
7903     AC_LANG_POP([C++])
7904     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
7905         AC_MSG_RESULT([yes])
7906     else
7907         AC_MSG_RESULT([no])
7908     fi
7910 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
7912 dnl ===================================================================
7913 dnl Compiler plugins
7914 dnl ===================================================================
7916 COMPILER_PLUGINS=
7917 # currently only Clang
7919 if test "$COM_IS_CLANG" != "TRUE"; then
7920     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
7921         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
7922         enable_compiler_plugins=no
7923     fi
7926 COMPILER_PLUGINS_COM_IS_CLANG=
7927 if test "$COM_IS_CLANG" = "TRUE"; then
7928     if test -n "$enable_compiler_plugins"; then
7929         compiler_plugins="$enable_compiler_plugins"
7930     elif test -n "$ENABLE_DBGUTIL"; then
7931         compiler_plugins=test
7932     else
7933         compiler_plugins=no
7934     fi
7935     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
7936         if test "$CLANGVER" -lt 50002; then
7937             if test "$compiler_plugins" = yes; then
7938                 AC_MSG_ERROR([Clang $CLANGVER is too old to build compiler plugins; need >= 5.0.2.])
7939             else
7940                 compiler_plugins=no
7941             fi
7942         fi
7943     fi
7944     if test "$compiler_plugins" != "no"; then
7945         dnl The prefix where Clang resides, override to where Clang resides if
7946         dnl using a source build:
7947         if test -z "$CLANGDIR"; then
7948             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
7949         fi
7950         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
7951         if test -z "$COMPILER_PLUGINS_CXX"; then
7952             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
7953         fi
7954         clangbindir=$CLANGDIR/bin
7955         if test "$build_os" = "cygwin"; then
7956             clangbindir=$(cygpath -u "$clangbindir")
7957         fi
7958         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
7959         if test -n "$LLVM_CONFIG"; then
7960             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
7961             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
7962             if test -z "$CLANGLIBDIR"; then
7963                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
7964             fi
7965             # Try if clang is built from source (in which case its includes are not together with llvm includes).
7966             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
7967             clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
7968             if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
7969                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
7970             fi
7971             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
7972             clangobjdir=$($LLVM_CONFIG --obj-root)
7973             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
7974                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
7975             fi
7976         fi
7977         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
7978         AC_LANG_PUSH([C++])
7979         save_CXX=$CXX
7980         save_CXXCPP=$CXXCPP
7981         save_CPPFLAGS=$CPPFLAGS
7982         save_CXXFLAGS=$CXXFLAGS
7983         save_LDFLAGS=$LDFLAGS
7984         save_LIBS=$LIBS
7985         CXX=$COMPILER_PLUGINS_CXX
7986         CXXCPP="$COMPILER_PLUGINS_CXX -E"
7987         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
7988         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
7989         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
7990             [COMPILER_PLUGINS=TRUE],
7991             [
7992             if test "$compiler_plugins" = "yes"; then
7993                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
7994             else
7995                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
7996                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
7997             fi
7998             ])
7999         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8000         dnl comment in compilerplugins/Makefile-clang.mk:
8001         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8002             LDFLAGS=""
8003             AC_MSG_CHECKING([for clang libraries to use])
8004             if test -z "$CLANGTOOLLIBS"; then
8005                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8006  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8007                 AC_LINK_IFELSE([
8008                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8009                         [[ clang::FullSourceLoc().dump(); ]])
8010                 ],[CLANGTOOLLIBS="$LIBS"],[])
8011             fi
8012             if test -z "$CLANGTOOLLIBS"; then
8013                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8014                 AC_LINK_IFELSE([
8015                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8016                         [[ clang::FullSourceLoc().dump(); ]])
8017                 ],[CLANGTOOLLIBS="$LIBS"],[])
8018             fi
8019             AC_MSG_RESULT([$CLANGTOOLLIBS])
8020             if test -z "$CLANGTOOLLIBS"; then
8021                 if test "$compiler_plugins" = "yes"; then
8022                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8023                 else
8024                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8025                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8026                 fi
8027                 COMPILER_PLUGINS=
8028             fi
8029             if test -n "$COMPILER_PLUGINS"; then
8030                 if test -z "$CLANGSYSINCLUDE"; then
8031                     if test -n "$LLVM_CONFIG"; then
8032                         # Path to the clang system headers (no idea if there's a better way to get it).
8033                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8034                     fi
8035                 fi
8036             fi
8037         fi
8038         CXX=$save_CXX
8039         CXXCPP=$save_CXXCPP
8040         CPPFLAGS=$save_CPPFLAGS
8041         CXXFLAGS=$save_CXXFLAGS
8042         LDFLAGS=$save_LDFLAGS
8043         LIBS="$save_LIBS"
8044         AC_LANG_POP([C++])
8046         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8047         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8048             #ifndef __clang__
8049             you lose
8050             #endif
8051             int foo=42;
8052             ]])],
8053             [AC_MSG_RESULT([yes])
8054              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8055             [AC_MSG_RESULT([no])])
8056         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8057     fi
8058 else
8059     if test "$enable_compiler_plugins" = "yes"; then
8060         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8061     fi
8063 COMPILER_PLUGINS_ANALYZER_PCH=
8064 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8065     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8067 AC_SUBST(COMPILER_PLUGINS)
8068 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8069 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8070 AC_SUBST(COMPILER_PLUGINS_CXX)
8071 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8072 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8073 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8074 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8075 AC_SUBST(CLANGDIR)
8076 AC_SUBST(CLANGLIBDIR)
8077 AC_SUBST(CLANGTOOLLIBS)
8078 AC_SUBST(CLANGSYSINCLUDE)
8080 # Plugin to help linker.
8081 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8082 # This makes --enable-lto build with clang work.
8083 AC_SUBST(LD_PLUGIN)
8085 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8086 AC_SUBST(HAVE_POSIX_FALLOCATE)
8088 JITC_PROCESSOR_TYPE=""
8089 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8090     # IBMs JDK needs this...
8091     JITC_PROCESSOR_TYPE=6
8092     export JITC_PROCESSOR_TYPE
8094 AC_SUBST([JITC_PROCESSOR_TYPE])
8096 # Misc Windows Stuff
8097 AC_ARG_WITH(ucrt-dir,
8098     AS_HELP_STRING([--with-ucrt-dir],
8099         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8100         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8101         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8102             Windows6.1-KB2999226-x64.msu
8103             Windows6.1-KB2999226-x86.msu
8104             Windows8.1-KB2999226-x64.msu
8105             Windows8.1-KB2999226-x86.msu
8106             Windows8-RT-KB2999226-x64.msu
8107             Windows8-RT-KB2999226-x86.msu
8108         A zip archive including those files is available from Microsoft site:
8109         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8112 UCRT_REDISTDIR="$with_ucrt_dir"
8113 if test $_os = "WINNT"; then
8114     find_msvc_x64_dlls
8115     for i in $PKGFORMAT; do
8116         if test "$i" = msi; then
8117             find_msms
8118             break
8119         fi
8120     done
8121     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8122     MSVC_DLLS="$msvcdlls"
8123     test -n "$msmdir" && MSM_PATH=`win_short_path_for_make "$msmdir"`
8124     # MSVC 15.3 changed it to VC141
8125     if echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8126         SCPDEFS="$SCPDEFS -DWITH_VC142_REDIST"
8127     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8128         SCPDEFS="$SCPDEFS -DWITH_VC141_REDIST"
8129     else
8130         SCPDEFS="$SCPDEFS -DWITH_VC${VCVER}_REDIST"
8131     fi
8133     if test "$UCRT_REDISTDIR" = "no"; then
8134         dnl explicitly disabled
8135         UCRT_REDISTDIR=""
8136     else
8137         if ! test -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x64.msu" -a \
8138                   -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x86.msu" -a \
8139                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x64.msu" -a \
8140                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x86.msu" -a \
8141                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x64.msu" -a \
8142                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x86.msu"; then
8143             UCRT_REDISTDIR=""
8144             if test -n "$PKGFORMAT"; then
8145                for i in $PKGFORMAT; do
8146                    case "$i" in
8147                    msi)
8148                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8149                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8150                        ;;
8151                    esac
8152                done
8153             fi
8154         fi
8155     fi
8158 AC_SUBST(UCRT_REDISTDIR)
8159 AC_SUBST(MSVC_DLL_PATH)
8160 AC_SUBST(MSVC_DLLS)
8161 AC_SUBST(MSM_PATH)
8164 dnl ===================================================================
8165 dnl Checks for Java
8166 dnl ===================================================================
8167 if test "$ENABLE_JAVA" != ""; then
8169     # Windows-specific tests
8170     if test "$build_os" = "cygwin"; then
8171         if test -z "$with_jdk_home"; then
8172             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8173             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8174             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/CurrentVersion"
8175             if test -n "$regvalue"; then
8176                 ver=$regvalue
8177                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver/JavaHome"
8178                 with_jdk_home=$regvalue
8179             fi
8180             howfound="found automatically"
8181         else
8182             with_jdk_home=`win_short_path_for_make "$with_jdk_home"`
8183             howfound="you passed"
8184         fi
8186         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8187             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])
8188         fi
8189     fi
8191     # 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.
8192     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8193     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8194         with_jdk_home=`/usr/libexec/java_home`
8195     fi
8197     JAVA_HOME=; export JAVA_HOME
8198     if test -z "$with_jdk_home"; then
8199         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8200     else
8201         _java_path="$with_jdk_home/bin/$with_java"
8202         dnl Check if there is a Java interpreter at all.
8203         if test -x "$_java_path"; then
8204             JAVAINTERPRETER=$_java_path
8205         else
8206             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8207         fi
8208     fi
8210     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8211     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8212     dnl loaded by java to run JunitTests:
8213     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8214         shortjdkhome=`cygpath -d "$with_jdk_home"`
8215         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
8216             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8217             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8218         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
8219             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8220             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8221         fi
8223         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8224             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8225         fi
8226         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8227     elif test "$cross_compiling" != "yes"; then
8228         case $CPUNAME in
8229             AARCH64|AXP|X86_64|HPPA|IA64|POWERPC64|S390X|SPARC64|GODSON64)
8230                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8231                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8232                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8233                 fi
8234                 ;;
8235             *) # assumption: everything else 32-bit
8236                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8237                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8238                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8239                 fi
8240                 ;;
8241         esac
8242     fi
8245 dnl ===================================================================
8246 dnl Checks for JDK.
8247 dnl ===================================================================
8249 # Whether all the complexity here actually is needed any more or not, no idea.
8251 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8252     _gij_longver=0
8253     AC_MSG_CHECKING([the installed JDK])
8254     if test -n "$JAVAINTERPRETER"; then
8255         dnl java -version sends output to stderr!
8256         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8257             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8258         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8259             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8260         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8261             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8262         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8263             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8264         else
8265             JDK=sun
8267             dnl Sun JDK specific tests
8268             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8269             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8271             if test "$_jdk_ver" -lt 10900; then
8272                 AC_MSG_ERROR([JDK is too old, you need at least 9 ($_jdk_ver < 10900)])
8273             fi
8274             if test "$_jdk_ver" -gt 10900; then
8275                 JAVA_CLASSPATH_NOT_SET=TRUE
8276             fi
8278             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8279             if test "$_os" = "WINNT"; then
8280                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8281             fi
8282             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8284             # set to limit VM usage for JunitTests
8285             JAVAIFLAGS=-Xmx64M
8286             # set to limit VM usage for javac
8287             JAVACFLAGS=-J-Xmx128M
8288         fi
8289     else
8290         AC_MSG_ERROR([Java not found. You need at least JDK 9])
8291     fi
8292 else
8293     if test -z "$ENABLE_JAVA"; then
8294         dnl Java disabled
8295         JAVA_HOME=
8296         export JAVA_HOME
8297     elif test "$cross_compiling" = "yes"; then
8298         # Just assume compatibility of build and host JDK
8299         JDK=$JDK_FOR_BUILD
8300         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8301     fi
8304 dnl ===================================================================
8305 dnl Checks for javac
8306 dnl ===================================================================
8307 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8308     javacompiler="javac"
8309     : ${JAVA_SOURCE_VER=8}
8310     : ${JAVA_TARGET_VER=8}
8311     if test -z "$with_jdk_home"; then
8312         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8313     else
8314         _javac_path="$with_jdk_home/bin/$javacompiler"
8315         dnl Check if there is a Java compiler at all.
8316         if test -x "$_javac_path"; then
8317             JAVACOMPILER=$_javac_path
8318         fi
8319     fi
8320     if test -z "$JAVACOMPILER"; then
8321         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8322     fi
8323     if test "$build_os" = "cygwin"; then
8324         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8325             JAVACOMPILER="${JAVACOMPILER}.exe"
8326         fi
8327         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8328     fi
8331 dnl ===================================================================
8332 dnl Checks for javadoc
8333 dnl ===================================================================
8334 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8335     if test -z "$with_jdk_home"; then
8336         AC_PATH_PROG(JAVADOC, javadoc)
8337     else
8338         _javadoc_path="$with_jdk_home/bin/javadoc"
8339         dnl Check if there is a javadoc at all.
8340         if test -x "$_javadoc_path"; then
8341             JAVADOC=$_javadoc_path
8342         else
8343             AC_PATH_PROG(JAVADOC, javadoc)
8344         fi
8345     fi
8346     if test -z "$JAVADOC"; then
8347         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8348     fi
8349     if test "$build_os" = "cygwin"; then
8350         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8351             JAVADOC="${JAVADOC}.exe"
8352         fi
8353         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8354     fi
8356     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8357     JAVADOCISGJDOC="yes"
8358     fi
8360 AC_SUBST(JAVADOC)
8361 AC_SUBST(JAVADOCISGJDOC)
8363 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8364     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8365     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8366         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8367            # try to recover first by looking whether we have an alternative
8368            # system as in Debian or newer SuSEs where following /usr/bin/javac
8369            # over /etc/alternatives/javac leads to the right bindir where we
8370            # just need to strip a bit away to get a valid JAVA_HOME
8371            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8372         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8373             # maybe only one level of symlink (e.g. on Mac)
8374             JAVA_HOME=$(readlink $JAVACOMPILER)
8375             if test "$(dirname $JAVA_HOME)" = "."; then
8376                 # we've got no path to trim back
8377                 JAVA_HOME=""
8378             fi
8379         else
8380             # else warn
8381             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8382             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8383             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8384             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8385         fi
8386         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8387         if test "$JAVA_HOME" != "/usr"; then
8388             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8389                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8390                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8391                 dnl Tiger already returns a JDK path...
8392                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8393             else
8394                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8395                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8396                 dnl that checks which version to run
8397                 if test -f "$JAVA_HOME"; then
8398                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8399                 fi
8400             fi
8401         fi
8402     fi
8403     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8405     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8406     if test -z "$JAVA_HOME"; then
8407         if test "x$with_jdk_home" = "x"; then
8408             cat > findhome.java <<_ACEOF
8409 [import java.io.File;
8411 class findhome
8413     public static void main(String args[])
8414     {
8415         String jrelocation = System.getProperty("java.home");
8416         File jre = new File(jrelocation);
8417         System.out.println(jre.getParent());
8418     }
8420 _ACEOF
8421             AC_MSG_CHECKING([if javac works])
8422             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8423             AC_TRY_EVAL(javac_cmd)
8424             if test $? = 0 -a -f ./findhome.class; then
8425                 AC_MSG_RESULT([javac works])
8426             else
8427                 echo "configure: javac test failed" >&5
8428                 cat findhome.java >&5
8429                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8430             fi
8431             AC_MSG_CHECKING([if gij knows its java.home])
8432             JAVA_HOME=`$JAVAINTERPRETER findhome`
8433             if test $? = 0 -a "$JAVA_HOME" != ""; then
8434                 AC_MSG_RESULT([$JAVA_HOME])
8435             else
8436                 echo "configure: java test failed" >&5
8437                 cat findhome.java >&5
8438                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8439             fi
8440             # clean-up after ourselves
8441             rm -f ./findhome.java ./findhome.class
8442         else
8443             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8444         fi
8445     fi
8447     # now check if $JAVA_HOME is really valid
8448     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8449         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8450             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8451             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8452             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
8453             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
8454             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
8455             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
8456         fi
8457     fi
8458     PathFormat "$JAVA_HOME"
8459     JAVA_HOME="$formatted_path"
8462 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
8463     "$_os" != Darwin
8464 then
8465     AC_MSG_CHECKING([for JAWT lib])
8466     if test "$_os" = WINNT; then
8467         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
8468         JAWTLIB=jawt.lib
8469     else
8470         case "$host_cpu" in
8471         arm*)
8472             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
8473             JAVA_ARCH=$my_java_arch
8474             ;;
8475         i*86)
8476             my_java_arch=i386
8477             ;;
8478         m68k)
8479             my_java_arch=m68k
8480             ;;
8481         powerpc)
8482             my_java_arch=ppc
8483             ;;
8484         powerpc64)
8485             my_java_arch=ppc64
8486             ;;
8487         powerpc64le)
8488             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
8489             JAVA_ARCH=$my_java_arch
8490             ;;
8491         sparc64)
8492             my_java_arch=sparcv9
8493             ;;
8494         x86_64)
8495             my_java_arch=amd64
8496             ;;
8497         *)
8498             my_java_arch=$host_cpu
8499             ;;
8500         esac
8501         # This is where JDK9 puts the library
8502         if test -e "$JAVA_HOME/lib/libjawt.so"; then
8503             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
8504         else
8505             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
8506         fi
8507         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
8508     fi
8509     AC_MSG_RESULT([$JAWTLIB])
8511 AC_SUBST(JAWTLIB)
8513 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
8514     case "$host_os" in
8516     aix*)
8517         JAVAINC="-I$JAVA_HOME/include"
8518         JAVAINC="$JAVAINC -I$JAVA_HOME/include/aix"
8519         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8520         ;;
8522     cygwin*|wsl*)
8523         JAVAINC="-I$JAVA_HOME/include/win32"
8524         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
8525         ;;
8527     darwin*|macos*)
8528         if test -d "$JAVA_HOME/include/darwin"; then
8529             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
8530         else
8531             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
8532         fi
8533         ;;
8535     dragonfly*)
8536         JAVAINC="-I$JAVA_HOME/include"
8537         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8538         ;;
8540     freebsd*)
8541         JAVAINC="-I$JAVA_HOME/include"
8542         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
8543         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
8544         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8545         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8546         ;;
8548     k*bsd*-gnu*)
8549         JAVAINC="-I$JAVA_HOME/include"
8550         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8551         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8552         ;;
8554     linux-gnu*)
8555         JAVAINC="-I$JAVA_HOME/include"
8556         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8557         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8558         ;;
8560     *netbsd*)
8561         JAVAINC="-I$JAVA_HOME/include"
8562         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
8563         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8564        ;;
8566     openbsd*)
8567         JAVAINC="-I$JAVA_HOME/include"
8568         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
8569         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8570         ;;
8572     solaris*)
8573         JAVAINC="-I$JAVA_HOME/include"
8574         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
8575         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8576         ;;
8577     esac
8579 SOLARINC="$SOLARINC $JAVAINC"
8581 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8582     JAVA_HOME_FOR_BUILD=$JAVA_HOME
8583     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
8584     JDK_FOR_BUILD=$JDK
8587 AC_SUBST(JAVACFLAGS)
8588 AC_SUBST(JAVACOMPILER)
8589 AC_SUBST(JAVAINTERPRETER)
8590 AC_SUBST(JAVAIFLAGS)
8591 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
8592 AC_SUBST(JAVA_CLASSPATH_NOT_SET)
8593 AC_SUBST(JAVA_HOME)
8594 AC_SUBST(JAVA_HOME_FOR_BUILD)
8595 AC_SUBST(JDK)
8596 AC_SUBST(JDK_FOR_BUILD)
8597 AC_SUBST(JAVA_SOURCE_VER)
8598 AC_SUBST(JAVA_TARGET_VER)
8601 dnl ===================================================================
8602 dnl Export file validation
8603 dnl ===================================================================
8604 AC_MSG_CHECKING([whether to enable export file validation])
8605 if test "$with_export_validation" != "no"; then
8606     if test -z "$ENABLE_JAVA"; then
8607         if test "$with_export_validation" = "yes"; then
8608             AC_MSG_ERROR([requested, but Java is disabled])
8609         else
8610             AC_MSG_RESULT([no, as Java is disabled])
8611         fi
8612     elif ! test -d "${SRC_ROOT}/schema"; then
8613         if test "$with_export_validation" = "yes"; then
8614             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
8615         else
8616             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
8617         fi
8618     else
8619         AC_MSG_RESULT([yes])
8620         AC_DEFINE(HAVE_EXPORT_VALIDATION)
8622         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
8623         if test -z "$ODFVALIDATOR"; then
8624             # remember to download the ODF toolkit with validator later
8625             AC_MSG_NOTICE([no odfvalidator found, will download it])
8626             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
8627             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
8629             # and fetch name of odfvalidator jar name from download.lst
8630             ODFVALIDATOR_JAR=`$SED -n -e "s/export *ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8631             AC_SUBST(ODFVALIDATOR_JAR)
8633             if test -z "$ODFVALIDATOR_JAR"; then
8634                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
8635             fi
8636         fi
8637         if test "$build_os" = "cygwin"; then
8638             # In case of Cygwin it will be executed from Windows,
8639             # so we need to run bash and absolute path to validator
8640             # so instead of "odfvalidator" it will be
8641             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8642             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
8643         else
8644             ODFVALIDATOR="sh $ODFVALIDATOR"
8645         fi
8646         AC_SUBST(ODFVALIDATOR)
8649         AC_PATH_PROGS(OFFICEOTRON, officeotron)
8650         if test -z "$OFFICEOTRON"; then
8651             # remember to download the officeotron with validator later
8652             AC_MSG_NOTICE([no officeotron found, will download it])
8653             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
8654             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
8656             # and fetch name of officeotron jar name from download.lst
8657             OFFICEOTRON_JAR=`$SED -n -e "s/export *OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8658             AC_SUBST(OFFICEOTRON_JAR)
8660             if test -z "$OFFICEOTRON_JAR"; then
8661                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
8662             fi
8663         else
8664             # check version of existing officeotron
8665             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
8666             if test 0"$OFFICEOTRON_VER" -lt 704; then
8667                 AC_MSG_ERROR([officeotron too old])
8668             fi
8669         fi
8670         if test "$build_os" = "cygwin"; then
8671             # In case of Cygwin it will be executed from Windows,
8672             # so we need to run bash and absolute path to validator
8673             # so instead of "odfvalidator" it will be
8674             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8675             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
8676         else
8677             OFFICEOTRON="sh $OFFICEOTRON"
8678         fi
8679     fi
8680     AC_SUBST(OFFICEOTRON)
8681 else
8682     AC_MSG_RESULT([no])
8685 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
8686 if test "$with_bffvalidator" != "no"; then
8687     AC_DEFINE(HAVE_BFFVALIDATOR)
8689     if test "$with_export_validation" = "no"; then
8690         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
8691     fi
8693     if test "$with_bffvalidator" = "yes"; then
8694         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
8695     else
8696         BFFVALIDATOR="$with_bffvalidator"
8697     fi
8699     if test "$build_os" = "cygwin"; then
8700         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
8701             AC_MSG_RESULT($BFFVALIDATOR)
8702         else
8703             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8704         fi
8705     elif test -n "$BFFVALIDATOR"; then
8706         # We are not in Cygwin but need to run Windows binary with wine
8707         AC_PATH_PROGS(WINE, wine)
8709         # so swap in a shell wrapper that converts paths transparently
8710         BFFVALIDATOR_EXE="$BFFVALIDATOR"
8711         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
8712         AC_SUBST(BFFVALIDATOR_EXE)
8713         AC_MSG_RESULT($BFFVALIDATOR)
8714     else
8715         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8716     fi
8717     AC_SUBST(BFFVALIDATOR)
8718 else
8719     AC_MSG_RESULT([no])
8722 dnl ===================================================================
8723 dnl Check for C preprocessor to use
8724 dnl ===================================================================
8725 AC_MSG_CHECKING([which C preprocessor to use in idlc])
8726 if test -n "$with_idlc_cpp"; then
8727     AC_MSG_RESULT([$with_idlc_cpp])
8728     AC_PATH_PROG(SYSTEM_UCPP, $with_idlc_cpp)
8729 else
8730     AC_MSG_RESULT([ucpp])
8731     AC_MSG_CHECKING([which ucpp tp use])
8732     if test -n "$with_system_ucpp" -a "$with_system_ucpp" != "no"; then
8733         AC_MSG_RESULT([external])
8734         AC_PATH_PROG(SYSTEM_UCPP, ucpp)
8735     else
8736         AC_MSG_RESULT([internal])
8737         BUILD_TYPE="$BUILD_TYPE UCPP"
8738     fi
8740 AC_SUBST(SYSTEM_UCPP)
8742 dnl ===================================================================
8743 dnl Check for epm (not needed for Windows)
8744 dnl ===================================================================
8745 AC_MSG_CHECKING([whether to enable EPM for packing])
8746 if test "$enable_epm" = "yes"; then
8747     AC_MSG_RESULT([yes])
8748     if test "$_os" != "WINNT"; then
8749         if test $_os = Darwin; then
8750             EPM=internal
8751         elif test -n "$with_epm"; then
8752             EPM=$with_epm
8753         else
8754             AC_PATH_PROG(EPM, epm, no)
8755         fi
8756         if test "$EPM" = "no" -o "$EPM" = "internal"; then
8757             AC_MSG_NOTICE([EPM will be built.])
8758             BUILD_TYPE="$BUILD_TYPE EPM"
8759             EPM=${WORKDIR}/UnpackedTarball/epm/epm
8760         else
8761             # Gentoo has some epm which is something different...
8762             AC_MSG_CHECKING([whether the found epm is the right epm])
8763             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
8764                 AC_MSG_RESULT([yes])
8765             else
8766                 AC_MSG_ERROR([no. Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8767             fi
8768             AC_MSG_CHECKING([epm version])
8769             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
8770             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
8771                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
8772                 AC_MSG_RESULT([OK, >= 3.7])
8773             else
8774                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
8775                 AC_MSG_ERROR([Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8776             fi
8777         fi
8778     fi
8780     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
8781         AC_MSG_CHECKING([for rpm])
8782         for a in "$RPM" rpmbuild rpm; do
8783             $a --usage >/dev/null 2> /dev/null
8784             if test $? -eq 0; then
8785                 RPM=$a
8786                 break
8787             else
8788                 $a --version >/dev/null 2> /dev/null
8789                 if test $? -eq 0; then
8790                     RPM=$a
8791                     break
8792                 fi
8793             fi
8794         done
8795         if test -z "$RPM"; then
8796             AC_MSG_ERROR([not found])
8797         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
8798             RPM_PATH=`which $RPM`
8799             AC_MSG_RESULT([$RPM_PATH])
8800             SCPDEFS="$SCPDEFS -DWITH_RPM"
8801         else
8802             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
8803         fi
8804     fi
8805     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
8806         AC_PATH_PROG(DPKG, dpkg, no)
8807         if test "$DPKG" = "no"; then
8808             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
8809         fi
8810     fi
8811     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
8812        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
8813         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
8814             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
8815                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
8816                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
8817                     AC_MSG_RESULT([yes])
8818                 else
8819                     AC_MSG_RESULT([no])
8820                     if echo "$PKGFORMAT" | $GREP -q rpm; then
8821                         _pt="rpm"
8822                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
8823                         add_warning "the rpms will need to be installed with --nodeps"
8824                     else
8825                         _pt="pkg"
8826                     fi
8827                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
8828                     add_warning "the ${_pt}s will not be relocatable"
8829                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
8830                                  relocation will work, you need to patch your epm with the
8831                                  patch in epm/epm-3.7.patch or build with
8832                                  --with-epm=internal which will build a suitable epm])
8833                 fi
8834             fi
8835         fi
8836     fi
8837     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
8838         AC_PATH_PROG(PKGMK, pkgmk, no)
8839         if test "$PKGMK" = "no"; then
8840             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
8841         fi
8842     fi
8843     AC_SUBST(RPM)
8844     AC_SUBST(DPKG)
8845     AC_SUBST(PKGMK)
8846 else
8847     for i in $PKGFORMAT; do
8848         case "$i" in
8849         aix | bsd | deb | pkg | rpm | native | portable)
8850             AC_MSG_ERROR(
8851                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
8852             ;;
8853         esac
8854     done
8855     AC_MSG_RESULT([no])
8856     EPM=NO
8858 AC_SUBST(EPM)
8860 ENABLE_LWP=
8861 if test "$enable_lotuswordpro" = "yes"; then
8862     ENABLE_LWP="TRUE"
8864 AC_SUBST(ENABLE_LWP)
8866 dnl ===================================================================
8867 dnl Check for building ODK
8868 dnl ===================================================================
8869 if test "$enable_odk" = no; then
8870     unset DOXYGEN
8871 else
8872     if test "$with_doxygen" = no; then
8873         AC_MSG_CHECKING([for doxygen])
8874         unset DOXYGEN
8875         AC_MSG_RESULT([no])
8876     else
8877         if test "$with_doxygen" = yes; then
8878             AC_PATH_PROG([DOXYGEN], [doxygen])
8879             if test -z "$DOXYGEN"; then
8880                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
8881             fi
8882             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
8883                 if ! dot -V 2>/dev/null; then
8884                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
8885                 fi
8886             fi
8887         else
8888             AC_MSG_CHECKING([for doxygen])
8889             DOXYGEN=$with_doxygen
8890             AC_MSG_RESULT([$DOXYGEN])
8891         fi
8892         if test -n "$DOXYGEN"; then
8893             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
8894             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
8895             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
8896                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
8897             fi
8898         fi
8899     fi
8901 AC_SUBST([DOXYGEN])
8903 AC_MSG_CHECKING([whether to build the ODK])
8904 if test "$enable_odk" = "" -o "$enable_odk" != "no"; then
8905     AC_MSG_RESULT([yes])
8906     BUILD_TYPE="$BUILD_TYPE ODK"
8907 else
8908     AC_MSG_RESULT([no])
8911 dnl ===================================================================
8912 dnl Check for system zlib
8913 dnl ===================================================================
8914 if test "$with_system_zlib" = "auto"; then
8915     case "$_os" in
8916     WINNT)
8917         with_system_zlib="$with_system_libs"
8918         ;;
8919     *)
8920         if test "$enable_fuzzers" != "yes"; then
8921             with_system_zlib=yes
8922         else
8923             with_system_zlib=no
8924         fi
8925         ;;
8926     esac
8929 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
8930 dnl and has no pkg-config for it at least on some tinderboxes,
8931 dnl so leaving that out for now
8932 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
8933 AC_MSG_CHECKING([which zlib to use])
8934 if test "$with_system_zlib" = "yes"; then
8935     AC_MSG_RESULT([external])
8936     SYSTEM_ZLIB=TRUE
8937     AC_CHECK_HEADER(zlib.h, [],
8938         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
8939     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
8940         [AC_MSG_ERROR(zlib not found or functional)], [])
8941 else
8942     AC_MSG_RESULT([internal])
8943     SYSTEM_ZLIB=
8944     BUILD_TYPE="$BUILD_TYPE ZLIB"
8945     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
8946     ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
8948 AC_SUBST(ZLIB_CFLAGS)
8949 AC_SUBST(ZLIB_LIBS)
8950 AC_SUBST(SYSTEM_ZLIB)
8952 dnl ===================================================================
8953 dnl Check for system jpeg
8954 dnl ===================================================================
8955 AC_MSG_CHECKING([which libjpeg to use])
8956 if test "$with_system_jpeg" = "yes"; then
8957     AC_MSG_RESULT([external])
8958     SYSTEM_LIBJPEG=TRUE
8959     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
8960         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
8961     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
8962         [AC_MSG_ERROR(jpeg library not found or functional)], [])
8963 else
8964     SYSTEM_LIBJPEG=
8965     AC_MSG_RESULT([internal, libjpeg-turbo])
8966     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
8967     LIBJPEG_CFLAGS="-I${WORKDIR}/UnpackedTarball/libjpeg-turbo"
8968     if test "$COM" = "MSC"; then
8969         LIBJPEG_LIBS="${WORKDIR}/UnpackedTarball/libjpeg-turbo/.libs/libjpeg.lib"
8970     else
8971         LIBJPEG_LIBS="-L${WORKDIR}/UnpackedTarball/libjpeg-turbo/.libs -ljpeg"
8972     fi
8974     case "$host_cpu" in
8975     x86_64 | amd64 | i*86 | x86 | ia32)
8976         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
8977         if test -z "$NASM" -a "$build_os" = "cygwin"; then
8978             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
8979                 NASM="$LODE_HOME/opt/bin/nasm"
8980             elif test -x "/opt/lo/bin/nasm"; then
8981                 NASM="/opt/lo/bin/nasm"
8982             fi
8983         fi
8985         if test -n "$NASM"; then
8986             AC_MSG_CHECKING([for object file format of host system])
8987             case "$host_os" in
8988               cygwin* | mingw* | pw32* | wsl*)
8989                 case "$host_cpu" in
8990                   x86_64)
8991                     objfmt='Win64-COFF'
8992                     ;;
8993                   *)
8994                     objfmt='Win32-COFF'
8995                     ;;
8996                 esac
8997               ;;
8998               msdosdjgpp* | go32*)
8999                 objfmt='COFF'
9000               ;;
9001               os2-emx*) # not tested
9002                 objfmt='MSOMF' # obj
9003               ;;
9004               linux*coff* | linux*oldld*)
9005                 objfmt='COFF' # ???
9006               ;;
9007               linux*aout*)
9008                 objfmt='a.out'
9009               ;;
9010               linux*)
9011                 case "$host_cpu" in
9012                   x86_64)
9013                     objfmt='ELF64'
9014                     ;;
9015                   *)
9016                     objfmt='ELF'
9017                     ;;
9018                 esac
9019               ;;
9020               kfreebsd* | freebsd* | netbsd* | openbsd*)
9021                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9022                   objfmt='BSD-a.out'
9023                 else
9024                   case "$host_cpu" in
9025                     x86_64 | amd64)
9026                       objfmt='ELF64'
9027                       ;;
9028                     *)
9029                       objfmt='ELF'
9030                       ;;
9031                   esac
9032                 fi
9033               ;;
9034               solaris* | sunos* | sysv* | sco*)
9035                 case "$host_cpu" in
9036                   x86_64)
9037                     objfmt='ELF64'
9038                     ;;
9039                   *)
9040                     objfmt='ELF'
9041                     ;;
9042                 esac
9043               ;;
9044               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9045                 case "$host_cpu" in
9046                   x86_64)
9047                     objfmt='Mach-O64'
9048                     ;;
9049                   *)
9050                     objfmt='Mach-O'
9051                     ;;
9052                 esac
9053               ;;
9054               *)
9055                 objfmt='ELF ?'
9056               ;;
9057             esac
9059             AC_MSG_RESULT([$objfmt])
9060             if test "$objfmt" = 'ELF ?'; then
9061               objfmt='ELF'
9062               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9063             fi
9065             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9066             case "$objfmt" in
9067               MSOMF)      NAFLAGS='-fobj -DOBJ32';;
9068               Win32-COFF) NAFLAGS='-fwin32 -DWIN32';;
9069               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__';;
9070               COFF)       NAFLAGS='-fcoff -DCOFF';;
9071               a.out)      NAFLAGS='-faout -DAOUT';;
9072               BSD-a.out)  NAFLAGS='-faoutb -DAOUT';;
9073               ELF)        NAFLAGS='-felf -DELF';;
9074               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__';;
9075               RDF)        NAFLAGS='-frdf -DRDF';;
9076               Mach-O)     NAFLAGS='-fmacho -DMACHO';;
9077               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__';;
9078             esac
9079             AC_MSG_RESULT([$NAFLAGS])
9081             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9082             cat > conftest.asm << EOF
9083             [%line __oline__ "configure"
9084                     section .text
9085                     global  _main,main
9086             _main:
9087             main:   xor     eax,eax
9088                     ret
9089             ]
9091             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9092             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9093               AC_MSG_RESULT(yes)
9094             else
9095               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9096               cat conftest.asm >&AS_MESSAGE_LOG_FD
9097               rm -rf conftest*
9098               AC_MSG_RESULT(no)
9099               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9100               NASM=""
9101             fi
9103         fi
9105         if test -z "$NASM"; then
9106 cat << _EOS
9107 ****************************************************************************
9108 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9109 To get one please:
9111 _EOS
9112             if test "$build_os" = "cygwin"; then
9113 cat << _EOS
9114 install a pre-compiled binary for Win32
9116 mkdir -p /opt/lo/bin
9117 cd /opt/lo/bin
9118 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9119 chmod +x nasm
9121 or get and install one from http://www.nasm.us/
9123 Then re-run autogen.sh
9125 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9126 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`which nasm\` finds it.
9128 _EOS
9129             else
9130 cat << _EOS
9131 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md
9133 _EOS
9134             fi
9135             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9136             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9137         fi
9138       ;;
9139     esac
9142 AC_SUBST(NASM)
9143 AC_SUBST(LIBJPEG_CFLAGS)
9144 AC_SUBST(LIBJPEG_LIBS)
9145 AC_SUBST(SYSTEM_LIBJPEG)
9147 dnl ===================================================================
9148 dnl Check for system clucene
9149 dnl ===================================================================
9150 dnl we should rather be using
9151 dnl libo_CHECK_SYSTEM_MODULE([clucence],[CLUCENE],[liblucence-core]) here
9152 dnl but the contribs-lib check seems tricky
9153 AC_MSG_CHECKING([which clucene to use])
9154 if test "$with_system_clucene" = "yes"; then
9155     AC_MSG_RESULT([external])
9156     SYSTEM_CLUCENE=TRUE
9157     PKG_CHECK_MODULES(CLUCENE, libclucene-core)
9158     CLUCENE_CFLAGS=[$(printf '%s' "$CLUCENE_CFLAGS" | sed -e 's@-I[^ ]*/CLucene/ext@@' -e "s/-I/${ISYSTEM?}/g")]
9159     FilterLibs "${CLUCENE_LIBS}"
9160     CLUCENE_LIBS="${filteredlibs}"
9161     AC_LANG_PUSH([C++])
9162     save_CXXFLAGS=$CXXFLAGS
9163     save_CPPFLAGS=$CPPFLAGS
9164     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9165     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9166     dnl http://sourceforge.net/tracker/index.php?func=detail&aid=3392466&group_id=80013&atid=558446
9167     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9168     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9169                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9170     CXXFLAGS=$save_CXXFLAGS
9171     CPPFLAGS=$save_CPPFLAGS
9172     AC_LANG_POP([C++])
9174     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9175 else
9176     AC_MSG_RESULT([internal])
9177     SYSTEM_CLUCENE=
9178     BUILD_TYPE="$BUILD_TYPE CLUCENE"
9180 AC_SUBST(SYSTEM_CLUCENE)
9181 AC_SUBST(CLUCENE_CFLAGS)
9182 AC_SUBST(CLUCENE_LIBS)
9184 dnl ===================================================================
9185 dnl Check for system expat
9186 dnl ===================================================================
9187 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9189 dnl ===================================================================
9190 dnl Check for system xmlsec
9191 dnl ===================================================================
9192 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.28])
9194 AC_MSG_CHECKING([whether to enable Embedded OpenType support])
9195 if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_eot" = "yes"; then
9196     ENABLE_EOT="TRUE"
9197     AC_DEFINE([ENABLE_EOT])
9198     AC_MSG_RESULT([yes])
9200     libo_CHECK_SYSTEM_MODULE([libeot],[LIBEOT],[libeot >= 0.01])
9201 else
9202     ENABLE_EOT=
9203     AC_MSG_RESULT([no])
9205 AC_SUBST([ENABLE_EOT])
9207 dnl ===================================================================
9208 dnl Check for DLP libs
9209 dnl ===================================================================
9210 AS_IF([test "$COM" = "MSC"],
9211       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9212       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9214 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1],["-I${WORKDIR}/UnpackedTarball/librevenge/inc"],["-L${librevenge_libdir} -lrevenge-0.0"])
9216 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9218 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9220 AS_IF([test "$COM" = "MSC"],
9221       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9222       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9224 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10],["-I${WORKDIR}/UnpackedTarball/libwpd/inc"],["-L${libwpd_libdir} -lwpd-0.10"])
9226 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9228 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9229 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.12])
9231 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9233 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9235 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9237 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.1])
9238 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.19])
9240 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9241 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.8])
9243 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9245 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9246 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9248 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9250 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9252 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9254 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9256 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9257 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9259 dnl ===================================================================
9260 dnl Check for system lcms2
9261 dnl ===================================================================
9262 if test "$with_system_lcms2" != "yes"; then
9263     SYSTEM_LCMS2=
9265 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2],["-I${WORKDIR}/UnpackedTarball/lcms2/include"],["-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"])
9266 if test "$GCC" = "yes"; then
9267     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9269 if test "$COM" = "MSC"; then # override the above
9270     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9273 dnl ===================================================================
9274 dnl Check for system cppunit
9275 dnl ===================================================================
9276 if test "$_os" != "Android" ; then
9277     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9280 dnl ===================================================================
9281 dnl Check whether freetype is available
9282 dnl ===================================================================
9283 if test  "$test_freetype" = "yes"; then
9284     AC_MSG_CHECKING([whether freetype is available])
9285     # FreeType has 3 different kinds of versions
9286     # * release, like 2.4.10
9287     # * libtool, like 13.0.7 (this what pkg-config returns)
9288     # * soname
9289     # FreeType's docs/VERSION.DLL provides a table mapping between the three
9290     #
9291     # 9.9.3 is 2.2.0
9292     PKG_CHECK_MODULES(FREETYPE, freetype2 >= 9.9.3)
9293     FREETYPE_CFLAGS=$(printf '%s' "$FREETYPE_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9294     FilterLibs "${FREETYPE_LIBS}"
9295     FREETYPE_LIBS="${filteredlibs}"
9296     SYSTEM_FREETYPE=TRUE
9297 else
9298     FREETYPE_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"
9299     if test "x$ac_config_site_64bit_host" = xYES; then
9300         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9301     else
9302         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9303     fi
9305 AC_SUBST(FREETYPE_CFLAGS)
9306 AC_SUBST(FREETYPE_LIBS)
9307 AC_SUBST([SYSTEM_FREETYPE])
9309 # ===================================================================
9310 # Check for system libxslt
9311 # to prevent incompatibilities between internal libxml2 and external libxslt,
9312 # or vice versa, use with_system_libxml here
9313 # ===================================================================
9314 if test "$with_system_libxml" = "auto"; then
9315     case "$_os" in
9316     WINNT|iOS|Android)
9317         with_system_libxml="$with_system_libs"
9318         ;;
9319     Emscripten)
9320         with_system_libxml=no
9321         ;;
9322     *)
9323         if test "$enable_fuzzers" != "yes"; then
9324             with_system_libxml=yes
9325         else
9326             with_system_libxml=no
9327         fi
9328         ;;
9329     esac
9332 AC_MSG_CHECKING([which libxslt to use])
9333 if test "$with_system_libxml" = "yes"; then
9334     AC_MSG_RESULT([external])
9335     SYSTEM_LIBXSLT=TRUE
9336     if test "$_os" = "Darwin"; then
9337         dnl make sure to use SDK path
9338         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9339         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9340         dnl omit -L/usr/lib
9341         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9342         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9343     else
9344         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9345         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9346         FilterLibs "${LIBXSLT_LIBS}"
9347         LIBXSLT_LIBS="${filteredlibs}"
9348         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9349         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9350         FilterLibs "${LIBEXSLT_LIBS}"
9351         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9352     fi
9354     dnl Check for xsltproc
9355     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9356     if test "$XSLTPROC" = "no"; then
9357         AC_MSG_ERROR([xsltproc is required])
9358     fi
9359 else
9360     AC_MSG_RESULT([internal])
9361     SYSTEM_LIBXSLT=
9362     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9364 AC_SUBST(SYSTEM_LIBXSLT)
9365 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9366     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9368 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9370 AC_SUBST(LIBEXSLT_CFLAGS)
9371 AC_SUBST(LIBEXSLT_LIBS)
9372 AC_SUBST(LIBXSLT_CFLAGS)
9373 AC_SUBST(LIBXSLT_LIBS)
9374 AC_SUBST(XSLTPROC)
9376 # ===================================================================
9377 # Check for system libxml
9378 # ===================================================================
9379 AC_MSG_CHECKING([which libxml to use])
9380 if test "$with_system_libxml" = "yes"; then
9381     AC_MSG_RESULT([external])
9382     SYSTEM_LIBXML=TRUE
9383     if test "$_os" = "Darwin"; then
9384         dnl make sure to use SDK path
9385         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9386         dnl omit -L/usr/lib
9387         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9388     elif test $_os = iOS; then
9389         dnl make sure to use SDK path
9390         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9391         LIBXML_CFLAGS="-I$usr/include/libxml2"
9392         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9393     else
9394         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9395         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9396         FilterLibs "${LIBXML_LIBS}"
9397         LIBXML_LIBS="${filteredlibs}"
9398     fi
9400     dnl Check for xmllint
9401     AC_PATH_PROG(XMLLINT, xmllint, no)
9402     if test "$XMLLINT" = "no"; then
9403         AC_MSG_ERROR([xmllint is required])
9404     fi
9405 else
9406     AC_MSG_RESULT([internal])
9407     SYSTEM_LIBXML=
9408     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9409     if test "$COM" = "MSC"; then
9410         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9411     fi
9412     if test "$COM" = "MSC"; then
9413         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9414     else
9415         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9416         if test "$_os" = Android; then
9417             LIBXML_LIBS="$LIBXML_LIBS -lm"
9418         fi
9419     fi
9420     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9422 AC_SUBST(SYSTEM_LIBXML)
9423 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9424     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9426 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9427 AC_SUBST(LIBXML_CFLAGS)
9428 AC_SUBST(LIBXML_LIBS)
9429 AC_SUBST(XMLLINT)
9431 # =====================================================================
9432 # Checking for a Python interpreter with version >= 3.3.
9433 # Optionally user can pass an option to configure, i. e.
9434 # ./configure PYTHON=/usr/bin/python
9435 # =====================================================================
9436 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9437     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9438     # unless PYTHON is defined as above which allows 'system'
9439     enable_python=internal
9441 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9442     if test -n "$PYTHON"; then
9443         PYTHON_FOR_BUILD=$PYTHON
9444     else
9445         # This allows a lack of system python with no error, we use internal one in that case.
9446         AM_PATH_PYTHON([3.3],, [:])
9447         # Clean PYTHON_VERSION checked below if cross-compiling
9448         PYTHON_VERSION=""
9449         if test "$PYTHON" != ":"; then
9450             PYTHON_FOR_BUILD=$PYTHON
9451         fi
9452     fi
9454 AC_SUBST(PYTHON_FOR_BUILD)
9456 # Checks for Python to use for Pyuno
9457 AC_MSG_CHECKING([which Python to use for Pyuno])
9458 case "$enable_python" in
9459 no|disable)
9460     if test -z $PYTHON_FOR_BUILD; then
9461         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9462         # requirement from the choice whether to include Python stuff in the installer, but why
9463         # bother?
9464         if test "$cross_compiling" = yes; then
9465             enable_python=system
9466         else
9467             AC_MSG_ERROR([Python is required at build time.])
9468         fi
9469     fi
9470     enable_python=no
9471     AC_MSG_RESULT([none])
9472     ;;
9473 ""|yes|auto)
9474     if test "$DISABLE_SCRIPTING" = TRUE -a -n "$PYTHON_FOR_BUILD"; then
9475         AC_MSG_RESULT([no, overridden by --disable-scripting])
9476         enable_python=no
9477     elif test $build_os = cygwin; then
9478         dnl When building on Windows we don't attempt to use any installed
9479         dnl "system"  Python.
9480         AC_MSG_RESULT([fully internal])
9481         enable_python=internal
9482     elif test "$cross_compiling" = yes; then
9483         AC_MSG_RESULT([system])
9484         enable_python=system
9485     else
9486         # Unset variables set by the above AM_PATH_PYTHON so that
9487         # we actually do check anew.
9488         AC_MSG_RESULT([])
9489         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
9490         AM_PATH_PYTHON([3.3],, [:])
9491         AC_MSG_CHECKING([which Python to use for Pyuno])
9492         if test "$PYTHON" = ":"; then
9493             if test -z "$PYTHON_FOR_BUILD"; then
9494                 AC_MSG_RESULT([fully internal])
9495             else
9496                 AC_MSG_RESULT([internal])
9497             fi
9498             enable_python=internal
9499         else
9500             AC_MSG_RESULT([system])
9501             enable_python=system
9502         fi
9503     fi
9504     ;;
9505 internal)
9506     AC_MSG_RESULT([internal])
9507     ;;
9508 fully-internal)
9509     AC_MSG_RESULT([fully internal])
9510     enable_python=internal
9511     ;;
9512 system)
9513     AC_MSG_RESULT([system])
9514     if test "$_os" = Darwin -a -z "$PYTHON"; then
9515         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
9516     fi
9517     ;;
9519     AC_MSG_ERROR([Incorrect --enable-python option])
9520     ;;
9521 esac
9523 if test $enable_python != no; then
9524     BUILD_TYPE="$BUILD_TYPE PYUNO"
9527 if test $enable_python = system; then
9528     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
9529         # Fallback: Accept these in the environment, or as set above
9530         # for MacOSX.
9531         :
9532     elif test "$cross_compiling" != yes; then
9533         # Unset variables set by the above AM_PATH_PYTHON so that
9534         # we actually do check anew.
9535         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
9536         # This causes an error if no python command is found
9537         AM_PATH_PYTHON([3.3])
9538         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
9539         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
9540         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
9541         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
9542         if test -z "$PKG_CONFIG"; then
9543             PYTHON_CFLAGS="-I$python_include"
9544             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9545         elif $PKG_CONFIG --exists python-$python_version-embed; then
9546             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
9547             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
9548         elif $PKG_CONFIG --exists python-$python_version; then
9549             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
9550             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
9551         else
9552             PYTHON_CFLAGS="-I$python_include"
9553             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9554         fi
9555         FilterLibs "${PYTHON_LIBS}"
9556         PYTHON_LIBS="${filteredlibs}"
9557     else
9558         dnl How to find out the cross-compilation Python installation path?
9559         AC_MSG_CHECKING([for python version])
9560         AS_IF([test -n "$PYTHON_VERSION"],
9561               [AC_MSG_RESULT([$PYTHON_VERSION])],
9562               [AC_MSG_RESULT([not found])
9563                AC_MSG_ERROR([no usable python found])])
9564         test -n "$PYTHON_CFLAGS" && break
9565     fi
9567     dnl Check if the headers really work
9568     save_CPPFLAGS="$CPPFLAGS"
9569     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
9570     AC_CHECK_HEADER(Python.h)
9571     CPPFLAGS="$save_CPPFLAGS"
9573     # let the PYTHON_FOR_BUILD match the same python installation that
9574     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
9575     # better for PythonTests.
9576     PYTHON_FOR_BUILD=$PYTHON
9579 if test "$with_lxml" != no; then
9580     if test -z "$PYTHON_FOR_BUILD"; then
9581         case $build_os in
9582             cygwin)
9583                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
9584                 ;;
9585             *)
9586                 if test "$cross_compiling" != yes ; then
9587                     BUILD_TYPE="$BUILD_TYPE LXML"
9588                 fi
9589                 ;;
9590         esac
9591     else
9592         AC_MSG_CHECKING([for python lxml])
9593         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
9594             AC_MSG_RESULT([yes])
9595         else
9596             case $build_os in
9597                 cygwin)
9598                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
9599                     ;;
9600                 *)
9601                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
9602                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
9603                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
9604                         else
9605                             BUILD_TYPE="$BUILD_TYPE LXML"
9606                             AC_MSG_RESULT([no, using internal lxml])
9607                         fi
9608                     else
9609                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
9610                     fi
9611                     ;;
9612             esac
9613         fi
9614     fi
9617 dnl By now enable_python should be "system", "internal" or "no"
9618 case $enable_python in
9619 system)
9620     SYSTEM_PYTHON=TRUE
9622     if test "x$ac_cv_header_Python_h" != "xyes"; then
9623        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
9624     fi
9626     AC_LANG_PUSH(C)
9627     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
9628     AC_MSG_CHECKING([for correct python library version])
9629        AC_RUN_IFELSE([AC_LANG_SOURCE([[
9630 #include <Python.h>
9632 int main(int argc, char **argv) {
9633    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
9634    else return 1;
9636        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
9637     AC_LANG_POP(C)
9639     dnl FIXME Check if the Python library can be linked with, too?
9640     ;;
9642 internal)
9643     SYSTEM_PYTHON=
9644     PYTHON_VERSION_MAJOR=3
9645     PYTHON_VERSION_MINOR=8
9646     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.8
9647     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
9648         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
9649     fi
9650     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
9651     BUILD_TYPE="$BUILD_TYPE PYTHON"
9652     if test "$OS" = LINUX -o "$OS" = WNT ; then
9653         BUILD_TYPE="$BUILD_TYPE LIBFFI"
9654     fi
9655     # Embedded Python dies without Home set
9656     if test "$HOME" = ""; then
9657         export HOME=""
9658     fi
9659     ;;
9661     DISABLE_PYTHON=TRUE
9662     SYSTEM_PYTHON=
9663     ;;
9665     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
9666     ;;
9667 esac
9669 AC_SUBST(DISABLE_PYTHON)
9670 AC_SUBST(SYSTEM_PYTHON)
9671 AC_SUBST(PYTHON_CFLAGS)
9672 AC_SUBST(PYTHON_LIBS)
9673 AC_SUBST(PYTHON_VERSION)
9674 AC_SUBST(PYTHON_VERSION_MAJOR)
9675 AC_SUBST(PYTHON_VERSION_MINOR)
9677 AC_MSG_CHECKING([whether to build LibreLogo])
9678 case "$enable_python" in
9679 no|disable)
9680     AC_MSG_RESULT([no; Python disabled])
9681     ;;
9683     if test "${enable_librelogo}" = "no"; then
9684         AC_MSG_RESULT([no])
9685     else
9686         AC_MSG_RESULT([yes])
9687         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
9688         AC_DEFINE([ENABLE_LIBRELOGO],1)
9689     fi
9690     ;;
9691 esac
9692 AC_SUBST(ENABLE_LIBRELOGO)
9694 ENABLE_MARIADBC=
9695 MARIADBC_MAJOR=1
9696 MARIADBC_MINOR=0
9697 MARIADBC_MICRO=2
9698 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
9699 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
9700     ENABLE_MARIADBC=TRUE
9701     AC_MSG_RESULT([yes])
9702     BUILD_TYPE="$BUILD_TYPE MARIADBC"
9703 else
9704     AC_MSG_RESULT([no])
9706 AC_SUBST(ENABLE_MARIADBC)
9707 AC_SUBST(MARIADBC_MAJOR)
9708 AC_SUBST(MARIADBC_MINOR)
9709 AC_SUBST(MARIADBC_MICRO)
9711 if test "$ENABLE_MARIADBC" = "TRUE"; then
9712     dnl ===================================================================
9713     dnl Check for system MariaDB
9714     dnl ===================================================================
9715     AC_MSG_CHECKING([which MariaDB to use])
9716     if test "$with_system_mariadb" = "yes"; then
9717         AC_MSG_RESULT([external])
9718         SYSTEM_MARIADB_CONNECTOR_C=TRUE
9719         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
9720         if test -z "$MARIADBCONFIG"; then
9721             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
9722             if test -z "$MARIADBCONFIG"; then
9723                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
9724                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
9725             fi
9726         fi
9727         AC_MSG_CHECKING([MariaDB version])
9728         MARIADB_VERSION=`$MARIADBCONFIG --version`
9729         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
9730         if test "$MARIADB_MAJOR" -ge "5"; then
9731             AC_MSG_RESULT([OK])
9732         else
9733             AC_MSG_ERROR([too old, use 5.0.x or later])
9734         fi
9735         AC_MSG_CHECKING([for MariaDB Client library])
9736         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
9737         if test "$COM_IS_CLANG" = TRUE; then
9738             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
9739         fi
9740         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
9741         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
9742         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
9743         dnl linux32:
9744         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
9745             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
9746             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
9747                 | sed -e 's|/lib64/|/lib/|')
9748         fi
9749         FilterLibs "${MARIADB_LIBS}"
9750         MARIADB_LIBS="${filteredlibs}"
9751         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
9752         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
9753         if test "$enable_bundle_mariadb" = "yes"; then
9754             AC_MSG_RESULT([yes])
9755             BUNDLE_MARIADB_CONNECTOR_C=TRUE
9756             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
9758 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
9760 /g' | grep -E '(mysqlclient|mariadb)')
9761             if test "$_os" = "Darwin"; then
9762                 LIBMARIADB=${LIBMARIADB}.dylib
9763             elif test "$_os" = "WINNT"; then
9764                 LIBMARIADB=${LIBMARIADB}.dll
9765             else
9766                 LIBMARIADB=${LIBMARIADB}.so
9767             fi
9768             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
9769             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
9770             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
9771                 AC_MSG_RESULT([found.])
9772                 PathFormat "$LIBMARIADB_PATH"
9773                 LIBMARIADB_PATH="$formatted_path"
9774             else
9775                 AC_MSG_ERROR([not found.])
9776             fi
9777         else
9778             AC_MSG_RESULT([no])
9779             BUNDLE_MARIADB_CONNECTOR_C=
9780         fi
9781     else
9782         AC_MSG_RESULT([internal])
9783         SYSTEM_MARIADB_CONNECTOR_C=
9784         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
9785         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
9786         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
9787     fi
9789     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
9790     AC_SUBST(MARIADB_CFLAGS)
9791     AC_SUBST(MARIADB_LIBS)
9792     AC_SUBST(LIBMARIADB)
9793     AC_SUBST(LIBMARIADB_PATH)
9794     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
9797 dnl ===================================================================
9798 dnl Check for system hsqldb
9799 dnl ===================================================================
9800 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
9801     HSQLDB_USE_JDBC_4_1=
9802     AC_MSG_CHECKING([which hsqldb to use])
9803     if test "$with_system_hsqldb" = "yes"; then
9804         AC_MSG_RESULT([external])
9805         SYSTEM_HSQLDB=TRUE
9806         if test -z $HSQLDB_JAR; then
9807             HSQLDB_JAR=/usr/share/java/hsqldb.jar
9808         fi
9809         if ! test -f $HSQLDB_JAR; then
9810                AC_MSG_ERROR(hsqldb.jar not found.)
9811         fi
9812         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
9813         export HSQLDB_JAR
9814         if $PERL -e \
9815            'use Archive::Zip;
9816             my $file = "$ENV{'HSQLDB_JAR'}";
9817             my $zip = Archive::Zip->new( $file );
9818             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
9819             if ( $mf =~ m/Specification-Version: 1.8.*/ )
9820             {
9821                 push @l, split(/\n/, $mf);
9822                 foreach my $line (@l)
9823                 {
9824                     if ($line =~ m/Specification-Version:/)
9825                     {
9826                         ($t, $version) = split (/:/,$line);
9827                         $version =~ s/^\s//;
9828                         ($a, $b, $c, $d) = split (/\./,$version);
9829                         if ($c == "0" && $d > "8")
9830                         {
9831                             exit 0;
9832                         }
9833                         else
9834                         {
9835                             exit 1;
9836                         }
9837                     }
9838                 }
9839             }
9840             else
9841             {
9842                 exit 1;
9843             }'; then
9844             AC_MSG_RESULT([yes])
9845         else
9846             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
9847         fi
9848     else
9849         AC_MSG_RESULT([internal])
9850         SYSTEM_HSQLDB=
9851         BUILD_TYPE="$BUILD_TYPE HSQLDB"
9852         NEED_ANT=TRUE
9853         AC_MSG_CHECKING([whether hsqldb should be built with JDBC 4.1])
9854         javanumver=`$JAVAINTERPRETER -version 2>&1 | $AWK -v num=true -f $SRC_ROOT/solenv/bin/getcompver.awk`
9855         if expr "$javanumver" '>=' 000100060000 > /dev/null; then
9856             AC_MSG_RESULT([yes])
9857             HSQLDB_USE_JDBC_4_1=TRUE
9858         else
9859             AC_MSG_RESULT([no])
9860         fi
9861     fi
9862 else
9863     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
9864         BUILD_TYPE="$BUILD_TYPE HSQLDB"
9865     fi
9867 AC_SUBST(SYSTEM_HSQLDB)
9868 AC_SUBST(HSQLDB_JAR)
9869 AC_SUBST([HSQLDB_USE_JDBC_4_1])
9871 dnl ===================================================================
9872 dnl Check for PostgreSQL stuff
9873 dnl ===================================================================
9874 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
9875 if test "x$enable_postgresql_sdbc" != "xno"; then
9876     AC_MSG_RESULT([yes])
9877     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
9879     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
9880         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
9881     fi
9882     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
9883         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
9884     fi
9886     postgres_interface=""
9887     if test "$with_system_postgresql" = "yes"; then
9888         postgres_interface="external PostgreSQL"
9889         SYSTEM_POSTGRESQL=TRUE
9890         if test "$_os" = Darwin; then
9891             supp_path=''
9892             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
9893                 pg_supp_path="$P_SEP$d$pg_supp_path"
9894             done
9895         fi
9896         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
9897         if test -n "$PGCONFIG"; then
9898             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
9899             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
9900         else
9901             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
9902               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
9903               POSTGRESQL_LIB=$POSTGRESQL_LIBS
9904             ],[
9905               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
9906             ])
9907         fi
9908         FilterLibs "${POSTGRESQL_LIB}"
9909         POSTGRESQL_LIB="${filteredlibs}"
9910     else
9911         # if/when anything else than PostgreSQL uses Kerberos,
9912         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
9913         WITH_KRB5=
9914         WITH_GSSAPI=
9915         case "$_os" in
9916         Darwin)
9917             # macOS has system MIT Kerberos 5 since 10.4
9918             if test "$with_krb5" != "no"; then
9919                 WITH_KRB5=TRUE
9920                 save_LIBS=$LIBS
9921                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
9922                 # that the libraries where these functions are located on macOS will change, is it?
9923                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
9924                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
9925                 KRB5_LIBS=$LIBS
9926                 LIBS=$save_LIBS
9927                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
9928                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
9929                 KRB5_LIBS="$KRB5_LIBS $LIBS"
9930                 LIBS=$save_LIBS
9931             fi
9932             if test "$with_gssapi" != "no"; then
9933                 WITH_GSSAPI=TRUE
9934                 save_LIBS=$LIBS
9935                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
9936                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
9937                 GSSAPI_LIBS=$LIBS
9938                 LIBS=$save_LIBS
9939             fi
9940             ;;
9941         WINNT)
9942             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
9943                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
9944             fi
9945             ;;
9946         Linux|GNU|*BSD|DragonFly)
9947             if test "$with_krb5" != "no"; then
9948                 WITH_KRB5=TRUE
9949                 save_LIBS=$LIBS
9950                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
9951                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
9952                 KRB5_LIBS=$LIBS
9953                 LIBS=$save_LIBS
9954                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
9955                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
9956                 KRB5_LIBS="$KRB5_LIBS $LIBS"
9957                 LIBS=$save_LIBS
9958             fi
9959             if test "$with_gssapi" != "no"; then
9960                 WITH_GSSAPI=TRUE
9961                 save_LIBS=$LIBS
9962                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
9963                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
9964                 GSSAPI_LIBS=$LIBS
9965                 LIBS=$save_LIBS
9966             fi
9967             ;;
9968         *)
9969             if test "$with_krb5" = "yes"; then
9970                 WITH_KRB5=TRUE
9971                 save_LIBS=$LIBS
9972                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
9973                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
9974                 KRB5_LIBS=$LIBS
9975                 LIBS=$save_LIBS
9976                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
9977                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
9978                 KRB5_LIBS="$KRB5_LIBS $LIBS"
9979                 LIBS=$save_LIBS
9980             fi
9981             if test "$with_gssapi" = "yes"; then
9982                 WITH_GSSAPI=TRUE
9983                 save_LIBS=$LIBS
9984                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
9985                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
9986                 LIBS=$save_LIBS
9987                 GSSAPI_LIBS=$LIBS
9988             fi
9989         esac
9991         if test -n "$with_libpq_path"; then
9992             SYSTEM_POSTGRESQL=TRUE
9993             postgres_interface="external libpq"
9994             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
9995             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
9996         else
9997             SYSTEM_POSTGRESQL=
9998             postgres_interface="internal"
9999             POSTGRESQL_LIB=""
10000             POSTGRESQL_INC="%OVERRIDE_ME%"
10001             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10002         fi
10003     fi
10005     AC_MSG_CHECKING([PostgreSQL C interface])
10006     AC_MSG_RESULT([$postgres_interface])
10008     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10009         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10010         save_CFLAGS=$CFLAGS
10011         save_CPPFLAGS=$CPPFLAGS
10012         save_LIBS=$LIBS
10013         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10014         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10015         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10016         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10017             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10018         CFLAGS=$save_CFLAGS
10019         CPPFLAGS=$save_CPPFLAGS
10020         LIBS=$save_LIBS
10021     fi
10022     BUILD_POSTGRESQL_SDBC=TRUE
10023 else
10024     AC_MSG_RESULT([no])
10026 AC_SUBST(WITH_KRB5)
10027 AC_SUBST(WITH_GSSAPI)
10028 AC_SUBST(GSSAPI_LIBS)
10029 AC_SUBST(KRB5_LIBS)
10030 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10031 AC_SUBST(SYSTEM_POSTGRESQL)
10032 AC_SUBST(POSTGRESQL_INC)
10033 AC_SUBST(POSTGRESQL_LIB)
10035 dnl ===================================================================
10036 dnl Check for Firebird stuff
10037 dnl ===================================================================
10038 ENABLE_FIREBIRD_SDBC=
10039 if test "$enable_firebird_sdbc" = "yes" ; then
10040     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10042     dnl ===================================================================
10043     dnl Check for system Firebird
10044     dnl ===================================================================
10045     AC_MSG_CHECKING([which Firebird to use])
10046     if test "$with_system_firebird" = "yes"; then
10047         AC_MSG_RESULT([external])
10048         SYSTEM_FIREBIRD=TRUE
10049         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10050         if test -z "$FIREBIRDCONFIG"; then
10051             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10052             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10053                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10054             ])
10055             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10056         else
10057             AC_MSG_NOTICE([fb_config found])
10058             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10059             AC_MSG_CHECKING([for Firebird Client library])
10060             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10061             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10062             FilterLibs "${FIREBIRD_LIBS}"
10063             FIREBIRD_LIBS="${filteredlibs}"
10064         fi
10065         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10066         AC_MSG_CHECKING([Firebird version])
10067         if test -n "${FIREBIRD_VERSION}"; then
10068             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10069             FIREBIRD_MINOR=`echo $FIREBIRD_VERSION | cut -d"." -f2`
10070             if test "$FIREBIRD_MAJOR" -eq "3" -a "$FIREBIRD_MINOR" -eq "0"; then
10071                 AC_MSG_RESULT([OK])
10072             else
10073                 AC_MSG_ERROR([Ensure firebird 3.0.x is installed])
10074             fi
10075         else
10076             save_CFLAGS="${CFLAGS}"
10077             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10078             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10079 #if defined(FB_API_VER) && FB_API_VER == 30
10080 int fb_api_is_30(void) { return 0; }
10081 #else
10082 #error "Wrong Firebird API version"
10083 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10084             CFLAGS="$save_CFLAGS"
10085         fi
10086         ENABLE_FIREBIRD_SDBC=TRUE
10087         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10088     elif test "$enable_database_connectivity" != yes; then
10089         AC_MSG_RESULT([none])
10090     elif test "$cross_compiling" = "yes"; then
10091         AC_MSG_RESULT([none])
10092     else
10093         dnl Embedded Firebird has version 3.0
10094         AC_DEFINE(HAVE_FIREBIRD_30, 1)
10095         dnl We need libatomic_ops for any non X86/X64 system
10096         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10097             dnl ===================================================================
10098             dnl Check for system libatomic_ops
10099             dnl ===================================================================
10100             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10101             if test "$with_system_libatomic_ops" = "yes"; then
10102                 SYSTEM_LIBATOMIC_OPS=TRUE
10103                 AC_CHECK_HEADERS(atomic_ops.h, [],
10104                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10105             else
10106                 SYSTEM_LIBATOMIC_OPS=
10107                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10108                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10109                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10110             fi
10111         fi
10113         AC_MSG_RESULT([internal])
10114         SYSTEM_FIREBIRD=
10115         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10116         FIREBIRD_LIBS="-lfbclient"
10118         if test "$with_system_libtommath" = "yes"; then
10119             SYSTEM_LIBTOMMATH=TRUE
10120             dnl check for tommath presence
10121             save_LIBS=$LIBS
10122             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10123             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10124             LIBS=$save_LIBS
10125         else
10126             SYSTEM_LIBTOMMATH=
10127             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10128             LIBTOMMATH_LIBS="-ltommath"
10129             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10130         fi
10132         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10133         ENABLE_FIREBIRD_SDBC=TRUE
10134         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10135     fi
10137 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10138 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10139 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10140 AC_SUBST(LIBATOMIC_OPS_LIBS)
10141 AC_SUBST(SYSTEM_FIREBIRD)
10142 AC_SUBST(FIREBIRD_CFLAGS)
10143 AC_SUBST(FIREBIRD_LIBS)
10144 AC_SUBST(SYSTEM_LIBTOMMATH)
10145 AC_SUBST(LIBTOMMATH_CFLAGS)
10146 AC_SUBST(LIBTOMMATH_LIBS)
10148 dnl ===================================================================
10149 dnl Check for system curl
10150 dnl ===================================================================
10151 AC_MSG_CHECKING([which libcurl to use])
10152 if test "$with_system_curl" = "auto"; then
10153     with_system_curl="$with_system_libs"
10156 if test "$test_curl" = "yes" -a "$enable_curl" = "yes" -a "$with_system_curl" = "yes"; then
10157     AC_MSG_RESULT([external])
10158     SYSTEM_CURL=TRUE
10160     # First try PKGCONFIG and then fall back
10161     PKG_CHECK_MODULES(CURL, libcurl >= 7.19.4,, [:])
10163     if test -n "$CURL_PKG_ERRORS"; then
10164         AC_PATH_PROG(CURLCONFIG, curl-config)
10165         if test -z "$CURLCONFIG"; then
10166             AC_MSG_ERROR([curl development files not found])
10167         fi
10168         CURL_LIBS=`$CURLCONFIG --libs`
10169         FilterLibs "${CURL_LIBS}"
10170         CURL_LIBS="${filteredlibs}"
10171         CURL_CFLAGS=$("$CURLCONFIG" --cflags | sed -e "s/-I/${ISYSTEM?}/g")
10172         curl_version=`$CURLCONFIG --version | $SED -e 's/^libcurl //'`
10174         AC_MSG_CHECKING([whether libcurl is >= 7.19.4])
10175         case $curl_version in
10176         dnl brackets doubled below because Autoconf uses them as m4 quote characters,
10177         dnl so they need to be doubled to end up in the configure script
10178         7.19.4|7.19.[[5-9]]|7.[[2-9]]?.*|7.???.*|[[8-9]].*|[[1-9]][[0-9]].*)
10179             AC_MSG_RESULT([yes])
10180             ;;
10181         *)
10182             AC_MSG_ERROR([no, you have $curl_version])
10183             ;;
10184         esac
10185     fi
10187     ENABLE_CURL=TRUE
10188 elif test "$test_curl" = "no"; then
10189     AC_MSG_RESULT([none])
10190 else
10191     AC_MSG_RESULT([internal])
10192     SYSTEM_CURL=
10193     BUILD_TYPE="$BUILD_TYPE CURL"
10194     ENABLE_CURL=TRUE
10196 AC_SUBST(SYSTEM_CURL)
10197 AC_SUBST(CURL_CFLAGS)
10198 AC_SUBST(CURL_LIBS)
10199 AC_SUBST(ENABLE_CURL)
10201 dnl ===================================================================
10202 dnl Check for system boost
10203 dnl ===================================================================
10204 AC_MSG_CHECKING([which boost to use])
10205 if test "$with_system_boost" = "yes"; then
10206     AC_MSG_RESULT([external])
10207     SYSTEM_BOOST=TRUE
10208     AX_BOOST_BASE([1.66],,[AC_MSG_ERROR([no suitable Boost found])])
10209     AX_BOOST_DATE_TIME
10210     AX_BOOST_FILESYSTEM
10211     AX_BOOST_IOSTREAMS
10212     AX_BOOST_LOCALE
10213     AC_LANG_PUSH([C++])
10214     save_CXXFLAGS=$CXXFLAGS
10215     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10216     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10217        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10218     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10219        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10220     CXXFLAGS=$save_CXXFLAGS
10221     AC_LANG_POP([C++])
10222     # this is in m4/ax_boost_base.m4
10223     FilterLibs "${BOOST_LDFLAGS}"
10224     BOOST_LDFLAGS="${filteredlibs}"
10225 else
10226     AC_MSG_RESULT([internal])
10227     BUILD_TYPE="$BUILD_TYPE BOOST"
10228     SYSTEM_BOOST=
10229     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10230         # use warning-suppressing wrapper headers
10231         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10232     else
10233         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10234     fi
10236 AC_SUBST(SYSTEM_BOOST)
10238 dnl ===================================================================
10239 dnl Check for system mdds
10240 dnl ===================================================================
10241 libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-1.5 >= 1.5.0], ["-I${WORKDIR}/UnpackedTarball/mdds/include"])
10243 dnl ===================================================================
10244 dnl Check for system glm
10245 dnl ===================================================================
10246 AC_MSG_CHECKING([which glm to use])
10247 if test "$with_system_glm" = "yes"; then
10248     AC_MSG_RESULT([external])
10249     SYSTEM_GLM=TRUE
10250     AC_LANG_PUSH([C++])
10251     AC_CHECK_HEADER([glm/glm.hpp], [],
10252        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10253     AC_LANG_POP([C++])
10254 else
10255     AC_MSG_RESULT([internal])
10256     BUILD_TYPE="$BUILD_TYPE GLM"
10257     SYSTEM_GLM=
10258     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10260 AC_SUBST([GLM_CFLAGS])
10261 AC_SUBST([SYSTEM_GLM])
10263 dnl ===================================================================
10264 dnl Check for system odbc
10265 dnl ===================================================================
10266 AC_MSG_CHECKING([which odbc headers to use])
10267 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
10268     AC_MSG_RESULT([external])
10269     SYSTEM_ODBC_HEADERS=TRUE
10271     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10272         save_CPPFLAGS=$CPPFLAGS
10273         find_winsdk
10274         PathFormat "$winsdktest"
10275         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"
10276         AC_CHECK_HEADER(sqlext.h, [],
10277             [AC_MSG_ERROR(odbc not found. install odbc)],
10278             [#include <windows.h>])
10279         CPPFLAGS=$save_CPPFLAGS
10280     else
10281         AC_CHECK_HEADER(sqlext.h, [],
10282             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10283     fi
10284 elif test "$enable_database_connectivity" != yes; then
10285     AC_MSG_RESULT([none])
10286 else
10287     AC_MSG_RESULT([internal])
10288     SYSTEM_ODBC_HEADERS=
10290 AC_SUBST(SYSTEM_ODBC_HEADERS)
10292 dnl ===================================================================
10293 dnl Enable LDAP support
10294 dnl ===================================================================
10296 if test "$_os" != "WINNT" -a "$_os" != "iOS" -a "$_os" != "Android"; then
10297 AC_MSG_CHECKING([whether to enable LDAP support])
10298     if test "$enable_ldap" != "yes"; then
10299         AC_MSG_RESULT([no])
10300         ENABLE_LDAP=""
10301         enable_ldap=no
10302     else
10303         AC_MSG_RESULT([yes])
10304         ENABLE_LDAP="TRUE"
10305     fi
10307 AC_SUBST(ENABLE_LDAP)
10309 dnl ===================================================================
10310 dnl Check for system openldap
10311 dnl ===================================================================
10313 if test "$_os" != "WINNT" -a "$_os" != "iOS" -a "$_os" != "Android" -a "$ENABLE_LDAP" != ""; then
10314 AC_MSG_CHECKING([which openldap library to use])
10315 if test "$with_system_openldap" = "yes"; then
10316     AC_MSG_RESULT([external])
10317     SYSTEM_OPENLDAP=TRUE
10318     AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10319     AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10320     AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10321 else
10322     AC_MSG_RESULT([internal])
10323     SYSTEM_OPENLDAP=
10324     BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10327 AC_SUBST(SYSTEM_OPENLDAP)
10329 dnl ===================================================================
10330 dnl Check for system NSS
10331 dnl ===================================================================
10332 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10333     libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8])
10334     AC_DEFINE(HAVE_FEATURE_NSS)
10335     ENABLE_NSS="TRUE"
10336     AC_DEFINE(ENABLE_NSS)
10337 elif test $_os != iOS ; then
10338     with_tls=openssl
10340 AC_SUBST(ENABLE_NSS)
10342 dnl ===================================================================
10343 dnl Check for TLS/SSL and cryptographic implementation to use
10344 dnl ===================================================================
10345 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10346 if test -n "$with_tls"; then
10347     case $with_tls in
10348     openssl)
10349         AC_DEFINE(USE_TLS_OPENSSL)
10350         TLS=OPENSSL
10351         AC_MSG_RESULT([$TLS])
10353         if test "$enable_openssl" != "yes"; then
10354             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10355         fi
10357         # warn that OpenSSL has been selected but not all TLS code has this option
10358         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS])
10359         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS"
10360         ;;
10361     nss)
10362         AC_DEFINE(USE_TLS_NSS)
10363         TLS=NSS
10364         AC_MSG_RESULT([$TLS])
10365         ;;
10366     no)
10367         AC_MSG_RESULT([none])
10368         AC_MSG_WARN([Skipping TLS/SSL])
10369         ;;
10370     *)
10371         AC_MSG_RESULT([])
10372         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10373 openssl - OpenSSL
10374 nss - Mozilla's Network Security Services (NSS)
10375     ])
10376         ;;
10377     esac
10378 else
10379     # default to using NSS, it results in smaller oox lib
10380     AC_DEFINE(USE_TLS_NSS)
10381     TLS=NSS
10382     AC_MSG_RESULT([$TLS])
10384 AC_SUBST(TLS)
10386 dnl ===================================================================
10387 dnl Check for system sane
10388 dnl ===================================================================
10389 AC_MSG_CHECKING([which sane header to use])
10390 if test "$with_system_sane" = "yes"; then
10391     AC_MSG_RESULT([external])
10392     AC_CHECK_HEADER(sane/sane.h, [],
10393       [AC_MSG_ERROR(sane not found. install sane)], [])
10394 else
10395     AC_MSG_RESULT([internal])
10396     BUILD_TYPE="$BUILD_TYPE SANE"
10399 dnl ===================================================================
10400 dnl Check for system icu
10401 dnl ===================================================================
10402 SYSTEM_GENBRK=
10403 SYSTEM_GENCCODE=
10404 SYSTEM_GENCMN=
10406 ICU_MAJOR=69
10407 ICU_MINOR=1
10408 ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10409 ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10410 ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10411 AC_MSG_CHECKING([which icu to use])
10412 if test "$with_system_icu" = "yes"; then
10413     AC_MSG_RESULT([external])
10414     SYSTEM_ICU=TRUE
10415     AC_LANG_PUSH([C++])
10416     AC_MSG_CHECKING([for unicode/rbbi.h])
10417     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10418     AC_LANG_POP([C++])
10420     if test "$cross_compiling" != "yes"; then
10421         PKG_CHECK_MODULES(ICU, icu-i18n >= 4.6)
10422         ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10423         ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10424         ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10425     fi
10427     if test "$cross_compiling" = "yes" -a \( "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" \); then
10428         ICU_VERSION_FOR_BUILD=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10429         ICU_MAJOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f1`
10430         ICU_MINOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f2`
10431         AC_MSG_CHECKING([if MinGW and system versions of ICU are compatible])
10432         if test "$ICU_MAJOR" -eq "$ICU_MAJOR_FOR_BUILD" -a "$ICU_MINOR" -eq "$ICU_MINOR_FOR_BUILD"; then
10433             AC_MSG_RESULT([yes])
10434         else
10435             AC_MSG_RESULT([no])
10436             if test "$with_system_icu_for_build" != "force"; then
10437                 AC_MSG_ERROR([System ICU is not version-compatible with MinGW ICU.
10438 You can use --with-system-icu-for-build=force to use it anyway.])
10439             fi
10440         fi
10441     fi
10443     if test "$cross_compiling" != "yes" -o "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force"; then
10444         # using the system icu tools can lead to version confusion, use the
10445         # ones from the build environment when cross-compiling
10446         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10447         if test -z "$SYSTEM_GENBRK"; then
10448             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10449         fi
10450         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10451         if test -z "$SYSTEM_GENCCODE"; then
10452             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10453         fi
10454         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10455         if test -z "$SYSTEM_GENCMN"; then
10456             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10457         fi
10458         if test "$ICU_MAJOR" -ge "49"; then
10459             ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10460             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10461             ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10462         else
10463             ICU_RECLASSIFIED_PREPEND_SET_EMPTY=
10464             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER=
10465             ICU_RECLASSIFIED_HEBREW_LETTER=
10466         fi
10467     fi
10469     if test "$cross_compiling" = "yes"; then
10470         if test "$ICU_MAJOR" -ge "50"; then
10471             AC_MSG_RESULT([Ignore ICU_MINOR as obviously the libraries don't include the minor version in their names any more])
10472             ICU_MINOR=""
10473         fi
10474     fi
10475 else
10476     AC_MSG_RESULT([internal])
10477     SYSTEM_ICU=
10478     BUILD_TYPE="$BUILD_TYPE ICU"
10479     # surprisingly set these only for "internal" (to be used by various other
10480     # external libs): the system icu-config is quite unhelpful and spits out
10481     # dozens of weird flags and also default path -I/usr/include
10482     ICU_CFLAGS="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10483     ICU_LIBS="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10485 if test "$ICU_MAJOR" -ge "59"; then
10486     # As of ICU 59 it defaults to typedef char16_t UChar; which is available
10487     # with -std=c++11 but not all external libraries can be built with that,
10488     # for those use a bit-compatible typedef uint16_t UChar; see
10489     # icu/source/common/unicode/umachine.h
10490     ICU_UCHAR_TYPE="-DUCHAR_TYPE=uint16_t"
10491 else
10492     ICU_UCHAR_TYPE=""
10494 AC_SUBST(SYSTEM_ICU)
10495 AC_SUBST(SYSTEM_GENBRK)
10496 AC_SUBST(SYSTEM_GENCCODE)
10497 AC_SUBST(SYSTEM_GENCMN)
10498 AC_SUBST(ICU_MAJOR)
10499 AC_SUBST(ICU_MINOR)
10500 AC_SUBST(ICU_RECLASSIFIED_PREPEND_SET_EMPTY)
10501 AC_SUBST(ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER)
10502 AC_SUBST(ICU_RECLASSIFIED_HEBREW_LETTER)
10503 AC_SUBST(ICU_CFLAGS)
10504 AC_SUBST(ICU_LIBS)
10505 AC_SUBST(ICU_UCHAR_TYPE)
10507 dnl ==================================================================
10508 dnl Breakpad
10509 dnl ==================================================================
10510 DEFAULT_CRASHDUMP_VALUE="true"
10511 AC_MSG_CHECKING([whether to enable breakpad])
10512 if test "$enable_breakpad" != yes; then
10513     AC_MSG_RESULT([no])
10514 else
10515     AC_MSG_RESULT([yes])
10516     ENABLE_BREAKPAD="TRUE"
10517     AC_DEFINE(ENABLE_BREAKPAD)
10518     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
10519     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
10521     AC_MSG_CHECKING([for disable crash dump])
10522     if test "$enable_crashdump" = no; then
10523         DEFAULT_CRASHDUMP_VALUE="false"
10524         AC_MSG_RESULT([yes])
10525     else
10526        AC_MSG_RESULT([no])
10527     fi
10529     AC_MSG_CHECKING([for crashreport config])
10530     if test "$with_symbol_config" = "no"; then
10531         BREAKPAD_SYMBOL_CONFIG="invalid"
10532         AC_MSG_RESULT([no])
10533     else
10534         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
10535         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
10536         AC_MSG_RESULT([yes])
10537     fi
10538     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
10540 AC_SUBST(ENABLE_BREAKPAD)
10541 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
10543 dnl ==================================================================
10544 dnl libfuzzer
10545 dnl ==================================================================
10546 AC_MSG_CHECKING([whether to enable fuzzers])
10547 if test "$enable_fuzzers" != yes; then
10548     AC_MSG_RESULT([no])
10549 else
10550     if test $LIB_FUZZING_ENGINE == ""; then
10551       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
10552     fi
10553     AC_MSG_RESULT([yes])
10554     ENABLE_FUZZERS="TRUE"
10555     AC_DEFINE([ENABLE_FUZZERS],1)
10556     BUILD_TYPE="$BUILD_TYPE FUZZERS"
10558 AC_SUBST(LIB_FUZZING_ENGINE)
10559 AC_SUBST(ENABLE_FUZZERS)
10561 dnl ===================================================================
10562 dnl Orcus
10563 dnl ===================================================================
10564 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.16 >= 0.16.0])
10565 if test "$with_system_orcus" != "yes"; then
10566     if test "$SYSTEM_BOOST" = "TRUE"; then
10567         # ===========================================================
10568         # Determine if we are going to need to link with Boost.System
10569         # ===========================================================
10570         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
10571         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
10572         dnl in documentation has no effect.
10573         AC_MSG_CHECKING([if we need to link with Boost.System])
10574         AC_LANG_PUSH([C++])
10575         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
10576                 @%:@include <boost/version.hpp>
10577             ]],[[
10578                 #if BOOST_VERSION >= 105000
10579                 #   error yes, we need to link with Boost.System
10580                 #endif
10581             ]])],[
10582                 AC_MSG_RESULT([no])
10583             ],[
10584                 AC_MSG_RESULT([yes])
10585                 AX_BOOST_SYSTEM
10586         ])
10587         AC_LANG_POP([C++])
10588     fi
10590 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
10591 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
10592 AC_SUBST([BOOST_SYSTEM_LIB])
10593 AC_SUBST(SYSTEM_LIBORCUS)
10595 dnl ===================================================================
10596 dnl HarfBuzz
10597 dnl ===================================================================
10598 libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3],
10599                          ["-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"],
10600                          ["-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"])
10602 libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 0.9.42],
10603                          ["-I${WORKDIR}/UnpackedTarball/harfbuzz/src"],
10604                          ["-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"])
10606 if test "$COM" = "MSC"; then # override the above
10607     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
10608     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
10611 if test "$with_system_harfbuzz" = "yes"; then
10612     if test "$with_system_graphite" = "no"; then
10613         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
10614     fi
10615     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
10616     save_LIBS="$LIBS"
10617     save_CFLAGS="$CFLAGS"
10618     LIBS="$LIBS $HARFBUZZ_LIBS"
10619     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
10620     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
10621     LIBS="$save_LIBS"
10622     CFLAGS="$save_CFLAGS"
10623 else
10624     if test "$with_system_graphite" = "yes"; then
10625         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
10626     fi
10629 AC_MSG_CHECKING([whether to use X11])
10630 dnl ***************************************
10631 dnl testing for X libraries and includes...
10632 dnl ***************************************
10633 if test "$USING_X11" = TRUE; then
10634     AC_DEFINE(HAVE_FEATURE_X11)
10636 AC_MSG_RESULT([$USING_X11])
10638 if test "$USING_X11" = TRUE; then
10639     AC_PATH_X
10640     AC_PATH_XTRA
10641     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
10643     if test -z "$x_includes"; then
10644         x_includes="default_x_includes"
10645     fi
10646     if test -z "$x_libraries"; then
10647         x_libraries="default_x_libraries"
10648     fi
10649     CFLAGS="$CFLAGS $X_CFLAGS"
10650     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
10651     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
10652 else
10653     x_includes="no_x_includes"
10654     x_libraries="no_x_libraries"
10657 if test "$USING_X11" = TRUE; then
10658     dnl ===================================================================
10659     dnl Check for extension headers
10660     dnl ===================================================================
10661     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
10662      [#include <X11/extensions/shape.h>])
10664     # vcl needs ICE and SM
10665     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
10666     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
10667         [AC_MSG_ERROR(ICE library not found)])
10668     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
10669     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
10670         [AC_MSG_ERROR(SM library not found)])
10673 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
10674     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
10675     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
10678 dnl ===================================================================
10679 dnl Check for system Xrender
10680 dnl ===================================================================
10681 AC_MSG_CHECKING([whether to use Xrender])
10682 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
10683     AC_MSG_RESULT([yes])
10684     PKG_CHECK_MODULES(XRENDER, xrender)
10685     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10686     FilterLibs "${XRENDER_LIBS}"
10687     XRENDER_LIBS="${filteredlibs}"
10688     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
10689       [AC_MSG_ERROR(libXrender not found or functional)], [])
10690     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
10691       [AC_MSG_ERROR(Xrender not found. install X)], [])
10692 else
10693     AC_MSG_RESULT([no])
10695 AC_SUBST(XRENDER_CFLAGS)
10696 AC_SUBST(XRENDER_LIBS)
10698 dnl ===================================================================
10699 dnl Check for XRandr
10700 dnl ===================================================================
10701 AC_MSG_CHECKING([whether to enable RandR support])
10702 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
10703     AC_MSG_RESULT([yes])
10704     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
10705     if test "$ENABLE_RANDR" != "TRUE"; then
10706         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
10707                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
10708         XRANDR_CFLAGS=" "
10709         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
10710           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
10711         XRANDR_LIBS="-lXrandr "
10712         ENABLE_RANDR="TRUE"
10713     fi
10714     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10715     FilterLibs "${XRANDR_LIBS}"
10716     XRANDR_LIBS="${filteredlibs}"
10717 else
10718     ENABLE_RANDR=""
10719     AC_MSG_RESULT([no])
10721 AC_SUBST(XRANDR_CFLAGS)
10722 AC_SUBST(XRANDR_LIBS)
10723 AC_SUBST(ENABLE_RANDR)
10725 if test "$enable_neon" = "no" -o "$enable_mpl_subset" = "yes"; then
10726     if test -z "$WITH_WEBDAV"; then
10727         WITH_WEBDAV="serf"
10728     fi
10730 if test $_os = iOS -o $_os = Android; then
10731     WITH_WEBDAV="no"
10733 AC_MSG_CHECKING([for webdav library])
10734 case "$WITH_WEBDAV" in
10735 serf)
10736     AC_MSG_RESULT([serf])
10737     # Check for system apr-util
10738     libo_CHECK_SYSTEM_MODULE([apr],[APR],[apr-util-1],
10739                              ["-I${WORKDIR}/UnpackedTarball/apr/include -I${WORKDIR}/UnpackedTarball/apr_util/include"],
10740                              ["-L${WORKDIR}/UnpackedTarball/apr/.libs -lapr-1 -L${WORKDIR}/UnpackedTarball/apr_util/.libs -laprutil-1"])
10741     if test "$COM" = "MSC"; then
10742         APR_LIB_DIR="LibR"
10743         test -n "${MSVC_USE_DEBUG_RUNTIME}" && APR_LIB_DIR="LibD"
10744         APR_LIBS="${WORKDIR}/UnpackedTarball/apr/${APR_LIB_DIR}/apr-1.lib ${WORKDIR}/UnpackedTarball/apr_util/${APR_LIB_DIR}/aprutil-1.lib"
10745     fi
10747     # Check for system serf
10748     libo_CHECK_SYSTEM_MODULE([serf],[SERF],[serf-1 >= 1.3.9])
10749     ;;
10750 neon)
10751     AC_MSG_RESULT([neon])
10752     # Check for system neon
10753     libo_CHECK_SYSTEM_MODULE([neon],[NEON],[neon >= 0.31.2])
10754     if test "$with_system_neon" = "yes"; then
10755         NEON_VERSION="`$PKG_CONFIG --modversion neon | $SED 's/\.//g'`"
10756     else
10757         NEON_VERSION=0312
10758     fi
10759     AC_SUBST(NEON_VERSION)
10760     ;;
10762     AC_MSG_RESULT([none, disabled])
10763     WITH_WEBDAV=""
10764     ;;
10765 esac
10766 AC_SUBST(WITH_WEBDAV)
10768 dnl ===================================================================
10769 dnl Check for disabling cve_tests
10770 dnl ===================================================================
10771 AC_MSG_CHECKING([whether to execute CVE tests])
10772 # If not explicitly enabled or disabled, default
10773 if test -z "$enable_cve_tests"; then
10774     case "$OS" in
10775     WNT)
10776         # Default cves off for Windows with its wild and wonderful
10777         # variety of AV software kicking in and panicking
10778         enable_cve_tests=no
10779         ;;
10780     *)
10781         # otherwise yes
10782         enable_cve_tests=yes
10783         ;;
10784     esac
10786 if test "$enable_cve_tests" = "no"; then
10787     AC_MSG_RESULT([no])
10788     DISABLE_CVE_TESTS=TRUE
10789     AC_SUBST(DISABLE_CVE_TESTS)
10790 else
10791     AC_MSG_RESULT([yes])
10794 dnl ===================================================================
10795 dnl Check for enabling chart XShape tests
10796 dnl ===================================================================
10797 AC_MSG_CHECKING([whether to execute chart XShape tests])
10798 if test "$enable_chart_tests" = "yes" -o '(' "$_os" = "WINNT" -a "$enable_chart_tests" != "no" ')'; then
10799     AC_MSG_RESULT([yes])
10800     ENABLE_CHART_TESTS=TRUE
10801     AC_SUBST(ENABLE_CHART_TESTS)
10802 else
10803     AC_MSG_RESULT([no])
10806 dnl ===================================================================
10807 dnl Check for system openssl
10808 dnl ===================================================================
10809 ENABLE_OPENSSL=
10810 AC_MSG_CHECKING([whether to disable OpenSSL usage])
10811 if test "$enable_openssl" = "yes"; then
10812     AC_MSG_RESULT([no])
10813     ENABLE_OPENSSL=TRUE
10814     if test "$_os" = Darwin ; then
10815         # OpenSSL is deprecated when building for 10.7 or later.
10816         #
10817         # http://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
10818         # http://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
10820         with_system_openssl=no
10821         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10822     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
10823             && test "$with_system_openssl" != "no"; then
10824         with_system_openssl=yes
10825         SYSTEM_OPENSSL=TRUE
10826         OPENSSL_CFLAGS=
10827         OPENSSL_LIBS="-lssl -lcrypto"
10828     else
10829         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10830     fi
10831     if test "$with_system_openssl" = "yes"; then
10832         AC_MSG_CHECKING([whether openssl supports SHA512])
10833         AC_LANG_PUSH([C])
10834         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
10835             SHA512_CTX context;
10836 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
10837         AC_LANG_POP(C)
10838     fi
10839 else
10840     AC_MSG_RESULT([yes])
10842     # warn that although OpenSSL is disabled, system libraries may depend on it
10843     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
10844     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
10847 AC_SUBST([ENABLE_OPENSSL])
10849 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
10850     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
10851         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
10852         enable_cipher_openssl_backend=no
10853     else
10854         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
10855     fi
10857 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
10858 ENABLE_CIPHER_OPENSSL_BACKEND=
10859 if test "$enable_cipher_openssl_backend" = yes; then
10860     AC_MSG_RESULT([yes])
10861     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
10862 else
10863     AC_MSG_RESULT([no])
10865 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
10867 dnl ===================================================================
10868 dnl Check for building gnutls
10869 dnl ===================================================================
10870 AC_MSG_CHECKING([whether to use gnutls])
10871 if test "$WITH_WEBDAV" = "neon" -a "$with_system_neon" = no -a "$enable_openssl" = "no"; then
10872     AC_MSG_RESULT([yes])
10873     AM_PATH_LIBGCRYPT()
10874     PKG_CHECK_MODULES(GNUTLS, [gnutls],,
10875         AC_MSG_ERROR([[Disabling OpenSSL was requested, but GNUTLS is not
10876                       available in the system to use as replacement.]]))
10877     FilterLibs "${LIBGCRYPT_LIBS}"
10878     LIBGCRYPT_LIBS="${filteredlibs}"
10879 else
10880     AC_MSG_RESULT([no])
10883 AC_SUBST([LIBGCRYPT_CFLAGS])
10884 AC_SUBST([LIBGCRYPT_LIBS])
10886 dnl ===================================================================
10887 dnl Check for system redland
10888 dnl ===================================================================
10889 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
10890 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
10891 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
10892 if test "$with_system_redland" = "yes"; then
10893     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
10894             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
10895 else
10896     RAPTOR_MAJOR="0"
10897     RASQAL_MAJOR="3"
10898     REDLAND_MAJOR="0"
10900 AC_SUBST(RAPTOR_MAJOR)
10901 AC_SUBST(RASQAL_MAJOR)
10902 AC_SUBST(REDLAND_MAJOR)
10904 dnl ===================================================================
10905 dnl Check for system hunspell
10906 dnl ===================================================================
10907 AC_MSG_CHECKING([which libhunspell to use])
10908 if test "$with_system_hunspell" = "yes"; then
10909     AC_MSG_RESULT([external])
10910     SYSTEM_HUNSPELL=TRUE
10911     AC_LANG_PUSH([C++])
10912     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
10913     if test "$HUNSPELL_PC" != "TRUE"; then
10914         AC_CHECK_HEADER(hunspell.hxx, [],
10915             [
10916             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
10917             [AC_MSG_ERROR(hunspell headers not found.)], [])
10918             ], [])
10919         AC_CHECK_LIB([hunspell], [main], [:],
10920            [ AC_MSG_ERROR(hunspell library not found.) ], [])
10921         HUNSPELL_LIBS=-lhunspell
10922     fi
10923     AC_LANG_POP([C++])
10924     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10925     FilterLibs "${HUNSPELL_LIBS}"
10926     HUNSPELL_LIBS="${filteredlibs}"
10927 else
10928     AC_MSG_RESULT([internal])
10929     SYSTEM_HUNSPELL=
10930     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
10931     if test "$COM" = "MSC"; then
10932         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
10933     else
10934         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
10935     fi
10936     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
10938 AC_SUBST(SYSTEM_HUNSPELL)
10939 AC_SUBST(HUNSPELL_CFLAGS)
10940 AC_SUBST(HUNSPELL_LIBS)
10942 dnl ===================================================================
10943 dnl Check for system zxing
10944 dnl ===================================================================
10945 AC_MSG_CHECKING([whether to use zxing])
10946 if test "$enable_zxing" = "no"; then
10947     AC_MSG_RESULT([no])
10948     ENABLE_ZXING=
10949     SYSTEM_ZXING=
10950 else
10951     AC_MSG_RESULT([yes])
10952     ENABLE_ZXING=TRUE
10953     AC_MSG_CHECKING([which libzxing to use])
10954     if test "$with_system_zxing" = "yes"; then
10955         AC_MSG_RESULT([external])
10956         SYSTEM_ZXING=TRUE
10957         AC_LANG_PUSH([C++])
10958         AC_CHECK_HEADER(ZXing/MultiFormatWriter.h, [],
10959             [AC_MSG_ERROR(zxing headers not found.)], [#include <stdexcept>])
10960         ZXING_CFLAGS=-I/usr/include/ZXing
10961         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
10962             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
10963             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
10964         AC_LANG_POP([C++])
10965         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10966         FilterLibs "${ZXING_LIBS}"
10967         ZXING_LIBS="${filteredlibs}"
10968     else
10969         AC_MSG_RESULT([internal])
10970         SYSTEM_ZXING=
10971         BUILD_TYPE="$BUILD_TYPE ZXING"
10972     fi
10973     if test "$ENABLE_ZXING" = TRUE; then
10974         AC_DEFINE(ENABLE_ZXING)
10975     fi
10977 AC_SUBST(SYSTEM_ZXING)
10978 AC_SUBST(ENABLE_ZXING)
10979 AC_SUBST(ZXING_CFLAGS)
10980 AC_SUBST(ZXING_LIBS)
10982 dnl ===================================================================
10983 dnl Check for system box2d
10984 dnl ===================================================================
10985 AC_MSG_CHECKING([which box2d to use])
10986 if test "$with_system_box2d" = "yes"; then
10987     AC_MSG_RESULT([external])
10988     SYSTEM_BOX2D=TRUE
10989     AC_LANG_PUSH([C++])
10990     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
10991         [BOX2D_H_FOUND='FALSE'])
10992     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
10993         _BOX2D_LIB=box2d
10994         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
10995     else
10996         # fail this. there's no other alternative to check when we are here.
10997         AC_CHECK_HEADER([Box2D/Box2D.h], [],
10998                 [AC_MSG_ERROR(box2d headers not found.)])
10999         _BOX2D_LIB=Box2D
11000         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11001     fi
11002     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11003         [ AC_MSG_ERROR(box2d library not found.) ], [])
11004     BOX2D_LIBS=-l$_BOX2D_LIB
11005     AC_LANG_POP([C++])
11006     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11007     FilterLibs "${BOX2D_LIBS}"
11008     BOX2D_LIBS="${filteredlibs}"
11009 else
11010     AC_MSG_RESULT([internal])
11011     SYSTEM_BOX2D=
11012     BUILD_TYPE="$BUILD_TYPE BOX2D"
11014 AC_SUBST(SYSTEM_BOX2D)
11015 AC_SUBST(BOX2D_CFLAGS)
11016 AC_SUBST(BOX2D_LIBS)
11018 dnl ===================================================================
11019 dnl Checking for altlinuxhyph
11020 dnl ===================================================================
11021 AC_MSG_CHECKING([which altlinuxhyph to use])
11022 if test "$with_system_altlinuxhyph" = "yes"; then
11023     AC_MSG_RESULT([external])
11024     SYSTEM_HYPH=TRUE
11025     AC_CHECK_HEADER(hyphen.h, [],
11026        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11027     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11028        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11029        [#include <hyphen.h>])
11030     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11031         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11032     if test -z "$HYPHEN_LIB"; then
11033         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11034            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11035     fi
11036     if test -z "$HYPHEN_LIB"; then
11037         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11038            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11039     fi
11040 else
11041     AC_MSG_RESULT([internal])
11042     SYSTEM_HYPH=
11043     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11044     if test "$COM" = "MSC"; then
11045         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11046     else
11047         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11048     fi
11050 AC_SUBST(SYSTEM_HYPH)
11051 AC_SUBST(HYPHEN_LIB)
11053 dnl ===================================================================
11054 dnl Checking for mythes
11055 dnl ===================================================================
11056 AC_MSG_CHECKING([which mythes to use])
11057 if test "$with_system_mythes" = "yes"; then
11058     AC_MSG_RESULT([external])
11059     SYSTEM_MYTHES=TRUE
11060     AC_LANG_PUSH([C++])
11061     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11062     if test "$MYTHES_PKGCONFIG" = "no"; then
11063         AC_CHECK_HEADER(mythes.hxx, [],
11064             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11065         AC_CHECK_LIB([mythes-1.2], [main], [:],
11066             [ MYTHES_FOUND=no], [])
11067     if test "$MYTHES_FOUND" = "no"; then
11068         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11069                 [ MYTHES_FOUND=no], [])
11070     fi
11071     if test "$MYTHES_FOUND" = "no"; then
11072         AC_MSG_ERROR([mythes library not found!.])
11073     fi
11074     fi
11075     AC_LANG_POP([C++])
11076     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11077     FilterLibs "${MYTHES_LIBS}"
11078     MYTHES_LIBS="${filteredlibs}"
11079 else
11080     AC_MSG_RESULT([internal])
11081     SYSTEM_MYTHES=
11082     BUILD_TYPE="$BUILD_TYPE MYTHES"
11083     if test "$COM" = "MSC"; then
11084         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11085     else
11086         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11087     fi
11089 AC_SUBST(SYSTEM_MYTHES)
11090 AC_SUBST(MYTHES_CFLAGS)
11091 AC_SUBST(MYTHES_LIBS)
11093 dnl ===================================================================
11094 dnl How should we build the linear programming solver ?
11095 dnl ===================================================================
11097 ENABLE_COINMP=
11098 AC_MSG_CHECKING([whether to build with CoinMP])
11099 if test "$enable_coinmp" != "no"; then
11100     ENABLE_COINMP=TRUE
11101     AC_MSG_RESULT([yes])
11102     if test "$with_system_coinmp" = "yes"; then
11103         SYSTEM_COINMP=TRUE
11104         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11105         FilterLibs "${COINMP_LIBS}"
11106         COINMP_LIBS="${filteredlibs}"
11107     else
11108         BUILD_TYPE="$BUILD_TYPE COINMP"
11109     fi
11110 else
11111     AC_MSG_RESULT([no])
11113 AC_SUBST(ENABLE_COINMP)
11114 AC_SUBST(SYSTEM_COINMP)
11115 AC_SUBST(COINMP_CFLAGS)
11116 AC_SUBST(COINMP_LIBS)
11118 ENABLE_LPSOLVE=
11119 AC_MSG_CHECKING([whether to build with lpsolve])
11120 if test "$enable_lpsolve" != "no"; then
11121     ENABLE_LPSOLVE=TRUE
11122     AC_MSG_RESULT([yes])
11123 else
11124     AC_MSG_RESULT([no])
11126 AC_SUBST(ENABLE_LPSOLVE)
11128 if test "$ENABLE_LPSOLVE" = TRUE; then
11129     AC_MSG_CHECKING([which lpsolve to use])
11130     if test "$with_system_lpsolve" = "yes"; then
11131         AC_MSG_RESULT([external])
11132         SYSTEM_LPSOLVE=TRUE
11133         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11134            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11135         save_LIBS=$LIBS
11136         # some systems need this. Like Ubuntu...
11137         AC_CHECK_LIB(m, floor)
11138         AC_CHECK_LIB(dl, dlopen)
11139         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11140             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11141         LIBS=$save_LIBS
11142     else
11143         AC_MSG_RESULT([internal])
11144         SYSTEM_LPSOLVE=
11145         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11146     fi
11148 AC_SUBST(SYSTEM_LPSOLVE)
11150 dnl ===================================================================
11151 dnl Checking for libexttextcat
11152 dnl ===================================================================
11153 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11154 if test "$with_system_libexttextcat" = "yes"; then
11155     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11157 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11159 dnl ===================================================================
11160 dnl Checking for libnumbertext
11161 dnl ===================================================================
11162 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11163 if test "$with_system_libnumbertext" = "yes"; then
11164     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11165     SYSTEM_LIBNUMBERTEXT=YES
11166 else
11167     SYSTEM_LIBNUMBERTEXT=
11168     AC_LANG_PUSH([C++])
11169     save_CPPFLAGS=$CPPFLAGS
11170     CPPFLAGS="$CPPFLAGS $CXXFLAGS_CXX11"
11171     AC_CHECK_HEADERS([codecvt regex])
11172     AS_IF([test "x$ac_cv_header_codecvt" != xyes -o "x$ac_cv_header_regex" != xyes],
11173             [ LIBNUMBERTEXT_CFLAGS=''
11174               AC_MSG_WARN([No system-provided libnumbertext or codecvt/regex C++11 headers (min. libstdc++ 4.9).
11175                            Enable libnumbertext fallback (missing number to number name conversion).])
11176             ])
11177     CPPFLAGS=$save_CPPFLAGS
11178     AC_LANG_POP([C++])
11180 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11181 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11182 AC_SUBST(LIBNUMBERTEXT_CFLAGS)
11184 dnl ***************************************
11185 dnl testing libc version for Linux...
11186 dnl ***************************************
11187 if test "$_os" = "Linux"; then
11188     AC_MSG_CHECKING([whether libc is >= 2.1.1])
11189     exec 6>/dev/null # no output
11190     AC_CHECK_LIB(c, gnu_get_libc_version, HAVE_LIBC=yes; export HAVE_LIBC)
11191     exec 6>&1 # output on again
11192     if test "$HAVE_LIBC"; then
11193         AC_MSG_RESULT([yes])
11194     else
11195         AC_MSG_ERROR([no, upgrade libc])
11196     fi
11199 dnl =========================================
11200 dnl Check for uuidgen
11201 dnl =========================================
11202 if test "$_os" = "WINNT"; then
11203     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11204     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11205     UUIDGEN=uuidgen.exe
11206     AC_SUBST(UUIDGEN)
11207 else
11208     AC_PATH_PROG([UUIDGEN], [uuidgen])
11209     if test -z "$UUIDGEN"; then
11210         AC_MSG_WARN([uuid is needed for building installation sets])
11211     fi
11214 dnl ***************************************
11215 dnl Checking for bison and flex
11216 dnl ***************************************
11217 AC_PATH_PROG(BISON, bison)
11218 if test -z "$BISON"; then
11219     AC_MSG_ERROR([no bison found in \$PATH, install it])
11220 else
11221     AC_MSG_CHECKING([the bison version])
11222     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11223     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11224     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11225     dnl cause
11226     dnl
11227     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]
11228     dnl   typedef union YYSTYPE
11229     dnl           ~~~~~~^~~~~~~
11230     dnl
11231     dnl while at least 3.4.1 is know to be good:
11232     if test "$COMPILER_PLUGINS" = TRUE; then
11233         if test "$_bison_longver" -lt 2004; then
11234             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11235         fi
11236     else
11237         if test "$_bison_longver" -lt 2000; then
11238             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11239         fi
11240     fi
11242 AC_SUBST([BISON])
11244 AC_PATH_PROG(FLEX, flex)
11245 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11246     FLEX=`cygpath -m $FLEX`
11248 if test -z "$FLEX"; then
11249     AC_MSG_ERROR([no flex found in \$PATH, install it])
11250 else
11251     AC_MSG_CHECKING([the flex version])
11252     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11253     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11254         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11255     fi
11257 AC_SUBST([FLEX])
11258 dnl ***************************************
11259 dnl Checking for patch
11260 dnl ***************************************
11261 AC_PATH_PROG(PATCH, patch)
11262 if test -z "$PATCH"; then
11263     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11266 dnl On Solaris or macOS, check if --with-gnu-patch was used
11267 if test "$_os" = "SunOS" -o "$_os" = "Darwin"; then
11268     if test -z "$with_gnu_patch"; then
11269         GNUPATCH=$PATCH
11270     else
11271         if test -x "$with_gnu_patch"; then
11272             GNUPATCH=$with_gnu_patch
11273         else
11274             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11275         fi
11276     fi
11278     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11279     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11280         AC_MSG_RESULT([yes])
11281     else
11282         AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11283     fi
11284 else
11285     GNUPATCH=$PATCH
11288 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11289     GNUPATCH=`cygpath -m $GNUPATCH`
11292 dnl We also need to check for --with-gnu-cp
11294 if test -z "$with_gnu_cp"; then
11295     # check the place where the good stuff is hidden on Solaris...
11296     if test -x /usr/gnu/bin/cp; then
11297         GNUCP=/usr/gnu/bin/cp
11298     else
11299         AC_PATH_PROGS(GNUCP, gnucp cp)
11300     fi
11301     if test -z $GNUCP; then
11302         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11303     fi
11304 else
11305     if test -x "$with_gnu_cp"; then
11306         GNUCP=$with_gnu_cp
11307     else
11308         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11309     fi
11312 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11313     GNUCP=`cygpath -m $GNUCP`
11316 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11317 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11318     AC_MSG_RESULT([yes])
11319 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11320     AC_MSG_RESULT([yes])
11321 else
11322     case "$build_os" in
11323     darwin*|macos*|netbsd*|openbsd*|freebsd*|dragonfly*|aix*)
11324         x_GNUCP=[\#]
11325         GNUCP=''
11326         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11327         ;;
11328     *)
11329         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11330         ;;
11331     esac
11334 AC_SUBST(GNUPATCH)
11335 AC_SUBST(GNUCP)
11336 AC_SUBST(x_GNUCP)
11338 dnl ***************************************
11339 dnl testing assembler path
11340 dnl ***************************************
11341 ML_EXE=""
11342 if test "$_os" = "WINNT"; then
11343     case "$WIN_HOST_ARCH" in
11344     x86) assembler=ml.exe ;;
11345     x64) assembler=ml64.exe ;;
11346     arm64) assembler=armasm64.exe ;;
11347     esac
11349     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11350     if test -f "$MSVC_HOST_PATH/$assembler"; then
11351         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11352         AC_MSG_RESULT([$ML_EXE])
11353     else
11354         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11355     fi
11358 AC_SUBST(ML_EXE)
11360 dnl ===================================================================
11361 dnl We need zip and unzip
11362 dnl ===================================================================
11363 AC_PATH_PROG(ZIP, zip)
11364 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11365 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11366     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],,)
11369 AC_PATH_PROG(UNZIP, unzip)
11370 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11372 dnl ===================================================================
11373 dnl Zip must be a specific type for different build types.
11374 dnl ===================================================================
11375 if test $build_os = cygwin; then
11376     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11377         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11378     fi
11381 dnl ===================================================================
11382 dnl We need touch with -h option support.
11383 dnl ===================================================================
11384 AC_PATH_PROG(TOUCH, touch)
11385 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11386 touch warn
11387 if ! "$TOUCH" -h warn 2>/dev/null > /dev/null; then
11388     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],,)
11391 dnl ===================================================================
11392 dnl Check for system epoxy
11393 dnl ===================================================================
11394 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2], ["-I${WORKDIR}/UnpackedTarball/epoxy/include"])
11396 dnl ===================================================================
11397 dnl Set vcl option: coordinate device in double or sal_Int32
11398 dnl ===================================================================
11400 dnl disabled for now, we don't want subtle differences between OSs
11401 dnl AC_MSG_CHECKING([Type to use for Device Pixel coordinates])
11402 dnl if test "$_os" = "Darwin" -o  $_os = iOS ; then
11403 dnl     AC_DEFINE(VCL_FLOAT_DEVICE_PIXEL)
11404 dnl     AC_MSG_RESULT([double])
11405 dnl else
11406 dnl     AC_MSG_RESULT([sal_Int32])
11407 dnl fi
11409 dnl ===================================================================
11410 dnl Test which vclplugs have to be built.
11411 dnl ===================================================================
11412 R=""
11413 if test "$USING_X11" != TRUE; then
11414     enable_gtk3=no
11417 ENABLE_GTK3=""
11418 if test "x$enable_gtk3" = "xyes"; then
11419     ENABLE_GTK3="TRUE"
11420     AC_DEFINE(ENABLE_GTK3)
11421     R="$R gtk3"
11423 AC_SUBST(ENABLE_GTK3)
11425 ENABLE_GTK3_KDE5=""
11426 if test "x$enable_gtk3_kde5" = "xyes"; then
11427     ENABLE_GTK3_KDE5="TRUE"
11428     AC_DEFINE(ENABLE_GTK3_KDE5)
11429     R="$R gtk3_kde5"
11431 AC_SUBST(ENABLE_GTK3_KDE5)
11433 ENABLE_GTK4=""
11434 if test "x$enable_gtk4" = "xyes"; then
11435     ENABLE_GTK4="TRUE"
11436     AC_DEFINE(ENABLE_GTK4)
11437     R="$R gtk4"
11439 AC_SUBST(ENABLE_GTK4)
11441 ENABLE_QT5=""
11442 if test "x$enable_qt5" = "xyes"; then
11443     ENABLE_QT5="TRUE"
11444     AC_DEFINE(ENABLE_QT5)
11445     R="$R qt5"
11447 AC_SUBST(ENABLE_QT5)
11449 ENABLE_KF5=""
11450 if test "x$enable_kf5" = "xyes"; then
11451     ENABLE_KF5="TRUE"
11452     AC_DEFINE(ENABLE_KF5)
11453     R="$R kf5"
11455 AC_SUBST(ENABLE_KF5)
11457 GTK3_CFLAGS=""
11458 GTK3_LIBS=""
11459 if test "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11460     if test "$with_system_cairo" = no; then
11461         add_warning 'Non-system cairo combined with gtk3 is assumed to cause trouble; proceed at your own risk.'
11462     fi
11463     : ${with_system_cairo:=yes}
11464     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)
11465     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11466     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11467     FilterLibs "${GTK3_LIBS}"
11468     GTK3_LIBS="${filteredlibs}"
11470     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11471     if test "$with_system_epoxy" != "yes"; then
11472         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11473         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11474                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11475     fi
11477 AC_SUBST(GTK3_LIBS)
11478 AC_SUBST(GTK3_CFLAGS)
11480 GTK4_CFLAGS=""
11481 GTK4_LIBS=""
11482 if test "x$enable_gtk4" = "xyes"; then
11483     if test "$with_system_cairo" = no; then
11484         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11485     fi
11486     : ${with_system_cairo:=yes}
11487     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11488     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11489     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11490     FilterLibs "${GTK4_LIBS}"
11491     GTK4_LIBS="${filteredlibs}"
11493     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11494     if test "$with_system_epoxy" != "yes"; then
11495         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11496         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11497                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11498     fi
11500 AC_SUBST(GTK4_LIBS)
11501 AC_SUBST(GTK4_CFLAGS)
11503 if test "$enable_introspection" = yes; then
11504     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11505         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11506     else
11507         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
11508     fi
11511 if test "$_os" = "WINNT"; then
11512     R="$R win"
11513 elif test "$_os" = "Darwin"; then
11514     R="$R osx"
11515 elif test "$_os" = "iOS"; then
11516     R="ios (builtin)"
11519 build_vcl_plugins="$R"
11520 if test -z "$build_vcl_plugins"; then
11521     build_vcl_plugins="none"
11523 AC_MSG_NOTICE([VCLplugs to be built: $build_vcl_plugins])
11524 VCL_PLUGIN_INFO=$R
11525 AC_SUBST([VCL_PLUGIN_INFO])
11527 dnl ===================================================================
11528 dnl check for dbus support
11529 dnl ===================================================================
11530 ENABLE_DBUS=""
11531 DBUS_CFLAGS=""
11532 DBUS_LIBS=""
11533 DBUS_GLIB_CFLAGS=""
11534 DBUS_GLIB_LIBS=""
11535 DBUS_HAVE_GLIB=""
11537 if test "$enable_dbus" = "no"; then
11538     test_dbus=no
11541 AC_MSG_CHECKING([whether to enable DBUS support])
11542 if test "$test_dbus" = "yes"; then
11543     ENABLE_DBUS="TRUE"
11544     AC_MSG_RESULT([yes])
11545     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
11546     AC_DEFINE(ENABLE_DBUS)
11547     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11548     FilterLibs "${DBUS_LIBS}"
11549     DBUS_LIBS="${filteredlibs}"
11551     # Glib is needed for BluetoothServer
11552     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
11553     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
11554         [
11555             DBUS_HAVE_GLIB="TRUE"
11556             AC_DEFINE(DBUS_HAVE_GLIB,1)
11557         ],
11558         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
11559     )
11560 else
11561     AC_MSG_RESULT([no])
11564 AC_SUBST(ENABLE_DBUS)
11565 AC_SUBST(DBUS_CFLAGS)
11566 AC_SUBST(DBUS_LIBS)
11567 AC_SUBST(DBUS_GLIB_CFLAGS)
11568 AC_SUBST(DBUS_GLIB_LIBS)
11569 AC_SUBST(DBUS_HAVE_GLIB)
11571 AC_MSG_CHECKING([whether to enable Impress remote control])
11572 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
11573     AC_MSG_RESULT([yes])
11574     ENABLE_SDREMOTE=TRUE
11575     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
11577     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
11578         # The Bluetooth code doesn't compile with macOS SDK 10.15
11579         if test "$enable_sdremote_bluetooth" = yes; then
11580             AC_MSG_ERROR([macOS SDK $with_macosx_sdk does not currently support --enable-sdremote-bluetooth])
11581         fi
11582         enable_sdremote_bluetooth=no
11583     fi
11584     # If not explicitly enabled or disabled, default
11585     if test -z "$enable_sdremote_bluetooth"; then
11586         case "$OS" in
11587         LINUX|MACOSX|WNT)
11588             # Default to yes for these
11589             enable_sdremote_bluetooth=yes
11590             ;;
11591         *)
11592             # otherwise no
11593             enable_sdremote_bluetooth=no
11594             ;;
11595         esac
11596     fi
11597     # $enable_sdremote_bluetooth is guaranteed non-empty now
11599     if test "$enable_sdremote_bluetooth" != "no"; then
11600         if test "$OS" = "LINUX"; then
11601             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
11602                 AC_MSG_RESULT([yes])
11603                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
11604                 dnl ===================================================================
11605                 dnl Check for system bluez
11606                 dnl ===================================================================
11607                 AC_MSG_CHECKING([which Bluetooth header to use])
11608                 if test "$with_system_bluez" = "yes"; then
11609                     AC_MSG_RESULT([external])
11610                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
11611                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
11612                     SYSTEM_BLUEZ=TRUE
11613                 else
11614                     AC_MSG_RESULT([internal])
11615                     SYSTEM_BLUEZ=
11616                 fi
11617             else
11618                 AC_MSG_RESULT([no, dbus disabled])
11619                 ENABLE_SDREMOTE_BLUETOOTH=
11620                 SYSTEM_BLUEZ=
11621             fi
11622         else
11623             AC_MSG_RESULT([yes])
11624             ENABLE_SDREMOTE_BLUETOOTH=TRUE
11625             SYSTEM_BLUEZ=
11626         fi
11627     else
11628         AC_MSG_RESULT([no])
11629         ENABLE_SDREMOTE_BLUETOOTH=
11630         SYSTEM_BLUEZ=
11631     fi
11632 else
11633     ENABLE_SDREMOTE=
11634     SYSTEM_BLUEZ=
11635     AC_MSG_RESULT([no])
11637 AC_SUBST(ENABLE_SDREMOTE)
11638 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
11639 AC_SUBST(SYSTEM_BLUEZ)
11641 dnl ===================================================================
11642 dnl Check whether to enable GIO support
11643 dnl ===================================================================
11644 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11645     AC_MSG_CHECKING([whether to enable GIO support])
11646     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
11647         dnl Need at least 2.26 for the dbus support.
11648         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
11649                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
11650         if test "$ENABLE_GIO" = "TRUE"; then
11651             AC_DEFINE(ENABLE_GIO)
11652             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11653             FilterLibs "${GIO_LIBS}"
11654             GIO_LIBS="${filteredlibs}"
11655         fi
11656     else
11657         AC_MSG_RESULT([no])
11658     fi
11660 AC_SUBST(ENABLE_GIO)
11661 AC_SUBST(GIO_CFLAGS)
11662 AC_SUBST(GIO_LIBS)
11665 dnl ===================================================================
11667 SPLIT_APP_MODULES=""
11668 if test "$enable_split_app_modules" = "yes"; then
11669     SPLIT_APP_MODULES="TRUE"
11671 AC_SUBST(SPLIT_APP_MODULES)
11673 SPLIT_OPT_FEATURES=""
11674 if test "$enable_split_opt_features" = "yes"; then
11675     SPLIT_OPT_FEATURES="TRUE"
11677 AC_SUBST(SPLIT_OPT_FEATURES)
11679 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS; then
11680     if test "$enable_cairo_canvas" = yes; then
11681         AC_MSG_ERROR([The cairo canvas should not be used for this platform])
11682     fi
11683     enable_cairo_canvas=no
11684 elif test -z "$enable_cairo_canvas"; then
11685     enable_cairo_canvas=yes
11688 ENABLE_CAIRO_CANVAS=""
11689 if test "$enable_cairo_canvas" = "yes"; then
11690     test_cairo=yes
11691     ENABLE_CAIRO_CANVAS="TRUE"
11692     AC_DEFINE(ENABLE_CAIRO_CANVAS)
11694 AC_SUBST(ENABLE_CAIRO_CANVAS)
11696 dnl ===================================================================
11697 dnl Check whether the GStreamer libraries are available.
11698 dnl ===================================================================
11700 ENABLE_GSTREAMER_1_0=""
11702 if test "$build_gstreamer_1_0" = "yes"; then
11704     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
11705     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
11706         ENABLE_GSTREAMER_1_0="TRUE"
11707         AC_MSG_RESULT([yes])
11708         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
11709         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11710         FilterLibs "${GSTREAMER_1_0_LIBS}"
11711         GSTREAMER_1_0_LIBS="${filteredlibs}"
11712         AC_DEFINE(ENABLE_GSTREAMER_1_0)
11713     else
11714         AC_MSG_RESULT([no])
11715     fi
11717 AC_SUBST(GSTREAMER_1_0_CFLAGS)
11718 AC_SUBST(GSTREAMER_1_0_LIBS)
11719 AC_SUBST(ENABLE_GSTREAMER_1_0)
11721 ENABLE_OPENGL_TRANSITIONS=
11722 ENABLE_OPENGL_CANVAS=
11723 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
11724    : # disable
11725 elif test "$_os" = "Darwin"; then
11726     # We use frameworks on macOS, no need for detail checks
11727     ENABLE_OPENGL_TRANSITIONS=TRUE
11728     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11729     ENABLE_OPENGL_CANVAS=TRUE
11730 elif test $_os = WINNT; then
11731     ENABLE_OPENGL_TRANSITIONS=TRUE
11732     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11733     ENABLE_OPENGL_CANVAS=TRUE
11734 else
11735     if test "$USING_X11" = TRUE; then
11736         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
11737         ENABLE_OPENGL_TRANSITIONS=TRUE
11738         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11739         ENABLE_OPENGL_CANVAS=TRUE
11740     fi
11743 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
11744 AC_SUBST(ENABLE_OPENGL_CANVAS)
11746 dnl =================================================
11747 dnl Check whether to build with OpenCL support.
11748 dnl =================================================
11750 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
11751     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
11752     # platform (optional at run-time, used through clew).
11753     BUILD_TYPE="$BUILD_TYPE OPENCL"
11754     AC_DEFINE(HAVE_FEATURE_OPENCL)
11757 dnl =================================================
11758 dnl Check whether to build with dconf support.
11759 dnl =================================================
11761 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
11762     PKG_CHECK_MODULES([DCONF], [dconf >= 0.15.2], [], [
11763         if test "$enable_dconf" = yes; then
11764             AC_MSG_ERROR([dconf not found])
11765         else
11766             enable_dconf=no
11767         fi])
11769 AC_MSG_CHECKING([whether to enable dconf])
11770 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
11771     DCONF_CFLAGS=
11772     DCONF_LIBS=
11773     ENABLE_DCONF=
11774     AC_MSG_RESULT([no])
11775 else
11776     ENABLE_DCONF=TRUE
11777     AC_DEFINE(ENABLE_DCONF)
11778     AC_MSG_RESULT([yes])
11780 AC_SUBST([DCONF_CFLAGS])
11781 AC_SUBST([DCONF_LIBS])
11782 AC_SUBST([ENABLE_DCONF])
11784 # pdf import?
11785 AC_MSG_CHECKING([whether to build the PDF import feature])
11786 ENABLE_PDFIMPORT=
11787 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
11788     AC_MSG_RESULT([yes])
11789     ENABLE_PDFIMPORT=TRUE
11790     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
11791 else
11792     AC_MSG_RESULT([no])
11795 # Pdfium?
11796 AC_MSG_CHECKING([whether to build PDFium])
11797 ENABLE_PDFIUM=
11798 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
11799     AC_MSG_RESULT([yes])
11800     ENABLE_PDFIUM=TRUE
11801     BUILD_TYPE="$BUILD_TYPE PDFIUM"
11802 else
11803     AC_MSG_RESULT([no])
11805 AC_SUBST(ENABLE_PDFIUM)
11807 dnl ===================================================================
11808 dnl Check for poppler
11809 dnl ===================================================================
11810 ENABLE_POPPLER=
11811 AC_MSG_CHECKING([whether to build Poppler])
11812 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
11813     AC_MSG_RESULT([yes])
11814     ENABLE_POPPLER=TRUE
11815     AC_DEFINE(HAVE_FEATURE_POPPLER)
11816 else
11817     AC_MSG_RESULT([no])
11819 AC_SUBST(ENABLE_POPPLER)
11821 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
11822     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
11825 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
11826     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
11829 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
11830     dnl ===================================================================
11831     dnl Check for system poppler
11832     dnl ===================================================================
11833     AC_MSG_CHECKING([which PDF import poppler to use])
11834     if test "$with_system_poppler" = "yes"; then
11835         AC_MSG_RESULT([external])
11836         SYSTEM_POPPLER=TRUE
11837         PKG_CHECK_MODULES( POPPLER, poppler >= 0.12.0 )
11838         AC_LANG_PUSH([C++])
11839         save_CXXFLAGS=$CXXFLAGS
11840         save_CPPFLAGS=$CPPFLAGS
11841         CXXFLAGS="$CXXFLAGS $POPPLER_CFLAGS"
11842         CPPFLAGS="$CPPFLAGS $POPPLER_CFLAGS"
11843         AC_CHECK_HEADER([cpp/poppler-version.h],
11844             [AC_DEFINE([HAVE_POPPLER_VERSION_H], 1)],
11845             [])
11846         CXXFLAGS=$save_CXXFLAGS
11847         CPPFLAGS=$save_CPPFLAGS
11848         AC_LANG_POP([C++])
11849         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11851         FilterLibs "${POPPLER_LIBS}"
11852         POPPLER_LIBS="${filteredlibs}"
11853     else
11854         AC_MSG_RESULT([internal])
11855         SYSTEM_POPPLER=
11856         BUILD_TYPE="$BUILD_TYPE POPPLER"
11857         AC_DEFINE([HAVE_POPPLER_VERSION_H], 1)
11858     fi
11859     AC_DEFINE([ENABLE_PDFIMPORT],1)
11861 AC_SUBST(ENABLE_PDFIMPORT)
11862 AC_SUBST(SYSTEM_POPPLER)
11863 AC_SUBST(POPPLER_CFLAGS)
11864 AC_SUBST(POPPLER_LIBS)
11866 # Skia?
11867 AC_MSG_CHECKING([whether to build Skia])
11868 ENABLE_SKIA=
11869 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
11870     if test "$enable_skia" = "debug"; then
11871         AC_MSG_RESULT([yes (debug)])
11872         ENABLE_SKIA_DEBUG=TRUE
11873     else
11874         AC_MSG_RESULT([yes])
11875         ENABLE_SKIA_DEBUG=
11876     fi
11877     ENABLE_SKIA=TRUE
11878     AC_DEFINE(HAVE_FEATURE_SKIA)
11879     BUILD_TYPE="$BUILD_TYPE SKIA"
11880 else
11881     AC_MSG_RESULT([no])
11883 AC_SUBST(ENABLE_SKIA)
11884 AC_SUBST(ENABLE_SKIA_DEBUG)
11886 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
11887 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
11888 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
11889 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
11890 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
11891 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
11892 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
11893 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
11894 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
11896 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE -a ! \( "$_os" = "WINNT" -a "$CPUNAME" = "AARCH64" \); then
11897     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
11898         AC_MSG_CHECKING([for Clang])
11899         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
11900     else
11901         if test "$_os" = "WINNT"; then
11902             AC_MSG_CHECKING([for clang-cl])
11903             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
11904                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
11905                 dnl explicitly set -m32/-m64
11906                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
11907                 LO_CLANG_CXX="$LO_CLANG_CC"
11908                 AC_MSG_RESULT([$LO_CLANG_CC])
11909             else
11910                 AC_MSG_RESULT([no])
11911             fi
11912         else
11913             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
11914             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
11915         fi
11916     fi
11917     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
11918         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
11919         clang2_ver=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
11920         if test "$clang2_ver" -lt 50002; then
11921             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
11922             LO_CLANG_CC=
11923             LO_CLANG_CXX=
11924         fi
11925     fi
11926     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
11927         # Skia is the default on Windows, so hard-require Clang.
11928         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
11929         if test "$_os" = "WINNT"; then
11930             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang.])
11931         else
11932             AC_MSG_WARN([Clang compiler not found.])
11933         fi
11934     else
11936         save_CXX="$CXX"
11937         CXX="$LO_CLANG_CXX"
11938         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
11939         flag_sse2=-msse2
11940         flag_ssse3=-mssse3
11941         flag_sse41=-msse4.1
11942         flag_sse42=-msse4.2
11943         flag_avx=-mavx
11944         flag_avx2=-mavx2
11945         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
11946         flag_f16c=-mf16c
11947         flag_fma=-mfma
11949         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
11950         AC_LANG_PUSH([C++])
11951         save_CXXFLAGS=$CXXFLAGS
11952         CXXFLAGS="$CXXFLAGS $flag_sse2"
11953         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
11954             #include <emmintrin.h>
11955             int main () {
11956                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
11957                 c = _mm_xor_si128 (a, b);
11958                 return 0;
11959             }
11960             ])],
11961             [can_compile_sse2=yes],
11962             [can_compile_sse2=no])
11963         AC_LANG_POP([C++])
11964         CXXFLAGS=$save_CXXFLAGS
11965         AC_MSG_RESULT([${can_compile_sse2}])
11966         if test "${can_compile_sse2}" = "yes" ; then
11967             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
11968         fi
11970         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
11971         AC_LANG_PUSH([C++])
11972         save_CXXFLAGS=$CXXFLAGS
11973         CXXFLAGS="$CXXFLAGS $flag_ssse3"
11974         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
11975             #include <tmmintrin.h>
11976             int main () {
11977                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
11978                 c = _mm_maddubs_epi16 (a, b);
11979                 return 0;
11980             }
11981             ])],
11982             [can_compile_ssse3=yes],
11983             [can_compile_ssse3=no])
11984         AC_LANG_POP([C++])
11985         CXXFLAGS=$save_CXXFLAGS
11986         AC_MSG_RESULT([${can_compile_ssse3}])
11987         if test "${can_compile_ssse3}" = "yes" ; then
11988             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
11989         fi
11991         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
11992         AC_LANG_PUSH([C++])
11993         save_CXXFLAGS=$CXXFLAGS
11994         CXXFLAGS="$CXXFLAGS $flag_sse41"
11995         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
11996             #include <smmintrin.h>
11997             int main () {
11998                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
11999                 c = _mm_cmpeq_epi64 (a, b);
12000                 return 0;
12001             }
12002             ])],
12003             [can_compile_sse41=yes],
12004             [can_compile_sse41=no])
12005         AC_LANG_POP([C++])
12006         CXXFLAGS=$save_CXXFLAGS
12007         AC_MSG_RESULT([${can_compile_sse41}])
12008         if test "${can_compile_sse41}" = "yes" ; then
12009             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12010         fi
12012         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12013         AC_LANG_PUSH([C++])
12014         save_CXXFLAGS=$CXXFLAGS
12015         CXXFLAGS="$CXXFLAGS $flag_sse42"
12016         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12017             #include <nmmintrin.h>
12018             int main () {
12019                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12020                 c = _mm_cmpgt_epi64 (a, b);
12021                 return 0;
12022             }
12023             ])],
12024             [can_compile_sse42=yes],
12025             [can_compile_sse42=no])
12026         AC_LANG_POP([C++])
12027         CXXFLAGS=$save_CXXFLAGS
12028         AC_MSG_RESULT([${can_compile_sse42}])
12029         if test "${can_compile_sse42}" = "yes" ; then
12030             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12031         fi
12033         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12034         AC_LANG_PUSH([C++])
12035         save_CXXFLAGS=$CXXFLAGS
12036         CXXFLAGS="$CXXFLAGS $flag_avx"
12037         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12038             #include <immintrin.h>
12039             int main () {
12040                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12041                 c = _mm256_xor_ps(a, b);
12042                 return 0;
12043             }
12044             ])],
12045             [can_compile_avx=yes],
12046             [can_compile_avx=no])
12047         AC_LANG_POP([C++])
12048         CXXFLAGS=$save_CXXFLAGS
12049         AC_MSG_RESULT([${can_compile_avx}])
12050         if test "${can_compile_avx}" = "yes" ; then
12051             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12052         fi
12054         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12055         AC_LANG_PUSH([C++])
12056         save_CXXFLAGS=$CXXFLAGS
12057         CXXFLAGS="$CXXFLAGS $flag_avx2"
12058         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12059             #include <immintrin.h>
12060             int main () {
12061                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12062                 c = _mm256_maddubs_epi16(a, b);
12063                 return 0;
12064             }
12065             ])],
12066             [can_compile_avx2=yes],
12067             [can_compile_avx2=no])
12068         AC_LANG_POP([C++])
12069         CXXFLAGS=$save_CXXFLAGS
12070         AC_MSG_RESULT([${can_compile_avx2}])
12071         if test "${can_compile_avx2}" = "yes" ; then
12072             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12073         fi
12075         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12076         AC_LANG_PUSH([C++])
12077         save_CXXFLAGS=$CXXFLAGS
12078         CXXFLAGS="$CXXFLAGS $flag_avx512"
12079         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12080             #include <immintrin.h>
12081             int main () {
12082                 __m512i a = _mm512_loadu_si512(0);
12083                 return 0;
12084             }
12085             ])],
12086             [can_compile_avx512=yes],
12087             [can_compile_avx512=no])
12088         AC_LANG_POP([C++])
12089         CXXFLAGS=$save_CXXFLAGS
12090         AC_MSG_RESULT([${can_compile_avx512}])
12091         if test "${can_compile_avx512}" = "yes" ; then
12092             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12093         fi
12095         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12096         AC_LANG_PUSH([C++])
12097         save_CXXFLAGS=$CXXFLAGS
12098         CXXFLAGS="$CXXFLAGS $flag_f16c"
12099         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12100             #include <immintrin.h>
12101             int main () {
12102                 __m128i a = _mm_set1_epi32 (0);
12103                 __m128 c;
12104                 c = _mm_cvtph_ps(a);
12105                 return 0;
12106             }
12107             ])],
12108             [can_compile_f16c=yes],
12109             [can_compile_f16c=no])
12110         AC_LANG_POP([C++])
12111         CXXFLAGS=$save_CXXFLAGS
12112         AC_MSG_RESULT([${can_compile_f16c}])
12113         if test "${can_compile_f16c}" = "yes" ; then
12114             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12115         fi
12117         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12118         AC_LANG_PUSH([C++])
12119         save_CXXFLAGS=$CXXFLAGS
12120         CXXFLAGS="$CXXFLAGS $flag_fma"
12121         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12122             #include <immintrin.h>
12123             int main () {
12124                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12125                 d = _mm256_fmadd_ps(a, b, c);
12126                 return 0;
12127             }
12128             ])],
12129             [can_compile_fma=yes],
12130             [can_compile_fma=no])
12131         AC_LANG_POP([C++])
12132         CXXFLAGS=$save_CXXFLAGS
12133         AC_MSG_RESULT([${can_compile_fma}])
12134         if test "${can_compile_fma}" = "yes" ; then
12135             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12136         fi
12138         CXX="$save_CXX"
12139     fi
12142 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12144 UNCACHED_CLANG_CC="$LO_CLANG_CC"
12145 UNCACHED_CLANG_CXX="$LO_CLANG_CXX"
12146 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12147     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12148     AC_LANG_PUSH([C])
12149     save_CC="$CC"
12150     CC="$LO_CLANG_CC"
12151     save_CFLAGS=$CFLAGS
12152     CFLAGS="$CFLAGS --ccache-skip -O2"
12153     dnl an empty program will do, we're checking the compiler flags
12154     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12155                       [use_ccache=yes], [use_ccache=no])
12156     CFLAGS=$save_CFLAGS
12157     CC=$save_CC
12158     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12159         AC_MSG_RESULT([yes])
12160     else
12161         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12162         AC_MSG_RESULT([no])
12163     fi
12164     AC_LANG_POP([C])
12166     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12167     AC_LANG_PUSH([C++])
12168     save_CXX="$CXX"
12169     CXX="$LO_CLANG_CXX"
12170     save_CXXFLAGS=$CXXFLAGS
12171     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
12172     dnl an empty program will do, we're checking the compiler flags
12173     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12174                       [use_ccache=yes], [use_ccache=no])
12175     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12176         AC_MSG_RESULT([yes])
12177     else
12178         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12179         AC_MSG_RESULT([no])
12180     fi
12181     CXXFLAGS=$save_CXXFLAGS
12182     CXX=$save_CXX
12183     AC_LANG_POP([C++])
12186 AC_SUBST(UNCACHED_CC)
12187 AC_SUBST(UNCACHED_CXX)
12188 AC_SUBST(LO_CLANG_CC)
12189 AC_SUBST(LO_CLANG_CXX)
12190 AC_SUBST(UNCACHED_CLANG_CC)
12191 AC_SUBST(UNCACHED_CLANG_CXX)
12192 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12193 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12194 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12195 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12196 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12197 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12198 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12199 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12200 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12201 AC_SUBST(CLANG_USE_LD)
12203 SYSTEM_GPGMEPP=
12205 if test "$enable_gpgmepp" = no; then
12206     AC_MSG_CHECKING([whether to enable gpgmepp])
12207     AC_MSG_RESULT([no])
12208 elif test "$enable_mpl_subset" = "yes"; then
12209     AC_MSG_CHECKING([whether gpgmepp should be disabled due to building just MPL])
12210     AC_MSG_RESULT([yes])
12211 elif test "$enable_fuzzers" = "yes"; then
12212     AC_MSG_CHECKING([whether gpgmepp should be disabled due to oss-fuzz])
12213     AC_MSG_RESULT([yes])
12214 elif test "$_os" = "Linux" -o "$_os" = "Darwin" -o "$_os" = "WINNT" ; then
12215     dnl ===================================================================
12216     dnl Check for system gpgme
12217     dnl ===================================================================
12218     AC_MSG_CHECKING([which gpgmepp to use])
12219     if test "$with_system_gpgmepp" = "yes"; then
12220         AC_MSG_RESULT([external])
12221         SYSTEM_GPGMEPP=TRUE
12223         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12224         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12225             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp development package])], [])
12226         # progress_callback is the only func with plain C linkage
12227         # checking for it also filters out older, KDE-dependent libgpgmepp versions
12228         AC_CHECK_LIB(gpgmepp, progress_callback, [ GPGMEPP_LIBS=-lgpgmepp ],
12229             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12230         AC_CHECK_HEADER(gpgme.h, [],
12231             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12232     else
12233         AC_MSG_RESULT([internal])
12234         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12235         AC_DEFINE([GPGME_CAN_EXPORT_MINIMAL_KEY])
12237         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12238         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12239         if test "$_os" != "WINNT"; then
12240             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12241             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12242         fi
12243     fi
12244     ENABLE_GPGMEPP=TRUE
12245     AC_DEFINE([HAVE_FEATURE_GPGME])
12246     AC_PATH_PROG(GPG, gpg)
12247     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12248     # so let's exclude that manually for the moment
12249     if test -n "$GPG" -a "$_os" != "WINNT"; then
12250         # make sure we not only have a working gpgme, but a full working
12251         # gpg installation to run OpenPGP signature verification
12252         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12253     fi
12254     if test "$_os" = "Linux"; then
12255       uid=`id -u`
12256       AC_MSG_CHECKING([for /run/user/$uid])
12257       if test -d /run/user/$uid; then
12258         AC_MSG_RESULT([yes])
12259         AC_PATH_PROG(GPGCONF, gpgconf)
12261         # Older versions of gpgconf are not working as expected, since
12262         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12263         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12264         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12265         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12266         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12267         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12268         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12269           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12270           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12271           if $GPGCONF --dump-options > /dev/null ; then
12272             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12273               AC_MSG_RESULT([yes])
12274               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12275               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12276             else
12277               AC_MSG_RESULT([no])
12278             fi
12279           else
12280             AC_MSG_RESULT([no. missing or broken gpgconf?])
12281           fi
12282         else
12283           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12284         fi
12285       else
12286         AC_MSG_RESULT([no])
12287      fi
12288    fi
12290 AC_SUBST(ENABLE_GPGMEPP)
12291 AC_SUBST(SYSTEM_GPGMEPP)
12292 AC_SUBST(GPG_ERROR_CFLAGS)
12293 AC_SUBST(GPG_ERROR_LIBS)
12294 AC_SUBST(LIBASSUAN_CFLAGS)
12295 AC_SUBST(LIBASSUAN_LIBS)
12296 AC_SUBST(GPGMEPP_CFLAGS)
12297 AC_SUBST(GPGMEPP_LIBS)
12299 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12300 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12301     AC_MSG_RESULT([yes])
12302     ENABLE_MEDIAWIKI=TRUE
12303     BUILD_TYPE="$BUILD_TYPE XSLTML"
12304     if test  "x$with_java" = "xno"; then
12305         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12306     fi
12307 else
12308     AC_MSG_RESULT([no])
12309     ENABLE_MEDIAWIKI=
12310     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12312 AC_SUBST(ENABLE_MEDIAWIKI)
12314 AC_MSG_CHECKING([whether to build the Report Builder])
12315 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12316     AC_MSG_RESULT([yes])
12317     ENABLE_REPORTBUILDER=TRUE
12318     AC_MSG_CHECKING([which jfreereport libs to use])
12319     if test "$with_system_jfreereport" = "yes"; then
12320         SYSTEM_JFREEREPORT=TRUE
12321         AC_MSG_RESULT([external])
12322         if test -z $SAC_JAR; then
12323             SAC_JAR=/usr/share/java/sac.jar
12324         fi
12325         if ! test -f $SAC_JAR; then
12326              AC_MSG_ERROR(sac.jar not found.)
12327         fi
12329         if test -z $LIBXML_JAR; then
12330             if test -f /usr/share/java/libxml-1.0.0.jar; then
12331                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12332             elif test -f /usr/share/java/libxml.jar; then
12333                 LIBXML_JAR=/usr/share/java/libxml.jar
12334             else
12335                 AC_MSG_ERROR(libxml.jar replacement not found.)
12336             fi
12337         elif ! test -f $LIBXML_JAR; then
12338             AC_MSG_ERROR(libxml.jar not found.)
12339         fi
12341         if test -z $FLUTE_JAR; then
12342             if test -f /usr/share/java/flute-1.3.0.jar; then
12343                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12344             elif test -f /usr/share/java/flute.jar; then
12345                 FLUTE_JAR=/usr/share/java/flute.jar
12346             else
12347                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12348             fi
12349         elif ! test -f $FLUTE_JAR; then
12350             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12351         fi
12353         if test -z $JFREEREPORT_JAR; then
12354             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12355                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12356             elif test -f /usr/share/java/flow-engine.jar; then
12357                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12358             else
12359                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12360             fi
12361         elif ! test -f  $JFREEREPORT_JAR; then
12362                 AC_MSG_ERROR(jfreereport.jar not found.)
12363         fi
12365         if test -z $LIBLAYOUT_JAR; then
12366             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12367                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12368             elif test -f /usr/share/java/liblayout.jar; then
12369                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12370             else
12371                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12372             fi
12373         elif ! test -f $LIBLAYOUT_JAR; then
12374                 AC_MSG_ERROR(liblayout.jar not found.)
12375         fi
12377         if test -z $LIBLOADER_JAR; then
12378             if test -f /usr/share/java/libloader-1.0.0.jar; then
12379                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
12380             elif test -f /usr/share/java/libloader.jar; then
12381                 LIBLOADER_JAR=/usr/share/java/libloader.jar
12382             else
12383                 AC_MSG_ERROR(libloader.jar replacement not found.)
12384             fi
12385         elif ! test -f  $LIBLOADER_JAR; then
12386             AC_MSG_ERROR(libloader.jar not found.)
12387         fi
12389         if test -z $LIBFORMULA_JAR; then
12390             if test -f /usr/share/java/libformula-0.2.0.jar; then
12391                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
12392             elif test -f /usr/share/java/libformula.jar; then
12393                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
12394             else
12395                 AC_MSG_ERROR(libformula.jar replacement not found.)
12396             fi
12397         elif ! test -f $LIBFORMULA_JAR; then
12398                 AC_MSG_ERROR(libformula.jar not found.)
12399         fi
12401         if test -z $LIBREPOSITORY_JAR; then
12402             if test -f /usr/share/java/librepository-1.0.0.jar; then
12403                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
12404             elif test -f /usr/share/java/librepository.jar; then
12405                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
12406             else
12407                 AC_MSG_ERROR(librepository.jar replacement not found.)
12408             fi
12409         elif ! test -f $LIBREPOSITORY_JAR; then
12410             AC_MSG_ERROR(librepository.jar not found.)
12411         fi
12413         if test -z $LIBFONTS_JAR; then
12414             if test -f /usr/share/java/libfonts-1.0.0.jar; then
12415                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
12416             elif test -f /usr/share/java/libfonts.jar; then
12417                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
12418             else
12419                 AC_MSG_ERROR(libfonts.jar replacement not found.)
12420             fi
12421         elif ! test -f $LIBFONTS_JAR; then
12422                 AC_MSG_ERROR(libfonts.jar not found.)
12423         fi
12425         if test -z $LIBSERIALIZER_JAR; then
12426             if test -f /usr/share/java/libserializer-1.0.0.jar; then
12427                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
12428             elif test -f /usr/share/java/libserializer.jar; then
12429                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
12430             else
12431                 AC_MSG_ERROR(libserializer.jar replacement not found.)
12432             fi
12433         elif ! test -f $LIBSERIALIZER_JAR; then
12434                 AC_MSG_ERROR(libserializer.jar not found.)
12435         fi
12437         if test -z $LIBBASE_JAR; then
12438             if test -f /usr/share/java/libbase-1.0.0.jar; then
12439                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
12440             elif test -f /usr/share/java/libbase.jar; then
12441                 LIBBASE_JAR=/usr/share/java/libbase.jar
12442             else
12443                 AC_MSG_ERROR(libbase.jar replacement not found.)
12444             fi
12445         elif ! test -f $LIBBASE_JAR; then
12446             AC_MSG_ERROR(libbase.jar not found.)
12447         fi
12449     else
12450         AC_MSG_RESULT([internal])
12451         SYSTEM_JFREEREPORT=
12452         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
12453         NEED_ANT=TRUE
12454     fi
12455 else
12456     AC_MSG_RESULT([no])
12457     ENABLE_REPORTBUILDER=
12458     SYSTEM_JFREEREPORT=
12460 AC_SUBST(ENABLE_REPORTBUILDER)
12461 AC_SUBST(SYSTEM_JFREEREPORT)
12462 AC_SUBST(SAC_JAR)
12463 AC_SUBST(LIBXML_JAR)
12464 AC_SUBST(FLUTE_JAR)
12465 AC_SUBST(JFREEREPORT_JAR)
12466 AC_SUBST(LIBBASE_JAR)
12467 AC_SUBST(LIBLAYOUT_JAR)
12468 AC_SUBST(LIBLOADER_JAR)
12469 AC_SUBST(LIBFORMULA_JAR)
12470 AC_SUBST(LIBREPOSITORY_JAR)
12471 AC_SUBST(LIBFONTS_JAR)
12472 AC_SUBST(LIBSERIALIZER_JAR)
12474 # scripting provider for BeanShell?
12475 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
12476 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
12477     AC_MSG_RESULT([yes])
12478     ENABLE_SCRIPTING_BEANSHELL=TRUE
12480     dnl ===================================================================
12481     dnl Check for system beanshell
12482     dnl ===================================================================
12483     AC_MSG_CHECKING([which beanshell to use])
12484     if test "$with_system_beanshell" = "yes"; then
12485         AC_MSG_RESULT([external])
12486         SYSTEM_BSH=TRUE
12487         if test -z $BSH_JAR; then
12488             BSH_JAR=/usr/share/java/bsh.jar
12489         fi
12490         if ! test -f $BSH_JAR; then
12491             AC_MSG_ERROR(bsh.jar not found.)
12492         fi
12493     else
12494         AC_MSG_RESULT([internal])
12495         SYSTEM_BSH=
12496         BUILD_TYPE="$BUILD_TYPE BSH"
12497     fi
12498 else
12499     AC_MSG_RESULT([no])
12500     ENABLE_SCRIPTING_BEANSHELL=
12501     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
12503 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
12504 AC_SUBST(SYSTEM_BSH)
12505 AC_SUBST(BSH_JAR)
12507 # scripting provider for JavaScript?
12508 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
12509 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
12510     AC_MSG_RESULT([yes])
12511     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
12513     dnl ===================================================================
12514     dnl Check for system rhino
12515     dnl ===================================================================
12516     AC_MSG_CHECKING([which rhino to use])
12517     if test "$with_system_rhino" = "yes"; then
12518         AC_MSG_RESULT([external])
12519         SYSTEM_RHINO=TRUE
12520         if test -z $RHINO_JAR; then
12521             RHINO_JAR=/usr/share/java/js.jar
12522         fi
12523         if ! test -f $RHINO_JAR; then
12524             AC_MSG_ERROR(js.jar not found.)
12525         fi
12526     else
12527         AC_MSG_RESULT([internal])
12528         SYSTEM_RHINO=
12529         BUILD_TYPE="$BUILD_TYPE RHINO"
12530         NEED_ANT=TRUE
12531     fi
12532 else
12533     AC_MSG_RESULT([no])
12534     ENABLE_SCRIPTING_JAVASCRIPT=
12535     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
12537 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
12538 AC_SUBST(SYSTEM_RHINO)
12539 AC_SUBST(RHINO_JAR)
12541 # This is only used in Qt5/KF5 checks to determine if /usr/lib64
12542 # paths should be added to library search path. So lets put all 64-bit
12543 # platforms there.
12544 supports_multilib=
12545 case "$host_cpu" in
12546 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el)
12547     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
12548         supports_multilib="yes"
12549     fi
12550     ;;
12552     ;;
12553 esac
12555 dnl ===================================================================
12556 dnl QT5 Integration
12557 dnl ===================================================================
12559 QT5_CFLAGS=""
12560 QT5_LIBS=""
12561 QMAKE5="qmake"
12562 MOC5="moc"
12563 QT5_GOBJECT_CFLAGS=""
12564 QT5_GOBJECT_LIBS=""
12565 QT5_HAVE_GOBJECT=""
12566 QT5_PLATFORMS_SRCDIR=""
12567 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12568         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
12569         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12570 then
12571     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
12572     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
12574     if test -n "$supports_multilib"; then
12575         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
12576     fi
12578     qt5_test_include="QtWidgets/qapplication.h"
12579     if test "$_os" = "Emscripten"; then
12580         qt5_test_library="libQt5Widgets.a"
12581     else
12582         qt5_test_library="libQt5Widgets.so"
12583     fi
12585     dnl Check for qmake5
12586     if test -n "$QT5DIR"; then
12587         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
12588     else
12589         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
12590     fi
12591     if test "$QMAKE5" = "no"; then
12592         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12593     else
12594         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
12595         if test -z "$qmake5_test_ver"; then
12596             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12597         fi
12598         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
12599         qt5_minimal_minor="6"
12600         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
12601             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
12602         else
12603             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
12604         fi
12605     fi
12607     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
12608     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
12609     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
12610     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
12612     AC_MSG_CHECKING([for Qt5 headers])
12613     qt5_incdir="no"
12614     for inc_dir in $qt5_incdirs; do
12615         if test -r "$inc_dir/$qt5_test_include"; then
12616             qt5_incdir="$inc_dir"
12617             break
12618         fi
12619     done
12620     AC_MSG_RESULT([$qt5_incdir])
12621     if test "x$qt5_incdir" = "xno"; then
12622         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12623     fi
12624     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
12625     AC_LANG_PUSH([C++])
12626     save_CPPFLAGS=$CPPFLAGS
12627     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
12628     AC_CHECK_HEADER(QtCore/qconfig.h, [],
12629         [AC_MSG_ERROR(qconfig.h header not found.)], [])
12630     CPPFLAGS=$save_CPPFLAGS
12631     AC_LANG_POP([C++])
12633     AC_MSG_CHECKING([for Qt5 libraries])
12634     qt5_libdir="no"
12635     for lib_dir in $qt5_libdirs; do
12636         if test -r "$lib_dir/$qt5_test_library"; then
12637             qt5_libdir="$lib_dir"
12638             break
12639         fi
12640     done
12641     AC_MSG_RESULT([$qt5_libdir])
12642     if test "x$qt5_libdir" = "xno"; then
12643         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12644     fi
12646     if test "$_os" = "Emscripten"; then
12647         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
12648             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
12649         fi
12650         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
12651             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
12652         fi
12653     fi
12655     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
12656     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12657     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
12658     if test "$_os" = "Emscripten"; then
12659         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
12660     fi
12662     if test "$USING_X11" = TRUE; then
12663         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
12664         PKG_CHECK_MODULES(QT5_XCB_ICCCM,[xcb-icccm],[
12665             QT5_HAVE_XCB_ICCCM=1
12666             AC_DEFINE(QT5_HAVE_XCB_ICCCM)
12667         ],[
12668             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)])
12669             add_warning "XCB ICCCM not found, which is needed for Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)"
12670         ])
12671         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
12672         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
12673         QT5_USING_X11=1
12674         AC_DEFINE(QT5_USING_X11)
12675     fi
12677     dnl Check for Meta Object Compiler
12679     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
12680     if test "$MOC5" = "no"; then
12681         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
12682 the root of your Qt installation by exporting QT5DIR before running "configure".])
12683     fi
12685     if test "$build_gstreamer_1_0" = "yes"; then
12686         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
12687                 QT5_HAVE_GOBJECT=1
12688                 AC_DEFINE(QT5_HAVE_GOBJECT)
12689             ],
12690             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
12691         )
12692     fi
12694 AC_SUBST(QT5_CFLAGS)
12695 AC_SUBST(QT5_LIBS)
12696 AC_SUBST(MOC5)
12697 AC_SUBST(QT5_GOBJECT_CFLAGS)
12698 AC_SUBST(QT5_GOBJECT_LIBS)
12699 AC_SUBST(QT5_HAVE_GOBJECT)
12700 AC_SUBST(QT5_PLATFORMS_SRCDIR)
12702 dnl ===================================================================
12703 dnl KF5 Integration
12704 dnl ===================================================================
12706 KF5_CFLAGS=""
12707 KF5_LIBS=""
12708 KF5_CONFIG="kf5-config"
12709 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12710         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12711 then
12712     if test "$OS" = "HAIKU"; then
12713         haiku_arch="`echo $RTL_ARCH | tr X x`"
12714         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
12715         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
12716     fi
12718     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
12719     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
12720     if test -n "$supports_multilib"; then
12721         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
12722     fi
12724     kf5_test_include="KF5/kcoreaddons_version.h"
12725     kf5_test_library="libKF5CoreAddons.so"
12726     kf5_libdirs="$qt5_libdir $kf5_libdirs"
12728     dnl kf5 KDE4 support compatibility installed
12729     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
12730     if test "$KF5_CONFIG" != "no"; then
12731         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
12732         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
12733     fi
12735     dnl Check for KF5 headers
12736     AC_MSG_CHECKING([for KF5 headers])
12737     kf5_incdir="no"
12738     for kf5_check in $kf5_incdirs; do
12739         if test -r "$kf5_check/$kf5_test_include"; then
12740             kf5_incdir="$kf5_check/KF5"
12741             break
12742         fi
12743     done
12744     AC_MSG_RESULT([$kf5_incdir])
12745     if test "x$kf5_incdir" = "xno"; then
12746         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
12747     fi
12749     dnl Check for KF5 libraries
12750     AC_MSG_CHECKING([for KF5 libraries])
12751     kf5_libdir="no"
12752     for kf5_check in $kf5_libdirs; do
12753         if test -r "$kf5_check/$kf5_test_library"; then
12754             kf5_libdir="$kf5_check"
12755             break
12756         fi
12757     done
12759     AC_MSG_RESULT([$kf5_libdir])
12760     if test "x$kf5_libdir" = "xno"; then
12761         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
12762     fi
12764     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"
12765     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
12766     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12768     if test "$USING_X11" = TRUE; then
12769         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
12770     fi
12772     AC_LANG_PUSH([C++])
12773     save_CXXFLAGS=$CXXFLAGS
12774     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
12775     AC_MSG_CHECKING([whether KDE is >= 5.0])
12776        AC_RUN_IFELSE([AC_LANG_SOURCE([[
12777 #include <kcoreaddons_version.h>
12779 int main(int argc, char **argv) {
12780        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
12781        else return 1;
12783        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
12784     CXXFLAGS=$save_CXXFLAGS
12785     AC_LANG_POP([C++])
12787 AC_SUBST(KF5_CFLAGS)
12788 AC_SUBST(KF5_LIBS)
12790 dnl ===================================================================
12791 dnl Test whether to include Evolution 2 support
12792 dnl ===================================================================
12793 AC_MSG_CHECKING([whether to enable evolution 2 support])
12794 if test "$enable_evolution2" = "yes" -o "$enable_evolution2" = "TRUE"; then
12795     AC_MSG_RESULT([yes])
12796     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
12797     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12798     FilterLibs "${GOBJECT_LIBS}"
12799     GOBJECT_LIBS="${filteredlibs}"
12800     ENABLE_EVOAB2="TRUE"
12801 else
12802     ENABLE_EVOAB2=""
12803     AC_MSG_RESULT([no])
12805 AC_SUBST(ENABLE_EVOAB2)
12806 AC_SUBST(GOBJECT_CFLAGS)
12807 AC_SUBST(GOBJECT_LIBS)
12809 dnl ===================================================================
12810 dnl Test which themes to include
12811 dnl ===================================================================
12812 AC_MSG_CHECKING([which themes to include])
12813 # if none given use default subset of available themes
12814 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
12815     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"
12818 WITH_THEMES=""
12819 if test "x$with_theme" != "xno"; then
12820     for theme in $with_theme; do
12821         case $theme in
12822         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" ;;
12823         default) real_theme=colibre ;;
12824         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
12825         esac
12826         WITH_THEMES=`echo "$WITH_THEMES $real_theme"|tr '\ ' '\n'|sort|uniq|tr '\n' '\ '`
12827     done
12829 AC_MSG_RESULT([$WITH_THEMES])
12830 AC_SUBST([WITH_THEMES])
12831 # FIXME: remove this, and the convenience default->colibre remapping after a grace period
12832 for theme in $with_theme; do
12833     case $theme in
12834     default) AC_MSG_WARN([--with-theme=default is deprecated and will be removed, use --with-theme=colibre]) ;;
12835     *) ;;
12836     esac
12837 done
12839 dnl ===================================================================
12840 dnl Test whether to integrate helppacks into the product's installer
12841 dnl ===================================================================
12842 AC_MSG_CHECKING([for helppack integration])
12843 if test "$with_helppack_integration" = "no"; then
12844     AC_MSG_RESULT([no integration])
12845 else
12846     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
12847     AC_MSG_RESULT([integration])
12850 ###############################################################################
12851 # Extensions checking
12852 ###############################################################################
12853 AC_MSG_CHECKING([for extensions integration])
12854 if test "x$enable_extension_integration" != "xno"; then
12855     WITH_EXTENSION_INTEGRATION=TRUE
12856     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
12857     AC_MSG_RESULT([yes, use integration])
12858 else
12859     WITH_EXTENSION_INTEGRATION=
12860     AC_MSG_RESULT([no, do not integrate])
12862 AC_SUBST(WITH_EXTENSION_INTEGRATION)
12864 dnl Should any extra extensions be included?
12865 dnl There are standalone tests for each of these below.
12866 WITH_EXTRA_EXTENSIONS=
12867 AC_SUBST([WITH_EXTRA_EXTENSIONS])
12869 libo_CHECK_EXTENSION([ConvertTextToNumber],[CT2N],[ct2n],[ct2n],[])
12870 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
12871 if test "x$with_java" != "xno"; then
12872     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
12873     libo_CHECK_EXTENSION([LanguageTool],[LANGUAGETOOL],[languagetool],[languagetool],[])
12876 AC_MSG_CHECKING([whether to build opens___.ttf])
12877 if test "$enable_build_opensymbol" = "yes"; then
12878     AC_MSG_RESULT([yes])
12879     AC_PATH_PROG(FONTFORGE, fontforge)
12880     if test -z "$FONTFORGE"; then
12881         AC_MSG_ERROR([fontforge not installed])
12882     fi
12883 else
12884     AC_MSG_RESULT([no])
12885     OPENSYMBOL_TTF=f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140-opens___.ttf
12886     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
12888 AC_SUBST(OPENSYMBOL_TTF)
12889 AC_SUBST(FONTFORGE)
12891 dnl ===================================================================
12892 dnl Test whether to include fonts
12893 dnl ===================================================================
12894 AC_MSG_CHECKING([whether to include third-party fonts])
12895 if test "$with_fonts" != "no"; then
12896     AC_MSG_RESULT([yes])
12897     WITH_FONTS=TRUE
12898     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
12899     AC_DEFINE(HAVE_MORE_FONTS)
12900 else
12901     AC_MSG_RESULT([no])
12902     WITH_FONTS=
12903     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
12905 AC_SUBST(WITH_FONTS)
12908 dnl ===================================================================
12909 dnl Test whether to enable online update service
12910 dnl ===================================================================
12911 AC_MSG_CHECKING([whether to enable online update])
12912 ENABLE_ONLINE_UPDATE=
12913 ENABLE_ONLINE_UPDATE_MAR=
12914 UPDATE_CONFIG=
12915 if test "$enable_online_update" = ""; then
12916     if test "$_os" = "WINNT" -o "$_os" = "Darwin"; then
12917         AC_MSG_RESULT([yes])
12918         ENABLE_ONLINE_UPDATE="TRUE"
12919     else
12920         AC_MSG_RESULT([no])
12921     fi
12922 else
12923     if test "$enable_online_update" = "mar"; then
12924         AC_MSG_RESULT([yes - MAR-based online update])
12925         ENABLE_ONLINE_UPDATE_MAR="TRUE"
12926         if test "$with_update_config" = ""; then
12927             AC_MSG_ERROR([mar based online updater needs an update config specified with "with-update-config])
12928         fi
12929         UPDATE_CONFIG="$with_update_config"
12930         AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
12931     elif test "$enable_online_update" = "yes"; then
12932         AC_MSG_RESULT([yes])
12933         ENABLE_ONLINE_UPDATE="TRUE"
12934     else
12935         AC_MSG_RESULT([no])
12936     fi
12938 AC_SUBST(ENABLE_ONLINE_UPDATE)
12939 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
12940 AC_SUBST(UPDATE_CONFIG)
12942 dnl ===================================================================
12943 dnl Test whether we need bzip2
12944 dnl ===================================================================
12945 SYSTEM_BZIP2=
12946 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE"; then
12947     AC_MSG_CHECKING([whether to use system bzip2])
12948     if test "$with_system_bzip2" = yes; then
12949         SYSTEM_BZIP2=TRUE
12950         AC_MSG_RESULT([yes])
12951         PKG_CHECK_MODULES(BZIP2, bzip2)
12952         FilterLibs "${BZIP2_LIBS}"
12953         BZIP2_LIBS="${filteredlibs}"
12954     else
12955         AC_MSG_RESULT([no])
12956         BUILD_TYPE="$BUILD_TYPE BZIP2"
12957     fi
12959 AC_SUBST(SYSTEM_BZIP2)
12960 AC_SUBST(BZIP2_CFLAGS)
12961 AC_SUBST(BZIP2_LIBS)
12963 dnl ===================================================================
12964 dnl Test whether to enable extension update
12965 dnl ===================================================================
12966 AC_MSG_CHECKING([whether to enable extension update])
12967 ENABLE_EXTENSION_UPDATE=
12968 if test "x$enable_extension_update" = "xno"; then
12969     AC_MSG_RESULT([no])
12970 else
12971     AC_MSG_RESULT([yes])
12972     ENABLE_EXTENSION_UPDATE="TRUE"
12973     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
12974     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
12976 AC_SUBST(ENABLE_EXTENSION_UPDATE)
12979 dnl ===================================================================
12980 dnl Test whether to create MSI with LIMITUI=1 (silent install)
12981 dnl ===================================================================
12982 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
12983 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
12984     AC_MSG_RESULT([no])
12985     ENABLE_SILENT_MSI=
12986 else
12987     AC_MSG_RESULT([yes])
12988     ENABLE_SILENT_MSI=TRUE
12989     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
12991 AC_SUBST(ENABLE_SILENT_MSI)
12993 AC_MSG_CHECKING([whether and how to use Xinerama])
12994 if test "$_os" = "Linux" -o "$_os" = "FreeBSD"; then
12995     if test "$x_libraries" = "default_x_libraries"; then
12996         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
12997         if test "x$XINERAMALIB" = x; then
12998            XINERAMALIB="/usr/lib"
12999         fi
13000     else
13001         XINERAMALIB="$x_libraries"
13002     fi
13003     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13004         # we have both versions, let the user decide but use the dynamic one
13005         # per default
13006         USE_XINERAMA=TRUE
13007         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13008             XINERAMA_LINK=dynamic
13009         else
13010             XINERAMA_LINK=static
13011         fi
13012     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13013         # we have only the dynamic version
13014         USE_XINERAMA=TRUE
13015         XINERAMA_LINK=dynamic
13016     elif test -e "$XINERAMALIB/libXinerama.a"; then
13017         # static version
13018         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13019             USE_XINERAMA=TRUE
13020             XINERAMA_LINK=static
13021         else
13022             USE_XINERAMA=
13023             XINERAMA_LINK=none
13024         fi
13025     else
13026         # no Xinerama
13027         USE_XINERAMA=
13028         XINERAMA_LINK=none
13029     fi
13030     if test "$USE_XINERAMA" = "TRUE"; then
13031         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13032         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13033             [AC_MSG_ERROR(Xinerama header not found.)], [])
13034         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13035         if test "x$XEXTLIB" = x; then
13036            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13037         fi
13038         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13039         if test "$_os" = "FreeBSD"; then
13040             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13041         fi
13042         if test "$_os" = "Linux"; then
13043             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13044         fi
13045         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13046             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13047     else
13048         AC_MSG_RESULT([no, libXinerama not found or wrong architecture.])
13049     fi
13050 else
13051     USE_XINERAMA=
13052     XINERAMA_LINK=none
13053     AC_MSG_RESULT([no])
13055 AC_SUBST(USE_XINERAMA)
13056 AC_SUBST(XINERAMA_LINK)
13058 dnl ===================================================================
13059 dnl Test whether to build cairo or rely on the system version
13060 dnl ===================================================================
13062 if test "$USING_X11" = TRUE; then
13063     # Used in vcl/Library_vclplug_gen.mk
13064     test_cairo=yes
13067 if test "$test_cairo" = "yes"; then
13068     AC_MSG_CHECKING([whether to use the system cairo])
13070     : ${with_system_cairo:=$with_system_libs}
13071     if test "$with_system_cairo" = "yes"; then
13072         SYSTEM_CAIRO=TRUE
13073         AC_MSG_RESULT([yes])
13075         PKG_CHECK_MODULES( CAIRO, cairo >= 1.8.0 )
13076         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13077         FilterLibs "${CAIRO_LIBS}"
13078         CAIRO_LIBS="${filteredlibs}"
13080         if test "$test_xrender" = "yes"; then
13081             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13082             AC_LANG_PUSH([C])
13083             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13084 #ifdef PictStandardA8
13085 #else
13086       return fail;
13087 #endif
13088 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13090             AC_LANG_POP([C])
13091         fi
13092     else
13093         SYSTEM_CAIRO=
13094         AC_MSG_RESULT([no])
13096         BUILD_TYPE="$BUILD_TYPE CAIRO"
13097     fi
13100 AC_SUBST(SYSTEM_CAIRO)
13101 AC_SUBST(CAIRO_CFLAGS)
13102 AC_SUBST(CAIRO_LIBS)
13104 dnl ===================================================================
13105 dnl Test whether to use avahi
13106 dnl ===================================================================
13107 if test "$_os" = "WINNT"; then
13108     # Windows uses bundled mDNSResponder
13109     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13110 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13111     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13112                       [ENABLE_AVAHI="TRUE"])
13113     AC_DEFINE(HAVE_FEATURE_AVAHI)
13114     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13115     FilterLibs "${AVAHI_LIBS}"
13116     AVAHI_LIBS="${filteredlibs}"
13119 AC_SUBST(ENABLE_AVAHI)
13120 AC_SUBST(AVAHI_CFLAGS)
13121 AC_SUBST(AVAHI_LIBS)
13123 dnl ===================================================================
13124 dnl Test whether to use liblangtag
13125 dnl ===================================================================
13126 SYSTEM_LIBLANGTAG=
13127 AC_MSG_CHECKING([whether to use system liblangtag])
13128 if test "$with_system_liblangtag" = yes; then
13129     SYSTEM_LIBLANGTAG=TRUE
13130     AC_MSG_RESULT([yes])
13131     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
13132     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
13133     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
13134     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13135     FilterLibs "${LIBLANGTAG_LIBS}"
13136     LIBLANGTAG_LIBS="${filteredlibs}"
13137 else
13138     SYSTEM_LIBLANGTAG=
13139     AC_MSG_RESULT([no])
13140     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
13141     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
13142     if test "$COM" = "MSC"; then
13143         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
13144     else
13145         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
13146     fi
13148 AC_SUBST(SYSTEM_LIBLANGTAG)
13149 AC_SUBST(LIBLANGTAG_CFLAGS)
13150 AC_SUBST(LIBLANGTAG_LIBS)
13152 dnl ===================================================================
13153 dnl Test whether to build libpng or rely on the system version
13154 dnl ===================================================================
13156 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng],["-I${WORKDIR}/UnpackedTarball/libpng"],["-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"])
13158 dnl ===================================================================
13159 dnl Check for runtime JVM search path
13160 dnl ===================================================================
13161 if test "$ENABLE_JAVA" != ""; then
13162     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
13163     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
13164         AC_MSG_RESULT([yes])
13165         if ! test -d "$with_jvm_path"; then
13166             AC_MSG_ERROR(["$with_jvm_path" not a directory])
13167         fi
13168         if ! test -d "$with_jvm_path"jvm; then
13169             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
13170         fi
13171         JVM_ONE_PATH_CHECK="$with_jvm_path"
13172         AC_SUBST(JVM_ONE_PATH_CHECK)
13173     else
13174         AC_MSG_RESULT([no])
13175     fi
13178 dnl ===================================================================
13179 dnl Test for the presence of Ant and that it works
13180 dnl ===================================================================
13182 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
13183     ANT_HOME=; export ANT_HOME
13184     WITH_ANT_HOME=; export WITH_ANT_HOME
13185     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
13186         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
13187             if test "$_os" = "WINNT"; then
13188                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
13189             else
13190                 with_ant_home="$LODE_HOME/opt/ant"
13191             fi
13192         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
13193             with_ant_home="$LODE_HOME/opt/ant"
13194         fi
13195     fi
13196     if test -z "$with_ant_home"; then
13197         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
13198     else
13199         if test "$_os" = "WINNT"; then
13200             # AC_PATH_PROGS needs unix path
13201             with_ant_home=`cygpath -u "$with_ant_home"`
13202         fi
13203         AbsolutePath "$with_ant_home"
13204         with_ant_home=$absolute_path
13205         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
13206         WITH_ANT_HOME=$with_ant_home
13207         ANT_HOME=$with_ant_home
13208     fi
13210     if test -z "$ANT"; then
13211         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
13212     else
13213         # resolve relative or absolute symlink
13214         while test -h "$ANT"; do
13215             a_cwd=`pwd`
13216             a_basename=`basename "$ANT"`
13217             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
13218             cd "`dirname "$ANT"`"
13219             cd "`dirname "$a_script"`"
13220             ANT="`pwd`"/"`basename "$a_script"`"
13221             cd "$a_cwd"
13222         done
13224         AC_MSG_CHECKING([if $ANT works])
13225         mkdir -p conftest.dir
13226         a_cwd=$(pwd)
13227         cd conftest.dir
13228         cat > conftest.java << EOF
13229         public class conftest {
13230             int testmethod(int a, int b) {
13231                     return a + b;
13232             }
13233         }
13236         cat > conftest.xml << EOF
13237         <project name="conftest" default="conftest">
13238         <target name="conftest">
13239             <javac srcdir="." includes="conftest.java">
13240             </javac>
13241         </target>
13242         </project>
13245         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
13246         if test $? = 0 -a -f ./conftest.class; then
13247             AC_MSG_RESULT([Ant works])
13248             if test -z "$WITH_ANT_HOME"; then
13249                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
13250                 if test -z "$ANT_HOME"; then
13251                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
13252                 fi
13253             else
13254                 ANT_HOME="$WITH_ANT_HOME"
13255             fi
13256         else
13257             echo "configure: Ant test failed" >&5
13258             cat conftest.java >&5
13259             cat conftest.xml >&5
13260             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
13261         fi
13262         cd "$a_cwd"
13263         rm -fr conftest.dir
13264     fi
13265     if test -z "$ANT_HOME"; then
13266         ANT_HOME="NO_ANT_HOME"
13267     else
13268         PathFormat "$ANT_HOME"
13269         ANT_HOME="$formatted_path"
13270         PathFormat "$ANT"
13271         ANT="$formatted_path"
13272     fi
13274     dnl Checking for ant.jar
13275     if test "$ANT_HOME" != "NO_ANT_HOME"; then
13276         AC_MSG_CHECKING([Ant lib directory])
13277         if test -f $ANT_HOME/lib/ant.jar; then
13278             ANT_LIB="$ANT_HOME/lib"
13279         else
13280             if test -f $ANT_HOME/ant.jar; then
13281                 ANT_LIB="$ANT_HOME"
13282             else
13283                 if test -f /usr/share/java/ant.jar; then
13284                     ANT_LIB=/usr/share/java
13285                 else
13286                     if test -f /usr/share/ant-core/lib/ant.jar; then
13287                         ANT_LIB=/usr/share/ant-core/lib
13288                     else
13289                         if test -f $ANT_HOME/lib/ant/ant.jar; then
13290                             ANT_LIB="$ANT_HOME/lib/ant"
13291                         else
13292                             if test -f /usr/share/lib/ant/ant.jar; then
13293                                 ANT_LIB=/usr/share/lib/ant
13294                             else
13295                                 AC_MSG_ERROR([Ant libraries not found!])
13296                             fi
13297                         fi
13298                     fi
13299                 fi
13300             fi
13301         fi
13302         PathFormat "$ANT_LIB"
13303         ANT_LIB="$formatted_path"
13304         AC_MSG_RESULT([Ant lib directory found.])
13305     fi
13307     ant_minver=1.6.0
13308     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
13310     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
13311     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
13312     ant_version_major=`echo $ant_version | cut -d. -f1`
13313     ant_version_minor=`echo $ant_version | cut -d. -f2`
13314     echo "configure: ant_version $ant_version " >&5
13315     echo "configure: ant_version_major $ant_version_major " >&5
13316     echo "configure: ant_version_minor $ant_version_minor " >&5
13317     if test "$ant_version_major" -ge "2"; then
13318         AC_MSG_RESULT([yes, $ant_version])
13319     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
13320         AC_MSG_RESULT([yes, $ant_version])
13321     else
13322         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
13323     fi
13325     rm -f conftest* core core.* *.core
13327 AC_SUBST(ANT)
13328 AC_SUBST(ANT_HOME)
13329 AC_SUBST(ANT_LIB)
13331 OOO_JUNIT_JAR=
13332 HAMCREST_JAR=
13333 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
13334     AC_MSG_CHECKING([for JUnit 4])
13335     if test "$with_junit" = "yes"; then
13336         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
13337             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
13338         elif test -e /usr/share/java/junit4.jar; then
13339             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
13340         else
13341            if test -e /usr/share/lib/java/junit.jar; then
13342               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
13343            else
13344               OOO_JUNIT_JAR=/usr/share/java/junit.jar
13345            fi
13346         fi
13347     else
13348         OOO_JUNIT_JAR=$with_junit
13349     fi
13350     if test "$_os" = "WINNT"; then
13351         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
13352     fi
13353     printf 'import org.junit.Before;' > conftest.java
13354     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13355         AC_MSG_RESULT([$OOO_JUNIT_JAR])
13356     else
13357         AC_MSG_ERROR(
13358 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
13359  specify its pathname via --with-junit=..., or disable it via --without-junit])
13360     fi
13361     rm -f conftest.class conftest.java
13362     if test $OOO_JUNIT_JAR != ""; then
13363         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
13364     fi
13366     AC_MSG_CHECKING([for included Hamcrest])
13367     printf 'import org.hamcrest.BaseDescription;' > conftest.java
13368     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13369         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
13370     else
13371         AC_MSG_RESULT([Not included])
13372         AC_MSG_CHECKING([for standalone hamcrest jar.])
13373         if test "$with_hamcrest" = "yes"; then
13374             if test -e /usr/share/lib/java/hamcrest.jar; then
13375                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
13376             elif test -e /usr/share/java/hamcrest/core.jar; then
13377                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
13378             else
13379                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
13380             fi
13381         else
13382             HAMCREST_JAR=$with_hamcrest
13383         fi
13384         if test "$_os" = "WINNT"; then
13385             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
13386         fi
13387         if "$JAVACOMPILER" -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
13388             AC_MSG_RESULT([$HAMCREST_JAR])
13389         else
13390             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),
13391                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
13392         fi
13393     fi
13394     rm -f conftest.class conftest.java
13396 AC_SUBST(OOO_JUNIT_JAR)
13397 AC_SUBST(HAMCREST_JAR)
13400 AC_SUBST(SCPDEFS)
13403 # check for wget and curl
13405 WGET=
13406 CURL=
13408 if test "$enable_fetch_external" != "no"; then
13410 CURL=`which curl 2>/dev/null`
13412 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
13413     # wget new enough?
13414     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
13415     if test $? -eq 0; then
13416         WGET=$i
13417         break
13418     fi
13419 done
13421 if test -z "$WGET" -a -z "$CURL"; then
13422     AC_MSG_ERROR([neither wget nor curl found!])
13427 AC_SUBST(WGET)
13428 AC_SUBST(CURL)
13431 # check for sha256sum
13433 SHA256SUM=
13435 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
13436     eval "$i -a 256 --version" > /dev/null 2>&1
13437     ret=$?
13438     if test $ret -eq 0; then
13439         SHA256SUM="$i -a 256"
13440         break
13441     fi
13442 done
13444 if test -z "$SHA256SUM"; then
13445     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
13446         eval "$i --version" > /dev/null 2>&1
13447         ret=$?
13448         if test $ret -eq 0; then
13449             SHA256SUM=$i
13450             break
13451         fi
13452     done
13455 if test -z "$SHA256SUM"; then
13456     AC_MSG_ERROR([no sha256sum found!])
13459 AC_SUBST(SHA256SUM)
13461 dnl ===================================================================
13462 dnl Dealing with l10n options
13463 dnl ===================================================================
13464 AC_MSG_CHECKING([which languages to be built])
13465 # get list of all languages
13466 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
13467 # the sed command does the following:
13468 #   + if a line ends with a backslash, append the next line to it
13469 #   + adds " on the beginning of the value (after =)
13470 #   + adds " at the end of the value
13471 #   + removes en-US; we want to put it on the beginning
13472 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
13473 [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)]
13474 ALL_LANGS="en-US $completelangiso"
13475 # check the configured localizations
13476 WITH_LANG="$with_lang"
13478 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
13479 # (Norwegian is "nb" and "nn".)
13480 if test "$WITH_LANG" = "no"; then
13481     WITH_LANG=
13484 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
13485     AC_MSG_RESULT([en-US])
13486 else
13487     AC_MSG_RESULT([$WITH_LANG])
13488     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
13489     if test -z "$MSGFMT"; then
13490         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
13491             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
13492         elif test -x "/opt/lo/bin/msgfmt"; then
13493             MSGFMT="/opt/lo/bin/msgfmt"
13494         else
13495             AC_CHECK_PROGS(MSGFMT, [msgfmt])
13496             if test -z "$MSGFMT"; then
13497                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
13498             fi
13499         fi
13500     fi
13501     if test -z "$MSGUNIQ"; then
13502         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
13503             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
13504         elif test -x "/opt/lo/bin/msguniq"; then
13505             MSGUNIQ="/opt/lo/bin/msguniq"
13506         else
13507             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
13508             if test -z "$MSGUNIQ"; then
13509                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
13510             fi
13511         fi
13512     fi
13514 AC_SUBST(MSGFMT)
13515 AC_SUBST(MSGUNIQ)
13516 # check that the list is valid
13517 for lang in $WITH_LANG; do
13518     test "$lang" = "ALL" && continue
13519     # need to check for the exact string, so add space before and after the list of all languages
13520     for vl in $ALL_LANGS; do
13521         if test "$vl" = "$lang"; then
13522            break
13523         fi
13524     done
13525     if test "$vl" != "$lang"; then
13526         # if you're reading this - you prolly quoted your languages remove the quotes ...
13527         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
13528     fi
13529 done
13530 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
13531     echo $WITH_LANG | grep -q en-US
13532     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
13534 # list with substituted ALL
13535 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
13536 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
13537 test "$WITH_LANG" = "en-US" && WITH_LANG=
13538 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
13539     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
13540     ALL_LANGS=`echo $ALL_LANGS qtz`
13542 AC_SUBST(ALL_LANGS)
13543 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
13544 AC_SUBST(WITH_LANG)
13545 AC_SUBST(WITH_LANG_LIST)
13546 AC_SUBST(GIT_NEEDED_SUBMODULES)
13548 WITH_POOR_HELP_LOCALIZATIONS=
13549 if test -d "$SRC_ROOT/translations/source"; then
13550     for l in `ls -1 $SRC_ROOT/translations/source`; do
13551         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
13552             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
13553         fi
13554     done
13556 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
13558 if test -n "$with_locales"; then
13559     WITH_LOCALES="$with_locales"
13561     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
13562     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
13563     # config_host/config_locales.h.in
13564     for locale in $WITH_LOCALES; do
13565         lang=${locale%_*}
13567         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
13569         case $lang in
13570         hi|mr*ne)
13571             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
13572             ;;
13573         bg|ru)
13574             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
13575             ;;
13576         esac
13577     done
13578 else
13579     AC_DEFINE(WITH_LOCALE_ALL)
13581 AC_SUBST(WITH_LOCALES)
13583 dnl git submodule update --reference
13584 dnl ===================================================================
13585 if test -n "${GIT_REFERENCE_SRC}"; then
13586     for repo in ${GIT_NEEDED_SUBMODULES}; do
13587         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
13588             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
13589         fi
13590     done
13592 AC_SUBST(GIT_REFERENCE_SRC)
13594 dnl git submodules linked dirs
13595 dnl ===================================================================
13596 if test -n "${GIT_LINK_SRC}"; then
13597     for repo in ${GIT_NEEDED_SUBMODULES}; do
13598         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
13599             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
13600         fi
13601     done
13603 AC_SUBST(GIT_LINK_SRC)
13605 dnl branding
13606 dnl ===================================================================
13607 AC_MSG_CHECKING([for alternative branding images directory])
13608 # initialize mapped arrays
13609 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
13610 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
13612 if test -z "$with_branding" -o "$with_branding" = "no"; then
13613     AC_MSG_RESULT([none])
13614     DEFAULT_BRAND_IMAGES="$brand_files"
13615 else
13616     if ! test -d $with_branding ; then
13617         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
13618     else
13619         AC_MSG_RESULT([$with_branding])
13620         CUSTOM_BRAND_DIR="$with_branding"
13621         for lfile in $brand_files
13622         do
13623             if ! test -f $with_branding/$lfile ; then
13624                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
13625                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
13626             else
13627                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
13628             fi
13629         done
13630         check_for_progress="yes"
13631     fi
13633 AC_SUBST([BRAND_INTRO_IMAGES])
13634 AC_SUBST([CUSTOM_BRAND_DIR])
13635 AC_SUBST([CUSTOM_BRAND_IMAGES])
13636 AC_SUBST([DEFAULT_BRAND_IMAGES])
13639 AC_MSG_CHECKING([for 'intro' progress settings])
13640 PROGRESSBARCOLOR=
13641 PROGRESSSIZE=
13642 PROGRESSPOSITION=
13643 PROGRESSFRAMECOLOR=
13644 PROGRESSTEXTCOLOR=
13645 PROGRESSTEXTBASELINE=
13647 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
13648     source "$with_branding/progress.conf"
13649     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
13650 else
13651     AC_MSG_RESULT([none])
13654 AC_SUBST(PROGRESSBARCOLOR)
13655 AC_SUBST(PROGRESSSIZE)
13656 AC_SUBST(PROGRESSPOSITION)
13657 AC_SUBST(PROGRESSFRAMECOLOR)
13658 AC_SUBST(PROGRESSTEXTCOLOR)
13659 AC_SUBST(PROGRESSTEXTBASELINE)
13662 dnl ===================================================================
13663 dnl Custom build version
13664 dnl ===================================================================
13665 AC_MSG_CHECKING([for extra build ID])
13666 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
13667     EXTRA_BUILDID="$with_extra_buildid"
13669 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
13670 if test -n "$EXTRA_BUILDID" ; then
13671     AC_MSG_RESULT([$EXTRA_BUILDID])
13672 else
13673     AC_MSG_RESULT([not set])
13675 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
13677 OOO_VENDOR=
13678 AC_MSG_CHECKING([for vendor])
13679 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
13680     OOO_VENDOR="$USERNAME"
13682     if test -z "$OOO_VENDOR"; then
13683         OOO_VENDOR="$USER"
13684     fi
13686     if test -z "$OOO_VENDOR"; then
13687         OOO_VENDOR="`id -u -n`"
13688     fi
13690     AC_MSG_RESULT([not set, using $OOO_VENDOR])
13691 else
13692     OOO_VENDOR="$with_vendor"
13693     AC_MSG_RESULT([$OOO_VENDOR])
13695 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
13696 AC_SUBST(OOO_VENDOR)
13698 if test "$_os" = "Android" ; then
13699     ANDROID_PACKAGE_NAME=
13700     AC_MSG_CHECKING([for Android package name])
13701     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
13702         if test -n "$ENABLE_DEBUG"; then
13703             # Default to the package name that makes ndk-gdb happy.
13704             ANDROID_PACKAGE_NAME="org.libreoffice"
13705         else
13706             ANDROID_PACKAGE_NAME="org.example.libreoffice"
13707         fi
13709         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
13710     else
13711         ANDROID_PACKAGE_NAME="$with_android_package_name"
13712         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
13713     fi
13714     AC_SUBST(ANDROID_PACKAGE_NAME)
13717 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
13718 if test "$with_compat_oowrappers" = "yes"; then
13719     WITH_COMPAT_OOWRAPPERS=TRUE
13720     AC_MSG_RESULT(yes)
13721 else
13722     WITH_COMPAT_OOWRAPPERS=
13723     AC_MSG_RESULT(no)
13725 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
13727 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{print tolower($0)}'`
13728 AC_MSG_CHECKING([for install dirname])
13729 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
13730     INSTALLDIRNAME="$with_install_dirname"
13732 AC_MSG_RESULT([$INSTALLDIRNAME])
13733 AC_SUBST(INSTALLDIRNAME)
13735 AC_MSG_CHECKING([for prefix])
13736 test "x$prefix" = xNONE && prefix=$ac_default_prefix
13737 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
13738 PREFIXDIR="$prefix"
13739 AC_MSG_RESULT([$PREFIXDIR])
13740 AC_SUBST(PREFIXDIR)
13742 LIBDIR=[$(eval echo $(eval echo $libdir))]
13743 AC_SUBST(LIBDIR)
13745 DATADIR=[$(eval echo $(eval echo $datadir))]
13746 AC_SUBST(DATADIR)
13748 MANDIR=[$(eval echo $(eval echo $mandir))]
13749 AC_SUBST(MANDIR)
13751 DOCDIR=[$(eval echo $(eval echo $docdir))]
13752 AC_SUBST(DOCDIR)
13754 BINDIR=[$(eval echo $(eval echo $bindir))]
13755 AC_SUBST(BINDIR)
13757 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
13758 AC_SUBST(INSTALLDIR)
13760 TESTINSTALLDIR="${BUILDDIR}/test-install"
13761 AC_SUBST(TESTINSTALLDIR)
13764 # ===================================================================
13765 # OAuth2 id and secrets
13766 # ===================================================================
13768 AC_MSG_CHECKING([for Google Drive client id and secret])
13769 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
13770     AC_MSG_RESULT([not set])
13771     GDRIVE_CLIENT_ID="\"\""
13772     GDRIVE_CLIENT_SECRET="\"\""
13773 else
13774     AC_MSG_RESULT([set])
13775     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
13776     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
13778 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
13779 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
13781 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
13782 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
13783     AC_MSG_RESULT([not set])
13784     ALFRESCO_CLOUD_CLIENT_ID="\"\""
13785     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
13786 else
13787     AC_MSG_RESULT([set])
13788     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
13789     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
13791 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
13792 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
13794 AC_MSG_CHECKING([for OneDrive client id and secret])
13795 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
13796     AC_MSG_RESULT([not set])
13797     ONEDRIVE_CLIENT_ID="\"\""
13798     ONEDRIVE_CLIENT_SECRET="\"\""
13799 else
13800     AC_MSG_RESULT([set])
13801     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
13802     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
13804 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
13805 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
13808 dnl ===================================================================
13809 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
13810 dnl --enable-dependency-tracking configure option
13811 dnl ===================================================================
13812 AC_MSG_CHECKING([whether to enable dependency tracking])
13813 if test "$enable_dependency_tracking" = "no"; then
13814     nodep=TRUE
13815     AC_MSG_RESULT([no])
13816 else
13817     AC_MSG_RESULT([yes])
13819 AC_SUBST(nodep)
13821 dnl ===================================================================
13822 dnl Number of CPUs to use during the build
13823 dnl ===================================================================
13824 AC_MSG_CHECKING([for number of processors to use])
13825 # plain --with-parallelism is just the default
13826 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
13827     if test "$with_parallelism" = "no"; then
13828         PARALLELISM=0
13829     else
13830         PARALLELISM=$with_parallelism
13831     fi
13832 else
13833     if test "$enable_icecream" = "yes"; then
13834         PARALLELISM="40"
13835     else
13836         case `uname -s` in
13838         Darwin|FreeBSD|NetBSD|OpenBSD)
13839             PARALLELISM=`sysctl -n hw.ncpu`
13840             ;;
13842         Linux)
13843             PARALLELISM=`getconf _NPROCESSORS_ONLN`
13844         ;;
13845         # what else than above does profit here *and* has /proc?
13846         *)
13847             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
13848             ;;
13849         esac
13851         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
13852         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
13853     fi
13856 if test "$no_parallelism_make" = "YES" && test $PARALLELISM -gt 1; then
13857     if test -z "$with_parallelism"; then
13858             AC_MSG_WARN([gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this.])
13859             add_warning "gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this."
13860             PARALLELISM="1"
13861     else
13862         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."
13863     fi
13866 if test $PARALLELISM -eq 0; then
13867     AC_MSG_RESULT([explicit make -j option needed])
13868 else
13869     AC_MSG_RESULT([$PARALLELISM])
13871 AC_SUBST(PARALLELISM)
13873 IWYU_PATH="$with_iwyu"
13874 AC_SUBST(IWYU_PATH)
13875 if test ! -z "$IWYU_PATH"; then
13876     if test ! -f "$IWYU_PATH"; then
13877         AC_MSG_ERROR([cannot find include-what-you-use binary specified by --with-iwyu])
13878     fi
13882 # Set up ILIB for MSVC build
13884 ILIB1=
13885 if test "$build_os" = "cygwin"; then
13886     ILIB="."
13887     if test -n "$JAVA_HOME"; then
13888         ILIB="$ILIB;$JAVA_HOME/lib"
13889     fi
13890     ILIB1=-link
13891     ILIB="$ILIB;$COMPATH/lib/$WIN_HOST_ARCH"
13892     ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/$WIN_HOST_ARCH"
13893     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
13894     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
13895     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
13896         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
13897         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
13898     fi
13899     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
13900     ucrtlibpath_formatted=$formatted_path
13901     ILIB="$ILIB;$ucrtlibpath_formatted"
13902     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
13903     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
13904         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/lib"
13905     else
13906         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
13907     fi
13909     if test "$cross_compiling" != "yes"; then
13910         ILIB_FOR_BUILD="$ILIB"
13911     fi
13913 AC_SUBST(ILIB)
13914 AC_SUBST(ILIB_FOR_BUILD)
13916 # ===================================================================
13917 # Creating bigger shared library to link against
13918 # ===================================================================
13919 AC_MSG_CHECKING([whether to create huge library])
13920 MERGELIBS=
13922 if test $_os = iOS -o $_os = Android; then
13923     # Never any point in mergelibs for these as we build just static
13924     # libraries anyway...
13925     enable_mergelibs=no
13928 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
13929     if test $_os != Linux -a $_os != WINNT; then
13930         add_warning "--enable-mergelibs is not tested for this platform"
13931     fi
13932     MERGELIBS="TRUE"
13933     AC_MSG_RESULT([yes])
13934     AC_DEFINE(ENABLE_MERGELIBS)
13935 else
13936     AC_MSG_RESULT([no])
13938 AC_SUBST([MERGELIBS])
13940 dnl ===================================================================
13941 dnl icerun is a wrapper that stops us spawning tens of processes
13942 dnl locally - for tools that can't be executed on the compile cluster
13943 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
13944 dnl ===================================================================
13945 AC_MSG_CHECKING([whether to use icerun wrapper])
13946 ICECREAM_RUN=
13947 if test "$enable_icecream" = "yes" && which icerun >/dev/null 2>&1 ; then
13948     ICECREAM_RUN=icerun
13949     AC_MSG_RESULT([yes])
13950 else
13951     AC_MSG_RESULT([no])
13953 AC_SUBST(ICECREAM_RUN)
13955 dnl ===================================================================
13956 dnl Setup the ICECC_VERSION for the build the same way it was set for
13957 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
13958 dnl ===================================================================
13959 x_ICECC_VERSION=[\#]
13960 if test -n "$ICECC_VERSION" ; then
13961     x_ICECC_VERSION=
13963 AC_SUBST(x_ICECC_VERSION)
13964 AC_SUBST(ICECC_VERSION)
13966 dnl ===================================================================
13968 AC_MSG_CHECKING([MPL subset])
13969 MPL_SUBSET=
13971 if test "$enable_mpl_subset" = "yes"; then
13972     warn_report=false
13973     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
13974         warn_report=true
13975     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
13976         warn_report=true
13977     fi
13978     if test "$warn_report" = "true"; then
13979         AC_MSG_ERROR([need to --disable-report-builder - extended database report builder.])
13980     fi
13981     if test "x$enable_postgresql_sdbc" != "xno"; then
13982         AC_MSG_ERROR([need to --disable-postgresql-sdbc - the PostgreSQL database backend.])
13983     fi
13984     if test "$enable_lotuswordpro" = "yes"; then
13985         AC_MSG_ERROR([need to --disable-lotuswordpro - a Lotus Word Pro file format import filter.])
13986     fi
13987     if test "$WITH_WEBDAV" = "neon"; then
13988         AC_MSG_ERROR([need --with-webdav=serf or --without-webdav - webdav support.])
13989     fi
13990     if test -n "$ENABLE_POPPLER"; then
13991         if test "x$SYSTEM_POPPLER" = "x"; then
13992             AC_MSG_ERROR([need to disable PDF import via poppler or use system library])
13993         fi
13994     fi
13995     # cf. m4/libo_check_extension.m4
13996     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
13997         AC_MSG_ERROR([need to disable extra extensions '$WITH_EXTRA_EXTENSIONS'])
13998     fi
13999     for theme in $WITH_THEMES; do
14000         case $theme in
14001         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
14002             AC_MSG_ERROR([need to disable icon themes from '$WITH_THEMES': $theme present, use --with-theme=colibre]) ;;
14003         *) : ;;
14004         esac
14005     done
14007     ENABLE_OPENGL_TRANSITIONS=
14009     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
14010         AC_MSG_ERROR([need to --disable-lpsolve - calc linear programming solver.])
14011     fi
14013     MPL_SUBSET="TRUE"
14014     AC_DEFINE(MPL_HAVE_SUBSET)
14015     AC_MSG_RESULT([only])
14016 else
14017     AC_MSG_RESULT([no restrictions])
14019 AC_SUBST(MPL_SUBSET)
14021 dnl ===================================================================
14023 AC_MSG_CHECKING([formula logger])
14024 ENABLE_FORMULA_LOGGER=
14026 if test "x$enable_formula_logger" = "xyes"; then
14027     AC_MSG_RESULT([yes])
14028     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14029     ENABLE_FORMULA_LOGGER=TRUE
14030 elif test -n "$ENABLE_DBGUTIL" ; then
14031     AC_MSG_RESULT([yes])
14032     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14033     ENABLE_FORMULA_LOGGER=TRUE
14034 else
14035     AC_MSG_RESULT([no])
14038 AC_SUBST(ENABLE_FORMULA_LOGGER)
14040 dnl ===================================================================
14041 dnl Checking for active Antivirus software.
14042 dnl ===================================================================
14044 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
14045     AC_MSG_CHECKING([for active Antivirus software])
14046     ANTIVIRUS_LIST=`cscript.exe //Nologo $SRC_ROOT/antivirusDetection.vbs`
14047     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
14048         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
14049             AC_MSG_RESULT([found])
14050             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
14051             echo $EICAR_STRING > $SRC_ROOT/eicar
14052             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
14053             rm $SRC_ROOT/eicar
14054             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14055                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14056             fi
14057             echo $EICAR_STRING > $BUILDDIR/eicar
14058             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
14059             rm $BUILDDIR/eicar
14060             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14061                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14062             fi
14063             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"
14064         else
14065             AC_MSG_RESULT([not found])
14066         fi
14067     else
14068         AC_MSG_RESULT([n/a])
14069     fi
14072 dnl ===================================================================
14073 dnl Setting up the environment.
14074 dnl ===================================================================
14075 AC_MSG_NOTICE([setting up the build environment variables...])
14077 AC_SUBST(COMPATH)
14079 if test "$build_os" = "cygwin"; then
14080     if test -d "$COMPATH/atlmfc/lib/spectre"; then
14081         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
14082         ATL_INCLUDE="$COMPATH/atlmfc/include"
14083     elif test -d "$COMPATH/atlmfc/lib"; then
14084         ATL_LIB="$COMPATH/atlmfc/lib"
14085         ATL_INCLUDE="$COMPATH/atlmfc/include"
14086     else
14087         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
14088         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
14089     fi
14090     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
14091     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
14092     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
14094     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
14095     PathFormat "/usr/bin/find.exe"
14096     FIND="$formatted_path"
14097     PathFormat "/usr/bin/sort.exe"
14098     SORT="$formatted_path"
14099     PathFormat "/usr/bin/grep.exe"
14100     WIN_GREP="$formatted_path"
14101     PathFormat "/usr/bin/ls.exe"
14102     WIN_LS="$formatted_path"
14103     PathFormat "/usr/bin/touch.exe"
14104     WIN_TOUCH="$formatted_path"
14105 else
14106     FIND=find
14107     SORT=sort
14110 AC_SUBST(ATL_INCLUDE)
14111 AC_SUBST(ATL_LIB)
14112 AC_SUBST(FIND)
14113 AC_SUBST(SORT)
14114 AC_SUBST(WIN_GREP)
14115 AC_SUBST(WIN_LS)
14116 AC_SUBST(WIN_TOUCH)
14118 AC_SUBST(BUILD_TYPE)
14120 AC_SUBST(SOLARINC)
14122 PathFormat "$PERL"
14123 PERL="$formatted_path"
14124 AC_SUBST(PERL)
14126 if test -n "$TMPDIR"; then
14127     TEMP_DIRECTORY="$TMPDIR"
14128 else
14129     TEMP_DIRECTORY="/tmp"
14131 if test "$build_os" = "cygwin"; then
14132     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
14134 AC_SUBST(TEMP_DIRECTORY)
14136 # setup the PATH for the environment
14137 if test -n "$LO_PATH_FOR_BUILD"; then
14138     LO_PATH="$LO_PATH_FOR_BUILD"
14139     case "$host_os" in
14140     cygwin*|wsl*)
14141         pathmunge "$MSVC_HOST_PATH" "before"
14142         ;;
14143     esac
14144 else
14145     LO_PATH="$PATH"
14147     case "$host_os" in
14149     aix*|dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
14150         if test "$ENABLE_JAVA" != ""; then
14151             pathmunge "$JAVA_HOME/bin" "after"
14152         fi
14153         ;;
14155     cygwin*|wsl*)
14156         # Win32 make needs native paths
14157         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
14158             LO_PATH=`cygpath -p -m "$PATH"`
14159         fi
14160         if test "$WIN_BUILD_ARCH" = "x64"; then
14161             # needed for msi packaging
14162             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
14163         fi
14164         # .NET 4.6 and higher don't have bin directory
14165         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
14166             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
14167         fi
14168         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
14169         pathmunge "$CSC_PATH" "before"
14170         pathmunge "$MIDL_PATH" "before"
14171         pathmunge "$AL_PATH" "before"
14172         pathmunge "$MSVC_MULTI_PATH" "before"
14173         pathmunge "$MSVC_BUILD_PATH" "before"
14174         if test -n "$MSBUILD_PATH" ; then
14175             pathmunge "$MSBUILD_PATH" "before"
14176         fi
14177         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
14178         if test "$ENABLE_JAVA" != ""; then
14179             if test -d "$JAVA_HOME/jre/bin/client"; then
14180                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
14181             fi
14182             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
14183                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
14184             fi
14185             pathmunge "$JAVA_HOME/bin" "before"
14186         fi
14187         pathmunge "$MSVC_HOST_PATH" "before"
14188         ;;
14190     solaris*)
14191         pathmunge "/usr/css/bin" "before"
14192         if test "$ENABLE_JAVA" != ""; then
14193             pathmunge "$JAVA_HOME/bin" "after"
14194         fi
14195         ;;
14196     esac
14199 AC_SUBST(LO_PATH)
14201 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
14202 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
14203     x_LO_ELFCHECK_ALLOWLIST=
14204 else
14205     x_LO_ELFCHECK_ALLOWLIST=[\#]
14207 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
14208 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
14210 libo_FUZZ_SUMMARY
14212 # Generate a configuration sha256 we can use for deps
14213 if test -f config_host.mk; then
14214     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
14216 if test -f config_host_lang.mk; then
14217     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
14220 CFLAGS=$my_original_CFLAGS
14221 CXXFLAGS=$my_original_CXXFLAGS
14222 CPPFLAGS=$my_original_CPPFLAGS
14224 AC_CONFIG_LINKS([include:include])
14226 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
14227 # BUILD platform configuration] - otherwise breaks cross building
14228 AC_CONFIG_FILES([config_host.mk
14229                  config_host_lang.mk
14230                  Makefile
14231                  bin/bffvalidator.sh
14232                  bin/odfvalidator.sh
14233                  bin/officeotron.sh
14234                  hardened_runtime.xcent
14235                  instsetoo_native/util/openoffice.lst
14236                  sysui/desktop/macosx/Info.plist
14237                  vs-code-template.code-workspace:.vscode/vs-code-template.code-workspace.in])
14238 AC_CONFIG_HEADERS([config_host/config_buildid.h])
14239 AC_CONFIG_HEADERS([config_host/config_box2d.h])
14240 AC_CONFIG_HEADERS([config_host/config_clang.h])
14241 AC_CONFIG_HEADERS([config_host/config_dconf.h])
14242 AC_CONFIG_HEADERS([config_host/config_eot.h])
14243 AC_CONFIG_HEADERS([config_host/config_extensions.h])
14244 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
14245 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
14246 AC_CONFIG_HEADERS([config_host/config_dbus.h])
14247 AC_CONFIG_HEADERS([config_host/config_features.h])
14248 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
14249 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
14250 AC_CONFIG_HEADERS([config_host/config_firebird.h])
14251 AC_CONFIG_HEADERS([config_host/config_folders.h])
14252 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
14253 AC_CONFIG_HEADERS([config_host/config_gio.h])
14254 AC_CONFIG_HEADERS([config_host/config_global.h])
14255 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
14256 AC_CONFIG_HEADERS([config_host/config_java.h])
14257 AC_CONFIG_HEADERS([config_host/config_langs.h])
14258 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
14259 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
14260 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
14261 AC_CONFIG_HEADERS([config_host/config_locales.h])
14262 AC_CONFIG_HEADERS([config_host/config_mpl.h])
14263 AC_CONFIG_HEADERS([config_host/config_oox.h])
14264 AC_CONFIG_HEADERS([config_host/config_options.h])
14265 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
14266 AC_CONFIG_HEADERS([config_host/config_zxing.h])
14267 AC_CONFIG_HEADERS([config_host/config_skia.h])
14268 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
14269 AC_CONFIG_HEADERS([config_host/config_vendor.h])
14270 AC_CONFIG_HEADERS([config_host/config_vcl.h])
14271 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
14272 AC_CONFIG_HEADERS([config_host/config_version.h])
14273 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
14274 AC_CONFIG_HEADERS([config_host/config_poppler.h])
14275 AC_CONFIG_HEADERS([config_host/config_python.h])
14276 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
14277 AC_OUTPUT
14279 if test "$CROSS_COMPILING" = TRUE; then
14280     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
14283 # touch the config timestamp file
14284 if test ! -f config_host.mk.stamp; then
14285     echo > config_host.mk.stamp
14286 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
14287     echo "Host Configuration unchanged - avoiding scp2 stamp update"
14288 else
14289     echo > config_host.mk.stamp
14292 # touch the config lang timestamp file
14293 if test ! -f config_host_lang.mk.stamp; then
14294     echo > config_host_lang.mk.stamp
14295 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
14296     echo "Language Configuration unchanged - avoiding scp2 stamp update"
14297 else
14298     echo > config_host_lang.mk.stamp
14302 if test \( "$STALE_MAKE" = "TRUE" -o "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE" \) \
14303         -a "$build_os" = "cygwin"; then
14305 cat << _EOS
14306 ****************************************************************************
14307 WARNING:
14308 Your make version is known to be horribly slow, and hard to debug
14309 problems with. To get a reasonably functional make please do:
14311 to install a pre-compiled binary make for Win32
14313  mkdir -p /opt/lo/bin
14314  cd /opt/lo/bin
14315  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
14316  cp make-4.2.1-msvc.exe make
14317  chmod +x make
14319 to install from source:
14320 place yourself in a working directory of you choice.
14322  git clone git://git.savannah.gnu.org/make.git
14324  [go to Start menu, open "Visual Studio 2019", click "x86 Native Tools Command Prompt" or "x64 Native Tools Command Prompt"]
14325  set PATH=%PATH%;C:\Cygwin\bin
14326  [or Cygwin64, if that is what you have]
14327  cd path-to-make-repo-you-cloned-above
14328  build_w32.bat --without-guile
14330 should result in a WinRel/gnumake.exe.
14331 Copy it to the Cygwin /opt/lo/bin directory as make.exe
14333 Then re-run autogen.sh
14335 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
14336 Alternatively, you can install the 'new' make where ever you want and make sure that `which make` finds it.
14338 _EOS
14339 if test "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE"; then
14340     AC_MSG_ERROR([no file function found; the build will fail without it; use GNU make 4.0 or later])
14345 cat << _EOF
14346 ****************************************************************************
14348 To build, run:
14349 $GNUMAKE
14351 To view some help, run:
14352 $GNUMAKE help
14354 _EOF
14356 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
14357     cat << _EOF
14358 After the build has finished successfully, you can immediately run what you built using the command:
14359 _EOF
14361     if test $_os = Darwin; then
14362         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
14363     else
14364         echo instdir/program/soffice
14365     fi
14366     cat << _EOF
14368 If you want to run the smoketest, run:
14369 $GNUMAKE check
14371 _EOF
14374 if test -f warn; then
14375     cat warn
14376     rm warn
14379 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: