tdf#148384: Really leave mail merge results dialog open upon errors
[LibreOffice.git] / configure.ac
bloba1fe4c65b291716aaab36e84b5f412fefe8be182
1 dnl -*- Mode: Autoconf; tab-width: 4; indent-tabs-mode: nil; fill-column: 100 -*-
2 dnl configure.ac serves as input for the GNU autoconf package
3 dnl in order to create a configure script.
5 # The version number in the second argument to AC_INIT should be four numbers separated by
6 # periods. Some parts of the code requires the first one to be less than 128 and the others to be less
7 # than 256. The four numbers can optionally be followed by a period and a free-form string containing
8 # no spaces or periods, like "frobozz-mumble-42" or "alpha0". If the free-form string ends with one or
9 # several non-alphanumeric characters, those are split off and used only for the
10 # ABOUTBOXPRODUCTVERSIONSUFFIX in openoffice.lst. Why that is necessary, no idea.
12 AC_INIT([LibreOffice],[7.3.3.0.0+],[],[],[http://documentfoundation.org/])
14 dnl libnumbertext needs autoconf 2.68, but that can pick up autoconf268 just fine if it is installed
15 dnl whereas aclocal (as run by autogen.sh) insists on using autoconf and fails hard
16 dnl so check for the version of autoconf that is actually used to create the configure script
17 AC_PREREQ([2.59])
18 m4_if(m4_version_compare(m4_defn([AC_AUTOCONF_VERSION]), [2.68]), -1,
19     [AC_MSG_ERROR([at least autoconf version 2.68 is needed (you can use AUTOCONF environment variable to point to a suitable one)])])
21 if test -n "$BUILD_TYPE"; then
22     AC_MSG_ERROR([You have sourced config_host.mk in this shell.  This may lead to trouble, please run in a fresh (login) shell.])
25 save_CC=$CC
26 save_CXX=$CXX
28 first_arg_basename()
30     for i in $1; do
31         basename "$i"
32         break
33     done
36 CC_BASE=`first_arg_basename "$CC"`
37 CXX_BASE=`first_arg_basename "$CXX"`
39 BUILD_TYPE="LibO"
40 SCPDEFS=""
41 GIT_NEEDED_SUBMODULES=""
42 LO_PATH= # used by path_munge to construct a PATH variable
44 FilterLibs()
46     # Return value: $filteredlibs
48     filteredlibs=
49     for f in $1; do
50         case "$f" in
51             # let's start with Fedora's paths for now
52             -L/lib|-L/lib/|-L/lib64|-L/lib64/|-L/usr/lib|-L/usr/lib/|-L/usr/lib64|-L/usr/lib64/)
53                 # ignore it: on UNIXoids it is searched by default anyway
54                 # but if it's given explicitly then it may override other paths
55                 # (on macOS it would be an error to use it instead of SDK)
56                 ;;
57             *)
58                 filteredlibs="$filteredlibs $f"
59                 ;;
60         esac
61     done
64 PathFormat()
66     # Args: $1: A pathname. On Cygwin and WSL, in either the Unix or the Windows format. Note that this
67     # function is called also on Unix.
68     #
69     # Return value: $formatted_path and $formatted_path_unix.
70     #
71     # $formatted_path is the argument in Windows format, but using forward slashes instead of
72     # backslashes, using 8.3 pathname components if necessary (if it otherwise would contains spaces
73     # or shell metacharacters).
74     #
75     # $formatted_path_unix is the argument in a form usable in Cygwin or WSL, using 8.3 components if
76     # necessary. On Cygwin, it is the same as $formatted_path, but on WSL it is $formatted_path as a
77     # Unix pathname.
78     #
79     # Errors out if 8.3 names are needed but aren't present for some of the path components.
81     # Examples:
82     #
83     # /home/tml/lo/master-optimised => C:/cygwin64/home/tml/lo/master-optimised
84     #
85     # C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe => C:/PROGRA~2/MICROS~3/INSTAL~1/vswhere.exe
86     #
87     # C:\Program Files (x86)\Microsoft Visual Studio\2019\Community => C:/PROGRA~2/MICROS~3/2019/COMMUN~1
88     #
89     # C:/PROGRA~2/WI3CF2~1/10/Include/10.0.18362.0/ucrt => C:/PROGRA~2/WI3CF2~1/10/Include/10.0.18362.0/ucrt
90     #
91     # /cygdrive/c/PROGRA~2/WI3CF2~1/10 => C:/PROGRA~2/WI3CF2~1/10
92     #
93     # C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\ => C:/PROGRA~2/WI3CF2~1/NETFXSDK/4.8/
94     #
95     # /usr/bin/find.exe => C:/cygwin64/bin/find.exe
97     if test -n "$UNITTEST_WSL_PATHFORMAT"; then
98         printf "PathFormat $1 ==> "
99     fi
101     formatted_path="$1"
102     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
103         if test "$build_os" = "wsl"; then
104             formatted_path=$(echo "$formatted_path" | tr -d '\r')
105         fi
107         pf_conv_to_dos=
108         # spaces,parentheses,brackets,braces are problematic in pathname
109         # so are backslashes
110         case "$formatted_path" in
111             *\ * | *\)* | *\(* | *\{* | *\}* | *\[* | *\]* | *\\* )
112                 pf_conv_to_dos="yes"
113             ;;
114         esac
115         if test "$pf_conv_to_dos" = "yes"; then
116             if test "$build_os" = "wsl"; then
117                 case "$formatted_path" in
118                     /*)
119                         formatted_path=$(wslpath -w "$formatted_path")
120                         ;;
121                 esac
122                 formatted_path=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --8.3 "$formatted_path")
123             elif test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
124                 formatted_path=`cygpath -sm "$formatted_path"`
125             else
126                 formatted_path=`cygpath -d "$formatted_path"`
127             fi
128             if test $? -ne 0;  then
129                 AC_MSG_ERROR([path conversion failed for "$1".])
130             fi
131         fi
132         fp_count_colon=`echo "$formatted_path" | $GREP -c "[:]"`
133         fp_count_slash=`echo "$formatted_path" | $GREP -c "[/]"`
134         if test "$fp_count_slash$fp_count_colon" != "00"; then
135             if test "$fp_count_colon" = "0"; then
136                 new_formatted_path=`realpath "$formatted_path"`
137                 if test $? -ne 0;  then
138                     AC_MSG_WARN([realpath failed for "$formatted_path", not necessarily a problem.])
139                 else
140                     formatted_path="$new_formatted_path"
141                 fi
142             fi
143             if test "$build_os" = "wsl"; then
144                 if test "$fp_count_colon" != "0"; then
145                     formatted_path=$(wslpath "$formatted_path")
146                     local final_slash=
147                     case "$formatted_path" in
148                         */)
149                             final_slash=/
150                             ;;
151                     esac
152                     formatted_path=$(wslpath -m $formatted_path)
153                     case "$formatted_path" in
154                         */)
155                             ;;
156                         *)
157                             formatted_path="$formatted_path"$final_slash
158                             ;;
159                     esac
160                 else
161                     formatted_path=$(wslpath -m "$formatted_path")
162                 fi
163             else
164                 formatted_path=`cygpath -m "$formatted_path"`
165             fi
166             if test $? -ne 0;  then
167                 AC_MSG_ERROR([path conversion failed for "$1".])
168             fi
169         fi
170         fp_count_space=`echo "$formatted_path" | $GREP -c "[ ]"`
171         if test "$fp_count_space" != "0"; then
172             AC_MSG_ERROR([converted path "$formatted_path" still contains spaces. Short filenames (8.3 filenames) support was disabled on this system?])
173         fi
174     fi
175     if test "$build_os" = "wsl"; then
176         # WSL can't run Windows binaries from Windows pathnames so we need a separate return value in Unix format
177         formatted_path_unix=$(wslpath "$formatted_path")
178     else
179         # But Cygwin can
180         formatted_path_unix="$formatted_path"
181     fi
184 AbsolutePath()
186     # There appears to be no simple and portable method to get an absolute and
187     # canonical path, so we try creating the directory if does not exist and
188     # utilizing the shell and pwd.
190     # Args: $1: A possibly relative pathname
191     # Return value: $absolute_path
193     local rel="$1"
194     absolute_path=""
195     test ! -e "$rel" && mkdir -p "$rel"
196     if test -d "$rel" ; then
197         cd "$rel" || AC_MSG_ERROR([absolute path resolution failed for "$rel".])
198         absolute_path="$(pwd)"
199         cd - > /dev/null
200     else
201         AC_MSG_ERROR([Failed to resolve absolute path.  "$rel" does not exist or is not a directory.])
202     fi
205 WARNINGS_FILE=config.warn
206 WARNINGS_FILE_FOR_BUILD=config.Build.warn
207 rm -f "$WARNINGS_FILE" "$WARNINGS_FILE_FOR_BUILD"
208 have_WARNINGS="no"
209 add_warning()
211     if test "$have_WARNINGS" = "no"; then
212         echo "*************************************" > "$WARNINGS_FILE"
213         have_WARNINGS="yes"
214         if which tput >/dev/null && test "`tput colors 2>/dev/null || echo 0`" -ge 8; then
215             dnl <esc> as actual byte (U+1b), [ escaped using quadrigraph @<:@
216             COLORWARN='*\e@<:@1;33;40m WARNING \e@<:@0m:'
217         else
218             COLORWARN="* WARNING :"
219         fi
220     fi
221     echo "$COLORWARN $@" >> "$WARNINGS_FILE"
224 dnl Some Mac User have the bad habit of letting a lot of crap
225 dnl accumulate in their PATH and even adding stuff in /usr/local/bin
226 dnl that confuse the build.
227 dnl For the ones that use LODE, let's be nice and protect them
228 dnl from themselves
230 mac_sanitize_path()
232     mac_path="$LODE_HOME/opt/bin:/usr/bin:/bin:/usr/sbin:/sbin"
233 dnl a common but nevertheless necessary thing that may be in a fancy
234 dnl path location is git, so make sure we have it
235     mac_git_path=`which git 2>/dev/null`
236     if test -n "$mac_git_path" -a -x "$mac_git_path" -a "$mac_git_path" != "/usr/bin/git" ; then
237         mac_path="$mac_path:`dirname $mac_git_path`"
238     fi
239 dnl a not so common but nevertheless quite helpful thing that may be in a fancy
240 dnl path location is gpg, so make sure we find it
241     mac_gpg_path=`which gpg 2>/dev/null`
242     if test -n "$mac_gpg_path" -a -x "$mac_gpg_path" -a "$mac_gpg_path" != "/usr/bin/gpg" ; then
243         mac_path="$mac_path:`dirname $mac_gpg_path`"
244     fi
245     PATH="$mac_path"
246     unset mac_path
247     unset mac_git_path
248     unset mac_gpg_path
251 echo "********************************************************************"
252 echo "*"
253 echo "*   Running ${PACKAGE_NAME} build configuration."
254 echo "*"
255 echo "********************************************************************"
256 echo ""
258 dnl ===================================================================
259 dnl checks build and host OSes
260 dnl do this before argument processing to allow for platform dependent defaults
261 dnl ===================================================================
263 # Check for WSL (version 2, at least). But if --host is explicitly specified (to really do build for
264 # Linux on WSL) trust that.
265 if test -z "$host" -a -z "$build" -a "`wslsys -v 2>/dev/null`" != ""; then
266     ac_cv_host="x86_64-pc-wsl"
267     ac_cv_host_cpu="x86_64"
268     ac_cv_host_os="wsl"
269     ac_cv_build="$ac_cv_host"
270     ac_cv_build_cpu="$ac_cv_host_cpu"
271     ac_cv_build_os="$ac_cv_host_os"
273     # Emulation of Cygwin's cygpath command for WSL.
274     cygpath()
275     {
276         if test -n "$UNITTEST_WSL_CYGPATH"; then
277             echo -n cygpath "$@" "==> "
278         fi
280         # Cygwin's real cygpath has a plethora of options but we use only a few here.
281         local args="$@"
282         local opt
283         local opt_d opt_m opt_u opt_w opt_l opt_s opt_p
284         OPTIND=1
286         while getopts dmuwlsp opt; do
287             case "$opt" in
288                 \?)
289                     AC_MSG_ERROR([Unimplemented cygpath emulation option in invocation: cygpath $args])
290                     ;;
291                 ?)
292                     eval opt_$opt=yes
293                     ;;
294             esac
295         done
297         shift $((OPTIND-1))
299         if test $# -ne 1; then
300             AC_MSG_ERROR([Invalid cygpath emulation invocation: Pathname missing]);
301         fi
303         local input="$1"
305         local result
307         if test -n "$opt_d" -o -n "$opt_m" -o -n "$opt_w"; then
308             # Print Windows path, possibly in 8.3 form (-d) or with forward slashes (-m)
310             if test -n "$opt_u"; then
311                 AC_MSG_ERROR([Invalid cygpath invocation: Both Windows and Unix path output requested])
312             fi
314             case "$input" in
315                 /mnt/*)
316                     # A Windows file in WSL format
317                     input=$(wslpath -w "$input")
318                     ;;
319                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
320                     # Already in Windows format
321                     ;;
322                 /*)
323                     input=$(wslpath -w "$input")
324                     ;;
325                 *)
326                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
327                     ;;
328             esac
329             if test -n "$opt_d" -o -n "$opt_s"; then
330                 input=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --8.3 "$input")
331             fi
332             if test -n "$opt_m"; then
333                 input="${input//\\//}"
334             fi
335             echo "$input"
336         else
337             # Print Unix path
339             case "$input" in
340                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
341                     wslpath -u "$input"
342                     ;;
343                 /)
344                     echo "$input"
345                     ;;
346                 *)
347                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
348                     ;;
349             esac
350         fi
351     }
353     if test -n "$UNITTEST_WSL_CYGPATH"; then
354         BUILDDIR=.
356         # Nothing special with these file names, just arbitrary ones picked to test with
357         cygpath -d /usr/lib64/ld-linux-x86-64.so.2
358         cygpath -w /usr/lib64/ld-linux-x86-64.so.2
359         cygpath -m /usr/lib64/ld-linux-x86-64.so.2
360         cygpath -m -s /usr/lib64/ld-linux-x86-64.so.2
361         # At least on my machine for instance this file does have an 8.3 name
362         cygpath -d /mnt/c/windows/WindowsUpdate.log
363         # But for instance this one doesn't
364         cygpath -w /mnt/c/windows/system32/AboutSettingsHandlers.dll
365         cygpath -ws /mnt/c/windows/WindowsUpdate.log
366         cygpath -m /mnt/c/windows/system32/AboutSettingsHandlers.dll
367         cygpath -ms /mnt/c/windows/WindowsUpdate.log
369         cygpath -u 'c:\windows\system32\AboutSettingsHandlers.dll'
370         cygpath -u 'c:/windows/system32/AboutSettingsHandlers.dll'
372         exit 0
373     fi
376 AC_CANONICAL_HOST
377 AC_CANONICAL_BUILD
379 if test -n "$UNITTEST_WSL_PATHFORMAT"; then
380     BUILDDIR=.
381     GREP=grep
383     # Use of PathFormat must be after AC_CANONICAL_BUILD above
384     PathFormat /
385     printf "$formatted_path , $formatted_path_unix\n"
387     PathFormat $PWD
388     printf "$formatted_path , $formatted_path_unix\n"
390     PathFormat "$PROGRAMFILESX86"
391     printf "$formatted_path , $formatted_path_unix\n"
393     exit 0
396 AC_MSG_CHECKING([for product name])
397 PRODUCTNAME="AC_PACKAGE_NAME"
398 if test -n "$with_product_name" -a "$with_product_name" != no; then
399     PRODUCTNAME="$with_product_name"
401 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
402     PRODUCTNAME="${PRODUCTNAME}Dev"
404 AC_MSG_RESULT([$PRODUCTNAME])
405 AC_SUBST(PRODUCTNAME)
406 PRODUCTNAME_WITHOUT_SPACES=$(printf %s "$PRODUCTNAME" | sed 's/ //g')
407 AC_SUBST(PRODUCTNAME_WITHOUT_SPACES)
409 dnl ===================================================================
410 dnl Our version is defined by the AC_INIT() at the top of this script.
411 dnl ===================================================================
413 AC_MSG_CHECKING([for package version])
414 if test -n "$with_package_version" -a "$with_package_version" != no; then
415     PACKAGE_VERSION="$with_package_version"
417 AC_MSG_RESULT([$PACKAGE_VERSION])
419 set `echo "$PACKAGE_VERSION" | sed "s/\./ /g"`
421 LIBO_VERSION_MAJOR=$1
422 LIBO_VERSION_MINOR=$2
423 LIBO_VERSION_MICRO=$3
424 LIBO_VERSION_PATCH=$4
426 LIBO_VERSION_SUFFIX=$5
428 # Split out LIBO_VERSION_SUFFIX_SUFFIX... horrible crack. But apparently wanted separately in
429 # openoffice.lst as ABOUTBOXPRODUCTVERSIONSUFFIX. Note that the double brackets are for m4's sake,
430 # they get undoubled before actually passed to sed.
431 LIBO_VERSION_SUFFIX_SUFFIX=`echo "$LIBO_VERSION_SUFFIX" | sed -e 's/.*[[a-zA-Z0-9]]\([[^a-zA-Z0-9]]*\)$/\1/'`
432 test -n "$LIBO_VERSION_SUFFIX_SUFFIX" && LIBO_VERSION_SUFFIX="${LIBO_VERSION_SUFFIX%${LIBO_VERSION_SUFFIX_SUFFIX}}"
433 # LIBO_VERSION_SUFFIX, if non-empty, should include the period separator
434 test -n "$LIBO_VERSION_SUFFIX" && LIBO_VERSION_SUFFIX=".$LIBO_VERSION_SUFFIX"
436 # The value for key CFBundleVersion in the Info.plist file must be a period-separated list of at most
437 # three non-negative integers. Please find more information about CFBundleVersion at
438 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleversion
440 # The value for key CFBundleShortVersionString in the Info.plist file must be a period-separated list
441 # of at most three non-negative integers. Please find more information about
442 # CFBundleShortVersionString at
443 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring
445 # But that is enforced only in the App Store, and we apparently want to break the rules otherwise.
447 if test "$enable_macosx_sandbox" = yes; then
448     MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.`expr $LIBO_VERSION_MICRO '*' 1000 + $LIBO_VERSION_PATCH`
449     MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION
450 else
451     MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.$LIBO_VERSION_MICRO.$LIBO_VERSION_PATCH
452     MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION$LIBO_VERSION_SUFFIX
455 AC_SUBST(LIBO_VERSION_MAJOR)
456 AC_SUBST(LIBO_VERSION_MINOR)
457 AC_SUBST(LIBO_VERSION_MICRO)
458 AC_SUBST(LIBO_VERSION_PATCH)
459 AC_SUBST(LIBO_VERSION_SUFFIX)
460 AC_SUBST(LIBO_VERSION_SUFFIX_SUFFIX)
461 AC_SUBST(MACOSX_BUNDLE_SHORTVERSION)
462 AC_SUBST(MACOSX_BUNDLE_VERSION)
464 AC_DEFINE_UNQUOTED(LIBO_VERSION_MAJOR,$LIBO_VERSION_MAJOR)
465 AC_DEFINE_UNQUOTED(LIBO_VERSION_MINOR,$LIBO_VERSION_MINOR)
466 AC_DEFINE_UNQUOTED(LIBO_VERSION_MICRO,$LIBO_VERSION_MICRO)
467 AC_DEFINE_UNQUOTED(LIBO_VERSION_PATCH,$LIBO_VERSION_PATCH)
469 LIBO_THIS_YEAR=`date +%Y`
470 AC_DEFINE_UNQUOTED(LIBO_THIS_YEAR,$LIBO_THIS_YEAR)
472 dnl ===================================================================
473 dnl Product version
474 dnl ===================================================================
475 AC_MSG_CHECKING([for product version])
476 PRODUCTVERSION="$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR"
477 AC_MSG_RESULT([$PRODUCTVERSION])
478 AC_SUBST(PRODUCTVERSION)
480 AC_PROG_EGREP
481 # AC_PROG_EGREP doesn't set GREP on all systems as well
482 AC_PATH_PROG(GREP, grep)
484 BUILDDIR=`pwd`
485 cd $srcdir
486 SRC_ROOT=`pwd`
487 cd $BUILDDIR
488 x_Cygwin=[\#]
490 dnl ======================================
491 dnl Required GObject introspection version
492 dnl ======================================
493 INTROSPECTION_REQUIRED_VERSION=1.32.0
495 dnl ===================================================================
496 dnl Search all the common names for GNU Make
497 dnl ===================================================================
498 AC_MSG_CHECKING([for GNU Make])
500 # try to use our own make if it is available and GNUMAKE was not already defined
501 if test -z "$GNUMAKE"; then
502     if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/make" ; then
503         GNUMAKE="$LODE_HOME/opt/bin/make"
504     elif test -x "/opt/lo/bin/make"; then
505         GNUMAKE="/opt/lo/bin/make"
506     fi
509 GNUMAKE_WIN_NATIVE=
510 for a in "$MAKE" "$GNUMAKE" make gmake gnumake; do
511     if test -n "$a"; then
512         $a --version 2> /dev/null | grep GNU  2>&1 > /dev/null
513         if test $? -eq 0;  then
514             if test "$build_os" = "cygwin"; then
515                 if test -n "$($a -v | grep 'Built for Windows')" ; then
516                     GNUMAKE="$(cygpath -m "$(which "$(cygpath -u $a)")")"
517                     GNUMAKE_WIN_NATIVE="TRUE"
518                 else
519                     GNUMAKE=`which $a`
520                 fi
521             else
522                 GNUMAKE=`which $a`
523             fi
524             break
525         fi
526     fi
527 done
528 AC_MSG_RESULT($GNUMAKE)
529 if test -z "$GNUMAKE"; then
530     AC_MSG_ERROR([not found. install GNU Make.])
531 else
532     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
533         AC_MSG_NOTICE([Using a native Win32 GNU Make version.])
534     fi
537 win_short_path_for_make()
539     local short_path="$1"
540     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
541         cygpath -sm "$short_path"
542     else
543         cygpath -u "$(cygpath -d "$short_path")"
544     fi
548 if test "$build_os" = "cygwin"; then
549     PathFormat "$SRC_ROOT"
550     SRC_ROOT="$formatted_path"
551     PathFormat "$BUILDDIR"
552     BUILDDIR="$formatted_path"
553     x_Cygwin=
554     AC_MSG_CHECKING(for explicit COMSPEC)
555     if test -z "$COMSPEC"; then
556         AC_MSG_ERROR([COMSPEC not set in environment, please set it and rerun])
557     else
558         AC_MSG_RESULT([found: $COMSPEC])
559     fi
562 AC_SUBST(SRC_ROOT)
563 AC_SUBST(BUILDDIR)
564 AC_SUBST(x_Cygwin)
565 AC_DEFINE_UNQUOTED(SRCDIR,"$SRC_ROOT")
566 AC_DEFINE_UNQUOTED(SRC_ROOT,"$SRC_ROOT")
567 AC_DEFINE_UNQUOTED(BUILDDIR,"$BUILDDIR")
569 if test "z$EUID" = "z0" -a "`uname -o 2>/dev/null`" = "Cygwin"; then
570     AC_MSG_ERROR([You must build LibreOffice as a normal user - not using an administrative account])
573 # need sed in os checks...
574 AC_PATH_PROGS(SED, sed)
575 if test -z "$SED"; then
576     AC_MSG_ERROR([install sed to run this script])
579 # Set the ENABLE_LTO variable
580 # ===================================================================
581 AC_MSG_CHECKING([whether to use link-time optimization])
582 if test -n "$enable_lto" -a "$enable_lto" != "no"; then
583     ENABLE_LTO="TRUE"
584     AC_MSG_RESULT([yes])
585 else
586     ENABLE_LTO=""
587     AC_MSG_RESULT([no])
589 AC_SUBST(ENABLE_LTO)
591 AC_ARG_ENABLE(fuzz-options,
592     AS_HELP_STRING([--enable-fuzz-options],
593         [Randomly enable or disable each of those configurable options
594          that are supposed to be freely selectable without interdependencies,
595          or where bad interaction from interdependencies is automatically avoided.])
598 dnl ===================================================================
599 dnl When building for Android, --with-android-ndk,
600 dnl --with-android-ndk-toolchain-version and --with-android-sdk are
601 dnl mandatory
602 dnl ===================================================================
604 AC_ARG_WITH(android-ndk,
605     AS_HELP_STRING([--with-android-ndk],
606         [Specify location of the Android Native Development Kit. Mandatory when building for Android.]),
609 AC_ARG_WITH(android-ndk-toolchain-version,
610     AS_HELP_STRING([--with-android-ndk-toolchain-version],
611         [Specify which toolchain version to use, of those present in the
612         Android NDK you are using. The default (and only supported version currently) is "clang5.0"]),,
613         with_android_ndk_toolchain_version=clang5.0)
615 AC_ARG_WITH(android-sdk,
616     AS_HELP_STRING([--with-android-sdk],
617         [Specify location of the Android SDK. Mandatory when building for Android.]),
620 AC_ARG_WITH(android-api-level,
621     AS_HELP_STRING([--with-android-api-level],
622         [Specify the API level when building for Android. Defaults to 16 for ARM and x86 and to 21 for ARM64 and x86-64]),
625 ANDROID_NDK_HOME=
626 if test -z "$with_android_ndk" -a -e "$SRC_ROOT/external/android-ndk" -a "$build" != "$host"; then
627     with_android_ndk="$SRC_ROOT/external/android-ndk"
629 if test -n "$with_android_ndk"; then
630     eval ANDROID_NDK_HOME=$with_android_ndk
632     # Set up a lot of pre-canned defaults
634     if test ! -f $ANDROID_NDK_HOME/RELEASE.TXT; then
635         if test ! -f $ANDROID_NDK_HOME/source.properties; then
636             AC_MSG_ERROR([Unrecognized Android NDK. Missing RELEASE.TXT or source.properties file in $ANDROID_NDK_HOME.])
637         fi
638         ANDROID_NDK_VERSION=`sed -n -e 's/Pkg.Revision = //p' $ANDROID_NDK_HOME/source.properties`
639     else
640         ANDROID_NDK_VERSION=`cut -f1 -d' ' <$ANDROID_NDK_HOME/RELEASE.TXT`
641     fi
642     if test -z "$ANDROID_NDK_VERSION";  then
643         AC_MSG_ERROR([Failed to determine Android NDK version. Please check your installation.])
644     fi
645     case $ANDROID_NDK_VERSION in
646     r9*|r10*)
647         AC_MSG_ERROR([Building for Android is only supported with NDK versions above 16.x*])
648         ;;
649     11.1.*|12.1.*|13.1.*|14.1.*)
650         AC_MSG_ERROR([Building for Android is only supported with NDK versions above 16.x.*])
651         ;;
652     16.*|17.*|18.*|19.*|20.*)
653         ;;
654     *)
655         AC_MSG_WARN([Untested Android NDK version $ANDROID_NDK_VERSION, only versions 16.* til 20.* have been used successfully. Proceed at your own risk.])
656         add_warning "Untested Android NDK version $ANDROID_NDK_VERSION, only versions 16.* til 20.* have been used successfully. Proceed at your own risk."
657         ;;
658     esac
660     ANDROID_API_LEVEL=16
661     if test -n "$with_android_api_level" ; then
662         ANDROID_API_LEVEL="$with_android_api_level"
663     fi
665     android_cpu=$host_cpu
666     if test $host_cpu = arm; then
667         android_platform_prefix=arm-linux-androideabi
668         android_gnu_prefix=$android_platform_prefix
669         LLVM_TRIPLE=armv7a-linux-androideabi
670         ANDROID_APP_ABI=armeabi-v7a
671         ANDROIDCFLAGS="-mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=neon -Wl,--fix-cortex-a8"
672     elif test $host_cpu = aarch64; then
673         android_platform_prefix=aarch64-linux-android
674         android_gnu_prefix=$android_platform_prefix
675         LLVM_TRIPLE=$android_platform_prefix
676         # minimum android version that supports aarch64
677         if test "$ANDROID_API_LEVEL" -lt "21" ; then
678             ANDROID_API_LEVEL=21
679         fi
680         ANDROID_APP_ABI=arm64-v8a
681     elif test $host_cpu = x86_64; then
682         android_platform_prefix=x86_64-linux-android
683         android_gnu_prefix=$android_platform_prefix
684         LLVM_TRIPLE=$android_platform_prefix
685         # minimum android version that supports x86_64
686         ANDROID_API_LEVEL=21
687         ANDROID_APP_ABI=x86_64
688     else
689         # host_cpu is something like "i386" or "i686" I guess, NDK uses
690         # "x86" in some contexts
691         android_cpu=x86
692         android_platform_prefix=$android_cpu
693         android_gnu_prefix=i686-linux-android
694         LLVM_TRIPLE=$android_gnu_prefix
695         ANDROID_APP_ABI=x86
696     fi
698     case "$with_android_ndk_toolchain_version" in
699     clang5.0)
700         ANDROID_GCC_TOOLCHAIN_VERSION=4.9
701         ;;
702     *)
703         AC_MSG_ERROR([Unrecognized value for the --with-android-ndk-toolchain-version option. Building for Android is only supported with Clang 5.*])
704     esac
706     AC_MSG_NOTICE([using the Android API level... $ANDROID_API_LEVEL])
708     # NDK 15 or later toolchain is 64bit-only, except for Windows that we don't support. Using a 64-bit
709     # linker is required if you compile large parts of the code with -g. A 32-bit linker just won't
710     # manage to link the (app-specific) single huge .so that is built for the app in
711     # android/source/ if there is debug information in a significant part of the object files.
712     # (A 64-bit ld.gold grows too much over 10 gigabytes of virtual space when linking such a .so if
713     # all objects have been built with debug information.)
714     case $build_os in
715     linux-gnu*)
716         android_HOST_TAG=linux-x86_64
717         ;;
718     darwin*)
719         android_HOST_TAG=darwin-x86_64
720         ;;
721     *)
722         AC_MSG_ERROR([We only support building for Android from Linux or macOS])
723         # ndk would also support windows and windows-x86_64
724         ;;
725     esac
726     android_TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/$android_HOST_TAG
727     ANDROID_COMPILER_BIN=$android_TOOLCHAIN/bin
728     dnl TODO: NSS build uses it...
729     ANDROID_BINUTILS_PREBUILT_ROOT=$ANDROID_NDK_HOME/toolchains/$android_platform_prefix-$ANDROID_GCC_TOOLCHAIN_VERSION/prebuilt/$android_HOST_TAG
730     AC_SUBST(ANDROID_BINUTILS_PREBUILT_ROOT)
732     test -z "$AR" && AR=$ANDROID_COMPILER_BIN/$android_gnu_prefix-ar
733     test -z "$NM" && NM=$ANDROID_COMPILER_BIN/$android_gnu_prefix-nm
734     test -z "$OBJDUMP" && OBJDUMP=$ANDROID_COMPILER_BIN/$android_gnu_prefix-objdump
735     test -z "$RANLIB" && RANLIB=$ANDROID_COMPILER_BIN/$android_gnu_prefix-ranlib
736     test -z "$STRIP" && STRIP=$ANDROID_COMPILER_BIN/$android_gnu_prefix-strip
738     ANDROIDCFLAGS="$ANDROIDCFLAGS -target ${LLVM_TRIPLE}${ANDROID_API_LEVEL}"
739     ANDROIDCFLAGS="$ANDROIDCFLAGS -no-canonical-prefixes -ffunction-sections -fdata-sections -Qunused-arguments"
740     if test "$ENABLE_LTO" = TRUE; then
741         # -flto comes from com_GCC_defs.mk, too, but we need to make sure it gets passed as part of
742         # $CC and $CXX when building external libraries
743         ANDROIDCFLAGS="$ANDROIDCFLAGS -flto -fuse-linker-plugin -O2"
744     fi
746     ANDROIDCXXFLAGS="$ANDROIDCFLAGS -stdlib=libc++"
748     if test -z "$CC"; then
749         CC="$ANDROID_COMPILER_BIN/clang $ANDROIDCFLAGS"
750         CC_BASE="clang"
751     fi
752     if test -z "$CXX"; then
753         CXX="$ANDROID_COMPILER_BIN/clang++ $ANDROIDCXXFLAGS"
754         CXX_BASE="clang++"
755     fi
757 AC_SUBST(ANDROID_NDK_HOME)
758 AC_SUBST(ANDROID_APP_ABI)
759 AC_SUBST(ANDROID_GCC_TOOLCHAIN_VERSION)
761 dnl ===================================================================
762 dnl --with-android-sdk
763 dnl ===================================================================
764 ANDROID_SDK_HOME=
765 if test -z "$with_android_sdk" -a -e "$SRC_ROOT/external/android-sdk-linux" -a "$build" != "$host"; then
766     with_android_sdk="$SRC_ROOT/external/android-sdk-linux"
768 if test -n "$with_android_sdk"; then
769     eval ANDROID_SDK_HOME=$with_android_sdk
770     PATH="$ANDROID_SDK_HOME/platform-tools:$ANDROID_SDK_HOME/tools:$PATH"
772 AC_SUBST(ANDROID_SDK_HOME)
774 AC_ARG_ENABLE([android-lok],
775     AS_HELP_STRING([--enable-android-lok],
776         [The Android app from the android/ subdir needs several tweaks all
777          over the place that break the LOK when used in the Online-based
778          Android app.  This switch indicates that the intent of this build is
779          actually the Online-based, non-modified LOK.])
781 ENABLE_ANDROID_LOK=
782 if test -n "$ANDROID_NDK_HOME" ; then
783     if test "$enable_android_lok" = yes; then
784         ENABLE_ANDROID_LOK=TRUE
785         AC_DEFINE(HAVE_FEATURE_ANDROID_LOK)
786         AC_MSG_NOTICE([building the Android version... for the Online-based Android app])
787     else
788         AC_MSG_NOTICE([building the Android version... for the app from the android/ subdir])
789     fi
791 AC_SUBST([ENABLE_ANDROID_LOK])
793 libo_FUZZ_ARG_ENABLE([android-editing],
794     AS_HELP_STRING([--enable-android-editing],
795         [Enable the experimental editing feature on Android.])
797 ENABLE_ANDROID_EDITING=
798 if test "$enable_android_editing" = yes; then
799     ENABLE_ANDROID_EDITING=TRUE
801 AC_SUBST([ENABLE_ANDROID_EDITING])
803 disable_database_connectivity_dependencies()
805     enable_evolution2=no
806     enable_firebird_sdbc=no
807     enable_mariadb_sdbc=no
808     enable_postgresql_sdbc=no
809     enable_report_builder=no
812 # ===================================================================
814 # Start initial platform setup
816 # The using_* variables reflect platform support and should not be
817 # changed after the "End initial platform setup" block.
818 # This is also true for most test_* variables.
819 # ===================================================================
820 build_crypto=yes
821 test_cmis=yes
822 test_gdb_index=no
823 test_openldap=yes
824 test_split_debug=no
825 test_webdav=yes
827 # There is currently just iOS not using salplug, so this explicitly enables it.
828 # must: using_freetype_fontconfig
829 #  may: using_headless_plugin defaults to $using_freetype_fontconfig
830 using_vclplug=yes
831 # must: using_x11
833 # Default values, as such probably valid just for Linux, set
834 # differently below just for Mac OSX, but at least better than
835 # hardcoding these as we used to do. Much of this is duplicated also
836 # in solenv for old build system and for gbuild, ideally we should
837 # perhaps define stuff like this only here in configure.ac?
839 LINKFLAGSSHL="-shared"
840 PICSWITCH="-fpic"
841 DLLPOST=".so"
843 LINKFLAGSNOUNDEFS="-Wl,-z,defs"
845 INSTROOTBASESUFFIX=
846 INSTROOTCONTENTSUFFIX=
847 SDKDIRNAME=sdk
849 HOST_PLATFORM="$host"
851 host_cpu_for_clang="$host_cpu"
853 case "$host_os" in
855 solaris*)
856     using_freetype_fontconfig=yes
857     using_x11=yes
858     build_skia=yes
859     _os=SunOS
861     dnl ===========================================================
862     dnl Check whether we're using Solaris 10 - SPARC or Intel.
863     dnl ===========================================================
864     AC_MSG_CHECKING([the Solaris operating system release])
865     _os_release=`echo $host_os | $SED -e s/solaris2\.//`
866     if test "$_os_release" -lt "10"; then
867         AC_MSG_ERROR([use Solaris >= 10 to build LibreOffice])
868     else
869         AC_MSG_RESULT([ok ($_os_release)])
870     fi
872     dnl Check whether we're using a SPARC or i386 processor
873     AC_MSG_CHECKING([the processor type])
874     if test "$host_cpu" = "sparc" -o "$host_cpu" = "i386"; then
875         AC_MSG_RESULT([ok ($host_cpu)])
876     else
877         AC_MSG_ERROR([only SPARC and i386 processors are supported])
878     fi
879     ;;
881 linux-gnu*|k*bsd*-gnu*|linux-musl*)
882     using_freetype_fontconfig=yes
883     using_x11=yes
884     build_skia=yes
885     test_gdb_index=yes
886     test_split_debug=yes
887     if test "$enable_fuzzers" = yes; then
888         test_system_freetype=no
889     fi
890     _os=Linux
891     ;;
893 gnu)
894     using_freetype_fontconfig=yes
895     using_x11=no
896     _os=GNU
897      ;;
899 cygwin*|wsl*)
900     # When building on Windows normally with MSVC under Cygwin,
901     # configure thinks that the host platform (the platform the
902     # built code will run on) is Cygwin, even if it obviously is
903     # Windows, which in Autoconf terminology is called
904     # "mingw32". (Which is misleading as MinGW is the name of the
905     # tool-chain, not an operating system.)
907     # Somewhat confusing, yes. But this configure script doesn't
908     # look at $host etc that much, it mostly uses its own $_os
909     # variable, set here in this case statement.
911     using_freetype_fontconfig=no
912     using_x11=no
913     test_openldap=no
914     build_skia=yes
915     _os=WINNT
917     DLLPOST=".dll"
918     LINKFLAGSNOUNDEFS=
920     if test "$host_cpu" = "aarch64"; then
921         build_skia=no
922         enable_gpgmepp=no
923         enable_coinmp=no
924         enable_firebird_sdbc=no
925     fi
926     ;;
928 darwin*|macos*) # macOS
929     using_freetype_fontconfig=no
930     using_x11=no
931     build_skia=yes
932     if test -n "$LODE_HOME" ; then
933         mac_sanitize_path
934         AC_MSG_NOTICE([sanitized the PATH to $PATH])
935     fi
936     _os=Darwin
937     INSTROOTBASESUFFIX=/$PRODUCTNAME_WITHOUT_SPACES.app
938     INSTROOTCONTENTSUFFIX=/Contents
939     SDKDIRNAME=${PRODUCTNAME_WITHOUT_SPACES}${PRODUCTVERSION}_SDK
940     # See comment above the case "$host_os"
941     LINKFLAGSSHL="-dynamiclib -single_module"
943     # -fPIC is default
944     PICSWITCH=""
946     DLLPOST=".dylib"
948     # -undefined error is the default
949     LINKFLAGSNOUNDEFS=""
950     case "$host_cpu" in
951     aarch64|arm64)
952         case "$host_os" in
953         macos*)
954             # HOST_PLATFORM is used for external projects and their configury occasionally doesn't like
955             # the "macos" part so be sure to use aarch64-apple-darwin for now.
956             HOST_PLATFORM=aarch64-apple-darwin
957             ;;
958         esac
960         # Apple's Clang uses "arm64"
961         host_cpu_for_clang=arm64
962     esac
965 ios*) # iOS
966     using_freetype_fontconfig=no
967     using_vclplug=no
968     using_x11=no
969     build_crypto=no
970     test_cmis=no
971     test_openldap=no
972     test_webdav=no
973     if test -n "$LODE_HOME" ; then
974         mac_sanitize_path
975         AC_MSG_NOTICE([sanitized the PATH to $PATH])
976     fi
977     enable_gpgmepp=no
978     _os=iOS
979     enable_mpl_subset=yes
980     enable_lotuswordpro=no
981     disable_database_connectivity_dependencies
982     enable_coinmp=no
983     enable_lpsolve=no
984     enable_extension_integration=no
985     enable_xmlhelp=no
986     with_ppds=no
987     if test "$enable_ios_simulator" = "yes"; then
988         host=x86_64-apple-darwin
989     fi
990     # See comment above the case "$host_os"
991     LINKFLAGSSHL="-dynamiclib -single_module"
993     # -fPIC is default
994     PICSWITCH=""
996     DLLPOST=".dylib"
998     # -undefined error is the default
999     LINKFLAGSNOUNDEFS=""
1001     # HOST_PLATFORM is used for external projects and their configury typically doesn't like the "ios"
1002     # part, so use aarch64-apple-darwin for now.
1003     HOST_PLATFORM=aarch64-apple-darwin
1005     # Apple's Clang uses "arm64"
1006     host_cpu_for_clang=arm64
1009 freebsd*)
1010     using_freetype_fontconfig=yes
1011     using_x11=yes
1012     build_skia=yes
1013     AC_MSG_CHECKING([the FreeBSD operating system release])
1014     if test -n "$with_os_version"; then
1015         OSVERSION="$with_os_version"
1016     else
1017         OSVERSION=`/sbin/sysctl -n kern.osreldate`
1018     fi
1019     AC_MSG_RESULT([found OSVERSION=$OSVERSION])
1020     AC_MSG_CHECKING([which thread library to use])
1021     if test "$OSVERSION" -lt "500016"; then
1022         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1023         PTHREAD_LIBS="-pthread"
1024     elif test "$OSVERSION" -lt "502102"; then
1025         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1026         PTHREAD_LIBS="-lc_r"
1027     else
1028         PTHREAD_CFLAGS=""
1029         PTHREAD_LIBS="-pthread"
1030     fi
1031     AC_MSG_RESULT([$PTHREAD_LIBS])
1032     _os=FreeBSD
1033     ;;
1035 *netbsd*)
1036     using_freetype_fontconfig=yes
1037     using_x11=yes
1038     test_gtk3_kde5=no
1039     build_skia=yes
1040     PTHREAD_LIBS="-pthread -lpthread"
1041     _os=NetBSD
1042     ;;
1044 aix*)
1045     using_freetype_fontconfig=yes
1046     using_x11=yes
1047     test_randr=no
1048     test_gstreamer_1_0=no
1049     PTHREAD_LIBS=-pthread
1050     _os=AIX
1051     ;;
1053 openbsd*)
1054     using_freetype_fontconfig=yes
1055     using_x11=yes
1056     PTHREAD_CFLAGS="-D_THREAD_SAFE"
1057     PTHREAD_LIBS="-pthread"
1058     _os=OpenBSD
1059     ;;
1061 dragonfly*)
1062     using_freetype_fontconfig=yes
1063     using_x11=yes
1064     build_skia=yes
1065     PTHREAD_LIBS="-pthread"
1066     _os=DragonFly
1067     ;;
1069 linux-android*)
1070     using_freetype_fontconfig=yes
1071     using_headless_plugin=no
1072     using_x11=no
1073     build_crypto=no
1074     test_openldap=no
1075     test_system_freetype=no
1076     test_webdav=no
1077     disable_database_connectivity_dependencies
1078     enable_lotuswordpro=no
1079     enable_mpl_subset=yes
1080     enable_cairo_canvas=no
1081     enable_coinmp=yes
1082     enable_lpsolve=no
1083     enable_odk=no
1084     enable_python=no
1085     enable_xmlhelp=no
1086     _os=Android
1088     AC_DEFINE(HAVE_FT_FACE_GETCHARVARIANTINDEX)
1089     ;;
1091 haiku*)
1092     using_freetype_fontconfig=yes
1093     using_x11=no
1094     test_gtk3_kde5=no
1095     test_kf5=yes
1096     enable_odk=no
1097     enable_coinmp=no
1098     enable_pdfium=no
1099     enable_sdremote=no
1100     enable_postgresql_sdbc=no
1101     enable_firebird_sdbc=no
1102     _os=Haiku
1103     ;;
1105 emscripten)
1106     using_freetype_fontconfig=yes
1107     using_x11=no
1108     test_openldap=no
1109     enable_compiler_plugins=no
1110     test_cmis=no
1111     test_webdav=no
1112     enable_database_connectivity=no
1113     enable_lpsolve=no
1114     enable_xmlhelp=no
1115     with_system_zlib=no
1116     with_theme="breeze"
1117     _os=Emscripten
1118     ;;
1121     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
1122     ;;
1123 esac
1125 AC_SUBST(HOST_PLATFORM)
1127 if test -z "$using_x11" -o -z "$using_freetype_fontconfig"; then
1128     AC_MSG_ERROR([You must set \$using_freetype_fontconfig and \$using_x11 for your platform])
1131 # Set defaults, if not set by platform
1132 test "${test_cups+set}" = set || test_cups="$using_x11"
1133 test "${test_dbus+set}" = set || test_dbus="$using_x11"
1134 test "${test_gstreamer_1_0+set}" = set || test_gstreamer_1_0="$using_x11"
1135 test "${test_gtk3+set}" = set || test_gtk3="$using_x11"
1136 test "${test_gtk4+set}" = set || test_gtk4="$using_x11"
1137 test "${test_kf5+set}" = set || test_kf5="$using_x11"
1138 # don't handle test_qt5, so it can disable test_kf5 later
1139 test "${test_qt6+set}" = set || test_qt6="$using_x11"
1140 test "${test_randr+set}" = set || test_randr="$using_x11"
1141 test "${test_xrender+set}" = set || test_xrender="$using_x11"
1142 test "${using_headless_plugin+set}" = set || using_headless_plugin="$using_freetype_fontconfig"
1144 test "${test_gtk3_kde5+set}" != set -a "$test_kf5" = yes -a "$test_gtk3" = yes && test_gtk3_kde5="yes"
1145 test "${test_system_fontconfig+set}" != set -a "${test_system_freetype+set}" = set && test_system_fontconfig="$test_system_freetype"
1146 test "${test_system_freetype+set}" != set -a "${test_system_fontconfig+set}" = set && test_system_freetype="$test_system_fontconfig"
1148 # convenience / platform overriding "fixes"
1149 # Don't sort!
1150 test "$test_kf5" = yes -a "$test_qt5" = no && test_kf5=no
1151 test "$test_kf5" = yes && test_qt5=yes
1152 test "$test_gtk3" != yes -o "$test_kf5" != yes && test_gtk3_kde5=no
1153 test "$using_freetype_fontconfig" = no && using_headless_plugin=no
1154 test "$using_freetype_fontconfig" = yes && test_cairo=yes
1156 # Keep in sync with the above $using_x11 depending test default list
1157 disable_x11_tests()
1159     test_cups=no
1160     test_dbus=no
1161     test_gstreamer_1_0=no
1162     test_gtk3_kde5=no
1163     test_gtk3=no
1164     test_gtk4=no
1165     test_kf5=no
1166     test_qt5=no
1167     test_qt6=no
1168     test_randr=no
1169     test_xrender=no
1172 test "$using_x11" = yes && USING_X11=TRUE
1174 if test "$using_freetype_fontconfig" = yes; then
1175     if test "$using_headless_plugin" = yes; then
1176         AC_DEFINE(ENABLE_HEADLESS)
1177         ENABLE_HEADLESS=TRUE
1178     fi
1181 AC_SUBST(ENABLE_HEADLESS)
1183 AC_MSG_NOTICE([VCL platform uses freetype+fontconfig: $using_freetype_fontconfig])
1184 AC_MSG_NOTICE([VCL platform uses headless plugin: $using_headless_plugin])
1185 AC_MSG_NOTICE([VCL platform uses vclplug: $using_vclplug])
1186 AC_MSG_NOTICE([VCL platform uses X11: $using_x11])
1188 # ===================================================================
1190 # End initial platform setup
1192 # ===================================================================
1194 if test "$_os" = "Android" ; then
1195     # Verify that the NDK and SDK options are proper
1196     if test -z "$with_android_ndk"; then
1197         AC_MSG_ERROR([the --with-android-ndk option is mandatory, unless it is available at external/android-ndk/.])
1198     elif test ! -f "$ANDROID_NDK_HOME/meta/abis.json"; then
1199         AC_MSG_ERROR([the --with-android-ndk option does not point to an Android NDK])
1200     fi
1202     if test -z "$ANDROID_SDK_HOME"; then
1203         AC_MSG_ERROR([the --with-android-sdk option is mandatory, unless it is available at external/android-sdk-linux/.])
1204     elif test ! -d "$ANDROID_SDK_HOME/platforms"; then
1205         AC_MSG_ERROR([the --with-android-sdk option does not point to an Android SDK])
1206     fi
1208     BUILD_TOOLS_VERSION=`$SED -n -e 's/.*buildToolsVersion "\(.*\)"/\1/p' $SRC_ROOT/android/source/build.gradle`
1209     if test ! -d "$ANDROID_SDK_HOME/build-tools/$BUILD_TOOLS_VERSION"; then
1210         AC_MSG_WARN([android build-tools $BUILD_TOOLS_VERSION not found - install with
1211                          $ANDROID_SDK_HOME/tools/android update sdk -u --all --filter build-tools-$BUILD_TOOLS_VERSION
1212                     or adjust change $SRC_ROOT/android/source/build.gradle accordingly])
1213         add_warning "android build-tools $BUILD_TOOLS_VERSION not found - install with"
1214         add_warning "    $ANDROID_SDK_HOME/tools/android update sdk -u --all --filter build-tools-$BUILD_TOOLS_VERSION"
1215         add_warning "or adjust $SRC_ROOT/android/source/build.gradle accordingly"
1216     fi
1217     if test ! -f "$ANDROID_SDK_HOME/extras/android/m2repository/source.properties"; then
1218         AC_MSG_WARN([android support repository not found - install with
1219                          $ANDROID_SDK_HOME/tools/android update sdk -u --filter extra-android-m2repository
1220                      to allow the build to download the specified version of the android support libraries])
1221         add_warning "android support repository not found - install with"
1222         add_warning "    $ANDROID_SDK_HOME/tools/android update sdk -u --filter extra-android-m2repository"
1223         add_warning "to allow the build to download the specified version of the android support libraries"
1224     fi
1227 if test "$_os" = "AIX"; then
1228     AC_PATH_PROG(GAWK, gawk)
1229     if test -z "$GAWK"; then
1230         AC_MSG_ERROR([gawk not found in \$PATH])
1231     fi
1234 AC_SUBST(SDKDIRNAME)
1236 AC_SUBST(PTHREAD_CFLAGS)
1237 AC_SUBST(PTHREAD_LIBS)
1239 # Check for explicit A/C/CXX/OBJC/OBJCXX/LDFLAGS.
1240 # By default use the ones specified by our build system,
1241 # but explicit override is possible.
1242 AC_MSG_CHECKING(for explicit AFLAGS)
1243 if test -n "$AFLAGS"; then
1244     AC_MSG_RESULT([$AFLAGS])
1245     x_AFLAGS=
1246 else
1247     AC_MSG_RESULT(no)
1248     x_AFLAGS=[\#]
1250 AC_MSG_CHECKING(for explicit CFLAGS)
1251 if test -n "$CFLAGS"; then
1252     AC_MSG_RESULT([$CFLAGS])
1253     x_CFLAGS=
1254 else
1255     AC_MSG_RESULT(no)
1256     x_CFLAGS=[\#]
1258 AC_MSG_CHECKING(for explicit CXXFLAGS)
1259 if test -n "$CXXFLAGS"; then
1260     AC_MSG_RESULT([$CXXFLAGS])
1261     x_CXXFLAGS=
1262 else
1263     AC_MSG_RESULT(no)
1264     x_CXXFLAGS=[\#]
1266 AC_MSG_CHECKING(for explicit OBJCFLAGS)
1267 if test -n "$OBJCFLAGS"; then
1268     AC_MSG_RESULT([$OBJCFLAGS])
1269     x_OBJCFLAGS=
1270 else
1271     AC_MSG_RESULT(no)
1272     x_OBJCFLAGS=[\#]
1274 AC_MSG_CHECKING(for explicit OBJCXXFLAGS)
1275 if test -n "$OBJCXXFLAGS"; then
1276     AC_MSG_RESULT([$OBJCXXFLAGS])
1277     x_OBJCXXFLAGS=
1278 else
1279     AC_MSG_RESULT(no)
1280     x_OBJCXXFLAGS=[\#]
1282 AC_MSG_CHECKING(for explicit LDFLAGS)
1283 if test -n "$LDFLAGS"; then
1284     AC_MSG_RESULT([$LDFLAGS])
1285     x_LDFLAGS=
1286 else
1287     AC_MSG_RESULT(no)
1288     x_LDFLAGS=[\#]
1290 AC_SUBST(AFLAGS)
1291 AC_SUBST(CFLAGS)
1292 AC_SUBST(CXXFLAGS)
1293 AC_SUBST(OBJCFLAGS)
1294 AC_SUBST(OBJCXXFLAGS)
1295 AC_SUBST(LDFLAGS)
1296 AC_SUBST(x_AFLAGS)
1297 AC_SUBST(x_CFLAGS)
1298 AC_SUBST(x_CXXFLAGS)
1299 AC_SUBST(x_OBJCFLAGS)
1300 AC_SUBST(x_OBJCXXFLAGS)
1301 AC_SUBST(x_LDFLAGS)
1303 dnl These are potentially set for MSVC, in the code checking for UCRT below:
1304 my_original_CFLAGS=$CFLAGS
1305 my_original_CXXFLAGS=$CXXFLAGS
1306 my_original_CPPFLAGS=$CPPFLAGS
1308 dnl The following checks for gcc, cc and then cl (if it weren't guarded for win32)
1309 dnl Needs to precede the AC_C_BIGENDIAN and AC_SEARCH_LIBS calls below, which apparently call
1310 dnl AC_PROG_CC internally.
1311 if test "$_os" != "WINNT"; then
1312     # AC_PROG_CC sets CFLAGS to -g -O2 if not set, avoid that
1313     save_CFLAGS=$CFLAGS
1314     AC_PROG_CC
1315     CFLAGS=$save_CFLAGS
1316     if test -z "$CC_BASE"; then
1317         CC_BASE=`first_arg_basename "$CC"`
1318     fi
1321 if test "$_os" != "WINNT"; then
1322     AC_C_BIGENDIAN([ENDIANNESS=big], [ENDIANNESS=little])
1323 else
1324     ENDIANNESS=little
1326 AC_SUBST(ENDIANNESS)
1328 if test $_os != "WINNT"; then
1329     save_LIBS="$LIBS"
1330     AC_SEARCH_LIBS([dlsym], [dl],
1331         [case "$ac_cv_search_dlsym" in -l*) DLOPEN_LIBS="$ac_cv_search_dlsym";; esac],
1332         [AC_MSG_ERROR([dlsym not found in either libc nor libdl])])
1333     LIBS="$save_LIBS"
1335 AC_SUBST(DLOPEN_LIBS)
1337 # Check for a (GNU) backtrace implementation
1338 AC_ARG_VAR([BACKTRACE_CFLAGS], [Compiler flags needed to use backtrace(3)])
1339 AC_ARG_VAR([BACKTRACE_LIBS], [Linker flags needed to use backtrace(3)])
1340 AS_IF([test "x$BACKTRACE_LIBS$BACKTRACE_CFLAGS" = x], [
1341     save_LIBS="$LIBS"
1342     AC_SEARCH_LIBS([backtrace], [libexecinfo],
1343         [case "$ac_cv_search_backtrace" in -l*) BACKTRACE_LIBS="$ac_cv_search_backtrace";; esac],
1344         [PKG_CHECK_MODULES([BACKTRACE], [libexecinfo], [ac_cv_search_backtrace=], [:])])
1345     LIBS="$save_LIBS"
1347 AS_IF([test "x$ac_cv_search_backtrace" != xno ], [
1348     AC_DEFINE([HAVE_FEATURE_BACKTRACE])
1351 dnl ===================================================================
1352 dnl Sanity checks for Emscripten SDK setup
1353 dnl ===================================================================
1355 if test "$_os" = "Emscripten"; then
1356     EMSCRIPTEN_ERROR=0
1357     if ! which emconfigure >/dev/null 2>&1; then
1358         AC_MSG_WARN([emconfigure must be in your \$PATH])
1359         EMSCRIPTEN_ERROR=1
1360     fi
1361     if test -z "$EMMAKEN_JUST_CONFIGURE"; then
1362         AC_MSG_WARN(["\$EMMAKEN_JUST_CONFIGURE wasn't set by emconfigure. Prefix configure or use autogen.sh])
1363         EMSCRIPTEN_ERROR=1
1364     fi
1365     if test $EMSCRIPTEN_ERROR -ne 0; then
1366         AC_MSG_ERROR(["Please fix your EMSDK setup to build with Emscripten!"])
1367     fi
1370 ###############################################################################
1371 # Extensions switches --enable/--disable
1372 ###############################################################################
1373 # By default these should be enabled unless having extra dependencies.
1374 # If there is extra dependency over configure options then the enable should
1375 # be automagic based on whether the requiring feature is enabled or not.
1376 # All this options change anything only with --enable-extension-integration.
1378 # The name of this option and its help string makes it sound as if
1379 # extensions are built anyway, just not integrated in the installer,
1380 # if you use --disable-extension-integration. Is that really the
1381 # case?
1383 AC_ARG_ENABLE(ios-simulator,
1384     AS_HELP_STRING([--enable-ios-simulator],
1385         [build for iOS simulator])
1388 libo_FUZZ_ARG_ENABLE(extension-integration,
1389     AS_HELP_STRING([--disable-extension-integration],
1390         [Disable integration of the built extensions in the installer of the
1391          product. Use this switch to disable the integration.])
1394 AC_ARG_ENABLE(avmedia,
1395     AS_HELP_STRING([--disable-avmedia],
1396         [Disable displaying and inserting AV media in documents. Work in progress, use only if you are hacking on it.])
1399 AC_ARG_ENABLE(database-connectivity,
1400     AS_HELP_STRING([--disable-database-connectivity],
1401         [Disable various database connectivity. Work in progress, use only if you are hacking on it.])
1404 # This doesn't mean not building (or "integrating") extensions
1405 # (although it probably should; i.e. it should imply
1406 # --disable-extension-integration I guess), it means not supporting
1407 # any extension mechanism at all
1408 libo_FUZZ_ARG_ENABLE(extensions,
1409     AS_HELP_STRING([--disable-extensions],
1410         [Disable all add-on extension functionality. Work in progress, use only if you are hacking on it.])
1413 AC_ARG_ENABLE(scripting,
1414     AS_HELP_STRING([--disable-scripting],
1415         [Disable BASIC, Java and Python. Work in progress, use only if you are hacking on it.])
1418 # This is mainly for Android and iOS, but could potentially be used in some
1419 # special case otherwise, too, so factored out as a separate setting
1421 AC_ARG_ENABLE(dynamic-loading,
1422     AS_HELP_STRING([--disable-dynamic-loading],
1423         [Disable any use of dynamic loading of code. Work in progress, use only if you are hacking on it.])
1426 libo_FUZZ_ARG_ENABLE(report-builder,
1427     AS_HELP_STRING([--disable-report-builder],
1428         [Disable the Report Builder.])
1431 libo_FUZZ_ARG_ENABLE(ext-wiki-publisher,
1432     AS_HELP_STRING([--enable-ext-wiki-publisher],
1433         [Enable the Wiki Publisher extension.])
1436 libo_FUZZ_ARG_ENABLE(lpsolve,
1437     AS_HELP_STRING([--disable-lpsolve],
1438         [Disable compilation of the lp solve solver ])
1440 libo_FUZZ_ARG_ENABLE(coinmp,
1441     AS_HELP_STRING([--disable-coinmp],
1442         [Disable compilation of the CoinMP solver ])
1445 libo_FUZZ_ARG_ENABLE(pdfimport,
1446     AS_HELP_STRING([--disable-pdfimport],
1447         [Disable building the PDF import feature.])
1450 libo_FUZZ_ARG_ENABLE(pdfium,
1451     AS_HELP_STRING([--disable-pdfium],
1452         [Disable building PDFium. Results in unsecure PDF signature verification.])
1455 libo_FUZZ_ARG_ENABLE(skia,
1456     AS_HELP_STRING([--disable-skia],
1457         [Disable building Skia. Use --enable-skia=debug to build without optimizations.])
1460 ###############################################################################
1462 dnl ---------- *** ----------
1464 libo_FUZZ_ARG_ENABLE(mergelibs,
1465     AS_HELP_STRING([--enable-mergelibs],
1466         [Merge several of the smaller libraries into one big, "merged", one.])
1469 libo_FUZZ_ARG_ENABLE(breakpad,
1470     AS_HELP_STRING([--enable-breakpad],
1471         [Enables breakpad for crash reporting.])
1474 libo_FUZZ_ARG_ENABLE(crashdump,
1475     AS_HELP_STRING([--disable-crashdump],
1476         [Disable dump.ini and dump-file, when --enable-breakpad])
1479 AC_ARG_ENABLE(fetch-external,
1480     AS_HELP_STRING([--disable-fetch-external],
1481         [Disables fetching external tarballs from web sources.])
1484 AC_ARG_ENABLE(fuzzers,
1485     AS_HELP_STRING([--enable-fuzzers],
1486         [Enables building libfuzzer targets for fuzz testing.])
1489 libo_FUZZ_ARG_ENABLE(pch,
1490     AS_HELP_STRING([--enable-pch=<yes/no/system/base/normal/full>],
1491         [Enables precompiled header support for C++. Forced default on Windows/VC build.
1492          Using 'system' will include only external headers, 'base' will add also headers
1493          from base modules, 'normal' will also add all headers except from the module built,
1494          'full' will use all suitable headers even from a module itself.])
1497 libo_FUZZ_ARG_ENABLE(epm,
1498     AS_HELP_STRING([--enable-epm],
1499         [LibreOffice includes self-packaging code, that requires epm, however epm is
1500          useless for large scale package building.])
1503 libo_FUZZ_ARG_ENABLE(odk,
1504     AS_HELP_STRING([--enable-odk],
1505         [Enable building the Office Development Kit, the part that extensions need to build against])
1508 AC_ARG_ENABLE(mpl-subset,
1509     AS_HELP_STRING([--enable-mpl-subset],
1510         [Don't compile any pieces which are not MPL or more liberally licensed])
1513 libo_FUZZ_ARG_ENABLE(evolution2,
1514     AS_HELP_STRING([--enable-evolution2],
1515         [Allows the built-in evolution 2 addressbook connectivity build to be
1516          enabled.])
1519 AC_ARG_ENABLE(avahi,
1520     AS_HELP_STRING([--enable-avahi],
1521         [Determines whether to use Avahi to advertise Impress to remote controls.])
1524 libo_FUZZ_ARG_ENABLE(werror,
1525     AS_HELP_STRING([--enable-werror],
1526         [Turn warnings to errors. (Has no effect in modules where the treating
1527          of warnings as errors is disabled explicitly.)]),
1530 libo_FUZZ_ARG_ENABLE(assert-always-abort,
1531     AS_HELP_STRING([--enable-assert-always-abort],
1532         [make assert() failures abort even when building without --enable-debug or --enable-dbgutil.]),
1535 libo_FUZZ_ARG_ENABLE(dbgutil,
1536     AS_HELP_STRING([--enable-dbgutil],
1537         [Provide debugging support from --enable-debug and include additional debugging
1538          utilities such as object counting or more expensive checks.
1539          This is the recommended option for developers.
1540          Note that this makes the build ABI incompatible, it is not possible to mix object
1541          files or libraries from a --enable-dbgutil and a --disable-dbgutil build.]))
1543 libo_FUZZ_ARG_ENABLE(debug,
1544     AS_HELP_STRING([--enable-debug],
1545         [Include debugging information, disable compiler optimization and inlining plus
1546          extra debugging code like assertions. Extra large build! (enables -g compiler flag).]))
1548 libo_FUZZ_ARG_ENABLE(split-debug,
1549     AS_HELP_STRING([--disable-split-debug],
1550         [Disable using split debug information (-gsplit-dwarf compile flag). Split debug information
1551          saves disk space and build time, but requires tools that support it (both build tools and debuggers).]))
1553 libo_FUZZ_ARG_ENABLE(gdb-index,
1554     AS_HELP_STRING([--disable-gdb-index],
1555         [Disables creating debug information in the gdb index format, which makes gdb start faster.
1556          The feature requires the gold or lld linker.]))
1558 libo_FUZZ_ARG_ENABLE(sal-log,
1559     AS_HELP_STRING([--enable-sal-log],
1560         [Make SAL_INFO and SAL_WARN calls do something even in a non-debug build.]))
1562 libo_FUZZ_ARG_ENABLE(symbols,
1563     AS_HELP_STRING([--enable-symbols],
1564         [Generate debug information.
1565          By default, enabled for --enable-debug and --enable-dbgutil, disabled
1566          otherwise. It is possible to explicitly specify gbuild build targets
1567          (where 'all' means everything, '-' prepended means to not enable, '/' appended means
1568          everything in the directory; there is no ordering, more specific overrides
1569          more general, and disabling takes precedence).
1570          Example: --enable-symbols="all -sw/ -Library_sc".]))
1572 libo_FUZZ_ARG_ENABLE(optimized,
1573     AS_HELP_STRING([--enable-optimized=<yes/no/debug>],
1574         [Whether to compile with optimization flags.
1575          By default, disabled for --enable-debug and --enable-dbgutil, enabled
1576          otherwise. Using 'debug' will try to use only optimizations that should
1577          not interfere with debugging. For Emscripten we default to optimized (-O1)
1578          debug build, as otherwise binaries become too large.]))
1580 libo_FUZZ_ARG_ENABLE(runtime-optimizations,
1581     AS_HELP_STRING([--disable-runtime-optimizations],
1582         [Statically disable certain runtime optimizations (like rtl/alloc.h or
1583          JVM JIT) that are known to interact badly with certain dynamic analysis
1584          tools (like -fsanitize=address or Valgrind).  By default, disabled iff
1585          CC contains "-fsanitize=*".  (For Valgrind, those runtime optimizations
1586          are typically disabled dynamically via RUNNING_ON_VALGRIND.)]))
1588 AC_ARG_WITH(valgrind,
1589     AS_HELP_STRING([--with-valgrind],
1590         [Make availability of Valgrind headers a hard requirement.]))
1592 libo_FUZZ_ARG_ENABLE(compiler-plugins,
1593     AS_HELP_STRING([--enable-compiler-plugins],
1594         [Enable compiler plugins that will perform additional checks during
1595          building. Enabled automatically by --enable-dbgutil.
1596          Use --enable-compiler-plugins=debug to also enable debug code in the plugins.]))
1597 COMPILER_PLUGINS_DEBUG=
1598 if test "$enable_compiler_plugins" = debug; then
1599     enable_compiler_plugins=yes
1600     COMPILER_PLUGINS_DEBUG=TRUE
1603 libo_FUZZ_ARG_ENABLE(compiler-plugins-analyzer-pch,
1604     AS_HELP_STRING([--disable-compiler-plugins-analyzer-pch],
1605         [Disable use of precompiled headers when running the Clang compiler plugin analyzer.  Not
1606          relevant in the --disable-compiler-plugins case.]))
1608 libo_FUZZ_ARG_ENABLE(ooenv,
1609     AS_HELP_STRING([--enable-ooenv],
1610         [Enable ooenv for the instdir installation.]))
1612 AC_ARG_ENABLE(lto,
1613     AS_HELP_STRING([--enable-lto],
1614         [Enable link-time optimization. Suitable for (optimised) product builds. Building might take
1615          longer but libraries and executables are optimized for speed. For GCC, best to use the 'gold'
1616          linker.)]))
1618 AC_ARG_ENABLE(python,
1619     AS_HELP_STRING([--enable-python=<no/auto/system/internal/fully-internal>],
1620         [Enables or disables Python support at run-time.
1621          Also specifies what Python to use at build-time.
1622          'fully-internal' even forces the internal version for uses of Python
1623          during the build.
1624          On macOS the only choices are
1625          'internal' (default) or 'fully-internal'. Otherwise the default is 'auto'.
1626          ]))
1628 libo_FUZZ_ARG_ENABLE(gtk3,
1629     AS_HELP_STRING([--disable-gtk3],
1630         [Determines whether to use Gtk+ 3.0 vclplug on platforms where Gtk+ 3.0 is available.]),
1631 ,test "${enable_gtk3+set}" = set || enable_gtk3=yes)
1633 AC_ARG_ENABLE(gtk4,
1634     AS_HELP_STRING([--enable-gtk4],
1635         [Determines whether to use Gtk+ 4.0 vclplug on platforms where Gtk+ 4.0 is available.]))
1637 AC_ARG_ENABLE(introspection,
1638     AS_HELP_STRING([--enable-introspection],
1639         [Generate files for GObject introspection.  Requires --enable-gtk3.  (Typically used by
1640          Linux distributions.)]))
1642 AC_ARG_ENABLE(split-app-modules,
1643     AS_HELP_STRING([--enable-split-app-modules],
1644         [Split file lists for app modules, e.g. base, calc.
1645          Has effect only with make distro-pack-install]),
1648 AC_ARG_ENABLE(split-opt-features,
1649     AS_HELP_STRING([--enable-split-opt-features],
1650         [Split file lists for some optional features, e.g. pyuno, testtool.
1651          Has effect only with make distro-pack-install]),
1654 libo_FUZZ_ARG_ENABLE(cairo-canvas,
1655     AS_HELP_STRING([--disable-cairo-canvas],
1656         [Determines whether to build the Cairo canvas on platforms where Cairo is available.]),
1659 libo_FUZZ_ARG_ENABLE(dbus,
1660     AS_HELP_STRING([--disable-dbus],
1661         [Determines whether to enable features that depend on dbus.
1662          e.g. Presentation mode screensaver control, bluetooth presentation control, automatic font install]),
1663 ,test "${enable_dbus+set}" = set || enable_dbus=yes)
1665 libo_FUZZ_ARG_ENABLE(sdremote,
1666     AS_HELP_STRING([--disable-sdremote],
1667         [Determines whether to enable Impress remote control (i.e. the server component).]),
1668 ,test "${enable_sdremote+set}" = set || enable_sdremote=yes)
1670 libo_FUZZ_ARG_ENABLE(sdremote-bluetooth,
1671     AS_HELP_STRING([--disable-sdremote-bluetooth],
1672         [Determines whether to build sdremote with bluetooth support.
1673          Requires dbus on Linux.]))
1675 libo_FUZZ_ARG_ENABLE(gio,
1676     AS_HELP_STRING([--disable-gio],
1677         [Determines whether to use the GIO support.]),
1678 ,test "${enable_gio+set}" = set || enable_gio=yes)
1680 AC_ARG_ENABLE(qt5,
1681     AS_HELP_STRING([--enable-qt5],
1682         [Determines whether to use Qt5 vclplug on platforms where Qt5 is
1683          available.]),
1686 AC_ARG_ENABLE(qt6,
1687     AS_HELP_STRING([--enable-qt6],
1688         [Determines whether to use Qt6 vclplug on platforms where Qt6 is
1689          available.]),
1692 AC_ARG_ENABLE(kf5,
1693     AS_HELP_STRING([--enable-kf5],
1694         [Determines whether to use Qt5/KF5 vclplug on platforms where Qt5 and
1695          KF5 are available.]),
1698 AC_ARG_ENABLE(gtk3_kde5,
1699     AS_HELP_STRING([--enable-gtk3-kde5],
1700         [Determines whether to use Gtk3 vclplug with KF5 file dialogs on
1701          platforms where Gtk3, Qt5 and Plasma is available.]),
1704 AC_ARG_ENABLE(gui,
1705     AS_HELP_STRING([--disable-gui],
1706         [Disable use of X11 or Wayland to reduce dependencies (e.g. for building LibreOfficeKit).]),
1707 ,enable_gui=yes)
1709 libo_FUZZ_ARG_ENABLE(randr,
1710     AS_HELP_STRING([--disable-randr],
1711         [Disable RandR support in the vcl project.]),
1712 ,test "${enable_randr+set}" = set || enable_randr=yes)
1714 libo_FUZZ_ARG_ENABLE(gstreamer-1-0,
1715     AS_HELP_STRING([--disable-gstreamer-1-0],
1716         [Disable building with the gstreamer 1.0 avmedia backend.]),
1717 ,test "${enable_gstreamer_1_0+set}" = set || enable_gstreamer_1_0=yes)
1719 libo_FUZZ_ARG_ENABLE([eot],
1720     [AS_HELP_STRING([--enable-eot],
1721         [Enable support for Embedded OpenType fonts.])],
1722 ,test "${enable_eot+set}" = set || enable_eot=no)
1724 libo_FUZZ_ARG_ENABLE(cve-tests,
1725     AS_HELP_STRING([--disable-cve-tests],
1726         [Prevent CVE tests to be executed]),
1729 libo_FUZZ_ARG_ENABLE(chart-tests,
1730     AS_HELP_STRING([--enable-chart-tests],
1731         [Executes chart XShape tests. In a perfect world these tests would be
1732          stable and everyone could run them, in reality it is best to run them
1733          only on a few machines that are known to work and maintained by people
1734          who can judge if a test failure is a regression or not.]),
1737 AC_ARG_ENABLE(build-opensymbol,
1738     AS_HELP_STRING([--enable-build-opensymbol],
1739         [Do not use the prebuilt opens___.ttf. Build it instead. This needs
1740          fontforge installed.]),
1743 AC_ARG_ENABLE(dependency-tracking,
1744     AS_HELP_STRING([--enable-dependency-tracking],
1745         [Do not reject slow dependency extractors.])[
1746   --disable-dependency-tracking
1747                           Disables generation of dependency information.
1748                           Speed up one-time builds.],
1751 AC_ARG_ENABLE(icecream,
1752     AS_HELP_STRING([--enable-icecream],
1753         [Use the 'icecream' distributed compiling tool to speedup the compilation.
1754          It defaults to /opt/icecream for the location of the icecream gcc/g++
1755          wrappers, you can override that using --with-gcc-home=/the/path switch.]),
1758 AC_ARG_ENABLE(ld,
1759     AS_HELP_STRING([--enable-ld=<linker>],
1760         [Use the specified linker. Both 'gold' and 'lld' linkers generally use less memory and link faster.
1761          By default tries to use the best linker possible, use --disable-ld to use the default linker.
1762          If <linker> contains any ':', the part before the first ':' is used as the value of
1763          -fuse-ld, while the part after the first ':' is used as the value of --ld-path (which is
1764          needed for Clang 12).]),
1767 libo_FUZZ_ARG_ENABLE(cups,
1768     AS_HELP_STRING([--disable-cups],
1769         [Do not build cups support.])
1772 AC_ARG_ENABLE(ccache,
1773     AS_HELP_STRING([--disable-ccache],
1774         [Do not try to use ccache automatically.
1775          By default we will try to detect if ccache is available; in that case if
1776          CC/CXX are not yet set, and --enable-icecream is not given, we
1777          attempt to use ccache. --disable-ccache disables ccache completely.
1778          Additionally ccache's depend mode is enabled if possible,
1779          use --enable-ccache=nodepend to enable ccache without depend mode.
1783 AC_ARG_ENABLE(z7-debug,
1784     AS_HELP_STRING([--enable-z7-debug],
1785         [Makes the MSVC compiler use -Z7 for debugging instead of the default -Zi. Using this option takes
1786          more disk spaces but allows to use ccache. Final PDB files are created even with this option enabled.
1787          Enabled by default if ccache is detected.]))
1789 libo_FUZZ_ARG_ENABLE(online-update,
1790     AS_HELP_STRING([--enable-online-update],
1791         [Enable the online update service that will check for new versions of
1792          LibreOffice. Disabled by default. Requires --with-privacy-policy-url to be set.
1793          If the value is "mar", the experimental Mozilla-like update will be
1794          enabled instead of the traditional update mechanism.]),
1797 AC_ARG_WITH(update-config,
1798     AS_HELP_STRING([--with-update-config=/tmp/update.ini],
1799                    [Path to the update config ini file]))
1801 libo_FUZZ_ARG_ENABLE(extension-update,
1802     AS_HELP_STRING([--disable-extension-update],
1803         [Disable possibility to update installed extensions.]),
1806 libo_FUZZ_ARG_ENABLE(release-build,
1807     AS_HELP_STRING([--enable-release-build],
1808         [Enable release build. Note that the "release build" choice is orthogonal to
1809          whether symbols are present, debug info is generated, or optimization
1810          is done.
1811          See http://wiki.documentfoundation.org/Development/DevBuild]),
1814 AC_ARG_ENABLE(windows-build-signing,
1815     AS_HELP_STRING([--enable-windows-build-signing],
1816         [Enable signing of windows binaries (*.exe, *.dll)]),
1819 AC_ARG_ENABLE(silent-msi,
1820     AS_HELP_STRING([--enable-silent-msi],
1821         [Enable MSI with LIMITUI=1 (silent install).]),
1824 AC_ARG_ENABLE(macosx-code-signing,
1825     AS_HELP_STRING([--enable-macosx-code-signing=<identity>],
1826         [Sign executables, dylibs, frameworks and the app bundle. If you
1827          don't provide an identity the first suitable certificate
1828          in your keychain is used.]),
1831 AC_ARG_ENABLE(macosx-package-signing,
1832     AS_HELP_STRING([--enable-macosx-package-signing=<identity>],
1833         [Create a .pkg suitable for uploading to the Mac App Store and sign
1834          it. If you don't provide an identity the first suitable certificate
1835          in your keychain is used.]),
1838 AC_ARG_ENABLE(macosx-sandbox,
1839     AS_HELP_STRING([--enable-macosx-sandbox],
1840         [Make the app bundle run in a sandbox. Requires code signing.
1841          Is required by apps distributed in the Mac App Store, and implies
1842          adherence to App Store rules.]),
1845 AC_ARG_WITH(macosx-bundle-identifier,
1846     AS_HELP_STRING([--with-macosx-bundle-identifier=tld.mumble.orifice.TheOffice],
1847         [Define the macOS bundle identifier. Default is the somewhat weird
1848          org.libreoffice.script ("script", huh?).]),
1849 ,with_macosx_bundle_identifier=org.libreoffice.script)
1851 AC_ARG_WITH(product-name,
1852     AS_HELP_STRING([--with-product-name='My Own Office Suite'],
1853         [Define the product name. Default is AC_PACKAGE_NAME.]),
1854 ,with_product_name=$PRODUCTNAME)
1856 libo_FUZZ_ARG_ENABLE(community-flavor,
1857     AS_HELP_STRING([--disable-community-flavor],
1858         [Disable the Community branding.]),
1861 AC_ARG_WITH(package-version,
1862     AS_HELP_STRING([--with-package-version='3.1.4.5'],
1863         [Define the package version. Default is AC_PACKAGE_VERSION. Use only if you distribute an own build for macOS.]),
1866 libo_FUZZ_ARG_ENABLE(readonly-installset,
1867     AS_HELP_STRING([--enable-readonly-installset],
1868         [Prevents any attempts by LibreOffice to write into its installation. That means
1869          at least that no "system-wide" extensions can be added. Partly experimental work in
1870          progress, probably not fully implemented. Always enabled for macOS.]),
1873 libo_FUZZ_ARG_ENABLE(mariadb-sdbc,
1874     AS_HELP_STRING([--disable-mariadb-sdbc],
1875         [Disable the build of the MariaDB/MySQL-SDBC driver.])
1878 libo_FUZZ_ARG_ENABLE(postgresql-sdbc,
1879     AS_HELP_STRING([--disable-postgresql-sdbc],
1880         [Disable the build of the PostgreSQL-SDBC driver.])
1883 libo_FUZZ_ARG_ENABLE(lotuswordpro,
1884     AS_HELP_STRING([--disable-lotuswordpro],
1885         [Disable the build of the Lotus Word Pro filter.]),
1886 ,test "${enable_lotuswordpro+set}" = set || enable_lotuswordpro=yes)
1888 libo_FUZZ_ARG_ENABLE(firebird-sdbc,
1889     AS_HELP_STRING([--disable-firebird-sdbc],
1890         [Disable the build of the Firebird-SDBC driver if it doesn't compile for you.]),
1891 ,test "${enable_firebird_sdbc+set}" = set || enable_firebird_sdbc=yes)
1893 AC_ARG_ENABLE(bogus-pkg-config,
1894     AS_HELP_STRING([--enable-bogus-pkg-config],
1895         [MACOSX only: on MacOSX pkg-config can cause trouble. by default if one is found in the PATH, an error is issued. This flag turn that error into a warning.]),
1898 AC_ARG_ENABLE(openssl,
1899     AS_HELP_STRING([--disable-openssl],
1900         [Disable using libssl/libcrypto from OpenSSL. If disabled,
1901          components will either use GNUTLS or NSS. Work in progress,
1902          use only if you are hacking on it.]),
1903 ,enable_openssl=yes)
1905 libo_FUZZ_ARG_ENABLE(cipher-openssl-backend,
1906     AS_HELP_STRING([--enable-cipher-openssl-backend],
1907         [Enable using OpenSSL as the actual implementation of the rtl/cipher.h functionality.
1908          Requires --enable-openssl.]))
1910 AC_ARG_ENABLE(nss,
1911     AS_HELP_STRING([--disable-nss],
1912         [Disable using NSS. If disabled,
1913          components will either use GNUTLS or openssl. Work in progress,
1914          use only if you are hacking on it.]),
1915 ,enable_nss=yes)
1917 AC_ARG_ENABLE(library-bin-tar,
1918     AS_HELP_STRING([--enable-library-bin-tar],
1919         [Enable the building and reused of tarball of binary build for some 'external' libraries.
1920         Some libraries can save their build result in a tarball
1921         stored in TARFILE_LOCATION. That binary tarball is
1922         uniquely identified by the source tarball,
1923         the content of the config_host.mk file and the content
1924         of the top-level directory in core for that library
1925         If this option is enabled, then if such a tarfile exist, it will be untarred
1926         instead of the source tarfile, and the build step will be skipped for that
1927         library.
1928         If a proper tarfile does not exist, then the normal source-based
1929         build is done for that library and a proper binary tarfile is created
1930         for the next time.]),
1933 AC_ARG_ENABLE(dconf,
1934     AS_HELP_STRING([--disable-dconf],
1935         [Disable the dconf configuration backend (enabled by default where
1936          available).]))
1938 libo_FUZZ_ARG_ENABLE(formula-logger,
1939     AS_HELP_STRING(
1940         [--enable-formula-logger],
1941         [Enable formula logger for logging formula calculation flow in Calc.]
1942     )
1945 AC_ARG_ENABLE(ldap,
1946     AS_HELP_STRING([--disable-ldap],
1947         [Disable LDAP support.]),
1948 ,enable_ldap=yes)
1950 AC_ARG_ENABLE(opencl,
1951     AS_HELP_STRING([--disable-opencl],
1952         [Disable OpenCL support.]),
1953 ,enable_opencl=yes)
1955 libo_FUZZ_ARG_ENABLE(librelogo,
1956     AS_HELP_STRING([--disable-librelogo],
1957         [Do not build LibreLogo.]),
1958 ,enable_librelogo=yes)
1960 AC_ARG_ENABLE(cmis,
1961     AS_HELP_STRING([--disable-cmis],
1962         [Disable CMIS support.]),
1963 ,enable_cmis=yes)
1965 AC_ARG_ENABLE(curl,
1966     AS_HELP_STRING([--disable-curl],
1967         [Disable CURL support.]),
1968 ,enable_curl=yes)
1970 AC_ARG_ENABLE(wasm-strip,
1971     AS_HELP_STRING([--enable-wasm-strip],
1972         [Strip the static build like for WASM/emscripten platform.]),
1973 ,enable_wasm_strip=yes)
1975 AC_ARG_ENABLE(xmlhelp,
1976     AS_HELP_STRING([--disable-xmlhelp],
1977         [Disable XML help support]),
1978 ,enable_xmlhelp=yes)
1981 dnl ===================================================================
1982 dnl Optional Packages (--with/without-)
1983 dnl ===================================================================
1985 AC_ARG_WITH(gcc-home,
1986     AS_HELP_STRING([--with-gcc-home],
1987         [Specify the location of gcc/g++ manually. This can be used in conjunction
1988          with --enable-icecream when icecream gcc/g++ wrappers are installed in a
1989          non-default path.]),
1992 AC_ARG_WITH(gnu-patch,
1993     AS_HELP_STRING([--with-gnu-patch],
1994         [Specify location of GNU patch on Solaris or FreeBSD.]),
1997 AC_ARG_WITH(build-platform-configure-options,
1998     AS_HELP_STRING([--with-build-platform-configure-options],
1999         [Specify options for the configure script run for the *build* platform in a cross-compilation]),
2002 AC_ARG_WITH(gnu-cp,
2003     AS_HELP_STRING([--with-gnu-cp],
2004         [Specify location of GNU cp on Solaris or FreeBSD.]),
2007 AC_ARG_WITH(external-tar,
2008     AS_HELP_STRING([--with-external-tar=<TARFILE_PATH>],
2009         [Specify an absolute path of where to find (and store) tarfiles.]),
2010     TARFILE_LOCATION=$withval ,
2013 AC_ARG_WITH(referenced-git,
2014     AS_HELP_STRING([--with-referenced-git=<OTHER_CHECKOUT_DIR>],
2015         [Specify another checkout directory to reference. This makes use of
2016                  git submodule update --reference, and saves a lot of diskspace
2017                  when having multiple trees side-by-side.]),
2018     GIT_REFERENCE_SRC=$withval ,
2021 AC_ARG_WITH(linked-git,
2022     AS_HELP_STRING([--with-linked-git=<submodules repo basedir>],
2023         [Specify a directory where the repositories of submodules are located.
2024          This uses a method similar to git-new-workdir to get submodules.]),
2025     GIT_LINK_SRC=$withval ,
2028 AC_ARG_WITH(galleries,
2029     AS_HELP_STRING([--with-galleries],
2030         [Specify how galleries should be built. It is possible either to
2031          build these internally from source ("build"),
2032          or to disable them ("no")]),
2035 AC_ARG_WITH(theme,
2036     AS_HELP_STRING([--with-theme="theme1 theme2..."],
2037         [Choose which themes to include. By default those themes with an '*' are included.
2038          Possible choices: *breeze, *breeze_dark, *breeze_dark_svg, *breeze_svg, *colibre, *colibre_svg, *elementary,
2039          *elementary_svg, *karasa_jaga, *karasa_jaga_svg, *sifr, *sifr_dark, *sifr_dark_svg, *sifr_svg, *sukapura, *sukapura_svg.]),
2042 libo_FUZZ_ARG_WITH(helppack-integration,
2043     AS_HELP_STRING([--without-helppack-integration],
2044         [It will not integrate the helppacks to the installer
2045          of the product. Please use this switch to use the online help
2046          or separate help packages.]),
2049 libo_FUZZ_ARG_WITH(fonts,
2050     AS_HELP_STRING([--without-fonts],
2051         [LibreOffice includes some third-party fonts to provide a reliable basis for
2052          help content, templates, samples, etc. When these fonts are already
2053          known to be available on the system then you should use this option.]),
2056 AC_ARG_WITH(epm,
2057     AS_HELP_STRING([--with-epm],
2058         [Decides which epm to use. Default is to use the one from the system if
2059          one is built. When either this is not there or you say =internal epm
2060          will be built.]),
2063 AC_ARG_WITH(package-format,
2064     AS_HELP_STRING([--with-package-format],
2065         [Specify package format(s) for LibreOffice installation sets. The
2066          implicit --without-package-format leads to no installation sets being
2067          generated. Possible values: aix, archive, bsd, deb, dmg,
2068          installed, msi, pkg, and rpm.
2069          Example: --with-package-format='deb rpm']),
2072 AC_ARG_WITH(tls,
2073     AS_HELP_STRING([--with-tls],
2074         [Decides which TLS/SSL and cryptographic implementations to use for
2075          LibreOffice's code. Notice that this doesn't apply for depending
2076          libraries like "neon", for example. Default is to use NSS
2077          although OpenSSL is also possible. Notice that selecting NSS restricts
2078          the usage of OpenSSL in LO's code but selecting OpenSSL doesn't
2079          restrict by now the usage of NSS in LO's code. Possible values:
2080          openssl, nss. Example: --with-tls="nss"]),
2083 AC_ARG_WITH(system-libs,
2084     AS_HELP_STRING([--with-system-libs],
2085         [Use libraries already on system -- enables all --with-system-* flags.]),
2088 AC_ARG_WITH(system-bzip2,
2089     AS_HELP_STRING([--with-system-bzip2],
2090         [Use bzip2 already on system. Used only when --enable-online-update=mar]),,
2091     [with_system_bzip2="$with_system_libs"])
2093 AC_ARG_WITH(system-headers,
2094     AS_HELP_STRING([--with-system-headers],
2095         [Use headers already on system -- enables all --with-system-* flags for
2096          external packages whose headers are the only entities used i.e.
2097          boost/odbc/sane-header(s).]),,
2098     [with_system_headers="$with_system_libs"])
2100 AC_ARG_WITH(system-jars,
2101     AS_HELP_STRING([--without-system-jars],
2102         [When building with --with-system-libs, also the needed jars are expected
2103          on the system. Use this to disable that]),,
2104     [with_system_jars="$with_system_libs"])
2106 AC_ARG_WITH(system-cairo,
2107     AS_HELP_STRING([--with-system-cairo],
2108         [Use cairo libraries already on system.  Happens automatically for
2109          (implicit) --enable-gtk3.]))
2111 AC_ARG_WITH(system-epoxy,
2112     AS_HELP_STRING([--with-system-epoxy],
2113         [Use epoxy libraries already on system.  Happens automatically for
2114          (implicit) --enable-gtk3.]),,
2115        [with_system_epoxy="$with_system_libs"])
2117 AC_ARG_WITH(myspell-dicts,
2118     AS_HELP_STRING([--with-myspell-dicts],
2119         [Adds myspell dictionaries to the LibreOffice installation set]),
2122 AC_ARG_WITH(system-dicts,
2123     AS_HELP_STRING([--without-system-dicts],
2124         [Do not use dictionaries from system paths.]),
2127 AC_ARG_WITH(external-dict-dir,
2128     AS_HELP_STRING([--with-external-dict-dir],
2129         [Specify external dictionary dir.]),
2132 AC_ARG_WITH(external-hyph-dir,
2133     AS_HELP_STRING([--with-external-hyph-dir],
2134         [Specify external hyphenation pattern dir.]),
2137 AC_ARG_WITH(external-thes-dir,
2138     AS_HELP_STRING([--with-external-thes-dir],
2139         [Specify external thesaurus dir.]),
2142 AC_ARG_WITH(system-zlib,
2143     AS_HELP_STRING([--with-system-zlib],
2144         [Use zlib already on system.]),,
2145     [with_system_zlib=auto])
2147 AC_ARG_WITH(system-jpeg,
2148     AS_HELP_STRING([--with-system-jpeg],
2149         [Use jpeg already on system.]),,
2150     [with_system_jpeg="$with_system_libs"])
2152 AC_ARG_WITH(system-clucene,
2153     AS_HELP_STRING([--with-system-clucene],
2154         [Use clucene already on system.]),,
2155     [with_system_clucene="$with_system_libs"])
2157 AC_ARG_WITH(system-expat,
2158     AS_HELP_STRING([--with-system-expat],
2159         [Use expat already on system.]),,
2160     [with_system_expat="$with_system_libs"])
2162 AC_ARG_WITH(system-libxml,
2163     AS_HELP_STRING([--with-system-libxml],
2164         [Use libxml/libxslt already on system.]),,
2165     [with_system_libxml=auto])
2167 AC_ARG_WITH(system-icu,
2168     AS_HELP_STRING([--with-system-icu],
2169         [Use icu already on system.]),,
2170     [with_system_icu="$with_system_libs"])
2172 AC_ARG_WITH(system-ucpp,
2173     AS_HELP_STRING([--with-system-ucpp],
2174         [Use ucpp already on system.]),,
2175     [])
2177 AC_ARG_WITH(system-openldap,
2178     AS_HELP_STRING([--with-system-openldap],
2179         [Use the OpenLDAP LDAP SDK already on system.]),,
2180     [with_system_openldap="$with_system_libs"])
2182 libo_FUZZ_ARG_ENABLE(poppler,
2183     AS_HELP_STRING([--disable-poppler],
2184         [Disable building Poppler.])
2187 AC_ARG_WITH(system-poppler,
2188     AS_HELP_STRING([--with-system-poppler],
2189         [Use system poppler (only needed for PDF import).]),,
2190     [with_system_poppler="$with_system_libs"])
2192 AC_ARG_WITH(system-abseil,
2193     AS_HELP_STRING([--with-system-abseil],
2194         [Use the abseil libraries already on system.]),,
2195     [with_system_abseil="$with_system_libs"])
2197 AC_ARG_WITH(system-openjpeg,
2198     AS_HELP_STRING([--with-system-openjpeg],
2199         [Use the OpenJPEG library already on system.]),,
2200     [with_system_openjpeg="$with_system_libs"])
2202 libo_FUZZ_ARG_ENABLE(gpgmepp,
2203     AS_HELP_STRING([--disable-gpgmepp],
2204         [Disable building gpgmepp. Do not use in normal cases unless you want to fix potential problems it causes.])
2207 AC_ARG_WITH(system-gpgmepp,
2208     AS_HELP_STRING([--with-system-gpgmepp],
2209         [Use gpgmepp already on system]),,
2210     [with_system_gpgmepp="$with_system_libs"])
2212 AC_ARG_WITH(system-mariadb,
2213     AS_HELP_STRING([--with-system-mariadb],
2214         [Use MariaDB/MySQL libraries already on system.]),,
2215     [with_system_mariadb="$with_system_libs"])
2217 AC_ARG_ENABLE(bundle-mariadb,
2218     AS_HELP_STRING([--enable-bundle-mariadb],
2219         [When using MariaDB/MySQL libraries already on system, bundle them with the MariaDB Connector/LibreOffice.])
2222 AC_ARG_WITH(system-postgresql,
2223     AS_HELP_STRING([--with-system-postgresql],
2224         [Use PostgreSQL libraries already on system, for building the PostgreSQL-SDBC
2225          driver. If pg_config is not in PATH, use PGCONFIG to point to it.]),,
2226     [with_system_postgresql="$with_system_libs"])
2228 AC_ARG_WITH(libpq-path,
2229     AS_HELP_STRING([--with-libpq-path=<absolute path to your libpq installation>],
2230         [Use this PostgreSQL C interface (libpq) installation for building
2231          the PostgreSQL-SDBC extension.]),
2234 AC_ARG_WITH(system-firebird,
2235     AS_HELP_STRING([--with-system-firebird],
2236         [Use Firebird libraries already on system, for building the Firebird-SDBC
2237          driver. If fb_config is not in PATH, use FBCONFIG to point to it.]),,
2238     [with_system_firebird="$with_system_libs"])
2240 AC_ARG_WITH(system-libtommath,
2241             AS_HELP_STRING([--with-system-libtommath],
2242                            [Use libtommath already on system]),,
2243             [with_system_libtommath="$with_system_libs"])
2245 AC_ARG_WITH(system-hsqldb,
2246     AS_HELP_STRING([--with-system-hsqldb],
2247         [Use hsqldb already on system.]))
2249 AC_ARG_WITH(hsqldb-jar,
2250     AS_HELP_STRING([--with-hsqldb-jar=JARFILE],
2251         [Specify path to jarfile manually.]),
2252     HSQLDB_JAR=$withval)
2254 libo_FUZZ_ARG_ENABLE(scripting-beanshell,
2255     AS_HELP_STRING([--disable-scripting-beanshell],
2256         [Disable support for scripts in BeanShell.]),
2260 AC_ARG_WITH(system-beanshell,
2261     AS_HELP_STRING([--with-system-beanshell],
2262         [Use beanshell already on system.]),,
2263     [with_system_beanshell="$with_system_jars"])
2265 AC_ARG_WITH(beanshell-jar,
2266     AS_HELP_STRING([--with-beanshell-jar=JARFILE],
2267         [Specify path to jarfile manually.]),
2268     BSH_JAR=$withval)
2270 libo_FUZZ_ARG_ENABLE(scripting-javascript,
2271     AS_HELP_STRING([--disable-scripting-javascript],
2272         [Disable support for scripts in JavaScript.]),
2276 AC_ARG_WITH(system-rhino,
2277     AS_HELP_STRING([--with-system-rhino],
2278         [Use rhino already on system.]),,)
2279 #    [with_system_rhino="$with_system_jars"])
2280 # Above is not used as we have different debug interface
2281 # patched into internal rhino. This code needs to be fixed
2282 # before we can enable it by default.
2284 AC_ARG_WITH(rhino-jar,
2285     AS_HELP_STRING([--with-rhino-jar=JARFILE],
2286         [Specify path to jarfile manually.]),
2287     RHINO_JAR=$withval)
2289 AC_ARG_WITH(system-jfreereport,
2290     AS_HELP_STRING([--with-system-jfreereport],
2291         [Use JFreeReport already on system.]),,
2292     [with_system_jfreereport="$with_system_jars"])
2294 AC_ARG_WITH(sac-jar,
2295     AS_HELP_STRING([--with-sac-jar=JARFILE],
2296         [Specify path to jarfile manually.]),
2297     SAC_JAR=$withval)
2299 AC_ARG_WITH(libxml-jar,
2300     AS_HELP_STRING([--with-libxml-jar=JARFILE],
2301         [Specify path to jarfile manually.]),
2302     LIBXML_JAR=$withval)
2304 AC_ARG_WITH(flute-jar,
2305     AS_HELP_STRING([--with-flute-jar=JARFILE],
2306         [Specify path to jarfile manually.]),
2307     FLUTE_JAR=$withval)
2309 AC_ARG_WITH(jfreereport-jar,
2310     AS_HELP_STRING([--with-jfreereport-jar=JARFILE],
2311         [Specify path to jarfile manually.]),
2312     JFREEREPORT_JAR=$withval)
2314 AC_ARG_WITH(liblayout-jar,
2315     AS_HELP_STRING([--with-liblayout-jar=JARFILE],
2316         [Specify path to jarfile manually.]),
2317     LIBLAYOUT_JAR=$withval)
2319 AC_ARG_WITH(libloader-jar,
2320     AS_HELP_STRING([--with-libloader-jar=JARFILE],
2321         [Specify path to jarfile manually.]),
2322     LIBLOADER_JAR=$withval)
2324 AC_ARG_WITH(libformula-jar,
2325     AS_HELP_STRING([--with-libformula-jar=JARFILE],
2326         [Specify path to jarfile manually.]),
2327     LIBFORMULA_JAR=$withval)
2329 AC_ARG_WITH(librepository-jar,
2330     AS_HELP_STRING([--with-librepository-jar=JARFILE],
2331         [Specify path to jarfile manually.]),
2332     LIBREPOSITORY_JAR=$withval)
2334 AC_ARG_WITH(libfonts-jar,
2335     AS_HELP_STRING([--with-libfonts-jar=JARFILE],
2336         [Specify path to jarfile manually.]),
2337     LIBFONTS_JAR=$withval)
2339 AC_ARG_WITH(libserializer-jar,
2340     AS_HELP_STRING([--with-libserializer-jar=JARFILE],
2341         [Specify path to jarfile manually.]),
2342     LIBSERIALIZER_JAR=$withval)
2344 AC_ARG_WITH(libbase-jar,
2345     AS_HELP_STRING([--with-libbase-jar=JARFILE],
2346         [Specify path to jarfile manually.]),
2347     LIBBASE_JAR=$withval)
2349 AC_ARG_WITH(system-odbc,
2350     AS_HELP_STRING([--with-system-odbc],
2351         [Use the odbc headers already on system.]),,
2352     [with_system_odbc="auto"])
2354 AC_ARG_WITH(system-sane,
2355     AS_HELP_STRING([--with-system-sane],
2356         [Use sane.h already on system.]),,
2357     [with_system_sane="$with_system_headers"])
2359 AC_ARG_WITH(system-bluez,
2360     AS_HELP_STRING([--with-system-bluez],
2361         [Use bluetooth.h already on system.]),,
2362     [with_system_bluez="$with_system_headers"])
2364 AC_ARG_WITH(system-curl,
2365     AS_HELP_STRING([--with-system-curl],
2366         [Use curl already on system.]),,
2367     [with_system_curl=auto])
2369 AC_ARG_WITH(system-boost,
2370     AS_HELP_STRING([--with-system-boost],
2371         [Use boost already on system.]),,
2372     [with_system_boost="$with_system_headers"])
2374 AC_ARG_WITH(system-cuckoo,
2375     AS_HELP_STRING([--with-system-cuckoo],
2376         [Use libcuckoo already on system.]),,
2377     [with_system_cuckoo="$with_system_headers"])
2379 AC_ARG_WITH(system-glm,
2380     AS_HELP_STRING([--with-system-glm],
2381         [Use glm already on system.]),,
2382     [with_system_glm="$with_system_headers"])
2384 AC_ARG_WITH(system-hunspell,
2385     AS_HELP_STRING([--with-system-hunspell],
2386         [Use libhunspell already on system.]),,
2387     [with_system_hunspell="$with_system_libs"])
2389 libo_FUZZ_ARG_ENABLE(zxing,
2390     AS_HELP_STRING([--disable-zxing],
2391        [Disable use of zxing external library.]))
2393 AC_ARG_WITH(system-zxing,
2394     AS_HELP_STRING([--with-system-zxing],
2395         [Use libzxing already on system.]),,
2396     [with_system_zxing="$with_system_libs"])
2398 AC_ARG_WITH(system-box2d,
2399     AS_HELP_STRING([--with-system-box2d],
2400         [Use box2d already on system.]),,
2401     [with_system_box2d="$with_system_libs"])
2403 AC_ARG_WITH(system-mythes,
2404     AS_HELP_STRING([--with-system-mythes],
2405         [Use mythes already on system.]),,
2406     [with_system_mythes="$with_system_libs"])
2408 AC_ARG_WITH(system-altlinuxhyph,
2409     AS_HELP_STRING([--with-system-altlinuxhyph],
2410         [Use ALTLinuxhyph already on system.]),,
2411     [with_system_altlinuxhyph="$with_system_libs"])
2413 AC_ARG_WITH(system-lpsolve,
2414     AS_HELP_STRING([--with-system-lpsolve],
2415         [Use lpsolve already on system.]),,
2416     [with_system_lpsolve="$with_system_libs"])
2418 AC_ARG_WITH(system-coinmp,
2419     AS_HELP_STRING([--with-system-coinmp],
2420         [Use CoinMP already on system.]),,
2421     [with_system_coinmp="$with_system_libs"])
2423 AC_ARG_WITH(system-liblangtag,
2424     AS_HELP_STRING([--with-system-liblangtag],
2425         [Use liblangtag library already on system.]),,
2426     [with_system_liblangtag="$with_system_libs"])
2428 AC_ARG_WITH(webdav,
2429     AS_HELP_STRING([--with-webdav],
2430         [Specify which library to use for webdav implementation.
2431          Possible values: "neon", "serf", "curl", "no". The default value is "neon".
2432          Example: --with-webdav="serf"]))
2434 AC_ARG_WITH(linker-hash-style,
2435     AS_HELP_STRING([--with-linker-hash-style],
2436         [Use linker with --hash-style=<style> when linking shared objects.
2437          Possible values: "sysv", "gnu", "both". The default value is "gnu"
2438          if supported on the build system, and "sysv" otherwise.]))
2440 AC_ARG_WITH(jdk-home,
2441     AS_HELP_STRING([--with-jdk-home=<absolute path to JDK home>],
2442         [If you have installed JDK 9 or later on your system please supply the
2443          path here. Note that this is not the location of the java command but the
2444          location of the entire distribution. In case of cross-compiling, this
2445          is the JDK of the host os. Use --with-build-platform-configure-options
2446          to point to a different build platform JDK.]),
2449 AC_ARG_WITH(help,
2450     AS_HELP_STRING([--with-help],
2451         [Enable the build of help. There is a special parameter "common" that
2452          can be used to bundle only the common part, .e.g help-specific icons.
2453          This is useful when you build the helpcontent separately.])
2454     [
2455                           Usage:     --with-help    build the old local help
2456                                  --without-help     no local help (default)
2457                                  --with-help=html   build the new HTML local help
2458                                  --with-help=online build the new HTML online help
2459     ],
2462 AC_ARG_WITH(omindex,
2463    AS_HELP_STRING([--with-omindex],
2464         [Enable the support of xapian-omega index for online help.])
2465    [
2466                          Usage: --with-omindex=server prepare the pages for omindex
2467                                 but let xapian-omega be built in server.
2468                                 --with-omindex=noxap do not prepare online pages
2469                                 for xapian-omega
2470   ],
2473 libo_FUZZ_ARG_WITH(java,
2474     AS_HELP_STRING([--with-java=<java command>],
2475         [Specify the name of the Java interpreter command. Typically "java"
2476          which is the default.
2478          To build without support for Java components, applets, accessibility
2479          or the XML filters written in Java, use --without-java or --with-java=no.]),
2480     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ],
2481     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ]
2484 AC_ARG_WITH(jvm-path,
2485     AS_HELP_STRING([--with-jvm-path=<absolute path to parent of jvm home>],
2486         [Use a specific JVM search path at runtime.
2487          e.g. use --with-jvm-path=/usr/lib/ to find JRE/JDK in /usr/lib/jvm/]),
2490 AC_ARG_WITH(ant-home,
2491     AS_HELP_STRING([--with-ant-home=<absolute path to Ant home>],
2492         [If you have installed Apache Ant on your system, please supply the path here.
2493          Note that this is not the location of the Ant binary but the location
2494          of the entire distribution.]),
2497 AC_ARG_WITH(symbol-config,
2498     AS_HELP_STRING([--with-symbol-config],
2499         [Configuration for the crashreport symbol upload]),
2500         [],
2501         [with_symbol_config=no])
2503 AC_ARG_WITH(export-validation,
2504     AS_HELP_STRING([--without-export-validation],
2505         [Disable validating OOXML and ODF files as exported from in-tree tests.]),
2506 ,with_export_validation=auto)
2508 AC_ARG_WITH(bffvalidator,
2509     AS_HELP_STRING([--with-bffvalidator=<absolute path to BFFValidator>],
2510         [Enables export validation for Microsoft Binary formats (doc, xls, ppt).
2511          Requires installed Microsoft Office Binary File Format Validator.
2512          Note: export-validation (--with-export-validation) is required to be turned on.
2513          See https://www.microsoft.com/en-us/download/details.aspx?id=26794]),
2514 ,with_bffvalidator=no)
2516 libo_FUZZ_ARG_WITH(junit,
2517     AS_HELP_STRING([--with-junit=<absolute path to JUnit 4 jar>],
2518         [Specifies the JUnit 4 jar file to use for JUnit-based tests.
2519          --without-junit disables those tests. Not relevant in the --without-java case.]),
2520 ,with_junit=yes)
2522 AC_ARG_WITH(hamcrest,
2523     AS_HELP_STRING([--with-hamcrest=<absolute path to hamcrest jar>],
2524         [Specifies the hamcrest jar file to use for JUnit-based tests.
2525          --without-junit disables those tests. Not relevant in the --without-java case.]),
2526 ,with_hamcrest=yes)
2528 AC_ARG_WITH(perl-home,
2529     AS_HELP_STRING([--with-perl-home=<abs. path to Perl 5 home>],
2530         [If you have installed Perl 5 Distribution, on your system, please
2531          supply the path here. Note that this is not the location of the Perl
2532          binary but the location of the entire distribution.]),
2535 libo_FUZZ_ARG_WITH(doxygen,
2536     AS_HELP_STRING(
2537         [--with-doxygen=<absolute path to doxygen executable>],
2538         [Specifies the doxygen executable to use when generating ODK C/C++
2539          documentation. --without-doxygen disables generation of ODK C/C++
2540          documentation. Not relevant in the --disable-odk case.]),
2541 ,with_doxygen=yes)
2543 AC_ARG_WITH(visual-studio,
2544     AS_HELP_STRING([--with-visual-studio=<2019/2022>],
2545         [Specify which Visual Studio version to use in case several are
2546          installed. Currently 2019 (default) and 2022 are supported.]),
2549 AC_ARG_WITH(windows-sdk,
2550     AS_HELP_STRING([--with-windows-sdk=<8.0(A)/8.1(A)/10.0>],
2551         [Specify which Windows SDK, or "Windows Kit", version to use
2552          in case the one that came with the selected Visual Studio
2553          is not what you want for some reason. Note that not all compiler/SDK
2554          combinations are supported. The intent is that this option should not
2555          be needed.]),
2558 AC_ARG_WITH(lang,
2559     AS_HELP_STRING([--with-lang="es sw tu cs sk"],
2560         [Use this option to build LibreOffice with additional UI language support.
2561          English (US) is always included by default.
2562          Separate multiple languages with space.
2563          For all languages, use --with-lang=ALL.]),
2566 AC_ARG_WITH(locales,
2567     AS_HELP_STRING([--with-locales="en es pt fr zh kr ja"],
2568         [Use this option to limit the locale information built in.
2569          Separate multiple locales with space.
2570          Very experimental and might well break stuff.
2571          Just a desperate measure to shrink code and data size.
2572          By default all the locales available is included.
2573          This option is completely unrelated to --with-lang.])
2574     [
2575                           Affects also our character encoding conversion
2576                           tables for encodings mainly targeted for a
2577                           particular locale, like EUC-CN and EUC-TW for
2578                           zh, ISO-2022-JP for ja.
2580                           Affects also our add-on break iterator data for
2581                           some languages.
2583                           For the default, all locales, don't use this switch at all.
2584                           Specifying just the language part of a locale means all matching
2585                           locales will be included.
2586     ],
2589 # Kerberos and GSSAPI used only by PostgreSQL as of LibO 3.5
2590 libo_FUZZ_ARG_WITH(krb5,
2591     AS_HELP_STRING([--with-krb5],
2592         [Enable MIT Kerberos 5 support in modules that support it.
2593          By default automatically enabled on platforms
2594          where a good system Kerberos 5 is available.]),
2597 libo_FUZZ_ARG_WITH(gssapi,
2598     AS_HELP_STRING([--with-gssapi],
2599         [Enable GSSAPI support in modules that support it.
2600          By default automatically enabled on platforms
2601          where a good system GSSAPI is available.]),
2604 AC_ARG_WITH(iwyu,
2605     AS_HELP_STRING([--with-iwyu],
2606         [Use given IWYU binary path to check unneeded includes instead of building.
2607          Use only if you are hacking on it.]),
2610 libo_FUZZ_ARG_WITH(lxml,
2611     AS_HELP_STRING([--without-lxml],
2612         [gla11y will use python lxml when available, potentially building a local copy if necessary.
2613          --without-lxml tells it to not use python lxml at all, which means that gla11y will only
2614          report widget classes and ids.]),
2617 libo_FUZZ_ARG_WITH(latest-c++,
2618     AS_HELP_STRING([--with-latest-c++],
2619         [Try to enable the latest features of the C++ compiler, even if they are not yet part of a
2620          published standard.]),,
2621         [with_latest_c__=no])
2623 dnl ===================================================================
2624 dnl Branding
2625 dnl ===================================================================
2627 AC_ARG_WITH(branding,
2628     AS_HELP_STRING([--with-branding=/path/to/images],
2629         [Use given path to retrieve branding images set.])
2630     [
2631                           Search for intro.png about.svg and logo.svg.
2632                           If any is missing, default ones will be used instead.
2634                           Search also progress.conf for progress
2635                           settings on intro screen :
2637                           PROGRESSBARCOLOR="255,255,255" Set color of
2638                           progress bar. Comma separated RGB decimal values.
2639                           PROGRESSSIZE="407,6" Set size of progress bar.
2640                           Comma separated decimal values (width, height).
2641                           PROGRESSPOSITION="61,317" Set position of progress
2642                           bar from left,top. Comma separated decimal values.
2643                           PROGRESSFRAMECOLOR="20,136,3" Set color of progress
2644                           bar frame. Comma separated RGB decimal values.
2645                           PROGRESSTEXTCOLOR="0,0,0" Set color of progress
2646                           bar text. Comma separated RGB decimal values.
2647                           PROGRESSTEXTBASELINE="287" Set vertical position of
2648                           progress bar text from top. Decimal value.
2650                           Default values will be used if not found.
2651     ],
2655 AC_ARG_WITH(extra-buildid,
2656     AS_HELP_STRING([--with-extra-buildid="Tinderbox: Win-x86@6, Branch:master, Date:2012-11-26_00.29.34"],
2657         [Show addition build identification in about dialog.]),
2661 AC_ARG_WITH(vendor,
2662     AS_HELP_STRING([--with-vendor="John the Builder"],
2663         [Set vendor of the build.]),
2666 AC_ARG_WITH(privacy-policy-url,
2667     AS_HELP_STRING([--with-privacy-policy-url="https://yourdomain/privacy-policy"],
2668         [The URL to your privacy policy (needed when
2669          enabling online-update or crashreporting via breakpad)]),
2670         [if test "x$with_privacy_policy_url" = "xyes"; then
2671             AC_MSG_FAILURE([you need to specify an argument when using --with-privacy-policy-url])
2672          elif test "x$with_privacy_policy_url" = "xno"; then
2673             with_privacy_policy_url="undefined"
2674          fi]
2675 ,[with_privacy_policy_url="undefined"])
2677 AC_ARG_WITH(android-package-name,
2678     AS_HELP_STRING([--with-android-package-name="org.libreoffice"],
2679         [Set Android package name of the build.]),
2682 AC_ARG_WITH(compat-oowrappers,
2683     AS_HELP_STRING([--with-compat-oowrappers],
2684         [Install oo* wrappers in parallel with
2685          lo* ones to keep backward compatibility.
2686          Has effect only with make distro-pack-install]),
2689 AC_ARG_WITH(os-version,
2690     AS_HELP_STRING([--with-os-version=<OSVERSION>],
2691         [For FreeBSD users, use this option to override the detected OSVERSION.]),
2694 AC_ARG_WITH(idlc-cpp,
2695     AS_HELP_STRING([--with-idlc-cpp=<cpp/ucpp>],
2696         [Specify the C Preprocessor to use for idlc. Default is ucpp.]),
2699 AC_ARG_WITH(parallelism,
2700     AS_HELP_STRING([--with-parallelism],
2701         [Number of jobs to run simultaneously during build. Parallel builds can
2702         save a lot of time on multi-cpu machines. Defaults to the number of
2703         CPUs on the machine, unless you configure --enable-icecream - then to
2704         40.]),
2707 AC_ARG_WITH(all-tarballs,
2708     AS_HELP_STRING([--with-all-tarballs],
2709         [Download all external tarballs unconditionally]))
2711 AC_ARG_WITH(gdrive-client-id,
2712     AS_HELP_STRING([--with-gdrive-client-id],
2713         [Provides the client id of the application for OAuth2 authentication
2714         on Google Drive. If either this or --with-gdrive-client-secret is
2715         empty, the feature will be disabled]),
2718 AC_ARG_WITH(gdrive-client-secret,
2719     AS_HELP_STRING([--with-gdrive-client-secret],
2720         [Provides the client secret of the application for OAuth2
2721         authentication on Google Drive. If either this or
2722         --with-gdrive-client-id is empty, the feature will be disabled]),
2725 AC_ARG_WITH(alfresco-cloud-client-id,
2726     AS_HELP_STRING([--with-alfresco-cloud-client-id],
2727         [Provides the client id of the application for OAuth2 authentication
2728         on Alfresco Cloud. If either this or --with-alfresco-cloud-client-secret is
2729         empty, the feature will be disabled]),
2732 AC_ARG_WITH(alfresco-cloud-client-secret,
2733     AS_HELP_STRING([--with-alfresco-cloud-client-secret],
2734         [Provides the client secret of the application for OAuth2
2735         authentication on Alfresco Cloud. If either this or
2736         --with-alfresco-cloud-client-id is empty, the feature will be disabled]),
2739 AC_ARG_WITH(onedrive-client-id,
2740     AS_HELP_STRING([--with-onedrive-client-id],
2741         [Provides the client id of the application for OAuth2 authentication
2742         on OneDrive. If either this or --with-onedrive-client-secret is
2743         empty, the feature will be disabled]),
2746 AC_ARG_WITH(onedrive-client-secret,
2747     AS_HELP_STRING([--with-onedrive-client-secret],
2748         [Provides the client secret of the application for OAuth2
2749         authentication on OneDrive. If either this or
2750         --with-onedrive-client-id is empty, the feature will be disabled]),
2752 dnl ===================================================================
2753 dnl Do we want to use pre-build binary tarball for recompile
2754 dnl ===================================================================
2756 if test "$enable_library_bin_tar" = "yes" ; then
2757     USE_LIBRARY_BIN_TAR=TRUE
2758 else
2759     USE_LIBRARY_BIN_TAR=
2761 AC_SUBST(USE_LIBRARY_BIN_TAR)
2763 dnl ===================================================================
2764 dnl Test whether build target is Release Build
2765 dnl ===================================================================
2766 AC_MSG_CHECKING([whether build target is Release Build])
2767 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
2768     AC_MSG_RESULT([no])
2769     ENABLE_RELEASE_BUILD=
2770     GET_TASK_ALLOW_ENTITLEMENT='
2771         <!-- We want to be able to debug a hardened process when not building for release -->
2772         <key>com.apple.security.get-task-allow</key>
2773         <true/>'
2774 else
2775     AC_MSG_RESULT([yes])
2776     ENABLE_RELEASE_BUILD=TRUE
2777     GET_TASK_ALLOW_ENTITLEMENT=''
2779 AC_SUBST(ENABLE_RELEASE_BUILD)
2780 AC_SUBST(GET_TASK_ALLOW_ENTITLEMENT)
2782 AC_MSG_CHECKING([whether to build a Community flavor])
2783 if test -z "$enable_community_flavor" -o "$enable_community_flavor" = "yes"; then
2784     AC_DEFINE(HAVE_FEATURE_COMMUNITY_FLAVOR)
2785     AC_MSG_RESULT([yes])
2786 else
2787     AC_MSG_RESULT([no])
2790 dnl ===================================================================
2791 dnl Test whether to sign Windows Build
2792 dnl ===================================================================
2793 AC_MSG_CHECKING([whether to sign windows build])
2794 if test "$enable_windows_build_signing" = "yes" -a "$_os" = "WINNT"; then
2795     AC_MSG_RESULT([yes])
2796     WINDOWS_BUILD_SIGNING="TRUE"
2797 else
2798     AC_MSG_RESULT([no])
2799     WINDOWS_BUILD_SIGNING="FALSE"
2801 AC_SUBST(WINDOWS_BUILD_SIGNING)
2803 dnl ===================================================================
2804 dnl MacOSX build and runtime environment options
2805 dnl ===================================================================
2807 AC_ARG_WITH(macosx-version-min-required,
2808     AS_HELP_STRING([--with-macosx-version-min-required=<version>],
2809         [set the minimum OS version needed to run the built LibreOffice])
2810     [
2811                           e. g.: --with-macosx-version-min-required=10.12
2812     ],
2815 AC_ARG_WITH(macosx-version-max-allowed,
2816     AS_HELP_STRING([--with-macosx-version-max-allowed=<version>],
2817         [set the maximum allowed OS version the LibreOffice compilation can use APIs from])
2818     [
2819                           e. g.: --with-macosx-version-max-allowed=11.0
2820     ],
2824 dnl ===================================================================
2825 dnl options for stuff used during cross-compilation build
2826 dnl Not quite superseded by --with-build-platform-configure-options.
2827 dnl TODO: check, if the "force" option is still needed anywhere.
2828 dnl ===================================================================
2830 AC_ARG_WITH(system-icu-for-build,
2831     AS_HELP_STRING([--with-system-icu-for-build=yes/no/force],
2832         [Use icu already on system for build tools (cross-compilation only).]))
2835 dnl ===================================================================
2836 dnl Check for incompatible options set by fuzzing, and reset those
2837 dnl automatically to working combinations
2838 dnl ===================================================================
2840 if test "$libo_fuzzed_enable_dbus" = yes -a "$libo_fuzzed_enable_avahi" -a \
2841         "$enable_dbus" != "$enable_avahi"; then
2842     AC_MSG_NOTICE([Resetting --enable-avahi=$enable_dbus])
2843     enable_avahi=$enable_dbus
2846 add_lopath_after ()
2848     if ! echo "$LO_PATH" | $EGREP -q "(^|${P_SEP})$1($|${P_SEP})"; then
2849         LO_PATH="${LO_PATH:+$LO_PATH$P_SEP}$1"
2850     fi
2853 add_lopath_before ()
2855     local IFS=${P_SEP}
2856     local path_cleanup
2857     local dir
2858     for dir in $LO_PATH ; do
2859         if test "$dir" != "$1" ; then
2860             path_cleanup=${path_cleanup:+$path_cleanup$P_SEP}$dir
2861         fi
2862     done
2863     LO_PATH="$1${path_cleanup:+$P_SEP$path_cleanup}"
2866 dnl ===================================================================
2867 dnl check for required programs (grep, awk, sed, bash)
2868 dnl ===================================================================
2870 pathmunge ()
2872     local new_path
2873     if test -n "$1"; then
2874         if test "$build_os" = "cygwin"; then
2875             if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
2876                 PathFormat "$1"
2877                 new_path=`cygpath -sm "$formatted_path"`
2878             else
2879                 PathFormat "$1"
2880                 new_path=`cygpath -u "$formatted_path"`
2881             fi
2882         else
2883             new_path="$1"
2884         fi
2885         if test "$2" = "after"; then
2886             add_lopath_after "$new_path"
2887         else
2888             add_lopath_before "$new_path"
2889         fi
2890     fi
2893 AC_PROG_AWK
2894 AC_PATH_PROG( AWK, $AWK)
2895 if test -z "$AWK"; then
2896     AC_MSG_ERROR([install awk to run this script])
2899 AC_PATH_PROG(BASH, bash)
2900 if test -z "$BASH"; then
2901     AC_MSG_ERROR([bash not found in \$PATH])
2903 AC_SUBST(BASH)
2905 AC_MSG_CHECKING([for GNU or BSD tar])
2906 for a in $GNUTAR gtar gnutar bsdtar tar /usr/sfw/bin/gtar; do
2907     $a --version 2> /dev/null | egrep "GNU|bsdtar"  2>&1 > /dev/null
2908     if test $? -eq 0;  then
2909         GNUTAR=$a
2910         break
2911     fi
2912 done
2913 AC_MSG_RESULT($GNUTAR)
2914 if test -z "$GNUTAR"; then
2915     AC_MSG_ERROR([not found. install GNU or BSD tar.])
2917 AC_SUBST(GNUTAR)
2919 AC_MSG_CHECKING([for tar's option to strip components])
2920 $GNUTAR --help 2> /dev/null | egrep "bsdtar|strip-components" 2>&1 >/dev/null
2921 if test $? -eq 0; then
2922     STRIP_COMPONENTS="--strip-components"
2923 else
2924     $GNUTAR --help 2> /dev/null | egrep "strip-path" 2>&1 >/dev/null
2925     if test $? -eq 0; then
2926         STRIP_COMPONENTS="--strip-path"
2927     else
2928         STRIP_COMPONENTS="unsupported"
2929     fi
2931 AC_MSG_RESULT($STRIP_COMPONENTS)
2932 if test x$STRIP_COMPONENTS = xunsupported; then
2933     AC_MSG_ERROR([you need a tar that is able to strip components.])
2935 AC_SUBST(STRIP_COMPONENTS)
2937 dnl It is useful to have a BUILD_TYPE keyword to distinguish "normal"
2938 dnl desktop OSes from "mobile" ones.
2940 dnl We assume that a non-DESKTOP build type is also a non-NATIVE one.
2941 dnl In other words, that when building for an OS that is not a
2942 dnl "desktop" one but a "mobile" one, we are always cross-compiling.
2944 dnl Note the direction of the implication; there is no assumption that
2945 dnl cross-compiling would imply a non-desktop OS.
2947 if test $_os != iOS -a $_os != Android -a $_os != Emscripten -a "$enable_fuzzers" != "yes"; then
2948     BUILD_TYPE="$BUILD_TYPE DESKTOP"
2949     AC_DEFINE(HAVE_FEATURE_DESKTOP)
2950     AC_DEFINE(HAVE_FEATURE_MULTIUSER_ENVIRONMENT)
2953 # Whether to build "avmedia" functionality or not.
2955 if test -z "$enable_avmedia"; then
2956     enable_avmedia=yes
2959 BUILD_TYPE="$BUILD_TYPE AVMEDIA"
2960 if test "$enable_avmedia" = yes; then
2961     AC_DEFINE(HAVE_FEATURE_AVMEDIA)
2962 else
2963     USE_AVMEDIA_DUMMY='TRUE'
2965 AC_SUBST(USE_AVMEDIA_DUMMY)
2967 # Decide whether to build database connectivity stuff (including Base) or not.
2968 if test "$enable_database_connectivity" != no; then
2969     BUILD_TYPE="$BUILD_TYPE DBCONNECTIVITY"
2970     AC_DEFINE(HAVE_FEATURE_DBCONNECTIVITY)
2971 else
2972     if test "$_os" = iOS; then
2973         AC_MSG_ERROR([Presumly can't disable DB connectivity on iOS.])
2974     fi
2975     disable_database_connectivity_dependencies
2978 if test -z "$enable_extensions"; then
2979     # For iOS and Android Viewer, disable extensions unless specifically overridden with --enable-extensions.
2980     if test $_os != iOS && test $_os != Android -o "$ENABLE_ANDROID_LOK" = TRUE ; then
2981         enable_extensions=yes
2982     fi
2985 if test "$enable_extensions" = yes; then
2986     BUILD_TYPE="$BUILD_TYPE EXTENSIONS"
2987     AC_DEFINE(HAVE_FEATURE_EXTENSIONS)
2988 else
2989     enable_extension_integration=no
2990     enable_extension_update=no
2993 if test -z "$enable_scripting"; then
2994     # Disable scripting for iOS unless specifically overridden
2995     # with --enable-scripting.
2996     if test $_os != iOS -o $_os = Emscripten; then
2997         enable_scripting=yes
2998     fi
3001 DISABLE_SCRIPTING=''
3002 if test "$enable_scripting" = yes; then
3003     BUILD_TYPE="$BUILD_TYPE SCRIPTING"
3004     AC_DEFINE(HAVE_FEATURE_SCRIPTING)
3005 else
3006     DISABLE_SCRIPTING='TRUE'
3007     SCPDEFS="$SCPDEFS -DDISABLE_SCRIPTING"
3010 if test $_os = iOS -o $_os = Android -o $_os = Emscripten; then
3011     # Disable dynamic_loading always for iOS and Android
3012     enable_dynamic_loading=no
3013 elif test -z "$enable_dynamic_loading"; then
3014     # Otherwise enable it unless specifically disabled
3015     enable_dynamic_loading=yes
3018 DISABLE_DYNLOADING=''
3019 if test "$enable_dynamic_loading" = yes; then
3020     BUILD_TYPE="$BUILD_TYPE DYNLOADING"
3021 else
3022     DISABLE_DYNLOADING='TRUE'
3024 AC_SUBST(DISABLE_DYNLOADING)
3026 # remember SYSBASE value
3027 AC_SUBST(SYSBASE)
3029 dnl ===================================================================
3030 dnl  Sort out various gallery compilation options
3031 dnl ===================================================================
3032 WITH_GALLERY_BUILD=TRUE
3033 AC_MSG_CHECKING([how to build and package galleries])
3034 if test -n "${with_galleries}"; then
3035     if test "$with_galleries" = "build"; then
3036         if test "$enable_database_connectivity" = no; then
3037             AC_MSG_ERROR([DB connectivity is needed for gengal / svx])
3038         fi
3039         AC_MSG_RESULT([build from source images internally])
3040     elif test "$with_galleries" = "no"; then
3041         WITH_GALLERY_BUILD=
3042         AC_MSG_RESULT([disable non-internal gallery build])
3043     else
3044         AC_MSG_ERROR([unknown value --with-galleries=$with_galleries])
3045     fi
3046 else
3047     if test $_os != iOS -a $_os != Android; then
3048         AC_MSG_RESULT([internal src images for desktop])
3049     else
3050         WITH_GALLERY_BUILD=
3051         AC_MSG_RESULT([disable src image build])
3052     fi
3054 AC_SUBST(WITH_GALLERY_BUILD)
3056 dnl ===================================================================
3057 dnl  Checks if ccache is available
3058 dnl ===================================================================
3059 CCACHE_DEPEND_MODE=
3060 if test "$enable_ccache" = "no"; then
3061     CCACHE=""
3062 elif test -n "$enable_ccache" -o \( "$enable_ccache" = "" -a "$enable_icecream" != "yes" \); then
3063     case "%$CC%$CXX%" in
3064     # If $CC and/or $CXX already contain "ccache" (possibly suffixed with some version number etc),
3065     # assume that's good then
3066     *%ccache[[-_' ']]*|*/ccache[[-_' ']]*)
3067         AC_MSG_NOTICE([ccache seems to be included in a pre-defined CC and/or CXX])
3068         CCACHE_DEPEND_MODE=1
3069         ;;
3070     *)
3071         # try to use our own ccache if it is available and CCACHE was not already defined
3072         if test -z "$CCACHE"; then
3073             if test "$_os" = "WINNT"; then
3074                 ccache_ext=.exe # e.g. openssl build needs ccache.exe, not just ccache
3075             fi
3076             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/ccache$ccache_ext" ; then
3077                 CCACHE="$LODE_HOME/opt/bin/ccache$ccache_ext"
3078             elif test -x "/opt/lo/bin/ccache$ccache_ext"; then
3079                 CCACHE="/opt/lo/bin/ccache$ccache_ext"
3080             fi
3081         fi
3082         AC_PATH_PROG([CCACHE],[ccache],[not found])
3083         if test "$CCACHE" != "not found" -a "$_os" = "WINNT"; then
3084             CCACHE=`win_short_path_for_make "$CCACHE"`
3085             # check that it has MSVC support (it should recognize it in CCACHE_COMPILERTYPE)
3086             rm -f conftest.txt
3087             AC_MSG_CHECKING([whether $CCACHE has MSVC support])
3088             CCACHE_COMPILERTYPE=cl CCACHE_LOGFILE=conftest.txt $CCACHE echo >/dev/null 2>/dev/null
3089             if grep -q 'Config: (environment) compiler_type = cl' conftest.txt; then
3090                 AC_MSG_RESULT(yes)
3091             else
3092                 AC_MSG_RESULT(no)
3093                 CCACHE="not found"
3094             fi
3095             rm -f conftest.txt
3096         fi
3097         if test "$CCACHE" = "not found" -a "$_os" = "WINNT"; then
3098             # on windows/VC perhaps sccache is around?
3099             case "%$CC%$CXX%" in
3100             # If $CC and/or $CXX already contain "sccache" (possibly suffixed with some version number etc),
3101             # assume that's good then
3102             *%sccache[[-_' ']]*|*/sccache[[-_' ']]*)
3103                 AC_MSG_NOTICE([sccache seems to be included in a pre-defined CC and/or CXX])
3104                 CCACHE_DEPEND_MODE=1
3105                 SCCACHE=1
3106                 ;;
3107             *)
3108                 # for sharing code below, reuse CCACHE env var
3109                 AC_PATH_PROG([CCACHE],[sccache],[not found])
3110                 if test "$CCACHE" != "not found"; then
3111                     CCACHE=`win_short_path_for_make "$CCACHE"`
3112                     SCCACHE=1
3113                     CCACHE_DEPEND_MODE=1
3114                 fi
3115                 ;;
3116             esac
3117         fi
3118         if test "$CCACHE" = "not found"; then
3119             CCACHE=""
3120         fi
3121         if test -n "$CCACHE" -a -z "$SCCACHE"; then
3122             CCACHE_DEPEND_MODE=1
3123             # Need to check for ccache version: otherwise prevents
3124             # caching of the results (like "-x objective-c++" for Mac)
3125             if test $_os = Darwin -o $_os = iOS; then
3126                 # Check ccache version
3127                 AC_MSG_CHECKING([whether version of ccache is suitable])
3128                 CCACHE_VERSION=`"$CCACHE" -V | "$AWK" '/^ccache version/{print $3}'`
3129                 CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
3130                 if test "$CCACHE_VERSION" = "2.4_OOo" -o "$CCACHE_NUMVER" -ge "030100"; then
3131                     AC_MSG_RESULT([yes, $CCACHE_VERSION])
3132                 else
3133                     AC_MSG_RESULT([no, $CCACHE_VERSION])
3134                     CCACHE=""
3135                     CCACHE_DEPEND_MODE=
3136                 fi
3137             fi
3138         fi
3139         ;;
3140     esac
3141 else
3142     CCACHE=""
3144 if test "$enable_ccache" = "nodepend"; then
3145     CCACHE_DEPEND_MODE=""
3147 AC_SUBST(CCACHE_DEPEND_MODE)
3149 # sccache defaults are good enough
3150 if test "$CCACHE" != "" -a -z "$SCCACHE"; then
3151     # e.g. (/home/rene/.config/ccache/ccache.conf) max_size = 20.0G
3152     # -p works with both 4.2 and 4.4
3153     ccache_size_msg=$([ccache -p | $AWK /max_size/'{ print $4 }' | sed -e 's/\.[0-9]*//'])
3154     ccache_size=$(echo "$ccache_size_msg" | grep "G" | sed -e 's/G.*$//')
3155     if test "$ccache_size" = ""; then
3156         ccache_size=$(echo "$ccache_size_msg" | grep "M" | sed -e 's/\ M.*$//')
3157         if test "$ccache_size" = ""; then
3158             ccache_size=0
3159         fi
3160         # we could not determine the size or it was less than 1GB -> disable auto-ccache
3161         if test $ccache_size -lt 1024; then
3162             CCACHE=""
3163             AC_MSG_WARN([ccache's cache size is less than 1GB using it is counter-productive: Disabling auto-ccache detection])
3164             add_warning "ccache's cache size is less than 1GB using it is counter-productive: auto-ccache detection disabled"
3165         else
3166             # warn that ccache may be too small for debug build
3167             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3168             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3169         fi
3170     else
3171         if test $ccache_size -lt 5; then
3172             #warn that ccache may be too small for debug build
3173             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3174             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3175         fi
3176     fi
3179 ENABLE_Z7_DEBUG=
3180 if test "$enable_z7_debug" != no; then
3181     if test "$enable_z7_debug" = yes -o -n "$CCACHE"; then
3182         ENABLE_Z7_DEBUG=TRUE
3183     fi
3184 else
3185     AC_MSG_WARN([ccache will not work with --disable-z7-debug])
3186     add_warning "ccache will not work with --disable-z7-debug"
3188 AC_SUBST(ENABLE_Z7_DEBUG)
3190 dnl ===================================================================
3191 dnl  Checks for C compiler,
3192 dnl  The check for the C++ compiler is later on.
3193 dnl ===================================================================
3194 if test "$_os" != "WINNT"; then
3195     GCC_HOME_SET="true"
3196     AC_MSG_CHECKING([gcc home])
3197     if test -z "$with_gcc_home"; then
3198         if test "$enable_icecream" = "yes"; then
3199             if test -d "/usr/lib/icecc/bin"; then
3200                 GCC_HOME="/usr/lib/icecc/"
3201             elif test -d "/usr/libexec/icecc/bin"; then
3202                 GCC_HOME="/usr/libexec/icecc/"
3203             elif test -d "/opt/icecream/bin"; then
3204                 GCC_HOME="/opt/icecream/"
3205             else
3206                 AC_MSG_ERROR([Could not figure out the location of icecream GCC wrappers, manually use --with-gcc-home])
3208             fi
3209         else
3210             GCC_HOME=`which gcc | $SED -e s,/bin/gcc,,`
3211             GCC_HOME_SET="false"
3212         fi
3213     else
3214         GCC_HOME="$with_gcc_home"
3215     fi
3216     AC_MSG_RESULT($GCC_HOME)
3217     AC_SUBST(GCC_HOME)
3219     if test "$GCC_HOME_SET" = "true"; then
3220         if test -z "$CC"; then
3221             CC="$GCC_HOME/bin/gcc"
3222             CC_BASE="gcc"
3223         fi
3224         if test -z "$CXX"; then
3225             CXX="$GCC_HOME/bin/g++"
3226             CXX_BASE="g++"
3227         fi
3228     fi
3231 COMPATH=`dirname "$CC"`
3232 if test "$COMPATH" = "."; then
3233     AC_PATH_PROGS(COMPATH, $CC)
3234     dnl double square bracket to get single because of M4 quote...
3235     COMPATH=`echo $COMPATH | $SED "s@/[[^/:]]*\\\$@@"`
3237 COMPATH=`echo $COMPATH | $SED "s@/[[Bb]][[Ii]][[Nn]]\\\$@@"`
3239 dnl ===================================================================
3240 dnl Java support
3241 dnl ===================================================================
3242 AC_MSG_CHECKING([whether to build with Java support])
3243 if test "$with_java" != "no"; then
3244     if test "$DISABLE_SCRIPTING" = TRUE; then
3245         AC_MSG_RESULT([no, overridden by --disable-scripting])
3246         ENABLE_JAVA=""
3247         with_java=no
3248     else
3249         AC_MSG_RESULT([yes])
3250         ENABLE_JAVA="TRUE"
3251         AC_DEFINE(HAVE_FEATURE_JAVA)
3252     fi
3253 else
3254     AC_MSG_RESULT([no])
3255     ENABLE_JAVA=""
3258 AC_SUBST(ENABLE_JAVA)
3260 dnl ENABLE_JAVA="TRUE" if we want there to be *run-time* (and build-time) support for Java
3262 dnl ENABLE_JAVA="" indicate no Java support at all
3264 dnl ===================================================================
3265 dnl Check macOS SDK and compiler
3266 dnl ===================================================================
3268 if test $_os = Darwin; then
3270     # The SDK in the currently selected Xcode should be found.
3272     AC_MSG_CHECKING([what macOS SDK to use])
3273     for macosx_sdk in 12.3 12.1 12.0 11.3 11.1 11.0 10.15 10.14 10.13; do
3274         MACOSX_SDK_PATH=`xcrun --sdk macosx${macosx_sdk} --show-sdk-path 2> /dev/null`
3275         if test -d "$MACOSX_SDK_PATH"; then
3276             break
3277         else
3278             MACOSX_SDK_PATH="`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${macosx_sdk}.sdk"
3279             if test -d "$MACOSX_SDK_PATH"; then
3280                 break
3281             fi
3282         fi
3283     done
3284     if test ! -d "$MACOSX_SDK_PATH"; then
3285         AC_MSG_ERROR([Could not find an appropriate macOS SDK])
3286     fi
3288     AC_MSG_RESULT([macOS SDK $macosx_sdk at $MACOSX_SDK_PATH])
3290     case $macosx_sdk in
3291     10.13)
3292         MACOSX_SDK_VERSION=101300
3293         ;;
3294     10.14)
3295         MACOSX_SDK_VERSION=101400
3296         ;;
3297     10.15)
3298         MACOSX_SDK_VERSION=101500
3299         ;;
3300     11.0)
3301         MACOSX_SDK_VERSION=110000
3302         ;;
3303     11.1)
3304         MACOSX_SDK_VERSION=110100
3305         ;;
3306     11.3)
3307         MACOSX_SDK_VERSION=110300
3308         ;;
3309     12.0)
3310         MACOSX_SDK_VERSION=120000
3311         ;;
3312     12.1)
3313         MACOSX_SDK_VERSION=120100
3314         ;;
3315     12.3)
3316         MACOSX_SDK_VERSION=120300
3317         ;;
3318     *)
3319         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported])
3320         ;;
3321     esac
3323     if test "$host_cpu" = arm64 -a $MACOSX_SDK_VERSION -lt 110000; then
3324         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported for Apple Silicon])
3325     fi
3327     if test "$with_macosx_version_min_required" = "" ; then
3328         if test "$host_cpu" = x86_64; then
3329             with_macosx_version_min_required="10.12";
3330         else
3331             with_macosx_version_min_required="11.0";
3332         fi
3333     fi
3335     if test "$with_macosx_version_max_allowed" = "" ; then
3336         with_macosx_version_max_allowed="$macosx_sdk"
3337     fi
3339     # export this so that "xcrun" invocations later return matching values
3340     DEVELOPER_DIR="${MACOSX_SDK_PATH%/SDKs*}"
3341     DEVELOPER_DIR="${DEVELOPER_DIR%/Platforms*}"
3342     export DEVELOPER_DIR
3343     FRAMEWORKSHOME="$MACOSX_SDK_PATH/System/Library/Frameworks"
3344     MACOSX_DEPLOYMENT_TARGET="$with_macosx_version_min_required"
3346     AC_MSG_CHECKING([whether Xcode is new enough])
3347     my_xcode_ver1=$(xcrun xcodebuild -version | head -n 1)
3348     my_xcode_ver2=${my_xcode_ver1#Xcode }
3349     my_xcode_ver3=$(printf %s "$my_xcode_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
3350     if test "$my_xcode_ver3" -ge 1103; then
3351         AC_MSG_RESULT([yes ($my_xcode_ver2)])
3352     else
3353         AC_MSG_ERROR(["$my_xcode_ver1" is too old or unrecognized, must be at least Xcode 11.3])
3354     fi
3356     case "$with_macosx_version_min_required" in
3357     10.12)
3358         MAC_OS_X_VERSION_MIN_REQUIRED="101200"
3359         ;;
3360     10.13)
3361         MAC_OS_X_VERSION_MIN_REQUIRED="101300"
3362         ;;
3363     10.14)
3364         MAC_OS_X_VERSION_MIN_REQUIRED="101400"
3365         ;;
3366     10.15)
3367         MAC_OS_X_VERSION_MIN_REQUIRED="101500"
3368         ;;
3369     10.16)
3370         MAC_OS_X_VERSION_MIN_REQUIRED="101600"
3371         ;;
3372     11.0)
3373         MAC_OS_X_VERSION_MIN_REQUIRED="110000"
3374         ;;
3375     11.1)
3376         MAC_OS_X_VERSION_MIN_REQUIRED="110100"
3377         ;;
3378     11.3)
3379         MAC_OS_X_VERSION_MIN_REQUIRED="110300"
3380         ;;
3381     12.0)
3382         MAC_OS_X_VERSION_MIN_REQUIRED="120000"
3383         ;;
3384     12.1)
3385         MAC_OS_X_VERSION_MIN_REQUIRED="120100"
3386         ;;
3387     12.3)
3388         MAC_OS_X_VERSION_MIN_REQUIRED="120300"
3389         ;;
3390     *)
3391         AC_MSG_ERROR([with-macosx-version-min-required $with_macosx_version_min_required is not a supported value, supported values are 10.13--12.3])
3392         ;;
3393     esac
3395     LIBTOOL=/usr/bin/libtool
3396     INSTALL_NAME_TOOL=install_name_tool
3397     if test -z "$save_CC"; then
3398         stdlib=-stdlib=libc++
3400         AC_MSG_CHECKING([what C compiler to use])
3401         CC="`xcrun -find clang`"
3402         CC_BASE=`first_arg_basename "$CC"`
3403         if test "$host_cpu" = x86_64; then
3404             CC+=" -target x86_64-apple-macos"
3405         else
3406             CC+=" -target arm64-apple-macos"
3407         fi
3408         CC+=" -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3409         AC_MSG_RESULT([$CC])
3411         AC_MSG_CHECKING([what C++ compiler to use])
3412         CXX="`xcrun -find clang++`"
3413         CXX_BASE=`first_arg_basename "$CXX"`
3414         if test "$host_cpu" = x86_64; then
3415             CXX+=" -target x86_64-apple-macos"
3416         else
3417             CXX+=" -target arm64-apple-macos"
3418         fi
3419         CXX+=" $stdlib -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3420         AC_MSG_RESULT([$CXX])
3422         INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3423         AR=`xcrun -find ar`
3424         NM=`xcrun -find nm`
3425         STRIP=`xcrun -find strip`
3426         LIBTOOL=`xcrun -find libtool`
3427         RANLIB=`xcrun -find ranlib`
3428     fi
3430     case "$with_macosx_version_max_allowed" in
3431     10.12)
3432         MAC_OS_X_VERSION_MAX_ALLOWED="101200"
3433         ;;
3434     10.13)
3435         MAC_OS_X_VERSION_MAX_ALLOWED="101300"
3436         ;;
3437     10.14)
3438         MAC_OS_X_VERSION_MAX_ALLOWED="101400"
3439         ;;
3440     10.15)
3441         MAC_OS_X_VERSION_MAX_ALLOWED="101500"
3442         ;;
3443     11.0)
3444         MAC_OS_X_VERSION_MAX_ALLOWED="110000"
3445         ;;
3446     11.1)
3447         MAC_OS_X_VERSION_MAX_ALLOWED="110100"
3448         ;;
3449     11.3)
3450         MAC_OS_X_VERSION_MAX_ALLOWED="110300"
3451         ;;
3452     12.0)
3453         MAC_OS_X_VERSION_MAX_ALLOWED="120000"
3454         ;;
3455     12.1)
3456         MAC_OS_X_VERSION_MAX_ALLOWED="120100"
3457         ;;
3458     12.3)
3459         MAC_OS_X_VERSION_MAX_ALLOWED="120300"
3460         ;;
3461     *)
3462         AC_MSG_ERROR([with-macosx-version-max-allowed $with_macosx_version_max_allowed is not a supported value, supported values are 10.12--12.3])
3463         ;;
3464     esac
3466     AC_MSG_CHECKING([that macosx-version-min-required is coherent with macosx-version-max-allowed])
3467     if test $MAC_OS_X_VERSION_MIN_REQUIRED -gt $MAC_OS_X_VERSION_MAX_ALLOWED; then
3468         AC_MSG_ERROR([the version minimum required, $MAC_OS_X_VERSION_MIN_REQUIRED, must be <= the version maximum allowed, $MAC_OS_X_VERSION_MAX_ALLOWED])
3469     else
3470         AC_MSG_RESULT([ok])
3471     fi
3473     AC_MSG_CHECKING([that macosx-version-max-allowed is coherent with macos-with-sdk])
3474     if test $MAC_OS_X_VERSION_MAX_ALLOWED -gt $MACOSX_SDK_VERSION; then
3475         AC_MSG_ERROR([the version maximum allowed cannot be greater than the sdk level])
3476     else
3477         AC_MSG_RESULT([ok])
3478     fi
3479     AC_MSG_NOTICE([MAC_OS_X_VERSION_MIN_REQUIRED=$MAC_OS_X_VERSION_MIN_REQUIRED])
3480     AC_MSG_NOTICE([MAC_OS_X_VERSION_MAX_ALLOWED=$MAC_OS_X_VERSION_MAX_ALLOWED])
3482     AC_MSG_CHECKING([whether to do code signing])
3484     if test "$enable_macosx_code_signing" = yes; then
3485         # By default use the first suitable certificate (?).
3487         # http://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3488         # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3489         # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3490         # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3491         # "Developer ID Application" one.
3493         identity=`security find-identity -p codesigning -v 2>/dev/null | grep 'Developer ID Application:' | $AWK '{print $2}' |head -1`
3494         if test -n "$identity"; then
3495             MACOSX_CODESIGNING_IDENTITY=$identity
3496             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3497             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3498         else
3499             AC_MSG_ERROR([cannot determine identity to use])
3500         fi
3501     elif test -n "$enable_macosx_code_signing" -a "$enable_macosx_code_signing" != no ; then
3502         MACOSX_CODESIGNING_IDENTITY=$enable_macosx_code_signing
3503         pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3504         AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3505     else
3506         AC_MSG_RESULT([no])
3507     fi
3509     AC_MSG_CHECKING([whether to create a Mac App Store package])
3511     if test -z "$enable_macosx_package_signing" || test "$enable_macosx_package_signing" == no; then
3512         AC_MSG_RESULT([no])
3513     elif test -z "$MACOSX_CODESIGNING_IDENTITY"; then
3514         AC_MSG_ERROR([You forgot --enable-macosx-code-signing])
3515     elif test "$enable_macosx_package_signing" = yes; then
3516         # By default use the first suitable certificate.
3517         # It should be a "3rd Party Mac Developer Installer" one
3519         identity=`security find-identity -v 2>/dev/null | grep '3rd Party Mac Developer Installer:' | awk '{print $2}' |head -1`
3520         if test -n "$identity"; then
3521             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3522             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3523             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3524         else
3525             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3526         fi
3527     else
3528         MACOSX_PACKAGE_SIGNING_IDENTITY=$enable_macosx_package_signing
3529         pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3530         AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3531     fi
3533     if test -n "$MACOSX_CODESIGNING_IDENTITY" -a -n "$MACOSX_PACKAGE_SIGNING_IDENTITY" -a "$MACOSX_CODESIGNING_IDENTITY" = "$MACOSX_PACKAGE_SIGNING_IDENTITY"; then
3534         AC_MSG_ERROR([You should not use the same identity for code and package signing])
3535     fi
3537     AC_MSG_CHECKING([whether to sandbox the application])
3539     if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then
3540         AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java])
3541     elif test "$enable_macosx_sandbox" = yes; then
3542         ENABLE_MACOSX_SANDBOX=TRUE
3543         AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX)
3544         AC_MSG_RESULT([yes])
3545     else
3546         AC_MSG_RESULT([no])
3547     fi
3549     AC_MSG_CHECKING([what macOS app bundle identifier to use])
3550     MACOSX_BUNDLE_IDENTIFIER=$with_macosx_bundle_identifier
3551     AC_MSG_RESULT([$MACOSX_BUNDLE_IDENTIFIER])
3553 AC_SUBST(MACOSX_SDK_PATH)
3554 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3555 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3556 AC_SUBST(MAC_OS_X_VERSION_MAX_ALLOWED)
3557 AC_SUBST(INSTALL_NAME_TOOL)
3558 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3559 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3560 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3561 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3562 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3564 dnl ===================================================================
3565 dnl Check iOS SDK and compiler
3566 dnl ===================================================================
3568 if test $_os = iOS; then
3569     AC_MSG_CHECKING([what iOS SDK to use])
3570     current_sdk_ver=15.0
3571     older_sdk_vers="14.5"
3572     if test "$enable_ios_simulator" = "yes"; then
3573         platform=iPhoneSimulator
3574         versionmin=-mios-simulator-version-min=13.6
3575     else
3576         platform=iPhoneOS
3577         versionmin=-miphoneos-version-min=13.6
3578     fi
3579     xcode_developer=`xcode-select -print-path`
3581     for sdkver in $current_sdk_ver $older_sdk_vers; do
3582         t=$xcode_developer/Platforms/$platform.platform/Developer/SDKs/$platform$sdkver.sdk
3583         if test -d $t; then
3584             sysroot=$t
3585             break
3586         fi
3587     done
3589     if test -z "$sysroot"; then
3590         AC_MSG_ERROR([Could not find iOS SDK, expected something like $xcode_developer/Platforms/$platform.platform/Developer/SDKs/${platform}${current_sdk_ver}.sdk])
3591     fi
3593     AC_MSG_RESULT($sysroot)
3595     stdlib="-stdlib=libc++"
3597     AC_MSG_CHECKING([what C compiler to use])
3598     CC="`xcrun -find clang`"
3599     CC_BASE=`first_arg_basename "$CC"`
3600     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3601     AC_MSG_RESULT([$CC])
3603     AC_MSG_CHECKING([what C++ compiler to use])
3604     CXX="`xcrun -find clang++`"
3605     CXX_BASE=`first_arg_basename "$CXX"`
3606     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3607     AC_MSG_RESULT([$CXX])
3609     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3610     AR=`xcrun -find ar`
3611     NM=`xcrun -find nm`
3612     STRIP=`xcrun -find strip`
3613     LIBTOOL=`xcrun -find libtool`
3614     RANLIB=`xcrun -find ranlib`
3617 AC_MSG_CHECKING([whether to treat the installation as read-only])
3619 if test $_os = Darwin; then
3620     enable_readonly_installset=yes
3621 elif test "$enable_extensions" != yes; then
3622     enable_readonly_installset=yes
3624 if test "$enable_readonly_installset" = yes; then
3625     AC_MSG_RESULT([yes])
3626     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3627 else
3628     AC_MSG_RESULT([no])
3631 dnl ===================================================================
3632 dnl Structure of install set
3633 dnl ===================================================================
3635 if test $_os = Darwin; then
3636     LIBO_BIN_FOLDER=MacOS
3637     LIBO_ETC_FOLDER=Resources
3638     LIBO_LIBEXEC_FOLDER=MacOS
3639     LIBO_LIB_FOLDER=Frameworks
3640     LIBO_LIB_PYUNO_FOLDER=Resources
3641     LIBO_SHARE_FOLDER=Resources
3642     LIBO_SHARE_HELP_FOLDER=Resources/help
3643     LIBO_SHARE_JAVA_FOLDER=Resources/java
3644     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3645     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3646     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3647     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3648     LIBO_URE_BIN_FOLDER=MacOS
3649     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3650     LIBO_URE_LIB_FOLDER=Frameworks
3651     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3652     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3653 elif test $_os = WINNT; then
3654     LIBO_BIN_FOLDER=program
3655     LIBO_ETC_FOLDER=program
3656     LIBO_LIBEXEC_FOLDER=program
3657     LIBO_LIB_FOLDER=program
3658     LIBO_LIB_PYUNO_FOLDER=program
3659     LIBO_SHARE_FOLDER=share
3660     LIBO_SHARE_HELP_FOLDER=help
3661     LIBO_SHARE_JAVA_FOLDER=program/classes
3662     LIBO_SHARE_PRESETS_FOLDER=presets
3663     LIBO_SHARE_READMES_FOLDER=readmes
3664     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3665     LIBO_SHARE_SHELL_FOLDER=program/shell
3666     LIBO_URE_BIN_FOLDER=program
3667     LIBO_URE_ETC_FOLDER=program
3668     LIBO_URE_LIB_FOLDER=program
3669     LIBO_URE_MISC_FOLDER=program
3670     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3671 else
3672     LIBO_BIN_FOLDER=program
3673     LIBO_ETC_FOLDER=program
3674     LIBO_LIBEXEC_FOLDER=program
3675     LIBO_LIB_FOLDER=program
3676     LIBO_LIB_PYUNO_FOLDER=program
3677     LIBO_SHARE_FOLDER=share
3678     LIBO_SHARE_HELP_FOLDER=help
3679     LIBO_SHARE_JAVA_FOLDER=program/classes
3680     LIBO_SHARE_PRESETS_FOLDER=presets
3681     LIBO_SHARE_READMES_FOLDER=readmes
3682     if test "$enable_fuzzers" != yes; then
3683         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3684     else
3685         LIBO_SHARE_RESOURCE_FOLDER=resource
3686     fi
3687     LIBO_SHARE_SHELL_FOLDER=program/shell
3688     LIBO_URE_BIN_FOLDER=program
3689     LIBO_URE_ETC_FOLDER=program
3690     LIBO_URE_LIB_FOLDER=program
3691     LIBO_URE_MISC_FOLDER=program
3692     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3694 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3695 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3696 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3697 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3698 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3699 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3700 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3701 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3702 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3703 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3704 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3705 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3706 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3707 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3708 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3709 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3711 # Not all of them needed in config_host.mk, add more if need arises
3712 AC_SUBST(LIBO_BIN_FOLDER)
3713 AC_SUBST(LIBO_ETC_FOLDER)
3714 AC_SUBST(LIBO_LIB_FOLDER)
3715 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3716 AC_SUBST(LIBO_SHARE_FOLDER)
3717 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3718 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3719 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3720 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3721 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3722 AC_SUBST(LIBO_URE_BIN_FOLDER)
3723 AC_SUBST(LIBO_URE_ETC_FOLDER)
3724 AC_SUBST(LIBO_URE_LIB_FOLDER)
3725 AC_SUBST(LIBO_URE_MISC_FOLDER)
3726 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3728 dnl ===================================================================
3729 dnl Windows specific tests and stuff
3730 dnl ===================================================================
3732 reg_get_value()
3734     # Return value: $regvalue
3735     unset regvalue
3737     if test "$build_os" = "wsl"; then
3738         regvalue=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --read-registry $1 "$2" 2>/dev/null)
3739         return
3740     fi
3742     local _regentry="/proc/registry${1}/${2}"
3743     if test -f "$_regentry"; then
3744         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3745         # Registry keys read via /proc/registry* are always \0 terminated!
3746         local _regvalue=$(tr -d '\0' < "$_regentry")
3747         if test $? -eq 0; then
3748             regvalue=$_regvalue
3749         fi
3750     fi
3753 # Get a value from the 32-bit side of the Registry
3754 reg_get_value_32()
3756     reg_get_value "32" "$1"
3759 # Get a value from the 64-bit side of the Registry
3760 reg_get_value_64()
3762     reg_get_value "64" "$1"
3765 case "$host_os" in
3766 cygwin*|wsl*)
3767     COM=MSC
3768     OS=WNT
3769     RTL_OS=Windows
3770     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3771         P_SEP=";"
3772     else
3773         P_SEP=:
3774     fi
3775     case "$host_cpu" in
3776     x86_64)
3777         CPUNAME=X86_64
3778         RTL_ARCH=X86_64
3779         PLATFORMID=windows_x86_64
3780         WINDOWS_X64=1
3781         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
3782         WIN_HOST_ARCH="x64"
3783         WIN_MULTI_ARCH="x86"
3784         WIN_HOST_BITS=64
3785         ;;
3786     i*86)
3787         CPUNAME=INTEL
3788         RTL_ARCH=x86
3789         PLATFORMID=windows_x86
3790         WIN_HOST_ARCH="x86"
3791         WIN_HOST_BITS=32
3792         WIN_OTHER_ARCH="x64"
3793         ;;
3794     aarch64)
3795         CPUNAME=AARCH64
3796         RTL_ARCH=AARCH64
3797         PLATFORMID=windows_aarch64
3798         WINDOWS_X64=1
3799         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
3800         WIN_HOST_ARCH="arm64"
3801         WIN_HOST_BITS=64
3802         with_ucrt_dir=no
3803         ;;
3804     *)
3805         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
3806         ;;
3807     esac
3809     case "$build_cpu" in
3810     x86_64) WIN_BUILD_ARCH="x64" ;;
3811     i*86) WIN_BUILD_ARCH="x86" ;;
3812     aarch64) WIN_BUILD_ARCH="arm64" ;;
3813     *)
3814         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
3815         ;;
3816     esac
3818     SCPDEFS="$SCPDEFS -D_MSC_VER"
3819     ;;
3820 esac
3822 # multi-arch is an arch, which can execute on the host (x86 on x64), while
3823 # other-arch won't, but wouldn't break the build (x64 on x86).
3824 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
3825     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
3829 if test "$_os" = "iOS" -o "$build_cpu" != "$host_cpu"; then
3830     # To allow building Windows multi-arch releases without cross-tooling
3831     if test -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH"; then
3832         cross_compiling="yes"
3833     fi
3836 ENABLE_WASM_STRIP=''
3837 if test "$cross_compiling" = "yes"; then
3838     export CROSS_COMPILING=TRUE
3839     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
3840         ENABLE_WASM_STRIP=TRUE
3841     fi
3842 else
3843     CROSS_COMPILING=
3844     BUILD_TYPE="$BUILD_TYPE NATIVE"
3846 AC_SUBST(CROSS_COMPILING)
3847 AC_SUBST(ENABLE_WASM_STRIP)
3849 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
3850 # NOTE: must _not_ be used for bundled external libraries!
3851 ISYSTEM=
3852 if test "$GCC" = "yes"; then
3853     AC_MSG_CHECKING( for -isystem )
3854     save_CFLAGS=$CFLAGS
3855     CFLAGS="$CFLAGS -isystem /usr/include -Werror"
3856     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
3857     CFLAGS=$save_CFLAGS
3858     if test -n "$ISYSTEM"; then
3859         AC_MSG_RESULT(yes)
3860     else
3861         AC_MSG_RESULT(no)
3862     fi
3864 if test -z "$ISYSTEM"; then
3865     # fall back to using -I
3866     ISYSTEM=-I
3868 AC_SUBST(ISYSTEM)
3870 dnl ===================================================================
3871 dnl  Check which Visual Studio compiler is used
3872 dnl ===================================================================
3874 map_vs_year_to_version()
3876     # Return value: $vsversion
3878     unset vsversion
3880     case $1 in
3881     2019)
3882         vsversion=16;;
3883     2022)
3884         vsversion=17;;
3885     *)
3886         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
3887     esac
3890 vs_versions_to_check()
3892     # Args: $1 (optional) : versions to check, in the order of preference
3893     # Return value: $vsversions
3895     unset vsversions
3897     if test -n "$1"; then
3898         map_vs_year_to_version "$1"
3899         vsversions=$vsversion
3900     else
3901         # Default version is 2019
3902         vsversions="16"
3903     fi
3906 win_get_env_from_vsvars32bat()
3908     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
3909     # Also seems to be located in another directory under the same name: vsvars32.bat
3910     # https://github.com/bazelbuild/bazel/blob/master/src/main/native/build_windows_jni.sh#L56-L57
3911     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$(cygpath -w $VC_PRODUCT_DIR)" > $WRAPPERBATCHFILEPATH
3912     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
3913     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
3914     local result
3915     if test "$build_os" = "wsl"; then
3916         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
3917     else
3918         chmod +x $WRAPPERBATCHFILEPATH
3919         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
3920     fi
3921     rm -f $WRAPPERBATCHFILEPATH
3922     printf '%s' "$result"
3925 find_ucrt()
3927     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/InstallationFolder"
3928     if test -n "$regvalue"; then
3929         PathFormat "$regvalue"
3930         UCRTSDKDIR=$formatted_path_unix
3931         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion"
3932         UCRTVERSION=$regvalue
3933         # Rest if not exist
3934         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
3935           UCRTSDKDIR=
3936         fi
3937     fi
3938     if test -z "$UCRTSDKDIR"; then
3939         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
3940         ide_env_file="${ide_env_dir}VsDevCmd.bat"
3941         if test -f "$ide_env_file"; then
3942             PathFormat "$(win_get_env_from_vsvars32bat UniversalCRTSdkDir)"
3943             UCRTSDKDIR=$formatted_path
3944             UCRTVERSION=$(win_get_env_from_vsvars32bat UCRTVersion)
3945             dnl Hack needed at least by tml:
3946             if test "$UCRTVERSION" = 10.0.15063.0 \
3947                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
3948                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
3949             then
3950                 UCRTVERSION=10.0.14393.0
3951             fi
3952         else
3953           AC_MSG_ERROR([No UCRT found])
3954         fi
3955     fi
3958 find_msvc()
3960     # Find Visual C++
3961     # Args: $1 (optional) : The VS version year
3962     # Return values: $vctest, $vcyear, $vctoolset, $vcnumwithdot, $vcbuildnumber
3964     unset vctest vctoolset vcnumwithdot vcbuildnumber
3966     vs_versions_to_check "$1"
3967     if test "$build_os" = wsl; then
3968         vswhere="$PROGRAMFILESX86"
3969     else
3970         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
3971     fi
3972     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
3973     PathFormat "$vswhere"
3974     vswhere=$formatted_path_unix
3975     for ver in $vsversions; do
3976         vswhereoutput=`$vswhere -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3977         if test -z "$vswhereoutput"; then
3978             vswhereoutput=`$vswhere -prerelease -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3979         fi
3980         # Fall back to all MS products (this includes VC++ Build Tools)
3981         if ! test -n "$vswhereoutput"; then
3982             AC_MSG_CHECKING([VC++ Build Tools and similar])
3983             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3984         fi
3985         if test -n "$vswhereoutput"; then
3986             PathFormat "$vswhereoutput"
3987             vctest=$formatted_path_unix
3988             break
3989         fi
3990     done
3992     if test -n "$vctest"; then
3993         vcnumwithdot="$ver.0"
3994         case "$vcnumwithdot" in
3995         16.0)
3996             vcyear=2019
3997             vctoolset=v142
3998             ;;
3999         17.0)
4000             vcyear=2022
4001             vctoolset=v143
4002             ;;
4003         esac
4004         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
4006     fi
4009 test_cl_exe()
4011     AC_MSG_CHECKING([$1 compiler])
4013     CL_EXE_PATH="$2/cl.exe"
4015     if test ! -f "$CL_EXE_PATH"; then
4016         if test "$1" = "multi-arch"; then
4017             AC_MSG_WARN([no compiler (cl.exe) in $2])
4018             return 1
4019         else
4020             AC_MSG_ERROR([no compiler (cl.exe) in $2])
4021         fi
4022     fi
4024     dnl ===========================================================
4025     dnl  Check for the corresponding mspdb*.dll
4026     dnl ===========================================================
4028     # MSVC 15.0 has libraries from 14.0?
4029     mspdbnum="140"
4031     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
4032         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
4033     fi
4035     # The compiles has to find its shared libraries
4036     OLD_PATH="$PATH"
4037     TEMP_PATH=`cygpath -d "$2"`
4038     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
4040     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
4041         AC_MSG_ERROR([no compiler (cl.exe) in $2])
4042     fi
4044     PATH="$OLD_PATH"
4046     AC_MSG_RESULT([$CL_EXE_PATH])
4049 SOLARINC=
4050 MSBUILD_PATH=
4051 DEVENV=
4052 if test "$_os" = "WINNT"; then
4053     AC_MSG_CHECKING([Visual C++])
4054     find_msvc "$with_visual_studio"
4055     if test -z "$vctest"; then
4056         if test -n "$with_visual_studio"; then
4057             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
4058         else
4059             AC_MSG_ERROR([no Visual Studio installation found])
4060         fi
4061     fi
4062     AC_MSG_RESULT([])
4064     VC_PRODUCT_DIR="$vctest/VC"
4065     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
4067     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
4068     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
4069         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
4070         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
4071         if test $? -ne 0; then
4072             WIN_MULTI_ARCH=""
4073             WIN_OTHER_ARCH=""
4074         fi
4075     fi
4077     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
4078         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
4079         test_cl_exe "build" "$MSVC_BUILD_PATH"
4080     fi
4082     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
4083         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
4084         test_cl_exe "host" "$MSVC_HOST_PATH"
4085     else
4086         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
4087     fi
4089     AC_MSG_CHECKING([for short pathname of VC product directory])
4090     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
4091     AC_MSG_RESULT([$VC_PRODUCT_DIR])
4093     UCRTSDKDIR=
4094     UCRTVERSION=
4096     AC_MSG_CHECKING([for UCRT location])
4097     find_ucrt
4098     # find_ucrt errors out if it doesn't find it
4099     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
4100     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
4101     ucrtincpath_formatted=$formatted_path
4102     # SOLARINC is used for external modules and must be set too.
4103     # And no, it's not sufficient to set SOLARINC only, as configure
4104     # itself doesn't honour it.
4105     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
4106     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
4107     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
4108     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4110     AC_SUBST(UCRTSDKDIR)
4111     AC_SUBST(UCRTVERSION)
4113     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4114     # Find the proper version of MSBuild.exe to use based on the VS version
4115     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath
4116     if test -z "$regvalue" ; then
4117         if test "$WIN_BUILD_ARCH" != "x64"; then
4118             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4119         else
4120             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4121         fi
4122     fi
4123     if test -d "$regvalue" ; then
4124         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4125         AC_MSG_RESULT([$regvalue])
4126     else
4127         AC_MSG_ERROR([MSBuild.exe location not found])
4128     fi
4130     # Find the version of devenv.exe
4131     # MSVC 2017 devenv does not start properly from a DOS 8.3 path
4132     DEVENV=$(cygpath -lm "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe")
4133     DEVENV_unix=$(cygpath -u "$DEVENV")
4134     if test ! -e "$DEVENV_unix"; then
4135         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4136     fi
4138     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4139     dnl needed when building CLR code:
4140     if test -z "$MSVC_CXX"; then
4141         # This gives us a posix path with 8.3 filename restrictions
4142         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4143     fi
4145     if test -z "$CC"; then
4146         CC=$MSVC_CXX
4147         CC_BASE=`first_arg_basename "$CC"`
4148     fi
4149     if test -z "$CXX"; then
4150         CXX=$MSVC_CXX
4151         CXX_BASE=`first_arg_basename "$CXX"`
4152     fi
4154     if test -n "$CC"; then
4155         # Remove /cl.exe from CC case insensitive
4156         AC_MSG_NOTICE([found Visual C++ $vcyear])
4158         main_include_dir=`cygpath -d -m "$COMPATH/Include"`
4159         CPPFLAGS="$CPPFLAGS -I$main_include_dir"
4161         PathFormat "$COMPATH"
4162         COMPATH=`win_short_path_for_make "$formatted_path"`
4164         VCVER=$vcnumwithdot
4165         VCTOOLSET=$vctoolset
4167         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4168         # are always "better", we list them in reverse chronological order.
4170         case "$vcnumwithdot" in
4171         16.0 | 17.0)
4172             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4173             ;;
4174         esac
4176         # The expectation is that --with-windows-sdk should not need to be used
4177         if test -n "$with_windows_sdk"; then
4178             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4179             *" "$with_windows_sdk" "*)
4180                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4181                 ;;
4182             *)
4183                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4184                 ;;
4185             esac
4186         fi
4188         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4189         ac_objext=obj
4190         ac_exeext=exe
4192     else
4193         AC_MSG_ERROR([Visual C++ not found after all, huh])
4194     fi
4196     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4197     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4198         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4199         // between Visual Studio versions and _MSC_VER:
4200         #if _MSC_VER < 1925
4201         #error
4202         #endif
4203     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4205     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4206     # version of the Explorer extension (and maybe other small
4207     # bits, too) needed when installing a 32-bit LibreOffice on a
4208     # 64-bit OS. The 64-bit Explorer extension is a feature that
4209     # has been present since long in OOo. Don't confuse it with
4210     # building LibreOffice itself as 64-bit code.
4212     BUILD_X64=
4213     CXX_X64_BINARY=
4215     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4216         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4217         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4218              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4219         then
4220             BUILD_X64=TRUE
4221             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4222             AC_MSG_RESULT([found])
4223         else
4224             AC_MSG_RESULT([not found])
4225             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4226         fi
4227     elif test "$WIN_HOST_ARCH" = "x64"; then
4228         CXX_X64_BINARY=$CXX
4229     fi
4230     AC_SUBST(BUILD_X64)
4232     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4233     AC_SUBST(CXX_X64_BINARY)
4235     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4236     # needed to support TWAIN scan on both 32- and 64-bit systems
4238     case "$WIN_HOST_ARCH" in
4239     x64)
4240         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4241         if test -n "$CXX_X86_BINARY"; then
4242             BUILD_X86=TRUE
4243             AC_MSG_RESULT([preset])
4244         elif test -n "$WIN_MULTI_ARCH"; then
4245             BUILD_X86=TRUE
4246             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4247             CXX_X86_BINARY+=" /arch:SSE"
4248             AC_MSG_RESULT([found])
4249         else
4250             AC_MSG_RESULT([not found])
4251             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4252         fi
4253         ;;
4254     x86)
4255         BUILD_X86=TRUE
4256         CXX_X86_BINARY=$MSVC_CXX
4257         ;;
4258     esac
4259     AC_SUBST(BUILD_X86)
4260     AC_SUBST(CXX_X86_BINARY)
4262 AC_SUBST(VCVER)
4263 AC_SUBST(VCTOOLSET)
4264 AC_SUBST(DEVENV)
4265 AC_SUBST(MSVC_CXX)
4267 COM_IS_CLANG=
4268 AC_MSG_CHECKING([whether the compiler is actually Clang])
4269 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4270     #ifndef __clang__
4271     you lose
4272     #endif
4273     int foo=42;
4274     ]])],
4275     [AC_MSG_RESULT([yes])
4276      COM_IS_CLANG=TRUE],
4277     [AC_MSG_RESULT([no])])
4278 AC_SUBST(COM_IS_CLANG)
4280 CC_PLAIN=$CC
4281 CLANGVER=
4282 if test "$COM_IS_CLANG" = TRUE; then
4283     AC_MSG_CHECKING([whether Clang is new enough])
4284     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4285         #if !defined __apple_build_version__
4286         #error
4287         #endif
4288         ]])],
4289         [my_apple_clang=yes],[my_apple_clang=])
4290     if test "$my_apple_clang" = yes; then
4291         AC_MSG_RESULT([assumed yes (Apple Clang)])
4292     elif test "$_os" = Emscripten; then
4293         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4294     else
4295         if test "$_os" = WINNT; then
4296             dnl In which case, assume clang-cl:
4297             my_args="/EP /TC"
4298             dnl Filter out -FIIntrin.h, which needs to be explicitly stated for
4299             dnl clang-cl:
4300             CC_PLAIN=
4301             for i in $CC; do
4302                 case $i in
4303                 -FIIntrin.h)
4304                     ;;
4305                 *)
4306                     CC_PLAIN="$CC_PLAIN $i"
4307                     ;;
4308                 esac
4309             done
4310         else
4311             my_args="-E -P"
4312         fi
4313         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC_PLAIN $my_args - | sed 's/ //g'`
4314         CLANG_FULL_VERSION=`echo __clang_version__ | $CC_PLAIN $my_args -`
4315         CLANGVER=`echo $clang_version \
4316             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4317         if test "$CLANGVER" -ge 50002; then
4318             AC_MSG_RESULT([yes ($clang_version)])
4319         else
4320             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 5.0.2])
4321         fi
4322         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4323         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4324     fi
4327 SHOWINCLUDES_PREFIX=
4328 if test "$_os" = WINNT; then
4329     dnl We need to guess the prefix of the -showIncludes output, it can be
4330     dnl localized
4331     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4332     echo "#include <stdlib.h>" > conftest.c
4333     SHOWINCLUDES_PREFIX=`$CC_PLAIN $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4334         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4335     rm -f conftest.c conftest.obj
4336     if test -z "$SHOWINCLUDES_PREFIX"; then
4337         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4338     else
4339         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4340     fi
4342 AC_SUBST(SHOWINCLUDES_PREFIX)
4345 # prefix C with ccache if needed
4347 if test "$CCACHE" != ""; then
4348     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4350     AC_LANG_PUSH([C])
4351     save_CFLAGS=$CFLAGS
4352     CFLAGS="$CFLAGS --ccache-skip -O2"
4353     # msvc does not fail on unknown options, check stdout
4354     if test "$COM" = MSC; then
4355         CFLAGS="$CFLAGS -nologo"
4356     fi
4357     save_ac_c_werror_flag=$ac_c_werror_flag
4358     ac_c_werror_flag=yes
4359     dnl an empty program will do, we're checking the compiler flags
4360     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4361                       [use_ccache=yes], [use_ccache=no])
4362     CFLAGS=$save_CFLAGS
4363     ac_c_werror_flag=$save_ac_c_werror_flag
4364     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4365         AC_MSG_RESULT([yes])
4366     else
4367         CC="$CCACHE $CC"
4368         CC_BASE="ccache $CC_BASE"
4369         AC_MSG_RESULT([no])
4370     fi
4371     AC_LANG_POP([C])
4374 # ===================================================================
4375 # check various GCC options that Clang does not support now but maybe
4376 # will somewhen in the future, check them even for GCC, so that the
4377 # flags are set
4378 # ===================================================================
4380 HAVE_GCC_GGDB2=
4381 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4382     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4383     save_CFLAGS=$CFLAGS
4384     CFLAGS="$CFLAGS -Werror -ggdb2"
4385     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4386     CFLAGS=$save_CFLAGS
4387     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4388         AC_MSG_RESULT([yes])
4389     else
4390         AC_MSG_RESULT([no])
4391     fi
4393     if test "$host_cpu" = "m68k"; then
4394         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4395         save_CFLAGS=$CFLAGS
4396         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4397         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4398         CFLAGS=$save_CFLAGS
4399         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4400             AC_MSG_RESULT([yes])
4401         else
4402             AC_MSG_ERROR([no])
4403         fi
4404     fi
4406 AC_SUBST(HAVE_GCC_GGDB2)
4408 dnl ===================================================================
4409 dnl  Test the gcc version
4410 dnl ===================================================================
4411 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4412     AC_MSG_CHECKING([the GCC version])
4413     _gcc_version=`$CC -dumpfullversion`
4414     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4415         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4416     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4418     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4420     if test "$gcc_full_version" -lt 70000; then
4421         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 7.0.0])
4422     fi
4423 else
4424     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4425     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4426     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4427     # (which reports itself as GCC 4.2.1).
4428     GCC_VERSION=
4430 AC_SUBST(GCC_VERSION)
4432 dnl Set the ENABLE_DBGUTIL variable
4433 dnl ===================================================================
4434 AC_MSG_CHECKING([whether to build with additional debug utilities])
4435 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4436     ENABLE_DBGUTIL="TRUE"
4437     # this is an extra var so it can have different default on different MSVC
4438     # versions (in case there are version specific problems with it)
4439     MSVC_USE_DEBUG_RUNTIME="TRUE"
4441     AC_MSG_RESULT([yes])
4442     # cppunit and graphite expose STL in public headers
4443     if test "$with_system_cppunit" = "yes"; then
4444         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4445     else
4446         with_system_cppunit=no
4447     fi
4448     if test "$with_system_graphite" = "yes"; then
4449         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4450     else
4451         with_system_graphite=no
4452     fi
4453     if test "$with_system_orcus" = "yes"; then
4454         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4455     else
4456         with_system_orcus=no
4457     fi
4458     if test "$with_system_libcmis" = "yes"; then
4459         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4460     else
4461         with_system_libcmis=no
4462     fi
4463     if test "$with_system_hunspell" = "yes"; then
4464         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4465     else
4466         with_system_hunspell=no
4467     fi
4468     if test "$with_system_gpgmepp" = "yes"; then
4469         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4470     else
4471         with_system_gpgmepp=no
4472     fi
4473     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4474     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4475     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4476     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4477     # of those two is using the system variant:
4478     if test "$with_system_libnumbertext" = "yes"; then
4479         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4480     else
4481         with_system_libnumbertext=no
4482     fi
4483     if test "$with_system_libwps" = "yes"; then
4484         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4485     else
4486         with_system_libwps=no
4487     fi
4488 else
4489     ENABLE_DBGUTIL=""
4490     MSVC_USE_DEBUG_RUNTIME=""
4491     AC_MSG_RESULT([no])
4493 AC_SUBST(ENABLE_DBGUTIL)
4494 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4496 dnl Set the ENABLE_DEBUG variable.
4497 dnl ===================================================================
4498 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4499     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4501 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4502     if test -z "$libo_fuzzed_enable_debug"; then
4503         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4504     else
4505         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4506         enable_debug=yes
4507     fi
4510 AC_MSG_CHECKING([whether to do a debug build])
4511 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4512     ENABLE_DEBUG="TRUE"
4513     if test -n "$ENABLE_DBGUTIL" ; then
4514         AC_MSG_RESULT([yes (dbgutil)])
4515     else
4516         AC_MSG_RESULT([yes])
4517     fi
4518 else
4519     ENABLE_DEBUG=""
4520     AC_MSG_RESULT([no])
4522 AC_SUBST(ENABLE_DEBUG)
4524 dnl ===================================================================
4525 dnl Select the linker to use (gold/lld/ld.bfd).
4526 dnl This is done only after compiler checks (need to know if Clang is
4527 dnl used, for different defaults) and after checking if a debug build
4528 dnl is wanted (non-debug builds get the default linker if not explicitly
4529 dnl specified otherwise).
4530 dnl All checks for linker features/options should come after this.
4531 dnl ===================================================================
4532 check_use_ld()
4534     use_ld=-fuse-ld=${1%%:*}
4535     use_ld_path=${1#*:}
4536     if test "$use_ld_path" != "$1"; then
4537         use_ld="$use_ld --ld-path=$use_ld_path"
4538     fi
4539     use_ld_fail_if_error=$2
4540     use_ld_ok=
4541     AC_MSG_CHECKING([for $use_ld linker support])
4542     use_ld_ldflags_save="$LDFLAGS"
4543     LDFLAGS="$LDFLAGS $use_ld"
4544     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4545 #include <stdio.h>
4546         ],[
4547 printf ("hello world\n");
4548         ])], USE_LD=$use_ld, [])
4549     if test -n "$USE_LD"; then
4550         AC_MSG_RESULT( yes )
4551         use_ld_ok=yes
4552     else
4553         if test -n "$use_ld_fail_if_error"; then
4554             AC_MSG_ERROR( no )
4555         else
4556             AC_MSG_RESULT( no )
4557         fi
4558     fi
4559     if test -n "$use_ld_ok"; then
4560         dnl keep the value of LDFLAGS
4561         return 0
4562     fi
4563     LDFLAGS="$use_ld_ldflags_save"
4564     return 1
4566 USE_LD=
4567 if test "$enable_ld" != "no"; then
4568     if test "$GCC" = "yes"; then
4569         if test -n "$enable_ld"; then
4570             check_use_ld "$enable_ld" fail_if_error
4571         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4572             dnl non-debug builds default to the default linker
4573             true
4574         elif test -n "$COM_IS_CLANG"; then
4575             check_use_ld lld
4576             if test $? -ne 0; then
4577                 check_use_ld gold
4578             fi
4579         else
4580             # For gcc first try gold, new versions also support lld.
4581             check_use_ld gold
4582             if test $? -ne 0; then
4583                 check_use_ld lld
4584             fi
4585         fi
4586         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4587         rm conftest.out
4588         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD)')
4589         if test -z "$ld_used"; then
4590             ld_used="unknown"
4591         fi
4592         AC_MSG_CHECKING([for linker that is used])
4593         AC_MSG_RESULT([$ld_used])
4594         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4595             if echo "$ld_used" | grep -q "^GNU ld"; then
4596                 AC_MSG_WARN([The default GNU linker is slow, consider using the LLD or the GNU gold linker.])
4597                 add_warning "The default GNU linker is slow, consider using the LLD or the GNU gold linker."
4598             fi
4599         fi
4600     else
4601         if test "$enable_ld" = "yes"; then
4602             AC_MSG_ERROR([--enable-ld not supported])
4603         fi
4604     fi
4606 AC_SUBST(USE_LD)
4608 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4609 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4610     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4611     bsymbolic_functions_ldflags_save=$LDFLAGS
4612     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4613     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4614 #include <stdio.h>
4615         ],[
4616 printf ("hello world\n");
4617         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4618     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4619         AC_MSG_RESULT( found )
4620     else
4621         AC_MSG_RESULT( not found )
4622     fi
4623     LDFLAGS=$bsymbolic_functions_ldflags_save
4625 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4627 LD_GC_SECTIONS=
4628 if test "$GCC" = "yes"; then
4629     for flag in "--gc-sections" "-dead_strip"; do
4630         AC_MSG_CHECKING([for $flag linker support])
4631         ldflags_save=$LDFLAGS
4632         LDFLAGS="$LDFLAGS -Wl,$flag"
4633         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4634 #include <stdio.h>
4635             ],[
4636 printf ("hello world\n");
4637             ])],[
4638             LD_GC_SECTIONS="-Wl,$flag"
4639             AC_MSG_RESULT( found )
4640             ], [
4641             AC_MSG_RESULT( not found )
4642             ])
4643         LDFLAGS=$ldflags_save
4644         if test -n "$LD_GC_SECTIONS"; then
4645             break
4646         fi
4647     done
4649 AC_SUBST(LD_GC_SECTIONS)
4651 HAVE_GSPLIT_DWARF=
4652 if test "$enable_split_debug" != no; then
4653     use_split_debug=
4654     if test -n "$ENABLE_LTO"; then
4655         true # Inherently incompatible, since no debug info is created while compiling, GCC complains.
4656     elif test "$enable_split_debug" = yes; then
4657         use_split_debug=1
4658     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4659     elif test "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4660         use_split_debug=1
4661     fi
4662     if test -n "$use_split_debug"; then
4663         AC_MSG_CHECKING([whether $CC_BASE supports -gsplit-dwarf])
4664         save_CFLAGS=$CFLAGS
4665         CFLAGS="$CFLAGS -Werror -gsplit-dwarf"
4666         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_SPLIT_DWARF=TRUE ],[])
4667         CFLAGS=$save_CFLAGS
4668         if test "$HAVE_GCC_SPLIT_DWARF" = "TRUE"; then
4669             AC_MSG_RESULT([yes])
4670         else
4671             if test "$enable_split_debug" = yes; then
4672                 AC_MSG_ERROR([no])
4673             else
4674                 AC_MSG_RESULT([no])
4675             fi
4676         fi
4677     fi
4678     if test -z "$HAVE_GCC_SPLIT_DWARF" -a "$test_split_debug" = "yes" -a -n "$use_split_debug"; then
4679         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4680         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4681     fi
4683 AC_SUBST(HAVE_GCC_SPLIT_DWARF)
4685 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4686 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4687 save_CFLAGS=$CFLAGS
4688 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4689 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4690 CFLAGS=$save_CFLAGS
4691 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4692     AC_MSG_RESULT([yes])
4693 else
4694     AC_MSG_RESULT([no])
4696 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4698 ENABLE_GDB_INDEX=
4699 if test "$enable_gdb_index" != "no"; then
4700     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4701     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4702         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4703         save_CFLAGS=$CFLAGS
4704         CFLAGS="$CFLAGS -Werror -ggnu-pubnames"
4705         have_ggnu_pubnames=
4706         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4707         if test "$have_ggnu_pubnames" != "TRUE"; then
4708             if test "$enable_gdb_index" = "yes"; then
4709                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4710             else
4711                 AC_MSG_RESULT( no )
4712             fi
4713         else
4714             AC_MSG_RESULT( yes )
4715             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4716             ldflags_save=$LDFLAGS
4717             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4718             AC_LINK_IFELSE([AC_LANG_PROGRAM([
4719 #include <stdio.h>
4720                 ],[
4721 printf ("hello world\n");
4722                 ])], ENABLE_GDB_INDEX=TRUE, [])
4723             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
4724                 AC_MSG_RESULT( yes )
4725             else
4726                 if test "$enable_gdb_index" = "yes"; then
4727                     AC_MSG_ERROR( no )
4728                 else
4729                     AC_MSG_RESULT( no )
4730                 fi
4731             fi
4732             LDFLAGS=$ldflags_save
4733         fi
4734         CFLAGS=$save_CFLAGS
4735         fi
4736     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4737         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
4738         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
4739     fi
4741 AC_SUBST(ENABLE_GDB_INDEX)
4743 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
4744     enable_sal_log=yes
4746 if test "$enable_sal_log" = yes; then
4747     ENABLE_SAL_LOG=TRUE
4749 AC_SUBST(ENABLE_SAL_LOG)
4751 dnl Check for enable symbols option
4752 dnl ===================================================================
4753 AC_MSG_CHECKING([whether to generate debug information])
4754 if test -z "$enable_symbols"; then
4755     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4756         enable_symbols=yes
4757     else
4758         enable_symbols=no
4759     fi
4761 if test "$enable_symbols" = yes; then
4762     ENABLE_SYMBOLS_FOR=all
4763     AC_MSG_RESULT([yes])
4764 elif test "$enable_symbols" = no; then
4765     ENABLE_SYMBOLS_FOR=
4766     AC_MSG_RESULT([no])
4767 else
4768     # Selective debuginfo.
4769     ENABLE_SYMBOLS_FOR="$enable_symbols"
4770     AC_MSG_RESULT([for "$enable_symbols"])
4772 AC_SUBST(ENABLE_SYMBOLS_FOR)
4774 if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then
4775     # Building on Android with full symbols: without enough memory the linker never finishes currently.
4776     AC_MSG_CHECKING([whether enough memory is available for linking])
4777     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
4778     # Check for 15GB, as Linux reports a bit less than the physical memory size.
4779     if test -n "$mem_size" -a $mem_size -lt 15728640; then
4780         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
4781     else
4782         AC_MSG_RESULT([yes])
4783     fi
4786 ENABLE_OPTIMIZED=
4787 ENABLE_OPTIMIZED_DEBUG=
4788 AC_MSG_CHECKING([whether to compile with optimization flags])
4789 if test -z "$enable_optimized"; then
4790     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4791         enable_optimized=no
4792     else
4793         enable_optimized=yes
4794     fi
4796 if test "$enable_optimized" = yes; then
4797     ENABLE_OPTIMIZED=TRUE
4798     AC_MSG_RESULT([yes])
4799 elif test "$enable_optimized" = debug; then
4800     ENABLE_OPTIMIZED_DEBUG=TRUE
4801     AC_MSG_RESULT([yes (debug)])
4802     HAVE_GCC_OG=
4803     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4804         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
4805         save_CFLAGS=$CFLAGS
4806         CFLAGS="$CFLAGS -Werror -Og"
4807         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
4808         CFLAGS=$save_CFLAGS
4809         if test "$HAVE_GCC_OG" = "TRUE"; then
4810             AC_MSG_RESULT([yes])
4811         else
4812             AC_MSG_RESULT([no])
4813         fi
4814     fi
4815     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
4816         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
4817     fi
4818 else
4819     AC_MSG_RESULT([no])
4821 AC_SUBST(ENABLE_OPTIMIZED)
4822 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
4825 # determine CPUNAME, OS, ...
4827 case "$host_os" in
4829 aix*)
4830     COM=GCC
4831     CPUNAME=POWERPC
4832     OS=AIX
4833     RTL_OS=AIX
4834     RTL_ARCH=PowerPC
4835     PLATFORMID=aix_powerpc
4836     P_SEP=:
4837     ;;
4839 cygwin*|wsl*)
4840     # Already handled
4841     ;;
4843 darwin*|macos*)
4844     COM=GCC
4845     OS=MACOSX
4846     RTL_OS=MacOSX
4847     P_SEP=:
4849     case "$host_cpu" in
4850     aarch64|arm64)
4851         if test "$enable_ios_simulator" = "yes"; then
4852             OS=iOS
4853         else
4854             CPUNAME=AARCH64
4855             RTL_ARCH=AARCH64
4856             PLATFORMID=macosx_aarch64
4857         fi
4858         ;;
4859     x86_64)
4860         if test "$enable_ios_simulator" = "yes"; then
4861             OS=iOS
4862         fi
4863         CPUNAME=X86_64
4864         RTL_ARCH=X86_64
4865         PLATFORMID=macosx_x86_64
4866         ;;
4867     *)
4868         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4869         ;;
4870     esac
4871     ;;
4873 ios*)
4874     COM=GCC
4875     OS=iOS
4876     RTL_OS=iOS
4877     P_SEP=:
4879     case "$host_cpu" in
4880     aarch64|arm64)
4881         if test "$enable_ios_simulator" = "yes"; then
4882             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
4883         fi
4884         ;;
4885     *)
4886         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4887         ;;
4888     esac
4889     CPUNAME=AARCH64
4890     RTL_ARCH=AARCH64
4891     PLATFORMID=ios_arm64
4892     ;;
4894 dragonfly*)
4895     COM=GCC
4896     OS=DRAGONFLY
4897     RTL_OS=DragonFly
4898     P_SEP=:
4900     case "$host_cpu" in
4901     i*86)
4902         CPUNAME=INTEL
4903         RTL_ARCH=x86
4904         PLATFORMID=dragonfly_x86
4905         ;;
4906     x86_64)
4907         CPUNAME=X86_64
4908         RTL_ARCH=X86_64
4909         PLATFORMID=dragonfly_x86_64
4910         ;;
4911     *)
4912         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4913         ;;
4914     esac
4915     ;;
4917 freebsd*)
4918     COM=GCC
4919     RTL_OS=FreeBSD
4920     OS=FREEBSD
4921     P_SEP=:
4923     case "$host_cpu" in
4924     aarch64)
4925         CPUNAME=AARCH64
4926         PLATFORMID=freebsd_aarch64
4927         RTL_ARCH=AARCH64
4928         ;;
4929     i*86)
4930         CPUNAME=INTEL
4931         RTL_ARCH=x86
4932         PLATFORMID=freebsd_x86
4933         ;;
4934     x86_64|amd64)
4935         CPUNAME=X86_64
4936         RTL_ARCH=X86_64
4937         PLATFORMID=freebsd_x86_64
4938         ;;
4939     powerpc64)
4940         CPUNAME=POWERPC64
4941         RTL_ARCH=PowerPC_64
4942         PLATFORMID=freebsd_powerpc64
4943         ;;
4944     powerpc|powerpcspe)
4945         CPUNAME=POWERPC
4946         RTL_ARCH=PowerPC
4947         PLATFORMID=freebsd_powerpc
4948         ;;
4949     *)
4950         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4951         ;;
4952     esac
4953     ;;
4955 haiku*)
4956     COM=GCC
4957     GUIBASE=haiku
4958     RTL_OS=Haiku
4959     OS=HAIKU
4960     P_SEP=:
4962     case "$host_cpu" in
4963     i*86)
4964         CPUNAME=INTEL
4965         RTL_ARCH=x86
4966         PLATFORMID=haiku_x86
4967         ;;
4968     x86_64|amd64)
4969         CPUNAME=X86_64
4970         RTL_ARCH=X86_64
4971         PLATFORMID=haiku_x86_64
4972         ;;
4973     *)
4974         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4975         ;;
4976     esac
4977     ;;
4979 kfreebsd*)
4980     COM=GCC
4981     OS=LINUX
4982     RTL_OS=kFreeBSD
4983     P_SEP=:
4985     case "$host_cpu" in
4987     i*86)
4988         CPUNAME=INTEL
4989         RTL_ARCH=x86
4990         PLATFORMID=kfreebsd_x86
4991         ;;
4992     x86_64)
4993         CPUNAME=X86_64
4994         RTL_ARCH=X86_64
4995         PLATFORMID=kfreebsd_x86_64
4996         ;;
4997     *)
4998         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4999         ;;
5000     esac
5001     ;;
5003 linux-gnu*|linux-musl*)
5004     COM=GCC
5005     OS=LINUX
5006     RTL_OS=Linux
5007     P_SEP=:
5009     case "$host_cpu" in
5011     aarch64)
5012         CPUNAME=AARCH64
5013         PLATFORMID=linux_aarch64
5014         RTL_ARCH=AARCH64
5015         EPM_FLAGS="-a arm64"
5016         ;;
5017     alpha)
5018         CPUNAME=AXP
5019         RTL_ARCH=ALPHA
5020         PLATFORMID=linux_alpha
5021         ;;
5022     arm*)
5023         CPUNAME=ARM
5024         EPM_FLAGS="-a arm"
5025         RTL_ARCH=ARM_EABI
5026         PLATFORMID=linux_arm_eabi
5027         case "$host_cpu" in
5028         arm*-linux)
5029             RTL_ARCH=ARM_OABI
5030             PLATFORMID=linux_arm_oabi
5031             ;;
5032         esac
5033         ;;
5034     hppa)
5035         CPUNAME=HPPA
5036         RTL_ARCH=HPPA
5037         EPM_FLAGS="-a hppa"
5038         PLATFORMID=linux_hppa
5039         ;;
5040     i*86)
5041         CPUNAME=INTEL
5042         RTL_ARCH=x86
5043         PLATFORMID=linux_x86
5044         ;;
5045     ia64)
5046         CPUNAME=IA64
5047         RTL_ARCH=IA64
5048         PLATFORMID=linux_ia64
5049         ;;
5050     mips)
5051         CPUNAME=GODSON
5052         RTL_ARCH=MIPS_EB
5053         EPM_FLAGS="-a mips"
5054         PLATFORMID=linux_mips_eb
5055         ;;
5056     mips64)
5057         CPUNAME=GODSON64
5058         RTL_ARCH=MIPS64_EB
5059         EPM_FLAGS="-a mips64"
5060         PLATFORMID=linux_mips64_eb
5061         ;;
5062     mips64el)
5063         CPUNAME=GODSON64
5064         RTL_ARCH=MIPS64_EL
5065         EPM_FLAGS="-a mips64el"
5066         PLATFORMID=linux_mips64_el
5067         ;;
5068     mipsel)
5069         CPUNAME=GODSON
5070         RTL_ARCH=MIPS_EL
5071         EPM_FLAGS="-a mipsel"
5072         PLATFORMID=linux_mips_el
5073         ;;
5074     m68k)
5075         CPUNAME=M68K
5076         RTL_ARCH=M68K
5077         PLATFORMID=linux_m68k
5078         ;;
5079     powerpc)
5080         CPUNAME=POWERPC
5081         RTL_ARCH=PowerPC
5082         PLATFORMID=linux_powerpc
5083         ;;
5084     powerpc64)
5085         CPUNAME=POWERPC64
5086         RTL_ARCH=PowerPC_64
5087         PLATFORMID=linux_powerpc64
5088         ;;
5089     powerpc64le)
5090         CPUNAME=POWERPC64
5091         RTL_ARCH=PowerPC_64_LE
5092         PLATFORMID=linux_powerpc64_le
5093         ;;
5094     sparc)
5095         CPUNAME=SPARC
5096         RTL_ARCH=SPARC
5097         PLATFORMID=linux_sparc
5098         ;;
5099     sparc64)
5100         CPUNAME=SPARC64
5101         RTL_ARCH=SPARC64
5102         PLATFORMID=linux_sparc64
5103         ;;
5104     s390)
5105         CPUNAME=S390
5106         RTL_ARCH=S390
5107         PLATFORMID=linux_s390
5108         ;;
5109     s390x)
5110         CPUNAME=S390X
5111         RTL_ARCH=S390x
5112         PLATFORMID=linux_s390x
5113         ;;
5114     x86_64)
5115         CPUNAME=X86_64
5116         RTL_ARCH=X86_64
5117         PLATFORMID=linux_x86_64
5118         ;;
5119     *)
5120         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5121         ;;
5122     esac
5123     ;;
5125 linux-android*)
5126     COM=GCC
5127     OS=ANDROID
5128     RTL_OS=Android
5129     P_SEP=:
5131     case "$host_cpu" in
5133     arm|armel)
5134         CPUNAME=ARM
5135         RTL_ARCH=ARM_EABI
5136         PLATFORMID=android_arm_eabi
5137         ;;
5138     aarch64)
5139         CPUNAME=AARCH64
5140         RTL_ARCH=AARCH64
5141         PLATFORMID=android_aarch64
5142         ;;
5143     i*86)
5144         CPUNAME=INTEL
5145         RTL_ARCH=x86
5146         PLATFORMID=android_x86
5147         ;;
5148     x86_64)
5149         CPUNAME=X86_64
5150         RTL_ARCH=X86_64
5151         PLATFORMID=android_x86_64
5152         ;;
5153     *)
5154         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5155         ;;
5156     esac
5157     ;;
5159 *netbsd*)
5160     COM=GCC
5161     OS=NETBSD
5162     RTL_OS=NetBSD
5163     P_SEP=:
5165     case "$host_cpu" in
5166     i*86)
5167         CPUNAME=INTEL
5168         RTL_ARCH=x86
5169         PLATFORMID=netbsd_x86
5170         ;;
5171     powerpc)
5172         CPUNAME=POWERPC
5173         RTL_ARCH=PowerPC
5174         PLATFORMID=netbsd_powerpc
5175         ;;
5176     sparc)
5177         CPUNAME=SPARC
5178         RTL_ARCH=SPARC
5179         PLATFORMID=netbsd_sparc
5180         ;;
5181     x86_64)
5182         CPUNAME=X86_64
5183         RTL_ARCH=X86_64
5184         PLATFORMID=netbsd_x86_64
5185         ;;
5186     *)
5187         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5188         ;;
5189     esac
5190     ;;
5192 openbsd*)
5193     COM=GCC
5194     OS=OPENBSD
5195     RTL_OS=OpenBSD
5196     P_SEP=:
5198     case "$host_cpu" in
5199     i*86)
5200         CPUNAME=INTEL
5201         RTL_ARCH=x86
5202         PLATFORMID=openbsd_x86
5203         ;;
5204     x86_64)
5205         CPUNAME=X86_64
5206         RTL_ARCH=X86_64
5207         PLATFORMID=openbsd_x86_64
5208         ;;
5209     *)
5210         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5211         ;;
5212     esac
5213     SOLARINC="$SOLARINC -I/usr/local/include"
5214     ;;
5216 solaris*)
5217     COM=GCC
5218     OS=SOLARIS
5219     RTL_OS=Solaris
5220     P_SEP=:
5222     case "$host_cpu" in
5223     i*86)
5224         CPUNAME=INTEL
5225         RTL_ARCH=x86
5226         PLATFORMID=solaris_x86
5227         ;;
5228     sparc)
5229         CPUNAME=SPARC
5230         RTL_ARCH=SPARC
5231         PLATFORMID=solaris_sparc
5232         ;;
5233     sparc64)
5234         CPUNAME=SPARC64
5235         RTL_ARCH=SPARC64
5236         PLATFORMID=solaris_sparc64
5237         ;;
5238     *)
5239         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5240         ;;
5241     esac
5242     SOLARINC="$SOLARINC -I/usr/local/include"
5243     ;;
5245 emscripten*)
5246     COM=GCC
5247     OS=EMSCRIPTEN
5248     RTL_OS=Emscripten
5249     P_SEP=:
5251     case "$host_cpu" in
5252     wasm32|wasm64)
5253         ;;
5254     *)
5255         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5256         ;;
5257     esac
5258     CPUNAME=INTEL
5259     RTL_ARCH=x86
5260     PLATFORMID=linux_x86
5261     ;;
5264     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5265     ;;
5266 esac
5268 if test "$with_x" = "no"; then
5269     AC_MSG_ERROR([Use --disable-gui instead. How can we get rid of this option? No idea where it comes from.])
5272 DISABLE_GUI=""
5273 if test "$enable_gui" = "no"; then
5274     if test "$using_x11" != yes; then
5275         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5276     fi
5277     USING_X11=
5278     DISABLE_GUI=TRUE
5279 else
5280     AC_DEFINE(HAVE_FEATURE_UI)
5282 AC_SUBST(DISABLE_GUI)
5284 if test "$using_x11" = yes; then
5285     if test "$USING_X11" = TRUE; then
5286         AC_DEFINE(USING_X11)
5287     else
5288         disable_x11_tests
5289     fi
5290 else
5291     if test "$USING_X11" = TRUE; then
5292         AC_MSG_ERROR([Platform doesn't support X11 (\$using_x11), but \$USING_X11 is set!])
5293     fi
5296 WORKDIR="${BUILDDIR}/workdir"
5297 INSTDIR="${BUILDDIR}/instdir"
5298 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5299 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5300 SOLARINC="-I$SRC_ROOT/include $SOLARINC"
5301 AC_SUBST(COM)
5302 AC_SUBST(CPUNAME)
5303 AC_SUBST(RTL_OS)
5304 AC_SUBST(RTL_ARCH)
5305 AC_SUBST(EPM_FLAGS)
5306 AC_SUBST(USING_X11)
5307 AC_SUBST([INSTDIR])
5308 AC_SUBST([INSTROOT])
5309 AC_SUBST([INSTROOTBASE])
5310 AC_SUBST(OS)
5311 AC_SUBST(P_SEP)
5312 AC_SUBST(WORKDIR)
5313 AC_SUBST(PLATFORMID)
5314 AC_SUBST(WINDOWS_X64)
5315 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5317 if test "$OS" = WNT -a "$COM" = MSC; then
5318     case "$CPUNAME" in
5319     INTEL) CPPU_ENV=msci ;;
5320     X86_64) CPPU_ENV=mscx ;;
5321     AARCH64) CPPU_ENV=msca ;;
5322     *)
5323         AC_MSG_ERROR([Unknown \$CPUNAME '$CPUNAME' for $OS / $COM"])
5324         ;;
5325     esac
5326 else
5327     CPPU_ENV=gcc3
5329 AC_SUBST(CPPU_ENV)
5331 dnl ===================================================================
5332 dnl Test which package format to use
5333 dnl ===================================================================
5334 AC_MSG_CHECKING([which package format to use])
5335 if test -n "$with_package_format" -a "$with_package_format" != no; then
5336     for i in $with_package_format; do
5337         case "$i" in
5338         aix | bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5339             ;;
5340         *)
5341             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5342 aix - AIX software distribution
5343 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5344 deb - Debian software distribution
5345 pkg - Solaris software distribution
5346 rpm - RedHat software distribution
5348 LibreOffice additionally supports:
5349 archive - .tar.gz or .zip
5350 dmg - macOS .dmg
5351 installed - installation tree
5352 msi - Windows .msi
5353         ])
5354             ;;
5355         esac
5356     done
5357     # fakeroot is needed to ensure correct file ownerships/permissions
5358     # inside deb packages and tar archives created on Linux and Solaris.
5359     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5360         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5361         if test "$FAKEROOT" = "no"; then
5362             AC_MSG_ERROR(
5363                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5364         fi
5365     fi
5366     PKGFORMAT="$with_package_format"
5367     AC_MSG_RESULT([$PKGFORMAT])
5368 else
5369     PKGFORMAT=
5370     AC_MSG_RESULT([none])
5372 AC_SUBST(PKGFORMAT)
5374 dnl ===================================================================
5375 dnl handle help related options
5377 dnl If you change help related options, please update README.help
5378 dnl ===================================================================
5380 ENABLE_HTMLHELP=
5381 HELP_OMINDEX_PAGE=
5382 HELP_ONLINE=
5383 WITH_HELPPACKS=
5385 AC_MSG_CHECKING([which help to build])
5386 if test -n "$with_help" -a "$with_help" != "no"; then
5387     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5388     BUILD_TYPE="$BUILD_TYPE HELP"
5389     case "$with_help" in
5390     "html")
5391         ENABLE_HTMLHELP=TRUE
5392         WITH_HELPPACKS=TRUE
5393         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5394         AC_MSG_RESULT([HTML (local)])
5395         ;;
5396     "online")
5397         ENABLE_HTMLHELP=TRUE
5398         HELP_ONLINE=TRUE
5399         AC_MSG_RESULT([HTML (online)])
5400         ;;
5401     yes)
5402         WITH_HELPPACKS=TRUE
5403         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5404         AC_MSG_RESULT([XML (local)])
5405         ;;
5406     *)
5407         AC_MSG_ERROR([Unknown --with-help=$with_help])
5408         ;;
5409     esac
5410 else
5411     AC_MSG_RESULT([no])
5414 AC_MSG_CHECKING([if we need to build the help index tooling])
5415 if test "$with_help" = yes -o "$enable_extension_integration" != no; then
5416     BUILD_TYPE="$BUILD_TYPE HELPTOOLS"
5417     AC_MSG_RESULT([yes])
5418 else
5419     AC_MSG_RESULT([no])
5422 AC_MSG_CHECKING([whether to enable xapian-omega support for online help])
5423 if test -n "$with_omindex" -a "$with_omindex" != "no"; then
5424     if test "$HELP_ONLINE" != TRUE; then
5425         AC_MSG_ERROR([Can't build xapian-omega index without --help=online])
5426     fi
5427     case "$with_omindex" in
5428     "server")
5429         HELP_OMINDEX_PAGE=TRUE
5430         AC_MSG_RESULT([SERVER])
5431         ;;
5432     "noxap")
5433         AC_MSG_RESULT([NOXAP])
5434         ;;
5435     *)
5436         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5437         ;;
5438     esac
5439 else
5440     AC_MSG_RESULT([no])
5443 AC_MSG_CHECKING([whether to include the XML-help support])
5444 if test "$enable_xmlhelp" = yes; then
5445     BUILD_TYPE="$BUILD_TYPE XMLHELP"
5446     AC_DEFINE(HAVE_FEATURE_XMLHELP)
5447     AC_MSG_RESULT([yes])
5448 else
5449     if test "$with_help" = yes; then
5450         add_warning "Building the XML help, but LO with disabled xmlhelp support. Generated help can't be accessed from this LO build!"
5451     fi
5452     AC_MSG_RESULT([no])
5455 dnl Test whether to integrate helppacks into the product's installer
5456 AC_MSG_CHECKING([for helppack integration])
5457 if test -z "$WITH_HELPPACKS" -o "$with_helppack_integration" = no; then
5458     AC_MSG_RESULT([no integration])
5459 else
5460     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
5461     AC_MSG_RESULT([integration])
5464 AC_SUBST([ENABLE_HTMLHELP])
5465 AC_SUBST([HELP_OMINDEX_PAGE])
5466 AC_SUBST([HELP_ONLINE])
5467 # WITH_HELPPACKS is used only in configure
5469 dnl ===================================================================
5470 dnl Set up a different compiler to produce tools to run on the build
5471 dnl machine when doing cross-compilation
5472 dnl ===================================================================
5474 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5475 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5476 if test "$cross_compiling" = "yes"; then
5477     AC_MSG_CHECKING([for BUILD platform configuration])
5478     echo
5479     rm -rf CONF-FOR-BUILD config_build.mk
5480     mkdir CONF-FOR-BUILD
5481     # Here must be listed all files needed when running the configure script. In particular, also
5482     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5483     # keep them in the same order as there.
5484     (cd $SRC_ROOT && tar cf - \
5485         config.guess \
5486         bin/get_config_variables \
5487         solenv/bin/getcompver.awk \
5488         solenv/inc/langlist.mk \
5489         download.lst \
5490         config_host.mk.in \
5491         config_host_lang.mk.in \
5492         Makefile.in \
5493         bin/bffvalidator.sh.in \
5494         bin/odfvalidator.sh.in \
5495         bin/officeotron.sh.in \
5496         hardened_runtime.xcent.in \
5497         instsetoo_native/util/openoffice.lst.in \
5498         config_host/*.in \
5499         sysui/desktop/macosx/Info.plist.in \
5500         .vscode/vs-code-template.code-workspace.in \
5501         ) \
5502     | (cd CONF-FOR-BUILD && tar xf -)
5503     cp configure CONF-FOR-BUILD
5504     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5505     (
5506     unset COM USING_X11 OS CPUNAME
5507     unset CC CXX SYSBASE CFLAGS
5508     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5509     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5510     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5511     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5512     if test -n "$CC_FOR_BUILD"; then
5513         export CC="$CC_FOR_BUILD"
5514         CC_BASE=`first_arg_basename "$CC"`
5515     fi
5516     if test -n "$CXX_FOR_BUILD"; then
5517         export CXX="$CXX_FOR_BUILD"
5518         CXX_BASE=`first_arg_basename "$CXX"`
5519     fi
5520     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5521     cd CONF-FOR-BUILD
5523     # Handle host configuration, which affects the cross-toolset too
5524     sub_conf_opts=""
5525     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5526     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5527     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5528     if test -n "$ENABLE_JAVA"; then
5529         case "$_os" in
5530         iOS) sub_conf_opts="$sub_conf_opts --without-java" ;; # force it off, like it used to be
5531         Android)
5532             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5533             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5534             ;;
5535         *)
5536             if test -z "$with_jdk_home"; then
5537                 AC_MSG_ERROR([Missing host JDK! This can't be detected for the build OS, so you have to specify it with --with-jdk-home.])
5538             fi
5539             ;;
5540         esac
5541     else
5542         sub_conf_opts="$sub_conf_opts --without-java"
5543     fi
5544     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5545     test "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" && sub_conf_opts="$sub_conf_opts --with-system-icu"
5546     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no --disable-database-connectivity"
5547     test -n "$with_help" -a "$with_help" != "no" && sub_conf_opts="$sub_conf_opts --with-help=$with_help"
5548     test "$enable_extensions" = yes || sub_conf_opts="$sub_conf_opts --disable-extensions"
5549     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5551     # Don't bother having configure look for stuff not needed for the build platform anyway
5552     sub_conf_defaults=" \
5553         --build="$build_alias" \
5554         --disable-cairo-canvas \
5555         --disable-cups \
5556         --disable-firebird-sdbc \
5557         --disable-gpgmepp \
5558         --disable-gstreamer-1-0 \
5559         --disable-gtk3 \
5560         --disable-gtk4 \
5561         --disable-mariadb-sdbc \
5562         --disable-nss \
5563         --disable-online-update \
5564         --disable-opencl \
5565         --disable-pdfimport \
5566         --disable-postgresql-sdbc \
5567         --disable-skia \
5568         --enable-icecream="$enable_icecream" \
5569         --without-doxygen \
5570         --without-webdav \
5571         --with-parallelism="$with_parallelism" \
5572         --with-theme="$with_theme" \
5573         --with-tls=openssl \
5575     echo "    Running CONF-FOR-BUILD/configure" $sub_conf_defaults $sub_conf_opts $with_build_platform_configure_options --srcdir=$srcdir
5576     ./configure \
5577         $sub_conf_defaults \
5578         $sub_conf_opts \
5579         $with_build_platform_configure_options \
5580         --srcdir=$srcdir \
5581         2>&1 | sed -e 's/^/    /'
5582     if test [${PIPESTATUS[0]}] -ne 0; then
5583         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5584     fi
5586     # filter permitted build targets
5587     PERMITTED_BUILD_TARGETS="
5588         AVMEDIA
5589         BOOST
5590         CAIRO
5591         CLUCENE
5592         CUCKOO
5593         CURL
5594         DBCONNECTIVITY
5595         DESKTOP
5596         DYNLOADING
5597         EPOXY
5598         EXPAT
5599         GLM
5600         GRAPHITE
5601         HARFBUZZ
5602         HELPTOOLS
5603         ICU
5604         LCMS2
5605         LIBJPEG_TURBO
5606         LIBLANGTAG
5607         LibO
5608         LIBFFI
5609         LIBPN
5610         LIBXML2
5611         LIBXSLT
5612         MDDS
5613         NATIVE
5614         OPENSSL
5615         ORCUS
5616         PYTHON
5617         SCRIPTING
5618         ZLIB
5620     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5621     # newlined lists, to use grep as a filter
5622     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5623     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5624     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5625     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5627     cp config_host.mk ../config_build.mk
5628     cp config_host_lang.mk ../config_build_lang.mk
5629     mv config.log ../config.Build.log
5630     mkdir -p ../config_build
5631     mv config_host/*.h ../config_build
5632     test -f "$WARNINGS_FILE" && mv "$WARNINGS_FILE" "../$WARNINGS_FILE_FOR_BUILD"
5634     # all these will get a _FOR_BUILD postfix
5635     DIRECT_FOR_BUILD_SETTINGS="
5636         CC
5637         CPPU_ENV
5638         CXX
5639         ILIB
5640         JAVA_HOME
5641         JAVAIFLAGS
5642         JDK
5643         LIBO_BIN_FOLDER
5644         LIBO_LIB_FOLDER
5645         LIBO_URE_LIB_FOLDER
5646         LIBO_URE_MISC_FOLDER
5647         OS
5648         SDKDIRNAME
5649         SYSTEM_LIBXML
5650         SYSTEM_LIBXSLT
5652     # these overwrite host config with build config
5653     OVERWRITING_SETTINGS="
5654         ANT
5655         ANT_HOME
5656         ANT_LIB
5657         HSQLDB_USE_JDBC_4_1
5658         JAVA_CLASSPATH_NOT_SET
5659         JAVA_SOURCE_VER
5660         JAVA_TARGET_VER
5661         JAVACFLAGS
5662         JAVACOMPILER
5663         JAVADOC
5664         JAVADOCISGJDOC
5666     # these need some special handling
5667     EXTRA_HANDLED_SETTINGS="
5668         INSTDIR
5669         INSTROOT
5670         PATH
5671         WORKDIR
5673     OLD_PATH=$PATH
5674     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
5675     BUILD_PATH=$PATH
5676     PATH=$OLD_PATH
5678     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
5679     echo "$line" >>build-config
5681     for V in $DIRECT_FOR_BUILD_SETTINGS; do
5682         VV='$'$V
5683         VV=`eval "echo $VV"`
5684         if test -n "$VV"; then
5685             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
5686             echo "$line" >>build-config
5687         fi
5688     done
5690     for V in $OVERWRITING_SETTINGS; do
5691         VV='$'$V
5692         VV=`eval "echo $VV"`
5693         if test -n "$VV"; then
5694             line=${V}='${'${V}:-$VV'}'
5695             echo "$line" >>build-config
5696         fi
5697     done
5699     for V in INSTDIR INSTROOT WORKDIR; do
5700         VV='$'$V
5701         VV=`eval "echo $VV"`
5702         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
5703         if test -n "$VV"; then
5704             line="${V}_FOR_BUILD='$VV'"
5705             echo "$line" >>build-config
5706         fi
5707     done
5709     )
5710     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
5711     test -f config_build.mk || AC_MSG_ERROR([A file called config_build.mk was supposed to have been copied here, but it isn't found])
5712     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
5713              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
5715     eval `cat CONF-FOR-BUILD/build-config`
5717     AC_MSG_RESULT([checking for BUILD platform configuration... done])
5719     rm -rf CONF-FOR-BUILD
5720 else
5721     OS_FOR_BUILD="$OS"
5722     CC_FOR_BUILD="$CC"
5723     CPPU_ENV_FOR_BUILD="$CPPU_ENV"
5724     CXX_FOR_BUILD="$CXX"
5725     INSTDIR_FOR_BUILD="$INSTDIR"
5726     INSTROOT_FOR_BUILD="$INSTROOT"
5727     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
5728     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
5729     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
5730     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
5731     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
5732     WORKDIR_FOR_BUILD="$WORKDIR"
5734 AC_SUBST(OS_FOR_BUILD)
5735 AC_SUBST(INSTDIR_FOR_BUILD)
5736 AC_SUBST(INSTROOT_FOR_BUILD)
5737 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
5738 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
5739 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
5740 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
5741 AC_SUBST(SDKDIRNAME_FOR_BUILD)
5742 AC_SUBST(WORKDIR_FOR_BUILD)
5743 AC_SUBST(CC_FOR_BUILD)
5744 AC_SUBST(CXX_FOR_BUILD)
5745 AC_SUBST(CPPU_ENV_FOR_BUILD)
5747 dnl ===================================================================
5748 dnl Check for syslog header
5749 dnl ===================================================================
5750 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
5752 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
5753 dnl ===================================================================
5754 AC_MSG_CHECKING([whether to turn warnings to errors])
5755 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
5756     ENABLE_WERROR="TRUE"
5757     PYTHONWARNINGS="error"
5758     AC_MSG_RESULT([yes])
5759 else
5760     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
5761         ENABLE_WERROR="TRUE"
5762         PYTHONWARNINGS="error"
5763         AC_MSG_RESULT([yes])
5764     else
5765         AC_MSG_RESULT([no])
5766     fi
5768 AC_SUBST(ENABLE_WERROR)
5769 AC_SUBST(PYTHONWARNINGS)
5771 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
5772 dnl ===================================================================
5773 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
5774 if test -z "$enable_assert_always_abort"; then
5775    if test "$ENABLE_DEBUG" = TRUE; then
5776        enable_assert_always_abort=yes
5777    else
5778        enable_assert_always_abort=no
5779    fi
5781 if test "$enable_assert_always_abort" = "yes"; then
5782     ASSERT_ALWAYS_ABORT="TRUE"
5783     AC_MSG_RESULT([yes])
5784 else
5785     ASSERT_ALWAYS_ABORT="FALSE"
5786     AC_MSG_RESULT([no])
5788 AC_SUBST(ASSERT_ALWAYS_ABORT)
5790 # Determine whether to use ooenv for the instdir installation
5791 # ===================================================================
5792 if test $_os != "WINNT" -a $_os != "Darwin"; then
5793     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
5794     if test -z "$enable_ooenv"; then
5795         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5796             enable_ooenv=yes
5797         else
5798             enable_ooenv=no
5799         fi
5800     fi
5801     if test "$enable_ooenv" = "no"; then
5802         AC_MSG_RESULT([no])
5803     else
5804         ENABLE_OOENV="TRUE"
5805         AC_MSG_RESULT([yes])
5806     fi
5808 AC_SUBST(ENABLE_OOENV)
5810 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
5811     if test "$enable_qt5" = "no"; then
5812         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
5813     else
5814         enable_qt5=yes
5815     fi
5818 dnl ===================================================================
5819 dnl check for cups support
5820 dnl ===================================================================
5822 AC_MSG_CHECKING([whether to enable CUPS support])
5823 if test "$test_cups" = yes -a "$enable_cups" != no; then
5824     ENABLE_CUPS=TRUE
5825     AC_MSG_RESULT([yes])
5827     AC_MSG_CHECKING([whether cups support is present])
5828     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
5829     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
5830     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
5831         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
5832     fi
5833 else
5834     AC_MSG_RESULT([no])
5837 AC_SUBST(ENABLE_CUPS)
5839 # fontconfig checks
5840 if test "$using_freetype_fontconfig" = yes; then
5841     AC_MSG_CHECKING([which fontconfig to use])
5843 if test "$using_freetype_fontconfig" = yes -a "$test_system_fontconfig" != no; then
5844     AC_MSG_RESULT([external])
5845     PKG_CHECK_MODULES([FONTCONFIG], [fontconfig >= 2.4.1])
5846     SYSTEM_FONTCONFIG=TRUE
5847     FilterLibs "${FONTCONFIG_LIBS}"
5848     FONTCONFIG_LIBS="${filteredlibs}"
5849 elif test "$using_freetype_fontconfig" = yes; then
5850     AC_MSG_RESULT([internal])
5851     BUILD_TYPE="$BUILD_TYPE FONTCONFIG"
5853 AC_SUBST(FONTCONFIG_CFLAGS)
5854 AC_SUBST(FONTCONFIG_LIBS)
5855 AC_SUBST([SYSTEM_FONTCONFIG])
5857 dnl whether to find & fetch external tarballs?
5858 dnl ===================================================================
5859 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
5860    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
5861        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
5862    else
5863        TARFILE_LOCATION="$LODE_HOME/ext_tar"
5864    fi
5866 if test -z "$TARFILE_LOCATION"; then
5867     if test -d "$SRC_ROOT/src" ; then
5868         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
5869         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
5870     fi
5871     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
5872 else
5873     AbsolutePath "$TARFILE_LOCATION"
5874     PathFormat "${absolute_path}"
5875     TARFILE_LOCATION="${formatted_path}"
5877 AC_SUBST(TARFILE_LOCATION)
5879 AC_MSG_CHECKING([whether we want to fetch tarballs])
5880 if test "$enable_fetch_external" != "no"; then
5881     if test "$with_all_tarballs" = "yes"; then
5882         AC_MSG_RESULT([yes, all of them])
5883         DO_FETCH_TARBALLS="ALL"
5884     else
5885         AC_MSG_RESULT([yes, if we use them])
5886         DO_FETCH_TARBALLS="TRUE"
5887     fi
5888 else
5889     AC_MSG_RESULT([no])
5890     DO_FETCH_TARBALLS=
5892 AC_SUBST(DO_FETCH_TARBALLS)
5894 dnl Test whether to include MySpell dictionaries
5895 dnl ===================================================================
5896 AC_MSG_CHECKING([whether to include MySpell dictionaries])
5897 if test "$with_myspell_dicts" = "yes"; then
5898     AC_MSG_RESULT([yes])
5899     WITH_MYSPELL_DICTS=TRUE
5900     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
5901     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
5902 else
5903     AC_MSG_RESULT([no])
5904     WITH_MYSPELL_DICTS=
5906 AC_SUBST(WITH_MYSPELL_DICTS)
5908 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
5909 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
5910     if test "$with_system_dicts" = yes; then
5911         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
5912     fi
5913     with_system_dicts=no
5916 AC_MSG_CHECKING([whether to use dicts from external paths])
5917 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
5918     AC_MSG_RESULT([yes])
5919     SYSTEM_DICTS=TRUE
5920     AC_MSG_CHECKING([for spelling dictionary directory])
5921     if test -n "$with_external_dict_dir"; then
5922         DICT_SYSTEM_DIR=file://$with_external_dict_dir
5923     else
5924         DICT_SYSTEM_DIR=file:///usr/share/hunspell
5925         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
5926             DICT_SYSTEM_DIR=file:///usr/share/myspell
5927         fi
5928     fi
5929     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
5930     AC_MSG_CHECKING([for hyphenation patterns directory])
5931     if test -n "$with_external_hyph_dir"; then
5932         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
5933     else
5934         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
5935     fi
5936     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
5937     AC_MSG_CHECKING([for thesaurus directory])
5938     if test -n "$with_external_thes_dir"; then
5939         THES_SYSTEM_DIR=file://$with_external_thes_dir
5940     else
5941         THES_SYSTEM_DIR=file:///usr/share/mythes
5942     fi
5943     AC_MSG_RESULT([$THES_SYSTEM_DIR])
5944 else
5945     AC_MSG_RESULT([no])
5946     SYSTEM_DICTS=
5948 AC_SUBST(SYSTEM_DICTS)
5949 AC_SUBST(DICT_SYSTEM_DIR)
5950 AC_SUBST(HYPH_SYSTEM_DIR)
5951 AC_SUBST(THES_SYSTEM_DIR)
5953 dnl ===================================================================
5954 dnl Precompiled headers.
5955 ENABLE_PCH=""
5956 AC_MSG_CHECKING([whether to enable pch feature])
5957 if test -z "$enable_pch"; then
5958     if test "$_os" = "WINNT"; then
5959         # Enabled by default on Windows.
5960         enable_pch=yes
5961         # never use sccache on auto-enabled PCH builds, except if requested explicitely
5962         if test -z "$enable_ccache" -a "$SCCACHE"; then
5963             CCACHE=""
5964         fi
5965     else
5966         enable_pch=no
5967     fi
5969 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
5970     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
5972 if test "$enable_pch" = "system"; then
5973     ENABLE_PCH="1"
5974     AC_MSG_RESULT([yes (system headers)])
5975 elif test "$enable_pch" = "base"; then
5976     ENABLE_PCH="2"
5977     AC_MSG_RESULT([yes (system and base headers)])
5978 elif test "$enable_pch" = "normal"; then
5979     ENABLE_PCH="3"
5980     AC_MSG_RESULT([yes (normal)])
5981 elif test "$enable_pch" = "full"; then
5982     ENABLE_PCH="4"
5983     AC_MSG_RESULT([yes (full)])
5984 elif test "$enable_pch" = "yes"; then
5985     # Pick a suitable default.
5986     if test "$GCC" = "yes"; then
5987         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
5988         # while making the PCHs larger and rebuilds more likely.
5989         ENABLE_PCH="2"
5990         AC_MSG_RESULT([yes (system and base headers)])
5991     else
5992         # With MSVC the highest level makes a significant difference,
5993         # and it was the default when there used to be no PCH levels.
5994         ENABLE_PCH="4"
5995         AC_MSG_RESULT([yes (full)])
5996     fi
5997 elif test "$enable_pch" = "no"; then
5998     AC_MSG_RESULT([no])
5999 else
6000     AC_MSG_ERROR([Unknown value for --enable-pch])
6002 AC_SUBST(ENABLE_PCH)
6003 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
6004 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
6005     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
6006     if test "$CCACHE_BIN" != "not found"; then
6007         AC_MSG_CHECKING([ccache version])
6008         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
6009         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6010         AC_MSG_RESULT([$CCACHE_VERSION])
6011         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
6012         if test "$CCACHE_NUMVER" -gt "030701"; then
6013             AC_MSG_RESULT([yes])
6014         else
6015             AC_MSG_RESULT([no (not newer than 3.7.1)])
6016             CCACHE_DEPEND_MODE=
6017         fi
6018     fi
6021 PCH_INSTANTIATE_TEMPLATES=
6022 if test -n "$ENABLE_PCH"; then
6023     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
6024     save_CFLAGS=$CFLAGS
6025     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
6026     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
6027     CFLAGS=$save_CFLAGS
6028     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
6029         AC_MSG_RESULT(yes)
6030     else
6031         AC_MSG_RESULT(no)
6032     fi
6034 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
6036 BUILDING_PCH_WITH_OBJ=
6037 if test -n "$ENABLE_PCH"; then
6038     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
6039     save_CFLAGS=$CFLAGS
6040     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
6041     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
6042     CFLAGS=$save_CFLAGS
6043     if test -n "$BUILDING_PCH_WITH_OBJ"; then
6044         AC_MSG_RESULT(yes)
6045     else
6046         AC_MSG_RESULT(no)
6047     fi
6049 AC_SUBST(BUILDING_PCH_WITH_OBJ)
6051 PCH_CODEGEN=
6052 PCH_NO_CODEGEN=
6053 fpch_prefix=
6054 if test "$COM" = MSC; then
6055     fpch_prefix="-Xclang "
6057 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6058     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-codegen])
6059     save_CFLAGS=$CFLAGS
6060     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-codegen"
6061     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6062         [
6063         PCH_CODEGEN="${fpch_prefix}-fpch-codegen"
6064         PCH_NO_CODEGEN="${fpch_prefix}-fno-pch-codegen"
6065         ],[])
6066     CFLAGS=$save_CFLAGS
6067     if test -n "$PCH_CODEGEN"; then
6068         AC_MSG_RESULT(yes)
6069     else
6070         AC_MSG_RESULT(no)
6071     fi
6073 AC_SUBST(PCH_CODEGEN)
6074 AC_SUBST(PCH_NO_CODEGEN)
6075 PCH_DEBUGINFO=
6076 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6077     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-debuginfo])
6078     save_CFLAGS=$CFLAGS
6079     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-debuginfo"
6080     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="${fpch_prefix}-fpch-debuginfo" ],[])
6081     CFLAGS=$save_CFLAGS
6082     if test -n "$PCH_DEBUGINFO"; then
6083         AC_MSG_RESULT(yes)
6084     else
6085         AC_MSG_RESULT(no)
6086     fi
6088 AC_SUBST(PCH_DEBUGINFO)
6090 TAB=`printf '\t'`
6092 AC_MSG_CHECKING([the GNU Make version])
6093 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
6094 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6095 if test "$_make_longver" -ge "038200"; then
6096     AC_MSG_RESULT([$GNUMAKE $_make_version])
6098 elif test "$_make_longver" -ge "038100"; then
6099     if test "$build_os" = "cygwin"; then
6100         AC_MSG_ERROR([failed ($GNUMAKE version >= 3.82 needed])
6101     fi
6102     AC_MSG_RESULT([$GNUMAKE $_make_version])
6104     dnl ===================================================================
6105     dnl Search all the common names for sha1sum
6106     dnl ===================================================================
6107     AC_CHECK_PROGS(SHA1SUM, sha1sum sha1 shasum openssl)
6108     if test -z "$SHA1SUM"; then
6109         AC_MSG_ERROR([install the appropriate SHA-1 checksumming program for this OS])
6110     elif test "$SHA1SUM" = "openssl"; then
6111         SHA1SUM="openssl sha1"
6112     fi
6113     AC_MSG_CHECKING([for GNU Make bug 20033])
6114     TESTGMAKEBUG20033=`mktemp -d tmp.XXXXXX`
6115     $SED -e "s/<TAB>/$TAB/g" > $TESTGMAKEBUG20033/Makefile << EOF
6116 A := \$(wildcard *.a)
6118 .PHONY: all
6119 all: \$(A:.a=.b)
6120 <TAB>@echo survived bug20033.
6122 .PHONY: setup
6123 setup:
6124 <TAB>@touch 1.a 2.a 3.a 4.a 5.a 6.a
6126 define d1
6127 @echo lala \$(1)
6128 @sleep 1
6129 endef
6131 define d2
6132 @echo tyty \$(1)
6133 @sleep 1
6134 endef
6136 %.b : %.a
6137 <TAB>\$(eval CHECKSUM := \$(word 1,\$(shell cat \$^ | $SHA1SUM))) \$(if \$(wildcard \$(CACHEDIR)/\$(CHECKSUM)),\
6138 <TAB>\$(call d1,\$(CHECKSUM)),\
6139 <TAB>\$(call d2,\$(CHECKSUM)))
6141     if test -z "`(cd $TESTGMAKEBUG20033 && $GNUMAKE setup && $GNUMAKE -j)|grep survived`"; then
6142         no_parallelism_make="YES"
6143         AC_MSG_RESULT([yes, disable parallelism])
6144     else
6145         AC_MSG_RESULT([no, keep parallelism enabled])
6146     fi
6147     rm -rf $TESTGMAKEBUG20033
6148 else
6149     AC_MSG_ERROR([failed ($GNUMAKE version >= 3.81 needed])
6152 # find if gnumake support file function
6153 AC_MSG_CHECKING([whether GNU Make supports the 'file' function])
6154 TESTGMAKEFILEFUNC="`mktemp -d -t tst.XXXXXX`"
6155 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6156     TESTGMAKEFILEFUNC=`cygpath -m $TESTGMAKEFILEFUNC`
6158 $SED -e "s/<TAB>/$TAB/" > $TESTGMAKEFILEFUNC/Makefile << EOF
6159 \$(file >test.txt,Success )
6161 .PHONY: all
6162 all:
6163 <TAB>@cat test.txt
6166 $GNUMAKE -C $TESTGMAKEFILEFUNC 2>/dev/null 1>&2
6167 if test -f $TESTGMAKEFILEFUNC/test.txt; then
6168     HAVE_GNUMAKE_FILE_FUNC=TRUE
6169     AC_MSG_RESULT([yes])
6170 else
6171     AC_MSG_RESULT([no])
6173 rm -rf $TESTGMAKEFILEFUNC
6174 AC_SUBST(HAVE_GNUMAKE_FILE_FUNC)
6176 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6177 STALE_MAKE=
6178 if test "$_make_ver_check" = ""; then
6179    STALE_MAKE=TRUE
6182 HAVE_LD_HASH_STYLE=FALSE
6183 WITH_LINKER_HASH_STYLE=
6184 AC_MSG_CHECKING([for --hash-style gcc linker support])
6185 if test "$GCC" = "yes"; then
6186     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6187         hash_styles="gnu sysv"
6188     elif test "$with_linker_hash_style" = "no"; then
6189         hash_styles=
6190     else
6191         hash_styles="$with_linker_hash_style"
6192     fi
6194     for hash_style in $hash_styles; do
6195         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6196         hash_style_ldflags_save=$LDFLAGS
6197         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6199         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6200             [
6201 #include <stdio.h>
6202             ],[
6203 printf ("");
6204             ])],
6205             [
6206                   HAVE_LD_HASH_STYLE=TRUE
6207                   WITH_LINKER_HASH_STYLE=$hash_style
6208             ],
6209             [HAVE_LD_HASH_STYLE=FALSE],
6210             [HAVE_LD_HASH_STYLE=FALSE])
6211         LDFLAGS=$hash_style_ldflags_save
6212     done
6214     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6215         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6216     else
6217         AC_MSG_RESULT( no )
6218     fi
6219     LDFLAGS=$hash_style_ldflags_save
6220 else
6221     AC_MSG_RESULT( no )
6223 AC_SUBST(HAVE_LD_HASH_STYLE)
6224 AC_SUBST(WITH_LINKER_HASH_STYLE)
6226 dnl ===================================================================
6227 dnl Check whether there's a Perl version available.
6228 dnl ===================================================================
6229 if test -z "$with_perl_home"; then
6230     AC_PATH_PROG(PERL, perl)
6231 else
6232     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6233     _perl_path="$with_perl_home/bin/perl"
6234     if test -x "$_perl_path"; then
6235         PERL=$_perl_path
6236     else
6237         AC_MSG_ERROR([$_perl_path not found])
6238     fi
6241 dnl ===================================================================
6242 dnl Testing for Perl version 5 or greater.
6243 dnl $] is the Perl version variable, it is returned as an integer
6244 dnl ===================================================================
6245 if test "$PERL"; then
6246     AC_MSG_CHECKING([the Perl version])
6247     ${PERL} -e "exit($]);"
6248     _perl_version=$?
6249     if test "$_perl_version" -lt 5; then
6250         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6251     fi
6252     AC_MSG_RESULT([Perl $_perl_version])
6253 else
6254     AC_MSG_ERROR([Perl not found, install Perl 5])
6257 dnl ===================================================================
6258 dnl Testing for required Perl modules
6259 dnl ===================================================================
6261 AC_MSG_CHECKING([for required Perl modules])
6262 perl_use_string="use Cwd ; use Digest::MD5"
6263 if test "$_os" = "WINNT"; then
6264     if test -n "$PKGFORMAT"; then
6265         for i in $PKGFORMAT; do
6266             case "$i" in
6267             msi)
6268                 # for getting fonts versions to use in MSI
6269                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6270                 ;;
6271             esac
6272         done
6273     fi
6275 if test "$with_system_hsqldb" = "yes"; then
6276     perl_use_string="$perl_use_string ; use Archive::Zip"
6278 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6279     # OpenSSL needs that to build
6280     perl_use_string="$perl_use_string ; use FindBin"
6282 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6283     AC_MSG_RESULT([all modules found])
6284 else
6285     AC_MSG_RESULT([failed to find some modules])
6286     # Find out which modules are missing.
6287     for i in $perl_use_string; do
6288         if test "$i" != "use" -a "$i" != ";"; then
6289             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6290                 missing_perl_modules="$missing_perl_modules $i"
6291             fi
6292         fi
6293     done
6294     AC_MSG_ERROR([
6295     The missing Perl modules are: $missing_perl_modules
6296     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6299 dnl ===================================================================
6300 dnl Check for pkg-config
6301 dnl ===================================================================
6302 if test "$_os" != "WINNT"; then
6303     PKG_PROG_PKG_CONFIG
6306 if test "$_os" != "WINNT"; then
6308     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6309     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6310     # explicitly. Or put /path/to/compiler in PATH yourself.
6312     # Use wrappers for LTO
6313     if test "$ENABLE_LTO" = "TRUE" -a "$COM_IS_CLANG" != "TRUE"; then
6314         AC_CHECK_TOOL(AR,gcc-ar)
6315         AC_CHECK_TOOL(NM,gcc-nm)
6316         AC_CHECK_TOOL(RANLIB,gcc-ranlib)
6317     else
6318         AC_CHECK_TOOL(AR,ar)
6319         AC_CHECK_TOOL(NM,nm)
6320         AC_CHECK_TOOL(RANLIB,ranlib)
6321     fi
6322     AC_CHECK_TOOL(OBJDUMP,objdump)
6323     AC_CHECK_TOOL(READELF,readelf)
6324     AC_CHECK_TOOL(STRIP,strip)
6326 AC_SUBST(AR)
6327 AC_SUBST(LD)
6328 AC_SUBST(NM)
6329 AC_SUBST(OBJDUMP)
6330 AC_SUBST(PKG_CONFIG)
6331 AC_SUBST(PKG_CONFIG_PATH)
6332 AC_SUBST(PKG_CONFIG_LIBDIR)
6333 AC_SUBST(RANLIB)
6334 AC_SUBST(READELF)
6335 AC_SUBST(STRIP)
6337 dnl ===================================================================
6338 dnl pkg-config checks on macOS
6339 dnl ===================================================================
6341 if test $_os = Darwin; then
6342     AC_MSG_CHECKING([for bogus pkg-config])
6343     if test -n "$PKG_CONFIG"; then
6344         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6345             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6346         else
6347             if test "$enable_bogus_pkg_config" = "yes"; then
6348                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6349             else
6350                 AC_MSG_ERROR([yes, from unknown origin. This *will* break the build. Please modify your PATH variable so that $PKG_CONFIG is no longer found by configure scripts.])
6351             fi
6352         fi
6353     else
6354         AC_MSG_RESULT([no, good])
6355     fi
6358 find_csc()
6360     # Return value: $csctest
6362     unset csctest
6364     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client/InstallPath"
6365     if test -n "$regvalue"; then
6366         csctest=$regvalue
6367         return
6368     fi
6371 find_al()
6373     # Return value: $altest
6375     unset altest
6377     # We need this check to detect 4.6.1 or above.
6378     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6379         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools/InstallationFolder"
6380         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6381             altest=$regvalue
6382             return
6383         fi
6384     done
6386     for x in `ls /proc/registry32/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft\ SDKs/Windows`; do
6387         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools/InstallationFolder"
6388         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6389             altest=$regvalue
6390             return
6391         fi
6392     done
6395 find_dotnetsdk46()
6397     unset frametest
6399     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6; do
6400         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder"
6401         if test -n "$regvalue"; then
6402             frametest=$regvalue
6403             return
6404         fi
6405     done
6408 find_winsdk_version()
6410     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6411     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6413     unset winsdktest winsdkbinsubdir winsdklibsubdir
6415     case "$1" in
6416     8.0|8.0A)
6417         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
6418         if test -n "$regvalue"; then
6419             winsdktest=$regvalue
6420             winsdklibsubdir=win8
6421             return
6422         fi
6423         ;;
6424     8.1|8.1A)
6425         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot81"
6426         if test -n "$regvalue"; then
6427             winsdktest=$regvalue
6428             winsdklibsubdir=winv6.3
6429             return
6430         fi
6431         ;;
6432     10.0)
6433         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/InstallationFolder"
6434         if test -n "$regvalue"; then
6435             winsdktest=$regvalue
6436             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion"
6437             if test -n "$regvalue"; then
6438                 winsdkbinsubdir="$regvalue".0
6439                 winsdklibsubdir=$winsdkbinsubdir
6440                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6441                 local tmppath_unix=$(cygpath -u "$tmppath")
6442                 # test exist the SDK path
6443                 if test -d "$tmppath_unix"; then
6444                    # when path is convertible to a short path then path is okay
6445                    cygpath -d "$tmppath" >/dev/null 2>&1
6446                    if test $? -ne 0; then
6447                       AC_MSG_ERROR([Windows SDK doesn't have a 8.3 name, see NtfsDisable8dot3NameCreation])
6448                    fi
6449                 else
6450                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6451                 fi
6452             fi
6453             return
6454         fi
6455         ;;
6456     esac
6459 find_winsdk()
6461     # Return value: From find_winsdk_version
6463     unset winsdktest
6465     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6466         find_winsdk_version $ver
6467         if test -n "$winsdktest"; then
6468             return
6469         fi
6470     done
6473 find_msms()
6475     # Return value: $msmdir
6477     AC_MSG_CHECKING([for MSVC merge modules directory])
6478     local my_msm_files
6479     local my_msm_dir
6481     dnl Order my_msm_files in increasing order. Then check the directories returned
6482     dnl by ls in an inner loop; assuming they are also ordered in increasing order,
6483     dnl the result will be the highest MSM version found in the highest directory.
6485     case "$VCVER" in
6486         16.0 | 17.0)
6487         my_msm_files="Microsoft_VC141_CRT_x86.msm Microsoft_VC142_CRT_x86.msm ${my_msm_files}"
6488         ;;
6489     esac
6490     for f in $my_msm_files; do
6491         echo "$as_me:$LINENO: searching for $f" >&5
6492     done
6494     msmdir=
6495     case "$VCVER" in
6496     16.0 | 17.0)
6497         for f in ${my_msm_files}; do
6498             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6499                 my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6500                 echo "$as_me:$LINENO: looking for $my_msm_dir${f}])" >&5
6501                 if test -e "$my_msm_dir${f}"; then
6502                     msmdir=$my_msm_dir
6503                 fi
6504             done
6505         done
6506         ;;
6507     esac
6509     if test -n "$msmdir"; then
6510         msmdir=`cygpath -m "$msmdir"`
6511         AC_MSG_RESULT([$msmdir])
6512     else
6513         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6514             AC_MSG_FAILURE([not found])
6515         else
6516             AC_MSG_WARN([not found (check config.log)])
6517             add_warning "MSM none of ${my_msm_files} found"
6518         fi
6519     fi
6522 find_msvc_x64_dlls()
6524     # Return value: $msvcdllpath, $msvcdlls
6526     AC_MSG_CHECKING([for MSVC x64 DLL path])
6528     dnl Order crtver in increasing order. Then check the directories returned by
6529     dnl ls in an inner loop; assuming they are also ordered in increasing order,
6530     dnl the result will be the highest CRT version found in the highest directory.
6532     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6533     case "$VCVER" in
6534     16.0 | 17.0)
6535         for crtver in 141 142 143; do
6536             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6537                 echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT" >&5
6538                 if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"; then
6539                     msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"
6540                 fi
6541             done
6542         done
6543         ;;
6544     esac
6545     AC_MSG_RESULT([$msvcdllpath])
6546     AC_MSG_CHECKING([for MSVC x64 DLLs])
6547     msvcdlls="msvcp140.dll vcruntime140.dll"
6548     for dll in $msvcdlls; do
6549         if ! test -f "$msvcdllpath/$dll"; then
6550             AC_MSG_FAILURE([missing $dll])
6551         fi
6552     done
6553     AC_MSG_RESULT([found all ($msvcdlls)])
6556 dnl =========================================
6557 dnl Check for the Windows  SDK.
6558 dnl =========================================
6559 if test "$_os" = "WINNT"; then
6560     AC_MSG_CHECKING([for Windows SDK])
6561     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6562         find_winsdk
6563         WINDOWS_SDK_HOME=$winsdktest
6565         # normalize if found
6566         if test -n "$WINDOWS_SDK_HOME"; then
6567             WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
6568             WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
6569         fi
6571         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6572     fi
6574     if test -n "$WINDOWS_SDK_HOME"; then
6575         # Remove a possible trailing backslash
6576         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6578         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6579              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6580              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6581             have_windows_sdk_headers=yes
6582         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6583              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6584              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6585             have_windows_sdk_headers=yes
6586         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6587              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6588              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6589             have_windows_sdk_headers=yes
6590         else
6591             have_windows_sdk_headers=no
6592         fi
6594         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6595             have_windows_sdk_libs=yes
6596         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6597             have_windows_sdk_libs=yes
6598         else
6599             have_windows_sdk_libs=no
6600         fi
6602         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6603             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6604 the  Windows SDK are installed.])
6605         fi
6606     fi
6608     if test -z "$WINDOWS_SDK_HOME"; then
6609         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6610     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6611         WINDOWS_SDK_VERSION=80
6612         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6613     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6614         WINDOWS_SDK_VERSION=81
6615         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6616     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6617         WINDOWS_SDK_VERSION=10
6618         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6619     else
6620         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6621     fi
6622     PathFormat "$WINDOWS_SDK_HOME"
6623     WINDOWS_SDK_HOME="$formatted_path"
6624     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6625     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6626         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6627         if test -d "$WINDOWS_SDK_HOME/include/um"; then
6628             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6629         elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then
6630             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6631         fi
6632     fi
6634     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6635     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6636     dnl but not in v8.0), so allow this to be overridden with a
6637     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6638     dnl and configuration error if no WiLangId.vbs is found would arguably be
6639     dnl better, but I do not know under which conditions exactly it is needed by
6640     dnl msiglobal.pm:
6641     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6642         WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6643         WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6644         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6645             WINDOWS_SDK_WILANGID="${WINDOWS_SDK_HOME}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6646             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6647         fi
6648         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6649             WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6650             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6651         fi
6652         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6653             WINDOWS_SDK_WILANGID=$(cygpath -sm "C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs")
6654             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6655         fi
6656     fi
6657     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6658         if test -n "$with_package_format" -a "$with_package_format" != no; then
6659             for i in "$with_package_format"; do
6660                 if test "$i" = "msi"; then
6661                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6662                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6663                     fi
6664                 fi
6665             done
6666         fi
6667     fi
6669 AC_SUBST(WINDOWS_SDK_HOME)
6670 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6671 AC_SUBST(WINDOWS_SDK_VERSION)
6672 AC_SUBST(WINDOWS_SDK_WILANGID)
6674 if test "$build_os" = "cygwin"; then
6675     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6676     dnl dir, it also determines that dir's path w/o an arch segment if any,
6677     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6678     AC_MSG_CHECKING([for midl.exe])
6680     find_winsdk
6681     if test -n "$winsdkbinsubdir" \
6682         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6683     then
6684         MIDL_PATH=$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6685         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin/$winsdkbinsubdir
6686     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6687         MIDL_PATH=$winsdktest/Bin/$WIN_BUILD_ARCH
6688         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6689     elif test -f "$winsdktest/Bin/midl.exe"; then
6690         MIDL_PATH=$winsdktest/Bin
6691         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6692     fi
6693     if test ! -f "$MIDL_PATH/midl.exe"; then
6694         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6695     else
6696         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6697     fi
6699     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6700     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6702     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6703          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6704          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6705          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6706     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6707          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6708          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6709          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
6710     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
6711          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
6712          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6713          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
6714     else
6715         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
6716     fi
6718     dnl Check csc.exe
6719     AC_MSG_CHECKING([for csc.exe])
6720     find_csc
6721     if test -f "$csctest/csc.exe"; then
6722         CSC_PATH="$csctest"
6723     fi
6724     if test ! -f "$CSC_PATH/csc.exe"; then
6725         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
6726     else
6727         AC_MSG_RESULT([$CSC_PATH/csc.exe])
6728     fi
6730     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
6732     dnl Check al.exe
6733     AC_MSG_CHECKING([for al.exe])
6734     find_winsdk
6735     if test -n "$winsdkbinsubdir" \
6736         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
6737     then
6738         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
6739     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/al.exe"; then
6740         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
6741     elif test -f "$winsdktest/Bin/al.exe"; then
6742         AL_PATH="$winsdktest/Bin"
6743     fi
6745     if test -z "$AL_PATH"; then
6746         find_al
6747         if test -f "$altest/bin/al.exe"; then
6748             AL_PATH="$altest/bin"
6749         elif test -f "$altest/al.exe"; then
6750             AL_PATH="$altest"
6751         fi
6752     fi
6753     if test ! -f "$AL_PATH/al.exe"; then
6754         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
6755     else
6756         AC_MSG_RESULT([$AL_PATH/al.exe])
6757     fi
6759     AL_PATH=`win_short_path_for_make "$AL_PATH"`
6761     dnl Check mscoree.lib / .NET Framework dir
6762     AC_MSG_CHECKING(.NET Framework)
6763     find_dotnetsdk46
6764     PathFormat "$frametest"
6765     frametest="$formatted_path"
6766     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6767         DOTNET_FRAMEWORK_HOME="$frametest"
6768     else
6769         find_winsdk
6770         if test -f "$winsdktest/lib/mscoree.lib" -o -f "$winsdktest/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6771             DOTNET_FRAMEWORK_HOME="$winsdktest"
6772         fi
6773     fi
6774     if test ! -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib" -a ! -f "$DOTNET_FRAMEWORK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib" -a ! -f "$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6775         AC_MSG_ERROR([mscoree.lib not found])
6776     fi
6777     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
6779     PathFormat "$MIDL_PATH"
6780     MIDL_PATH="$formatted_path"
6782     PathFormat "$AL_PATH"
6783     AL_PATH="$formatted_path"
6785     PathFormat "$DOTNET_FRAMEWORK_HOME"
6786     DOTNET_FRAMEWORK_HOME="$formatted_path"
6788     PathFormat "$CSC_PATH"
6789     CSC_PATH="$formatted_path"
6792 dnl ===================================================================
6793 dnl Testing for C++ compiler and version...
6794 dnl ===================================================================
6796 if test "$_os" != "WINNT"; then
6797     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that
6798     save_CXXFLAGS=$CXXFLAGS
6799     AC_PROG_CXX
6800     CXXFLAGS=$save_CXXFLAGS
6801     if test -z "$CXX_BASE"; then
6802         CXX_BASE=`first_arg_basename "$CXX"`
6803     fi
6806 dnl check for GNU C++ compiler version
6807 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
6808     AC_MSG_CHECKING([the GNU C++ compiler version])
6810     _gpp_version=`$CXX -dumpversion`
6811     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
6813     if test "$_gpp_majmin" -lt "700"; then
6814         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
6815     else
6816         AC_MSG_RESULT([ok (g++ $_gpp_version)])
6817     fi
6819     dnl see https://code.google.com/p/android/issues/detail?id=41770
6820         glibcxx_threads=no
6821         AC_LANG_PUSH([C++])
6822         AC_REQUIRE_CPP
6823         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
6824         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
6825             #include <bits/c++config.h>]],[[
6826             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
6827             && !defined(_GLIBCXX__PTHREADS) \
6828             && !defined(_GLIBCXX_HAS_GTHREADS)
6829             choke me
6830             #endif
6831         ]])],[AC_MSG_RESULT([yes])
6832         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
6833         AC_LANG_POP([C++])
6834         if test $glibcxx_threads = yes; then
6835             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
6836         fi
6838 AC_SUBST(BOOST_CXXFLAGS)
6841 # prefx CXX with ccache if needed
6843 if test "$CCACHE" != ""; then
6844     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
6845     AC_LANG_PUSH([C++])
6846     save_CXXFLAGS=$CXXFLAGS
6847     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
6848     # msvc does not fail on unknown options, check stdout
6849     if test "$COM" = MSC; then
6850         CXXFLAGS="$CXXFLAGS -nologo"
6851     fi
6852     save_ac_cxx_werror_flag=$ac_cxx_werror_flag
6853     ac_cxx_werror_flag=yes
6854     dnl an empty program will do, we're checking the compiler flags
6855     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
6856                       [use_ccache=yes], [use_ccache=no])
6857     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
6858         AC_MSG_RESULT([yes])
6859     else
6860         CXX="$CCACHE $CXX"
6861         CXX_BASE="ccache $CXX_BASE"
6862         AC_MSG_RESULT([no])
6863     fi
6864     CXXFLAGS=$save_CXXFLAGS
6865     ac_cxx_werror_flag=$save_ac_cxx_werror_flag
6866     AC_LANG_POP([C++])
6869 dnl ===================================================================
6870 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
6871 dnl ===================================================================
6873 if test "$_os" != "WINNT"; then
6874     AC_PROG_CXXCPP
6876     dnl Check whether there's a C pre-processor.
6877     AC_PROG_CPP
6881 dnl ===================================================================
6882 dnl Find integral type sizes and alignments
6883 dnl ===================================================================
6885 if test "$_os" != "WINNT"; then
6887     AC_CHECK_SIZEOF(long)
6888     AC_CHECK_SIZEOF(short)
6889     AC_CHECK_SIZEOF(int)
6890     AC_CHECK_SIZEOF(long long)
6891     AC_CHECK_SIZEOF(double)
6892     AC_CHECK_SIZEOF(void*)
6893     AC_CHECK_SIZEOF(size_t)
6895     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
6896     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
6897     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
6898     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
6899     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
6900     SIZEOF_SIZE_T=$ac_cv_sizeof_size_t
6902     dnl Allow build without AC_CHECK_ALIGNOF, grrr
6903     m4_pattern_allow([AC_CHECK_ALIGNOF])
6904     m4_ifdef([AC_CHECK_ALIGNOF],
6905         [
6906             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
6907             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
6908             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
6909             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
6910         ],
6911         [
6912             case "$_os-$host_cpu" in
6913             Linux-i686)
6914                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6915                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6916                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
6917                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
6918                 ;;
6919             Linux-x86_64)
6920                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6921                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6922                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
6923                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
6924                 ;;
6925             *)
6926                 if test -z "$ac_cv_alignof_short" -o \
6927                         -z "$ac_cv_alignof_int" -o \
6928                         -z "$ac_cv_alignof_long" -o \
6929                         -z "$ac_cv_alignof_double"; then
6930                    AC_MSG_ERROR([Your Autoconf doesn't have [AC_][CHECK_ALIGNOF]. You need to set the environment variables ac_cv_alignof_short, ac_cv_alignof_int, ac_cv_alignof_long and ac_cv_alignof_double.])
6931                 fi
6932                 ;;
6933             esac
6934         ])
6936     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
6937     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
6938     if test $ac_cv_sizeof_long -eq 8; then
6939         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
6940     elif test $ac_cv_sizeof_double -eq 8; then
6941         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
6942     else
6943         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
6944     fi
6946     dnl Check for large file support
6947     AC_SYS_LARGEFILE
6948     if test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
6949         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
6950     fi
6951     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
6952         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
6953     fi
6954 else
6955     # Hardcode for MSVC
6956     SAL_TYPES_SIZEOFSHORT=2
6957     SAL_TYPES_SIZEOFINT=4
6958     SAL_TYPES_SIZEOFLONG=4
6959     SAL_TYPES_SIZEOFLONGLONG=8
6960     if test $WIN_HOST_BITS -eq 32; then
6961         SAL_TYPES_SIZEOFPOINTER=4
6962         SIZEOF_SIZE_T=4
6963     else
6964         SAL_TYPES_SIZEOFPOINTER=8
6965         SIZEOF_SIZE_T=8
6966     fi
6967     SAL_TYPES_ALIGNMENT2=2
6968     SAL_TYPES_ALIGNMENT4=4
6969     SAL_TYPES_ALIGNMENT8=8
6970     LFS_CFLAGS=''
6972 AC_SUBST(LFS_CFLAGS)
6973 AC_SUBST(SIZEOF_SIZE_T)
6975 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
6976 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
6977 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
6978 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
6979 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
6980 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
6981 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
6982 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
6984 dnl ===================================================================
6985 dnl Check whether to enable runtime optimizations
6986 dnl ===================================================================
6987 ENABLE_RUNTIME_OPTIMIZATIONS=
6988 AC_MSG_CHECKING([whether to enable runtime optimizations])
6989 if test -z "$enable_runtime_optimizations"; then
6990     for i in $CC; do
6991         case $i in
6992         -fsanitize=*)
6993             enable_runtime_optimizations=no
6994             break
6995             ;;
6996         esac
6997     done
6999 if test "$enable_runtime_optimizations" != no; then
7000     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
7001     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
7002     AC_MSG_RESULT([yes])
7003 else
7004     AC_MSG_RESULT([no])
7006 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
7008 dnl ===================================================================
7009 dnl Check if valgrind headers are available
7010 dnl ===================================================================
7011 ENABLE_VALGRIND=
7012 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
7013     prev_cppflags=$CPPFLAGS
7014     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
7015     # or where does it come from?
7016     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
7017     AC_CHECK_HEADER([valgrind/valgrind.h],
7018         [ENABLE_VALGRIND=TRUE])
7019     CPPFLAGS=$prev_cppflags
7021 AC_SUBST([ENABLE_VALGRIND])
7022 if test -z "$ENABLE_VALGRIND"; then
7023     if test "$with_valgrind" = yes; then
7024         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
7025     fi
7026     VALGRIND_CFLAGS=
7028 AC_SUBST([VALGRIND_CFLAGS])
7031 dnl ===================================================================
7032 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
7033 dnl ===================================================================
7035 # We need at least the sys/sdt.h include header.
7036 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
7037 if test "$SDT_H_FOUND" = "TRUE"; then
7038     # Found sys/sdt.h header, now make sure the c++ compiler works.
7039     # Old g++ versions had problems with probes in constructors/destructors.
7040     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
7041     AC_LANG_PUSH([C++])
7042     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
7043     #include <sys/sdt.h>
7044     class ProbeClass
7045     {
7046     private:
7047       int& ref;
7048       const char *name;
7050     public:
7051       ProbeClass(int& v, const char *n) : ref(v), name(n)
7052       {
7053         DTRACE_PROBE2(_test_, cons, name, ref);
7054       }
7056       void method(int min)
7057       {
7058         DTRACE_PROBE3(_test_, meth, name, ref, min);
7059         ref -= min;
7060       }
7062       ~ProbeClass()
7063       {
7064         DTRACE_PROBE2(_test_, dest, name, ref);
7065       }
7066     };
7067     ]],[[
7068     int i = 64;
7069     DTRACE_PROBE1(_test_, call, i);
7070     ProbeClass inst = ProbeClass(i, "call");
7071     inst.method(24);
7072     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
7073           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
7074     AC_LANG_POP([C++])
7076 AC_CONFIG_HEADERS([config_host/config_probes.h])
7078 dnl ===================================================================
7079 dnl GCC features
7080 dnl ===================================================================
7081 HAVE_GCC_STACK_CLASH_PROTECTION=
7082 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7083     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
7084     save_CFLAGS=$CFLAGS
7085     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
7086     AC_LINK_IFELSE(
7087         [AC_LANG_PROGRAM(, [[return 0;]])],
7088         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
7089         [AC_MSG_RESULT([no])])
7090     CFLAGS=$save_CFLAGS
7092     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
7093     save_CFLAGS=$CFLAGS
7094     CFLAGS="$CFLAGS -Werror -mno-avx"
7095     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
7096     CFLAGS=$save_CFLAGS
7097     if test "$HAVE_GCC_AVX" = "TRUE"; then
7098         AC_MSG_RESULT([yes])
7099     else
7100         AC_MSG_RESULT([no])
7101     fi
7103     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
7104     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7105     int v = 0;
7106     if (__sync_add_and_fetch(&v, 1) != 1 ||
7107         __sync_sub_and_fetch(&v, 1) != 0)
7108         return 1;
7109     __sync_synchronize();
7110     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
7111         v != 1)
7112         return 1;
7113     return 0;
7114 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
7115     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
7116         AC_MSG_RESULT([yes])
7117         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
7118     else
7119         AC_MSG_RESULT([no])
7120     fi
7122     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
7123     AC_LANG_PUSH([C++])
7124     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7125             #include <cstddef>
7126             #include <cxxabi.h>
7127             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
7128         ])], [
7129             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
7130             AC_MSG_RESULT([yes])
7131         ], [AC_MSG_RESULT([no])])
7132     AC_LANG_POP([C++])
7134     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
7135     AC_LANG_PUSH([C++])
7136     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7137             #include <cstddef>
7138             #include <cxxabi.h>
7139             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7140         ])], [
7141             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7142             AC_MSG_RESULT([yes])
7143         ], [AC_MSG_RESULT([no])])
7144     AC_LANG_POP([C++])
7146     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7147     AC_LANG_PUSH([C++])
7148     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7149             #include <cxxabi.h>
7150             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7151         ])], [
7152             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7153             AC_MSG_RESULT([yes])
7154         ], [AC_MSG_RESULT([no])])
7155     AC_LANG_POP([C++])
7157     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7158     AC_LANG_PUSH([C++])
7159     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7160             #include <cstddef>
7161             #include <cxxabi.h>
7162             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7163         ])], [
7164             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7165             AC_MSG_RESULT([yes])
7166         ], [AC_MSG_RESULT([no])])
7167     AC_LANG_POP([C++])
7169     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7170     AC_LANG_PUSH([C++])
7171     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7172             #include <cstddef>
7173             #include <cxxabi.h>
7174             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7175         ])], [
7176             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7177             AC_MSG_RESULT([yes])
7178         ], [AC_MSG_RESULT([no])])
7179     AC_LANG_POP([C++])
7181     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7182     AC_LANG_PUSH([C++])
7183     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7184             #include <cxxabi.h>
7185             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7186         ])], [
7187             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7188             AC_MSG_RESULT([yes])
7189         ], [AC_MSG_RESULT([no])])
7190     AC_LANG_POP([C++])
7192     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7193     AC_LANG_PUSH([C++])
7194     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7195             #include <cxxabi.h>
7196             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7197         ])], [
7198             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7199             AC_MSG_RESULT([yes])
7200         ], [AC_MSG_RESULT([no])])
7201     AC_LANG_POP([C++])
7203     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7204     AC_LANG_PUSH([C++])
7205     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7206             #include <cxxabi.h>
7207             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7208         ])], [
7209             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7210             AC_MSG_RESULT([yes])
7211         ], [AC_MSG_RESULT([no])])
7212     AC_LANG_POP([C++])
7214     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info in cxxabi.h])
7215     AC_LANG_PUSH([C++])
7216     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7217             #include <cstddef>
7218             #include <cxxabi.h>
7219             std::size_t f() { return sizeof(__cxxabiv1::__si_class_type_info); }
7220         ])], [
7221             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7222             AC_MSG_RESULT([yes])
7223         ], [AC_MSG_RESULT([no])])
7224     AC_LANG_POP([C++])
7226     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7227     AC_LANG_PUSH([C++])
7228     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7229             #include <cstddef>
7230             #include <cxxabi.h>
7231             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7232         ])], [
7233             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7234             AC_MSG_RESULT([yes])
7235         ], [AC_MSG_RESULT([no])])
7236     AC_LANG_POP([C++])
7239 AC_SUBST(HAVE_GCC_AVX)
7240 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7241 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7243 dnl ===================================================================
7244 dnl Identify the C++ library
7245 dnl ===================================================================
7247 AC_MSG_CHECKING([what the C++ library is])
7248 HAVE_LIBSTDCPP=
7249 AC_LANG_PUSH([C++])
7250 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7251 #include <utility>
7252 #ifndef __GLIBCXX__
7253 foo bar
7254 #endif
7255 ]])],
7256     [CPP_LIBRARY=GLIBCXX
7257      cpp_library_name="GNU libstdc++"
7258      HAVE_LIBSTDCPP=TRUE
7259     ],
7260     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7261 #include <utility>
7262 #ifndef _LIBCPP_VERSION
7263 foo bar
7264 #endif
7265 ]])],
7266     [CPP_LIBRARY=LIBCPP
7267      cpp_library_name="LLVM libc++"
7268      AC_DEFINE([HAVE_LIBCXX])
7269     ],
7270     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7271 #include <utility>
7272 #ifndef _MSC_VER
7273 foo bar
7274 #endif
7275 ]])],
7276     [CPP_LIBRARY=MSVCRT
7277      cpp_library_name="Microsoft"
7278     ],
7279     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7280 AC_MSG_RESULT([$cpp_library_name])
7281 AC_LANG_POP([C++])
7282 AC_SUBST([HAVE_LIBSTDCPP])
7284 dnl ===================================================================
7285 dnl Check for gperf
7286 dnl ===================================================================
7287 AC_PATH_PROG(GPERF, gperf)
7288 if test -z "$GPERF"; then
7289     AC_MSG_ERROR([gperf not found but needed. Install it.])
7291 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7292     GPERF=`cygpath -m $GPERF`
7294 AC_MSG_CHECKING([whether gperf is new enough])
7295 my_gperf_ver1=$($GPERF --version | head -n 1)
7296 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7297 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7298 if test "$my_gperf_ver3" -ge 301; then
7299     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7300 else
7301     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7303 AC_SUBST(GPERF)
7305 dnl ===================================================================
7306 dnl Check for system libcmis
7307 dnl ===================================================================
7308 # libcmis requires curl and we can't build curl for iOS
7309 if test "$test_cmis" = "yes" -a "$enable_cmis" = "yes"; then
7310     libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.5 >= 0.5.2])
7311     ENABLE_LIBCMIS=TRUE
7312 else
7313     ENABLE_LIBCMIS=
7315 AC_SUBST(ENABLE_LIBCMIS)
7317 dnl ===================================================================
7318 dnl C++11
7319 dnl ===================================================================
7321 AC_MSG_CHECKING([whether $CXX_BASE supports C++17])
7322 CXXFLAGS_CXX11=
7323 if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7324     if test "$with_latest_c__" = yes; then
7325         CXXFLAGS_CXX11=-std:c++latest
7326     else
7327         CXXFLAGS_CXX11=-std:c++17
7328     fi
7329     CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus"
7330 elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7331     my_flags='-std=c++17 -std=c++1z'
7332     if test "$with_latest_c__" = yes; then
7333         my_flags="-std=c++23 -std=c++2b -std=c++20 -std=c++2a $my_flags"
7334     fi
7335     for flag in $my_flags; do
7336         if test "$COM" = MSC; then
7337             flag="-Xclang $flag"
7338         fi
7339         save_CXXFLAGS=$CXXFLAGS
7340         CXXFLAGS="$CXXFLAGS $flag -Werror"
7341         if test "$SYSTEM_LIBCMIS" = TRUE; then
7342             CXXFLAGS="$CXXFLAGS -DSYSTEM_LIBCMIS $LIBCMIS_CFLAGS"
7343         fi
7344         AC_LANG_PUSH([C++])
7345         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7346             #include <algorithm>
7347             #include <functional>
7348             #include <vector>
7350             #if defined SYSTEM_LIBCMIS
7351             // See ucb/source/ucp/cmis/auth_provider.hxx:
7352             #if !defined __clang__
7353             #pragma GCC diagnostic push
7354             #pragma GCC diagnostic ignored "-Wdeprecated"
7355             #pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
7356             #endif
7357             #include <libcmis/libcmis.hxx>
7358             #if !defined __clang__
7359             #pragma GCC diagnostic pop
7360             #endif
7361             #endif
7363             void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7364                 std::sort(v.begin(), v.end(), fn);
7365             }
7366             ]])],[CXXFLAGS_CXX11=$flag])
7367         AC_LANG_POP([C++])
7368         CXXFLAGS=$save_CXXFLAGS
7369         if test -n "$CXXFLAGS_CXX11"; then
7370             break
7371         fi
7372     done
7374 if test -n "$CXXFLAGS_CXX11"; then
7375     AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7376 else
7377     AC_MSG_ERROR(no)
7379 AC_SUBST(CXXFLAGS_CXX11)
7381 if test "$GCC" = "yes"; then
7382     save_CXXFLAGS=$CXXFLAGS
7383     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7384     CHECK_L_ATOMIC
7385     CXXFLAGS=$save_CXXFLAGS
7386     AC_SUBST(ATOMIC_LIB)
7389 dnl Test for temporarily incompatible libstdc++ 4.7.{0,1}, where
7390 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=179528> introduced
7391 dnl an additional member _M_size into C++11 std::list towards 4.7.0 and
7392 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=189186> removed it
7393 dnl again towards 4.7.2:
7394 if test $CPP_LIBRARY = GLIBCXX; then
7395     AC_MSG_CHECKING([whether using C++11 causes libstdc++ 4.7.0/4.7.1 ABI breakage])
7396     AC_LANG_PUSH([C++])
7397     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7398 #include <list>
7399 #if !defined __GLIBCXX__ || (__GLIBCXX__ != 20120322 && __GLIBCXX__ != 20120614)
7400     // according to <https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html>:
7401     //   GCC 4.7.0: 20120322
7402     //   GCC 4.7.1: 20120614
7403     // and using a range check is not possible as the mapping between
7404     // __GLIBCXX__ values and GCC versions is not monotonic
7405 /* ok */
7406 #else
7407 abi broken
7408 #endif
7409         ]])], [AC_MSG_RESULT(no, ok)],
7410         [AC_MSG_ERROR(yes)])
7411     AC_LANG_POP([C++])
7414 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7415 save_CXXFLAGS=$CXXFLAGS
7416 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7417 AC_LANG_PUSH([C++])
7419 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7420 #include <stddef.h>
7422 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7424 namespace
7426         struct b
7427         {
7428                 int i;
7429                 int j;
7430         };
7432 ]], [[
7433 struct a
7435         int i;
7436         int j;
7438 a thinga[]={{0,0}, {1,1}};
7439 b thingb[]={{0,0}, {1,1}};
7440 size_t i = sizeof(sal_n_array_size(thinga));
7441 size_t j = sizeof(sal_n_array_size(thingb));
7442 return !(i != 0 && j != 0);
7444     ], [ AC_MSG_RESULT(yes) ],
7445     [ AC_MSG_ERROR(no)])
7446 AC_LANG_POP([C++])
7447 CXXFLAGS=$save_CXXFLAGS
7449 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7450 if test "$GCC" = yes; then
7451     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7452     AC_LANG_PUSH([C++])
7453     save_CXXFLAGS=$CXXFLAGS
7454     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7455     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7456     CXXFLAGS=$save_CXXFLAGS
7457     AC_LANG_POP([C++])
7458     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7459         AC_MSG_RESULT([yes])
7460     else
7461         AC_MSG_RESULT([no])
7462     fi
7464 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7466 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7467 AC_LANG_PUSH([C++])
7468 save_CXXFLAGS=$CXXFLAGS
7469 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7470 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7471         #include <algorithm>
7472         #include <initializer_list>
7473         #include <vector>
7474         template<typename T> class S {
7475         private:
7476             std::vector<T> v_;
7477         public:
7478             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7479         };
7480         constinit S<int> s{3, 2, 1};
7481     ])], [
7482         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7483         AC_MSG_RESULT([yes])
7484     ], [AC_MSG_RESULT([no])])
7485 CXXFLAGS=$save_CXXFLAGS
7486 AC_LANG_POP([C++])
7488 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a <span> with unsigned size_type])
7489 AC_LANG_PUSH([C++])
7490 save_CXXFLAGS=$CXXFLAGS
7491 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7492 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7493         #include <span>
7494         #include <type_traits>
7495         // Don't check size_type directly, as it was called index_type before P1872R0:
7496         void f(std::span<int> s) { static_assert(std::is_unsigned_v<decltype(s.size())>); };
7497     ])], [
7498         AC_DEFINE([HAVE_CPP_SPAN],[1])
7499         AC_MSG_RESULT([yes])
7500     ], [AC_MSG_RESULT([no])])
7501 CXXFLAGS=$save_CXXFLAGS
7502 AC_LANG_POP([C++])
7504 AC_MSG_CHECKING([whether $CXX_BASE implements C++ DR P1155R3])
7505 AC_LANG_PUSH([C++])
7506 save_CXXFLAGS=$CXXFLAGS
7507 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7508 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7509         struct S1 { S1(S1 &&); };
7510         struct S2: S1 {};
7511         S1 f(S2 s) { return s; }
7512     ])], [
7513         AC_DEFINE([HAVE_P1155R3],[1])
7514         AC_MSG_RESULT([yes])
7515     ], [AC_MSG_RESULT([no])])
7516 CXXFLAGS=$save_CXXFLAGS
7517 AC_LANG_POP([C++])
7519 AC_MSG_CHECKING([whether $CXX_BASE supports C++20 std::atomic_ref])
7520 HAVE_CXX20_ATOMIC_REF=
7521 AC_LANG_PUSH([C++])
7522 save_CXXFLAGS=$CXXFLAGS
7523 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7524 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7525         #include <atomic>
7526         int x;
7527         std::atomic_ref<int> y(x);
7528     ])], [
7529         HAVE_CXX20_ATOMIC_REF=TRUE
7530         AC_MSG_RESULT([yes])
7531     ], [AC_MSG_RESULT([no])])
7532 CXXFLAGS=$save_CXXFLAGS
7533 AC_LANG_POP([C++])
7534 AC_SUBST([HAVE_CXX20_ATOMIC_REF])
7536 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7537 dnl which is included in -Wextra anyway):
7538 HAVE_WDEPRECATED_COPY_DTOR=
7539 if test "$GCC" = yes; then
7540     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7541     AC_LANG_PUSH([C++])
7542     save_CXXFLAGS=$CXXFLAGS
7543     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7544     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7545             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7546             AC_MSG_RESULT([yes])
7547         ], [AC_MSG_RESULT([no])])
7548     CXXFLAGS=$save_CXXFLAGS
7549     AC_LANG_POP([C++])
7551 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7553 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7554 dnl uninitialized warning for code like
7556 dnl   OString f();
7557 dnl   boost::optional<OString> * g(bool b) {
7558 dnl       boost::optional<OString> o;
7559 dnl       if (b) o = f();
7560 dnl       return new boost::optional<OString>(o);
7561 dnl   }
7563 dnl (as is e.g. present, in a slightly more elaborate form, in
7564 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7565 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7566 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7567 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7568     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7569     AC_LANG_PUSH([C++])
7570     save_CXXFLAGS=$CXXFLAGS
7571     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7572     if test "$ENABLE_OPTIMIZED" = TRUE; then
7573         CXXFLAGS="$CXXFLAGS -O2"
7574     else
7575         CXXFLAGS="$CXXFLAGS -O0"
7576     fi
7577     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7578             #include <new>
7579             void f1(int);
7580             struct S1 {
7581                 ~S1() { f1(n); }
7582                 int n = 0;
7583             };
7584             struct S2 {
7585                 S2() {}
7586                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7587                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7588                 void set(S1 s) {
7589                     new (stg) S1(s);
7590                     init = true;
7591                 }
7592                 bool init = false;
7593                 char stg[sizeof (S1)];
7594             } ;
7595             S1 f2();
7596             S2 * f3(bool b) {
7597                 S2 o;
7598                 if (b) o.set(f2());
7599                 return new S2(o);
7600             }
7601         ]])], [AC_MSG_RESULT([no])], [
7602             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7603             AC_MSG_RESULT([yes])
7604         ])
7605     CXXFLAGS=$save_CXXFLAGS
7606     AC_LANG_POP([C++])
7608 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7610 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7611 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7612 dnl hits us e.g. with GCC 10 and --enable-optimized at
7614 dnl   In file included from include/rtl/string.hxx:49,
7615 dnl                    from include/rtl/ustring.hxx:43,
7616 dnl                    from include/osl/file.hxx:35,
7617 dnl                    from include/codemaker/global.hxx:28,
7618 dnl                    from include/codemaker/options.hxx:23,
7619 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7620 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7621 dnl       inlined from â€˜static char* rtl::ToStringHelper<const char [N]>::addData(char*, const char*) [with long unsigned int N = 3]’ at include/rtl/stringconcat.hxx:147:85,
7622 dnl       inlined from â€˜char* rtl::OStringConcat<T1, T2>::addData(char*) const [with T1 = const char [3]; T2 = rtl::OString]’ at include/rtl/stringconcat.hxx:226:103,
7623 dnl       inlined from â€˜rtl::OStringBuffer& rtl::OStringBuffer::append(rtl::OStringConcat<T1, T2>&&) [with T1 = const char [3]; T2 = rtl::OString]’ at include/rtl/strbuf.hxx:599:30,
7624 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7625 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7626 dnl      78 |         memcpy( buffer, data, length );
7627 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7628 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7629 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7630     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7631     AC_LANG_PUSH([C++])
7632     save_CXXFLAGS=$CXXFLAGS
7633     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7634     if test "$ENABLE_OPTIMIZED" = TRUE; then
7635         CXXFLAGS="$CXXFLAGS -O2"
7636     else
7637         CXXFLAGS="$CXXFLAGS -O0"
7638     fi
7639     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7640     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7641             void fill(char const * begin, char const * end, char c);
7642             struct q {
7643                 char ids[4];
7644                 char username[6];
7645             };
7646             void test(q & c) {
7647                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
7648                 __builtin_strncpy(c.username, "root", sizeof(c.username));
7649             }
7650         ]])], [AC_MSG_RESULT([no])], [
7651             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
7652             AC_MSG_RESULT([yes])
7653         ])
7654     CXXFLAGS=$save_CXXFLAGS
7655     AC_LANG_POP([C++])
7657 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
7659 HAVE_DLLEXPORTINLINES=
7660 dnl At least for Clang 14 trunk, -Zc:dllexportInlines- would cause lots of unresolved symbols when
7661 dnl linking e.g. Library_cppuhelper, for whatever reason:
7662 if test "$_os" = "WINNT" && test "$COM_IS_CLANG" != TRUE; then
7663     AC_MSG_CHECKING([whether $CXX_BASE supports -Zc:dllexportInlines-])
7664     AC_LANG_PUSH([C++])
7665     save_CXXFLAGS=$CXXFLAGS
7666     CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
7667     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7668             HAVE_DLLEXPORTINLINES=TRUE
7669             AC_MSG_RESULT([yes])
7670         ], [AC_MSG_RESULT([no])])
7671     CXXFLAGS=$save_CXXFLAGS
7672     AC_LANG_POP([C++])
7674 AC_SUBST([HAVE_DLLEXPORTINLINES])
7676 dnl ===================================================================
7677 dnl CPU Intrinsics support - SSE, AVX
7678 dnl ===================================================================
7680 CXXFLAGS_INTRINSICS_SSE2=
7681 CXXFLAGS_INTRINSICS_SSSE3=
7682 CXXFLAGS_INTRINSICS_SSE41=
7683 CXXFLAGS_INTRINSICS_SSE42=
7684 CXXFLAGS_INTRINSICS_AVX=
7685 CXXFLAGS_INTRINSICS_AVX2=
7686 CXXFLAGS_INTRINSICS_AVX512=
7687 CXXFLAGS_INTRINSICS_AVX512F=
7688 CXXFLAGS_INTRINSICS_F16C=
7689 CXXFLAGS_INTRINSICS_FMA=
7691 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7692     # GCC, Clang or Clang-cl (clang-cl + MSVC's -arch options don't work well together)
7693     flag_sse2=-msse2
7694     flag_ssse3=-mssse3
7695     flag_sse41=-msse4.1
7696     flag_sse42=-msse4.2
7697     flag_avx=-mavx
7698     flag_avx2=-mavx2
7699     flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
7700     flag_avx512f=-mavx512f
7701     flag_f16c=-mf16c
7702     flag_fma=-mfma
7703 else
7704     # With MSVC using -arch is in fact not necessary for being able
7705     # to use CPU intrinsics, code using AVX512F intrinsics will compile
7706     # even if compiled with -arch:AVX, the -arch option really only affects
7707     # instructions generated for C/C++ code.
7708     # So use the matching same (or lower) -arch options, but only in order
7709     # to generate the best matching instructions for the C++ code surrounding
7710     # the intrinsics.
7711     # SSE2 is the default for x86/x64, so no need to specify the option.
7712     flag_sse2=
7713     # No specific options for these, use the next lower.
7714     flag_ssse3="$flag_sse2"
7715     flag_sse41="$flag_sse2"
7716     flag_sse42="$flag_sse2"
7717     flag_avx=-arch:AVX
7718     flag_avx2=-arch:AVX2
7719     flag_avx512=-arch:AVX512
7720     # Using -arch:AVX512 would enable more than just AVX512F, so use only AVX2.
7721     flag_avx512f=-arch:AVX2
7722     # No MSVC options for these.
7723     flag_f16c="$flag_sse2"
7724     flag_fma="$flag_sse2"
7727 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
7728 AC_LANG_PUSH([C++])
7729 save_CXXFLAGS=$CXXFLAGS
7730 CXXFLAGS="$CXXFLAGS $flag_sse2"
7731 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7732     #include <emmintrin.h>
7733     int main () {
7734         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7735         c = _mm_xor_si128 (a, b);
7736         return 0;
7737     }
7738     ])],
7739     [can_compile_sse2=yes],
7740     [can_compile_sse2=no])
7741 AC_LANG_POP([C++])
7742 CXXFLAGS=$save_CXXFLAGS
7743 AC_MSG_RESULT([${can_compile_sse2}])
7744 if test "${can_compile_sse2}" = "yes" ; then
7745     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
7748 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
7749 AC_LANG_PUSH([C++])
7750 save_CXXFLAGS=$CXXFLAGS
7751 CXXFLAGS="$CXXFLAGS $flag_ssse3"
7752 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7753     #include <tmmintrin.h>
7754     int main () {
7755         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7756         c = _mm_maddubs_epi16 (a, b);
7757         return 0;
7758     }
7759     ])],
7760     [can_compile_ssse3=yes],
7761     [can_compile_ssse3=no])
7762 AC_LANG_POP([C++])
7763 CXXFLAGS=$save_CXXFLAGS
7764 AC_MSG_RESULT([${can_compile_ssse3}])
7765 if test "${can_compile_ssse3}" = "yes" ; then
7766     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
7769 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
7770 AC_LANG_PUSH([C++])
7771 save_CXXFLAGS=$CXXFLAGS
7772 CXXFLAGS="$CXXFLAGS $flag_sse41"
7773 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7774     #include <smmintrin.h>
7775     int main () {
7776         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7777         c = _mm_cmpeq_epi64 (a, b);
7778         return 0;
7779     }
7780     ])],
7781     [can_compile_sse41=yes],
7782     [can_compile_sse41=no])
7783 AC_LANG_POP([C++])
7784 CXXFLAGS=$save_CXXFLAGS
7785 AC_MSG_RESULT([${can_compile_sse41}])
7786 if test "${can_compile_sse41}" = "yes" ; then
7787     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
7790 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
7791 AC_LANG_PUSH([C++])
7792 save_CXXFLAGS=$CXXFLAGS
7793 CXXFLAGS="$CXXFLAGS $flag_sse42"
7794 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7795     #include <nmmintrin.h>
7796     int main () {
7797         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7798         c = _mm_cmpgt_epi64 (a, b);
7799         return 0;
7800     }
7801     ])],
7802     [can_compile_sse42=yes],
7803     [can_compile_sse42=no])
7804 AC_LANG_POP([C++])
7805 CXXFLAGS=$save_CXXFLAGS
7806 AC_MSG_RESULT([${can_compile_sse42}])
7807 if test "${can_compile_sse42}" = "yes" ; then
7808     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
7811 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
7812 AC_LANG_PUSH([C++])
7813 save_CXXFLAGS=$CXXFLAGS
7814 CXXFLAGS="$CXXFLAGS $flag_avx"
7815 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7816     #include <immintrin.h>
7817     int main () {
7818         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
7819         c = _mm256_xor_ps(a, b);
7820         return 0;
7821     }
7822     ])],
7823     [can_compile_avx=yes],
7824     [can_compile_avx=no])
7825 AC_LANG_POP([C++])
7826 CXXFLAGS=$save_CXXFLAGS
7827 AC_MSG_RESULT([${can_compile_avx}])
7828 if test "${can_compile_avx}" = "yes" ; then
7829     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
7832 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
7833 AC_LANG_PUSH([C++])
7834 save_CXXFLAGS=$CXXFLAGS
7835 CXXFLAGS="$CXXFLAGS $flag_avx2"
7836 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7837     #include <immintrin.h>
7838     int main () {
7839         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
7840         c = _mm256_maddubs_epi16(a, b);
7841         return 0;
7842     }
7843     ])],
7844     [can_compile_avx2=yes],
7845     [can_compile_avx2=no])
7846 AC_LANG_POP([C++])
7847 CXXFLAGS=$save_CXXFLAGS
7848 AC_MSG_RESULT([${can_compile_avx2}])
7849 if test "${can_compile_avx2}" = "yes" ; then
7850     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
7853 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
7854 AC_LANG_PUSH([C++])
7855 save_CXXFLAGS=$CXXFLAGS
7856 CXXFLAGS="$CXXFLAGS $flag_avx512"
7857 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7858     #include <immintrin.h>
7859     int main () {
7860         __m512i a = _mm512_loadu_si512(0);
7861         __m512d v1 = _mm512_load_pd(0);
7862         // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
7863         __m512d v2 = _mm512_abs_pd(v1);
7864         return 0;
7865     }
7866     ])],
7867     [can_compile_avx512=yes],
7868     [can_compile_avx512=no])
7869 AC_LANG_POP([C++])
7870 CXXFLAGS=$save_CXXFLAGS
7871 AC_MSG_RESULT([${can_compile_avx512}])
7872 if test "${can_compile_avx512}" = "yes" ; then
7873     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
7874     CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
7877 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
7878 AC_LANG_PUSH([C++])
7879 save_CXXFLAGS=$CXXFLAGS
7880 CXXFLAGS="$CXXFLAGS $flag_f16c"
7881 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7882     #include <immintrin.h>
7883     int main () {
7884         __m128i a = _mm_set1_epi32 (0);
7885         __m128 c;
7886         c = _mm_cvtph_ps(a);
7887         return 0;
7888     }
7889     ])],
7890     [can_compile_f16c=yes],
7891     [can_compile_f16c=no])
7892 AC_LANG_POP([C++])
7893 CXXFLAGS=$save_CXXFLAGS
7894 AC_MSG_RESULT([${can_compile_f16c}])
7895 if test "${can_compile_f16c}" = "yes" ; then
7896     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
7899 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
7900 AC_LANG_PUSH([C++])
7901 save_CXXFLAGS=$CXXFLAGS
7902 CXXFLAGS="$CXXFLAGS $flag_fma"
7903 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7904     #include <immintrin.h>
7905     int main () {
7906         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
7907         d = _mm256_fmadd_ps(a, b, c);
7908         return 0;
7909     }
7910     ])],
7911     [can_compile_fma=yes],
7912     [can_compile_fma=no])
7913 AC_LANG_POP([C++])
7914 CXXFLAGS=$save_CXXFLAGS
7915 AC_MSG_RESULT([${can_compile_fma}])
7916 if test "${can_compile_fma}" = "yes" ; then
7917     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
7920 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
7921 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
7922 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
7923 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
7924 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
7925 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
7926 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
7927 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512F])
7928 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
7929 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
7931 dnl ===================================================================
7932 dnl system stl sanity tests
7933 dnl ===================================================================
7934 if test "$_os" != "WINNT"; then
7936     AC_LANG_PUSH([C++])
7938     save_CPPFLAGS="$CPPFLAGS"
7939     if test -n "$MACOSX_SDK_PATH"; then
7940         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
7941     fi
7943     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
7944     # only.
7945     if test "$CPP_LIBRARY" = GLIBCXX; then
7946         dnl gcc#19664, gcc#22482, rhbz#162935
7947         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
7948         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
7949         AC_MSG_RESULT([$stlvisok])
7950         if test "$stlvisok" = "no"; then
7951             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
7952         fi
7953     fi
7955     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
7956     # when we don't make any dynamic libraries?
7957     if test "$DISABLE_DYNLOADING" = ""; then
7958         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
7959         cat > conftestlib1.cc <<_ACEOF
7960 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7961 struct S2: S1<int> { virtual ~S2(); };
7962 S2::~S2() {}
7963 _ACEOF
7964         cat > conftestlib2.cc <<_ACEOF
7965 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7966 struct S2: S1<int> { virtual ~S2(); };
7967 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
7968 _ACEOF
7969         gccvisinlineshiddenok=yes
7970         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
7971             gccvisinlineshiddenok=no
7972         else
7973             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
7974             dnl known to not work with -z defs (unsetting which makes the test
7975             dnl moot, though):
7976             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
7977             if test "$COM_IS_CLANG" = TRUE; then
7978                 for i in $CXX $CXXFLAGS; do
7979                     case $i in
7980                     -fsanitize=*)
7981                         my_linkflagsnoundefs=
7982                         break
7983                         ;;
7984                     esac
7985                 done
7986             fi
7987             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
7988                 gccvisinlineshiddenok=no
7989             fi
7990         fi
7992         rm -fr libconftest*
7993         AC_MSG_RESULT([$gccvisinlineshiddenok])
7994         if test "$gccvisinlineshiddenok" = "no"; then
7995             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
7996         fi
7997     fi
7999    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
8000     cat >visibility.cxx <<_ACEOF
8001 #pragma GCC visibility push(hidden)
8002 struct __attribute__ ((visibility ("default"))) TestStruct {
8003   static void Init();
8005 __attribute__ ((visibility ("default"))) void TestFunc() {
8006   TestStruct::Init();
8008 _ACEOF
8009     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
8010         gccvisbroken=yes
8011     else
8012         case "$host_cpu" in
8013         i?86|x86_64)
8014             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
8015                 gccvisbroken=no
8016             else
8017                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
8018                     gccvisbroken=no
8019                 else
8020                     gccvisbroken=yes
8021                 fi
8022             fi
8023             ;;
8024         *)
8025             gccvisbroken=no
8026             ;;
8027         esac
8028     fi
8029     rm -f visibility.s visibility.cxx
8031     AC_MSG_RESULT([$gccvisbroken])
8032     if test "$gccvisbroken" = "yes"; then
8033         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
8034     fi
8036     CPPFLAGS="$save_CPPFLAGS"
8038     AC_MSG_CHECKING([if CET endbranch is recognized])
8039 cat > endbr.s <<_ACEOF
8040 endbr32
8041 _ACEOF
8042     HAVE_ASM_END_BRANCH_INS_SUPPORT=
8043     if $CXX -c endbr.s -o endbr.o >/dev/null 2>&5; then
8044         AC_MSG_RESULT([yes])
8045         HAVE_ASM_END_BRANCH_INS_SUPPORT=TRUE
8046     else
8047         AC_MSG_RESULT([no])
8048     fi
8049     rm -f endbr.s endbr.o
8050     AC_SUBST(HAVE_ASM_END_BRANCH_INS_SUPPORT)
8052     AC_LANG_POP([C++])
8055 dnl ===================================================================
8056 dnl  Clang++ tests
8057 dnl ===================================================================
8059 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
8060 if test "$GCC" = "yes"; then
8061     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
8062     AC_LANG_PUSH([C++])
8063     save_CXXFLAGS=$CXXFLAGS
8064     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
8065     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
8066     CXXFLAGS=$save_CXXFLAGS
8067     AC_LANG_POP([C++])
8068     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
8069         AC_MSG_RESULT([yes])
8070     else
8071         AC_MSG_RESULT([no])
8072     fi
8074 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
8076 dnl ===================================================================
8077 dnl Compiler plugins
8078 dnl ===================================================================
8080 COMPILER_PLUGINS=
8081 # currently only Clang
8083 if test "$COM_IS_CLANG" != "TRUE"; then
8084     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
8085         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
8086         enable_compiler_plugins=no
8087     fi
8090 COMPILER_PLUGINS_COM_IS_CLANG=
8091 if test "$COM_IS_CLANG" = "TRUE"; then
8092     if test -n "$enable_compiler_plugins"; then
8093         compiler_plugins="$enable_compiler_plugins"
8094     elif test -n "$ENABLE_DBGUTIL"; then
8095         compiler_plugins=test
8096     else
8097         compiler_plugins=no
8098     fi
8099     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
8100         if test "$CLANGVER" -lt 50002; then
8101             if test "$compiler_plugins" = yes; then
8102                 AC_MSG_ERROR([Clang $CLANGVER is too old to build compiler plugins; need >= 5.0.2.])
8103             else
8104                 compiler_plugins=no
8105             fi
8106         fi
8107     fi
8108     if test "$compiler_plugins" != "no"; then
8109         dnl The prefix where Clang resides, override to where Clang resides if
8110         dnl using a source build:
8111         if test -z "$CLANGDIR"; then
8112             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
8113         fi
8114         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
8115         if test -z "$COMPILER_PLUGINS_CXX"; then
8116             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
8117         fi
8118         clangbindir=$CLANGDIR/bin
8119         if test "$build_os" = "cygwin"; then
8120             clangbindir=$(cygpath -u "$clangbindir")
8121         fi
8122         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
8123         if test -n "$LLVM_CONFIG"; then
8124             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
8125             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
8126             if test -z "$CLANGLIBDIR"; then
8127                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
8128             fi
8129             # Try if clang is built from source (in which case its includes are not together with llvm includes).
8130             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
8131             clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
8132             if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
8133                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
8134             fi
8135             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
8136             clangobjdir=$($LLVM_CONFIG --obj-root)
8137             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
8138                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
8139             fi
8140         fi
8141         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
8142         AC_LANG_PUSH([C++])
8143         save_CXX=$CXX
8144         save_CXXCPP=$CXXCPP
8145         save_CPPFLAGS=$CPPFLAGS
8146         save_CXXFLAGS=$CXXFLAGS
8147         save_LDFLAGS=$LDFLAGS
8148         save_LIBS=$LIBS
8149         CXX=$COMPILER_PLUGINS_CXX
8150         CXXCPP="$COMPILER_PLUGINS_CXX -E"
8151         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8152         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8153         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
8154             [COMPILER_PLUGINS=TRUE],
8155             [
8156             if test "$compiler_plugins" = "yes"; then
8157                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
8158             else
8159                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
8160                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
8161             fi
8162             ])
8163         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8164         dnl comment in compilerplugins/Makefile-clang.mk:
8165         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8166             LDFLAGS=""
8167             AC_MSG_CHECKING([for clang libraries to use])
8168             if test -z "$CLANGTOOLLIBS"; then
8169                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8170  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8171                 AC_LINK_IFELSE([
8172                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8173                         [[ clang::FullSourceLoc().dump(); ]])
8174                 ],[CLANGTOOLLIBS="$LIBS"],[])
8175             fi
8176             if test -z "$CLANGTOOLLIBS"; then
8177                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8178                 AC_LINK_IFELSE([
8179                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8180                         [[ clang::FullSourceLoc().dump(); ]])
8181                 ],[CLANGTOOLLIBS="$LIBS"],[])
8182             fi
8183             AC_MSG_RESULT([$CLANGTOOLLIBS])
8184             if test -z "$CLANGTOOLLIBS"; then
8185                 if test "$compiler_plugins" = "yes"; then
8186                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8187                 else
8188                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8189                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8190                 fi
8191                 COMPILER_PLUGINS=
8192             fi
8193             if test -n "$COMPILER_PLUGINS"; then
8194                 if test -z "$CLANGSYSINCLUDE"; then
8195                     if test -n "$LLVM_CONFIG"; then
8196                         # Path to the clang system headers (no idea if there's a better way to get it).
8197                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8198                     fi
8199                 fi
8200             fi
8201         fi
8202         CXX=$save_CXX
8203         CXXCPP=$save_CXXCPP
8204         CPPFLAGS=$save_CPPFLAGS
8205         CXXFLAGS=$save_CXXFLAGS
8206         LDFLAGS=$save_LDFLAGS
8207         LIBS="$save_LIBS"
8208         AC_LANG_POP([C++])
8210         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8211         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8212             #ifndef __clang__
8213             you lose
8214             #endif
8215             int foo=42;
8216             ]])],
8217             [AC_MSG_RESULT([yes])
8218              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8219             [AC_MSG_RESULT([no])])
8220         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8221     fi
8222 else
8223     if test "$enable_compiler_plugins" = "yes"; then
8224         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8225     fi
8227 COMPILER_PLUGINS_ANALYZER_PCH=
8228 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8229     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8231 AC_SUBST(COMPILER_PLUGINS)
8232 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8233 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8234 AC_SUBST(COMPILER_PLUGINS_CXX)
8235 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8236 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8237 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8238 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8239 AC_SUBST(CLANGDIR)
8240 AC_SUBST(CLANGLIBDIR)
8241 AC_SUBST(CLANGTOOLLIBS)
8242 AC_SUBST(CLANGSYSINCLUDE)
8244 # Plugin to help linker.
8245 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8246 # This makes --enable-lto build with clang work.
8247 AC_SUBST(LD_PLUGIN)
8249 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8250 AC_SUBST(HAVE_POSIX_FALLOCATE)
8252 JITC_PROCESSOR_TYPE=""
8253 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8254     # IBMs JDK needs this...
8255     JITC_PROCESSOR_TYPE=6
8256     export JITC_PROCESSOR_TYPE
8258 AC_SUBST([JITC_PROCESSOR_TYPE])
8260 # Misc Windows Stuff
8261 AC_ARG_WITH(ucrt-dir,
8262     AS_HELP_STRING([--with-ucrt-dir],
8263         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8264         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8265         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8266             Windows6.1-KB2999226-x64.msu
8267             Windows6.1-KB2999226-x86.msu
8268             Windows8.1-KB2999226-x64.msu
8269             Windows8.1-KB2999226-x86.msu
8270             Windows8-RT-KB2999226-x64.msu
8271             Windows8-RT-KB2999226-x86.msu
8272         A zip archive including those files is available from Microsoft site:
8273         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8276 UCRT_REDISTDIR="$with_ucrt_dir"
8277 if test $_os = "WINNT"; then
8278     find_msvc_x64_dlls
8279     for i in $PKGFORMAT; do
8280         if test "$i" = msi; then
8281             find_msms
8282             break
8283         fi
8284     done
8285     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8286     MSVC_DLLS="$msvcdlls"
8287     test -n "$msmdir" && MSM_PATH=`win_short_path_for_make "$msmdir"`
8288     # MSVC 15.3 changed it to VC141
8289     if echo "$msvcdllpath" | grep -q "VC143.CRT$"; then
8290         SCPDEFS="$SCPDEFS -DWITH_VC143_REDIST"
8291     elif echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8292         SCPDEFS="$SCPDEFS -DWITH_VC142_REDIST"
8293     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8294         SCPDEFS="$SCPDEFS -DWITH_VC141_REDIST"
8295     else
8296         SCPDEFS="$SCPDEFS -DWITH_VC${VCVER}_REDIST"
8297     fi
8299     if test "$UCRT_REDISTDIR" = "no"; then
8300         dnl explicitly disabled
8301         UCRT_REDISTDIR=""
8302     else
8303         if ! test -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x64.msu" -a \
8304                   -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x86.msu" -a \
8305                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x64.msu" -a \
8306                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x86.msu" -a \
8307                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x64.msu" -a \
8308                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x86.msu"; then
8309             UCRT_REDISTDIR=""
8310             if test -n "$PKGFORMAT"; then
8311                for i in $PKGFORMAT; do
8312                    case "$i" in
8313                    msi)
8314                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8315                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8316                        ;;
8317                    esac
8318                done
8319             fi
8320         fi
8321     fi
8324 AC_SUBST(UCRT_REDISTDIR)
8325 AC_SUBST(MSVC_DLL_PATH)
8326 AC_SUBST(MSVC_DLLS)
8327 AC_SUBST(MSM_PATH)
8330 dnl ===================================================================
8331 dnl Checks for Java
8332 dnl ===================================================================
8333 if test "$ENABLE_JAVA" != ""; then
8335     # Windows-specific tests
8336     if test "$build_os" = "cygwin"; then
8337         if test -z "$with_jdk_home"; then
8338             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8339             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8340             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/CurrentVersion"
8341             if test -n "$regvalue"; then
8342                 ver=$regvalue
8343                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver/JavaHome"
8344                 with_jdk_home=$regvalue
8345             fi
8346             howfound="found automatically"
8347         else
8348             with_jdk_home=`win_short_path_for_make "$with_jdk_home"`
8349             howfound="you passed"
8350         fi
8352         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8353             AC_MSG_ERROR([No JDK found, pass the --with-jdk-home option (or fix the path) pointing to a $WIN_HOST_BITS-bit JDK >= 9])
8354         fi
8355     fi
8357     # macOS: /usr/libexec/java_home helps to set the current JDK_HOME. Actually JDK_HOME should NOT be set where java (/usr/bin/java) is located.
8358     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8359     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8360         with_jdk_home=`/usr/libexec/java_home`
8361     fi
8363     JAVA_HOME=; export JAVA_HOME
8364     if test -z "$with_jdk_home"; then
8365         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8366     else
8367         _java_path="$with_jdk_home/bin/$with_java"
8368         dnl Check if there is a Java interpreter at all.
8369         if test -x "$_java_path"; then
8370             JAVAINTERPRETER=$_java_path
8371         else
8372             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8373         fi
8374     fi
8376     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8377     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8378     dnl loaded by java to run JunitTests:
8379     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8380         shortjdkhome=`cygpath -d "$with_jdk_home"`
8381         if test $WIN_HOST_BITS -eq 64 -a -f "$with_jdk_home/bin/java.exe" -a "`$shortjdkhome/bin/java.exe -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8382             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8383             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8384         elif test $WIN_HOST_BITS -eq 32 -a -f "$with_jdk_home/bin/java.exe" -a "`$shortjdkhome/bin/java.exe -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8385             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8386             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8387         fi
8389         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8390             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8391         fi
8392         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8393     elif test "$cross_compiling" != "yes"; then
8394         case $CPUNAME in
8395             AARCH64|AXP|X86_64|HPPA|IA64|POWERPC64|S390X|SPARC64|GODSON64)
8396                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8397                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8398                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8399                 fi
8400                 ;;
8401             *) # assumption: everything else 32-bit
8402                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8403                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8404                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8405                 fi
8406                 ;;
8407         esac
8408     fi
8411 dnl ===================================================================
8412 dnl Checks for JDK.
8413 dnl ===================================================================
8415 # Whether all the complexity here actually is needed any more or not, no idea.
8417 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8418     _gij_longver=0
8419     AC_MSG_CHECKING([the installed JDK])
8420     if test -n "$JAVAINTERPRETER"; then
8421         dnl java -version sends output to stderr!
8422         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8423             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8424         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8425             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8426         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8427             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8428         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8429             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8430         else
8431             JDK=sun
8433             dnl Sun JDK specific tests
8434             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8435             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8437             if test "$_jdk_ver" -lt 10900; then
8438                 AC_MSG_ERROR([JDK is too old, you need at least 9 ($_jdk_ver < 10900)])
8439             fi
8440             if test "$_jdk_ver" -gt 10900; then
8441                 JAVA_CLASSPATH_NOT_SET=TRUE
8442             fi
8444             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8445             if test "$_os" = "WINNT"; then
8446                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8447             fi
8448             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8450             # set to limit VM usage for JunitTests
8451             JAVAIFLAGS=-Xmx64M
8452             # set to limit VM usage for javac
8453             JAVACFLAGS=-J-Xmx128M
8454         fi
8455     else
8456         AC_MSG_ERROR([Java not found. You need at least JDK 9])
8457     fi
8458 else
8459     if test -z "$ENABLE_JAVA"; then
8460         dnl Java disabled
8461         JAVA_HOME=
8462         export JAVA_HOME
8463     elif test "$cross_compiling" = "yes"; then
8464         # Just assume compatibility of build and host JDK
8465         JDK=$JDK_FOR_BUILD
8466         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8467     fi
8470 dnl ===================================================================
8471 dnl Checks for javac
8472 dnl ===================================================================
8473 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8474     javacompiler="javac"
8475     : ${JAVA_SOURCE_VER=8}
8476     : ${JAVA_TARGET_VER=8}
8477     if test -z "$with_jdk_home"; then
8478         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8479     else
8480         _javac_path="$with_jdk_home/bin/$javacompiler"
8481         dnl Check if there is a Java compiler at all.
8482         if test -x "$_javac_path"; then
8483             JAVACOMPILER=$_javac_path
8484         fi
8485     fi
8486     if test -z "$JAVACOMPILER"; then
8487         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8488     fi
8489     if test "$build_os" = "cygwin"; then
8490         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8491             JAVACOMPILER="${JAVACOMPILER}.exe"
8492         fi
8493         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8494     fi
8497 dnl ===================================================================
8498 dnl Checks for javadoc
8499 dnl ===================================================================
8500 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8501     if test -z "$with_jdk_home"; then
8502         AC_PATH_PROG(JAVADOC, javadoc)
8503     else
8504         _javadoc_path="$with_jdk_home/bin/javadoc"
8505         dnl Check if there is a javadoc at all.
8506         if test -x "$_javadoc_path"; then
8507             JAVADOC=$_javadoc_path
8508         else
8509             AC_PATH_PROG(JAVADOC, javadoc)
8510         fi
8511     fi
8512     if test -z "$JAVADOC"; then
8513         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8514     fi
8515     if test "$build_os" = "cygwin"; then
8516         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8517             JAVADOC="${JAVADOC}.exe"
8518         fi
8519         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8520     fi
8522     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8523     JAVADOCISGJDOC="yes"
8524     fi
8526 AC_SUBST(JAVADOC)
8527 AC_SUBST(JAVADOCISGJDOC)
8529 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8530     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8531     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8532         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8533            # try to recover first by looking whether we have an alternative
8534            # system as in Debian or newer SuSEs where following /usr/bin/javac
8535            # over /etc/alternatives/javac leads to the right bindir where we
8536            # just need to strip a bit away to get a valid JAVA_HOME
8537            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8538         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8539             # maybe only one level of symlink (e.g. on Mac)
8540             JAVA_HOME=$(readlink $JAVACOMPILER)
8541             if test "$(dirname $JAVA_HOME)" = "."; then
8542                 # we've got no path to trim back
8543                 JAVA_HOME=""
8544             fi
8545         else
8546             # else warn
8547             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8548             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8549             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8550             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8551         fi
8552         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8553         if test "$JAVA_HOME" != "/usr"; then
8554             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8555                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8556                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8557                 dnl Tiger already returns a JDK path...
8558                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8559             else
8560                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8561                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8562                 dnl that checks which version to run
8563                 if test -f "$JAVA_HOME"; then
8564                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8565                 fi
8566             fi
8567         fi
8568     fi
8569     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8571     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8572     if test -z "$JAVA_HOME"; then
8573         if test "x$with_jdk_home" = "x"; then
8574             cat > findhome.java <<_ACEOF
8575 [import java.io.File;
8577 class findhome
8579     public static void main(String args[])
8580     {
8581         String jrelocation = System.getProperty("java.home");
8582         File jre = new File(jrelocation);
8583         System.out.println(jre.getParent());
8584     }
8586 _ACEOF
8587             AC_MSG_CHECKING([if javac works])
8588             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8589             AC_TRY_EVAL(javac_cmd)
8590             if test $? = 0 -a -f ./findhome.class; then
8591                 AC_MSG_RESULT([javac works])
8592             else
8593                 echo "configure: javac test failed" >&5
8594                 cat findhome.java >&5
8595                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8596             fi
8597             AC_MSG_CHECKING([if gij knows its java.home])
8598             JAVA_HOME=`$JAVAINTERPRETER findhome`
8599             if test $? = 0 -a "$JAVA_HOME" != ""; then
8600                 AC_MSG_RESULT([$JAVA_HOME])
8601             else
8602                 echo "configure: java test failed" >&5
8603                 cat findhome.java >&5
8604                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8605             fi
8606             # clean-up after ourselves
8607             rm -f ./findhome.java ./findhome.class
8608         else
8609             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8610         fi
8611     fi
8613     # now check if $JAVA_HOME is really valid
8614     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8615         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8616             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8617             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8618             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
8619             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
8620             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
8621             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
8622         fi
8623     fi
8624     PathFormat "$JAVA_HOME"
8625     JAVA_HOME="$formatted_path"
8628 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
8629     "$_os" != Darwin
8630 then
8631     AC_MSG_CHECKING([for JAWT lib])
8632     if test "$_os" = WINNT; then
8633         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
8634         JAWTLIB=jawt.lib
8635     else
8636         case "$host_cpu" in
8637         arm*)
8638             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
8639             JAVA_ARCH=$my_java_arch
8640             ;;
8641         i*86)
8642             my_java_arch=i386
8643             ;;
8644         m68k)
8645             my_java_arch=m68k
8646             ;;
8647         powerpc)
8648             my_java_arch=ppc
8649             ;;
8650         powerpc64)
8651             my_java_arch=ppc64
8652             ;;
8653         powerpc64le)
8654             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
8655             JAVA_ARCH=$my_java_arch
8656             ;;
8657         sparc64)
8658             my_java_arch=sparcv9
8659             ;;
8660         x86_64)
8661             my_java_arch=amd64
8662             ;;
8663         *)
8664             my_java_arch=$host_cpu
8665             ;;
8666         esac
8667         # This is where JDK9 puts the library
8668         if test -e "$JAVA_HOME/lib/libjawt.so"; then
8669             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
8670         else
8671             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
8672         fi
8673         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
8674     fi
8675     AC_MSG_RESULT([$JAWTLIB])
8677 AC_SUBST(JAWTLIB)
8679 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
8680     case "$host_os" in
8682     aix*)
8683         JAVAINC="-I$JAVA_HOME/include"
8684         JAVAINC="$JAVAINC -I$JAVA_HOME/include/aix"
8685         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8686         ;;
8688     cygwin*|wsl*)
8689         JAVAINC="-I$JAVA_HOME/include/win32"
8690         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
8691         ;;
8693     darwin*|macos*)
8694         if test -d "$JAVA_HOME/include/darwin"; then
8695             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
8696         else
8697             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
8698         fi
8699         ;;
8701     dragonfly*)
8702         JAVAINC="-I$JAVA_HOME/include"
8703         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8704         ;;
8706     freebsd*)
8707         JAVAINC="-I$JAVA_HOME/include"
8708         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
8709         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
8710         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8711         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8712         ;;
8714     k*bsd*-gnu*)
8715         JAVAINC="-I$JAVA_HOME/include"
8716         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8717         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8718         ;;
8720     linux-gnu*)
8721         JAVAINC="-I$JAVA_HOME/include"
8722         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8723         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8724         ;;
8726     *netbsd*)
8727         JAVAINC="-I$JAVA_HOME/include"
8728         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
8729         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8730        ;;
8732     openbsd*)
8733         JAVAINC="-I$JAVA_HOME/include"
8734         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
8735         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8736         ;;
8738     solaris*)
8739         JAVAINC="-I$JAVA_HOME/include"
8740         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
8741         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8742         ;;
8743     esac
8745 SOLARINC="$SOLARINC $JAVAINC"
8747 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8748     JAVA_HOME_FOR_BUILD=$JAVA_HOME
8749     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
8750     JDK_FOR_BUILD=$JDK
8753 AC_SUBST(JAVACFLAGS)
8754 AC_SUBST(JAVACOMPILER)
8755 AC_SUBST(JAVAINTERPRETER)
8756 AC_SUBST(JAVAIFLAGS)
8757 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
8758 AC_SUBST(JAVA_CLASSPATH_NOT_SET)
8759 AC_SUBST(JAVA_HOME)
8760 AC_SUBST(JAVA_HOME_FOR_BUILD)
8761 AC_SUBST(JDK)
8762 AC_SUBST(JDK_FOR_BUILD)
8763 AC_SUBST(JAVA_SOURCE_VER)
8764 AC_SUBST(JAVA_TARGET_VER)
8767 dnl ===================================================================
8768 dnl Export file validation
8769 dnl ===================================================================
8770 AC_MSG_CHECKING([whether to enable export file validation])
8771 if test "$with_export_validation" != "no"; then
8772     if test -z "$ENABLE_JAVA"; then
8773         if test "$with_export_validation" = "yes"; then
8774             AC_MSG_ERROR([requested, but Java is disabled])
8775         else
8776             AC_MSG_RESULT([no, as Java is disabled])
8777         fi
8778     elif ! test -d "${SRC_ROOT}/schema"; then
8779         if test "$with_export_validation" = "yes"; then
8780             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
8781         else
8782             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
8783         fi
8784     else
8785         AC_MSG_RESULT([yes])
8786         AC_DEFINE(HAVE_EXPORT_VALIDATION)
8788         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
8789         if test -z "$ODFVALIDATOR"; then
8790             # remember to download the ODF toolkit with validator later
8791             AC_MSG_NOTICE([no odfvalidator found, will download it])
8792             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
8793             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
8795             # and fetch name of odfvalidator jar name from download.lst
8796             ODFVALIDATOR_JAR=`$SED -n -e "s/export *ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8797             AC_SUBST(ODFVALIDATOR_JAR)
8799             if test -z "$ODFVALIDATOR_JAR"; then
8800                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
8801             fi
8802         fi
8803         if test "$build_os" = "cygwin"; then
8804             # In case of Cygwin it will be executed from Windows,
8805             # so we need to run bash and absolute path to validator
8806             # so instead of "odfvalidator" it will be
8807             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8808             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
8809         else
8810             ODFVALIDATOR="sh $ODFVALIDATOR"
8811         fi
8812         AC_SUBST(ODFVALIDATOR)
8815         AC_PATH_PROGS(OFFICEOTRON, officeotron)
8816         if test -z "$OFFICEOTRON"; then
8817             # remember to download the officeotron with validator later
8818             AC_MSG_NOTICE([no officeotron found, will download it])
8819             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
8820             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
8822             # and fetch name of officeotron jar name from download.lst
8823             OFFICEOTRON_JAR=`$SED -n -e "s/export *OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8824             AC_SUBST(OFFICEOTRON_JAR)
8826             if test -z "$OFFICEOTRON_JAR"; then
8827                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
8828             fi
8829         else
8830             # check version of existing officeotron
8831             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
8832             if test 0"$OFFICEOTRON_VER" -lt 704; then
8833                 AC_MSG_ERROR([officeotron too old])
8834             fi
8835         fi
8836         if test "$build_os" = "cygwin"; then
8837             # In case of Cygwin it will be executed from Windows,
8838             # so we need to run bash and absolute path to validator
8839             # so instead of "odfvalidator" it will be
8840             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8841             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
8842         else
8843             OFFICEOTRON="sh $OFFICEOTRON"
8844         fi
8845     fi
8846     AC_SUBST(OFFICEOTRON)
8847 else
8848     AC_MSG_RESULT([no])
8851 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
8852 if test "$with_bffvalidator" != "no"; then
8853     AC_DEFINE(HAVE_BFFVALIDATOR)
8855     if test "$with_export_validation" = "no"; then
8856         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
8857     fi
8859     if test "$with_bffvalidator" = "yes"; then
8860         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
8861     else
8862         BFFVALIDATOR="$with_bffvalidator"
8863     fi
8865     if test "$build_os" = "cygwin"; then
8866         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
8867             AC_MSG_RESULT($BFFVALIDATOR)
8868         else
8869             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8870         fi
8871     elif test -n "$BFFVALIDATOR"; then
8872         # We are not in Cygwin but need to run Windows binary with wine
8873         AC_PATH_PROGS(WINE, wine)
8875         # so swap in a shell wrapper that converts paths transparently
8876         BFFVALIDATOR_EXE="$BFFVALIDATOR"
8877         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
8878         AC_SUBST(BFFVALIDATOR_EXE)
8879         AC_MSG_RESULT($BFFVALIDATOR)
8880     else
8881         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8882     fi
8883     AC_SUBST(BFFVALIDATOR)
8884 else
8885     AC_MSG_RESULT([no])
8888 dnl ===================================================================
8889 dnl Check for C preprocessor to use
8890 dnl ===================================================================
8891 AC_MSG_CHECKING([which C preprocessor to use in idlc])
8892 SYSTEM_UCPP_IS_GCC=
8893 if test -n "$with_idlc_cpp"; then
8894     AC_MSG_RESULT([$with_idlc_cpp])
8895     AC_PATH_PROG(SYSTEM_UCPP, $with_idlc_cpp)
8896     AC_MSG_CHECKING([if $with_idlc_cpp is GCC CPP])
8897     # ucpp will accept -v (to output version), warn about the others as unknown
8898     # and return 1 (due to -v)
8899     # gcc will accept -v (as verbose), --version (to output version) and -nostdinc
8900     # and return 0 (due to --version ) if all options are supported
8901     $SYSTEM_UCPP -v --version -nostdinc >/dev/null 2>/dev/null
8902     if test $? -eq 0;  then
8903         SYSTEM_UCPP_IS_GCC=TRUE
8904         AC_MSG_RESULT([yes])
8905     else
8906         AC_MSG_RESULT([no])
8907     fi
8908 else
8909     AC_MSG_RESULT([ucpp])
8910     AC_MSG_CHECKING([which ucpp to use])
8911     if test -n "$with_system_ucpp" -a "$with_system_ucpp" != "no"; then
8912         AC_MSG_RESULT([external])
8913         AC_PATH_PROG(SYSTEM_UCPP, ucpp)
8914     else
8915         AC_MSG_RESULT([internal])
8916         BUILD_TYPE="$BUILD_TYPE UCPP"
8917     fi
8919 AC_SUBST(SYSTEM_UCPP)
8920 AC_SUBST(SYSTEM_UCPP_IS_GCC)
8922 dnl ===================================================================
8923 dnl Check for epm (not needed for Windows)
8924 dnl ===================================================================
8925 AC_MSG_CHECKING([whether to enable EPM for packing])
8926 if test "$enable_epm" = "yes"; then
8927     AC_MSG_RESULT([yes])
8928     if test "$_os" != "WINNT"; then
8929         if test $_os = Darwin; then
8930             EPM=internal
8931         elif test -n "$with_epm"; then
8932             EPM=$with_epm
8933         else
8934             AC_PATH_PROG(EPM, epm, no)
8935         fi
8936         if test "$EPM" = "no" -o "$EPM" = "internal"; then
8937             AC_MSG_NOTICE([EPM will be built.])
8938             BUILD_TYPE="$BUILD_TYPE EPM"
8939             EPM=${WORKDIR}/UnpackedTarball/epm/epm
8940         else
8941             # Gentoo has some epm which is something different...
8942             AC_MSG_CHECKING([whether the found epm is the right epm])
8943             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
8944                 AC_MSG_RESULT([yes])
8945             else
8946                 AC_MSG_ERROR([no. Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8947             fi
8948             AC_MSG_CHECKING([epm version])
8949             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
8950             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
8951                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
8952                 AC_MSG_RESULT([OK, >= 3.7])
8953             else
8954                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
8955                 AC_MSG_ERROR([Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8956             fi
8957         fi
8958     fi
8960     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
8961         AC_MSG_CHECKING([for rpm])
8962         for a in "$RPM" rpmbuild rpm; do
8963             $a --usage >/dev/null 2> /dev/null
8964             if test $? -eq 0; then
8965                 RPM=$a
8966                 break
8967             else
8968                 $a --version >/dev/null 2> /dev/null
8969                 if test $? -eq 0; then
8970                     RPM=$a
8971                     break
8972                 fi
8973             fi
8974         done
8975         if test -z "$RPM"; then
8976             AC_MSG_ERROR([not found])
8977         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
8978             RPM_PATH=`which $RPM`
8979             AC_MSG_RESULT([$RPM_PATH])
8980             SCPDEFS="$SCPDEFS -DWITH_RPM"
8981         else
8982             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
8983         fi
8984     fi
8985     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
8986         AC_PATH_PROG(DPKG, dpkg, no)
8987         if test "$DPKG" = "no"; then
8988             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
8989         fi
8990     fi
8991     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
8992        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
8993         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
8994             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
8995                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
8996                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
8997                     AC_MSG_RESULT([yes])
8998                 else
8999                     AC_MSG_RESULT([no])
9000                     if echo "$PKGFORMAT" | $GREP -q rpm; then
9001                         _pt="rpm"
9002                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
9003                         add_warning "the rpms will need to be installed with --nodeps"
9004                     else
9005                         _pt="pkg"
9006                     fi
9007                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
9008                     add_warning "the ${_pt}s will not be relocatable"
9009                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
9010                                  relocation will work, you need to patch your epm with the
9011                                  patch in epm/epm-3.7.patch or build with
9012                                  --with-epm=internal which will build a suitable epm])
9013                 fi
9014             fi
9015         fi
9016     fi
9017     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9018         AC_PATH_PROG(PKGMK, pkgmk, no)
9019         if test "$PKGMK" = "no"; then
9020             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
9021         fi
9022     fi
9023     AC_SUBST(RPM)
9024     AC_SUBST(DPKG)
9025     AC_SUBST(PKGMK)
9026 else
9027     for i in $PKGFORMAT; do
9028         case "$i" in
9029         aix | bsd | deb | pkg | rpm | native | portable)
9030             AC_MSG_ERROR(
9031                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
9032             ;;
9033         esac
9034     done
9035     AC_MSG_RESULT([no])
9036     EPM=NO
9038 AC_SUBST(EPM)
9040 ENABLE_LWP=
9041 if test "$enable_lotuswordpro" = "yes"; then
9042     ENABLE_LWP="TRUE"
9044 AC_SUBST(ENABLE_LWP)
9046 dnl ===================================================================
9047 dnl Check for building ODK
9048 dnl ===================================================================
9049 if test "$enable_odk" != yes; then
9050     unset DOXYGEN
9051 else
9052     if test "$with_doxygen" = no; then
9053         AC_MSG_CHECKING([for doxygen])
9054         unset DOXYGEN
9055         AC_MSG_RESULT([no])
9056     else
9057         if test "$with_doxygen" = yes; then
9058             AC_PATH_PROG([DOXYGEN], [doxygen])
9059             if test -z "$DOXYGEN"; then
9060                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
9061             fi
9062             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
9063                 if ! dot -V 2>/dev/null; then
9064                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
9065                 fi
9066             fi
9067         else
9068             AC_MSG_CHECKING([for doxygen])
9069             DOXYGEN=$with_doxygen
9070             AC_MSG_RESULT([$DOXYGEN])
9071         fi
9072         if test -n "$DOXYGEN"; then
9073             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
9074             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
9075             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
9076                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
9077             fi
9078         fi
9079     fi
9081 AC_SUBST([DOXYGEN])
9083 AC_MSG_CHECKING([whether to build the ODK])
9084 if test "$enable_odk" = yes; then
9085     AC_MSG_RESULT([yes])
9086     BUILD_TYPE="$BUILD_TYPE ODK"
9087 else
9088     AC_MSG_RESULT([no])
9091 dnl ===================================================================
9092 dnl Check for system zlib
9093 dnl ===================================================================
9094 if test "$with_system_zlib" = "auto"; then
9095     case "$_os" in
9096     WINNT)
9097         with_system_zlib="$with_system_libs"
9098         ;;
9099     *)
9100         if test "$enable_fuzzers" != "yes"; then
9101             with_system_zlib=yes
9102         else
9103             with_system_zlib=no
9104         fi
9105         ;;
9106     esac
9109 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
9110 dnl and has no pkg-config for it at least on some tinderboxes,
9111 dnl so leaving that out for now
9112 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
9113 AC_MSG_CHECKING([which zlib to use])
9114 if test "$with_system_zlib" = "yes"; then
9115     AC_MSG_RESULT([external])
9116     SYSTEM_ZLIB=TRUE
9117     AC_CHECK_HEADER(zlib.h, [],
9118         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
9119     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
9120         [AC_MSG_ERROR(zlib not found or functional)], [])
9121 else
9122     AC_MSG_RESULT([internal])
9123     SYSTEM_ZLIB=
9124     BUILD_TYPE="$BUILD_TYPE ZLIB"
9125     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
9126     if test "$COM" = "MSC"; then
9127         ZLIB_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/zlib.lib"
9128     else
9129         ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
9130     fi
9132 AC_SUBST(ZLIB_CFLAGS)
9133 AC_SUBST(ZLIB_LIBS)
9134 AC_SUBST(SYSTEM_ZLIB)
9136 dnl ===================================================================
9137 dnl Check for system jpeg
9138 dnl ===================================================================
9139 AC_MSG_CHECKING([which libjpeg to use])
9140 if test "$with_system_jpeg" = "yes"; then
9141     AC_MSG_RESULT([external])
9142     SYSTEM_LIBJPEG=TRUE
9143     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
9144         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
9145     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
9146         [AC_MSG_ERROR(jpeg library not found or functional)], [])
9147 else
9148     SYSTEM_LIBJPEG=
9149     AC_MSG_RESULT([internal, libjpeg-turbo])
9150     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
9152     case "$host_cpu" in
9153     x86_64 | amd64 | i*86 | x86 | ia32)
9154         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
9155         if test -z "$NASM" -a "$build_os" = "cygwin"; then
9156             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
9157                 NASM="$LODE_HOME/opt/bin/nasm"
9158             elif test -x "/opt/lo/bin/nasm"; then
9159                 NASM="/opt/lo/bin/nasm"
9160             fi
9161         fi
9163         if test -n "$NASM"; then
9164             AC_MSG_CHECKING([for object file format of host system])
9165             case "$host_os" in
9166               cygwin* | mingw* | pw32* | wsl*)
9167                 case "$host_cpu" in
9168                   x86_64)
9169                     objfmt='Win64-COFF'
9170                     ;;
9171                   *)
9172                     objfmt='Win32-COFF'
9173                     ;;
9174                 esac
9175               ;;
9176               msdosdjgpp* | go32*)
9177                 objfmt='COFF'
9178               ;;
9179               os2-emx*) # not tested
9180                 objfmt='MSOMF' # obj
9181               ;;
9182               linux*coff* | linux*oldld*)
9183                 objfmt='COFF' # ???
9184               ;;
9185               linux*aout*)
9186                 objfmt='a.out'
9187               ;;
9188               linux*)
9189                 case "$host_cpu" in
9190                   x86_64)
9191                     objfmt='ELF64'
9192                     ;;
9193                   *)
9194                     objfmt='ELF'
9195                     ;;
9196                 esac
9197               ;;
9198               kfreebsd* | freebsd* | netbsd* | openbsd*)
9199                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9200                   objfmt='BSD-a.out'
9201                 else
9202                   case "$host_cpu" in
9203                     x86_64 | amd64)
9204                       objfmt='ELF64'
9205                       ;;
9206                     *)
9207                       objfmt='ELF'
9208                       ;;
9209                   esac
9210                 fi
9211               ;;
9212               solaris* | sunos* | sysv* | sco*)
9213                 case "$host_cpu" in
9214                   x86_64)
9215                     objfmt='ELF64'
9216                     ;;
9217                   *)
9218                     objfmt='ELF'
9219                     ;;
9220                 esac
9221               ;;
9222               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9223                 case "$host_cpu" in
9224                   x86_64)
9225                     objfmt='Mach-O64'
9226                     ;;
9227                   *)
9228                     objfmt='Mach-O'
9229                     ;;
9230                 esac
9231               ;;
9232               *)
9233                 objfmt='ELF ?'
9234               ;;
9235             esac
9237             AC_MSG_RESULT([$objfmt])
9238             if test "$objfmt" = 'ELF ?'; then
9239               objfmt='ELF'
9240               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9241             fi
9243             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9244             case "$objfmt" in
9245               MSOMF)      NAFLAGS='-fobj -DOBJ32 -DPIC';;
9246               Win32-COFF) NAFLAGS='-fwin32 -DWIN32 -DPIC';;
9247               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__ -DPIC';;
9248               COFF)       NAFLAGS='-fcoff -DCOFF -DPIC';;
9249               a.out)      NAFLAGS='-faout -DAOUT -DPIC';;
9250               BSD-a.out)  NAFLAGS='-faoutb -DAOUT -DPIC';;
9251               ELF)        NAFLAGS='-felf -DELF -DPIC';;
9252               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__ -DPIC';;
9253               RDF)        NAFLAGS='-frdf -DRDF -DPIC';;
9254               Mach-O)     NAFLAGS='-fmacho -DMACHO -DPIC';;
9255               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__ -DPIC';;
9256             esac
9257             AC_MSG_RESULT([$NAFLAGS])
9259             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9260             cat > conftest.asm << EOF
9261             [%line __oline__ "configure"
9262                     section .text
9263                     global  _main,main
9264             _main:
9265             main:   xor     eax,eax
9266                     ret
9267             ]
9269             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9270             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9271               AC_MSG_RESULT(yes)
9272             else
9273               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9274               cat conftest.asm >&AS_MESSAGE_LOG_FD
9275               rm -rf conftest*
9276               AC_MSG_RESULT(no)
9277               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9278               NASM=""
9279             fi
9281         fi
9283         if test -z "$NASM"; then
9284 cat << _EOS
9285 ****************************************************************************
9286 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9287 To get one please:
9289 _EOS
9290             if test "$build_os" = "cygwin"; then
9291 cat << _EOS
9292 install a pre-compiled binary for Win32
9294 mkdir -p /opt/lo/bin
9295 cd /opt/lo/bin
9296 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9297 chmod +x nasm
9299 or get and install one from http://www.nasm.us/
9301 Then re-run autogen.sh
9303 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9304 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`which nasm\` finds it.
9306 _EOS
9307             else
9308 cat << _EOS
9309 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md
9311 _EOS
9312             fi
9313             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9314             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9315         fi
9316       ;;
9317     esac
9320 AC_SUBST(NASM)
9321 AC_SUBST(NAFLAGS)
9322 AC_SUBST(LIBJPEG_CFLAGS)
9323 AC_SUBST(LIBJPEG_LIBS)
9324 AC_SUBST(SYSTEM_LIBJPEG)
9326 dnl ===================================================================
9327 dnl Check for system clucene
9328 dnl ===================================================================
9329 dnl we should rather be using
9330 dnl libo_CHECK_SYSTEM_MODULE([clucence],[CLUCENE],[liblucence-core]) here
9331 dnl but the contribs-lib check seems tricky
9332 if test "$enable_xmlhelp" = yes -o "$enable_extension_integration" = yes; then
9333 AC_MSG_CHECKING([which clucene to use])
9334 if test "$with_system_clucene" = "yes"; then
9335     AC_MSG_RESULT([external])
9336     SYSTEM_CLUCENE=TRUE
9337     PKG_CHECK_MODULES(CLUCENE, libclucene-core)
9338     CLUCENE_CFLAGS=[$(printf '%s' "$CLUCENE_CFLAGS" | sed -e 's@-I[^ ]*/CLucene/ext@@' -e "s/-I/${ISYSTEM?}/g")]
9339     FilterLibs "${CLUCENE_LIBS}"
9340     CLUCENE_LIBS="${filteredlibs}"
9341     AC_LANG_PUSH([C++])
9342     save_CXXFLAGS=$CXXFLAGS
9343     save_CPPFLAGS=$CPPFLAGS
9344     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9345     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9346     dnl http://sourceforge.net/tracker/index.php?func=detail&aid=3392466&group_id=80013&atid=558446
9347     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9348     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9349                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9350     CXXFLAGS=$save_CXXFLAGS
9351     CPPFLAGS=$save_CPPFLAGS
9352     AC_LANG_POP([C++])
9354     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9355 else
9356     AC_MSG_RESULT([internal])
9357     SYSTEM_CLUCENE=
9358     BUILD_TYPE="$BUILD_TYPE CLUCENE"
9361 AC_SUBST(SYSTEM_CLUCENE)
9362 AC_SUBST(CLUCENE_CFLAGS)
9363 AC_SUBST(CLUCENE_LIBS)
9365 dnl ===================================================================
9366 dnl Check for system expat
9367 dnl ===================================================================
9368 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9370 dnl ===================================================================
9371 dnl Check for system xmlsec
9372 dnl ===================================================================
9373 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.28])
9375 AC_MSG_CHECKING([whether to enable Embedded OpenType support])
9376 if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_eot" = "yes"; then
9377     ENABLE_EOT="TRUE"
9378     AC_DEFINE([ENABLE_EOT])
9379     AC_MSG_RESULT([yes])
9381     libo_CHECK_SYSTEM_MODULE([libeot],[LIBEOT],[libeot >= 0.01])
9382 else
9383     ENABLE_EOT=
9384     AC_MSG_RESULT([no])
9386 AC_SUBST([ENABLE_EOT])
9388 dnl ===================================================================
9389 dnl Check for DLP libs
9390 dnl ===================================================================
9391 AS_IF([test "$COM" = "MSC"],
9392       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9393       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9395 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1],["-I${WORKDIR}/UnpackedTarball/librevenge/inc"],["-L${librevenge_libdir} -lrevenge-0.0"])
9397 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9399 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9401 AS_IF([test "$COM" = "MSC"],
9402       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9403       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9405 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10],["-I${WORKDIR}/UnpackedTarball/libwpd/inc"],["-L${libwpd_libdir} -lwpd-0.10"])
9407 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9409 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9410 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.12])
9412 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9414 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9416 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9418 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.1])
9419 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.21])
9421 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9422 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10])
9424 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9426 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9427 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9429 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9431 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9433 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9435 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9437 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9438 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9440 dnl ===================================================================
9441 dnl Check for system lcms2
9442 dnl ===================================================================
9443 if test "$with_system_lcms2" != "yes"; then
9444     SYSTEM_LCMS2=
9446 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2],["-I${WORKDIR}/UnpackedTarball/lcms2/include"],["-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"])
9447 if test "$GCC" = "yes"; then
9448     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9450 if test "$COM" = "MSC"; then # override the above
9451     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9454 dnl ===================================================================
9455 dnl Check for system cppunit
9456 dnl ===================================================================
9457 if test "$_os" != "Android" ; then
9458     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9461 dnl ===================================================================
9462 dnl Check whether freetype is available
9463 dnl ===================================================================
9464 if test "$using_freetype_fontconfig" = yes; then
9465     AC_MSG_CHECKING([which freetype to use])
9467 if test "$using_freetype_fontconfig" = yes -a "$test_system_freetype" != no; then
9468     AC_MSG_RESULT([external])
9469     # FreeType has 3 different kinds of versions
9470     # * release, like 2.4.10
9471     # * libtool, like 13.0.7 (this what pkg-config returns)
9472     # * soname
9473     # FreeType's docs/VERSION.DLL provides a table mapping between the three
9474     #
9475     # 9.9.3 is 2.2.0
9476     # When the minimal version is at least 2.8.1, remove Skia's check down below.
9477     PKG_CHECK_MODULES(FREETYPE, freetype2 >= 9.9.3)
9478     FREETYPE_CFLAGS=$(printf '%s' "$FREETYPE_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9479     FilterLibs "${FREETYPE_LIBS}"
9480     FREETYPE_LIBS="${filteredlibs}"
9481     SYSTEM_FREETYPE=TRUE
9482 elif test "$using_freetype_fontconfig" = yes; then
9483     AC_MSG_RESULT([internal])
9484     FREETYPE_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"
9485     if test "x$ac_config_site_64bit_host" = xYES; then
9486         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9487     else
9488         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9489     fi
9490     BUILD_TYPE="$BUILD_TYPE FREETYPE"
9492 AC_SUBST(FREETYPE_CFLAGS)
9493 AC_SUBST(FREETYPE_LIBS)
9494 AC_SUBST([SYSTEM_FREETYPE])
9496 # ===================================================================
9497 # Check for system libxslt
9498 # to prevent incompatibilities between internal libxml2 and external libxslt,
9499 # or vice versa, use with_system_libxml here
9500 # ===================================================================
9501 if test "$with_system_libxml" = "auto"; then
9502     case "$_os" in
9503     WINNT|iOS|Android)
9504         with_system_libxml="$with_system_libs"
9505         ;;
9506     Emscripten)
9507         with_system_libxml=no
9508         ;;
9509     *)
9510         if test "$enable_fuzzers" != "yes"; then
9511             with_system_libxml=yes
9512         else
9513             with_system_libxml=no
9514         fi
9515         ;;
9516     esac
9519 AC_MSG_CHECKING([which libxslt to use])
9520 if test "$with_system_libxml" = "yes"; then
9521     AC_MSG_RESULT([external])
9522     SYSTEM_LIBXSLT=TRUE
9523     if test "$_os" = "Darwin"; then
9524         dnl make sure to use SDK path
9525         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9526         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9527         dnl omit -L/usr/lib
9528         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9529         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9530     else
9531         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9532         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9533         FilterLibs "${LIBXSLT_LIBS}"
9534         LIBXSLT_LIBS="${filteredlibs}"
9535         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9536         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9537         FilterLibs "${LIBEXSLT_LIBS}"
9538         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9539     fi
9541     dnl Check for xsltproc
9542     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9543     if test "$XSLTPROC" = "no"; then
9544         AC_MSG_ERROR([xsltproc is required])
9545     fi
9546 else
9547     AC_MSG_RESULT([internal])
9548     SYSTEM_LIBXSLT=
9549     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9551 AC_SUBST(SYSTEM_LIBXSLT)
9552 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9553     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9555 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9557 AC_SUBST(LIBEXSLT_CFLAGS)
9558 AC_SUBST(LIBEXSLT_LIBS)
9559 AC_SUBST(LIBXSLT_CFLAGS)
9560 AC_SUBST(LIBXSLT_LIBS)
9561 AC_SUBST(XSLTPROC)
9563 # ===================================================================
9564 # Check for system libxml
9565 # ===================================================================
9566 AC_MSG_CHECKING([which libxml to use])
9567 if test "$with_system_libxml" = "yes"; then
9568     AC_MSG_RESULT([external])
9569     SYSTEM_LIBXML=TRUE
9570     if test "$_os" = "Darwin"; then
9571         dnl make sure to use SDK path
9572         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9573         dnl omit -L/usr/lib
9574         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9575     elif test $_os = iOS; then
9576         dnl make sure to use SDK path
9577         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9578         LIBXML_CFLAGS="-I$usr/include/libxml2"
9579         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9580     else
9581         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9582         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9583         FilterLibs "${LIBXML_LIBS}"
9584         LIBXML_LIBS="${filteredlibs}"
9585     fi
9587     dnl Check for xmllint
9588     AC_PATH_PROG(XMLLINT, xmllint, no)
9589     if test "$XMLLINT" = "no"; then
9590         AC_MSG_ERROR([xmllint is required])
9591     fi
9592 else
9593     AC_MSG_RESULT([internal])
9594     SYSTEM_LIBXML=
9595     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9596     if test "$COM" = "MSC"; then
9597         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9598     fi
9599     if test "$COM" = "MSC"; then
9600         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9601     else
9602         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9603         if test "$_os" = Android; then
9604             LIBXML_LIBS="$LIBXML_LIBS -lm"
9605         fi
9606     fi
9607     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9609 AC_SUBST(SYSTEM_LIBXML)
9610 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9611     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9613 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9614 AC_SUBST(LIBXML_CFLAGS)
9615 AC_SUBST(LIBXML_LIBS)
9616 AC_SUBST(XMLLINT)
9618 # =====================================================================
9619 # Checking for a Python interpreter with version >= 3.3.
9620 # Optionally user can pass an option to configure, i. e.
9621 # ./configure PYTHON=/usr/bin/python
9622 # =====================================================================
9623 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9624     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9625     # unless PYTHON is defined as above which allows 'system'
9626     enable_python=internal
9628 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9629     if test -n "$PYTHON"; then
9630         PYTHON_FOR_BUILD=$PYTHON
9631     else
9632         # This allows a lack of system python with no error, we use internal one in that case.
9633         AM_PATH_PYTHON([3.3],, [:])
9634         # Clean PYTHON_VERSION checked below if cross-compiling
9635         PYTHON_VERSION=""
9636         if test "$PYTHON" != ":"; then
9637             PYTHON_FOR_BUILD=$PYTHON
9638         fi
9639     fi
9641 AC_SUBST(PYTHON_FOR_BUILD)
9643 # Checks for Python to use for Pyuno
9644 AC_MSG_CHECKING([which Python to use for Pyuno])
9645 case "$enable_python" in
9646 no|disable)
9647     if test -z $PYTHON_FOR_BUILD; then
9648         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9649         # requirement from the choice whether to include Python stuff in the installer, but why
9650         # bother?
9651         if test "$cross_compiling" = yes; then
9652             enable_python=system
9653         else
9654             AC_MSG_ERROR([Python is required at build time.])
9655         fi
9656     fi
9657     enable_python=no
9658     AC_MSG_RESULT([none])
9659     ;;
9660 ""|yes|auto)
9661     if test "$DISABLE_SCRIPTING" = TRUE -a -n "$PYTHON_FOR_BUILD"; then
9662         AC_MSG_RESULT([no, overridden by --disable-scripting])
9663         enable_python=no
9664     elif test $build_os = cygwin; then
9665         dnl When building on Windows we don't attempt to use any installed
9666         dnl "system"  Python.
9667         AC_MSG_RESULT([fully internal])
9668         enable_python=internal
9669     elif test "$cross_compiling" = yes; then
9670         AC_MSG_RESULT([system])
9671         enable_python=system
9672     else
9673         # Unset variables set by the above AM_PATH_PYTHON so that
9674         # we actually do check anew.
9675         AC_MSG_RESULT([])
9676         unset PYTHON am_cv_pathless_PYTHON ac_cv_path_PYTHON am_cv_python_version am_cv_python_platform am_cv_python_pythondir am_cv_python_pyexecdir
9677         AM_PATH_PYTHON([3.3],, [:])
9678         AC_MSG_CHECKING([which Python to use for Pyuno])
9679         if test "$PYTHON" = ":"; then
9680             if test -z "$PYTHON_FOR_BUILD"; then
9681                 AC_MSG_RESULT([fully internal])
9682             else
9683                 AC_MSG_RESULT([internal])
9684             fi
9685             enable_python=internal
9686         else
9687             AC_MSG_RESULT([system])
9688             enable_python=system
9689         fi
9690     fi
9691     ;;
9692 internal)
9693     AC_MSG_RESULT([internal])
9694     ;;
9695 fully-internal)
9696     AC_MSG_RESULT([fully internal])
9697     enable_python=internal
9698     ;;
9699 system)
9700     AC_MSG_RESULT([system])
9701     if test "$_os" = Darwin -a -z "$PYTHON"; then
9702         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
9703     fi
9704     ;;
9706     AC_MSG_ERROR([Incorrect --enable-python option])
9707     ;;
9708 esac
9710 if test $enable_python != no; then
9711     BUILD_TYPE="$BUILD_TYPE PYUNO"
9714 if test $enable_python = system; then
9715     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
9716         # Fallback: Accept these in the environment, or as set above
9717         # for MacOSX.
9718         :
9719     elif test "$cross_compiling" != yes; then
9720         # Unset variables set by the above AM_PATH_PYTHON so that
9721         # we actually do check anew.
9722         unset PYTHON am_cv_pathless_PYTHON ac_cv_path_PYTHON am_cv_python_version am_cv_python_platform am_cv_python_pythondir am_cv_python_pyexecdir
9723         # This causes an error if no python command is found
9724         AM_PATH_PYTHON([3.3])
9725         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
9726         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
9727         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
9728         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
9729         if test -z "$PKG_CONFIG"; then
9730             PYTHON_CFLAGS="-I$python_include"
9731             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9732         elif $PKG_CONFIG --exists python-$python_version-embed; then
9733             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
9734             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
9735         elif $PKG_CONFIG --exists python-$python_version; then
9736             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
9737             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
9738         else
9739             PYTHON_CFLAGS="-I$python_include"
9740             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9741         fi
9742         FilterLibs "${PYTHON_LIBS}"
9743         PYTHON_LIBS="${filteredlibs}"
9744     else
9745         dnl How to find out the cross-compilation Python installation path?
9746         AC_MSG_CHECKING([for python version])
9747         AS_IF([test -n "$PYTHON_VERSION"],
9748               [AC_MSG_RESULT([$PYTHON_VERSION])],
9749               [AC_MSG_RESULT([not found])
9750                AC_MSG_ERROR([no usable python found])])
9751         test -n "$PYTHON_CFLAGS" && break
9752     fi
9754     dnl Check if the headers really work
9755     save_CPPFLAGS="$CPPFLAGS"
9756     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
9757     AC_CHECK_HEADER(Python.h)
9758     CPPFLAGS="$save_CPPFLAGS"
9760     # let the PYTHON_FOR_BUILD match the same python installation that
9761     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
9762     # better for PythonTests.
9763     PYTHON_FOR_BUILD=$PYTHON
9766 if test "$with_lxml" != no; then
9767     if test -z "$PYTHON_FOR_BUILD"; then
9768         case $build_os in
9769             cygwin)
9770                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
9771                 ;;
9772             *)
9773                 if test "$cross_compiling" != yes ; then
9774                     BUILD_TYPE="$BUILD_TYPE LXML"
9775                 fi
9776                 ;;
9777         esac
9778     else
9779         AC_MSG_CHECKING([for python lxml])
9780         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
9781             AC_MSG_RESULT([yes])
9782         else
9783             case $build_os in
9784                 cygwin)
9785                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
9786                     ;;
9787                 *)
9788                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
9789                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
9790                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
9791                         else
9792                             BUILD_TYPE="$BUILD_TYPE LXML"
9793                             AC_MSG_RESULT([no, using internal lxml])
9794                         fi
9795                     else
9796                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
9797                     fi
9798                     ;;
9799             esac
9800         fi
9801     fi
9804 dnl By now enable_python should be "system", "internal" or "no"
9805 case $enable_python in
9806 system)
9807     SYSTEM_PYTHON=TRUE
9809     if test "x$ac_cv_header_Python_h" != "xyes"; then
9810        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
9811     fi
9813     AC_LANG_PUSH(C)
9814     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
9815     AC_MSG_CHECKING([for correct python library version])
9816        AC_RUN_IFELSE([AC_LANG_SOURCE([[
9817 #include <Python.h>
9819 int main(int argc, char **argv) {
9820    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
9821    else return 1;
9823        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
9824     AC_LANG_POP(C)
9826     dnl FIXME Check if the Python library can be linked with, too?
9827     ;;
9829 internal)
9830     SYSTEM_PYTHON=
9831     PYTHON_VERSION_MAJOR=3
9832     PYTHON_VERSION_MINOR=8
9833     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.10
9834     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
9835         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
9836     fi
9837     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
9838     BUILD_TYPE="$BUILD_TYPE PYTHON"
9839     if test "$OS" = LINUX -o "$OS" = WNT ; then
9840         BUILD_TYPE="$BUILD_TYPE LIBFFI"
9841     fi
9842     # Embedded Python dies without Home set
9843     if test "$HOME" = ""; then
9844         export HOME=""
9845     fi
9846     ;;
9848     DISABLE_PYTHON=TRUE
9849     SYSTEM_PYTHON=
9850     ;;
9852     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
9853     ;;
9854 esac
9856 AC_SUBST(DISABLE_PYTHON)
9857 AC_SUBST(SYSTEM_PYTHON)
9858 AC_SUBST(PYTHON_CFLAGS)
9859 AC_SUBST(PYTHON_LIBS)
9860 AC_SUBST(PYTHON_VERSION)
9861 AC_SUBST(PYTHON_VERSION_MAJOR)
9862 AC_SUBST(PYTHON_VERSION_MINOR)
9864 AC_MSG_CHECKING([whether to build LibreLogo])
9865 case "$enable_python" in
9866 no|disable)
9867     AC_MSG_RESULT([no; Python disabled])
9868     ;;
9870     if test "${enable_librelogo}" = "no"; then
9871         AC_MSG_RESULT([no])
9872     else
9873         AC_MSG_RESULT([yes])
9874         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
9875         AC_DEFINE([ENABLE_LIBRELOGO],1)
9876     fi
9877     ;;
9878 esac
9879 AC_SUBST(ENABLE_LIBRELOGO)
9881 ENABLE_MARIADBC=
9882 MARIADBC_MAJOR=1
9883 MARIADBC_MINOR=0
9884 MARIADBC_MICRO=2
9885 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
9886 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
9887     ENABLE_MARIADBC=TRUE
9888     AC_MSG_RESULT([yes])
9889     BUILD_TYPE="$BUILD_TYPE MARIADBC"
9890 else
9891     AC_MSG_RESULT([no])
9893 AC_SUBST(ENABLE_MARIADBC)
9894 AC_SUBST(MARIADBC_MAJOR)
9895 AC_SUBST(MARIADBC_MINOR)
9896 AC_SUBST(MARIADBC_MICRO)
9898 if test "$ENABLE_MARIADBC" = "TRUE"; then
9899     dnl ===================================================================
9900     dnl Check for system MariaDB
9901     dnl ===================================================================
9902     AC_MSG_CHECKING([which MariaDB to use])
9903     if test "$with_system_mariadb" = "yes"; then
9904         AC_MSG_RESULT([external])
9905         SYSTEM_MARIADB_CONNECTOR_C=TRUE
9906         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
9907         if test -z "$MARIADBCONFIG"; then
9908             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
9909             if test -z "$MARIADBCONFIG"; then
9910                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
9911                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
9912             fi
9913         fi
9914         AC_MSG_CHECKING([MariaDB version])
9915         MARIADB_VERSION=`$MARIADBCONFIG --version`
9916         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
9917         if test "$MARIADB_MAJOR" -ge "5"; then
9918             AC_MSG_RESULT([OK])
9919         else
9920             AC_MSG_ERROR([too old, use 5.0.x or later])
9921         fi
9922         AC_MSG_CHECKING([for MariaDB Client library])
9923         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
9924         if test "$COM_IS_CLANG" = TRUE; then
9925             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
9926         fi
9927         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
9928         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
9929         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
9930         dnl linux32:
9931         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
9932             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
9933             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
9934                 | sed -e 's|/lib64/|/lib/|')
9935         fi
9936         FilterLibs "${MARIADB_LIBS}"
9937         MARIADB_LIBS="${filteredlibs}"
9938         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
9939         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
9940         if test "$enable_bundle_mariadb" = "yes"; then
9941             AC_MSG_RESULT([yes])
9942             BUNDLE_MARIADB_CONNECTOR_C=TRUE
9943             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
9945 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
9947 /g' | grep -E '(mysqlclient|mariadb)')
9948             if test "$_os" = "Darwin"; then
9949                 LIBMARIADB=${LIBMARIADB}.dylib
9950             elif test "$_os" = "WINNT"; then
9951                 LIBMARIADB=${LIBMARIADB}.dll
9952             else
9953                 LIBMARIADB=${LIBMARIADB}.so
9954             fi
9955             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
9956             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
9957             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
9958                 AC_MSG_RESULT([found.])
9959                 PathFormat "$LIBMARIADB_PATH"
9960                 LIBMARIADB_PATH="$formatted_path"
9961             else
9962                 AC_MSG_ERROR([not found.])
9963             fi
9964         else
9965             AC_MSG_RESULT([no])
9966             BUNDLE_MARIADB_CONNECTOR_C=
9967         fi
9968     else
9969         AC_MSG_RESULT([internal])
9970         SYSTEM_MARIADB_CONNECTOR_C=
9971         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
9972         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
9973         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
9974     fi
9976     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
9977     AC_SUBST(MARIADB_CFLAGS)
9978     AC_SUBST(MARIADB_LIBS)
9979     AC_SUBST(LIBMARIADB)
9980     AC_SUBST(LIBMARIADB_PATH)
9981     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
9984 dnl ===================================================================
9985 dnl Check for system hsqldb
9986 dnl ===================================================================
9987 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
9988     HSQLDB_USE_JDBC_4_1=
9989     AC_MSG_CHECKING([which hsqldb to use])
9990     if test "$with_system_hsqldb" = "yes"; then
9991         AC_MSG_RESULT([external])
9992         SYSTEM_HSQLDB=TRUE
9993         if test -z $HSQLDB_JAR; then
9994             HSQLDB_JAR=/usr/share/java/hsqldb.jar
9995         fi
9996         if ! test -f $HSQLDB_JAR; then
9997                AC_MSG_ERROR(hsqldb.jar not found.)
9998         fi
9999         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
10000         export HSQLDB_JAR
10001         if $PERL -e \
10002            'use Archive::Zip;
10003             my $file = "$ENV{'HSQLDB_JAR'}";
10004             my $zip = Archive::Zip->new( $file );
10005             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
10006             if ( $mf =~ m/Specification-Version: 1.8.*/ )
10007             {
10008                 push @l, split(/\n/, $mf);
10009                 foreach my $line (@l)
10010                 {
10011                     if ($line =~ m/Specification-Version:/)
10012                     {
10013                         ($t, $version) = split (/:/,$line);
10014                         $version =~ s/^\s//;
10015                         ($a, $b, $c, $d) = split (/\./,$version);
10016                         if ($c == "0" && $d > "8")
10017                         {
10018                             exit 0;
10019                         }
10020                         else
10021                         {
10022                             exit 1;
10023                         }
10024                     }
10025                 }
10026             }
10027             else
10028             {
10029                 exit 1;
10030             }'; then
10031             AC_MSG_RESULT([yes])
10032         else
10033             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
10034         fi
10035     else
10036         AC_MSG_RESULT([internal])
10037         SYSTEM_HSQLDB=
10038         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10039         NEED_ANT=TRUE
10040         AC_MSG_CHECKING([whether hsqldb should be built with JDBC 4.1])
10041         javanumver=`$JAVAINTERPRETER -version 2>&1 | $AWK -v num=true -f $SRC_ROOT/solenv/bin/getcompver.awk`
10042         if expr "$javanumver" '>=' 000100060000 > /dev/null; then
10043             AC_MSG_RESULT([yes])
10044             HSQLDB_USE_JDBC_4_1=TRUE
10045         else
10046             AC_MSG_RESULT([no])
10047         fi
10048     fi
10049 else
10050     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
10051         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10052     fi
10054 AC_SUBST(SYSTEM_HSQLDB)
10055 AC_SUBST(HSQLDB_JAR)
10056 AC_SUBST([HSQLDB_USE_JDBC_4_1])
10058 dnl ===================================================================
10059 dnl Check for PostgreSQL stuff
10060 dnl ===================================================================
10061 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
10062 if test "x$enable_postgresql_sdbc" != "xno"; then
10063     AC_MSG_RESULT([yes])
10064     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
10066     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
10067         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
10068     fi
10069     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
10070         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
10071     fi
10073     postgres_interface=""
10074     if test "$with_system_postgresql" = "yes"; then
10075         postgres_interface="external PostgreSQL"
10076         SYSTEM_POSTGRESQL=TRUE
10077         if test "$_os" = Darwin; then
10078             supp_path=''
10079             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
10080                 pg_supp_path="$P_SEP$d$pg_supp_path"
10081             done
10082         fi
10083         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
10084         if test -n "$PGCONFIG"; then
10085             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
10086             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
10087         else
10088             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
10089               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
10090               POSTGRESQL_LIB=$POSTGRESQL_LIBS
10091             ],[
10092               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
10093             ])
10094         fi
10095         FilterLibs "${POSTGRESQL_LIB}"
10096         POSTGRESQL_LIB="${filteredlibs}"
10097     else
10098         # if/when anything else than PostgreSQL uses Kerberos,
10099         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
10100         WITH_KRB5=
10101         WITH_GSSAPI=
10102         case "$_os" in
10103         Darwin)
10104             # macOS has system MIT Kerberos 5 since 10.4
10105             if test "$with_krb5" != "no"; then
10106                 WITH_KRB5=TRUE
10107                 save_LIBS=$LIBS
10108                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
10109                 # that the libraries where these functions are located on macOS will change, is it?
10110                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10111                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10112                 KRB5_LIBS=$LIBS
10113                 LIBS=$save_LIBS
10114                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10115                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10116                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10117                 LIBS=$save_LIBS
10118             fi
10119             if test "$with_gssapi" != "no"; then
10120                 WITH_GSSAPI=TRUE
10121                 save_LIBS=$LIBS
10122                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10123                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10124                 GSSAPI_LIBS=$LIBS
10125                 LIBS=$save_LIBS
10126             fi
10127             ;;
10128         WINNT)
10129             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
10130                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
10131             fi
10132             ;;
10133         Linux|GNU|*BSD|DragonFly)
10134             if test "$with_krb5" != "no"; then
10135                 WITH_KRB5=TRUE
10136                 save_LIBS=$LIBS
10137                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10138                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10139                 KRB5_LIBS=$LIBS
10140                 LIBS=$save_LIBS
10141                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10142                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10143                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10144                 LIBS=$save_LIBS
10145             fi
10146             if test "$with_gssapi" != "no"; then
10147                 WITH_GSSAPI=TRUE
10148                 save_LIBS=$LIBS
10149                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10150                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10151                 GSSAPI_LIBS=$LIBS
10152                 LIBS=$save_LIBS
10153             fi
10154             ;;
10155         *)
10156             if test "$with_krb5" = "yes"; then
10157                 WITH_KRB5=TRUE
10158                 save_LIBS=$LIBS
10159                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10160                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10161                 KRB5_LIBS=$LIBS
10162                 LIBS=$save_LIBS
10163                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10164                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10165                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10166                 LIBS=$save_LIBS
10167             fi
10168             if test "$with_gssapi" = "yes"; then
10169                 WITH_GSSAPI=TRUE
10170                 save_LIBS=$LIBS
10171                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10172                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10173                 LIBS=$save_LIBS
10174                 GSSAPI_LIBS=$LIBS
10175             fi
10176         esac
10178         if test -n "$with_libpq_path"; then
10179             SYSTEM_POSTGRESQL=TRUE
10180             postgres_interface="external libpq"
10181             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
10182             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
10183         else
10184             SYSTEM_POSTGRESQL=
10185             postgres_interface="internal"
10186             POSTGRESQL_LIB=""
10187             POSTGRESQL_INC="%OVERRIDE_ME%"
10188             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10189         fi
10190     fi
10192     AC_MSG_CHECKING([PostgreSQL C interface])
10193     AC_MSG_RESULT([$postgres_interface])
10195     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10196         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10197         save_CFLAGS=$CFLAGS
10198         save_CPPFLAGS=$CPPFLAGS
10199         save_LIBS=$LIBS
10200         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10201         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10202         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10203         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10204             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10205         CFLAGS=$save_CFLAGS
10206         CPPFLAGS=$save_CPPFLAGS
10207         LIBS=$save_LIBS
10208     fi
10209     BUILD_POSTGRESQL_SDBC=TRUE
10210 else
10211     AC_MSG_RESULT([no])
10213 AC_SUBST(WITH_KRB5)
10214 AC_SUBST(WITH_GSSAPI)
10215 AC_SUBST(GSSAPI_LIBS)
10216 AC_SUBST(KRB5_LIBS)
10217 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10218 AC_SUBST(SYSTEM_POSTGRESQL)
10219 AC_SUBST(POSTGRESQL_INC)
10220 AC_SUBST(POSTGRESQL_LIB)
10222 dnl ===================================================================
10223 dnl Check for Firebird stuff
10224 dnl ===================================================================
10225 ENABLE_FIREBIRD_SDBC=
10226 if test "$enable_firebird_sdbc" = "yes" ; then
10227     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10229     dnl ===================================================================
10230     dnl Check for system Firebird
10231     dnl ===================================================================
10232     AC_MSG_CHECKING([which Firebird to use])
10233     if test "$with_system_firebird" = "yes"; then
10234         AC_MSG_RESULT([external])
10235         SYSTEM_FIREBIRD=TRUE
10236         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10237         if test -z "$FIREBIRDCONFIG"; then
10238             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10239             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10240                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10241             ])
10242             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10243         else
10244             AC_MSG_NOTICE([fb_config found])
10245             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10246             AC_MSG_CHECKING([for Firebird Client library])
10247             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10248             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10249             FilterLibs "${FIREBIRD_LIBS}"
10250             FIREBIRD_LIBS="${filteredlibs}"
10251         fi
10252         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10253         AC_MSG_CHECKING([Firebird version])
10254         if test -n "${FIREBIRD_VERSION}"; then
10255             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10256             if test "$FIREBIRD_MAJOR" -ge "3"; then
10257                 AC_MSG_RESULT([OK])
10258             else
10259                 AC_MSG_ERROR([Ensure firebird >= 3 is installed])
10260             fi
10261         else
10262             save_CFLAGS="${CFLAGS}"
10263             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10264             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10265 #if defined(FB_API_VER) && FB_API_VER == 30
10266 int fb_api_is_30(void) { return 0; }
10267 #else
10268 #error "Wrong Firebird API version"
10269 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10270             CFLAGS="$save_CFLAGS"
10271         fi
10272         ENABLE_FIREBIRD_SDBC=TRUE
10273         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10274     elif test "$enable_database_connectivity" = no; then
10275         AC_MSG_RESULT([none])
10276     elif test "$cross_compiling" = "yes"; then
10277         AC_MSG_RESULT([none])
10278     else
10279         dnl Embedded Firebird has version 3.0
10280         dnl We need libatomic_ops for any non X86/X64 system
10281         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10282             dnl ===================================================================
10283             dnl Check for system libatomic_ops
10284             dnl ===================================================================
10285             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10286             if test "$with_system_libatomic_ops" = "yes"; then
10287                 SYSTEM_LIBATOMIC_OPS=TRUE
10288                 AC_CHECK_HEADERS(atomic_ops.h, [],
10289                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10290             else
10291                 SYSTEM_LIBATOMIC_OPS=
10292                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10293                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10294                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10295             fi
10296         fi
10298         AC_MSG_RESULT([internal])
10299         SYSTEM_FIREBIRD=
10300         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10301         FIREBIRD_LIBS="-lfbclient"
10303         if test "$with_system_libtommath" = "yes"; then
10304             SYSTEM_LIBTOMMATH=TRUE
10305             dnl check for tommath presence
10306             save_LIBS=$LIBS
10307             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10308             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10309             LIBS=$save_LIBS
10310         else
10311             SYSTEM_LIBTOMMATH=
10312             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10313             LIBTOMMATH_LIBS="-ltommath"
10314             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10315         fi
10317         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10318         ENABLE_FIREBIRD_SDBC=TRUE
10319         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10320     fi
10322 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10323 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10324 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10325 AC_SUBST(LIBATOMIC_OPS_LIBS)
10326 AC_SUBST(SYSTEM_FIREBIRD)
10327 AC_SUBST(FIREBIRD_CFLAGS)
10328 AC_SUBST(FIREBIRD_LIBS)
10329 AC_SUBST(SYSTEM_LIBTOMMATH)
10330 AC_SUBST(LIBTOMMATH_CFLAGS)
10331 AC_SUBST(LIBTOMMATH_LIBS)
10333 dnl ===================================================================
10334 dnl Check for system curl
10335 dnl ===================================================================
10336 AC_MSG_CHECKING([which libcurl to use])
10337 if test "$with_system_curl" = "auto"; then
10338     with_system_curl="$with_system_libs"
10341 if test "$enable_curl" = "yes" -a "$with_system_curl" = "yes"; then
10342     AC_MSG_RESULT([external])
10343     SYSTEM_CURL=TRUE
10345     PKG_CHECK_MODULES(CURL, libcurl >= 7.68.0)
10347     ENABLE_CURL=TRUE
10348 elif test "$enable_curl" = "no"; then
10349     AC_MSG_RESULT([none])
10350 else
10351     AC_MSG_RESULT([internal])
10352     SYSTEM_CURL=
10353     BUILD_TYPE="$BUILD_TYPE CURL"
10354     ENABLE_CURL=TRUE
10356 AC_SUBST(SYSTEM_CURL)
10357 AC_SUBST(CURL_CFLAGS)
10358 AC_SUBST(CURL_LIBS)
10359 AC_SUBST(ENABLE_CURL)
10361 dnl ===================================================================
10362 dnl Check for system boost
10363 dnl ===================================================================
10364 AC_MSG_CHECKING([which boost to use])
10365 if test "$with_system_boost" = "yes"; then
10366     AC_MSG_RESULT([external])
10367     SYSTEM_BOOST=TRUE
10368     AX_BOOST_BASE([1.66],,[AC_MSG_ERROR([no suitable Boost found])])
10369     AX_BOOST_DATE_TIME
10370     AX_BOOST_FILESYSTEM
10371     AX_BOOST_IOSTREAMS
10372     AX_BOOST_LOCALE
10373     AC_LANG_PUSH([C++])
10374     save_CXXFLAGS=$CXXFLAGS
10375     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10376     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10377        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10378     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10379        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10380     CXXFLAGS=$save_CXXFLAGS
10381     AC_LANG_POP([C++])
10382     # this is in m4/ax_boost_base.m4
10383     FilterLibs "${BOOST_LDFLAGS}"
10384     BOOST_LDFLAGS="${filteredlibs}"
10385 else
10386     AC_MSG_RESULT([internal])
10387     BUILD_TYPE="$BUILD_TYPE BOOST"
10388     SYSTEM_BOOST=
10389     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10390         # use warning-suppressing wrapper headers
10391         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10392     else
10393         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10394     fi
10396 AC_SUBST(SYSTEM_BOOST)
10398 dnl ===================================================================
10399 dnl Check for system mdds
10400 dnl ===================================================================
10401 libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-2.0 >= 2.0.0], ["-I${WORKDIR}/UnpackedTarball/mdds/include"])
10403 dnl ===================================================================
10404 dnl Check for system cuckoo
10405 dnl ===================================================================
10406 AC_MSG_CHECKING([which cuckoo to use])
10407 if test "$with_system_cuckoo" = "yes"; then
10408     AC_MSG_RESULT([external])
10409     SYSTEM_CUCKOO=TRUE
10410     AC_LANG_PUSH([C++])
10411     AC_CHECK_HEADER([libcuckoo/cuckoohash_map.hh], [],
10412        [AC_MSG_ERROR([libcuckoo/cuckoohash_map.hh not found. install cuckoo])], [])
10413     AC_LANG_POP([C++])
10414 else
10415     AC_MSG_RESULT([internal])
10416     BUILD_TYPE="$BUILD_TYPE CUCKOO"
10417     SYSTEM_CUCKOO=
10418     CUCKOO_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/cuckoo"
10420 AC_SUBST([CUCKOO_CFLAGS])
10421 AC_SUBST([SYSTEM_CUCKOO])
10423 dnl ===================================================================
10424 dnl Check for system glm
10425 dnl ===================================================================
10426 AC_MSG_CHECKING([which glm to use])
10427 if test "$with_system_glm" = "yes"; then
10428     AC_MSG_RESULT([external])
10429     SYSTEM_GLM=TRUE
10430     AC_LANG_PUSH([C++])
10431     AC_CHECK_HEADER([glm/glm.hpp], [],
10432        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10433     AC_LANG_POP([C++])
10434 else
10435     AC_MSG_RESULT([internal])
10436     BUILD_TYPE="$BUILD_TYPE GLM"
10437     SYSTEM_GLM=
10438     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10440 AC_SUBST([GLM_CFLAGS])
10441 AC_SUBST([SYSTEM_GLM])
10443 dnl ===================================================================
10444 dnl Check for system odbc
10445 dnl ===================================================================
10446 AC_MSG_CHECKING([which odbc headers to use])
10447 if test "$with_system_odbc" = "yes" -o '(' "$with_system_headers" = "yes" -a "$with_system_odbc" = "auto" ')' -o '(' "$_os" = "WINNT" -a  "$with_system_odbc" != "no" ')'; then
10448     AC_MSG_RESULT([external])
10449     SYSTEM_ODBC_HEADERS=TRUE
10451     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10452         save_CPPFLAGS=$CPPFLAGS
10453         find_winsdk
10454         PathFormat "$winsdktest"
10455         CPPFLAGS="$CPPFLAGS -I$formatted_path/include/um -I$formatted_path/Include/$winsdklibsubdir/um -I$formatted_path/include -I$formatted_path/include/shared -I$formatted_path/include/$winsdklibsubdir/shared"
10456         AC_CHECK_HEADER(sqlext.h, [],
10457             [AC_MSG_ERROR(odbc not found. install odbc)],
10458             [#include <windows.h>])
10459         CPPFLAGS=$save_CPPFLAGS
10460     else
10461         AC_CHECK_HEADER(sqlext.h, [],
10462             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10463     fi
10464 elif test "$enable_database_connectivity" = no; then
10465     AC_MSG_RESULT([none])
10466 else
10467     AC_MSG_RESULT([internal])
10468     SYSTEM_ODBC_HEADERS=
10470 AC_SUBST(SYSTEM_ODBC_HEADERS)
10472 dnl ===================================================================
10473 dnl Check for system NSS
10474 dnl ===================================================================
10475 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10476     libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8])
10477     AC_DEFINE(HAVE_FEATURE_NSS)
10478     ENABLE_NSS=TRUE
10479 elif test $_os != iOS ; then
10480     with_tls=openssl
10482 AC_SUBST(ENABLE_NSS)
10484 dnl ===================================================================
10485 dnl Enable LDAP support
10486 dnl ===================================================================
10488 if test "$test_openldap" = yes; then
10489     AC_MSG_CHECKING([whether to enable LDAP support])
10490     if test "$enable_ldap" = yes -a \( "$ENABLE_NSS" = TRUE -o "$with_system_openldap" = yes \); then
10491         AC_MSG_RESULT([yes])
10492         ENABLE_LDAP=TRUE
10493     else
10494         if test "$enable_ldap" != "yes"; then
10495             AC_MSG_RESULT([no])
10496         else
10497             AC_MSG_RESULT([no (needs NSS or system openldap)])
10498         fi
10499     fi
10501 dnl ===================================================================
10502 dnl Check for system openldap
10503 dnl ===================================================================
10505     if test "$ENABLE_LDAP" = TRUE; then
10506         AC_MSG_CHECKING([which openldap library to use])
10507         if test "$with_system_openldap" = yes; then
10508             AC_MSG_RESULT([external])
10509             SYSTEM_OPENLDAP=TRUE
10510             AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10511             AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10512             AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10513         else
10514             AC_MSG_RESULT([internal])
10515             BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10516         fi
10517     fi
10520 AC_SUBST(ENABLE_LDAP)
10521 AC_SUBST(SYSTEM_OPENLDAP)
10523 dnl ===================================================================
10524 dnl Check for TLS/SSL and cryptographic implementation to use
10525 dnl ===================================================================
10526 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10527 if test -n "$with_tls"; then
10528     case $with_tls in
10529     openssl)
10530         AC_DEFINE(USE_TLS_OPENSSL)
10531         TLS=OPENSSL
10532         AC_MSG_RESULT([$TLS])
10534         if test "$enable_openssl" != "yes"; then
10535             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10536         fi
10538         # warn that OpenSSL has been selected but not all TLS code has this option
10539         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS])
10540         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS"
10541         ;;
10542     nss)
10543         AC_DEFINE(USE_TLS_NSS)
10544         TLS=NSS
10545         AC_MSG_RESULT([$TLS])
10546         ;;
10547     no)
10548         AC_MSG_RESULT([none])
10549         AC_MSG_WARN([Skipping TLS/SSL])
10550         ;;
10551     *)
10552         AC_MSG_RESULT([])
10553         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10554 openssl - OpenSSL
10555 nss - Mozilla's Network Security Services (NSS)
10556     ])
10557         ;;
10558     esac
10559 else
10560     # default to using NSS, it results in smaller oox lib
10561     AC_DEFINE(USE_TLS_NSS)
10562     TLS=NSS
10563     AC_MSG_RESULT([$TLS])
10565 AC_SUBST(TLS)
10567 dnl ===================================================================
10568 dnl Check for system sane
10569 dnl ===================================================================
10570 AC_MSG_CHECKING([which sane header to use])
10571 if test "$with_system_sane" = "yes"; then
10572     AC_MSG_RESULT([external])
10573     AC_CHECK_HEADER(sane/sane.h, [],
10574       [AC_MSG_ERROR(sane not found. install sane)], [])
10575 else
10576     AC_MSG_RESULT([internal])
10577     BUILD_TYPE="$BUILD_TYPE SANE"
10580 dnl ===================================================================
10581 dnl Check for system icu
10582 dnl ===================================================================
10583 SYSTEM_GENBRK=
10584 SYSTEM_GENCCODE=
10585 SYSTEM_GENCMN=
10587 ICU_MAJOR=70
10588 ICU_MINOR=1
10589 ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10590 ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10591 ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10592 AC_MSG_CHECKING([which icu to use])
10593 if test "$with_system_icu" = "yes"; then
10594     AC_MSG_RESULT([external])
10595     SYSTEM_ICU=TRUE
10596     AC_LANG_PUSH([C++])
10597     AC_MSG_CHECKING([for unicode/rbbi.h])
10598     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10599     AC_LANG_POP([C++])
10601     if test "$cross_compiling" != "yes"; then
10602         PKG_CHECK_MODULES(ICU, icu-i18n >= 4.6)
10603         ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10604         ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10605         ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10606     fi
10608     if test "$cross_compiling" = "yes" -a \( "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" \); then
10609         ICU_VERSION_FOR_BUILD=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10610         ICU_MAJOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f1`
10611         ICU_MINOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f2`
10612         AC_MSG_CHECKING([if MinGW and system versions of ICU are compatible])
10613         if test "$ICU_MAJOR" -eq "$ICU_MAJOR_FOR_BUILD" -a "$ICU_MINOR" -eq "$ICU_MINOR_FOR_BUILD"; then
10614             AC_MSG_RESULT([yes])
10615         else
10616             AC_MSG_RESULT([no])
10617             if test "$with_system_icu_for_build" != "force"; then
10618                 AC_MSG_ERROR([System ICU is not version-compatible with MinGW ICU.
10619 You can use --with-system-icu-for-build=force to use it anyway.])
10620             fi
10621         fi
10622     fi
10624     if test "$cross_compiling" != "yes" -o "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force"; then
10625         # using the system icu tools can lead to version confusion, use the
10626         # ones from the build environment when cross-compiling
10627         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10628         if test -z "$SYSTEM_GENBRK"; then
10629             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10630         fi
10631         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10632         if test -z "$SYSTEM_GENCCODE"; then
10633             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10634         fi
10635         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10636         if test -z "$SYSTEM_GENCMN"; then
10637             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10638         fi
10639         if test "$ICU_MAJOR" -ge "49"; then
10640             ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10641             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10642             ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10643         else
10644             ICU_RECLASSIFIED_PREPEND_SET_EMPTY=
10645             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER=
10646             ICU_RECLASSIFIED_HEBREW_LETTER=
10647         fi
10648     fi
10650     if test "$cross_compiling" = "yes"; then
10651         if test "$ICU_MAJOR" -ge "50"; then
10652             AC_MSG_RESULT([Ignore ICU_MINOR as obviously the libraries don't include the minor version in their names any more])
10653             ICU_MINOR=""
10654         fi
10655     fi
10656 else
10657     AC_MSG_RESULT([internal])
10658     SYSTEM_ICU=
10659     BUILD_TYPE="$BUILD_TYPE ICU"
10660     # surprisingly set these only for "internal" (to be used by various other
10661     # external libs): the system icu-config is quite unhelpful and spits out
10662     # dozens of weird flags and also default path -I/usr/include
10663     ICU_CFLAGS="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10664     ICU_LIBS="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10666 if test "$ICU_MAJOR" -ge "59"; then
10667     # As of ICU 59 it defaults to typedef char16_t UChar; which is available
10668     # with -std=c++11 but not all external libraries can be built with that,
10669     # for those use a bit-compatible typedef uint16_t UChar; see
10670     # icu/source/common/unicode/umachine.h
10671     ICU_UCHAR_TYPE="-DUCHAR_TYPE=uint16_t"
10672 else
10673     ICU_UCHAR_TYPE=""
10675 AC_SUBST(SYSTEM_ICU)
10676 AC_SUBST(SYSTEM_GENBRK)
10677 AC_SUBST(SYSTEM_GENCCODE)
10678 AC_SUBST(SYSTEM_GENCMN)
10679 AC_SUBST(ICU_MAJOR)
10680 AC_SUBST(ICU_MINOR)
10681 AC_SUBST(ICU_RECLASSIFIED_PREPEND_SET_EMPTY)
10682 AC_SUBST(ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER)
10683 AC_SUBST(ICU_RECLASSIFIED_HEBREW_LETTER)
10684 AC_SUBST(ICU_CFLAGS)
10685 AC_SUBST(ICU_LIBS)
10686 AC_SUBST(ICU_UCHAR_TYPE)
10688 dnl ==================================================================
10689 dnl Breakpad
10690 dnl ==================================================================
10691 DEFAULT_CRASHDUMP_VALUE="true"
10692 AC_MSG_CHECKING([whether to enable breakpad])
10693 if test "$enable_breakpad" != yes; then
10694     AC_MSG_RESULT([no])
10695 else
10696     AC_MSG_RESULT([yes])
10697     ENABLE_BREAKPAD="TRUE"
10698     AC_DEFINE(ENABLE_BREAKPAD)
10699     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
10700     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
10702     AC_MSG_CHECKING([for disable crash dump])
10703     if test "$enable_crashdump" = no; then
10704         DEFAULT_CRASHDUMP_VALUE="false"
10705         AC_MSG_RESULT([yes])
10706     else
10707        AC_MSG_RESULT([no])
10708     fi
10710     AC_MSG_CHECKING([for crashreport config])
10711     if test "$with_symbol_config" = "no"; then
10712         BREAKPAD_SYMBOL_CONFIG="invalid"
10713         AC_MSG_RESULT([no])
10714     else
10715         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
10716         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
10717         AC_MSG_RESULT([yes])
10718     fi
10719     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
10721 AC_SUBST(ENABLE_BREAKPAD)
10722 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
10724 dnl ==================================================================
10725 dnl libfuzzer
10726 dnl ==================================================================
10727 AC_MSG_CHECKING([whether to enable fuzzers])
10728 if test "$enable_fuzzers" != yes; then
10729     AC_MSG_RESULT([no])
10730 else
10731     if test -z $LIB_FUZZING_ENGINE; then
10732       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
10733     fi
10734     AC_MSG_RESULT([yes])
10735     ENABLE_FUZZERS="TRUE"
10736     AC_DEFINE([ENABLE_FUZZERS],1)
10737     BUILD_TYPE="$BUILD_TYPE FUZZERS"
10739 AC_SUBST(LIB_FUZZING_ENGINE)
10740 AC_SUBST(ENABLE_FUZZERS)
10742 dnl ===================================================================
10743 dnl Orcus
10744 dnl ===================================================================
10745 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.17 >= 0.17.2])
10746 if test "$with_system_orcus" != "yes"; then
10747     if test "$SYSTEM_BOOST" = "TRUE"; then
10748         dnl Link with Boost.System
10749         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
10750         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
10751         dnl in documentation has no effect.
10752         AX_BOOST_SYSTEM
10753     fi
10755 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
10756 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
10757 AC_SUBST([BOOST_SYSTEM_LIB])
10758 AC_SUBST(SYSTEM_LIBORCUS)
10760 dnl ===================================================================
10761 dnl HarfBuzz
10762 dnl ===================================================================
10763 libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3],
10764                          ["-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"],
10765                          ["-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"])
10767 libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 0.9.42],
10768                          ["-I${WORKDIR}/UnpackedTarball/harfbuzz/src"],
10769                          ["-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"])
10771 if test "$COM" = "MSC"; then # override the above
10772     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
10773     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
10776 if test "$with_system_harfbuzz" = "yes"; then
10777     if test "$with_system_graphite" = "no"; then
10778         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
10779     fi
10780     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
10781     save_LIBS="$LIBS"
10782     save_CFLAGS="$CFLAGS"
10783     LIBS="$LIBS $HARFBUZZ_LIBS"
10784     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
10785     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
10786     LIBS="$save_LIBS"
10787     CFLAGS="$save_CFLAGS"
10788 else
10789     if test "$with_system_graphite" = "yes"; then
10790         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
10791     fi
10794 if test "$USING_X11" = TRUE; then
10795     AC_PATH_X
10796     AC_PATH_XTRA
10797     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
10799     if test -z "$x_includes"; then
10800         x_includes="default_x_includes"
10801     fi
10802     if test -z "$x_libraries"; then
10803         x_libraries="default_x_libraries"
10804     fi
10805     CFLAGS="$CFLAGS $X_CFLAGS"
10806     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
10807     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
10808 else
10809     x_includes="no_x_includes"
10810     x_libraries="no_x_libraries"
10813 if test "$USING_X11" = TRUE; then
10814     dnl ===================================================================
10815     dnl Check for extension headers
10816     dnl ===================================================================
10817     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
10818      [#include <X11/extensions/shape.h>])
10820     # vcl needs ICE and SM
10821     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
10822     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
10823         [AC_MSG_ERROR(ICE library not found)])
10824     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
10825     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
10826         [AC_MSG_ERROR(SM library not found)])
10829 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
10830     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
10831     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
10834 dnl ===================================================================
10835 dnl Check for system Xrender
10836 dnl ===================================================================
10837 AC_MSG_CHECKING([whether to use Xrender])
10838 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
10839     AC_MSG_RESULT([yes])
10840     PKG_CHECK_MODULES(XRENDER, xrender)
10841     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10842     FilterLibs "${XRENDER_LIBS}"
10843     XRENDER_LIBS="${filteredlibs}"
10844     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
10845       [AC_MSG_ERROR(libXrender not found or functional)], [])
10846     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
10847       [AC_MSG_ERROR(Xrender not found. install X)], [])
10848 else
10849     AC_MSG_RESULT([no])
10851 AC_SUBST(XRENDER_CFLAGS)
10852 AC_SUBST(XRENDER_LIBS)
10854 dnl ===================================================================
10855 dnl Check for XRandr
10856 dnl ===================================================================
10857 AC_MSG_CHECKING([whether to enable RandR support])
10858 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
10859     AC_MSG_RESULT([yes])
10860     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
10861     if test "$ENABLE_RANDR" != "TRUE"; then
10862         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
10863                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
10864         XRANDR_CFLAGS=" "
10865         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
10866           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
10867         XRANDR_LIBS="-lXrandr "
10868         ENABLE_RANDR="TRUE"
10869     fi
10870     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10871     FilterLibs "${XRANDR_LIBS}"
10872     XRANDR_LIBS="${filteredlibs}"
10873 else
10874     ENABLE_RANDR=""
10875     AC_MSG_RESULT([no])
10877 AC_SUBST(XRANDR_CFLAGS)
10878 AC_SUBST(XRANDR_LIBS)
10879 AC_SUBST(ENABLE_RANDR)
10881 if test "$test_webdav" = yes; then
10882     if test -z "$with_webdav"; then
10883         WITH_WEBDAV=curl
10884     else
10885         WITH_WEBDAV="$with_webdav"
10886     fi
10889 AC_MSG_CHECKING([for webdav library])
10890 case "$WITH_WEBDAV" in
10891 curl)
10892     AC_MSG_RESULT([curl])
10893     # curl is already mandatory (almost) and checked elsewhere
10894     if test "$enable_curl" = "no"; then
10895         AC_MSG_ERROR(["--with-webdav=curl conflicts with --disable-curl"])
10896     fi
10897     ;;
10898 serf)
10899     AC_MSG_RESULT([serf])
10900     # Check for system apr-util
10901     libo_CHECK_SYSTEM_MODULE([apr],[APR],[apr-util-1],
10902                              ["-I${WORKDIR}/UnpackedTarball/apr/include -I${WORKDIR}/UnpackedTarball/apr_util/include"],
10903                              ["-L${WORKDIR}/UnpackedTarball/apr/.libs -lapr-1 -L${WORKDIR}/UnpackedTarball/apr_util/.libs -laprutil-1"])
10904     if test "$COM" = "MSC"; then
10905         APR_LIB_DIR="LibR"
10906         test -n "${MSVC_USE_DEBUG_RUNTIME}" && APR_LIB_DIR="LibD"
10907         APR_LIBS="${WORKDIR}/UnpackedTarball/apr/${APR_LIB_DIR}/apr-1.lib ${WORKDIR}/UnpackedTarball/apr_util/${APR_LIB_DIR}/aprutil-1.lib"
10908     fi
10910     # Check for system serf
10911     libo_CHECK_SYSTEM_MODULE([serf],[SERF],[serf-1 >= 1.3.9])
10912     ;;
10913 neon)
10914     AC_MSG_RESULT([neon])
10915     # Check for system neon
10916     libo_CHECK_SYSTEM_MODULE([neon],[NEON],[neon >= 0.31.2])
10917     if test "$with_system_neon" = "yes"; then
10918         NEON_VERSION="`$PKG_CONFIG --modversion neon | $SED 's/\.//g'`"
10919     else
10920         NEON_VERSION=0312
10921     fi
10922     AC_SUBST(NEON_VERSION)
10923     ;;
10925     AC_MSG_RESULT([none, disabled])
10926     WITH_WEBDAV=""
10927     ;;
10928 esac
10929 AC_SUBST(WITH_WEBDAV)
10931 dnl ===================================================================
10932 dnl Check for disabling cve_tests
10933 dnl ===================================================================
10934 AC_MSG_CHECKING([whether to execute CVE tests])
10935 # If not explicitly enabled or disabled, default
10936 if test -z "$enable_cve_tests"; then
10937     case "$OS" in
10938     WNT)
10939         # Default cves off for Windows with its wild and wonderful
10940         # variety of AV software kicking in and panicking
10941         enable_cve_tests=no
10942         ;;
10943     *)
10944         # otherwise yes
10945         enable_cve_tests=yes
10946         ;;
10947     esac
10949 if test "$enable_cve_tests" = "no"; then
10950     AC_MSG_RESULT([no])
10951     DISABLE_CVE_TESTS=TRUE
10952     AC_SUBST(DISABLE_CVE_TESTS)
10953 else
10954     AC_MSG_RESULT([yes])
10957 dnl ===================================================================
10958 dnl Check for enabling chart XShape tests
10959 dnl ===================================================================
10960 AC_MSG_CHECKING([whether to execute chart XShape tests])
10961 if test "$enable_chart_tests" = "yes" -o '(' "$_os" = "WINNT" -a "$enable_chart_tests" != "no" ')'; then
10962     AC_MSG_RESULT([yes])
10963     ENABLE_CHART_TESTS=TRUE
10964     AC_SUBST(ENABLE_CHART_TESTS)
10965 else
10966     AC_MSG_RESULT([no])
10969 dnl ===================================================================
10970 dnl Check for system openssl
10971 dnl ===================================================================
10972 ENABLE_OPENSSL=
10973 AC_MSG_CHECKING([whether to disable OpenSSL usage])
10974 if test "$enable_openssl" = "yes"; then
10975     AC_MSG_RESULT([no])
10976     ENABLE_OPENSSL=TRUE
10977     if test "$_os" = Darwin ; then
10978         # OpenSSL is deprecated when building for 10.7 or later.
10979         #
10980         # http://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
10981         # http://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
10983         with_system_openssl=no
10984         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10985     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
10986             && test "$with_system_openssl" != "no"; then
10987         with_system_openssl=yes
10988         SYSTEM_OPENSSL=TRUE
10989         OPENSSL_CFLAGS=
10990         OPENSSL_LIBS="-lssl -lcrypto"
10991     else
10992         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10993     fi
10994     if test "$with_system_openssl" = "yes"; then
10995         AC_MSG_CHECKING([whether openssl supports SHA512])
10996         AC_LANG_PUSH([C])
10997         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
10998             SHA512_CTX context;
10999 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
11000         AC_LANG_POP(C)
11001     fi
11002 else
11003     AC_MSG_RESULT([yes])
11005     # warn that although OpenSSL is disabled, system libraries may depend on it
11006     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
11007     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
11010 AC_SUBST([ENABLE_OPENSSL])
11012 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
11013     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
11014         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
11015         enable_cipher_openssl_backend=no
11016     else
11017         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
11018     fi
11020 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
11021 ENABLE_CIPHER_OPENSSL_BACKEND=
11022 if test "$enable_cipher_openssl_backend" = yes; then
11023     AC_MSG_RESULT([yes])
11024     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
11025 else
11026     AC_MSG_RESULT([no])
11028 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
11030 dnl ===================================================================
11031 dnl Select the crypto backends used by LO
11032 dnl ===================================================================
11034 if test "$build_crypto" = yes; then
11035     if test "$OS" = WNT; then
11036         BUILD_TYPE="$BUILD_TYPE CRYPTO_MSCAPI"
11037         AC_DEFINE([USE_CRYPTO_MSCAPI])
11038     elif test "$ENABLE_NSS" = TRUE; then
11039         BUILD_TYPE="$BUILD_TYPE CRYPTO_NSS"
11040         AC_DEFINE([USE_CRYPTO_NSS])
11041     fi
11044 dnl ===================================================================
11045 dnl Check for building gnutls
11046 dnl ===================================================================
11047 AC_MSG_CHECKING([whether to use gnutls])
11048 if test "$WITH_WEBDAV" = "neon" -a "$with_system_neon" = no -a "$enable_openssl" = "no"; then
11049     AC_MSG_RESULT([yes])
11050     AM_PATH_LIBGCRYPT()
11051     PKG_CHECK_MODULES(GNUTLS, [gnutls],,
11052         AC_MSG_ERROR([[Disabling OpenSSL was requested, but GNUTLS is not
11053                       available in the system to use as replacement.]]))
11054     FilterLibs "${LIBGCRYPT_LIBS}"
11055     LIBGCRYPT_LIBS="${filteredlibs}"
11056 else
11057     AC_MSG_RESULT([no])
11060 AC_SUBST([LIBGCRYPT_CFLAGS])
11061 AC_SUBST([LIBGCRYPT_LIBS])
11063 dnl ===================================================================
11064 dnl Check for system redland
11065 dnl ===================================================================
11066 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
11067 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
11068 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
11069 if test "$with_system_redland" = "yes"; then
11070     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
11071             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
11072 else
11073     RAPTOR_MAJOR="0"
11074     RASQAL_MAJOR="3"
11075     REDLAND_MAJOR="0"
11077 AC_SUBST(RAPTOR_MAJOR)
11078 AC_SUBST(RASQAL_MAJOR)
11079 AC_SUBST(REDLAND_MAJOR)
11081 dnl ===================================================================
11082 dnl Check for system hunspell
11083 dnl ===================================================================
11084 AC_MSG_CHECKING([which libhunspell to use])
11085 if test "$with_system_hunspell" = "yes"; then
11086     AC_MSG_RESULT([external])
11087     SYSTEM_HUNSPELL=TRUE
11088     AC_LANG_PUSH([C++])
11089     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
11090     if test "$HUNSPELL_PC" != "TRUE"; then
11091         AC_CHECK_HEADER(hunspell.hxx, [],
11092             [
11093             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
11094             [AC_MSG_ERROR(hunspell headers not found.)], [])
11095             ], [])
11096         AC_CHECK_LIB([hunspell], [main], [:],
11097            [ AC_MSG_ERROR(hunspell library not found.) ], [])
11098         HUNSPELL_LIBS=-lhunspell
11099     fi
11100     AC_LANG_POP([C++])
11101     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11102     FilterLibs "${HUNSPELL_LIBS}"
11103     HUNSPELL_LIBS="${filteredlibs}"
11104 else
11105     AC_MSG_RESULT([internal])
11106     SYSTEM_HUNSPELL=
11107     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
11108     if test "$COM" = "MSC"; then
11109         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
11110     else
11111         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
11112     fi
11113     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
11115 AC_SUBST(SYSTEM_HUNSPELL)
11116 AC_SUBST(HUNSPELL_CFLAGS)
11117 AC_SUBST(HUNSPELL_LIBS)
11119 dnl ===================================================================
11120 dnl Check for system zxing
11121 dnl ===================================================================
11122 AC_MSG_CHECKING([whether to use zxing])
11123 if test "$enable_zxing" = "no"; then
11124     AC_MSG_RESULT([no])
11125     ENABLE_ZXING=
11126     SYSTEM_ZXING=
11127 else
11128     AC_MSG_RESULT([yes])
11129     ENABLE_ZXING=TRUE
11130     AC_MSG_CHECKING([which libzxing to use])
11131     if test "$with_system_zxing" = "yes"; then
11132         AC_MSG_RESULT([external])
11133         SYSTEM_ZXING=TRUE
11134         AC_LANG_PUSH([C++])
11135         AC_CHECK_HEADER(ZXing/MultiFormatWriter.h, [],
11136             [AC_MSG_ERROR(zxing headers not found.)], [#include <stdexcept>])
11137         ZXING_CFLAGS=-I/usr/include/ZXing
11138         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
11139             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
11140             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
11141         AC_LANG_POP([C++])
11142         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11143         FilterLibs "${ZXING_LIBS}"
11144         ZXING_LIBS="${filteredlibs}"
11145     else
11146         AC_MSG_RESULT([internal])
11147         SYSTEM_ZXING=
11148         BUILD_TYPE="$BUILD_TYPE ZXING"
11149     fi
11150     if test "$ENABLE_ZXING" = TRUE; then
11151         AC_DEFINE(ENABLE_ZXING)
11152     fi
11154 AC_SUBST(SYSTEM_ZXING)
11155 AC_SUBST(ENABLE_ZXING)
11156 AC_SUBST(ZXING_CFLAGS)
11157 AC_SUBST(ZXING_LIBS)
11159 dnl ===================================================================
11160 dnl Check for system box2d
11161 dnl ===================================================================
11162 AC_MSG_CHECKING([which box2d to use])
11163 if test "$with_system_box2d" = "yes"; then
11164     AC_MSG_RESULT([external])
11165     SYSTEM_BOX2D=TRUE
11166     AC_LANG_PUSH([C++])
11167     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
11168         [BOX2D_H_FOUND='FALSE'])
11169     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
11170         _BOX2D_LIB=box2d
11171         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
11172     else
11173         # fail this. there's no other alternative to check when we are here.
11174         AC_CHECK_HEADER([Box2D/Box2D.h], [],
11175             [AC_MSG_ERROR(box2d headers not found.)])
11176         _BOX2D_LIB=Box2D
11177         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11178     fi
11179     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11180         [ AC_MSG_ERROR(box2d library not found.) ], [])
11181     BOX2D_LIBS=-l$_BOX2D_LIB
11182     AC_LANG_POP([C++])
11183     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11184     FilterLibs "${BOX2D_LIBS}"
11185     BOX2D_LIBS="${filteredlibs}"
11186 else
11187     AC_MSG_RESULT([internal])
11188     SYSTEM_BOX2D=
11189     BUILD_TYPE="$BUILD_TYPE BOX2D"
11191 AC_SUBST(SYSTEM_BOX2D)
11192 AC_SUBST(BOX2D_CFLAGS)
11193 AC_SUBST(BOX2D_LIBS)
11195 dnl ===================================================================
11196 dnl Checking for altlinuxhyph
11197 dnl ===================================================================
11198 AC_MSG_CHECKING([which altlinuxhyph to use])
11199 if test "$with_system_altlinuxhyph" = "yes"; then
11200     AC_MSG_RESULT([external])
11201     SYSTEM_HYPH=TRUE
11202     AC_CHECK_HEADER(hyphen.h, [],
11203        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11204     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11205        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11206        [#include <hyphen.h>])
11207     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11208         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11209     if test -z "$HYPHEN_LIB"; then
11210         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11211            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11212     fi
11213     if test -z "$HYPHEN_LIB"; then
11214         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11215            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11216     fi
11217 else
11218     AC_MSG_RESULT([internal])
11219     SYSTEM_HYPH=
11220     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11221     if test "$COM" = "MSC"; then
11222         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11223     else
11224         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11225     fi
11227 AC_SUBST(SYSTEM_HYPH)
11228 AC_SUBST(HYPHEN_LIB)
11230 dnl ===================================================================
11231 dnl Checking for mythes
11232 dnl ===================================================================
11233 AC_MSG_CHECKING([which mythes to use])
11234 if test "$with_system_mythes" = "yes"; then
11235     AC_MSG_RESULT([external])
11236     SYSTEM_MYTHES=TRUE
11237     AC_LANG_PUSH([C++])
11238     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11239     if test "$MYTHES_PKGCONFIG" = "no"; then
11240         AC_CHECK_HEADER(mythes.hxx, [],
11241             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11242         AC_CHECK_LIB([mythes-1.2], [main], [:],
11243             [ MYTHES_FOUND=no], [])
11244     if test "$MYTHES_FOUND" = "no"; then
11245         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11246                 [ MYTHES_FOUND=no], [])
11247     fi
11248     if test "$MYTHES_FOUND" = "no"; then
11249         AC_MSG_ERROR([mythes library not found!.])
11250     fi
11251     fi
11252     AC_LANG_POP([C++])
11253     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11254     FilterLibs "${MYTHES_LIBS}"
11255     MYTHES_LIBS="${filteredlibs}"
11256 else
11257     AC_MSG_RESULT([internal])
11258     SYSTEM_MYTHES=
11259     BUILD_TYPE="$BUILD_TYPE MYTHES"
11260     if test "$COM" = "MSC"; then
11261         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11262     else
11263         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11264     fi
11266 AC_SUBST(SYSTEM_MYTHES)
11267 AC_SUBST(MYTHES_CFLAGS)
11268 AC_SUBST(MYTHES_LIBS)
11270 dnl ===================================================================
11271 dnl How should we build the linear programming solver ?
11272 dnl ===================================================================
11274 ENABLE_COINMP=
11275 AC_MSG_CHECKING([whether to build with CoinMP])
11276 if test "$enable_coinmp" != "no"; then
11277     ENABLE_COINMP=TRUE
11278     AC_MSG_RESULT([yes])
11279     if test "$with_system_coinmp" = "yes"; then
11280         SYSTEM_COINMP=TRUE
11281         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11282         FilterLibs "${COINMP_LIBS}"
11283         COINMP_LIBS="${filteredlibs}"
11284     else
11285         BUILD_TYPE="$BUILD_TYPE COINMP"
11286     fi
11287 else
11288     AC_MSG_RESULT([no])
11290 AC_SUBST(ENABLE_COINMP)
11291 AC_SUBST(SYSTEM_COINMP)
11292 AC_SUBST(COINMP_CFLAGS)
11293 AC_SUBST(COINMP_LIBS)
11295 ENABLE_LPSOLVE=
11296 AC_MSG_CHECKING([whether to build with lpsolve])
11297 if test "$enable_lpsolve" != "no"; then
11298     ENABLE_LPSOLVE=TRUE
11299     AC_MSG_RESULT([yes])
11300 else
11301     AC_MSG_RESULT([no])
11303 AC_SUBST(ENABLE_LPSOLVE)
11305 if test "$ENABLE_LPSOLVE" = TRUE; then
11306     AC_MSG_CHECKING([which lpsolve to use])
11307     if test "$with_system_lpsolve" = "yes"; then
11308         AC_MSG_RESULT([external])
11309         SYSTEM_LPSOLVE=TRUE
11310         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11311            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11312         save_LIBS=$LIBS
11313         # some systems need this. Like Ubuntu...
11314         AC_CHECK_LIB(m, floor)
11315         AC_CHECK_LIB(dl, dlopen)
11316         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11317             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11318         LIBS=$save_LIBS
11319     else
11320         AC_MSG_RESULT([internal])
11321         SYSTEM_LPSOLVE=
11322         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11323     fi
11325 AC_SUBST(SYSTEM_LPSOLVE)
11327 dnl ===================================================================
11328 dnl Checking for libexttextcat
11329 dnl ===================================================================
11330 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11331 if test "$with_system_libexttextcat" = "yes"; then
11332     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11334 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11336 dnl ===================================================================
11337 dnl Checking for libnumbertext
11338 dnl ===================================================================
11339 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11340 if test "$with_system_libnumbertext" = "yes"; then
11341     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11342     SYSTEM_LIBNUMBERTEXT=YES
11343 else
11344     SYSTEM_LIBNUMBERTEXT=
11345     AC_LANG_PUSH([C++])
11346     save_CPPFLAGS=$CPPFLAGS
11347     CPPFLAGS="$CPPFLAGS $CXXFLAGS_CXX11"
11348     AC_CHECK_HEADERS([codecvt regex])
11349     AS_IF([test "x$ac_cv_header_codecvt" != xyes -o "x$ac_cv_header_regex" != xyes],
11350             [ LIBNUMBERTEXT_CFLAGS=''
11351               AC_MSG_WARN([No system-provided libnumbertext or codecvt/regex C++11 headers (min. libstdc++ 4.9).
11352                            Enable libnumbertext fallback (missing number to number name conversion).])
11353             ])
11354     CPPFLAGS=$save_CPPFLAGS
11355     AC_LANG_POP([C++])
11357 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11358 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11359 AC_SUBST(LIBNUMBERTEXT_CFLAGS)
11361 dnl ***************************************
11362 dnl testing libc version for Linux...
11363 dnl ***************************************
11364 if test "$_os" = "Linux"; then
11365     AC_MSG_CHECKING([whether the libc is recent enough])
11366     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
11367     #include <features.h>
11368     #if defined(__GNU_LIBRARY__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1))
11369     #error glibc >= 2.1 is required
11370     #endif
11371     ]])],, [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([no, upgrade libc])])
11374 dnl =========================================
11375 dnl Check for uuidgen
11376 dnl =========================================
11377 if test "$_os" = "WINNT"; then
11378     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11379     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11380     UUIDGEN=uuidgen.exe
11381     AC_SUBST(UUIDGEN)
11382 else
11383     AC_PATH_PROG([UUIDGEN], [uuidgen])
11384     if test -z "$UUIDGEN"; then
11385         AC_MSG_WARN([uuid is needed for building installation sets])
11386     fi
11389 dnl ***************************************
11390 dnl Checking for bison and flex
11391 dnl ***************************************
11392 AC_PATH_PROG(BISON, bison)
11393 if test -z "$BISON"; then
11394     AC_MSG_ERROR([no bison found in \$PATH, install it])
11395 else
11396     AC_MSG_CHECKING([the bison version])
11397     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11398     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11399     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11400     dnl cause
11401     dnl
11402     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]
11403     dnl   typedef union YYSTYPE
11404     dnl           ~~~~~~^~~~~~~
11405     dnl
11406     dnl while at least 3.4.1 is know to be good:
11407     if test "$COMPILER_PLUGINS" = TRUE; then
11408         if test "$_bison_longver" -lt 2004; then
11409             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11410         fi
11411     else
11412         if test "$_bison_longver" -lt 2000; then
11413             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11414         fi
11415     fi
11417 AC_SUBST([BISON])
11419 AC_PATH_PROG(FLEX, flex)
11420 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11421     FLEX=`cygpath -m $FLEX`
11423 if test -z "$FLEX"; then
11424     AC_MSG_ERROR([no flex found in \$PATH, install it])
11425 else
11426     AC_MSG_CHECKING([the flex version])
11427     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11428     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11429         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11430     fi
11432 AC_SUBST([FLEX])
11433 dnl ***************************************
11434 dnl Checking for patch
11435 dnl ***************************************
11436 AC_PATH_PROG(PATCH, patch)
11437 if test -z "$PATCH"; then
11438     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11441 dnl On Solaris or macOS, check if --with-gnu-patch was used
11442 if test "$_os" = "SunOS" -o "$_os" = "Darwin"; then
11443     if test -z "$with_gnu_patch"; then
11444         GNUPATCH=$PATCH
11445     else
11446         if test -x "$with_gnu_patch"; then
11447             GNUPATCH=$with_gnu_patch
11448         else
11449             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11450         fi
11451     fi
11453     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11454     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11455         AC_MSG_RESULT([yes])
11456     else
11457         AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11458     fi
11459 else
11460     GNUPATCH=$PATCH
11463 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11464     GNUPATCH=`cygpath -m $GNUPATCH`
11467 dnl We also need to check for --with-gnu-cp
11469 if test -z "$with_gnu_cp"; then
11470     # check the place where the good stuff is hidden on Solaris...
11471     if test -x /usr/gnu/bin/cp; then
11472         GNUCP=/usr/gnu/bin/cp
11473     else
11474         AC_PATH_PROGS(GNUCP, gnucp cp)
11475     fi
11476     if test -z $GNUCP; then
11477         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11478     fi
11479 else
11480     if test -x "$with_gnu_cp"; then
11481         GNUCP=$with_gnu_cp
11482     else
11483         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11484     fi
11487 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11488     GNUCP=`cygpath -m $GNUCP`
11491 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11492 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11493     AC_MSG_RESULT([yes])
11494 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11495     AC_MSG_RESULT([yes])
11496 else
11497     case "$build_os" in
11498     darwin*|macos*|netbsd*|openbsd*|freebsd*|dragonfly*|aix*)
11499         x_GNUCP=[\#]
11500         GNUCP=''
11501         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11502         ;;
11503     *)
11504         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11505         ;;
11506     esac
11509 AC_SUBST(GNUPATCH)
11510 AC_SUBST(GNUCP)
11511 AC_SUBST(x_GNUCP)
11513 dnl ***************************************
11514 dnl testing assembler path
11515 dnl ***************************************
11516 ML_EXE=""
11517 if test "$_os" = "WINNT"; then
11518     case "$WIN_HOST_ARCH" in
11519     x86) assembler=ml.exe ;;
11520     x64) assembler=ml64.exe ;;
11521     arm64) assembler=armasm64.exe ;;
11522     esac
11524     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11525     if test -f "$MSVC_HOST_PATH/$assembler"; then
11526         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11527         AC_MSG_RESULT([$ML_EXE])
11528     else
11529         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11530     fi
11533 AC_SUBST(ML_EXE)
11535 dnl ===================================================================
11536 dnl We need zip and unzip
11537 dnl ===================================================================
11538 AC_PATH_PROG(ZIP, zip)
11539 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11540 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11541     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],,)
11544 AC_PATH_PROG(UNZIP, unzip)
11545 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11547 dnl ===================================================================
11548 dnl Zip must be a specific type for different build types.
11549 dnl ===================================================================
11550 if test $build_os = cygwin; then
11551     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11552         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11553     fi
11556 dnl ===================================================================
11557 dnl We need touch with -h option support.
11558 dnl ===================================================================
11559 AC_PATH_PROG(TOUCH, touch)
11560 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11561 touch "$WARNINGS_FILE"
11562 if ! "$TOUCH" -h "$WARNINGS_FILE" 2>/dev/null > /dev/null; then
11563     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],,)
11566 dnl ===================================================================
11567 dnl Check for system epoxy
11568 dnl ===================================================================
11569 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2], ["-I${WORKDIR}/UnpackedTarball/epoxy/include"])
11571 dnl ===================================================================
11572 dnl Set vcl option: coordinate device in double or sal_Int32
11573 dnl ===================================================================
11575 dnl disabled for now, we don't want subtle differences between OSs
11576 dnl AC_MSG_CHECKING([Type to use for Device Pixel coordinates])
11577 dnl if test "$_os" = "Darwin" -o  $_os = iOS ; then
11578 dnl     AC_DEFINE(VCL_FLOAT_DEVICE_PIXEL)
11579 dnl     AC_MSG_RESULT([double])
11580 dnl else
11581 dnl     AC_MSG_RESULT([sal_Int32])
11582 dnl fi
11584 dnl ===================================================================
11585 dnl Show which vclplugs will be built.
11586 dnl ===================================================================
11587 R=""
11588 if test "$USING_X11" != TRUE; then
11589     enable_gtk3=no
11592 ENABLE_GTK3=""
11593 if test "x$enable_gtk3" = "xyes"; then
11594     ENABLE_GTK3="TRUE"
11595     AC_DEFINE(ENABLE_GTK3)
11596     R="$R gtk3"
11598 AC_SUBST(ENABLE_GTK3)
11600 ENABLE_GTK3_KDE5=""
11601 if test "x$enable_gtk3_kde5" = "xyes"; then
11602     ENABLE_GTK3_KDE5="TRUE"
11603     AC_DEFINE(ENABLE_GTK3_KDE5)
11604     R="$R gtk3_kde5"
11606 AC_SUBST(ENABLE_GTK3_KDE5)
11608 ENABLE_GTK4=""
11609 if test "x$enable_gtk4" = "xyes"; then
11610     ENABLE_GTK4="TRUE"
11611     AC_DEFINE(ENABLE_GTK4)
11612     R="$R gtk4"
11614 AC_SUBST(ENABLE_GTK4)
11616 ENABLE_QT5=""
11617 if test "x$enable_qt5" = "xyes"; then
11618     ENABLE_QT5="TRUE"
11619     AC_DEFINE(ENABLE_QT5)
11620     R="$R qt5"
11622 AC_SUBST(ENABLE_QT5)
11624 ENABLE_QT6=""
11625 if test "x$enable_qt6" = "xyes"; then
11626     ENABLE_QT6="TRUE"
11627     AC_DEFINE(ENABLE_QT6)
11628     R="$R qt6"
11630 AC_SUBST(ENABLE_QT6)
11633 ENABLE_KF5=""
11634 if test "x$enable_kf5" = "xyes"; then
11635     ENABLE_KF5="TRUE"
11636     AC_DEFINE(ENABLE_KF5)
11637     R="$R kf5"
11639 AC_SUBST(ENABLE_KF5)
11641 if test "x$USING_X11" = "xyes"; then
11642     R="$R gen"
11645 if test "$_os" = "WINNT"; then
11646     R="$R win"
11647 elif test "$_os" = "Darwin"; then
11648     R="$R osx"
11649 elif test "$_os" = "iOS"; then
11650     R="ios"
11651 elif test "$_os" = Android; then
11652     R="android"
11655 build_vcl_plugins="$R"
11656 if test -z "$build_vcl_plugins"; then
11657     build_vcl_plugins=" none"
11659 AC_MSG_NOTICE([VCLplugs to be built:${build_vcl_plugins}])
11660 VCL_PLUGIN_INFO=$R
11661 AC_SUBST([VCL_PLUGIN_INFO])
11663 dnl ===================================================================
11664 dnl Check for GTK libraries
11665 dnl ===================================================================
11667 GTK3_CFLAGS=""
11668 GTK3_LIBS=""
11669 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11670     if test "$with_system_cairo" = no; then
11671         add_warning 'Non-system cairo combined with gtk3 is assumed to cause trouble; proceed at your own risk.'
11672     fi
11673     : ${with_system_cairo:=yes}
11674     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)
11675     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11676     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11677     FilterLibs "${GTK3_LIBS}"
11678     GTK3_LIBS="${filteredlibs}"
11680     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11681     if test "$with_system_epoxy" != "yes"; then
11682         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11683         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11684                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11685     fi
11687 AC_SUBST(GTK3_LIBS)
11688 AC_SUBST(GTK3_CFLAGS)
11690 GTK4_CFLAGS=""
11691 GTK4_LIBS=""
11692 if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then
11693     if test "$with_system_cairo" = no; then
11694         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11695     fi
11696     : ${with_system_cairo:=yes}
11697     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11698     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11699     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11700     FilterLibs "${GTK4_LIBS}"
11701     GTK4_LIBS="${filteredlibs}"
11703     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11704     if test "$with_system_epoxy" != "yes"; then
11705         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11706         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11707                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11708     fi
11710 AC_SUBST(GTK4_LIBS)
11711 AC_SUBST(GTK4_CFLAGS)
11713 if test "$enable_introspection" = yes; then
11714     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11715         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11716     else
11717         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
11718     fi
11721 dnl ===================================================================
11722 dnl check for dbus support
11723 dnl ===================================================================
11724 ENABLE_DBUS=""
11725 DBUS_CFLAGS=""
11726 DBUS_LIBS=""
11727 DBUS_GLIB_CFLAGS=""
11728 DBUS_GLIB_LIBS=""
11729 DBUS_HAVE_GLIB=""
11731 if test "$enable_dbus" = "no"; then
11732     test_dbus=no
11735 AC_MSG_CHECKING([whether to enable DBUS support])
11736 if test "$test_dbus" = "yes"; then
11737     ENABLE_DBUS="TRUE"
11738     AC_MSG_RESULT([yes])
11739     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
11740     AC_DEFINE(ENABLE_DBUS)
11741     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11742     FilterLibs "${DBUS_LIBS}"
11743     DBUS_LIBS="${filteredlibs}"
11745     # Glib is needed for BluetoothServer
11746     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
11747     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
11748         [
11749             DBUS_HAVE_GLIB="TRUE"
11750             AC_DEFINE(DBUS_HAVE_GLIB,1)
11751         ],
11752         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
11753     )
11754 else
11755     AC_MSG_RESULT([no])
11758 AC_SUBST(ENABLE_DBUS)
11759 AC_SUBST(DBUS_CFLAGS)
11760 AC_SUBST(DBUS_LIBS)
11761 AC_SUBST(DBUS_GLIB_CFLAGS)
11762 AC_SUBST(DBUS_GLIB_LIBS)
11763 AC_SUBST(DBUS_HAVE_GLIB)
11765 AC_MSG_CHECKING([whether to enable Impress remote control])
11766 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
11767     AC_MSG_RESULT([yes])
11768     ENABLE_SDREMOTE=TRUE
11769     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
11771     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
11772         # The Bluetooth code doesn't compile with macOS SDK 10.15
11773         if test "$enable_sdremote_bluetooth" = yes; then
11774             AC_MSG_ERROR([macOS SDK $macosx_sdk does not currently support --enable-sdremote-bluetooth])
11775         fi
11776         enable_sdremote_bluetooth=no
11777     fi
11778     # If not explicitly enabled or disabled, default
11779     if test -z "$enable_sdremote_bluetooth"; then
11780         case "$OS" in
11781         LINUX|MACOSX|WNT)
11782             # Default to yes for these
11783             enable_sdremote_bluetooth=yes
11784             ;;
11785         *)
11786             # otherwise no
11787             enable_sdremote_bluetooth=no
11788             ;;
11789         esac
11790     fi
11791     # $enable_sdremote_bluetooth is guaranteed non-empty now
11793     if test "$enable_sdremote_bluetooth" != "no"; then
11794         if test "$OS" = "LINUX"; then
11795             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
11796                 AC_MSG_RESULT([yes])
11797                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
11798                 dnl ===================================================================
11799                 dnl Check for system bluez
11800                 dnl ===================================================================
11801                 AC_MSG_CHECKING([which Bluetooth header to use])
11802                 if test "$with_system_bluez" = "yes"; then
11803                     AC_MSG_RESULT([external])
11804                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
11805                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
11806                     SYSTEM_BLUEZ=TRUE
11807                 else
11808                     AC_MSG_RESULT([internal])
11809                     SYSTEM_BLUEZ=
11810                 fi
11811             else
11812                 AC_MSG_RESULT([no, dbus disabled])
11813                 ENABLE_SDREMOTE_BLUETOOTH=
11814                 SYSTEM_BLUEZ=
11815             fi
11816         else
11817             AC_MSG_RESULT([yes])
11818             ENABLE_SDREMOTE_BLUETOOTH=TRUE
11819             SYSTEM_BLUEZ=
11820         fi
11821     else
11822         AC_MSG_RESULT([no])
11823         ENABLE_SDREMOTE_BLUETOOTH=
11824         SYSTEM_BLUEZ=
11825     fi
11826 else
11827     ENABLE_SDREMOTE=
11828     SYSTEM_BLUEZ=
11829     AC_MSG_RESULT([no])
11831 AC_SUBST(ENABLE_SDREMOTE)
11832 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
11833 AC_SUBST(SYSTEM_BLUEZ)
11835 dnl ===================================================================
11836 dnl Check whether to enable GIO support
11837 dnl ===================================================================
11838 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11839     AC_MSG_CHECKING([whether to enable GIO support])
11840     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
11841         dnl Need at least 2.26 for the dbus support.
11842         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
11843                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
11844         if test "$ENABLE_GIO" = "TRUE"; then
11845             AC_DEFINE(ENABLE_GIO)
11846             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11847             FilterLibs "${GIO_LIBS}"
11848             GIO_LIBS="${filteredlibs}"
11849         fi
11850     else
11851         AC_MSG_RESULT([no])
11852     fi
11854 AC_SUBST(ENABLE_GIO)
11855 AC_SUBST(GIO_CFLAGS)
11856 AC_SUBST(GIO_LIBS)
11859 dnl ===================================================================
11861 SPLIT_APP_MODULES=""
11862 if test "$enable_split_app_modules" = "yes"; then
11863     SPLIT_APP_MODULES="TRUE"
11865 AC_SUBST(SPLIT_APP_MODULES)
11867 SPLIT_OPT_FEATURES=""
11868 if test "$enable_split_opt_features" = "yes"; then
11869     SPLIT_OPT_FEATURES="TRUE"
11871 AC_SUBST(SPLIT_OPT_FEATURES)
11873 dnl ===================================================================
11874 dnl Check whether the GStreamer libraries are available.
11875 dnl ===================================================================
11877 ENABLE_GSTREAMER_1_0=""
11879 if test "$test_gstreamer_1_0" = yes; then
11881     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
11882     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
11883         ENABLE_GSTREAMER_1_0="TRUE"
11884         AC_MSG_RESULT([yes])
11885         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
11886         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11887         FilterLibs "${GSTREAMER_1_0_LIBS}"
11888         GSTREAMER_1_0_LIBS="${filteredlibs}"
11889         AC_DEFINE(ENABLE_GSTREAMER_1_0)
11890     else
11891         AC_MSG_RESULT([no])
11892     fi
11894 AC_SUBST(GSTREAMER_1_0_CFLAGS)
11895 AC_SUBST(GSTREAMER_1_0_LIBS)
11896 AC_SUBST(ENABLE_GSTREAMER_1_0)
11898 ENABLE_OPENGL_TRANSITIONS=
11899 ENABLE_OPENGL_CANVAS=
11900 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
11901    : # disable
11902 elif test "$_os" = "Darwin"; then
11903     # We use frameworks on macOS, no need for detail checks
11904     ENABLE_OPENGL_TRANSITIONS=TRUE
11905     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11906     ENABLE_OPENGL_CANVAS=TRUE
11907 elif test $_os = WINNT; then
11908     ENABLE_OPENGL_TRANSITIONS=TRUE
11909     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11910     ENABLE_OPENGL_CANVAS=TRUE
11911 else
11912     if test "$USING_X11" = TRUE; then
11913         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
11914         ENABLE_OPENGL_TRANSITIONS=TRUE
11915         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11916         ENABLE_OPENGL_CANVAS=TRUE
11917     fi
11920 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
11921 AC_SUBST(ENABLE_OPENGL_CANVAS)
11923 dnl =================================================
11924 dnl Check whether to build with OpenCL support.
11925 dnl =================================================
11927 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
11928     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
11929     # platform (optional at run-time, used through clew).
11930     BUILD_TYPE="$BUILD_TYPE OPENCL"
11931     AC_DEFINE(HAVE_FEATURE_OPENCL)
11934 dnl =================================================
11935 dnl Check whether to build with dconf support.
11936 dnl =================================================
11938 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
11939     PKG_CHECK_MODULES([DCONF], [dconf >= 0.15.2], [], [
11940         if test "$enable_dconf" = yes; then
11941             AC_MSG_ERROR([dconf not found])
11942         else
11943             enable_dconf=no
11944         fi])
11946 AC_MSG_CHECKING([whether to enable dconf])
11947 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
11948     DCONF_CFLAGS=
11949     DCONF_LIBS=
11950     ENABLE_DCONF=
11951     AC_MSG_RESULT([no])
11952 else
11953     ENABLE_DCONF=TRUE
11954     AC_DEFINE(ENABLE_DCONF)
11955     AC_MSG_RESULT([yes])
11957 AC_SUBST([DCONF_CFLAGS])
11958 AC_SUBST([DCONF_LIBS])
11959 AC_SUBST([ENABLE_DCONF])
11961 # pdf import?
11962 AC_MSG_CHECKING([whether to build the PDF import feature])
11963 ENABLE_PDFIMPORT=
11964 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
11965     AC_MSG_RESULT([yes])
11966     ENABLE_PDFIMPORT=TRUE
11967     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
11968 else
11969     AC_MSG_RESULT([no])
11972 # Pdfium?
11973 AC_MSG_CHECKING([whether to build PDFium])
11974 ENABLE_PDFIUM=
11975 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
11976     AC_MSG_RESULT([yes])
11977     ENABLE_PDFIUM=TRUE
11978     BUILD_TYPE="$BUILD_TYPE PDFIUM"
11979 else
11980     AC_MSG_RESULT([no])
11982 AC_SUBST(ENABLE_PDFIUM)
11984 if test "$ENABLE_PDFIUM" = "TRUE"; then
11985         AC_MSG_CHECKING([which OpenJPEG library to use])
11986         if test "$with_system_openjpeg" = "yes"; then
11987                 SYSTEM_OPENJPEG2=TRUE
11988                 AC_MSG_RESULT([external])
11989                 PKG_CHECK_MODULES( OPENJPEG2, libopenjp2 )
11990                 OPENJPEG2_CFLAGS=$(printf '%s' "$OPENJPEG2_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11991                 FilterLibs "${OPENJPEG2_LIBS}"
11992                 OPENJPEG2_LIBS="${filteredlibs}"
11993         else
11994                 SYSTEM_OPENJPEG2=FALSE
11995                 AC_MSG_RESULT([internal])
11996         fi
11997         AC_MSG_CHECKING([which Abseil library to use])
11998         if test "$with_system_abseil" = "yes"; then
11999                 AC_MSG_RESULT([external])
12000                 SYSTEM_ABSEIL=TRUE
12001                 AC_LANG_PUSH([C++])
12002                 AC_CHECK_HEADER(absl/types/bad_optional_access.h, [],
12003                         [AC_MSG_ERROR(abseil headers not found.)], [])
12004                 #ABSEIL_CFLAGS=-I/usr/include
12005                 AC_CHECK_LIB([absl_bad_optional_access], [main], [ABSEIL_LIBS=-labsl_bad_optional_access],
12006                         [ AC_MSG_ERROR([libabsl_bad_optional_access library not found.]) ])
12007                 AC_LANG_POP([C++])
12008                 ABSEIL_CFLAGS=$(printf '%s' "$ABSEIL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12009                 FilterLibs "${ABSEIL_LIBS}"
12010                 ABSEIL_LIBS="${filteredlibs}"
12011         else
12012                 AC_MSG_RESULT([internal])
12013         fi
12015 AC_SUBST(SYSTEM_OPENJPEG2)
12016 AC_SUBST(SYSTEM_ABSEIL)
12017 AC_SUBST(ABSEIL_CFLAGS)
12018 AC_SUBST(ABSEIL_LIBS)
12020 dnl ===================================================================
12021 dnl Check for poppler
12022 dnl ===================================================================
12023 ENABLE_POPPLER=
12024 AC_MSG_CHECKING([whether to build Poppler])
12025 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
12026     AC_MSG_RESULT([yes])
12027     ENABLE_POPPLER=TRUE
12028     AC_DEFINE(HAVE_FEATURE_POPPLER)
12029 else
12030     AC_MSG_RESULT([no])
12032 AC_SUBST(ENABLE_POPPLER)
12034 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
12035     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
12038 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
12039     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
12042 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
12043     dnl ===================================================================
12044     dnl Check for system poppler
12045     dnl ===================================================================
12046     AC_MSG_CHECKING([which PDF import poppler to use])
12047     if test "$with_system_poppler" = "yes"; then
12048         AC_MSG_RESULT([external])
12049         SYSTEM_POPPLER=TRUE
12050         PKG_CHECK_MODULES(POPPLER,[poppler >= 0.14 poppler-cpp])
12051         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12052         FilterLibs "${POPPLER_LIBS}"
12053         POPPLER_LIBS="${filteredlibs}"
12054     else
12055         AC_MSG_RESULT([internal])
12056         SYSTEM_POPPLER=
12057         BUILD_TYPE="$BUILD_TYPE POPPLER"
12058     fi
12059     AC_DEFINE([ENABLE_PDFIMPORT],1)
12061 AC_SUBST(ENABLE_PDFIMPORT)
12062 AC_SUBST(SYSTEM_POPPLER)
12063 AC_SUBST(POPPLER_CFLAGS)
12064 AC_SUBST(POPPLER_LIBS)
12066 # Skia?
12067 ENABLE_SKIA=
12068 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
12069     # Skia now requires at least freetype2 >= 2.8.1, which is less that what LO requires as system freetype.
12070     if test "$SYSTEM_FREETYPE" = TRUE; then
12071         PKG_CHECK_EXISTS(freetype2 >= 21.0.15, # 21.0.15 = 2.8.1
12072             [skia_freetype_ok=yes],
12073             [skia_freetype_ok=no])
12074     else # internal is ok
12075         skia_freetype_ok=yes
12076     fi
12077     AC_MSG_CHECKING([whether to build Skia])
12078     if test "$skia_freetype_ok" = "yes"; then
12079         if test "$enable_skia" = "debug"; then
12080             AC_MSG_RESULT([yes (debug)])
12081             ENABLE_SKIA_DEBUG=TRUE
12082         else
12083             AC_MSG_RESULT([yes])
12084             ENABLE_SKIA_DEBUG=
12085         fi
12086         ENABLE_SKIA=TRUE
12087         AC_DEFINE(HAVE_FEATURE_SKIA)
12088         BUILD_TYPE="$BUILD_TYPE SKIA"
12090         if test "$OS" = "MACOSX"; then
12091             AC_DEFINE(SK_SUPPORT_GPU,1)
12092             AC_DEFINE(SK_METAL,1)
12093             SKIA_GPU=METAL
12094             AC_SUBST(SKIA_GPU)
12095         else
12096             AC_DEFINE(SK_SUPPORT_GPU,1)
12097             AC_DEFINE(SK_VULKAN,1)
12098             SKIA_GPU=VULKAN
12099             AC_SUBST(SKIA_GPU)
12100         fi
12102         if test -n "$MAC_OS_X_VERSION_MIN_REQUIRED" && test "$MAC_OS_X_VERSION_MIN_REQUIRED" -lt "101200"; then
12103             SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX=1
12104             AC_SUBST(SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX)
12105         fi
12106     else
12107         AC_MSG_RESULT([no (freetype too old)])
12108         add_warning "freetype version is too old for Skia library, at least 2.8.1 required, Skia support disabled"
12109     fi
12111 else
12112     AC_MSG_CHECKING([whether to build Skia])
12113     AC_MSG_RESULT([no])
12115 AC_SUBST(ENABLE_SKIA)
12116 AC_SUBST(ENABLE_SKIA_DEBUG)
12118 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
12119 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
12120 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
12121 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
12122 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
12123 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
12124 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
12125 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F=
12126 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
12127 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
12128 HAVE_LO_CLANG_DLLEXPORTINLINES=
12130 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE; then
12131     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12132         AC_MSG_CHECKING([for Clang])
12133         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
12134     else
12135         if test "$_os" = "WINNT"; then
12136             AC_MSG_CHECKING([for clang-cl])
12137             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
12138                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
12139                 dnl explicitly set -m32/-m64
12140                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
12141                 LO_CLANG_CXX="$LO_CLANG_CC"
12142                 AC_MSG_RESULT([$LO_CLANG_CC])
12143             else
12144                 AC_MSG_RESULT([no])
12145             fi
12146         else
12147             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
12148             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
12149         fi
12150     fi
12151     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12152         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
12153         clang2_ver=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
12154         if test "$clang2_ver" -lt 50002; then
12155             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
12156             LO_CLANG_CC=
12157             LO_CLANG_CXX=
12158         fi
12159     fi
12160     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX" -a "$_os" = "WINNT"; then
12161         save_CXX="$CXX"
12162         CXX="$LO_CLANG_CXX"
12163         AC_MSG_CHECKING([whether $CXX supports -Zc:dllexportInlines-])
12164         AC_LANG_PUSH([C++])
12165         save_CXXFLAGS=$CXXFLAGS
12166         CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
12167         AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
12168                 HAVE_LO_CLANG_DLLEXPORTINLINES=TRUE
12169                 AC_MSG_RESULT([yes])
12170             ], [AC_MSG_RESULT([no])])
12171         CXXFLAGS=$save_CXXFLAGS
12172         AC_LANG_POP([C++])
12173         CXX="$save_CXX"
12174         if test -z "$HAVE_LO_CLANG_DLLEXPORTINLINES"; then
12175             AC_MSG_ERROR([Clang compiler does not support -Zc:dllexportInlines-. The Skia library needs to be built using a newer Clang version, or use --disable-skia.])
12176         fi
12177     fi
12178     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
12179         # Skia is the default on Windows and Mac, so hard-require Clang.
12180         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
12181         if test "$_os" = "WINNT" -o "$_os" = "Darwin"; then
12182             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang, or use --disable-skia.])
12183         else
12184             AC_MSG_WARN([Clang compiler not found.])
12185         fi
12186     else
12188         save_CXX="$CXX"
12189         CXX="$LO_CLANG_CXX"
12190         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
12191         flag_sse2=-msse2
12192         flag_ssse3=-mssse3
12193         flag_sse41=-msse4.1
12194         flag_sse42=-msse4.2
12195         flag_avx=-mavx
12196         flag_avx2=-mavx2
12197         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
12198         flag_avx512f=-mavx512f
12199         flag_f16c=-mf16c
12200         flag_fma=-mfma
12202         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
12203         AC_LANG_PUSH([C++])
12204         save_CXXFLAGS=$CXXFLAGS
12205         CXXFLAGS="$CXXFLAGS $flag_sse2"
12206         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12207             #include <emmintrin.h>
12208             int main () {
12209                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12210                 c = _mm_xor_si128 (a, b);
12211                 return 0;
12212             }
12213             ])],
12214             [can_compile_sse2=yes],
12215             [can_compile_sse2=no])
12216         AC_LANG_POP([C++])
12217         CXXFLAGS=$save_CXXFLAGS
12218         AC_MSG_RESULT([${can_compile_sse2}])
12219         if test "${can_compile_sse2}" = "yes" ; then
12220             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
12221         fi
12223         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
12224         AC_LANG_PUSH([C++])
12225         save_CXXFLAGS=$CXXFLAGS
12226         CXXFLAGS="$CXXFLAGS $flag_ssse3"
12227         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12228             #include <tmmintrin.h>
12229             int main () {
12230                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12231                 c = _mm_maddubs_epi16 (a, b);
12232                 return 0;
12233             }
12234             ])],
12235             [can_compile_ssse3=yes],
12236             [can_compile_ssse3=no])
12237         AC_LANG_POP([C++])
12238         CXXFLAGS=$save_CXXFLAGS
12239         AC_MSG_RESULT([${can_compile_ssse3}])
12240         if test "${can_compile_ssse3}" = "yes" ; then
12241             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
12242         fi
12244         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
12245         AC_LANG_PUSH([C++])
12246         save_CXXFLAGS=$CXXFLAGS
12247         CXXFLAGS="$CXXFLAGS $flag_sse41"
12248         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12249             #include <smmintrin.h>
12250             int main () {
12251                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12252                 c = _mm_cmpeq_epi64 (a, b);
12253                 return 0;
12254             }
12255             ])],
12256             [can_compile_sse41=yes],
12257             [can_compile_sse41=no])
12258         AC_LANG_POP([C++])
12259         CXXFLAGS=$save_CXXFLAGS
12260         AC_MSG_RESULT([${can_compile_sse41}])
12261         if test "${can_compile_sse41}" = "yes" ; then
12262             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12263         fi
12265         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12266         AC_LANG_PUSH([C++])
12267         save_CXXFLAGS=$CXXFLAGS
12268         CXXFLAGS="$CXXFLAGS $flag_sse42"
12269         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12270             #include <nmmintrin.h>
12271             int main () {
12272                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12273                 c = _mm_cmpgt_epi64 (a, b);
12274                 return 0;
12275             }
12276             ])],
12277             [can_compile_sse42=yes],
12278             [can_compile_sse42=no])
12279         AC_LANG_POP([C++])
12280         CXXFLAGS=$save_CXXFLAGS
12281         AC_MSG_RESULT([${can_compile_sse42}])
12282         if test "${can_compile_sse42}" = "yes" ; then
12283             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12284         fi
12286         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12287         AC_LANG_PUSH([C++])
12288         save_CXXFLAGS=$CXXFLAGS
12289         CXXFLAGS="$CXXFLAGS $flag_avx"
12290         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12291             #include <immintrin.h>
12292             int main () {
12293                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12294                 c = _mm256_xor_ps(a, b);
12295                 return 0;
12296             }
12297             ])],
12298             [can_compile_avx=yes],
12299             [can_compile_avx=no])
12300         AC_LANG_POP([C++])
12301         CXXFLAGS=$save_CXXFLAGS
12302         AC_MSG_RESULT([${can_compile_avx}])
12303         if test "${can_compile_avx}" = "yes" ; then
12304             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12305         fi
12307         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12308         AC_LANG_PUSH([C++])
12309         save_CXXFLAGS=$CXXFLAGS
12310         CXXFLAGS="$CXXFLAGS $flag_avx2"
12311         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12312             #include <immintrin.h>
12313             int main () {
12314                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12315                 c = _mm256_maddubs_epi16(a, b);
12316                 return 0;
12317             }
12318             ])],
12319             [can_compile_avx2=yes],
12320             [can_compile_avx2=no])
12321         AC_LANG_POP([C++])
12322         CXXFLAGS=$save_CXXFLAGS
12323         AC_MSG_RESULT([${can_compile_avx2}])
12324         if test "${can_compile_avx2}" = "yes" ; then
12325             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12326         fi
12328         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12329         AC_LANG_PUSH([C++])
12330         save_CXXFLAGS=$CXXFLAGS
12331         CXXFLAGS="$CXXFLAGS $flag_avx512"
12332         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12333             #include <immintrin.h>
12334             int main () {
12335                 __m512i a = _mm512_loadu_si512(0);
12336                 __m512d v1 = _mm512_load_pd(0);
12337                 // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
12338                 __m512d v2 = _mm512_abs_pd(v1);
12339                 return 0;
12340             }
12341             ])],
12342             [can_compile_avx512=yes],
12343             [can_compile_avx512=no])
12344         AC_LANG_POP([C++])
12345         CXXFLAGS=$save_CXXFLAGS
12346         AC_MSG_RESULT([${can_compile_avx512}])
12347         if test "${can_compile_avx512}" = "yes" ; then
12348             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12349             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
12350         fi
12352         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12353         AC_LANG_PUSH([C++])
12354         save_CXXFLAGS=$CXXFLAGS
12355         CXXFLAGS="$CXXFLAGS $flag_f16c"
12356         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12357             #include <immintrin.h>
12358             int main () {
12359                 __m128i a = _mm_set1_epi32 (0);
12360                 __m128 c;
12361                 c = _mm_cvtph_ps(a);
12362                 return 0;
12363             }
12364             ])],
12365             [can_compile_f16c=yes],
12366             [can_compile_f16c=no])
12367         AC_LANG_POP([C++])
12368         CXXFLAGS=$save_CXXFLAGS
12369         AC_MSG_RESULT([${can_compile_f16c}])
12370         if test "${can_compile_f16c}" = "yes" ; then
12371             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12372         fi
12374         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12375         AC_LANG_PUSH([C++])
12376         save_CXXFLAGS=$CXXFLAGS
12377         CXXFLAGS="$CXXFLAGS $flag_fma"
12378         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12379             #include <immintrin.h>
12380             int main () {
12381                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12382                 d = _mm256_fmadd_ps(a, b, c);
12383                 return 0;
12384             }
12385             ])],
12386             [can_compile_fma=yes],
12387             [can_compile_fma=no])
12388         AC_LANG_POP([C++])
12389         CXXFLAGS=$save_CXXFLAGS
12390         AC_MSG_RESULT([${can_compile_fma}])
12391         if test "${can_compile_fma}" = "yes" ; then
12392             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12393         fi
12395         CXX="$save_CXX"
12396     fi
12399 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12401 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12402     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12403     AC_LANG_PUSH([C])
12404     save_CC="$CC"
12405     CC="$LO_CLANG_CC"
12406     save_CFLAGS=$CFLAGS
12407     CFLAGS="$CFLAGS --ccache-skip -O2 -Werror"
12408     dnl an empty program will do, we're checking the compiler flags
12409     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12410                       [use_ccache=yes], [use_ccache=no])
12411     CFLAGS=$save_CFLAGS
12412     CC=$save_CC
12413     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12414         AC_MSG_RESULT([yes])
12415     else
12416         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12417         AC_MSG_RESULT([no])
12418     fi
12419     AC_LANG_POP([C])
12421     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12422     AC_LANG_PUSH([C++])
12423     save_CXX="$CXX"
12424     CXX="$LO_CLANG_CXX"
12425     save_CXXFLAGS=$CXXFLAGS
12426     CXXFLAGS="$CXXFLAGS --ccache-skip -O2 -Werror"
12427     dnl an empty program will do, we're checking the compiler flags
12428     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12429                       [use_ccache=yes], [use_ccache=no])
12430     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12431         AC_MSG_RESULT([yes])
12432     else
12433         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12434         AC_MSG_RESULT([no])
12435     fi
12436     CXXFLAGS=$save_CXXFLAGS
12437     CXX=$save_CXX
12438     AC_LANG_POP([C++])
12441 AC_SUBST(LO_CLANG_CC)
12442 AC_SUBST(LO_CLANG_CXX)
12443 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12444 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12445 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12446 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12447 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12448 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12449 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12450 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F)
12451 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12452 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12453 AC_SUBST(CLANG_USE_LD)
12454 AC_SUBST([HAVE_LO_CLANG_DLLEXPORTINLINES])
12456 SYSTEM_GPGMEPP=
12458 if test "$enable_gpgmepp" = no; then
12459     AC_MSG_CHECKING([whether to enable gpgmepp])
12460     AC_MSG_RESULT([no])
12461 elif test "$enable_mpl_subset" = "yes"; then
12462     AC_MSG_CHECKING([whether gpgmepp should be disabled due to building just MPL])
12463     AC_MSG_RESULT([yes])
12464 elif test "$enable_fuzzers" = "yes"; then
12465     AC_MSG_CHECKING([whether gpgmepp should be disabled due to oss-fuzz])
12466     AC_MSG_RESULT([yes])
12467 elif test "$_os" = "Linux" -o "$_os" = "Darwin" -o "$_os" = "WINNT" ; then
12468     dnl ===================================================================
12469     dnl Check for system gpgme
12470     dnl ===================================================================
12471     AC_MSG_CHECKING([which gpgmepp to use])
12472     if test "$with_system_gpgmepp" = "yes"; then
12473         AC_MSG_RESULT([external])
12474         SYSTEM_GPGMEPP=TRUE
12476         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12477         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12478             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp >= 1.14 development package])], [])
12479         # progress_callback is the only func with plain C linkage
12480         # checking for it also filters out older, KDE-dependent libgpgmepp versions
12481         AC_CHECK_LIB(gpgmepp, progress_callback, [ GPGMEPP_LIBS=-lgpgmepp ],
12482             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12483         AC_CHECK_HEADER(gpgme.h, [],
12484             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12485     else
12486         AC_MSG_RESULT([internal])
12487         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12489         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12490         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12491         if test "$_os" != "WINNT"; then
12492             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12493             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12494         fi
12495     fi
12496     ENABLE_GPGMEPP=TRUE
12497     AC_DEFINE([HAVE_FEATURE_GPGME])
12498     AC_PATH_PROG(GPG, gpg)
12499     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12500     # so let's exclude that manually for the moment
12501     if test -n "$GPG" -a "$_os" != "WINNT"; then
12502         # make sure we not only have a working gpgme, but a full working
12503         # gpg installation to run OpenPGP signature verification
12504         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12505     fi
12506     if test "$_os" = "Linux"; then
12507       uid=`id -u`
12508       AC_MSG_CHECKING([for /run/user/$uid])
12509       if test -d /run/user/$uid; then
12510         AC_MSG_RESULT([yes])
12511         AC_PATH_PROG(GPGCONF, gpgconf)
12513         # Older versions of gpgconf are not working as expected, since
12514         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12515         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12516         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12517         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12518         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12519         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12520         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12521           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12522           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12523           if $GPGCONF --dump-options > /dev/null ; then
12524             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12525               AC_MSG_RESULT([yes])
12526               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12527               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12528             else
12529               AC_MSG_RESULT([no])
12530             fi
12531           else
12532             AC_MSG_RESULT([no. missing or broken gpgconf?])
12533           fi
12534         else
12535           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12536         fi
12537       else
12538         AC_MSG_RESULT([no])
12539      fi
12540    fi
12542 AC_SUBST(ENABLE_GPGMEPP)
12543 AC_SUBST(SYSTEM_GPGMEPP)
12544 AC_SUBST(GPG_ERROR_CFLAGS)
12545 AC_SUBST(GPG_ERROR_LIBS)
12546 AC_SUBST(LIBASSUAN_CFLAGS)
12547 AC_SUBST(LIBASSUAN_LIBS)
12548 AC_SUBST(GPGMEPP_CFLAGS)
12549 AC_SUBST(GPGMEPP_LIBS)
12551 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12552 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12553     AC_MSG_RESULT([yes])
12554     ENABLE_MEDIAWIKI=TRUE
12555     BUILD_TYPE="$BUILD_TYPE XSLTML"
12556     if test  "x$with_java" = "xno"; then
12557         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12558     fi
12559 else
12560     AC_MSG_RESULT([no])
12561     ENABLE_MEDIAWIKI=
12562     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12564 AC_SUBST(ENABLE_MEDIAWIKI)
12566 AC_MSG_CHECKING([whether to build the Report Builder])
12567 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12568     AC_MSG_RESULT([yes])
12569     ENABLE_REPORTBUILDER=TRUE
12570     AC_MSG_CHECKING([which jfreereport libs to use])
12571     if test "$with_system_jfreereport" = "yes"; then
12572         SYSTEM_JFREEREPORT=TRUE
12573         AC_MSG_RESULT([external])
12574         if test -z $SAC_JAR; then
12575             SAC_JAR=/usr/share/java/sac.jar
12576         fi
12577         if ! test -f $SAC_JAR; then
12578              AC_MSG_ERROR(sac.jar not found.)
12579         fi
12581         if test -z $LIBXML_JAR; then
12582             if test -f /usr/share/java/libxml-1.0.0.jar; then
12583                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12584             elif test -f /usr/share/java/libxml.jar; then
12585                 LIBXML_JAR=/usr/share/java/libxml.jar
12586             else
12587                 AC_MSG_ERROR(libxml.jar replacement not found.)
12588             fi
12589         elif ! test -f $LIBXML_JAR; then
12590             AC_MSG_ERROR(libxml.jar not found.)
12591         fi
12593         if test -z $FLUTE_JAR; then
12594             if test -f /usr/share/java/flute-1.3.0.jar; then
12595                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12596             elif test -f /usr/share/java/flute.jar; then
12597                 FLUTE_JAR=/usr/share/java/flute.jar
12598             else
12599                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12600             fi
12601         elif ! test -f $FLUTE_JAR; then
12602             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12603         fi
12605         if test -z $JFREEREPORT_JAR; then
12606             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12607                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12608             elif test -f /usr/share/java/flow-engine.jar; then
12609                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12610             else
12611                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12612             fi
12613         elif ! test -f  $JFREEREPORT_JAR; then
12614                 AC_MSG_ERROR(jfreereport.jar not found.)
12615         fi
12617         if test -z $LIBLAYOUT_JAR; then
12618             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12619                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12620             elif test -f /usr/share/java/liblayout.jar; then
12621                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12622             else
12623                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12624             fi
12625         elif ! test -f $LIBLAYOUT_JAR; then
12626                 AC_MSG_ERROR(liblayout.jar not found.)
12627         fi
12629         if test -z $LIBLOADER_JAR; then
12630             if test -f /usr/share/java/libloader-1.0.0.jar; then
12631                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
12632             elif test -f /usr/share/java/libloader.jar; then
12633                 LIBLOADER_JAR=/usr/share/java/libloader.jar
12634             else
12635                 AC_MSG_ERROR(libloader.jar replacement not found.)
12636             fi
12637         elif ! test -f  $LIBLOADER_JAR; then
12638             AC_MSG_ERROR(libloader.jar not found.)
12639         fi
12641         if test -z $LIBFORMULA_JAR; then
12642             if test -f /usr/share/java/libformula-0.2.0.jar; then
12643                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
12644             elif test -f /usr/share/java/libformula.jar; then
12645                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
12646             else
12647                 AC_MSG_ERROR(libformula.jar replacement not found.)
12648             fi
12649         elif ! test -f $LIBFORMULA_JAR; then
12650                 AC_MSG_ERROR(libformula.jar not found.)
12651         fi
12653         if test -z $LIBREPOSITORY_JAR; then
12654             if test -f /usr/share/java/librepository-1.0.0.jar; then
12655                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
12656             elif test -f /usr/share/java/librepository.jar; then
12657                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
12658             else
12659                 AC_MSG_ERROR(librepository.jar replacement not found.)
12660             fi
12661         elif ! test -f $LIBREPOSITORY_JAR; then
12662             AC_MSG_ERROR(librepository.jar not found.)
12663         fi
12665         if test -z $LIBFONTS_JAR; then
12666             if test -f /usr/share/java/libfonts-1.0.0.jar; then
12667                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
12668             elif test -f /usr/share/java/libfonts.jar; then
12669                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
12670             else
12671                 AC_MSG_ERROR(libfonts.jar replacement not found.)
12672             fi
12673         elif ! test -f $LIBFONTS_JAR; then
12674                 AC_MSG_ERROR(libfonts.jar not found.)
12675         fi
12677         if test -z $LIBSERIALIZER_JAR; then
12678             if test -f /usr/share/java/libserializer-1.0.0.jar; then
12679                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
12680             elif test -f /usr/share/java/libserializer.jar; then
12681                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
12682             else
12683                 AC_MSG_ERROR(libserializer.jar replacement not found.)
12684             fi
12685         elif ! test -f $LIBSERIALIZER_JAR; then
12686                 AC_MSG_ERROR(libserializer.jar not found.)
12687         fi
12689         if test -z $LIBBASE_JAR; then
12690             if test -f /usr/share/java/libbase-1.0.0.jar; then
12691                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
12692             elif test -f /usr/share/java/libbase.jar; then
12693                 LIBBASE_JAR=/usr/share/java/libbase.jar
12694             else
12695                 AC_MSG_ERROR(libbase.jar replacement not found.)
12696             fi
12697         elif ! test -f $LIBBASE_JAR; then
12698             AC_MSG_ERROR(libbase.jar not found.)
12699         fi
12701     else
12702         AC_MSG_RESULT([internal])
12703         SYSTEM_JFREEREPORT=
12704         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
12705         NEED_ANT=TRUE
12706     fi
12707 else
12708     AC_MSG_RESULT([no])
12709     ENABLE_REPORTBUILDER=
12710     SYSTEM_JFREEREPORT=
12712 AC_SUBST(ENABLE_REPORTBUILDER)
12713 AC_SUBST(SYSTEM_JFREEREPORT)
12714 AC_SUBST(SAC_JAR)
12715 AC_SUBST(LIBXML_JAR)
12716 AC_SUBST(FLUTE_JAR)
12717 AC_SUBST(JFREEREPORT_JAR)
12718 AC_SUBST(LIBBASE_JAR)
12719 AC_SUBST(LIBLAYOUT_JAR)
12720 AC_SUBST(LIBLOADER_JAR)
12721 AC_SUBST(LIBFORMULA_JAR)
12722 AC_SUBST(LIBREPOSITORY_JAR)
12723 AC_SUBST(LIBFONTS_JAR)
12724 AC_SUBST(LIBSERIALIZER_JAR)
12726 # scripting provider for BeanShell?
12727 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
12728 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
12729     AC_MSG_RESULT([yes])
12730     ENABLE_SCRIPTING_BEANSHELL=TRUE
12732     dnl ===================================================================
12733     dnl Check for system beanshell
12734     dnl ===================================================================
12735     AC_MSG_CHECKING([which beanshell to use])
12736     if test "$with_system_beanshell" = "yes"; then
12737         AC_MSG_RESULT([external])
12738         SYSTEM_BSH=TRUE
12739         if test -z $BSH_JAR; then
12740             BSH_JAR=/usr/share/java/bsh.jar
12741         fi
12742         if ! test -f $BSH_JAR; then
12743             AC_MSG_ERROR(bsh.jar not found.)
12744         fi
12745     else
12746         AC_MSG_RESULT([internal])
12747         SYSTEM_BSH=
12748         BUILD_TYPE="$BUILD_TYPE BSH"
12749     fi
12750 else
12751     AC_MSG_RESULT([no])
12752     ENABLE_SCRIPTING_BEANSHELL=
12753     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
12755 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
12756 AC_SUBST(SYSTEM_BSH)
12757 AC_SUBST(BSH_JAR)
12759 # scripting provider for JavaScript?
12760 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
12761 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
12762     AC_MSG_RESULT([yes])
12763     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
12765     dnl ===================================================================
12766     dnl Check for system rhino
12767     dnl ===================================================================
12768     AC_MSG_CHECKING([which rhino to use])
12769     if test "$with_system_rhino" = "yes"; then
12770         AC_MSG_RESULT([external])
12771         SYSTEM_RHINO=TRUE
12772         if test -z $RHINO_JAR; then
12773             RHINO_JAR=/usr/share/java/js.jar
12774         fi
12775         if ! test -f $RHINO_JAR; then
12776             AC_MSG_ERROR(js.jar not found.)
12777         fi
12778     else
12779         AC_MSG_RESULT([internal])
12780         SYSTEM_RHINO=
12781         BUILD_TYPE="$BUILD_TYPE RHINO"
12782         NEED_ANT=TRUE
12783     fi
12784 else
12785     AC_MSG_RESULT([no])
12786     ENABLE_SCRIPTING_JAVASCRIPT=
12787     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
12789 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
12790 AC_SUBST(SYSTEM_RHINO)
12791 AC_SUBST(RHINO_JAR)
12793 # This is only used in Qt5/Qt6/KF5 checks to determine if /usr/lib64
12794 # paths should be added to library search path. So lets put all 64-bit
12795 # platforms there.
12796 supports_multilib=
12797 case "$host_cpu" in
12798 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el)
12799     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
12800         supports_multilib="yes"
12801     fi
12802     ;;
12804     ;;
12805 esac
12807 dnl ===================================================================
12808 dnl QT5 Integration
12809 dnl ===================================================================
12811 QT5_CFLAGS=""
12812 QT5_LIBS=""
12813 QMAKE5="qmake"
12814 MOC5="moc"
12815 QT5_GOBJECT_CFLAGS=""
12816 QT5_GOBJECT_LIBS=""
12817 QT5_HAVE_GOBJECT=""
12818 QT5_PLATFORMS_SRCDIR=""
12819 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12820         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
12821         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12822 then
12823     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
12824     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
12826     if test -n "$supports_multilib"; then
12827         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
12828     fi
12830     qt5_test_include="QtWidgets/qapplication.h"
12831     if test "$_os" = "Emscripten"; then
12832         qt5_test_library="libQt5Widgets.a"
12833     else
12834         qt5_test_library="libQt5Widgets.so"
12835     fi
12837     dnl Check for qmake5
12838     if test -n "$QT5DIR"; then
12839         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
12840     else
12841         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
12842     fi
12843     if test "$QMAKE5" = "no"; then
12844         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12845     else
12846         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
12847         if test -z "$qmake5_test_ver"; then
12848             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12849         fi
12850         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
12851         qt5_minimal_minor="6"
12852         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
12853             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
12854         else
12855             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
12856         fi
12857     fi
12859     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
12860     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
12861     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
12862     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
12864     AC_MSG_CHECKING([for Qt5 headers])
12865     qt5_incdir="no"
12866     for inc_dir in $qt5_incdirs; do
12867         if test -r "$inc_dir/$qt5_test_include"; then
12868             qt5_incdir="$inc_dir"
12869             break
12870         fi
12871     done
12872     AC_MSG_RESULT([$qt5_incdir])
12873     if test "x$qt5_incdir" = "xno"; then
12874         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12875     fi
12876     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
12877     AC_LANG_PUSH([C++])
12878     save_CPPFLAGS=$CPPFLAGS
12879     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
12880     AC_CHECK_HEADER(QtCore/qconfig.h, [],
12881         [AC_MSG_ERROR(qconfig.h header not found.)], [])
12882     CPPFLAGS=$save_CPPFLAGS
12883     AC_LANG_POP([C++])
12885     AC_MSG_CHECKING([for Qt5 libraries])
12886     qt5_libdir="no"
12887     for lib_dir in $qt5_libdirs; do
12888         if test -r "$lib_dir/$qt5_test_library"; then
12889             qt5_libdir="$lib_dir"
12890             break
12891         fi
12892     done
12893     AC_MSG_RESULT([$qt5_libdir])
12894     if test "x$qt5_libdir" = "xno"; then
12895         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12896     fi
12898     if test "$_os" = "Emscripten"; then
12899         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
12900             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
12901         fi
12902         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
12903             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
12904         fi
12905     fi
12907     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
12908     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12909     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
12910     if test "$_os" = "Emscripten"; then
12911         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
12912     fi
12914     if test "$USING_X11" = TRUE; then
12915         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
12916         PKG_CHECK_MODULES(QT5_XCB_ICCCM,[xcb-icccm],[
12917             QT5_HAVE_XCB_ICCCM=1
12918             AC_DEFINE(QT5_HAVE_XCB_ICCCM)
12919         ],[
12920             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)])
12921             add_warning "XCB ICCCM not found, which is needed for Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)"
12922         ])
12923         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
12924         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
12925         QT5_USING_X11=1
12926         AC_DEFINE(QT5_USING_X11)
12927     fi
12929     dnl Check for Meta Object Compiler
12931     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
12932     if test "$MOC5" = "no"; then
12933         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
12934 the root of your Qt installation by exporting QT5DIR before running "configure".])
12935     fi
12937     if test "$test_gstreamer_1_0" = yes; then
12938         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
12939                 QT5_HAVE_GOBJECT=1
12940                 AC_DEFINE(QT5_HAVE_GOBJECT)
12941             ],
12942             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
12943         )
12944     fi
12946 AC_SUBST(QT5_CFLAGS)
12947 AC_SUBST(QT5_LIBS)
12948 AC_SUBST(MOC5)
12949 AC_SUBST(QT5_GOBJECT_CFLAGS)
12950 AC_SUBST(QT5_GOBJECT_LIBS)
12951 AC_SUBST(QT5_HAVE_GOBJECT)
12952 AC_SUBST(QT5_PLATFORMS_SRCDIR)
12954 dnl ===================================================================
12955 dnl QT6 Integration
12956 dnl ===================================================================
12958 QT6_CFLAGS=""
12959 QT6_LIBS=""
12960 QMAKE6="qmake"
12961 MOC6="moc"
12962 QT6_PLATFORMS_SRCDIR=""
12963 if test \( "$test_qt6" = "yes" -a "$ENABLE_QT6" = "TRUE" \)
12964 then
12965     qt6_incdirs="$QT6INC /usr/include/qt6 /usr/include $x_includes"
12966     qt6_libdirs="$QT6LIB /usr/lib/qt6 /usr/lib $x_libraries"
12968     if test -n "$supports_multilib"; then
12969         qt6_libdirs="$qt6_libdirs /usr/lib64/qt6 /usr/lib64/qt /usr/lib64"
12970     fi
12972     qt6_test_include="QtWidgets/qapplication.h"
12973     if test "$_os" = "Emscripten"; then
12974         qt6_test_library="libQt6Widgets.a"
12975     else
12976         qt6_test_library="libQt6Widgets.so"
12977     fi
12979     dnl Check for qmake6
12980     if test -n "$QT6DIR"; then
12981         AC_PATH_PROG(QMAKE6, [qmake], no, [$QT6DIR/bin])
12982     else
12983         AC_PATH_PROGS(QMAKE6, [qmake-qt6 qmake], no)
12984     fi
12985     if test "$QMAKE6" = "no"; then
12986         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
12987     else
12988         qmake6_test_ver="`$QMAKE6 -v 2>&1 | $SED -n -e 's/^Using Qt version \(6\.[[0-9.]]\+\).*$/\1/p'`"
12989         if test -z "$qmake6_test_ver"; then
12990             AC_MSG_ERROR([Wrong qmake for Qt6 found. Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
12991         fi
12992         AC_MSG_NOTICE([Detected Qt6 version: $qmake6_test_ver])
12993     fi
12995     qt6_incdirs="`$QMAKE6 -query QT_INSTALL_HEADERS` $qt6_incdirs"
12996     qt6_libdirs="`$QMAKE6 -query QT_INSTALL_LIBS` $qt6_libdirs"
12997     qt6_platformsdir="`$QMAKE6 -query QT_INSTALL_PLUGINS`/platforms"
12998     QT6_PLATFORMS_SRCDIR="$qt6_platformsdir"
13000     AC_MSG_CHECKING([for Qt6 headers])
13001     qt6_incdir="no"
13002     for inc_dir in $qt6_incdirs; do
13003         if test -r "$inc_dir/$qt6_test_include"; then
13004             qt6_incdir="$inc_dir"
13005             break
13006         fi
13007     done
13008     AC_MSG_RESULT([$qt6_incdir])
13009     if test "x$qt6_incdir" = "xno"; then
13010         AC_MSG_ERROR([Qt6 headers not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13011     fi
13012     # check for scenario: qt6-qtbase-devel-*.86_64 installed but host is i686
13013     AC_LANG_PUSH([C++])
13014     save_CPPFLAGS=$CPPFLAGS
13015     CPPFLAGS="${CPPFLAGS} -I${qt6_incdir}"
13016     AC_CHECK_HEADER(QtCore/qconfig.h, [],
13017         [AC_MSG_ERROR(qconfig.h header not found.)], [])
13018     CPPFLAGS=$save_CPPFLAGS
13019     AC_LANG_POP([C++])
13021     AC_MSG_CHECKING([for Qt6 libraries])
13022     qt6_libdir="no"
13023     for lib_dir in $qt6_libdirs; do
13024         if test -r "$lib_dir/$qt6_test_library"; then
13025             qt6_libdir="$lib_dir"
13026             break
13027         fi
13028     done
13029     AC_MSG_RESULT([$qt6_libdir])
13030     if test "x$qt6_libdir" = "xno"; then
13031         AC_MSG_ERROR([Qt6 libraries not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13032     fi
13034     if test "$_os" = "Emscripten"; then
13035         if test ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html ; then
13036             QT6_PLATFORMS_SRCDIR="${QT6_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
13037         fi
13038         if test ! -f "${qt6_platformsdir}"/libqwasm.a -o ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html; then
13039             AC_MSG_ERROR([No Qt6 WASM QPA plugin found in ${qt6_platformsdir} or ${QT6_PLATFORMS_SRCDIR}])
13040         fi
13041     fi
13043     QT6_CFLAGS="-I$qt6_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13044     QT6_CFLAGS=$(printf '%s' "$QT6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13045     QT6_LIBS="-L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
13046     if test "$_os" = "Emscripten"; then
13047         QT6_LIBS="$QT6_LIBS -lqtpcre2 -lQt6EventDispatcherSupport -lQt6FontDatabaseSupport -L${qt6_platformsdir} -lqwasm"
13048     fi
13050     if test "$USING_X11" = TRUE; then
13051         PKG_CHECK_MODULES(QT6_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for key modifier handling in X11.])])
13052         QT6_CFLAGS="$QT6_CFLAGS $QT6_XCB_CFLAGS"
13053         QT6_LIBS="$QT6_LIBS $QT6_XCB_LIBS"
13054         QT6_USING_X11=1
13055         AC_DEFINE(QT6_USING_X11)
13056     fi
13058     dnl Check for Meta Object Compiler
13060     AC_PATH_PROGS( MOC6, [moc-qt6 moc], no, [`dirname $qt6_libdir`/libexec:$QT6DIR/libexec:$PATH])
13061     if test "$MOC6" = "no"; then
13062         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13063 the root of your Qt installation by exporting QT6DIR before running "configure".])
13064     fi
13066 AC_SUBST(QT6_CFLAGS)
13067 AC_SUBST(QT6_LIBS)
13068 AC_SUBST(MOC6)
13069 AC_SUBST(QT6_PLATFORMS_SRCDIR)
13071 dnl ===================================================================
13072 dnl KF5 Integration
13073 dnl ===================================================================
13075 KF5_CFLAGS=""
13076 KF5_LIBS=""
13077 KF5_CONFIG="kf5-config"
13078 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13079         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13080 then
13081     if test "$OS" = "HAIKU"; then
13082         haiku_arch="`echo $RTL_ARCH | tr X x`"
13083         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13084         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13085     fi
13087     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
13088     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
13089     if test -n "$supports_multilib"; then
13090         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
13091     fi
13093     kf5_test_include="KF5/KIOFileWidgets/KFileWidget"
13094     kf5_test_library="libKF5KIOFileWidgets.so"
13095     kf5_libdirs="$qt5_libdir $kf5_libdirs"
13097     dnl kf5 KDE4 support compatibility installed
13098     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
13099     if test "$KF5_CONFIG" != "no"; then
13100         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
13101         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
13102     fi
13104     dnl Check for KF5 headers
13105     AC_MSG_CHECKING([for KF5 headers])
13106     kf5_incdir="no"
13107     for kf5_check in $kf5_incdirs; do
13108         if test -r "$kf5_check/$kf5_test_include"; then
13109             kf5_incdir="$kf5_check/KF5"
13110             break
13111         fi
13112     done
13113     AC_MSG_RESULT([$kf5_incdir])
13114     if test "x$kf5_incdir" = "xno"; then
13115         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13116     fi
13118     dnl Check for KF5 libraries
13119     AC_MSG_CHECKING([for KF5 libraries])
13120     kf5_libdir="no"
13121     for kf5_check in $kf5_libdirs; do
13122         if test -r "$kf5_check/$kf5_test_library"; then
13123             kf5_libdir="$kf5_check"
13124             break
13125         fi
13126     done
13128     AC_MSG_RESULT([$kf5_libdir])
13129     if test "x$kf5_libdir" = "xno"; then
13130         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13131     fi
13133     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"
13134     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13135     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13137     if test "$USING_X11" = TRUE; then
13138         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
13139     fi
13141     AC_LANG_PUSH([C++])
13142     save_CXXFLAGS=$CXXFLAGS
13143     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
13144     AC_MSG_CHECKING([whether KDE is >= 5.0])
13145        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13146 #include <kcoreaddons_version.h>
13148 int main(int argc, char **argv) {
13149        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
13150        else return 1;
13152        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13153     CXXFLAGS=$save_CXXFLAGS
13154     AC_LANG_POP([C++])
13156 AC_SUBST(KF5_CFLAGS)
13157 AC_SUBST(KF5_LIBS)
13159 dnl ===================================================================
13160 dnl Test whether to include Evolution 2 support
13161 dnl ===================================================================
13162 AC_MSG_CHECKING([whether to enable evolution 2 support])
13163 if test "$enable_evolution2" = yes; then
13164     AC_MSG_RESULT([yes])
13165     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
13166     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13167     FilterLibs "${GOBJECT_LIBS}"
13168     GOBJECT_LIBS="${filteredlibs}"
13169     ENABLE_EVOAB2="TRUE"
13170 else
13171     AC_MSG_RESULT([no])
13173 AC_SUBST(ENABLE_EVOAB2)
13174 AC_SUBST(GOBJECT_CFLAGS)
13175 AC_SUBST(GOBJECT_LIBS)
13177 dnl ===================================================================
13178 dnl Test which themes to include
13179 dnl ===================================================================
13180 AC_MSG_CHECKING([which themes to include])
13181 # if none given use default subset of available themes
13182 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
13183     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"
13186 WITH_THEMES=""
13187 if test "x$with_theme" != "xno"; then
13188     for theme in $with_theme; do
13189         case $theme in
13190         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" ;;
13191         default) real_theme=colibre ;;
13192         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
13193         esac
13194         WITH_THEMES=`echo "$WITH_THEMES $real_theme"|tr '\ ' '\n'|sort|uniq|tr '\n' '\ '`
13195     done
13197 AC_MSG_RESULT([$WITH_THEMES])
13198 AC_SUBST([WITH_THEMES])
13199 # FIXME: remove this, and the convenience default->colibre remapping after a grace period
13200 for theme in $with_theme; do
13201     case $theme in
13202     default) AC_MSG_WARN([--with-theme=default is deprecated and will be removed, use --with-theme=colibre]) ;;
13203     *) ;;
13204     esac
13205 done
13207 ###############################################################################
13208 # Extensions checking
13209 ###############################################################################
13210 AC_MSG_CHECKING([for extensions integration])
13211 if test "x$enable_extension_integration" != "xno"; then
13212     WITH_EXTENSION_INTEGRATION=TRUE
13213     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
13214     AC_MSG_RESULT([yes, use integration])
13215 else
13216     WITH_EXTENSION_INTEGRATION=
13217     AC_MSG_RESULT([no, do not integrate])
13219 AC_SUBST(WITH_EXTENSION_INTEGRATION)
13221 dnl Should any extra extensions be included?
13222 dnl There are standalone tests for each of these below.
13223 WITH_EXTRA_EXTENSIONS=
13224 AC_SUBST([WITH_EXTRA_EXTENSIONS])
13226 libo_CHECK_EXTENSION([ConvertTextToNumber],[CT2N],[ct2n],[ct2n],[])
13227 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
13228 if test "x$with_java" != "xno"; then
13229     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
13230     libo_CHECK_EXTENSION([LanguageTool],[LANGUAGETOOL],[languagetool],[languagetool],[])
13233 AC_MSG_CHECKING([whether to build opens___.ttf])
13234 if test "$enable_build_opensymbol" = "yes"; then
13235     AC_MSG_RESULT([yes])
13236     AC_PATH_PROG(FONTFORGE, fontforge)
13237     if test -z "$FONTFORGE"; then
13238         AC_MSG_ERROR([fontforge not installed])
13239     fi
13240 else
13241     AC_MSG_RESULT([no])
13242     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
13244 AC_SUBST(FONTFORGE)
13246 dnl ===================================================================
13247 dnl Test whether to include fonts
13248 dnl ===================================================================
13249 AC_MSG_CHECKING([whether to include third-party fonts])
13250 if test "$with_fonts" != "no"; then
13251     AC_MSG_RESULT([yes])
13252     WITH_FONTS=TRUE
13253     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
13254     AC_DEFINE(HAVE_MORE_FONTS)
13255 else
13256     AC_MSG_RESULT([no])
13257     WITH_FONTS=
13258     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
13260 AC_SUBST(WITH_FONTS)
13263 dnl ===================================================================
13264 dnl Test whether to enable online update service
13265 dnl ===================================================================
13266 AC_MSG_CHECKING([whether to enable online update])
13267 ENABLE_ONLINE_UPDATE=
13268 ENABLE_ONLINE_UPDATE_MAR=
13269 UPDATE_CONFIG=
13270 if test "$enable_online_update" = ""; then
13271     AC_MSG_RESULT([no])
13272 else
13273     if test "$enable_online_update" = "mar"; then
13274         AC_MSG_RESULT([yes - MAR-based online update])
13275         ENABLE_ONLINE_UPDATE_MAR="TRUE"
13276         if test "$with_update_config" = ""; then
13277             AC_MSG_ERROR([mar based online updater needs an update config specified with "with-update-config])
13278         fi
13279         UPDATE_CONFIG="$with_update_config"
13280         AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
13281     elif test "$enable_online_update" = "yes"; then
13282         AC_MSG_RESULT([yes])
13283         ENABLE_ONLINE_UPDATE="TRUE"
13284     else
13285         AC_MSG_RESULT([no])
13286     fi
13288 AC_SUBST(ENABLE_ONLINE_UPDATE)
13289 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
13290 AC_SUBST(UPDATE_CONFIG)
13293 PRIVACY_POLICY_URL="$with_privacy_policy_url"
13294 if test "$ENABLE_ONLINE_UPDATE" = TRUE -o "$ENABLE_BREAKPAD" = "TRUE"; then
13295     if test "x$with_privacy_policy_url" = "xundefined"; then
13296         AC_MSG_FAILURE([online update or breakpad/crashreporting are enabled, but no --with-privacy-policy-url=... was provided])
13297     fi
13299 AC_SUBST(PRIVACY_POLICY_URL)
13300 dnl ===================================================================
13301 dnl Test whether we need bzip2
13302 dnl ===================================================================
13303 SYSTEM_BZIP2=
13304 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE"; then
13305     AC_MSG_CHECKING([whether to use system bzip2])
13306     if test "$with_system_bzip2" = yes; then
13307         SYSTEM_BZIP2=TRUE
13308         AC_MSG_RESULT([yes])
13309         PKG_CHECK_MODULES(BZIP2, bzip2)
13310         FilterLibs "${BZIP2_LIBS}"
13311         BZIP2_LIBS="${filteredlibs}"
13312     else
13313         AC_MSG_RESULT([no])
13314         BUILD_TYPE="$BUILD_TYPE BZIP2"
13315     fi
13317 AC_SUBST(SYSTEM_BZIP2)
13318 AC_SUBST(BZIP2_CFLAGS)
13319 AC_SUBST(BZIP2_LIBS)
13321 dnl ===================================================================
13322 dnl Test whether to enable extension update
13323 dnl ===================================================================
13324 AC_MSG_CHECKING([whether to enable extension update])
13325 ENABLE_EXTENSION_UPDATE=
13326 if test "x$enable_extension_update" = "xno"; then
13327     AC_MSG_RESULT([no])
13328 else
13329     AC_MSG_RESULT([yes])
13330     ENABLE_EXTENSION_UPDATE="TRUE"
13331     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
13332     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
13334 AC_SUBST(ENABLE_EXTENSION_UPDATE)
13337 dnl ===================================================================
13338 dnl Test whether to create MSI with LIMITUI=1 (silent install)
13339 dnl ===================================================================
13340 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
13341 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
13342     AC_MSG_RESULT([no])
13343     ENABLE_SILENT_MSI=
13344 else
13345     AC_MSG_RESULT([yes])
13346     ENABLE_SILENT_MSI=TRUE
13347     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
13349 AC_SUBST(ENABLE_SILENT_MSI)
13351 AC_MSG_CHECKING([whether and how to use Xinerama])
13352 if test "$_os" = "Linux" -o "$_os" = "FreeBSD"; then
13353     if test "$x_libraries" = "default_x_libraries"; then
13354         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
13355         if test "x$XINERAMALIB" = x; then
13356            XINERAMALIB="/usr/lib"
13357         fi
13358     else
13359         XINERAMALIB="$x_libraries"
13360     fi
13361     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13362         # we have both versions, let the user decide but use the dynamic one
13363         # per default
13364         USE_XINERAMA=TRUE
13365         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13366             XINERAMA_LINK=dynamic
13367         else
13368             XINERAMA_LINK=static
13369         fi
13370     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13371         # we have only the dynamic version
13372         USE_XINERAMA=TRUE
13373         XINERAMA_LINK=dynamic
13374     elif test -e "$XINERAMALIB/libXinerama.a"; then
13375         # static version
13376         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13377             USE_XINERAMA=TRUE
13378             XINERAMA_LINK=static
13379         else
13380             USE_XINERAMA=
13381             XINERAMA_LINK=none
13382         fi
13383     else
13384         # no Xinerama
13385         USE_XINERAMA=
13386         XINERAMA_LINK=none
13387     fi
13388     if test "$USE_XINERAMA" = "TRUE"; then
13389         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13390         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13391             [AC_MSG_ERROR(Xinerama header not found.)], [])
13392         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13393         if test "x$XEXTLIB" = x; then
13394            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13395         fi
13396         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13397         if test "$_os" = "FreeBSD"; then
13398             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13399         fi
13400         if test "$_os" = "Linux"; then
13401             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13402         fi
13403         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13404             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13405     else
13406         AC_MSG_RESULT([no, libXinerama not found or wrong architecture.])
13407     fi
13408 else
13409     USE_XINERAMA=
13410     XINERAMA_LINK=none
13411     AC_MSG_RESULT([no])
13413 AC_SUBST(USE_XINERAMA)
13414 AC_SUBST(XINERAMA_LINK)
13416 dnl ===================================================================
13417 dnl Test whether to build cairo or rely on the system version
13418 dnl ===================================================================
13420 if test "$test_cairo" = "yes"; then
13421     AC_MSG_CHECKING([whether to use the system cairo])
13423     : ${with_system_cairo:=$with_system_libs}
13424     if test "$with_system_cairo" = "yes"; then
13425         SYSTEM_CAIRO=TRUE
13426         AC_MSG_RESULT([yes])
13428         PKG_CHECK_MODULES( CAIRO, cairo >= 1.8.0 )
13429         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13430         FilterLibs "${CAIRO_LIBS}"
13431         CAIRO_LIBS="${filteredlibs}"
13433         if test "$test_xrender" = "yes"; then
13434             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13435             AC_LANG_PUSH([C])
13436             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13437 #ifdef PictStandardA8
13438 #else
13439       return fail;
13440 #endif
13441 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13443             AC_LANG_POP([C])
13444         fi
13445     else
13446         AC_MSG_RESULT([no])
13447         BUILD_TYPE="$BUILD_TYPE CAIRO"
13448     fi
13450     if test "$enable_cairo_canvas" != no; then
13451         AC_DEFINE(ENABLE_CAIRO_CANVAS)
13452         ENABLE_CAIRO_CANVAS=TRUE
13453     fi
13456 AC_SUBST(CAIRO_CFLAGS)
13457 AC_SUBST(CAIRO_LIBS)
13458 AC_SUBST(ENABLE_CAIRO_CANVAS)
13459 AC_SUBST(SYSTEM_CAIRO)
13461 dnl ===================================================================
13462 dnl Test whether to use avahi
13463 dnl ===================================================================
13464 if test "$_os" = "WINNT"; then
13465     # Windows uses bundled mDNSResponder
13466     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13467 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13468     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13469                       [ENABLE_AVAHI="TRUE"])
13470     AC_DEFINE(HAVE_FEATURE_AVAHI)
13471     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13472     FilterLibs "${AVAHI_LIBS}"
13473     AVAHI_LIBS="${filteredlibs}"
13476 AC_SUBST(ENABLE_AVAHI)
13477 AC_SUBST(AVAHI_CFLAGS)
13478 AC_SUBST(AVAHI_LIBS)
13480 dnl ===================================================================
13481 dnl Test whether to use liblangtag
13482 dnl ===================================================================
13483 SYSTEM_LIBLANGTAG=
13484 AC_MSG_CHECKING([whether to use system liblangtag])
13485 if test "$with_system_liblangtag" = yes; then
13486     SYSTEM_LIBLANGTAG=TRUE
13487     AC_MSG_RESULT([yes])
13488     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
13489     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
13490     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
13491     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13492     FilterLibs "${LIBLANGTAG_LIBS}"
13493     LIBLANGTAG_LIBS="${filteredlibs}"
13494 else
13495     SYSTEM_LIBLANGTAG=
13496     AC_MSG_RESULT([no])
13497     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
13498     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
13499     if test "$COM" = "MSC"; then
13500         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
13501     else
13502         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
13503     fi
13505 AC_SUBST(SYSTEM_LIBLANGTAG)
13506 AC_SUBST(LIBLANGTAG_CFLAGS)
13507 AC_SUBST(LIBLANGTAG_LIBS)
13509 dnl ===================================================================
13510 dnl Test whether to build libpng or rely on the system version
13511 dnl ===================================================================
13513 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng],["-I${WORKDIR}/UnpackedTarball/libpng"],["-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"])
13515 dnl ===================================================================
13516 dnl Check for runtime JVM search path
13517 dnl ===================================================================
13518 if test "$ENABLE_JAVA" != ""; then
13519     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
13520     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
13521         AC_MSG_RESULT([yes])
13522         if ! test -d "$with_jvm_path"; then
13523             AC_MSG_ERROR(["$with_jvm_path" not a directory])
13524         fi
13525         if ! test -d "$with_jvm_path"jvm; then
13526             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
13527         fi
13528         JVM_ONE_PATH_CHECK="$with_jvm_path"
13529         AC_SUBST(JVM_ONE_PATH_CHECK)
13530     else
13531         AC_MSG_RESULT([no])
13532     fi
13535 dnl ===================================================================
13536 dnl Test for the presence of Ant and that it works
13537 dnl ===================================================================
13539 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
13540     ANT_HOME=; export ANT_HOME
13541     WITH_ANT_HOME=; export WITH_ANT_HOME
13542     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
13543         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
13544             if test "$_os" = "WINNT"; then
13545                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
13546             else
13547                 with_ant_home="$LODE_HOME/opt/ant"
13548             fi
13549         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
13550             with_ant_home="$LODE_HOME/opt/ant"
13551         fi
13552     fi
13553     if test -z "$with_ant_home"; then
13554         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
13555     else
13556         if test "$_os" = "WINNT"; then
13557             # AC_PATH_PROGS needs unix path
13558             with_ant_home=`cygpath -u "$with_ant_home"`
13559         fi
13560         AbsolutePath "$with_ant_home"
13561         with_ant_home=$absolute_path
13562         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
13563         WITH_ANT_HOME=$with_ant_home
13564         ANT_HOME=$with_ant_home
13565     fi
13567     if test -z "$ANT"; then
13568         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
13569     else
13570         # resolve relative or absolute symlink
13571         while test -h "$ANT"; do
13572             a_cwd=`pwd`
13573             a_basename=`basename "$ANT"`
13574             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
13575             cd "`dirname "$ANT"`"
13576             cd "`dirname "$a_script"`"
13577             ANT="`pwd`"/"`basename "$a_script"`"
13578             cd "$a_cwd"
13579         done
13581         AC_MSG_CHECKING([if $ANT works])
13582         mkdir -p conftest.dir
13583         a_cwd=$(pwd)
13584         cd conftest.dir
13585         cat > conftest.java << EOF
13586         public class conftest {
13587             int testmethod(int a, int b) {
13588                     return a + b;
13589             }
13590         }
13593         cat > conftest.xml << EOF
13594         <project name="conftest" default="conftest">
13595         <target name="conftest">
13596             <javac srcdir="." includes="conftest.java">
13597             </javac>
13598         </target>
13599         </project>
13602         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
13603         if test $? = 0 -a -f ./conftest.class; then
13604             AC_MSG_RESULT([Ant works])
13605             if test -z "$WITH_ANT_HOME"; then
13606                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
13607                 if test -z "$ANT_HOME"; then
13608                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
13609                 fi
13610             else
13611                 ANT_HOME="$WITH_ANT_HOME"
13612             fi
13613         else
13614             echo "configure: Ant test failed" >&5
13615             cat conftest.java >&5
13616             cat conftest.xml >&5
13617             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
13618         fi
13619         cd "$a_cwd"
13620         rm -fr conftest.dir
13621     fi
13622     if test -z "$ANT_HOME"; then
13623         ANT_HOME="NO_ANT_HOME"
13624     else
13625         PathFormat "$ANT_HOME"
13626         ANT_HOME="$formatted_path"
13627         PathFormat "$ANT"
13628         ANT="$formatted_path"
13629     fi
13631     dnl Checking for ant.jar
13632     if test "$ANT_HOME" != "NO_ANT_HOME"; then
13633         AC_MSG_CHECKING([Ant lib directory])
13634         if test -f $ANT_HOME/lib/ant.jar; then
13635             ANT_LIB="$ANT_HOME/lib"
13636         else
13637             if test -f $ANT_HOME/ant.jar; then
13638                 ANT_LIB="$ANT_HOME"
13639             else
13640                 if test -f /usr/share/java/ant.jar; then
13641                     ANT_LIB=/usr/share/java
13642                 else
13643                     if test -f /usr/share/ant-core/lib/ant.jar; then
13644                         ANT_LIB=/usr/share/ant-core/lib
13645                     else
13646                         if test -f $ANT_HOME/lib/ant/ant.jar; then
13647                             ANT_LIB="$ANT_HOME/lib/ant"
13648                         else
13649                             if test -f /usr/share/lib/ant/ant.jar; then
13650                                 ANT_LIB=/usr/share/lib/ant
13651                             else
13652                                 AC_MSG_ERROR([Ant libraries not found!])
13653                             fi
13654                         fi
13655                     fi
13656                 fi
13657             fi
13658         fi
13659         PathFormat "$ANT_LIB"
13660         ANT_LIB="$formatted_path"
13661         AC_MSG_RESULT([Ant lib directory found.])
13662     fi
13664     ant_minver=1.6.0
13665     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
13667     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
13668     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
13669     ant_version_major=`echo $ant_version | cut -d. -f1`
13670     ant_version_minor=`echo $ant_version | cut -d. -f2`
13671     echo "configure: ant_version $ant_version " >&5
13672     echo "configure: ant_version_major $ant_version_major " >&5
13673     echo "configure: ant_version_minor $ant_version_minor " >&5
13674     if test "$ant_version_major" -ge "2"; then
13675         AC_MSG_RESULT([yes, $ant_version])
13676     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
13677         AC_MSG_RESULT([yes, $ant_version])
13678     else
13679         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
13680     fi
13682     rm -f conftest* core core.* *.core
13684 AC_SUBST(ANT)
13685 AC_SUBST(ANT_HOME)
13686 AC_SUBST(ANT_LIB)
13688 OOO_JUNIT_JAR=
13689 HAMCREST_JAR=
13690 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
13691     AC_MSG_CHECKING([for JUnit 4])
13692     if test "$with_junit" = "yes"; then
13693         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
13694             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
13695         elif test -e /usr/share/java/junit4.jar; then
13696             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
13697         else
13698            if test -e /usr/share/lib/java/junit.jar; then
13699               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
13700            else
13701               OOO_JUNIT_JAR=/usr/share/java/junit.jar
13702            fi
13703         fi
13704     else
13705         OOO_JUNIT_JAR=$with_junit
13706     fi
13707     if test "$_os" = "WINNT"; then
13708         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
13709     fi
13710     printf 'import org.junit.Before;' > conftest.java
13711     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13712         AC_MSG_RESULT([$OOO_JUNIT_JAR])
13713     else
13714         AC_MSG_ERROR(
13715 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
13716  specify its pathname via --with-junit=..., or disable it via --without-junit])
13717     fi
13718     rm -f conftest.class conftest.java
13719     if test $OOO_JUNIT_JAR != ""; then
13720         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
13721     fi
13723     AC_MSG_CHECKING([for included Hamcrest])
13724     printf 'import org.hamcrest.BaseDescription;' > conftest.java
13725     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13726         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
13727     else
13728         AC_MSG_RESULT([Not included])
13729         AC_MSG_CHECKING([for standalone hamcrest jar.])
13730         if test "$with_hamcrest" = "yes"; then
13731             if test -e /usr/share/lib/java/hamcrest.jar; then
13732                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
13733             elif test -e /usr/share/java/hamcrest/core.jar; then
13734                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
13735             elif test -e /usr/share/java/hamcrest/hamcrest.jar; then
13736                 HAMCREST_JAR=/usr/share/java/hamcrest/hamcrest.jar
13737             else
13738                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
13739             fi
13740         else
13741             HAMCREST_JAR=$with_hamcrest
13742         fi
13743         if test "$_os" = "WINNT"; then
13744             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
13745         fi
13746         if "$JAVACOMPILER" -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
13747             AC_MSG_RESULT([$HAMCREST_JAR])
13748         else
13749             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),
13750                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
13751         fi
13752     fi
13753     rm -f conftest.class conftest.java
13755 AC_SUBST(OOO_JUNIT_JAR)
13756 AC_SUBST(HAMCREST_JAR)
13759 AC_SUBST(SCPDEFS)
13762 # check for wget and curl
13764 WGET=
13765 CURL=
13767 if test "$enable_fetch_external" != "no"; then
13769 CURL=`which curl 2>/dev/null`
13771 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
13772     # wget new enough?
13773     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
13774     if test $? -eq 0; then
13775         WGET=$i
13776         break
13777     fi
13778 done
13780 if test -z "$WGET" -a -z "$CURL"; then
13781     AC_MSG_ERROR([neither wget nor curl found!])
13786 AC_SUBST(WGET)
13787 AC_SUBST(CURL)
13790 # check for sha256sum
13792 SHA256SUM=
13794 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
13795     eval "$i -a 256 --version" > /dev/null 2>&1
13796     ret=$?
13797     if test $ret -eq 0; then
13798         SHA256SUM="$i -a 256"
13799         break
13800     fi
13801 done
13803 if test -z "$SHA256SUM"; then
13804     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
13805         eval "$i --version" > /dev/null 2>&1
13806         ret=$?
13807         if test $ret -eq 0; then
13808             SHA256SUM=$i
13809             break
13810         fi
13811     done
13814 if test -z "$SHA256SUM"; then
13815     AC_MSG_ERROR([no sha256sum found!])
13818 AC_SUBST(SHA256SUM)
13820 dnl ===================================================================
13821 dnl Dealing with l10n options
13822 dnl ===================================================================
13823 AC_MSG_CHECKING([which languages to be built])
13824 # get list of all languages
13825 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
13826 # the sed command does the following:
13827 #   + if a line ends with a backslash, append the next line to it
13828 #   + adds " on the beginning of the value (after =)
13829 #   + adds " at the end of the value
13830 #   + removes en-US; we want to put it on the beginning
13831 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
13832 [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)]
13833 ALL_LANGS="en-US $completelangiso"
13834 # check the configured localizations
13835 WITH_LANG="$with_lang"
13837 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
13838 # (Norwegian is "nb" and "nn".)
13839 if test "$WITH_LANG" = "no"; then
13840     WITH_LANG=
13843 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
13844     AC_MSG_RESULT([en-US])
13845 else
13846     AC_MSG_RESULT([$WITH_LANG])
13847     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
13848     if test -z "$MSGFMT"; then
13849         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
13850             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
13851         elif test -x "/opt/lo/bin/msgfmt"; then
13852             MSGFMT="/opt/lo/bin/msgfmt"
13853         else
13854             AC_CHECK_PROGS(MSGFMT, [msgfmt])
13855             if test -z "$MSGFMT"; then
13856                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
13857             fi
13858         fi
13859     fi
13860     if test -z "$MSGUNIQ"; then
13861         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
13862             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
13863         elif test -x "/opt/lo/bin/msguniq"; then
13864             MSGUNIQ="/opt/lo/bin/msguniq"
13865         else
13866             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
13867             if test -z "$MSGUNIQ"; then
13868                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
13869             fi
13870         fi
13871     fi
13873 AC_SUBST(MSGFMT)
13874 AC_SUBST(MSGUNIQ)
13875 # check that the list is valid
13876 for lang in $WITH_LANG; do
13877     test "$lang" = "ALL" && continue
13878     # need to check for the exact string, so add space before and after the list of all languages
13879     for vl in $ALL_LANGS; do
13880         if test "$vl" = "$lang"; then
13881            break
13882         fi
13883     done
13884     if test "$vl" != "$lang"; then
13885         # if you're reading this - you prolly quoted your languages remove the quotes ...
13886         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
13887     fi
13888 done
13889 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
13890     echo $WITH_LANG | grep -q en-US
13891     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
13893 # list with substituted ALL
13894 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
13895 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
13896 test "$WITH_LANG" = "en-US" && WITH_LANG=
13897 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
13898     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
13899     ALL_LANGS=`echo $ALL_LANGS qtz`
13901 AC_SUBST(ALL_LANGS)
13902 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
13903 AC_SUBST(WITH_LANG)
13904 AC_SUBST(WITH_LANG_LIST)
13905 AC_SUBST(GIT_NEEDED_SUBMODULES)
13907 WITH_POOR_HELP_LOCALIZATIONS=
13908 if test -d "$SRC_ROOT/translations/source"; then
13909     for l in `ls -1 $SRC_ROOT/translations/source`; do
13910         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
13911             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
13912         fi
13913     done
13915 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
13917 if test -n "$with_locales"; then
13918     WITH_LOCALES="$with_locales"
13920     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
13921     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
13922     # config_host/config_locales.h.in
13923     for locale in $WITH_LOCALES; do
13924         lang=${locale%_*}
13926         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
13928         case $lang in
13929         hi|mr*ne)
13930             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
13931             ;;
13932         bg|ru)
13933             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
13934             ;;
13935         esac
13936     done
13937 else
13938     AC_DEFINE(WITH_LOCALE_ALL)
13940 AC_SUBST(WITH_LOCALES)
13942 dnl git submodule update --reference
13943 dnl ===================================================================
13944 if test -n "${GIT_REFERENCE_SRC}"; then
13945     for repo in ${GIT_NEEDED_SUBMODULES}; do
13946         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
13947             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
13948         fi
13949     done
13951 AC_SUBST(GIT_REFERENCE_SRC)
13953 dnl git submodules linked dirs
13954 dnl ===================================================================
13955 if test -n "${GIT_LINK_SRC}"; then
13956     for repo in ${GIT_NEEDED_SUBMODULES}; do
13957         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
13958             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
13959         fi
13960     done
13962 AC_SUBST(GIT_LINK_SRC)
13964 dnl branding
13965 dnl ===================================================================
13966 AC_MSG_CHECKING([for alternative branding images directory])
13967 # initialize mapped arrays
13968 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
13969 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
13971 if test -z "$with_branding" -o "$with_branding" = "no"; then
13972     AC_MSG_RESULT([none])
13973     DEFAULT_BRAND_IMAGES="$brand_files"
13974 else
13975     if ! test -d $with_branding ; then
13976         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
13977     else
13978         AC_MSG_RESULT([$with_branding])
13979         CUSTOM_BRAND_DIR="$with_branding"
13980         for lfile in $brand_files
13981         do
13982             if ! test -f $with_branding/$lfile ; then
13983                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
13984                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
13985             else
13986                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
13987             fi
13988         done
13989         check_for_progress="yes"
13990     fi
13992 AC_SUBST([BRAND_INTRO_IMAGES])
13993 AC_SUBST([CUSTOM_BRAND_DIR])
13994 AC_SUBST([CUSTOM_BRAND_IMAGES])
13995 AC_SUBST([DEFAULT_BRAND_IMAGES])
13998 AC_MSG_CHECKING([for 'intro' progress settings])
13999 PROGRESSBARCOLOR=
14000 PROGRESSSIZE=
14001 PROGRESSPOSITION=
14002 PROGRESSFRAMECOLOR=
14003 PROGRESSTEXTCOLOR=
14004 PROGRESSTEXTBASELINE=
14006 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
14007     source "$with_branding/progress.conf"
14008     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
14009 else
14010     AC_MSG_RESULT([none])
14013 AC_SUBST(PROGRESSBARCOLOR)
14014 AC_SUBST(PROGRESSSIZE)
14015 AC_SUBST(PROGRESSPOSITION)
14016 AC_SUBST(PROGRESSFRAMECOLOR)
14017 AC_SUBST(PROGRESSTEXTCOLOR)
14018 AC_SUBST(PROGRESSTEXTBASELINE)
14021 dnl ===================================================================
14022 dnl Custom build version
14023 dnl ===================================================================
14024 AC_MSG_CHECKING([for extra build ID])
14025 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
14026     EXTRA_BUILDID="$with_extra_buildid"
14028 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
14029 if test -n "$EXTRA_BUILDID" ; then
14030     AC_MSG_RESULT([$EXTRA_BUILDID])
14031 else
14032     AC_MSG_RESULT([not set])
14034 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
14036 OOO_VENDOR=
14037 AC_MSG_CHECKING([for vendor])
14038 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
14039     OOO_VENDOR="$USERNAME"
14041     if test -z "$OOO_VENDOR"; then
14042         OOO_VENDOR="$USER"
14043     fi
14045     if test -z "$OOO_VENDOR"; then
14046         OOO_VENDOR="`id -u -n`"
14047     fi
14049     AC_MSG_RESULT([not set, using $OOO_VENDOR])
14050 else
14051     OOO_VENDOR="$with_vendor"
14052     AC_MSG_RESULT([$OOO_VENDOR])
14054 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
14055 AC_SUBST(OOO_VENDOR)
14057 if test "$_os" = "Android" ; then
14058     ANDROID_PACKAGE_NAME=
14059     AC_MSG_CHECKING([for Android package name])
14060     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
14061         if test -n "$ENABLE_DEBUG"; then
14062             # Default to the package name that makes ndk-gdb happy.
14063             ANDROID_PACKAGE_NAME="org.libreoffice"
14064         else
14065             ANDROID_PACKAGE_NAME="org.example.libreoffice"
14066         fi
14068         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
14069     else
14070         ANDROID_PACKAGE_NAME="$with_android_package_name"
14071         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
14072     fi
14073     AC_SUBST(ANDROID_PACKAGE_NAME)
14076 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
14077 if test "$with_compat_oowrappers" = "yes"; then
14078     WITH_COMPAT_OOWRAPPERS=TRUE
14079     AC_MSG_RESULT(yes)
14080 else
14081     WITH_COMPAT_OOWRAPPERS=
14082     AC_MSG_RESULT(no)
14084 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
14086 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{print tolower($0)}'`
14087 AC_MSG_CHECKING([for install dirname])
14088 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
14089     INSTALLDIRNAME="$with_install_dirname"
14091 AC_MSG_RESULT([$INSTALLDIRNAME])
14092 AC_SUBST(INSTALLDIRNAME)
14094 AC_MSG_CHECKING([for prefix])
14095 test "x$prefix" = xNONE && prefix=$ac_default_prefix
14096 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
14097 PREFIXDIR="$prefix"
14098 AC_MSG_RESULT([$PREFIXDIR])
14099 AC_SUBST(PREFIXDIR)
14101 LIBDIR=[$(eval echo $(eval echo $libdir))]
14102 AC_SUBST(LIBDIR)
14104 DATADIR=[$(eval echo $(eval echo $datadir))]
14105 AC_SUBST(DATADIR)
14107 MANDIR=[$(eval echo $(eval echo $mandir))]
14108 AC_SUBST(MANDIR)
14110 DOCDIR=[$(eval echo $(eval echo $docdir))]
14111 AC_SUBST(DOCDIR)
14113 BINDIR=[$(eval echo $(eval echo $bindir))]
14114 AC_SUBST(BINDIR)
14116 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
14117 AC_SUBST(INSTALLDIR)
14119 TESTINSTALLDIR="${BUILDDIR}/test-install"
14120 AC_SUBST(TESTINSTALLDIR)
14123 # ===================================================================
14124 # OAuth2 id and secrets
14125 # ===================================================================
14127 AC_MSG_CHECKING([for Google Drive client id and secret])
14128 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
14129     AC_MSG_RESULT([not set])
14130     GDRIVE_CLIENT_ID="\"\""
14131     GDRIVE_CLIENT_SECRET="\"\""
14132 else
14133     AC_MSG_RESULT([set])
14134     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
14135     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
14137 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
14138 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
14140 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
14141 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
14142     AC_MSG_RESULT([not set])
14143     ALFRESCO_CLOUD_CLIENT_ID="\"\""
14144     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
14145 else
14146     AC_MSG_RESULT([set])
14147     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
14148     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
14150 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
14151 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
14153 AC_MSG_CHECKING([for OneDrive client id and secret])
14154 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
14155     AC_MSG_RESULT([not set])
14156     ONEDRIVE_CLIENT_ID="\"\""
14157     ONEDRIVE_CLIENT_SECRET="\"\""
14158 else
14159     AC_MSG_RESULT([set])
14160     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
14161     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
14163 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
14164 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
14167 dnl ===================================================================
14168 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
14169 dnl --enable-dependency-tracking configure option
14170 dnl ===================================================================
14171 AC_MSG_CHECKING([whether to enable dependency tracking])
14172 if test "$enable_dependency_tracking" = "no"; then
14173     nodep=TRUE
14174     AC_MSG_RESULT([no])
14175 else
14176     AC_MSG_RESULT([yes])
14178 AC_SUBST(nodep)
14180 dnl ===================================================================
14181 dnl Number of CPUs to use during the build
14182 dnl ===================================================================
14183 AC_MSG_CHECKING([for number of processors to use])
14184 # plain --with-parallelism is just the default
14185 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
14186     if test "$with_parallelism" = "no"; then
14187         PARALLELISM=0
14188     else
14189         PARALLELISM=$with_parallelism
14190     fi
14191 else
14192     if test "$enable_icecream" = "yes"; then
14193         PARALLELISM="40"
14194     else
14195         case `uname -s` in
14197         Darwin|FreeBSD|NetBSD|OpenBSD)
14198             PARALLELISM=`sysctl -n hw.ncpu`
14199             ;;
14201         Linux)
14202             PARALLELISM=`getconf _NPROCESSORS_ONLN`
14203         ;;
14204         # what else than above does profit here *and* has /proc?
14205         *)
14206             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
14207             ;;
14208         esac
14210         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
14211         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
14212     fi
14215 if test "$no_parallelism_make" = "YES" && test $PARALLELISM -gt 1; then
14216     if test -z "$with_parallelism"; then
14217             AC_MSG_WARN([gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this.])
14218             add_warning "gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this."
14219             PARALLELISM="1"
14220     else
14221         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."
14222     fi
14225 if test $PARALLELISM -eq 0; then
14226     AC_MSG_RESULT([explicit make -j option needed])
14227 else
14228     AC_MSG_RESULT([$PARALLELISM])
14230 AC_SUBST(PARALLELISM)
14232 IWYU_PATH="$with_iwyu"
14233 AC_SUBST(IWYU_PATH)
14234 if test ! -z "$IWYU_PATH"; then
14235     if test ! -f "$IWYU_PATH"; then
14236         AC_MSG_ERROR([cannot find include-what-you-use binary specified by --with-iwyu])
14237     fi
14241 # Set up ILIB for MSVC build
14243 ILIB1=
14244 if test "$build_os" = "cygwin"; then
14245     ILIB="."
14246     if test -n "$JAVA_HOME"; then
14247         ILIB="$ILIB;$JAVA_HOME/lib"
14248     fi
14249     ILIB1=-link
14250     ILIB="$ILIB;$COMPATH/lib/$WIN_HOST_ARCH"
14251     ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/$WIN_HOST_ARCH"
14252     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14253     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14254     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
14255         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14256         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14257     fi
14258     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
14259     ucrtlibpath_formatted=$formatted_path
14260     ILIB="$ILIB;$ucrtlibpath_formatted"
14261     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
14262     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
14263         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/lib"
14264     else
14265         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
14266     fi
14268     if test "$cross_compiling" != "yes"; then
14269         ILIB_FOR_BUILD="$ILIB"
14270     fi
14272 AC_SUBST(ILIB)
14273 AC_SUBST(ILIB_FOR_BUILD)
14275 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
14276 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
14277 dnl from consteval constructor initializing const variable",
14278 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
14279 dnl expression' with consteval constructor", <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
14280 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
14281 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'", or
14282 dnl <https://developercommunity.visualstudio.com/t/1581879> "Bogus error C7595 with consteval
14283 dnl constructor in ternary expression (/std:c++latest)":
14284 AC_LANG_PUSH([C++])
14285 save_CXX=$CXX
14286 if test "$COM" = MSC && test "$COM_IS_CLANG" != TRUE; then
14287     CXX="env LIB=$ILIB $CXX"
14289 save_CXXFLAGS=$CXXFLAGS
14290 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
14291 AC_RUN_IFELSE([AC_LANG_PROGRAM([
14292         struct S {
14293             consteval S() { i = 1; }
14294             int i = 0;
14295         };
14296         S const s;
14298         struct S1 { consteval S1(int) {} };
14299         struct S2 {
14300             S1 x;
14301             S2(): x(0) {}
14302         };
14304         struct S3 {
14305             consteval S3() {}
14306             union {
14307                 int a;
14308                 unsigned b = 0;
14309             };
14310         };
14311         void f() { S3(); }
14313         struct S4 { consteval S4() = default; };
14314         void f4(bool b) { b ? S4() : S4(); }
14315     ], [
14316         return (s.i == 1) ? 0 : 1;
14317     ])], [
14318         AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
14319         AC_MSG_RESULT([yes])
14320     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
14321 CXX=$save_CXX
14322 CXXFLAGS=$save_CXXFLAGS
14323 AC_LANG_POP([C++])
14325 # ===================================================================
14326 # Creating bigger shared library to link against
14327 # ===================================================================
14328 AC_MSG_CHECKING([whether to create huge library])
14329 MERGELIBS=
14331 if test $_os = iOS -o $_os = Android; then
14332     # Never any point in mergelibs for these as we build just static
14333     # libraries anyway...
14334     enable_mergelibs=no
14337 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
14338     if test $_os != Linux -a $_os != WINNT; then
14339         add_warning "--enable-mergelibs is not tested for this platform"
14340     fi
14341     MERGELIBS="TRUE"
14342     AC_MSG_RESULT([yes])
14343     AC_DEFINE(ENABLE_MERGELIBS)
14344 else
14345     AC_MSG_RESULT([no])
14347 AC_SUBST([MERGELIBS])
14349 dnl ===================================================================
14350 dnl icerun is a wrapper that stops us spawning tens of processes
14351 dnl locally - for tools that can't be executed on the compile cluster
14352 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
14353 dnl ===================================================================
14354 AC_MSG_CHECKING([whether to use icerun wrapper])
14355 ICECREAM_RUN=
14356 if test "$enable_icecream" = "yes" && which icerun >/dev/null 2>&1 ; then
14357     ICECREAM_RUN=icerun
14358     AC_MSG_RESULT([yes])
14359 else
14360     AC_MSG_RESULT([no])
14362 AC_SUBST(ICECREAM_RUN)
14364 dnl ===================================================================
14365 dnl Setup the ICECC_VERSION for the build the same way it was set for
14366 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
14367 dnl ===================================================================
14368 x_ICECC_VERSION=[\#]
14369 if test -n "$ICECC_VERSION" ; then
14370     x_ICECC_VERSION=
14372 AC_SUBST(x_ICECC_VERSION)
14373 AC_SUBST(ICECC_VERSION)
14375 dnl ===================================================================
14377 AC_MSG_CHECKING([MPL subset])
14378 MPL_SUBSET=
14380 if test "$enable_mpl_subset" = "yes"; then
14381     warn_report=false
14382     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
14383         warn_report=true
14384     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
14385         warn_report=true
14386     fi
14387     if test "$warn_report" = "true"; then
14388         AC_MSG_ERROR([need to --disable-report-builder - extended database report builder.])
14389     fi
14390     if test "x$enable_postgresql_sdbc" != "xno"; then
14391         AC_MSG_ERROR([need to --disable-postgresql-sdbc - the PostgreSQL database backend.])
14392     fi
14393     if test "$enable_lotuswordpro" = "yes"; then
14394         AC_MSG_ERROR([need to --disable-lotuswordpro - a Lotus Word Pro file format import filter.])
14395     fi
14396     if test "$WITH_WEBDAV" = "neon"; then
14397         AC_MSG_ERROR([need --with-webdav=serf or --without-webdav - webdav support.])
14398     fi
14399     if test -n "$ENABLE_POPPLER"; then
14400         if test "x$SYSTEM_POPPLER" = "x"; then
14401             AC_MSG_ERROR([need to disable PDF import via poppler or use system library])
14402         fi
14403     fi
14404     # cf. m4/libo_check_extension.m4
14405     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
14406         AC_MSG_ERROR([need to disable extra extensions '$WITH_EXTRA_EXTENSIONS'])
14407     fi
14408     for theme in $WITH_THEMES; do
14409         case $theme in
14410         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
14411             AC_MSG_ERROR([need to disable icon themes from '$WITH_THEMES': $theme present, use --with-theme=colibre]) ;;
14412         *) : ;;
14413         esac
14414     done
14416     ENABLE_OPENGL_TRANSITIONS=
14418     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
14419         AC_MSG_ERROR([need to --disable-lpsolve - calc linear programming solver.])
14420     fi
14422     MPL_SUBSET="TRUE"
14423     AC_DEFINE(MPL_HAVE_SUBSET)
14424     AC_MSG_RESULT([only])
14425 else
14426     AC_MSG_RESULT([no restrictions])
14428 AC_SUBST(MPL_SUBSET)
14430 dnl ===================================================================
14432 AC_MSG_CHECKING([formula logger])
14433 ENABLE_FORMULA_LOGGER=
14435 if test "x$enable_formula_logger" = "xyes"; then
14436     AC_MSG_RESULT([yes])
14437     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14438     ENABLE_FORMULA_LOGGER=TRUE
14439 elif test -n "$ENABLE_DBGUTIL" ; then
14440     AC_MSG_RESULT([yes])
14441     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14442     ENABLE_FORMULA_LOGGER=TRUE
14443 else
14444     AC_MSG_RESULT([no])
14447 AC_SUBST(ENABLE_FORMULA_LOGGER)
14449 dnl ===================================================================
14450 dnl Checking for active Antivirus software.
14451 dnl ===================================================================
14453 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
14454     AC_MSG_CHECKING([for active Antivirus software])
14455     ANTIVIRUS_LIST=`cscript.exe //Nologo $SRC_ROOT/antivirusDetection.vbs`
14456     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
14457         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
14458             AC_MSG_RESULT([found])
14459             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
14460             echo $EICAR_STRING > $SRC_ROOT/eicar
14461             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
14462             rm $SRC_ROOT/eicar
14463             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14464                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14465             fi
14466             echo $EICAR_STRING > $BUILDDIR/eicar
14467             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
14468             rm $BUILDDIR/eicar
14469             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14470                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14471             fi
14472             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"
14473         else
14474             AC_MSG_RESULT([not found])
14475         fi
14476     else
14477         AC_MSG_RESULT([n/a])
14478     fi
14481 dnl ===================================================================
14482 dnl Setting up the environment.
14483 dnl ===================================================================
14484 AC_MSG_NOTICE([setting up the build environment variables...])
14486 AC_SUBST(COMPATH)
14488 if test "$build_os" = "cygwin"; then
14489     if test -d "$COMPATH/atlmfc/lib/spectre"; then
14490         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
14491         ATL_INCLUDE="$COMPATH/atlmfc/include"
14492     elif test -d "$COMPATH/atlmfc/lib"; then
14493         ATL_LIB="$COMPATH/atlmfc/lib"
14494         ATL_INCLUDE="$COMPATH/atlmfc/include"
14495     else
14496         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
14497         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
14498     fi
14499     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
14500     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
14501     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
14503     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
14504     PathFormat "/usr/bin/find.exe"
14505     FIND="$formatted_path"
14506     PathFormat "/usr/bin/sort.exe"
14507     SORT="$formatted_path"
14508     PathFormat "/usr/bin/grep.exe"
14509     WIN_GREP="$formatted_path"
14510     PathFormat "/usr/bin/ls.exe"
14511     WIN_LS="$formatted_path"
14512     PathFormat "/usr/bin/touch.exe"
14513     WIN_TOUCH="$formatted_path"
14514 else
14515     FIND=find
14516     SORT=sort
14519 AC_SUBST(ATL_INCLUDE)
14520 AC_SUBST(ATL_LIB)
14521 AC_SUBST(FIND)
14522 AC_SUBST(SORT)
14523 AC_SUBST(WIN_GREP)
14524 AC_SUBST(WIN_LS)
14525 AC_SUBST(WIN_TOUCH)
14527 AC_SUBST(BUILD_TYPE)
14529 AC_SUBST(SOLARINC)
14531 PathFormat "$PERL"
14532 PERL="$formatted_path"
14533 AC_SUBST(PERL)
14535 if test -n "$TMPDIR"; then
14536     TEMP_DIRECTORY="$TMPDIR"
14537 else
14538     TEMP_DIRECTORY="/tmp"
14540 if test "$build_os" = "cygwin"; then
14541     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
14543 AC_SUBST(TEMP_DIRECTORY)
14545 # setup the PATH for the environment
14546 if test -n "$LO_PATH_FOR_BUILD"; then
14547     LO_PATH="$LO_PATH_FOR_BUILD"
14548     case "$host_os" in
14549     cygwin*|wsl*)
14550         pathmunge "$MSVC_HOST_PATH" "before"
14551         ;;
14552     esac
14553 else
14554     LO_PATH="$PATH"
14556     case "$host_os" in
14558     aix*|dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
14559         if test "$ENABLE_JAVA" != ""; then
14560             pathmunge "$JAVA_HOME/bin" "after"
14561         fi
14562         ;;
14564     cygwin*|wsl*)
14565         # Win32 make needs native paths
14566         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
14567             LO_PATH=`cygpath -p -m "$PATH"`
14568         fi
14569         if test "$WIN_BUILD_ARCH" = "x64"; then
14570             # needed for msi packaging
14571             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
14572         fi
14573         # .NET 4.6 and higher don't have bin directory
14574         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
14575             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
14576         fi
14577         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
14578         pathmunge "$CSC_PATH" "before"
14579         pathmunge "$MIDL_PATH" "before"
14580         pathmunge "$AL_PATH" "before"
14581         pathmunge "$MSVC_MULTI_PATH" "before"
14582         pathmunge "$MSVC_BUILD_PATH" "before"
14583         if test -n "$MSBUILD_PATH" ; then
14584             pathmunge "$MSBUILD_PATH" "before"
14585         fi
14586         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
14587         if test "$ENABLE_JAVA" != ""; then
14588             if test -d "$JAVA_HOME/jre/bin/client"; then
14589                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
14590             fi
14591             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
14592                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
14593             fi
14594             pathmunge "$JAVA_HOME/bin" "before"
14595         fi
14596         pathmunge "$MSVC_HOST_PATH" "before"
14597         ;;
14599     solaris*)
14600         pathmunge "/usr/css/bin" "before"
14601         if test "$ENABLE_JAVA" != ""; then
14602             pathmunge "$JAVA_HOME/bin" "after"
14603         fi
14604         ;;
14605     esac
14608 AC_SUBST(LO_PATH)
14610 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
14611 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
14612     x_LO_ELFCHECK_ALLOWLIST=
14613 else
14614     x_LO_ELFCHECK_ALLOWLIST=[\#]
14616 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
14617 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
14619 libo_FUZZ_SUMMARY
14621 # Generate a configuration sha256 we can use for deps
14622 if test -f config_host.mk; then
14623     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
14625 if test -f config_host_lang.mk; then
14626     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
14629 CFLAGS=$my_original_CFLAGS
14630 CXXFLAGS=$my_original_CXXFLAGS
14631 CPPFLAGS=$my_original_CPPFLAGS
14633 AC_CONFIG_LINKS([include:include])
14635 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
14636 # BUILD platform configuration] - otherwise breaks cross building
14637 AC_CONFIG_FILES([config_host.mk
14638                  config_host_lang.mk
14639                  Makefile
14640                  bin/bffvalidator.sh
14641                  bin/odfvalidator.sh
14642                  bin/officeotron.sh
14643                  hardened_runtime.xcent
14644                  instsetoo_native/util/openoffice.lst
14645                  sysui/desktop/macosx/Info.plist
14646                  vs-code-template.code-workspace:.vscode/vs-code-template.code-workspace.in])
14647 AC_CONFIG_HEADERS([config_host/config_buildid.h])
14648 AC_CONFIG_HEADERS([config_host/config_box2d.h])
14649 AC_CONFIG_HEADERS([config_host/config_clang.h])
14650 AC_CONFIG_HEADERS([config_host/config_crypto.h])
14651 AC_CONFIG_HEADERS([config_host/config_dconf.h])
14652 AC_CONFIG_HEADERS([config_host/config_eot.h])
14653 AC_CONFIG_HEADERS([config_host/config_extensions.h])
14654 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
14655 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
14656 AC_CONFIG_HEADERS([config_host/config_dbus.h])
14657 AC_CONFIG_HEADERS([config_host/config_features.h])
14658 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
14659 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
14660 AC_CONFIG_HEADERS([config_host/config_firebird.h])
14661 AC_CONFIG_HEADERS([config_host/config_folders.h])
14662 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
14663 AC_CONFIG_HEADERS([config_host/config_gio.h])
14664 AC_CONFIG_HEADERS([config_host/config_global.h])
14665 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
14666 AC_CONFIG_HEADERS([config_host/config_java.h])
14667 AC_CONFIG_HEADERS([config_host/config_langs.h])
14668 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
14669 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
14670 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
14671 AC_CONFIG_HEADERS([config_host/config_locales.h])
14672 AC_CONFIG_HEADERS([config_host/config_mpl.h])
14673 AC_CONFIG_HEADERS([config_host/config_oox.h])
14674 AC_CONFIG_HEADERS([config_host/config_options.h])
14675 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
14676 AC_CONFIG_HEADERS([config_host/config_zxing.h])
14677 AC_CONFIG_HEADERS([config_host/config_skia.h])
14678 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
14679 AC_CONFIG_HEADERS([config_host/config_vendor.h])
14680 AC_CONFIG_HEADERS([config_host/config_vcl.h])
14681 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
14682 AC_CONFIG_HEADERS([config_host/config_version.h])
14683 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
14684 AC_CONFIG_HEADERS([config_host/config_poppler.h])
14685 AC_CONFIG_HEADERS([config_host/config_python.h])
14686 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
14687 AC_OUTPUT
14689 if test "$CROSS_COMPILING" = TRUE; then
14690     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
14693 # touch the config timestamp file
14694 if test ! -f config_host.mk.stamp; then
14695     echo > config_host.mk.stamp
14696 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
14697     echo "Host Configuration unchanged - avoiding scp2 stamp update"
14698 else
14699     echo > config_host.mk.stamp
14702 # touch the config lang timestamp file
14703 if test ! -f config_host_lang.mk.stamp; then
14704     echo > config_host_lang.mk.stamp
14705 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
14706     echo "Language Configuration unchanged - avoiding scp2 stamp update"
14707 else
14708     echo > config_host_lang.mk.stamp
14712 if test \( "$STALE_MAKE" = "TRUE" -o "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE" \) \
14713         -a "$build_os" = "cygwin"; then
14715 cat << _EOS
14716 ****************************************************************************
14717 WARNING:
14718 Your make version is known to be horribly slow, and hard to debug
14719 problems with. To get a reasonably functional make please do:
14721 to install a pre-compiled binary make for Win32
14723  mkdir -p /opt/lo/bin
14724  cd /opt/lo/bin
14725  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
14726  cp make-4.2.1-msvc.exe make
14727  chmod +x make
14729 to install from source:
14730 place yourself in a working directory of you choice.
14732  git clone git://git.savannah.gnu.org/make.git
14734  [go to Start menu, open "Visual Studio 2019" or "Visual Studio 2022", and then click "x86 Native Tools Command Prompt" or "x64 Native Tools Command Prompt"]
14735  set PATH=%PATH%;C:\Cygwin\bin
14736  [or Cygwin64, if that is what you have]
14737  cd path-to-make-repo-you-cloned-above
14738  build_w32.bat --without-guile
14740 should result in a WinRel/gnumake.exe.
14741 Copy it to the Cygwin /opt/lo/bin directory as make.exe
14743 Then re-run autogen.sh
14745 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
14746 Alternatively, you can install the 'new' make where ever you want and make sure that `which make` finds it.
14748 _EOS
14749 if test "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE"; then
14750     AC_MSG_ERROR([no file function found; the build will fail without it; use GNU make 4.0 or later])
14755 cat << _EOF
14756 ****************************************************************************
14758 To build, run:
14759 $GNUMAKE
14761 To view some help, run:
14762 $GNUMAKE help
14764 _EOF
14766 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
14767     cat << _EOF
14768 After the build has finished successfully, you can immediately run what you built using the command:
14769 _EOF
14771     if test $_os = Darwin; then
14772         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
14773     else
14774         echo instdir/program/soffice
14775     fi
14776     cat << _EOF
14778 If you want to run the smoketest, run:
14779 $GNUMAKE check
14781 _EOF
14784 if test -s "$WARNINGS_FILE_FOR_BUILD"; then
14785     echo "BUILD / cross-toolset config, repeated ($WARNINGS_FILE_FOR_BUILD)"
14786     cat "$WARNINGS_FILE_FOR_BUILD"
14787     echo
14790 if test -s "$WARNINGS_FILE"; then
14791     echo "HOST config ($WARNINGS_FILE)"
14792     cat "$WARNINGS_FILE"
14795 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: