tdf#149609 release mouse before showing popups from calc grid window
[LibreOffice.git] / configure.ac
blobe375e590193f959928bf53d94e91519471fce88c
1 dnl -*- Mode: Autoconf; tab-width: 4; indent-tabs-mode: nil; fill-column: 100 -*-
2 dnl configure.ac serves as input for the GNU autoconf package
3 dnl in order to create a configure script.
5 # The version number in the second argument to AC_INIT should be four numbers separated by
6 # periods. Some parts of the code requires the first one to be less than 128 and the others to be less
7 # than 256. The four numbers can optionally be followed by a period and a free-form string containing
8 # no spaces or periods, like "frobozz-mumble-42" or "alpha0". If the free-form string ends with one or
9 # several non-alphanumeric characters, those are split off and used only for the
10 # ABOUTBOXPRODUCTVERSIONSUFFIX in openoffice.lst. Why that is necessary, no idea.
12 AC_INIT([LibreOffice],[7.3.6.0.0+],[],[],[http://documentfoundation.org/])
14 dnl libnumbertext needs autoconf 2.68, but that can pick up autoconf268 just fine if it is installed
15 dnl whereas aclocal (as run by autogen.sh) insists on using autoconf and fails hard
16 dnl so check for the version of autoconf that is actually used to create the configure script
17 AC_PREREQ([2.59])
18 m4_if(m4_version_compare(m4_defn([AC_AUTOCONF_VERSION]), [2.68]), -1,
19     [AC_MSG_ERROR([at least autoconf version 2.68 is needed (you can use AUTOCONF environment variable to point to a suitable one)])])
21 if test -n "$BUILD_TYPE"; then
22     AC_MSG_ERROR([You have sourced config_host.mk in this shell.  This may lead to trouble, please run in a fresh (login) shell.])
25 save_CC=$CC
26 save_CXX=$CXX
28 first_arg_basename()
30     for i in $1; do
31         basename "$i"
32         break
33     done
36 CC_BASE=`first_arg_basename "$CC"`
37 CXX_BASE=`first_arg_basename "$CXX"`
39 BUILD_TYPE="LibO"
40 SCPDEFS=""
41 GIT_NEEDED_SUBMODULES=""
42 LO_PATH= # used by path_munge to construct a PATH variable
44 FilterLibs()
46     # Return value: $filteredlibs
48     filteredlibs=
49     for f in $1; do
50         case "$f" in
51             # let's start with Fedora's paths for now
52             -L/lib|-L/lib/|-L/lib64|-L/lib64/|-L/usr/lib|-L/usr/lib/|-L/usr/lib64|-L/usr/lib64/)
53                 # ignore it: on UNIXoids it is searched by default anyway
54                 # but if it's given explicitly then it may override other paths
55                 # (on macOS it would be an error to use it instead of SDK)
56                 ;;
57             *)
58                 filteredlibs="$filteredlibs $f"
59                 ;;
60         esac
61     done
64 PathFormat()
66     # Args: $1: A pathname. On Cygwin and WSL, in either the Unix or the Windows format. Note that this
67     # function is called also on Unix.
68     #
69     # Return value: $formatted_path and $formatted_path_unix.
70     #
71     # $formatted_path is the argument in Windows format, but using forward slashes instead of
72     # backslashes, using 8.3 pathname components if necessary (if it otherwise would contains spaces
73     # or shell metacharacters).
74     #
75     # $formatted_path_unix is the argument in a form usable in Cygwin or WSL, using 8.3 components if
76     # necessary. On Cygwin, it is the same as $formatted_path, but on WSL it is $formatted_path as a
77     # Unix pathname.
78     #
79     # Errors out if 8.3 names are needed but aren't present for some of the path components.
81     # Examples:
82     #
83     # /home/tml/lo/master-optimised => C:/cygwin64/home/tml/lo/master-optimised
84     #
85     # C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe => C:/PROGRA~2/MICROS~3/INSTAL~1/vswhere.exe
86     #
87     # C:\Program Files (x86)\Microsoft Visual Studio\2019\Community => C:/PROGRA~2/MICROS~3/2019/COMMUN~1
88     #
89     # C:/PROGRA~2/WI3CF2~1/10/Include/10.0.18362.0/ucrt => C:/PROGRA~2/WI3CF2~1/10/Include/10.0.18362.0/ucrt
90     #
91     # /cygdrive/c/PROGRA~2/WI3CF2~1/10 => C:/PROGRA~2/WI3CF2~1/10
92     #
93     # C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\ => C:/PROGRA~2/WI3CF2~1/NETFXSDK/4.8/
94     #
95     # /usr/bin/find.exe => C:/cygwin64/bin/find.exe
97     if test -n "$UNITTEST_WSL_PATHFORMAT"; then
98         printf "PathFormat $1 ==> "
99     fi
101     formatted_path="$1"
102     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
103         if test "$build_os" = "wsl"; then
104             formatted_path=$(echo "$formatted_path" | tr -d '\r')
105         fi
107         pf_conv_to_dos=
108         # spaces,parentheses,brackets,braces are problematic in pathname
109         # so are backslashes
110         case "$formatted_path" in
111             *\ * | *\)* | *\(* | *\{* | *\}* | *\[* | *\]* | *\\* )
112                 pf_conv_to_dos="yes"
113             ;;
114         esac
115         if test "$pf_conv_to_dos" = "yes"; then
116             if test "$build_os" = "wsl"; then
117                 case "$formatted_path" in
118                     /*)
119                         formatted_path=$(wslpath -w "$formatted_path")
120                         ;;
121                 esac
122                 formatted_path=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --8.3 "$formatted_path")
123             elif test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
124                 formatted_path=`cygpath -sm "$formatted_path"`
125             else
126                 formatted_path=`cygpath -d "$formatted_path"`
127             fi
128             if test $? -ne 0;  then
129                 AC_MSG_ERROR([path conversion failed for "$1".])
130             fi
131         fi
132         fp_count_colon=`echo "$formatted_path" | $GREP -c "[:]"`
133         fp_count_slash=`echo "$formatted_path" | $GREP -c "[/]"`
134         if test "$fp_count_slash$fp_count_colon" != "00"; then
135             if test "$fp_count_colon" = "0"; then
136                 new_formatted_path=`realpath "$formatted_path"`
137                 if test $? -ne 0;  then
138                     AC_MSG_WARN([realpath failed for "$formatted_path", not necessarily a problem.])
139                 else
140                     formatted_path="$new_formatted_path"
141                 fi
142             fi
143             if test "$build_os" = "wsl"; then
144                 if test "$fp_count_colon" != "0"; then
145                     formatted_path=$(wslpath "$formatted_path")
146                     local final_slash=
147                     case "$formatted_path" in
148                         */)
149                             final_slash=/
150                             ;;
151                     esac
152                     formatted_path=$(wslpath -m $formatted_path)
153                     case "$formatted_path" in
154                         */)
155                             ;;
156                         *)
157                             formatted_path="$formatted_path"$final_slash
158                             ;;
159                     esac
160                 else
161                     formatted_path=$(wslpath -m "$formatted_path")
162                 fi
163             else
164                 formatted_path=`cygpath -m "$formatted_path"`
165             fi
166             if test $? -ne 0;  then
167                 AC_MSG_ERROR([path conversion failed for "$1".])
168             fi
169         fi
170         fp_count_space=`echo "$formatted_path" | $GREP -c "[ ]"`
171         if test "$fp_count_space" != "0"; then
172             AC_MSG_ERROR([converted path "$formatted_path" still contains spaces. Short filenames (8.3 filenames) support was disabled on this system?])
173         fi
174     fi
175     if test "$build_os" = "wsl"; then
176         # WSL can't run Windows binaries from Windows pathnames so we need a separate return value in Unix format
177         formatted_path_unix=$(wslpath "$formatted_path")
178     else
179         # But Cygwin can
180         formatted_path_unix="$formatted_path"
181     fi
184 AbsolutePath()
186     # There appears to be no simple and portable method to get an absolute and
187     # canonical path, so we try creating the directory if does not exist and
188     # utilizing the shell and pwd.
190     # Args: $1: A possibly relative pathname
191     # Return value: $absolute_path
193     local rel="$1"
194     absolute_path=""
195     test ! -e "$rel" && mkdir -p "$rel"
196     if test -d "$rel" ; then
197         cd "$rel" || AC_MSG_ERROR([absolute path resolution failed for "$rel".])
198         absolute_path="$(pwd)"
199         cd - > /dev/null
200     else
201         AC_MSG_ERROR([Failed to resolve absolute path.  "$rel" does not exist or is not a directory.])
202     fi
205 WARNINGS_FILE=config.warn
206 WARNINGS_FILE_FOR_BUILD=config.Build.warn
207 rm -f "$WARNINGS_FILE" "$WARNINGS_FILE_FOR_BUILD"
208 have_WARNINGS="no"
209 add_warning()
211     if test "$have_WARNINGS" = "no"; then
212         echo "*************************************" > "$WARNINGS_FILE"
213         have_WARNINGS="yes"
214         if which tput >/dev/null && test "`tput colors 2>/dev/null || echo 0`" -ge 8; then
215             dnl <esc> as actual byte (U+1b), [ escaped using quadrigraph @<:@
216             COLORWARN='*\e@<:@1;33;40m WARNING \e@<:@0m:'
217         else
218             COLORWARN="* WARNING :"
219         fi
220     fi
221     echo "$COLORWARN $@" >> "$WARNINGS_FILE"
224 dnl Some Mac User have the bad habit of letting a lot of crap
225 dnl accumulate in their PATH and even adding stuff in /usr/local/bin
226 dnl that confuse the build.
227 dnl For the ones that use LODE, let's be nice and protect them
228 dnl from themselves
230 mac_sanitize_path()
232     mac_path="$LODE_HOME/opt/bin:/usr/bin:/bin:/usr/sbin:/sbin"
233 dnl a common but nevertheless necessary thing that may be in a fancy
234 dnl path location is git, so make sure we have it
235     mac_git_path=`which git 2>/dev/null`
236     if test -n "$mac_git_path" -a -x "$mac_git_path" -a "$mac_git_path" != "/usr/bin/git" ; then
237         mac_path="$mac_path:`dirname $mac_git_path`"
238     fi
239 dnl a not so common but nevertheless quite helpful thing that may be in a fancy
240 dnl path location is gpg, so make sure we find it
241     mac_gpg_path=`which gpg 2>/dev/null`
242     if test -n "$mac_gpg_path" -a -x "$mac_gpg_path" -a "$mac_gpg_path" != "/usr/bin/gpg" ; then
243         mac_path="$mac_path:`dirname $mac_gpg_path`"
244     fi
245     PATH="$mac_path"
246     unset mac_path
247     unset mac_git_path
248     unset mac_gpg_path
251 echo "********************************************************************"
252 echo "*"
253 echo "*   Running ${PACKAGE_NAME} build configuration."
254 echo "*"
255 echo "********************************************************************"
256 echo ""
258 dnl ===================================================================
259 dnl checks build and host OSes
260 dnl do this before argument processing to allow for platform dependent defaults
261 dnl ===================================================================
263 # Check for WSL (version 2, at least). But if --host is explicitly specified (to really do build for
264 # Linux on WSL) trust that.
265 if test -z "$host" -a -z "$build" -a "`wslsys -v 2>/dev/null`" != ""; then
266     ac_cv_host="x86_64-pc-wsl"
267     ac_cv_host_cpu="x86_64"
268     ac_cv_host_os="wsl"
269     ac_cv_build="$ac_cv_host"
270     ac_cv_build_cpu="$ac_cv_host_cpu"
271     ac_cv_build_os="$ac_cv_host_os"
273     # Emulation of Cygwin's cygpath command for WSL.
274     cygpath()
275     {
276         if test -n "$UNITTEST_WSL_CYGPATH"; then
277             echo -n cygpath "$@" "==> "
278         fi
280         # Cygwin's real cygpath has a plethora of options but we use only a few here.
281         local args="$@"
282         local opt
283         local opt_d opt_m opt_u opt_w opt_l opt_s opt_p
284         OPTIND=1
286         while getopts dmuwlsp opt; do
287             case "$opt" in
288                 \?)
289                     AC_MSG_ERROR([Unimplemented cygpath emulation option in invocation: cygpath $args])
290                     ;;
291                 ?)
292                     eval opt_$opt=yes
293                     ;;
294             esac
295         done
297         shift $((OPTIND-1))
299         if test $# -ne 1; then
300             AC_MSG_ERROR([Invalid cygpath emulation invocation: Pathname missing]);
301         fi
303         local input="$1"
305         local result
307         if test -n "$opt_d" -o -n "$opt_m" -o -n "$opt_w"; then
308             # Print Windows path, possibly in 8.3 form (-d) or with forward slashes (-m)
310             if test -n "$opt_u"; then
311                 AC_MSG_ERROR([Invalid cygpath invocation: Both Windows and Unix path output requested])
312             fi
314             case "$input" in
315                 /mnt/*)
316                     # A Windows file in WSL format
317                     input=$(wslpath -w "$input")
318                     ;;
319                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
320                     # Already in Windows format
321                     ;;
322                 /*)
323                     input=$(wslpath -w "$input")
324                     ;;
325                 *)
326                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
327                     ;;
328             esac
329             if test -n "$opt_d" -o -n "$opt_s"; then
330                 input=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --8.3 "$input")
331             fi
332             if test -n "$opt_m"; then
333                 input="${input//\\//}"
334             fi
335             echo "$input"
336         else
337             # Print Unix path
339             case "$input" in
340                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
341                     wslpath -u "$input"
342                     ;;
343                 /)
344                     echo "$input"
345                     ;;
346                 *)
347                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
348                     ;;
349             esac
350         fi
351     }
353     if test -n "$UNITTEST_WSL_CYGPATH"; then
354         BUILDDIR=.
356         # Nothing special with these file names, just arbitrary ones picked to test with
357         cygpath -d /usr/lib64/ld-linux-x86-64.so.2
358         cygpath -w /usr/lib64/ld-linux-x86-64.so.2
359         cygpath -m /usr/lib64/ld-linux-x86-64.so.2
360         cygpath -m -s /usr/lib64/ld-linux-x86-64.so.2
361         # At least on my machine for instance this file does have an 8.3 name
362         cygpath -d /mnt/c/windows/WindowsUpdate.log
363         # But for instance this one doesn't
364         cygpath -w /mnt/c/windows/system32/AboutSettingsHandlers.dll
365         cygpath -ws /mnt/c/windows/WindowsUpdate.log
366         cygpath -m /mnt/c/windows/system32/AboutSettingsHandlers.dll
367         cygpath -ms /mnt/c/windows/WindowsUpdate.log
369         cygpath -u 'c:\windows\system32\AboutSettingsHandlers.dll'
370         cygpath -u 'c:/windows/system32/AboutSettingsHandlers.dll'
372         exit 0
373     fi
376 AC_CANONICAL_HOST
377 AC_CANONICAL_BUILD
379 if test -n "$UNITTEST_WSL_PATHFORMAT"; then
380     BUILDDIR=.
381     GREP=grep
383     # Use of PathFormat must be after AC_CANONICAL_BUILD above
384     PathFormat /
385     printf "$formatted_path , $formatted_path_unix\n"
387     PathFormat $PWD
388     printf "$formatted_path , $formatted_path_unix\n"
390     PathFormat "$PROGRAMFILESX86"
391     printf "$formatted_path , $formatted_path_unix\n"
393     exit 0
396 AC_MSG_CHECKING([for product name])
397 PRODUCTNAME="AC_PACKAGE_NAME"
398 if test -n "$with_product_name" -a "$with_product_name" != no; then
399     PRODUCTNAME="$with_product_name"
401 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
402     PRODUCTNAME="${PRODUCTNAME}Dev"
404 AC_MSG_RESULT([$PRODUCTNAME])
405 AC_SUBST(PRODUCTNAME)
406 PRODUCTNAME_WITHOUT_SPACES=$(printf %s "$PRODUCTNAME" | sed 's/ //g')
407 AC_SUBST(PRODUCTNAME_WITHOUT_SPACES)
409 dnl ===================================================================
410 dnl Our version is defined by the AC_INIT() at the top of this script.
411 dnl ===================================================================
413 AC_MSG_CHECKING([for package version])
414 if test -n "$with_package_version" -a "$with_package_version" != no; then
415     PACKAGE_VERSION="$with_package_version"
417 AC_MSG_RESULT([$PACKAGE_VERSION])
419 set `echo "$PACKAGE_VERSION" | sed "s/\./ /g"`
421 LIBO_VERSION_MAJOR=$1
422 LIBO_VERSION_MINOR=$2
423 LIBO_VERSION_MICRO=$3
424 LIBO_VERSION_PATCH=$4
426 LIBO_VERSION_SUFFIX=$5
428 # Split out LIBO_VERSION_SUFFIX_SUFFIX... horrible crack. But apparently wanted separately in
429 # openoffice.lst as ABOUTBOXPRODUCTVERSIONSUFFIX. Note that the double brackets are for m4's sake,
430 # they get undoubled before actually passed to sed.
431 LIBO_VERSION_SUFFIX_SUFFIX=`echo "$LIBO_VERSION_SUFFIX" | sed -e 's/.*[[a-zA-Z0-9]]\([[^a-zA-Z0-9]]*\)$/\1/'`
432 test -n "$LIBO_VERSION_SUFFIX_SUFFIX" && LIBO_VERSION_SUFFIX="${LIBO_VERSION_SUFFIX%${LIBO_VERSION_SUFFIX_SUFFIX}}"
433 # LIBO_VERSION_SUFFIX, if non-empty, should include the period separator
434 test -n "$LIBO_VERSION_SUFFIX" && LIBO_VERSION_SUFFIX=".$LIBO_VERSION_SUFFIX"
436 # The value for key CFBundleVersion in the Info.plist file must be a period-separated list of at most
437 # three non-negative integers. Please find more information about CFBundleVersion at
438 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleversion
440 # The value for key CFBundleShortVersionString in the Info.plist file must be a period-separated list
441 # of at most three non-negative integers. Please find more information about
442 # CFBundleShortVersionString at
443 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring
445 # But that is enforced only in the App Store, and we apparently want to break the rules otherwise.
447 if test "$enable_macosx_sandbox" = yes; then
448     MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.`expr $LIBO_VERSION_MICRO '*' 1000 + $LIBO_VERSION_PATCH`
449     MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION
450 else
451     MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.$LIBO_VERSION_MICRO.$LIBO_VERSION_PATCH
452     MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION$LIBO_VERSION_SUFFIX
455 AC_SUBST(LIBO_VERSION_MAJOR)
456 AC_SUBST(LIBO_VERSION_MINOR)
457 AC_SUBST(LIBO_VERSION_MICRO)
458 AC_SUBST(LIBO_VERSION_PATCH)
459 AC_SUBST(LIBO_VERSION_SUFFIX)
460 AC_SUBST(LIBO_VERSION_SUFFIX_SUFFIX)
461 AC_SUBST(MACOSX_BUNDLE_SHORTVERSION)
462 AC_SUBST(MACOSX_BUNDLE_VERSION)
464 AC_DEFINE_UNQUOTED(LIBO_VERSION_MAJOR,$LIBO_VERSION_MAJOR)
465 AC_DEFINE_UNQUOTED(LIBO_VERSION_MINOR,$LIBO_VERSION_MINOR)
466 AC_DEFINE_UNQUOTED(LIBO_VERSION_MICRO,$LIBO_VERSION_MICRO)
467 AC_DEFINE_UNQUOTED(LIBO_VERSION_PATCH,$LIBO_VERSION_PATCH)
469 LIBO_THIS_YEAR=`date +%Y`
470 AC_DEFINE_UNQUOTED(LIBO_THIS_YEAR,$LIBO_THIS_YEAR)
472 dnl ===================================================================
473 dnl Product version
474 dnl ===================================================================
475 AC_MSG_CHECKING([for product version])
476 PRODUCTVERSION="$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR"
477 AC_MSG_RESULT([$PRODUCTVERSION])
478 AC_SUBST(PRODUCTVERSION)
480 AC_PROG_EGREP
481 # AC_PROG_EGREP doesn't set GREP on all systems as well
482 AC_PATH_PROG(GREP, grep)
484 BUILDDIR=`pwd`
485 cd $srcdir
486 SRC_ROOT=`pwd`
487 cd $BUILDDIR
488 x_Cygwin=[\#]
490 dnl ======================================
491 dnl Required GObject introspection version
492 dnl ======================================
493 INTROSPECTION_REQUIRED_VERSION=1.32.0
495 dnl ===================================================================
496 dnl Search all the common names for GNU Make
497 dnl ===================================================================
498 AC_MSG_CHECKING([for GNU Make])
500 # try to use our own make if it is available and GNUMAKE was not already defined
501 if test -z "$GNUMAKE"; then
502     if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/make" ; then
503         GNUMAKE="$LODE_HOME/opt/bin/make"
504     elif test -x "/opt/lo/bin/make"; then
505         GNUMAKE="/opt/lo/bin/make"
506     fi
509 GNUMAKE_WIN_NATIVE=
510 for a in "$MAKE" "$GNUMAKE" make gmake gnumake; do
511     if test -n "$a"; then
512         $a --version 2> /dev/null | grep GNU  2>&1 > /dev/null
513         if test $? -eq 0;  then
514             if test "$build_os" = "cygwin"; then
515                 if test -n "$($a -v | grep 'Built for Windows')" ; then
516                     GNUMAKE="$(cygpath -m "$(which "$(cygpath -u $a)")")"
517                     GNUMAKE_WIN_NATIVE="TRUE"
518                 else
519                     GNUMAKE=`which $a`
520                 fi
521             else
522                 GNUMAKE=`which $a`
523             fi
524             break
525         fi
526     fi
527 done
528 AC_MSG_RESULT($GNUMAKE)
529 if test -z "$GNUMAKE"; then
530     AC_MSG_ERROR([not found. install GNU Make.])
531 else
532     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
533         AC_MSG_NOTICE([Using a native Win32 GNU Make version.])
534     fi
537 win_short_path_for_make()
539     local short_path="$1"
540     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
541         cygpath -sm "$short_path"
542     else
543         cygpath -u "$(cygpath -d "$short_path")"
544     fi
548 if test "$build_os" = "cygwin"; then
549     PathFormat "$SRC_ROOT"
550     SRC_ROOT="$formatted_path"
551     PathFormat "$BUILDDIR"
552     BUILDDIR="$formatted_path"
553     x_Cygwin=
554     AC_MSG_CHECKING(for explicit COMSPEC)
555     if test -z "$COMSPEC"; then
556         AC_MSG_ERROR([COMSPEC not set in environment, please set it and rerun])
557     else
558         AC_MSG_RESULT([found: $COMSPEC])
559     fi
562 AC_SUBST(SRC_ROOT)
563 AC_SUBST(BUILDDIR)
564 AC_SUBST(x_Cygwin)
565 AC_DEFINE_UNQUOTED(SRCDIR,"$SRC_ROOT")
566 AC_DEFINE_UNQUOTED(SRC_ROOT,"$SRC_ROOT")
567 AC_DEFINE_UNQUOTED(BUILDDIR,"$BUILDDIR")
569 if test "z$EUID" = "z0" -a "`uname -o 2>/dev/null`" = "Cygwin"; then
570     AC_MSG_ERROR([You must build LibreOffice as a normal user - not using an administrative account])
573 # need sed in os checks...
574 AC_PATH_PROGS(SED, sed)
575 if test -z "$SED"; then
576     AC_MSG_ERROR([install sed to run this script])
579 # Set the ENABLE_LTO variable
580 # ===================================================================
581 AC_MSG_CHECKING([whether to use link-time optimization])
582 if test -n "$enable_lto" -a "$enable_lto" != "no"; then
583     ENABLE_LTO="TRUE"
584     AC_MSG_RESULT([yes])
585 else
586     ENABLE_LTO=""
587     AC_MSG_RESULT([no])
589 AC_SUBST(ENABLE_LTO)
591 AC_ARG_ENABLE(fuzz-options,
592     AS_HELP_STRING([--enable-fuzz-options],
593         [Randomly enable or disable each of those configurable options
594          that are supposed to be freely selectable without interdependencies,
595          or where bad interaction from interdependencies is automatically avoided.])
598 dnl ===================================================================
599 dnl When building for Android, --with-android-ndk,
600 dnl --with-android-ndk-toolchain-version and --with-android-sdk are
601 dnl mandatory
602 dnl ===================================================================
604 AC_ARG_WITH(android-ndk,
605     AS_HELP_STRING([--with-android-ndk],
606         [Specify location of the Android Native Development Kit. Mandatory when building for Android.]),
609 AC_ARG_WITH(android-ndk-toolchain-version,
610     AS_HELP_STRING([--with-android-ndk-toolchain-version],
611         [Specify which toolchain version to use, of those present in the
612         Android NDK you are using. The default (and only supported version currently) is "clang5.0"]),,
613         with_android_ndk_toolchain_version=clang5.0)
615 AC_ARG_WITH(android-sdk,
616     AS_HELP_STRING([--with-android-sdk],
617         [Specify location of the Android SDK. Mandatory when building for Android.]),
620 AC_ARG_WITH(android-api-level,
621     AS_HELP_STRING([--with-android-api-level],
622         [Specify the API level when building for Android. Defaults to 16 for ARM and x86 and to 21 for ARM64 and x86-64]),
625 ANDROID_NDK_HOME=
626 if test -z "$with_android_ndk" -a -e "$SRC_ROOT/external/android-ndk" -a "$build" != "$host"; then
627     with_android_ndk="$SRC_ROOT/external/android-ndk"
629 if test -n "$with_android_ndk"; then
630     eval ANDROID_NDK_HOME=$with_android_ndk
632     # Set up a lot of pre-canned defaults
634     if test ! -f $ANDROID_NDK_HOME/RELEASE.TXT; then
635         if test ! -f $ANDROID_NDK_HOME/source.properties; then
636             AC_MSG_ERROR([Unrecognized Android NDK. Missing RELEASE.TXT or source.properties file in $ANDROID_NDK_HOME.])
637         fi
638         ANDROID_NDK_VERSION=`sed -n -e 's/Pkg.Revision = //p' $ANDROID_NDK_HOME/source.properties`
639     else
640         ANDROID_NDK_VERSION=`cut -f1 -d' ' <$ANDROID_NDK_HOME/RELEASE.TXT`
641     fi
642     if test -z "$ANDROID_NDK_VERSION";  then
643         AC_MSG_ERROR([Failed to determine Android NDK version. Please check your installation.])
644     fi
645     case $ANDROID_NDK_VERSION in
646     r9*|r10*)
647         AC_MSG_ERROR([Building for Android is only supported with NDK versions above 16.x*])
648         ;;
649     11.1.*|12.1.*|13.1.*|14.1.*)
650         AC_MSG_ERROR([Building for Android is only supported with NDK versions above 16.x.*])
651         ;;
652     16.*|17.*|18.*|19.*|20.*)
653         ;;
654     *)
655         AC_MSG_WARN([Untested Android NDK version $ANDROID_NDK_VERSION, only versions 16.* til 20.* have been used successfully. Proceed at your own risk.])
656         add_warning "Untested Android NDK version $ANDROID_NDK_VERSION, only versions 16.* til 20.* have been used successfully. Proceed at your own risk."
657         ;;
658     esac
660     ANDROID_API_LEVEL=16
661     if test -n "$with_android_api_level" ; then
662         ANDROID_API_LEVEL="$with_android_api_level"
663     fi
665     android_cpu=$host_cpu
666     if test $host_cpu = arm; then
667         android_platform_prefix=arm-linux-androideabi
668         android_gnu_prefix=$android_platform_prefix
669         LLVM_TRIPLE=armv7a-linux-androideabi
670         ANDROID_APP_ABI=armeabi-v7a
671         ANDROIDCFLAGS="-mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=neon -Wl,--fix-cortex-a8"
672     elif test $host_cpu = aarch64; then
673         android_platform_prefix=aarch64-linux-android
674         android_gnu_prefix=$android_platform_prefix
675         LLVM_TRIPLE=$android_platform_prefix
676         # minimum android version that supports aarch64
677         if test "$ANDROID_API_LEVEL" -lt "21" ; then
678             ANDROID_API_LEVEL=21
679         fi
680         ANDROID_APP_ABI=arm64-v8a
681     elif test $host_cpu = x86_64; then
682         android_platform_prefix=x86_64-linux-android
683         android_gnu_prefix=$android_platform_prefix
684         LLVM_TRIPLE=$android_platform_prefix
685         # minimum android version that supports x86_64
686         ANDROID_API_LEVEL=21
687         ANDROID_APP_ABI=x86_64
688     else
689         # host_cpu is something like "i386" or "i686" I guess, NDK uses
690         # "x86" in some contexts
691         android_cpu=x86
692         android_platform_prefix=$android_cpu
693         android_gnu_prefix=i686-linux-android
694         LLVM_TRIPLE=$android_gnu_prefix
695         ANDROID_APP_ABI=x86
696     fi
698     case "$with_android_ndk_toolchain_version" in
699     clang5.0)
700         ANDROID_GCC_TOOLCHAIN_VERSION=4.9
701         ;;
702     *)
703         AC_MSG_ERROR([Unrecognized value for the --with-android-ndk-toolchain-version option. Building for Android is only supported with Clang 5.*])
704     esac
706     AC_MSG_NOTICE([using the Android API level... $ANDROID_API_LEVEL])
708     # NDK 15 or later toolchain is 64bit-only, except for Windows that we don't support. Using a 64-bit
709     # linker is required if you compile large parts of the code with -g. A 32-bit linker just won't
710     # manage to link the (app-specific) single huge .so that is built for the app in
711     # android/source/ if there is debug information in a significant part of the object files.
712     # (A 64-bit ld.gold grows too much over 10 gigabytes of virtual space when linking such a .so if
713     # all objects have been built with debug information.)
714     case $build_os in
715     linux-gnu*)
716         android_HOST_TAG=linux-x86_64
717         ;;
718     darwin*)
719         android_HOST_TAG=darwin-x86_64
720         ;;
721     *)
722         AC_MSG_ERROR([We only support building for Android from Linux or macOS])
723         # ndk would also support windows and windows-x86_64
724         ;;
725     esac
726     android_TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/$android_HOST_TAG
727     ANDROID_COMPILER_BIN=$android_TOOLCHAIN/bin
728     dnl TODO: NSS build uses it...
729     ANDROID_BINUTILS_PREBUILT_ROOT=$ANDROID_NDK_HOME/toolchains/$android_platform_prefix-$ANDROID_GCC_TOOLCHAIN_VERSION/prebuilt/$android_HOST_TAG
730     AC_SUBST(ANDROID_BINUTILS_PREBUILT_ROOT)
732     test -z "$AR" && AR=$ANDROID_COMPILER_BIN/$android_gnu_prefix-ar
733     test -z "$NM" && NM=$ANDROID_COMPILER_BIN/$android_gnu_prefix-nm
734     test -z "$OBJDUMP" && OBJDUMP=$ANDROID_COMPILER_BIN/$android_gnu_prefix-objdump
735     test -z "$RANLIB" && RANLIB=$ANDROID_COMPILER_BIN/$android_gnu_prefix-ranlib
736     test -z "$STRIP" && STRIP=$ANDROID_COMPILER_BIN/$android_gnu_prefix-strip
738     ANDROIDCFLAGS="$ANDROIDCFLAGS -target ${LLVM_TRIPLE}${ANDROID_API_LEVEL}"
739     ANDROIDCFLAGS="$ANDROIDCFLAGS -no-canonical-prefixes -ffunction-sections -fdata-sections -Qunused-arguments"
740     if test "$ENABLE_LTO" = TRUE; then
741         # -flto comes from com_GCC_defs.mk, too, but we need to make sure it gets passed as part of
742         # $CC and $CXX when building external libraries
743         ANDROIDCFLAGS="$ANDROIDCFLAGS -flto -fuse-linker-plugin -O2"
744     fi
746     ANDROIDCXXFLAGS="$ANDROIDCFLAGS -stdlib=libc++"
748     if test -z "$CC"; then
749         CC="$ANDROID_COMPILER_BIN/clang $ANDROIDCFLAGS"
750         CC_BASE="clang"
751     fi
752     if test -z "$CXX"; then
753         CXX="$ANDROID_COMPILER_BIN/clang++ $ANDROIDCXXFLAGS"
754         CXX_BASE="clang++"
755     fi
757 AC_SUBST(ANDROID_NDK_HOME)
758 AC_SUBST(ANDROID_APP_ABI)
759 AC_SUBST(ANDROID_GCC_TOOLCHAIN_VERSION)
761 dnl ===================================================================
762 dnl --with-android-sdk
763 dnl ===================================================================
764 ANDROID_SDK_HOME=
765 if test -z "$with_android_sdk" -a -e "$SRC_ROOT/external/android-sdk-linux" -a "$build" != "$host"; then
766     with_android_sdk="$SRC_ROOT/external/android-sdk-linux"
768 if test -n "$with_android_sdk"; then
769     eval ANDROID_SDK_HOME=$with_android_sdk
770     PATH="$ANDROID_SDK_HOME/platform-tools:$ANDROID_SDK_HOME/tools:$PATH"
772 AC_SUBST(ANDROID_SDK_HOME)
774 AC_ARG_ENABLE([android-lok],
775     AS_HELP_STRING([--enable-android-lok],
776         [The Android app from the android/ subdir needs several tweaks all
777          over the place that break the LOK when used in the Online-based
778          Android app.  This switch indicates that the intent of this build is
779          actually the Online-based, non-modified LOK.])
781 ENABLE_ANDROID_LOK=
782 if test -n "$ANDROID_NDK_HOME" ; then
783     if test "$enable_android_lok" = yes; then
784         ENABLE_ANDROID_LOK=TRUE
785         AC_DEFINE(HAVE_FEATURE_ANDROID_LOK)
786         AC_MSG_NOTICE([building the Android version... for the Online-based Android app])
787     else
788         AC_MSG_NOTICE([building the Android version... for the app from the android/ subdir])
789     fi
791 AC_SUBST([ENABLE_ANDROID_LOK])
793 libo_FUZZ_ARG_ENABLE([android-editing],
794     AS_HELP_STRING([--enable-android-editing],
795         [Enable the experimental editing feature on Android.])
797 ENABLE_ANDROID_EDITING=
798 if test "$enable_android_editing" = yes; then
799     ENABLE_ANDROID_EDITING=TRUE
801 AC_SUBST([ENABLE_ANDROID_EDITING])
803 disable_database_connectivity_dependencies()
805     enable_evolution2=no
806     enable_firebird_sdbc=no
807     enable_mariadb_sdbc=no
808     enable_postgresql_sdbc=no
809     enable_report_builder=no
812 # ===================================================================
814 # Start initial platform setup
816 # The using_* variables reflect platform support and should not be
817 # changed after the "End initial platform setup" block.
818 # This is also true for most test_* variables.
819 # ===================================================================
820 build_crypto=yes
821 test_cmis=yes
822 test_gdb_index=no
823 test_openldap=yes
824 test_split_debug=no
825 test_webdav=yes
827 # There is currently just iOS not using salplug, so this explicitly enables it.
828 # must: using_freetype_fontconfig
829 #  may: using_headless_plugin defaults to $using_freetype_fontconfig
830 using_vclplug=yes
831 # must: using_x11
833 # Default values, as such probably valid just for Linux, set
834 # differently below just for Mac OSX, but at least better than
835 # hardcoding these as we used to do. Much of this is duplicated also
836 # in solenv for old build system and for gbuild, ideally we should
837 # perhaps define stuff like this only here in configure.ac?
839 LINKFLAGSSHL="-shared"
840 PICSWITCH="-fpic"
841 DLLPOST=".so"
843 LINKFLAGSNOUNDEFS="-Wl,-z,defs"
845 INSTROOTBASESUFFIX=
846 INSTROOTCONTENTSUFFIX=
847 SDKDIRNAME=sdk
849 HOST_PLATFORM="$host"
851 host_cpu_for_clang="$host_cpu"
853 case "$host_os" in
855 solaris*)
856     using_freetype_fontconfig=yes
857     using_x11=yes
858     build_skia=yes
859     _os=SunOS
861     dnl ===========================================================
862     dnl Check whether we're using Solaris 10 - SPARC or Intel.
863     dnl ===========================================================
864     AC_MSG_CHECKING([the Solaris operating system release])
865     _os_release=`echo $host_os | $SED -e s/solaris2\.//`
866     if test "$_os_release" -lt "10"; then
867         AC_MSG_ERROR([use Solaris >= 10 to build LibreOffice])
868     else
869         AC_MSG_RESULT([ok ($_os_release)])
870     fi
872     dnl Check whether we're using a SPARC or i386 processor
873     AC_MSG_CHECKING([the processor type])
874     if test "$host_cpu" = "sparc" -o "$host_cpu" = "i386"; then
875         AC_MSG_RESULT([ok ($host_cpu)])
876     else
877         AC_MSG_ERROR([only SPARC and i386 processors are supported])
878     fi
879     ;;
881 linux-gnu*|k*bsd*-gnu*|linux-musl*)
882     using_freetype_fontconfig=yes
883     using_x11=yes
884     build_skia=yes
885     test_gdb_index=yes
886     test_split_debug=yes
887     if test "$enable_fuzzers" = yes; then
888         test_system_freetype=no
889     fi
890     _os=Linux
891     ;;
893 gnu)
894     using_freetype_fontconfig=yes
895     using_x11=no
896     _os=GNU
897      ;;
899 cygwin*|wsl*)
900     # When building on Windows normally with MSVC under Cygwin,
901     # configure thinks that the host platform (the platform the
902     # built code will run on) is Cygwin, even if it obviously is
903     # Windows, which in Autoconf terminology is called
904     # "mingw32". (Which is misleading as MinGW is the name of the
905     # tool-chain, not an operating system.)
907     # Somewhat confusing, yes. But this configure script doesn't
908     # look at $host etc that much, it mostly uses its own $_os
909     # variable, set here in this case statement.
911     using_freetype_fontconfig=no
912     using_x11=no
913     test_openldap=no
914     build_skia=yes
915     _os=WINNT
917     DLLPOST=".dll"
918     LINKFLAGSNOUNDEFS=
920     if test "$host_cpu" = "aarch64"; then
921         build_skia=no
922         enable_gpgmepp=no
923         enable_coinmp=no
924         enable_firebird_sdbc=no
925     fi
926     ;;
928 darwin*|macos*) # macOS
929     using_freetype_fontconfig=no
930     using_x11=no
931     build_skia=yes
932     if test -n "$LODE_HOME" ; then
933         mac_sanitize_path
934         AC_MSG_NOTICE([sanitized the PATH to $PATH])
935     fi
936     _os=Darwin
937     INSTROOTBASESUFFIX=/$PRODUCTNAME_WITHOUT_SPACES.app
938     INSTROOTCONTENTSUFFIX=/Contents
939     SDKDIRNAME=${PRODUCTNAME_WITHOUT_SPACES}${PRODUCTVERSION}_SDK
940     # See comment above the case "$host_os"
941     LINKFLAGSSHL="-dynamiclib -single_module"
943     # -fPIC is default
944     PICSWITCH=""
946     DLLPOST=".dylib"
948     # -undefined error is the default
949     LINKFLAGSNOUNDEFS=""
950     case "$host_cpu" in
951     aarch64|arm64)
952         case "$host_os" in
953         macos*)
954             # HOST_PLATFORM is used for external projects and their configury occasionally doesn't like
955             # the "macos" part so be sure to use aarch64-apple-darwin for now.
956             HOST_PLATFORM=aarch64-apple-darwin
957             ;;
958         esac
960         # Apple's Clang uses "arm64"
961         host_cpu_for_clang=arm64
962     esac
965 ios*) # iOS
966     using_freetype_fontconfig=no
967     using_vclplug=no
968     using_x11=no
969     build_crypto=no
970     test_cmis=no
971     test_openldap=no
972     test_webdav=no
973     if test -n "$LODE_HOME" ; then
974         mac_sanitize_path
975         AC_MSG_NOTICE([sanitized the PATH to $PATH])
976     fi
977     enable_gpgmepp=no
978     _os=iOS
979     enable_mpl_subset=yes
980     enable_lotuswordpro=no
981     disable_database_connectivity_dependencies
982     enable_coinmp=no
983     enable_lpsolve=no
984     enable_extension_integration=no
985     enable_xmlhelp=no
986     with_ppds=no
987     if test "$enable_ios_simulator" = "yes"; then
988         host=x86_64-apple-darwin
989     fi
990     # See comment above the case "$host_os"
991     LINKFLAGSSHL="-dynamiclib -single_module"
993     # -fPIC is default
994     PICSWITCH=""
996     DLLPOST=".dylib"
998     # -undefined error is the default
999     LINKFLAGSNOUNDEFS=""
1001     # HOST_PLATFORM is used for external projects and their configury typically doesn't like the "ios"
1002     # part, so use aarch64-apple-darwin for now.
1003     HOST_PLATFORM=aarch64-apple-darwin
1005     # Apple's Clang uses "arm64"
1006     host_cpu_for_clang=arm64
1009 freebsd*)
1010     using_freetype_fontconfig=yes
1011     using_x11=yes
1012     build_skia=yes
1013     AC_MSG_CHECKING([the FreeBSD operating system release])
1014     if test -n "$with_os_version"; then
1015         OSVERSION="$with_os_version"
1016     else
1017         OSVERSION=`/sbin/sysctl -n kern.osreldate`
1018     fi
1019     AC_MSG_RESULT([found OSVERSION=$OSVERSION])
1020     AC_MSG_CHECKING([which thread library to use])
1021     if test "$OSVERSION" -lt "500016"; then
1022         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1023         PTHREAD_LIBS="-pthread"
1024     elif test "$OSVERSION" -lt "502102"; then
1025         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1026         PTHREAD_LIBS="-lc_r"
1027     else
1028         PTHREAD_CFLAGS=""
1029         PTHREAD_LIBS="-pthread"
1030     fi
1031     AC_MSG_RESULT([$PTHREAD_LIBS])
1032     _os=FreeBSD
1033     ;;
1035 *netbsd*)
1036     using_freetype_fontconfig=yes
1037     using_x11=yes
1038     test_gtk3_kde5=no
1039     build_skia=yes
1040     PTHREAD_LIBS="-pthread -lpthread"
1041     _os=NetBSD
1042     ;;
1044 aix*)
1045     using_freetype_fontconfig=yes
1046     using_x11=yes
1047     test_randr=no
1048     test_gstreamer_1_0=no
1049     PTHREAD_LIBS=-pthread
1050     _os=AIX
1051     ;;
1053 openbsd*)
1054     using_freetype_fontconfig=yes
1055     using_x11=yes
1056     PTHREAD_CFLAGS="-D_THREAD_SAFE"
1057     PTHREAD_LIBS="-pthread"
1058     _os=OpenBSD
1059     ;;
1061 dragonfly*)
1062     using_freetype_fontconfig=yes
1063     using_x11=yes
1064     build_skia=yes
1065     PTHREAD_LIBS="-pthread"
1066     _os=DragonFly
1067     ;;
1069 linux-android*)
1070     using_freetype_fontconfig=yes
1071     using_headless_plugin=no
1072     using_x11=no
1073     build_crypto=no
1074     test_openldap=no
1075     test_system_freetype=no
1076     test_webdav=no
1077     disable_database_connectivity_dependencies
1078     enable_lotuswordpro=no
1079     enable_mpl_subset=yes
1080     enable_cairo_canvas=no
1081     enable_coinmp=yes
1082     enable_lpsolve=no
1083     enable_odk=no
1084     enable_python=no
1085     enable_xmlhelp=no
1086     _os=Android
1088     AC_DEFINE(HAVE_FT_FACE_GETCHARVARIANTINDEX)
1089     ;;
1091 haiku*)
1092     using_freetype_fontconfig=yes
1093     using_x11=no
1094     test_gtk3_kde5=no
1095     test_kf5=yes
1096     enable_odk=no
1097     enable_coinmp=no
1098     enable_pdfium=no
1099     enable_sdremote=no
1100     enable_postgresql_sdbc=no
1101     enable_firebird_sdbc=no
1102     _os=Haiku
1103     ;;
1105 emscripten)
1106     using_freetype_fontconfig=yes
1107     using_x11=no
1108     test_openldap=no
1109     enable_compiler_plugins=no
1110     test_cmis=no
1111     test_webdav=no
1112     enable_database_connectivity=no
1113     enable_lpsolve=no
1114     enable_xmlhelp=no
1115     with_system_zlib=no
1116     with_theme="breeze"
1117     _os=Emscripten
1118     ;;
1121     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
1122     ;;
1123 esac
1125 AC_SUBST(HOST_PLATFORM)
1127 if test -z "$using_x11" -o -z "$using_freetype_fontconfig"; then
1128     AC_MSG_ERROR([You must set \$using_freetype_fontconfig and \$using_x11 for your platform])
1131 # Set defaults, if not set by platform
1132 test "${test_cups+set}" = set || test_cups="$using_x11"
1133 test "${test_dbus+set}" = set || test_dbus="$using_x11"
1134 test "${test_gstreamer_1_0+set}" = set || test_gstreamer_1_0="$using_x11"
1135 test "${test_gtk3+set}" = set || test_gtk3="$using_x11"
1136 test "${test_gtk4+set}" = set || test_gtk4="$using_x11"
1137 test "${test_kf5+set}" = set || test_kf5="$using_x11"
1138 # don't handle test_qt5, so it can disable test_kf5 later
1139 test "${test_qt6+set}" = set || test_qt6="$using_x11"
1140 test "${test_randr+set}" = set || test_randr="$using_x11"
1141 test "${test_xrender+set}" = set || test_xrender="$using_x11"
1142 test "${using_headless_plugin+set}" = set || using_headless_plugin="$using_freetype_fontconfig"
1144 test "${test_gtk3_kde5+set}" != set -a "$test_kf5" = yes -a "$test_gtk3" = yes && test_gtk3_kde5="yes"
1145 test "${test_system_fontconfig+set}" != set -a "${test_system_freetype+set}" = set && test_system_fontconfig="$test_system_freetype"
1146 test "${test_system_freetype+set}" != set -a "${test_system_fontconfig+set}" = set && test_system_freetype="$test_system_fontconfig"
1148 # convenience / platform overriding "fixes"
1149 # Don't sort!
1150 test "$test_kf5" = yes -a "$test_qt5" = no && test_kf5=no
1151 test "$test_kf5" = yes && test_qt5=yes
1152 test "$test_gtk3" != yes -o "$test_kf5" != yes && test_gtk3_kde5=no
1153 test "$using_freetype_fontconfig" = no && using_headless_plugin=no
1154 test "$using_freetype_fontconfig" = yes && test_cairo=yes
1156 # Keep in sync with the above $using_x11 depending test default list
1157 disable_x11_tests()
1159     test_cups=no
1160     test_dbus=no
1161     test_gstreamer_1_0=no
1162     test_gtk3_kde5=no
1163     test_gtk3=no
1164     test_gtk4=no
1165     test_kf5=no
1166     test_qt5=no
1167     test_qt6=no
1168     test_randr=no
1169     test_xrender=no
1172 test "$using_x11" = yes && USING_X11=TRUE
1174 if test "$using_freetype_fontconfig" = yes; then
1175     if test "$using_headless_plugin" = yes; then
1176         AC_DEFINE(ENABLE_HEADLESS)
1177         ENABLE_HEADLESS=TRUE
1178     fi
1181 AC_SUBST(ENABLE_HEADLESS)
1183 AC_MSG_NOTICE([VCL platform uses freetype+fontconfig: $using_freetype_fontconfig])
1184 AC_MSG_NOTICE([VCL platform uses headless plugin: $using_headless_plugin])
1185 AC_MSG_NOTICE([VCL platform uses vclplug: $using_vclplug])
1186 AC_MSG_NOTICE([VCL platform uses X11: $using_x11])
1188 # ===================================================================
1190 # End initial platform setup
1192 # ===================================================================
1194 if test "$_os" = "Android" ; then
1195     # Verify that the NDK and SDK options are proper
1196     if test -z "$with_android_ndk"; then
1197         AC_MSG_ERROR([the --with-android-ndk option is mandatory, unless it is available at external/android-ndk/.])
1198     elif test ! -f "$ANDROID_NDK_HOME/meta/abis.json"; then
1199         AC_MSG_ERROR([the --with-android-ndk option does not point to an Android NDK])
1200     fi
1202     if test -z "$ANDROID_SDK_HOME"; then
1203         AC_MSG_ERROR([the --with-android-sdk option is mandatory, unless it is available at external/android-sdk-linux/.])
1204     elif test ! -d "$ANDROID_SDK_HOME/platforms"; then
1205         AC_MSG_ERROR([the --with-android-sdk option does not point to an Android SDK])
1206     fi
1208     BUILD_TOOLS_VERSION=`$SED -n -e 's/.*buildToolsVersion "\(.*\)"/\1/p' $SRC_ROOT/android/source/build.gradle`
1209     if test ! -d "$ANDROID_SDK_HOME/build-tools/$BUILD_TOOLS_VERSION"; then
1210         AC_MSG_WARN([android build-tools $BUILD_TOOLS_VERSION not found - install with
1211                          $ANDROID_SDK_HOME/tools/android update sdk -u --all --filter build-tools-$BUILD_TOOLS_VERSION
1212                     or adjust change $SRC_ROOT/android/source/build.gradle accordingly])
1213         add_warning "android build-tools $BUILD_TOOLS_VERSION not found - install with"
1214         add_warning "    $ANDROID_SDK_HOME/tools/android update sdk -u --all --filter build-tools-$BUILD_TOOLS_VERSION"
1215         add_warning "or adjust $SRC_ROOT/android/source/build.gradle accordingly"
1216     fi
1217     if test ! -f "$ANDROID_SDK_HOME/extras/android/m2repository/source.properties"; then
1218         AC_MSG_WARN([android support repository not found - install with
1219                          $ANDROID_SDK_HOME/tools/android update sdk -u --filter extra-android-m2repository
1220                      to allow the build to download the specified version of the android support libraries])
1221         add_warning "android support repository not found - install with"
1222         add_warning "    $ANDROID_SDK_HOME/tools/android update sdk -u --filter extra-android-m2repository"
1223         add_warning "to allow the build to download the specified version of the android support libraries"
1224     fi
1227 if test "$_os" = "AIX"; then
1228     AC_PATH_PROG(GAWK, gawk)
1229     if test -z "$GAWK"; then
1230         AC_MSG_ERROR([gawk not found in \$PATH])
1231     fi
1234 AC_SUBST(SDKDIRNAME)
1236 AC_SUBST(PTHREAD_CFLAGS)
1237 AC_SUBST(PTHREAD_LIBS)
1239 # Check for explicit A/C/CXX/OBJC/OBJCXX/LDFLAGS.
1240 # By default use the ones specified by our build system,
1241 # but explicit override is possible.
1242 AC_MSG_CHECKING(for explicit AFLAGS)
1243 if test -n "$AFLAGS"; then
1244     AC_MSG_RESULT([$AFLAGS])
1245     x_AFLAGS=
1246 else
1247     AC_MSG_RESULT(no)
1248     x_AFLAGS=[\#]
1250 AC_MSG_CHECKING(for explicit CFLAGS)
1251 if test -n "$CFLAGS"; then
1252     AC_MSG_RESULT([$CFLAGS])
1253     x_CFLAGS=
1254 else
1255     AC_MSG_RESULT(no)
1256     x_CFLAGS=[\#]
1258 AC_MSG_CHECKING(for explicit CXXFLAGS)
1259 if test -n "$CXXFLAGS"; then
1260     AC_MSG_RESULT([$CXXFLAGS])
1261     x_CXXFLAGS=
1262 else
1263     AC_MSG_RESULT(no)
1264     x_CXXFLAGS=[\#]
1266 AC_MSG_CHECKING(for explicit OBJCFLAGS)
1267 if test -n "$OBJCFLAGS"; then
1268     AC_MSG_RESULT([$OBJCFLAGS])
1269     x_OBJCFLAGS=
1270 else
1271     AC_MSG_RESULT(no)
1272     x_OBJCFLAGS=[\#]
1274 AC_MSG_CHECKING(for explicit OBJCXXFLAGS)
1275 if test -n "$OBJCXXFLAGS"; then
1276     AC_MSG_RESULT([$OBJCXXFLAGS])
1277     x_OBJCXXFLAGS=
1278 else
1279     AC_MSG_RESULT(no)
1280     x_OBJCXXFLAGS=[\#]
1282 AC_MSG_CHECKING(for explicit LDFLAGS)
1283 if test -n "$LDFLAGS"; then
1284     AC_MSG_RESULT([$LDFLAGS])
1285     x_LDFLAGS=
1286 else
1287     AC_MSG_RESULT(no)
1288     x_LDFLAGS=[\#]
1290 AC_SUBST(AFLAGS)
1291 AC_SUBST(CFLAGS)
1292 AC_SUBST(CXXFLAGS)
1293 AC_SUBST(OBJCFLAGS)
1294 AC_SUBST(OBJCXXFLAGS)
1295 AC_SUBST(LDFLAGS)
1296 AC_SUBST(x_AFLAGS)
1297 AC_SUBST(x_CFLAGS)
1298 AC_SUBST(x_CXXFLAGS)
1299 AC_SUBST(x_OBJCFLAGS)
1300 AC_SUBST(x_OBJCXXFLAGS)
1301 AC_SUBST(x_LDFLAGS)
1303 dnl These are potentially set for MSVC, in the code checking for UCRT below:
1304 my_original_CFLAGS=$CFLAGS
1305 my_original_CXXFLAGS=$CXXFLAGS
1306 my_original_CPPFLAGS=$CPPFLAGS
1308 dnl The following checks for gcc, cc and then cl (if it weren't guarded for win32)
1309 dnl Needs to precede the AC_C_BIGENDIAN and AC_SEARCH_LIBS calls below, which apparently call
1310 dnl AC_PROG_CC internally.
1311 if test "$_os" != "WINNT"; then
1312     # AC_PROG_CC sets CFLAGS to -g -O2 if not set, avoid that
1313     save_CFLAGS=$CFLAGS
1314     AC_PROG_CC
1315     CFLAGS=$save_CFLAGS
1316     if test -z "$CC_BASE"; then
1317         CC_BASE=`first_arg_basename "$CC"`
1318     fi
1321 if test "$_os" != "WINNT"; then
1322     AC_C_BIGENDIAN([ENDIANNESS=big], [ENDIANNESS=little])
1323 else
1324     ENDIANNESS=little
1326 AC_SUBST(ENDIANNESS)
1328 if test $_os != "WINNT"; then
1329     save_LIBS="$LIBS"
1330     AC_SEARCH_LIBS([dlsym], [dl],
1331         [case "$ac_cv_search_dlsym" in -l*) DLOPEN_LIBS="$ac_cv_search_dlsym";; esac],
1332         [AC_MSG_ERROR([dlsym not found in either libc nor libdl])])
1333     LIBS="$save_LIBS"
1335 AC_SUBST(DLOPEN_LIBS)
1337 # Check for a (GNU) backtrace implementation
1338 AC_ARG_VAR([BACKTRACE_CFLAGS], [Compiler flags needed to use backtrace(3)])
1339 AC_ARG_VAR([BACKTRACE_LIBS], [Linker flags needed to use backtrace(3)])
1340 AS_IF([test "x$BACKTRACE_LIBS$BACKTRACE_CFLAGS" = x], [
1341     save_LIBS="$LIBS"
1342     AC_SEARCH_LIBS([backtrace], [libexecinfo],
1343         [case "$ac_cv_search_backtrace" in -l*) BACKTRACE_LIBS="$ac_cv_search_backtrace";; esac],
1344         [PKG_CHECK_MODULES([BACKTRACE], [libexecinfo], [ac_cv_search_backtrace=], [:])])
1345     LIBS="$save_LIBS"
1347 AS_IF([test "x$ac_cv_search_backtrace" != xno ], [
1348     AC_DEFINE([HAVE_FEATURE_BACKTRACE])
1351 dnl ===================================================================
1352 dnl Sanity checks for Emscripten SDK setup
1353 dnl ===================================================================
1355 if test "$_os" = "Emscripten"; then
1356     EMSCRIPTEN_ERROR=0
1357     if ! which emconfigure >/dev/null 2>&1; then
1358         AC_MSG_WARN([emconfigure must be in your \$PATH])
1359         EMSCRIPTEN_ERROR=1
1360     fi
1361     if test -z "$EMMAKEN_JUST_CONFIGURE"; then
1362         AC_MSG_WARN(["\$EMMAKEN_JUST_CONFIGURE wasn't set by emconfigure. Prefix configure or use autogen.sh])
1363         EMSCRIPTEN_ERROR=1
1364     fi
1365     if test $EMSCRIPTEN_ERROR -ne 0; then
1366         AC_MSG_ERROR(["Please fix your EMSDK setup to build with Emscripten!"])
1367     fi
1370 ###############################################################################
1371 # Extensions switches --enable/--disable
1372 ###############################################################################
1373 # By default these should be enabled unless having extra dependencies.
1374 # If there is extra dependency over configure options then the enable should
1375 # be automagic based on whether the requiring feature is enabled or not.
1376 # All this options change anything only with --enable-extension-integration.
1378 # The name of this option and its help string makes it sound as if
1379 # extensions are built anyway, just not integrated in the installer,
1380 # if you use --disable-extension-integration. Is that really the
1381 # case?
1383 AC_ARG_ENABLE(ios-simulator,
1384     AS_HELP_STRING([--enable-ios-simulator],
1385         [build for iOS simulator])
1388 libo_FUZZ_ARG_ENABLE(extension-integration,
1389     AS_HELP_STRING([--disable-extension-integration],
1390         [Disable integration of the built extensions in the installer of the
1391          product. Use this switch to disable the integration.])
1394 AC_ARG_ENABLE(avmedia,
1395     AS_HELP_STRING([--disable-avmedia],
1396         [Disable displaying and inserting AV media in documents. Work in progress, use only if you are hacking on it.])
1399 AC_ARG_ENABLE(database-connectivity,
1400     AS_HELP_STRING([--disable-database-connectivity],
1401         [Disable various database connectivity. Work in progress, use only if you are hacking on it.])
1404 # This doesn't mean not building (or "integrating") extensions
1405 # (although it probably should; i.e. it should imply
1406 # --disable-extension-integration I guess), it means not supporting
1407 # any extension mechanism at all
1408 libo_FUZZ_ARG_ENABLE(extensions,
1409     AS_HELP_STRING([--disable-extensions],
1410         [Disable all add-on extension functionality. Work in progress, use only if you are hacking on it.])
1413 AC_ARG_ENABLE(scripting,
1414     AS_HELP_STRING([--disable-scripting],
1415         [Disable BASIC, Java and Python. Work in progress, use only if you are hacking on it.])
1418 # This is mainly for Android and iOS, but could potentially be used in some
1419 # special case otherwise, too, so factored out as a separate setting
1421 AC_ARG_ENABLE(dynamic-loading,
1422     AS_HELP_STRING([--disable-dynamic-loading],
1423         [Disable any use of dynamic loading of code. Work in progress, use only if you are hacking on it.])
1426 libo_FUZZ_ARG_ENABLE(report-builder,
1427     AS_HELP_STRING([--disable-report-builder],
1428         [Disable the Report Builder.])
1431 libo_FUZZ_ARG_ENABLE(ext-wiki-publisher,
1432     AS_HELP_STRING([--enable-ext-wiki-publisher],
1433         [Enable the Wiki Publisher extension.])
1436 libo_FUZZ_ARG_ENABLE(lpsolve,
1437     AS_HELP_STRING([--disable-lpsolve],
1438         [Disable compilation of the lp solve solver ])
1440 libo_FUZZ_ARG_ENABLE(coinmp,
1441     AS_HELP_STRING([--disable-coinmp],
1442         [Disable compilation of the CoinMP solver ])
1445 libo_FUZZ_ARG_ENABLE(pdfimport,
1446     AS_HELP_STRING([--disable-pdfimport],
1447         [Disable building the PDF import feature.])
1450 libo_FUZZ_ARG_ENABLE(pdfium,
1451     AS_HELP_STRING([--disable-pdfium],
1452         [Disable building PDFium. Results in unsecure PDF signature verification.])
1455 libo_FUZZ_ARG_ENABLE(skia,
1456     AS_HELP_STRING([--disable-skia],
1457         [Disable building Skia. Use --enable-skia=debug to build without optimizations.])
1460 ###############################################################################
1462 dnl ---------- *** ----------
1464 libo_FUZZ_ARG_ENABLE(mergelibs,
1465     AS_HELP_STRING([--enable-mergelibs],
1466         [Merge several of the smaller libraries into one big, "merged", one.])
1469 libo_FUZZ_ARG_ENABLE(breakpad,
1470     AS_HELP_STRING([--enable-breakpad],
1471         [Enables breakpad for crash reporting.])
1474 libo_FUZZ_ARG_ENABLE(crashdump,
1475     AS_HELP_STRING([--disable-crashdump],
1476         [Disable dump.ini and dump-file, when --enable-breakpad])
1479 AC_ARG_ENABLE(fetch-external,
1480     AS_HELP_STRING([--disable-fetch-external],
1481         [Disables fetching external tarballs from web sources.])
1484 AC_ARG_ENABLE(fuzzers,
1485     AS_HELP_STRING([--enable-fuzzers],
1486         [Enables building libfuzzer targets for fuzz testing.])
1489 libo_FUZZ_ARG_ENABLE(pch,
1490     AS_HELP_STRING([--enable-pch=<yes/no/system/base/normal/full>],
1491         [Enables precompiled header support for C++. Forced default on Windows/VC build.
1492          Using 'system' will include only external headers, 'base' will add also headers
1493          from base modules, 'normal' will also add all headers except from the module built,
1494          'full' will use all suitable headers even from a module itself.])
1497 libo_FUZZ_ARG_ENABLE(epm,
1498     AS_HELP_STRING([--enable-epm],
1499         [LibreOffice includes self-packaging code, that requires epm, however epm is
1500          useless for large scale package building.])
1503 libo_FUZZ_ARG_ENABLE(odk,
1504     AS_HELP_STRING([--enable-odk],
1505         [Enable building the Office Development Kit, the part that extensions need to build against])
1508 AC_ARG_ENABLE(mpl-subset,
1509     AS_HELP_STRING([--enable-mpl-subset],
1510         [Don't compile any pieces which are not MPL or more liberally licensed])
1513 libo_FUZZ_ARG_ENABLE(evolution2,
1514     AS_HELP_STRING([--enable-evolution2],
1515         [Allows the built-in evolution 2 addressbook connectivity build to be
1516          enabled.])
1519 AC_ARG_ENABLE(avahi,
1520     AS_HELP_STRING([--enable-avahi],
1521         [Determines whether to use Avahi to advertise Impress to remote controls.])
1524 libo_FUZZ_ARG_ENABLE(werror,
1525     AS_HELP_STRING([--enable-werror],
1526         [Turn warnings to errors. (Has no effect in modules where the treating
1527          of warnings as errors is disabled explicitly.)]),
1530 libo_FUZZ_ARG_ENABLE(assert-always-abort,
1531     AS_HELP_STRING([--enable-assert-always-abort],
1532         [make assert() failures abort even when building without --enable-debug or --enable-dbgutil.]),
1535 libo_FUZZ_ARG_ENABLE(dbgutil,
1536     AS_HELP_STRING([--enable-dbgutil],
1537         [Provide debugging support from --enable-debug and include additional debugging
1538          utilities such as object counting or more expensive checks.
1539          This is the recommended option for developers.
1540          Note that this makes the build ABI incompatible, it is not possible to mix object
1541          files or libraries from a --enable-dbgutil and a --disable-dbgutil build.]))
1543 libo_FUZZ_ARG_ENABLE(debug,
1544     AS_HELP_STRING([--enable-debug],
1545         [Include debugging information, disable compiler optimization and inlining plus
1546          extra debugging code like assertions. Extra large build! (enables -g compiler flag).]))
1548 libo_FUZZ_ARG_ENABLE(split-debug,
1549     AS_HELP_STRING([--disable-split-debug],
1550         [Disable using split debug information (-gsplit-dwarf compile flag). Split debug information
1551          saves disk space and build time, but requires tools that support it (both build tools and debuggers).]))
1553 libo_FUZZ_ARG_ENABLE(gdb-index,
1554     AS_HELP_STRING([--disable-gdb-index],
1555         [Disables creating debug information in the gdb index format, which makes gdb start faster.
1556          The feature requires the gold or lld linker.]))
1558 libo_FUZZ_ARG_ENABLE(sal-log,
1559     AS_HELP_STRING([--enable-sal-log],
1560         [Make SAL_INFO and SAL_WARN calls do something even in a non-debug build.]))
1562 libo_FUZZ_ARG_ENABLE(symbols,
1563     AS_HELP_STRING([--enable-symbols],
1564         [Generate debug information.
1565          By default, enabled for --enable-debug and --enable-dbgutil, disabled
1566          otherwise. It is possible to explicitly specify gbuild build targets
1567          (where 'all' means everything, '-' prepended means to not enable, '/' appended means
1568          everything in the directory; there is no ordering, more specific overrides
1569          more general, and disabling takes precedence).
1570          Example: --enable-symbols="all -sw/ -Library_sc".]))
1572 libo_FUZZ_ARG_ENABLE(optimized,
1573     AS_HELP_STRING([--enable-optimized=<yes/no/debug>],
1574         [Whether to compile with optimization flags.
1575          By default, disabled for --enable-debug and --enable-dbgutil, enabled
1576          otherwise. Using 'debug' will try to use only optimizations that should
1577          not interfere with debugging. For Emscripten we default to optimized (-O1)
1578          debug build, as otherwise binaries become too large.]))
1580 libo_FUZZ_ARG_ENABLE(runtime-optimizations,
1581     AS_HELP_STRING([--disable-runtime-optimizations],
1582         [Statically disable certain runtime optimizations (like rtl/alloc.h or
1583          JVM JIT) that are known to interact badly with certain dynamic analysis
1584          tools (like -fsanitize=address or Valgrind).  By default, disabled iff
1585          CC contains "-fsanitize=*".  (For Valgrind, those runtime optimizations
1586          are typically disabled dynamically via RUNNING_ON_VALGRIND.)]))
1588 AC_ARG_WITH(valgrind,
1589     AS_HELP_STRING([--with-valgrind],
1590         [Make availability of Valgrind headers a hard requirement.]))
1592 libo_FUZZ_ARG_ENABLE(compiler-plugins,
1593     AS_HELP_STRING([--enable-compiler-plugins],
1594         [Enable compiler plugins that will perform additional checks during
1595          building. Enabled automatically by --enable-dbgutil.
1596          Use --enable-compiler-plugins=debug to also enable debug code in the plugins.]))
1597 COMPILER_PLUGINS_DEBUG=
1598 if test "$enable_compiler_plugins" = debug; then
1599     enable_compiler_plugins=yes
1600     COMPILER_PLUGINS_DEBUG=TRUE
1603 libo_FUZZ_ARG_ENABLE(compiler-plugins-analyzer-pch,
1604     AS_HELP_STRING([--disable-compiler-plugins-analyzer-pch],
1605         [Disable use of precompiled headers when running the Clang compiler plugin analyzer.  Not
1606          relevant in the --disable-compiler-plugins case.]))
1608 libo_FUZZ_ARG_ENABLE(ooenv,
1609     AS_HELP_STRING([--enable-ooenv],
1610         [Enable ooenv for the instdir installation.]))
1612 AC_ARG_ENABLE(lto,
1613     AS_HELP_STRING([--enable-lto],
1614         [Enable link-time optimization. Suitable for (optimised) product builds. Building might take
1615          longer but libraries and executables are optimized for speed. For GCC, best to use the 'gold'
1616          linker.)]))
1618 AC_ARG_ENABLE(python,
1619     AS_HELP_STRING([--enable-python=<no/auto/system/internal/fully-internal>],
1620         [Enables or disables Python support at run-time.
1621          Also specifies what Python to use at build-time.
1622          'fully-internal' even forces the internal version for uses of Python
1623          during the build.
1624          On macOS the only choices are
1625          'internal' (default) or 'fully-internal'. Otherwise the default is 'auto'.
1626          ]))
1628 libo_FUZZ_ARG_ENABLE(gtk3,
1629     AS_HELP_STRING([--disable-gtk3],
1630         [Determines whether to use Gtk+ 3.0 vclplug on platforms where Gtk+ 3.0 is available.]),
1631 ,test "${enable_gtk3+set}" = set || enable_gtk3=yes)
1633 AC_ARG_ENABLE(gtk4,
1634     AS_HELP_STRING([--enable-gtk4],
1635         [Determines whether to use Gtk+ 4.0 vclplug on platforms where Gtk+ 4.0 is available.]))
1637 AC_ARG_ENABLE(introspection,
1638     AS_HELP_STRING([--enable-introspection],
1639         [Generate files for GObject introspection.  Requires --enable-gtk3.  (Typically used by
1640          Linux distributions.)]))
1642 AC_ARG_ENABLE(split-app-modules,
1643     AS_HELP_STRING([--enable-split-app-modules],
1644         [Split file lists for app modules, e.g. base, calc.
1645          Has effect only with make distro-pack-install]),
1648 AC_ARG_ENABLE(split-opt-features,
1649     AS_HELP_STRING([--enable-split-opt-features],
1650         [Split file lists for some optional features, e.g. pyuno, testtool.
1651          Has effect only with make distro-pack-install]),
1654 libo_FUZZ_ARG_ENABLE(cairo-canvas,
1655     AS_HELP_STRING([--disable-cairo-canvas],
1656         [Determines whether to build the Cairo canvas on platforms where Cairo is available.]),
1659 libo_FUZZ_ARG_ENABLE(dbus,
1660     AS_HELP_STRING([--disable-dbus],
1661         [Determines whether to enable features that depend on dbus.
1662          e.g. Presentation mode screensaver control, bluetooth presentation control, automatic font install]),
1663 ,test "${enable_dbus+set}" = set || enable_dbus=yes)
1665 libo_FUZZ_ARG_ENABLE(sdremote,
1666     AS_HELP_STRING([--disable-sdremote],
1667         [Determines whether to enable Impress remote control (i.e. the server component).]),
1668 ,test "${enable_sdremote+set}" = set || enable_sdremote=yes)
1670 libo_FUZZ_ARG_ENABLE(sdremote-bluetooth,
1671     AS_HELP_STRING([--disable-sdremote-bluetooth],
1672         [Determines whether to build sdremote with bluetooth support.
1673          Requires dbus on Linux.]))
1675 libo_FUZZ_ARG_ENABLE(gio,
1676     AS_HELP_STRING([--disable-gio],
1677         [Determines whether to use the GIO support.]),
1678 ,test "${enable_gio+set}" = set || enable_gio=yes)
1680 AC_ARG_ENABLE(qt5,
1681     AS_HELP_STRING([--enable-qt5],
1682         [Determines whether to use Qt5 vclplug on platforms where Qt5 is
1683          available.]),
1686 AC_ARG_ENABLE(qt6,
1687     AS_HELP_STRING([--enable-qt6],
1688         [Determines whether to use Qt6 vclplug on platforms where Qt6 is
1689          available.]),
1692 AC_ARG_ENABLE(kf5,
1693     AS_HELP_STRING([--enable-kf5],
1694         [Determines whether to use Qt5/KF5 vclplug on platforms where Qt5 and
1695          KF5 are available.]),
1698 AC_ARG_ENABLE(gtk3_kde5,
1699     AS_HELP_STRING([--enable-gtk3-kde5],
1700         [Determines whether to use Gtk3 vclplug with KF5 file dialogs on
1701          platforms where Gtk3, Qt5 and Plasma is available.]),
1704 AC_ARG_ENABLE(gui,
1705     AS_HELP_STRING([--disable-gui],
1706         [Disable use of X11 or Wayland to reduce dependencies (e.g. for building LibreOfficeKit).]),
1707 ,enable_gui=yes)
1709 libo_FUZZ_ARG_ENABLE(randr,
1710     AS_HELP_STRING([--disable-randr],
1711         [Disable RandR support in the vcl project.]),
1712 ,test "${enable_randr+set}" = set || enable_randr=yes)
1714 libo_FUZZ_ARG_ENABLE(gstreamer-1-0,
1715     AS_HELP_STRING([--disable-gstreamer-1-0],
1716         [Disable building with the gstreamer 1.0 avmedia backend.]),
1717 ,test "${enable_gstreamer_1_0+set}" = set || enable_gstreamer_1_0=yes)
1719 libo_FUZZ_ARG_ENABLE([eot],
1720     [AS_HELP_STRING([--enable-eot],
1721         [Enable support for Embedded OpenType fonts.])],
1722 ,test "${enable_eot+set}" = set || enable_eot=no)
1724 libo_FUZZ_ARG_ENABLE(cve-tests,
1725     AS_HELP_STRING([--disable-cve-tests],
1726         [Prevent CVE tests to be executed]),
1729 libo_FUZZ_ARG_ENABLE(chart-tests,
1730     AS_HELP_STRING([--enable-chart-tests],
1731         [Executes chart XShape tests. In a perfect world these tests would be
1732          stable and everyone could run them, in reality it is best to run them
1733          only on a few machines that are known to work and maintained by people
1734          who can judge if a test failure is a regression or not.]),
1737 AC_ARG_ENABLE(build-opensymbol,
1738     AS_HELP_STRING([--enable-build-opensymbol],
1739         [Do not use the prebuilt opens___.ttf. Build it instead. This needs
1740          fontforge installed.]),
1743 AC_ARG_ENABLE(dependency-tracking,
1744     AS_HELP_STRING([--enable-dependency-tracking],
1745         [Do not reject slow dependency extractors.])[
1746   --disable-dependency-tracking
1747                           Disables generation of dependency information.
1748                           Speed up one-time builds.],
1751 AC_ARG_ENABLE(icecream,
1752     AS_HELP_STRING([--enable-icecream],
1753         [Use the 'icecream' distributed compiling tool to speedup the compilation.
1754          It defaults to /opt/icecream for the location of the icecream gcc/g++
1755          wrappers, you can override that using --with-gcc-home=/the/path switch.]),
1758 AC_ARG_ENABLE(ld,
1759     AS_HELP_STRING([--enable-ld=<linker>],
1760         [Use the specified linker. Both 'gold' and 'lld' linkers generally use less memory and link faster.
1761          By default tries to use the best linker possible, use --disable-ld to use the default linker.
1762          If <linker> contains any ':', the part before the first ':' is used as the value of
1763          -fuse-ld, while the part after the first ':' is used as the value of --ld-path (which is
1764          needed for Clang 12).]),
1767 libo_FUZZ_ARG_ENABLE(cups,
1768     AS_HELP_STRING([--disable-cups],
1769         [Do not build cups support.])
1772 AC_ARG_ENABLE(ccache,
1773     AS_HELP_STRING([--disable-ccache],
1774         [Do not try to use ccache automatically.
1775          By default we will try to detect if ccache is available; in that case if
1776          CC/CXX are not yet set, and --enable-icecream is not given, we
1777          attempt to use ccache. --disable-ccache disables ccache completely.
1778          Additionally ccache's depend mode is enabled if possible,
1779          use --enable-ccache=nodepend to enable ccache without depend mode.
1783 AC_ARG_ENABLE(z7-debug,
1784     AS_HELP_STRING([--enable-z7-debug],
1785         [Makes the MSVC compiler use -Z7 for debugging instead of the default -Zi. Using this option takes
1786          more disk spaces but allows to use ccache. Final PDB files are created even with this option enabled.
1787          Enabled by default if ccache is detected.]))
1789 libo_FUZZ_ARG_ENABLE(online-update,
1790     AS_HELP_STRING([--enable-online-update],
1791         [Enable the online update service that will check for new versions of
1792          LibreOffice. Disabled by default. Requires --with-privacy-policy-url to be set.
1793          If the value is "mar", the experimental Mozilla-like update will be
1794          enabled instead of the traditional update mechanism.]),
1797 AC_ARG_WITH(update-config,
1798     AS_HELP_STRING([--with-update-config=/tmp/update.ini],
1799                    [Path to the update config ini file]))
1801 libo_FUZZ_ARG_ENABLE(extension-update,
1802     AS_HELP_STRING([--disable-extension-update],
1803         [Disable possibility to update installed extensions.]),
1806 libo_FUZZ_ARG_ENABLE(release-build,
1807     AS_HELP_STRING([--enable-release-build],
1808         [Enable release build. Note that the "release build" choice is orthogonal to
1809          whether symbols are present, debug info is generated, or optimization
1810          is done.
1811          See http://wiki.documentfoundation.org/Development/DevBuild]),
1814 AC_ARG_ENABLE(windows-build-signing,
1815     AS_HELP_STRING([--enable-windows-build-signing],
1816         [Enable signing of windows binaries (*.exe, *.dll)]),
1819 AC_ARG_ENABLE(silent-msi,
1820     AS_HELP_STRING([--enable-silent-msi],
1821         [Enable MSI with LIMITUI=1 (silent install).]),
1824 AC_ARG_ENABLE(macosx-code-signing,
1825     AS_HELP_STRING([--enable-macosx-code-signing=<identity>],
1826         [Sign executables, dylibs, frameworks and the app bundle. If you
1827          don't provide an identity the first suitable certificate
1828          in your keychain is used.]),
1831 AC_ARG_ENABLE(macosx-package-signing,
1832     AS_HELP_STRING([--enable-macosx-package-signing=<identity>],
1833         [Create a .pkg suitable for uploading to the Mac App Store and sign
1834          it. If you don't provide an identity the first suitable certificate
1835          in your keychain is used.]),
1838 AC_ARG_ENABLE(macosx-sandbox,
1839     AS_HELP_STRING([--enable-macosx-sandbox],
1840         [Make the app bundle run in a sandbox. Requires code signing.
1841          Is required by apps distributed in the Mac App Store, and implies
1842          adherence to App Store rules.]),
1845 AC_ARG_WITH(macosx-bundle-identifier,
1846     AS_HELP_STRING([--with-macosx-bundle-identifier=tld.mumble.orifice.TheOffice],
1847         [Define the macOS bundle identifier. Default is the somewhat weird
1848          org.libreoffice.script ("script", huh?).]),
1849 ,with_macosx_bundle_identifier=org.libreoffice.script)
1851 AC_ARG_WITH(macosx-provisioning-profile,
1852     AS_HELP_STRING([--with-macosx-provisioning-profile=/path/to/mac.provisionprofile],
1853         [Specify the path to a provisioning profile to use]),
1856 AC_ARG_WITH(product-name,
1857     AS_HELP_STRING([--with-product-name='My Own Office Suite'],
1858         [Define the product name. Default is AC_PACKAGE_NAME.]),
1859 ,with_product_name=$PRODUCTNAME)
1861 libo_FUZZ_ARG_ENABLE(community-flavor,
1862     AS_HELP_STRING([--disable-community-flavor],
1863         [Disable the Community branding.]),
1866 AC_ARG_WITH(package-version,
1867     AS_HELP_STRING([--with-package-version='3.1.4.5'],
1868         [Define the package version. Default is AC_PACKAGE_VERSION. Use only if you distribute an own build for macOS.]),
1871 libo_FUZZ_ARG_ENABLE(readonly-installset,
1872     AS_HELP_STRING([--enable-readonly-installset],
1873         [Prevents any attempts by LibreOffice to write into its installation. That means
1874          at least that no "system-wide" extensions can be added. Partly experimental work in
1875          progress, probably not fully implemented. Always enabled for macOS.]),
1878 libo_FUZZ_ARG_ENABLE(mariadb-sdbc,
1879     AS_HELP_STRING([--disable-mariadb-sdbc],
1880         [Disable the build of the MariaDB/MySQL-SDBC driver.])
1883 libo_FUZZ_ARG_ENABLE(postgresql-sdbc,
1884     AS_HELP_STRING([--disable-postgresql-sdbc],
1885         [Disable the build of the PostgreSQL-SDBC driver.])
1888 libo_FUZZ_ARG_ENABLE(lotuswordpro,
1889     AS_HELP_STRING([--disable-lotuswordpro],
1890         [Disable the build of the Lotus Word Pro filter.]),
1891 ,test "${enable_lotuswordpro+set}" = set || enable_lotuswordpro=yes)
1893 libo_FUZZ_ARG_ENABLE(firebird-sdbc,
1894     AS_HELP_STRING([--disable-firebird-sdbc],
1895         [Disable the build of the Firebird-SDBC driver if it doesn't compile for you.]),
1896 ,test "${enable_firebird_sdbc+set}" = set || enable_firebird_sdbc=yes)
1898 AC_ARG_ENABLE(bogus-pkg-config,
1899     AS_HELP_STRING([--enable-bogus-pkg-config],
1900         [MACOSX only: on MacOSX pkg-config can cause trouble. by default if one is found in the PATH, an error is issued. This flag turn that error into a warning.]),
1903 AC_ARG_ENABLE(openssl,
1904     AS_HELP_STRING([--disable-openssl],
1905         [Disable using libssl/libcrypto from OpenSSL. If disabled,
1906          components will either use GNUTLS or NSS. Work in progress,
1907          use only if you are hacking on it.]),
1908 ,enable_openssl=yes)
1910 libo_FUZZ_ARG_ENABLE(cipher-openssl-backend,
1911     AS_HELP_STRING([--enable-cipher-openssl-backend],
1912         [Enable using OpenSSL as the actual implementation of the rtl/cipher.h functionality.
1913          Requires --enable-openssl.]))
1915 AC_ARG_ENABLE(nss,
1916     AS_HELP_STRING([--disable-nss],
1917         [Disable using NSS. If disabled,
1918          components will either use GNUTLS or openssl. Work in progress,
1919          use only if you are hacking on it.]),
1920 ,enable_nss=yes)
1922 AC_ARG_ENABLE(library-bin-tar,
1923     AS_HELP_STRING([--enable-library-bin-tar],
1924         [Enable the building and reused of tarball of binary build for some 'external' libraries.
1925         Some libraries can save their build result in a tarball
1926         stored in TARFILE_LOCATION. That binary tarball is
1927         uniquely identified by the source tarball,
1928         the content of the config_host.mk file and the content
1929         of the top-level directory in core for that library
1930         If this option is enabled, then if such a tarfile exist, it will be untarred
1931         instead of the source tarfile, and the build step will be skipped for that
1932         library.
1933         If a proper tarfile does not exist, then the normal source-based
1934         build is done for that library and a proper binary tarfile is created
1935         for the next time.]),
1938 AC_ARG_ENABLE(dconf,
1939     AS_HELP_STRING([--disable-dconf],
1940         [Disable the dconf configuration backend (enabled by default where
1941          available).]))
1943 libo_FUZZ_ARG_ENABLE(formula-logger,
1944     AS_HELP_STRING(
1945         [--enable-formula-logger],
1946         [Enable formula logger for logging formula calculation flow in Calc.]
1947     )
1950 AC_ARG_ENABLE(ldap,
1951     AS_HELP_STRING([--disable-ldap],
1952         [Disable LDAP support.]),
1953 ,enable_ldap=yes)
1955 AC_ARG_ENABLE(opencl,
1956     AS_HELP_STRING([--disable-opencl],
1957         [Disable OpenCL support.]),
1958 ,enable_opencl=yes)
1960 libo_FUZZ_ARG_ENABLE(librelogo,
1961     AS_HELP_STRING([--disable-librelogo],
1962         [Do not build LibreLogo.]),
1963 ,enable_librelogo=yes)
1965 AC_ARG_ENABLE(cmis,
1966     AS_HELP_STRING([--disable-cmis],
1967         [Disable CMIS support.]),
1968 ,enable_cmis=yes)
1970 AC_ARG_ENABLE(curl,
1971     AS_HELP_STRING([--disable-curl],
1972         [Disable CURL support.]),
1973 ,enable_curl=yes)
1975 AC_ARG_ENABLE(wasm-strip,
1976     AS_HELP_STRING([--enable-wasm-strip],
1977         [Strip the static build like for WASM/emscripten platform.]),
1978 ,enable_wasm_strip=yes)
1980 AC_ARG_ENABLE(xmlhelp,
1981     AS_HELP_STRING([--disable-xmlhelp],
1982         [Disable XML help support]),
1983 ,enable_xmlhelp=yes)
1986 dnl ===================================================================
1987 dnl Optional Packages (--with/without-)
1988 dnl ===================================================================
1990 AC_ARG_WITH(gcc-home,
1991     AS_HELP_STRING([--with-gcc-home],
1992         [Specify the location of gcc/g++ manually. This can be used in conjunction
1993          with --enable-icecream when icecream gcc/g++ wrappers are installed in a
1994          non-default path.]),
1997 AC_ARG_WITH(gnu-patch,
1998     AS_HELP_STRING([--with-gnu-patch],
1999         [Specify location of GNU patch on Solaris or FreeBSD.]),
2002 AC_ARG_WITH(build-platform-configure-options,
2003     AS_HELP_STRING([--with-build-platform-configure-options],
2004         [Specify options for the configure script run for the *build* platform in a cross-compilation]),
2007 AC_ARG_WITH(gnu-cp,
2008     AS_HELP_STRING([--with-gnu-cp],
2009         [Specify location of GNU cp on Solaris or FreeBSD.]),
2012 AC_ARG_WITH(external-tar,
2013     AS_HELP_STRING([--with-external-tar=<TARFILE_PATH>],
2014         [Specify an absolute path of where to find (and store) tarfiles.]),
2015     TARFILE_LOCATION=$withval ,
2018 AC_ARG_WITH(referenced-git,
2019     AS_HELP_STRING([--with-referenced-git=<OTHER_CHECKOUT_DIR>],
2020         [Specify another checkout directory to reference. This makes use of
2021                  git submodule update --reference, and saves a lot of diskspace
2022                  when having multiple trees side-by-side.]),
2023     GIT_REFERENCE_SRC=$withval ,
2026 AC_ARG_WITH(linked-git,
2027     AS_HELP_STRING([--with-linked-git=<submodules repo basedir>],
2028         [Specify a directory where the repositories of submodules are located.
2029          This uses a method similar to git-new-workdir to get submodules.]),
2030     GIT_LINK_SRC=$withval ,
2033 AC_ARG_WITH(galleries,
2034     AS_HELP_STRING([--with-galleries],
2035         [Specify how galleries should be built. It is possible either to
2036          build these internally from source ("build"),
2037          or to disable them ("no")]),
2040 AC_ARG_WITH(theme,
2041     AS_HELP_STRING([--with-theme="theme1 theme2..."],
2042         [Choose which themes to include. By default those themes with an '*' are included.
2043          Possible choices: *breeze, *breeze_dark, *breeze_dark_svg, *breeze_svg, *colibre, *colibre_svg, *elementary,
2044          *elementary_svg, *karasa_jaga, *karasa_jaga_svg, *sifr, *sifr_dark, *sifr_dark_svg, *sifr_svg, *sukapura, *sukapura_svg.]),
2047 libo_FUZZ_ARG_WITH(helppack-integration,
2048     AS_HELP_STRING([--without-helppack-integration],
2049         [It will not integrate the helppacks to the installer
2050          of the product. Please use this switch to use the online help
2051          or separate help packages.]),
2054 libo_FUZZ_ARG_WITH(fonts,
2055     AS_HELP_STRING([--without-fonts],
2056         [LibreOffice includes some third-party fonts to provide a reliable basis for
2057          help content, templates, samples, etc. When these fonts are already
2058          known to be available on the system then you should use this option.]),
2061 AC_ARG_WITH(epm,
2062     AS_HELP_STRING([--with-epm],
2063         [Decides which epm to use. Default is to use the one from the system if
2064          one is built. When either this is not there or you say =internal epm
2065          will be built.]),
2068 AC_ARG_WITH(package-format,
2069     AS_HELP_STRING([--with-package-format],
2070         [Specify package format(s) for LibreOffice installation sets. The
2071          implicit --without-package-format leads to no installation sets being
2072          generated. Possible values: aix, archive, bsd, deb, dmg,
2073          installed, msi, pkg, and rpm.
2074          Example: --with-package-format='deb rpm']),
2077 AC_ARG_WITH(tls,
2078     AS_HELP_STRING([--with-tls],
2079         [Decides which TLS/SSL and cryptographic implementations to use for
2080          LibreOffice's code. Notice that this doesn't apply for depending
2081          libraries like "neon", for example. Default is to use NSS
2082          although OpenSSL is also possible. Notice that selecting NSS restricts
2083          the usage of OpenSSL in LO's code but selecting OpenSSL doesn't
2084          restrict by now the usage of NSS in LO's code. Possible values:
2085          openssl, nss. Example: --with-tls="nss"]),
2088 AC_ARG_WITH(system-libs,
2089     AS_HELP_STRING([--with-system-libs],
2090         [Use libraries already on system -- enables all --with-system-* flags.]),
2093 AC_ARG_WITH(system-bzip2,
2094     AS_HELP_STRING([--with-system-bzip2],
2095         [Use bzip2 already on system. Used only when --enable-online-update=mar]),,
2096     [with_system_bzip2="$with_system_libs"])
2098 AC_ARG_WITH(system-headers,
2099     AS_HELP_STRING([--with-system-headers],
2100         [Use headers already on system -- enables all --with-system-* flags for
2101          external packages whose headers are the only entities used i.e.
2102          boost/odbc/sane-header(s).]),,
2103     [with_system_headers="$with_system_libs"])
2105 AC_ARG_WITH(system-jars,
2106     AS_HELP_STRING([--without-system-jars],
2107         [When building with --with-system-libs, also the needed jars are expected
2108          on the system. Use this to disable that]),,
2109     [with_system_jars="$with_system_libs"])
2111 AC_ARG_WITH(system-cairo,
2112     AS_HELP_STRING([--with-system-cairo],
2113         [Use cairo libraries already on system.  Happens automatically for
2114          (implicit) --enable-gtk3.]))
2116 AC_ARG_WITH(system-epoxy,
2117     AS_HELP_STRING([--with-system-epoxy],
2118         [Use epoxy libraries already on system.  Happens automatically for
2119          (implicit) --enable-gtk3.]),,
2120        [with_system_epoxy="$with_system_libs"])
2122 AC_ARG_WITH(myspell-dicts,
2123     AS_HELP_STRING([--with-myspell-dicts],
2124         [Adds myspell dictionaries to the LibreOffice installation set]),
2127 AC_ARG_WITH(system-dicts,
2128     AS_HELP_STRING([--without-system-dicts],
2129         [Do not use dictionaries from system paths.]),
2132 AC_ARG_WITH(external-dict-dir,
2133     AS_HELP_STRING([--with-external-dict-dir],
2134         [Specify external dictionary dir.]),
2137 AC_ARG_WITH(external-hyph-dir,
2138     AS_HELP_STRING([--with-external-hyph-dir],
2139         [Specify external hyphenation pattern dir.]),
2142 AC_ARG_WITH(external-thes-dir,
2143     AS_HELP_STRING([--with-external-thes-dir],
2144         [Specify external thesaurus dir.]),
2147 AC_ARG_WITH(system-zlib,
2148     AS_HELP_STRING([--with-system-zlib],
2149         [Use zlib already on system.]),,
2150     [with_system_zlib=auto])
2152 AC_ARG_WITH(system-jpeg,
2153     AS_HELP_STRING([--with-system-jpeg],
2154         [Use jpeg already on system.]),,
2155     [with_system_jpeg="$with_system_libs"])
2157 AC_ARG_WITH(system-clucene,
2158     AS_HELP_STRING([--with-system-clucene],
2159         [Use clucene already on system.]),,
2160     [with_system_clucene="$with_system_libs"])
2162 AC_ARG_WITH(system-expat,
2163     AS_HELP_STRING([--with-system-expat],
2164         [Use expat already on system.]),,
2165     [with_system_expat="$with_system_libs"])
2167 AC_ARG_WITH(system-libxml,
2168     AS_HELP_STRING([--with-system-libxml],
2169         [Use libxml/libxslt already on system.]),,
2170     [with_system_libxml=auto])
2172 AC_ARG_WITH(system-icu,
2173     AS_HELP_STRING([--with-system-icu],
2174         [Use icu already on system.]),,
2175     [with_system_icu="$with_system_libs"])
2177 AC_ARG_WITH(system-ucpp,
2178     AS_HELP_STRING([--with-system-ucpp],
2179         [Use ucpp already on system.]),,
2180     [])
2182 AC_ARG_WITH(system-openldap,
2183     AS_HELP_STRING([--with-system-openldap],
2184         [Use the OpenLDAP LDAP SDK already on system.]),,
2185     [with_system_openldap="$with_system_libs"])
2187 libo_FUZZ_ARG_ENABLE(poppler,
2188     AS_HELP_STRING([--disable-poppler],
2189         [Disable building Poppler.])
2192 AC_ARG_WITH(system-poppler,
2193     AS_HELP_STRING([--with-system-poppler],
2194         [Use system poppler (only needed for PDF import).]),,
2195     [with_system_poppler="$with_system_libs"])
2197 AC_ARG_WITH(system-abseil,
2198     AS_HELP_STRING([--with-system-abseil],
2199         [Use the abseil libraries already on system.]),,
2200     [with_system_abseil="$with_system_libs"])
2202 AC_ARG_WITH(system-openjpeg,
2203     AS_HELP_STRING([--with-system-openjpeg],
2204         [Use the OpenJPEG library already on system.]),,
2205     [with_system_openjpeg="$with_system_libs"])
2207 libo_FUZZ_ARG_ENABLE(gpgmepp,
2208     AS_HELP_STRING([--disable-gpgmepp],
2209         [Disable building gpgmepp. Do not use in normal cases unless you want to fix potential problems it causes.])
2212 AC_ARG_WITH(system-gpgmepp,
2213     AS_HELP_STRING([--with-system-gpgmepp],
2214         [Use gpgmepp already on system]),,
2215     [with_system_gpgmepp="$with_system_libs"])
2217 AC_ARG_WITH(system-mariadb,
2218     AS_HELP_STRING([--with-system-mariadb],
2219         [Use MariaDB/MySQL libraries already on system.]),,
2220     [with_system_mariadb="$with_system_libs"])
2222 AC_ARG_ENABLE(bundle-mariadb,
2223     AS_HELP_STRING([--enable-bundle-mariadb],
2224         [When using MariaDB/MySQL libraries already on system, bundle them with the MariaDB Connector/LibreOffice.])
2227 AC_ARG_WITH(system-postgresql,
2228     AS_HELP_STRING([--with-system-postgresql],
2229         [Use PostgreSQL libraries already on system, for building the PostgreSQL-SDBC
2230          driver. If pg_config is not in PATH, use PGCONFIG to point to it.]),,
2231     [with_system_postgresql="$with_system_libs"])
2233 AC_ARG_WITH(libpq-path,
2234     AS_HELP_STRING([--with-libpq-path=<absolute path to your libpq installation>],
2235         [Use this PostgreSQL C interface (libpq) installation for building
2236          the PostgreSQL-SDBC extension.]),
2239 AC_ARG_WITH(system-firebird,
2240     AS_HELP_STRING([--with-system-firebird],
2241         [Use Firebird libraries already on system, for building the Firebird-SDBC
2242          driver. If fb_config is not in PATH, use FBCONFIG to point to it.]),,
2243     [with_system_firebird="$with_system_libs"])
2245 AC_ARG_WITH(system-libtommath,
2246             AS_HELP_STRING([--with-system-libtommath],
2247                            [Use libtommath already on system]),,
2248             [with_system_libtommath="$with_system_libs"])
2250 AC_ARG_WITH(system-hsqldb,
2251     AS_HELP_STRING([--with-system-hsqldb],
2252         [Use hsqldb already on system.]))
2254 AC_ARG_WITH(hsqldb-jar,
2255     AS_HELP_STRING([--with-hsqldb-jar=JARFILE],
2256         [Specify path to jarfile manually.]),
2257     HSQLDB_JAR=$withval)
2259 libo_FUZZ_ARG_ENABLE(scripting-beanshell,
2260     AS_HELP_STRING([--disable-scripting-beanshell],
2261         [Disable support for scripts in BeanShell.]),
2265 AC_ARG_WITH(system-beanshell,
2266     AS_HELP_STRING([--with-system-beanshell],
2267         [Use beanshell already on system.]),,
2268     [with_system_beanshell="$with_system_jars"])
2270 AC_ARG_WITH(beanshell-jar,
2271     AS_HELP_STRING([--with-beanshell-jar=JARFILE],
2272         [Specify path to jarfile manually.]),
2273     BSH_JAR=$withval)
2275 libo_FUZZ_ARG_ENABLE(scripting-javascript,
2276     AS_HELP_STRING([--disable-scripting-javascript],
2277         [Disable support for scripts in JavaScript.]),
2281 AC_ARG_WITH(system-rhino,
2282     AS_HELP_STRING([--with-system-rhino],
2283         [Use rhino already on system.]),,)
2284 #    [with_system_rhino="$with_system_jars"])
2285 # Above is not used as we have different debug interface
2286 # patched into internal rhino. This code needs to be fixed
2287 # before we can enable it by default.
2289 AC_ARG_WITH(rhino-jar,
2290     AS_HELP_STRING([--with-rhino-jar=JARFILE],
2291         [Specify path to jarfile manually.]),
2292     RHINO_JAR=$withval)
2294 AC_ARG_WITH(system-jfreereport,
2295     AS_HELP_STRING([--with-system-jfreereport],
2296         [Use JFreeReport already on system.]),,
2297     [with_system_jfreereport="$with_system_jars"])
2299 AC_ARG_WITH(sac-jar,
2300     AS_HELP_STRING([--with-sac-jar=JARFILE],
2301         [Specify path to jarfile manually.]),
2302     SAC_JAR=$withval)
2304 AC_ARG_WITH(libxml-jar,
2305     AS_HELP_STRING([--with-libxml-jar=JARFILE],
2306         [Specify path to jarfile manually.]),
2307     LIBXML_JAR=$withval)
2309 AC_ARG_WITH(flute-jar,
2310     AS_HELP_STRING([--with-flute-jar=JARFILE],
2311         [Specify path to jarfile manually.]),
2312     FLUTE_JAR=$withval)
2314 AC_ARG_WITH(jfreereport-jar,
2315     AS_HELP_STRING([--with-jfreereport-jar=JARFILE],
2316         [Specify path to jarfile manually.]),
2317     JFREEREPORT_JAR=$withval)
2319 AC_ARG_WITH(liblayout-jar,
2320     AS_HELP_STRING([--with-liblayout-jar=JARFILE],
2321         [Specify path to jarfile manually.]),
2322     LIBLAYOUT_JAR=$withval)
2324 AC_ARG_WITH(libloader-jar,
2325     AS_HELP_STRING([--with-libloader-jar=JARFILE],
2326         [Specify path to jarfile manually.]),
2327     LIBLOADER_JAR=$withval)
2329 AC_ARG_WITH(libformula-jar,
2330     AS_HELP_STRING([--with-libformula-jar=JARFILE],
2331         [Specify path to jarfile manually.]),
2332     LIBFORMULA_JAR=$withval)
2334 AC_ARG_WITH(librepository-jar,
2335     AS_HELP_STRING([--with-librepository-jar=JARFILE],
2336         [Specify path to jarfile manually.]),
2337     LIBREPOSITORY_JAR=$withval)
2339 AC_ARG_WITH(libfonts-jar,
2340     AS_HELP_STRING([--with-libfonts-jar=JARFILE],
2341         [Specify path to jarfile manually.]),
2342     LIBFONTS_JAR=$withval)
2344 AC_ARG_WITH(libserializer-jar,
2345     AS_HELP_STRING([--with-libserializer-jar=JARFILE],
2346         [Specify path to jarfile manually.]),
2347     LIBSERIALIZER_JAR=$withval)
2349 AC_ARG_WITH(libbase-jar,
2350     AS_HELP_STRING([--with-libbase-jar=JARFILE],
2351         [Specify path to jarfile manually.]),
2352     LIBBASE_JAR=$withval)
2354 AC_ARG_WITH(system-odbc,
2355     AS_HELP_STRING([--with-system-odbc],
2356         [Use the odbc headers already on system.]),,
2357     [with_system_odbc="auto"])
2359 AC_ARG_WITH(system-sane,
2360     AS_HELP_STRING([--with-system-sane],
2361         [Use sane.h already on system.]),,
2362     [with_system_sane="$with_system_headers"])
2364 AC_ARG_WITH(system-bluez,
2365     AS_HELP_STRING([--with-system-bluez],
2366         [Use bluetooth.h already on system.]),,
2367     [with_system_bluez="$with_system_headers"])
2369 AC_ARG_WITH(system-curl,
2370     AS_HELP_STRING([--with-system-curl],
2371         [Use curl already on system.]),,
2372     [with_system_curl=auto])
2374 AC_ARG_WITH(system-boost,
2375     AS_HELP_STRING([--with-system-boost],
2376         [Use boost already on system.]),,
2377     [with_system_boost="$with_system_headers"])
2379 AC_ARG_WITH(system-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 -z "$enable_macosx_code_signing" -o "$enable_macosx_code_signing" == "no" ; then
3485         AC_MSG_RESULT([no])
3486     else
3487         if test "$enable_macosx_code_signing" = yes; then
3488             # By default use the first suitable certificate (?).
3490             # http://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3491             # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3492             # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3493             # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3494             # "Developer ID Application" one.
3495             identity="Developer ID Application:"
3496         else
3497             identity=$enable_macosx_code_signing
3498         fi
3499         identity=`security find-identity -p codesigning -v 2>/dev/null | $AWK "/$identity/{print \\$2; exit}"`
3500         if test -n "$identity"; then
3501             MACOSX_CODESIGNING_IDENTITY=$identity
3502             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3503             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3504         else
3505             AC_MSG_ERROR([cannot determine identity to use])
3506         fi
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     else
3516         if test "$enable_macosx_package_signing" = yes; then
3517             # By default use the first suitable certificate.
3518             # It should be a "3rd Party Mac Developer Installer" one
3519             identity="3rd Party Mac Developer Installer:"
3520         else
3521             identity=$enable_macosx_package_signing
3522         fi
3523         identity=`security find-identity -v 2>/dev/null | $AWK "/$identity/ {print \\$2; exit}"`
3524         if test -n "$identity"; then
3525             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3526             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3527             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3528         else
3529             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3530         fi
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     if test -n "$with_macosx_provisioning_profile" ; then
3554         if test ! -f "$with_macosx_provisioning_profile"; then
3555             AC_MSG_ERROR([provisioning profile not found at $with_macosx_provisioning_profile])
3556         else
3557             MACOSX_PROVISIONING_PROFILE=$with_macosx_provisioning_profile
3558             MACOSX_PROVISIONING_INFO=$([security cms -D -i "$MACOSX_PROVISIONING_PROFILE" | \
3559                 xmllint --xpath "//key[.='com.apple.application-identifier' or .='com.apple.developer.team-identifier'] \
3560                     | //key[.='com.apple.application-identifier' or .='com.apple.developer.team-identifier']/following-sibling::string[1]" - | \
3561                 sed -e 's#><#>\n\t<#g' -e 's#^#\t#'])
3562         fi
3563     fi
3565 AC_SUBST(MACOSX_SDK_PATH)
3566 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3567 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3568 AC_SUBST(MAC_OS_X_VERSION_MAX_ALLOWED)
3569 AC_SUBST(INSTALL_NAME_TOOL)
3570 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3571 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3572 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3573 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3574 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3575 AC_SUBST(MACOSX_PROVISIONING_INFO)
3576 AC_SUBST(MACOSX_PROVISIONING_PROFILE)
3578 dnl ===================================================================
3579 dnl Check iOS SDK and compiler
3580 dnl ===================================================================
3582 if test $_os = iOS; then
3583     AC_MSG_CHECKING([what iOS SDK to use])
3584     current_sdk_ver=15.0
3585     older_sdk_vers="14.5"
3586     if test "$enable_ios_simulator" = "yes"; then
3587         platform=iPhoneSimulator
3588         versionmin=-mios-simulator-version-min=13.6
3589     else
3590         platform=iPhoneOS
3591         versionmin=-miphoneos-version-min=13.6
3592     fi
3593     xcode_developer=`xcode-select -print-path`
3595     for sdkver in $current_sdk_ver $older_sdk_vers; do
3596         t=$xcode_developer/Platforms/$platform.platform/Developer/SDKs/$platform$sdkver.sdk
3597         if test -d $t; then
3598             sysroot=$t
3599             break
3600         fi
3601     done
3603     if test -z "$sysroot"; then
3604         AC_MSG_ERROR([Could not find iOS SDK, expected something like $xcode_developer/Platforms/$platform.platform/Developer/SDKs/${platform}${current_sdk_ver}.sdk])
3605     fi
3607     AC_MSG_RESULT($sysroot)
3609     stdlib="-stdlib=libc++"
3611     AC_MSG_CHECKING([what C compiler to use])
3612     CC="`xcrun -find clang`"
3613     CC_BASE=`first_arg_basename "$CC"`
3614     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3615     AC_MSG_RESULT([$CC])
3617     AC_MSG_CHECKING([what C++ compiler to use])
3618     CXX="`xcrun -find clang++`"
3619     CXX_BASE=`first_arg_basename "$CXX"`
3620     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3621     AC_MSG_RESULT([$CXX])
3623     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3624     AR=`xcrun -find ar`
3625     NM=`xcrun -find nm`
3626     STRIP=`xcrun -find strip`
3627     LIBTOOL=`xcrun -find libtool`
3628     RANLIB=`xcrun -find ranlib`
3631 AC_MSG_CHECKING([whether to treat the installation as read-only])
3633 if test $_os = Darwin; then
3634     enable_readonly_installset=yes
3635 elif test "$enable_extensions" != yes; then
3636     enable_readonly_installset=yes
3638 if test "$enable_readonly_installset" = yes; then
3639     AC_MSG_RESULT([yes])
3640     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3641 else
3642     AC_MSG_RESULT([no])
3645 dnl ===================================================================
3646 dnl Structure of install set
3647 dnl ===================================================================
3649 if test $_os = Darwin; then
3650     LIBO_BIN_FOLDER=MacOS
3651     LIBO_ETC_FOLDER=Resources
3652     LIBO_LIBEXEC_FOLDER=MacOS
3653     LIBO_LIB_FOLDER=Frameworks
3654     LIBO_LIB_PYUNO_FOLDER=Resources
3655     LIBO_SHARE_FOLDER=Resources
3656     LIBO_SHARE_HELP_FOLDER=Resources/help
3657     LIBO_SHARE_JAVA_FOLDER=Resources/java
3658     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3659     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3660     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3661     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3662     LIBO_URE_BIN_FOLDER=MacOS
3663     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3664     LIBO_URE_LIB_FOLDER=Frameworks
3665     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3666     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3667 elif test $_os = WINNT; then
3668     LIBO_BIN_FOLDER=program
3669     LIBO_ETC_FOLDER=program
3670     LIBO_LIBEXEC_FOLDER=program
3671     LIBO_LIB_FOLDER=program
3672     LIBO_LIB_PYUNO_FOLDER=program
3673     LIBO_SHARE_FOLDER=share
3674     LIBO_SHARE_HELP_FOLDER=help
3675     LIBO_SHARE_JAVA_FOLDER=program/classes
3676     LIBO_SHARE_PRESETS_FOLDER=presets
3677     LIBO_SHARE_READMES_FOLDER=readmes
3678     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3679     LIBO_SHARE_SHELL_FOLDER=program/shell
3680     LIBO_URE_BIN_FOLDER=program
3681     LIBO_URE_ETC_FOLDER=program
3682     LIBO_URE_LIB_FOLDER=program
3683     LIBO_URE_MISC_FOLDER=program
3684     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3685 else
3686     LIBO_BIN_FOLDER=program
3687     LIBO_ETC_FOLDER=program
3688     LIBO_LIBEXEC_FOLDER=program
3689     LIBO_LIB_FOLDER=program
3690     LIBO_LIB_PYUNO_FOLDER=program
3691     LIBO_SHARE_FOLDER=share
3692     LIBO_SHARE_HELP_FOLDER=help
3693     LIBO_SHARE_JAVA_FOLDER=program/classes
3694     LIBO_SHARE_PRESETS_FOLDER=presets
3695     LIBO_SHARE_READMES_FOLDER=readmes
3696     if test "$enable_fuzzers" != yes; then
3697         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3698     else
3699         LIBO_SHARE_RESOURCE_FOLDER=resource
3700     fi
3701     LIBO_SHARE_SHELL_FOLDER=program/shell
3702     LIBO_URE_BIN_FOLDER=program
3703     LIBO_URE_ETC_FOLDER=program
3704     LIBO_URE_LIB_FOLDER=program
3705     LIBO_URE_MISC_FOLDER=program
3706     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3708 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3709 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3710 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3711 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3712 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3713 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3714 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3715 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3716 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3717 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3718 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3719 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3720 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3721 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3722 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3723 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3725 # Not all of them needed in config_host.mk, add more if need arises
3726 AC_SUBST(LIBO_BIN_FOLDER)
3727 AC_SUBST(LIBO_ETC_FOLDER)
3728 AC_SUBST(LIBO_LIB_FOLDER)
3729 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3730 AC_SUBST(LIBO_SHARE_FOLDER)
3731 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3732 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3733 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3734 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3735 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3736 AC_SUBST(LIBO_URE_BIN_FOLDER)
3737 AC_SUBST(LIBO_URE_ETC_FOLDER)
3738 AC_SUBST(LIBO_URE_LIB_FOLDER)
3739 AC_SUBST(LIBO_URE_MISC_FOLDER)
3740 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3742 dnl ===================================================================
3743 dnl Windows specific tests and stuff
3744 dnl ===================================================================
3746 reg_get_value()
3748     # Return value: $regvalue
3749     unset regvalue
3751     if test "$build_os" = "wsl"; then
3752         regvalue=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --read-registry $1 "$2" 2>/dev/null)
3753         return
3754     fi
3756     local _regentry="/proc/registry${1}/${2}"
3757     if test -f "$_regentry"; then
3758         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3759         # Registry keys read via /proc/registry* are always \0 terminated!
3760         local _regvalue=$(tr -d '\0' < "$_regentry")
3761         if test $? -eq 0; then
3762             regvalue=$_regvalue
3763         fi
3764     fi
3767 # Get a value from the 32-bit side of the Registry
3768 reg_get_value_32()
3770     reg_get_value "32" "$1"
3773 # Get a value from the 64-bit side of the Registry
3774 reg_get_value_64()
3776     reg_get_value "64" "$1"
3779 case "$host_os" in
3780 cygwin*|wsl*)
3781     COM=MSC
3782     OS=WNT
3783     RTL_OS=Windows
3784     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3785         P_SEP=";"
3786     else
3787         P_SEP=:
3788     fi
3789     case "$host_cpu" in
3790     x86_64)
3791         CPUNAME=X86_64
3792         RTL_ARCH=X86_64
3793         PLATFORMID=windows_x86_64
3794         WINDOWS_X64=1
3795         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
3796         WIN_HOST_ARCH="x64"
3797         WIN_MULTI_ARCH="x86"
3798         WIN_HOST_BITS=64
3799         ;;
3800     i*86)
3801         CPUNAME=INTEL
3802         RTL_ARCH=x86
3803         PLATFORMID=windows_x86
3804         WIN_HOST_ARCH="x86"
3805         WIN_HOST_BITS=32
3806         WIN_OTHER_ARCH="x64"
3807         ;;
3808     aarch64)
3809         CPUNAME=AARCH64
3810         RTL_ARCH=AARCH64
3811         PLATFORMID=windows_aarch64
3812         WINDOWS_X64=1
3813         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
3814         WIN_HOST_ARCH="arm64"
3815         WIN_HOST_BITS=64
3816         with_ucrt_dir=no
3817         ;;
3818     *)
3819         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
3820         ;;
3821     esac
3823     case "$build_cpu" in
3824     x86_64) WIN_BUILD_ARCH="x64" ;;
3825     i*86) WIN_BUILD_ARCH="x86" ;;
3826     aarch64) WIN_BUILD_ARCH="arm64" ;;
3827     *)
3828         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
3829         ;;
3830     esac
3832     SCPDEFS="$SCPDEFS -D_MSC_VER"
3833     ;;
3834 esac
3836 # multi-arch is an arch, which can execute on the host (x86 on x64), while
3837 # other-arch won't, but wouldn't break the build (x64 on x86).
3838 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
3839     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
3843 if test "$_os" = "iOS" -o "$build_cpu" != "$host_cpu"; then
3844     # To allow building Windows multi-arch releases without cross-tooling
3845     if test -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH"; then
3846         cross_compiling="yes"
3847     fi
3850 ENABLE_WASM_STRIP=''
3851 if test "$cross_compiling" = "yes"; then
3852     export CROSS_COMPILING=TRUE
3853     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
3854         ENABLE_WASM_STRIP=TRUE
3855     fi
3856 else
3857     CROSS_COMPILING=
3858     BUILD_TYPE="$BUILD_TYPE NATIVE"
3860 AC_SUBST(CROSS_COMPILING)
3861 AC_SUBST(ENABLE_WASM_STRIP)
3863 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
3864 # NOTE: must _not_ be used for bundled external libraries!
3865 ISYSTEM=
3866 if test "$GCC" = "yes"; then
3867     AC_MSG_CHECKING( for -isystem )
3868     save_CFLAGS=$CFLAGS
3869     CFLAGS="$CFLAGS -isystem /usr/include -Werror"
3870     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
3871     CFLAGS=$save_CFLAGS
3872     if test -n "$ISYSTEM"; then
3873         AC_MSG_RESULT(yes)
3874     else
3875         AC_MSG_RESULT(no)
3876     fi
3878 if test -z "$ISYSTEM"; then
3879     # fall back to using -I
3880     ISYSTEM=-I
3882 AC_SUBST(ISYSTEM)
3884 dnl ===================================================================
3885 dnl  Check which Visual Studio compiler is used
3886 dnl ===================================================================
3888 map_vs_year_to_version()
3890     # Return value: $vsversion
3892     unset vsversion
3894     case $1 in
3895     2019)
3896         vsversion=16;;
3897     2022)
3898         vsversion=17;;
3899     *)
3900         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
3901     esac
3904 vs_versions_to_check()
3906     # Args: $1 (optional) : versions to check, in the order of preference
3907     # Return value: $vsversions
3909     unset vsversions
3911     if test -n "$1"; then
3912         map_vs_year_to_version "$1"
3913         vsversions=$vsversion
3914     else
3915         # Default version is 2019
3916         vsversions="16"
3917     fi
3920 win_get_env_from_vsvars32bat()
3922     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
3923     # Also seems to be located in another directory under the same name: vsvars32.bat
3924     # https://github.com/bazelbuild/bazel/blob/master/src/main/native/build_windows_jni.sh#L56-L57
3925     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$(cygpath -w $VC_PRODUCT_DIR)" > $WRAPPERBATCHFILEPATH
3926     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
3927     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
3928     local result
3929     if test "$build_os" = "wsl"; then
3930         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
3931     else
3932         chmod +x $WRAPPERBATCHFILEPATH
3933         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
3934     fi
3935     rm -f $WRAPPERBATCHFILEPATH
3936     printf '%s' "$result"
3939 find_ucrt()
3941     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/InstallationFolder"
3942     if test -n "$regvalue"; then
3943         PathFormat "$regvalue"
3944         UCRTSDKDIR=$formatted_path_unix
3945         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion"
3946         UCRTVERSION=$regvalue
3947         # Rest if not exist
3948         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
3949           UCRTSDKDIR=
3950         fi
3951     fi
3952     if test -z "$UCRTSDKDIR"; then
3953         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
3954         ide_env_file="${ide_env_dir}VsDevCmd.bat"
3955         if test -f "$ide_env_file"; then
3956             PathFormat "$(win_get_env_from_vsvars32bat UniversalCRTSdkDir)"
3957             UCRTSDKDIR=$formatted_path
3958             UCRTVERSION=$(win_get_env_from_vsvars32bat UCRTVersion)
3959             dnl Hack needed at least by tml:
3960             if test "$UCRTVERSION" = 10.0.15063.0 \
3961                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
3962                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
3963             then
3964                 UCRTVERSION=10.0.14393.0
3965             fi
3966         else
3967           AC_MSG_ERROR([No UCRT found])
3968         fi
3969     fi
3972 find_msvc()
3974     # Find Visual C++
3975     # Args: $1 (optional) : The VS version year
3976     # Return values: $vctest, $vcyear, $vctoolset, $vcnumwithdot, $vcbuildnumber
3978     unset vctest vctoolset vcnumwithdot vcbuildnumber
3980     vs_versions_to_check "$1"
3981     if test "$build_os" = wsl; then
3982         vswhere="$PROGRAMFILESX86"
3983     else
3984         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
3985     fi
3986     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
3987     PathFormat "$vswhere"
3988     vswhere=$formatted_path_unix
3989     for ver in $vsversions; do
3990         vswhereoutput=`$vswhere -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3991         if test -z "$vswhereoutput"; then
3992             vswhereoutput=`$vswhere -prerelease -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3993         fi
3994         # Fall back to all MS products (this includes VC++ Build Tools)
3995         if ! test -n "$vswhereoutput"; then
3996             AC_MSG_CHECKING([VC++ Build Tools and similar])
3997             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3998         fi
3999         if test -n "$vswhereoutput"; then
4000             PathFormat "$vswhereoutput"
4001             vctest=$formatted_path_unix
4002             break
4003         fi
4004     done
4006     if test -n "$vctest"; then
4007         vcnumwithdot="$ver.0"
4008         case "$vcnumwithdot" in
4009         16.0)
4010             vcyear=2019
4011             vctoolset=v142
4012             ;;
4013         17.0)
4014             vcyear=2022
4015             vctoolset=v143
4016             ;;
4017         esac
4018         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
4020     fi
4023 test_cl_exe()
4025     AC_MSG_CHECKING([$1 compiler])
4027     CL_EXE_PATH="$2/cl.exe"
4029     if test ! -f "$CL_EXE_PATH"; then
4030         if test "$1" = "multi-arch"; then
4031             AC_MSG_WARN([no compiler (cl.exe) in $2])
4032             return 1
4033         else
4034             AC_MSG_ERROR([no compiler (cl.exe) in $2])
4035         fi
4036     fi
4038     dnl ===========================================================
4039     dnl  Check for the corresponding mspdb*.dll
4040     dnl ===========================================================
4042     # MSVC 15.0 has libraries from 14.0?
4043     mspdbnum="140"
4045     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
4046         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
4047     fi
4049     # The compiles has to find its shared libraries
4050     OLD_PATH="$PATH"
4051     TEMP_PATH=`cygpath -d "$2"`
4052     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
4054     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
4055         AC_MSG_ERROR([no compiler (cl.exe) in $2])
4056     fi
4058     PATH="$OLD_PATH"
4060     AC_MSG_RESULT([$CL_EXE_PATH])
4063 SOLARINC=
4064 MSBUILD_PATH=
4065 DEVENV=
4066 if test "$_os" = "WINNT"; then
4067     AC_MSG_CHECKING([Visual C++])
4068     find_msvc "$with_visual_studio"
4069     if test -z "$vctest"; then
4070         if test -n "$with_visual_studio"; then
4071             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
4072         else
4073             AC_MSG_ERROR([no Visual Studio installation found])
4074         fi
4075     fi
4076     AC_MSG_RESULT([])
4078     VC_PRODUCT_DIR="$vctest/VC"
4079     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
4081     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
4082     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
4083         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
4084         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
4085         if test $? -ne 0; then
4086             WIN_MULTI_ARCH=""
4087             WIN_OTHER_ARCH=""
4088         fi
4089     fi
4091     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
4092         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
4093         test_cl_exe "build" "$MSVC_BUILD_PATH"
4094     fi
4096     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
4097         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
4098         test_cl_exe "host" "$MSVC_HOST_PATH"
4099     else
4100         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
4101     fi
4103     AC_MSG_CHECKING([for short pathname of VC product directory])
4104     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
4105     AC_MSG_RESULT([$VC_PRODUCT_DIR])
4107     UCRTSDKDIR=
4108     UCRTVERSION=
4110     AC_MSG_CHECKING([for UCRT location])
4111     find_ucrt
4112     # find_ucrt errors out if it doesn't find it
4113     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
4114     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
4115     ucrtincpath_formatted=$formatted_path
4116     # SOLARINC is used for external modules and must be set too.
4117     # And no, it's not sufficient to set SOLARINC only, as configure
4118     # itself doesn't honour it.
4119     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
4120     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
4121     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
4122     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4124     AC_SUBST(UCRTSDKDIR)
4125     AC_SUBST(UCRTVERSION)
4127     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4128     # Find the proper version of MSBuild.exe to use based on the VS version
4129     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath
4130     if test -z "$regvalue" ; then
4131         if test "$WIN_BUILD_ARCH" != "x64"; then
4132             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4133         else
4134             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4135         fi
4136     fi
4137     if test -d "$regvalue" ; then
4138         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4139         AC_MSG_RESULT([$regvalue])
4140     else
4141         AC_MSG_ERROR([MSBuild.exe location not found])
4142     fi
4144     # Find the version of devenv.exe
4145     # MSVC 2017 devenv does not start properly from a DOS 8.3 path
4146     DEVENV=$(cygpath -lm "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe")
4147     DEVENV_unix=$(cygpath -u "$DEVENV")
4148     if test ! -e "$DEVENV_unix"; then
4149         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4150     fi
4152     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4153     dnl needed when building CLR code:
4154     if test -z "$MSVC_CXX"; then
4155         # This gives us a posix path with 8.3 filename restrictions
4156         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4157     fi
4159     if test -z "$CC"; then
4160         CC=$MSVC_CXX
4161         CC_BASE=`first_arg_basename "$CC"`
4162     fi
4163     if test -z "$CXX"; then
4164         CXX=$MSVC_CXX
4165         CXX_BASE=`first_arg_basename "$CXX"`
4166     fi
4168     if test -n "$CC"; then
4169         # Remove /cl.exe from CC case insensitive
4170         AC_MSG_NOTICE([found Visual C++ $vcyear])
4172         main_include_dir=`cygpath -d -m "$COMPATH/Include"`
4173         CPPFLAGS="$CPPFLAGS -I$main_include_dir"
4175         PathFormat "$COMPATH"
4176         COMPATH=`win_short_path_for_make "$formatted_path"`
4178         VCVER=$vcnumwithdot
4179         VCTOOLSET=$vctoolset
4181         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4182         # are always "better", we list them in reverse chronological order.
4184         case "$vcnumwithdot" in
4185         16.0 | 17.0)
4186             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4187             ;;
4188         esac
4190         # The expectation is that --with-windows-sdk should not need to be used
4191         if test -n "$with_windows_sdk"; then
4192             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4193             *" "$with_windows_sdk" "*)
4194                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4195                 ;;
4196             *)
4197                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4198                 ;;
4199             esac
4200         fi
4202         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4203         ac_objext=obj
4204         ac_exeext=exe
4206     else
4207         AC_MSG_ERROR([Visual C++ not found after all, huh])
4208     fi
4210     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4211     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4212         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4213         // between Visual Studio versions and _MSC_VER:
4214         #if _MSC_VER < 1925
4215         #error
4216         #endif
4217     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4219     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4220     # version of the Explorer extension (and maybe other small
4221     # bits, too) needed when installing a 32-bit LibreOffice on a
4222     # 64-bit OS. The 64-bit Explorer extension is a feature that
4223     # has been present since long in OOo. Don't confuse it with
4224     # building LibreOffice itself as 64-bit code.
4226     BUILD_X64=
4227     CXX_X64_BINARY=
4229     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4230         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4231         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4232              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4233         then
4234             BUILD_X64=TRUE
4235             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4236             AC_MSG_RESULT([found])
4237         else
4238             AC_MSG_RESULT([not found])
4239             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4240         fi
4241     elif test "$WIN_HOST_ARCH" = "x64"; then
4242         CXX_X64_BINARY=$CXX
4243     fi
4244     AC_SUBST(BUILD_X64)
4246     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4247     AC_SUBST(CXX_X64_BINARY)
4249     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4250     # needed to support TWAIN scan on both 32- and 64-bit systems
4252     case "$WIN_HOST_ARCH" in
4253     x64)
4254         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4255         if test -n "$CXX_X86_BINARY"; then
4256             BUILD_X86=TRUE
4257             AC_MSG_RESULT([preset])
4258         elif test -n "$WIN_MULTI_ARCH"; then
4259             BUILD_X86=TRUE
4260             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4261             CXX_X86_BINARY+=" /arch:SSE"
4262             AC_MSG_RESULT([found])
4263         else
4264             AC_MSG_RESULT([not found])
4265             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4266         fi
4267         ;;
4268     x86)
4269         BUILD_X86=TRUE
4270         CXX_X86_BINARY=$MSVC_CXX
4271         ;;
4272     esac
4273     AC_SUBST(BUILD_X86)
4274     AC_SUBST(CXX_X86_BINARY)
4276 AC_SUBST(VCVER)
4277 AC_SUBST(VCTOOLSET)
4278 AC_SUBST(DEVENV)
4279 AC_SUBST(MSVC_CXX)
4281 COM_IS_CLANG=
4282 AC_MSG_CHECKING([whether the compiler is actually Clang])
4283 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4284     #ifndef __clang__
4285     you lose
4286     #endif
4287     int foo=42;
4288     ]])],
4289     [AC_MSG_RESULT([yes])
4290      COM_IS_CLANG=TRUE],
4291     [AC_MSG_RESULT([no])])
4292 AC_SUBST(COM_IS_CLANG)
4294 CC_PLAIN=$CC
4295 CLANGVER=
4296 if test "$COM_IS_CLANG" = TRUE; then
4297     AC_MSG_CHECKING([whether Clang is new enough])
4298     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4299         #if !defined __apple_build_version__
4300         #error
4301         #endif
4302         ]])],
4303         [my_apple_clang=yes],[my_apple_clang=])
4304     if test "$my_apple_clang" = yes; then
4305         AC_MSG_RESULT([assumed yes (Apple Clang)])
4306     elif test "$_os" = Emscripten; then
4307         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4308     else
4309         if test "$_os" = WINNT; then
4310             dnl In which case, assume clang-cl:
4311             my_args="/EP /TC"
4312             dnl Filter out -FIIntrin.h, which needs to be explicitly stated for
4313             dnl clang-cl:
4314             CC_PLAIN=
4315             for i in $CC; do
4316                 case $i in
4317                 -FIIntrin.h)
4318                     ;;
4319                 *)
4320                     CC_PLAIN="$CC_PLAIN $i"
4321                     ;;
4322                 esac
4323             done
4324         else
4325             my_args="-E -P"
4326         fi
4327         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC_PLAIN $my_args - | sed 's/ //g'`
4328         CLANG_FULL_VERSION=`echo __clang_version__ | $CC_PLAIN $my_args -`
4329         CLANGVER=`echo $clang_version \
4330             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4331         if test "$CLANGVER" -ge 50002; then
4332             AC_MSG_RESULT([yes ($clang_version)])
4333         else
4334             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 5.0.2])
4335         fi
4336         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4337         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4338     fi
4341 SHOWINCLUDES_PREFIX=
4342 if test "$_os" = WINNT; then
4343     dnl We need to guess the prefix of the -showIncludes output, it can be
4344     dnl localized
4345     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4346     echo "#include <stdlib.h>" > conftest.c
4347     SHOWINCLUDES_PREFIX=`$CC_PLAIN $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4348         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4349     rm -f conftest.c conftest.obj
4350     if test -z "$SHOWINCLUDES_PREFIX"; then
4351         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4352     else
4353         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4354     fi
4356 AC_SUBST(SHOWINCLUDES_PREFIX)
4359 # prefix C with ccache if needed
4361 if test "$CCACHE" != ""; then
4362     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4364     AC_LANG_PUSH([C])
4365     save_CFLAGS=$CFLAGS
4366     CFLAGS="$CFLAGS --ccache-skip -O2"
4367     # msvc does not fail on unknown options, check stdout
4368     if test "$COM" = MSC; then
4369         CFLAGS="$CFLAGS -nologo"
4370     fi
4371     save_ac_c_werror_flag=$ac_c_werror_flag
4372     ac_c_werror_flag=yes
4373     dnl an empty program will do, we're checking the compiler flags
4374     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4375                       [use_ccache=yes], [use_ccache=no])
4376     CFLAGS=$save_CFLAGS
4377     ac_c_werror_flag=$save_ac_c_werror_flag
4378     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4379         AC_MSG_RESULT([yes])
4380     else
4381         CC="$CCACHE $CC"
4382         CC_BASE="ccache $CC_BASE"
4383         AC_MSG_RESULT([no])
4384     fi
4385     AC_LANG_POP([C])
4388 # ===================================================================
4389 # check various GCC options that Clang does not support now but maybe
4390 # will somewhen in the future, check them even for GCC, so that the
4391 # flags are set
4392 # ===================================================================
4394 HAVE_GCC_GGDB2=
4395 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4396     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4397     save_CFLAGS=$CFLAGS
4398     CFLAGS="$CFLAGS -Werror -ggdb2"
4399     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4400     CFLAGS=$save_CFLAGS
4401     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4402         AC_MSG_RESULT([yes])
4403     else
4404         AC_MSG_RESULT([no])
4405     fi
4407     if test "$host_cpu" = "m68k"; then
4408         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4409         save_CFLAGS=$CFLAGS
4410         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4411         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4412         CFLAGS=$save_CFLAGS
4413         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4414             AC_MSG_RESULT([yes])
4415         else
4416             AC_MSG_ERROR([no])
4417         fi
4418     fi
4420 AC_SUBST(HAVE_GCC_GGDB2)
4422 dnl ===================================================================
4423 dnl  Test the gcc version
4424 dnl ===================================================================
4425 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4426     AC_MSG_CHECKING([the GCC version])
4427     _gcc_version=`$CC -dumpfullversion`
4428     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4429         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4430     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4432     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4434     if test "$gcc_full_version" -lt 70000; then
4435         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 7.0.0])
4436     fi
4437 else
4438     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4439     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4440     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4441     # (which reports itself as GCC 4.2.1).
4442     GCC_VERSION=
4444 AC_SUBST(GCC_VERSION)
4446 dnl Set the ENABLE_DBGUTIL variable
4447 dnl ===================================================================
4448 AC_MSG_CHECKING([whether to build with additional debug utilities])
4449 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4450     ENABLE_DBGUTIL="TRUE"
4451     # this is an extra var so it can have different default on different MSVC
4452     # versions (in case there are version specific problems with it)
4453     MSVC_USE_DEBUG_RUNTIME="TRUE"
4455     AC_MSG_RESULT([yes])
4456     # cppunit and graphite expose STL in public headers
4457     if test "$with_system_cppunit" = "yes"; then
4458         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4459     else
4460         with_system_cppunit=no
4461     fi
4462     if test "$with_system_graphite" = "yes"; then
4463         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4464     else
4465         with_system_graphite=no
4466     fi
4467     if test "$with_system_orcus" = "yes"; then
4468         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4469     else
4470         with_system_orcus=no
4471     fi
4472     if test "$with_system_libcmis" = "yes"; then
4473         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4474     else
4475         with_system_libcmis=no
4476     fi
4477     if test "$with_system_hunspell" = "yes"; then
4478         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4479     else
4480         with_system_hunspell=no
4481     fi
4482     if test "$with_system_gpgmepp" = "yes"; then
4483         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4484     else
4485         with_system_gpgmepp=no
4486     fi
4487     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4488     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4489     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4490     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4491     # of those two is using the system variant:
4492     if test "$with_system_libnumbertext" = "yes"; then
4493         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4494     else
4495         with_system_libnumbertext=no
4496     fi
4497     if test "$with_system_libwps" = "yes"; then
4498         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4499     else
4500         with_system_libwps=no
4501     fi
4502 else
4503     ENABLE_DBGUTIL=""
4504     MSVC_USE_DEBUG_RUNTIME=""
4505     AC_MSG_RESULT([no])
4507 AC_SUBST(ENABLE_DBGUTIL)
4508 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4510 dnl Set the ENABLE_DEBUG variable.
4511 dnl ===================================================================
4512 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4513     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4515 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4516     if test -z "$libo_fuzzed_enable_debug"; then
4517         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4518     else
4519         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4520         enable_debug=yes
4521     fi
4524 AC_MSG_CHECKING([whether to do a debug build])
4525 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4526     ENABLE_DEBUG="TRUE"
4527     if test -n "$ENABLE_DBGUTIL" ; then
4528         AC_MSG_RESULT([yes (dbgutil)])
4529     else
4530         AC_MSG_RESULT([yes])
4531     fi
4532 else
4533     ENABLE_DEBUG=""
4534     AC_MSG_RESULT([no])
4536 AC_SUBST(ENABLE_DEBUG)
4538 dnl ===================================================================
4539 dnl Select the linker to use (gold/lld/ld.bfd).
4540 dnl This is done only after compiler checks (need to know if Clang is
4541 dnl used, for different defaults) and after checking if a debug build
4542 dnl is wanted (non-debug builds get the default linker if not explicitly
4543 dnl specified otherwise).
4544 dnl All checks for linker features/options should come after this.
4545 dnl ===================================================================
4546 check_use_ld()
4548     use_ld=-fuse-ld=${1%%:*}
4549     use_ld_path=${1#*:}
4550     if test "$use_ld_path" != "$1"; then
4551         use_ld="$use_ld --ld-path=$use_ld_path"
4552     fi
4553     use_ld_fail_if_error=$2
4554     use_ld_ok=
4555     AC_MSG_CHECKING([for $use_ld linker support])
4556     use_ld_ldflags_save="$LDFLAGS"
4557     LDFLAGS="$LDFLAGS $use_ld"
4558     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4559 #include <stdio.h>
4560         ],[
4561 printf ("hello world\n");
4562         ])], USE_LD=$use_ld, [])
4563     if test -n "$USE_LD"; then
4564         AC_MSG_RESULT( yes )
4565         use_ld_ok=yes
4566     else
4567         if test -n "$use_ld_fail_if_error"; then
4568             AC_MSG_ERROR( no )
4569         else
4570             AC_MSG_RESULT( no )
4571         fi
4572     fi
4573     if test -n "$use_ld_ok"; then
4574         dnl keep the value of LDFLAGS
4575         return 0
4576     fi
4577     LDFLAGS="$use_ld_ldflags_save"
4578     return 1
4580 USE_LD=
4581 if test "$enable_ld" != "no"; then
4582     if test "$GCC" = "yes"; then
4583         if test -n "$enable_ld"; then
4584             check_use_ld "$enable_ld" fail_if_error
4585         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4586             dnl non-debug builds default to the default linker
4587             true
4588         elif test -n "$COM_IS_CLANG"; then
4589             check_use_ld lld
4590             if test $? -ne 0; then
4591                 check_use_ld gold
4592             fi
4593         else
4594             # For gcc first try gold, new versions also support lld.
4595             check_use_ld gold
4596             if test $? -ne 0; then
4597                 check_use_ld lld
4598             fi
4599         fi
4600         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4601         rm conftest.out
4602         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD)')
4603         if test -z "$ld_used"; then
4604             ld_used="unknown"
4605         fi
4606         AC_MSG_CHECKING([for linker that is used])
4607         AC_MSG_RESULT([$ld_used])
4608         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4609             if echo "$ld_used" | grep -q "^GNU ld"; then
4610                 AC_MSG_WARN([The default GNU linker is slow, consider using the LLD or the GNU gold linker.])
4611                 add_warning "The default GNU linker is slow, consider using the LLD or the GNU gold linker."
4612             fi
4613         fi
4614     else
4615         if test "$enable_ld" = "yes"; then
4616             AC_MSG_ERROR([--enable-ld not supported])
4617         fi
4618     fi
4620 AC_SUBST(USE_LD)
4622 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4623 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4624     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4625     bsymbolic_functions_ldflags_save=$LDFLAGS
4626     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4627     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4628 #include <stdio.h>
4629         ],[
4630 printf ("hello world\n");
4631         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4632     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4633         AC_MSG_RESULT( found )
4634     else
4635         AC_MSG_RESULT( not found )
4636     fi
4637     LDFLAGS=$bsymbolic_functions_ldflags_save
4639 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4641 LD_GC_SECTIONS=
4642 if test "$GCC" = "yes"; then
4643     for flag in "--gc-sections" "-dead_strip"; do
4644         AC_MSG_CHECKING([for $flag linker support])
4645         ldflags_save=$LDFLAGS
4646         LDFLAGS="$LDFLAGS -Wl,$flag"
4647         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4648 #include <stdio.h>
4649             ],[
4650 printf ("hello world\n");
4651             ])],[
4652             LD_GC_SECTIONS="-Wl,$flag"
4653             AC_MSG_RESULT( found )
4654             ], [
4655             AC_MSG_RESULT( not found )
4656             ])
4657         LDFLAGS=$ldflags_save
4658         if test -n "$LD_GC_SECTIONS"; then
4659             break
4660         fi
4661     done
4663 AC_SUBST(LD_GC_SECTIONS)
4665 HAVE_GSPLIT_DWARF=
4666 if test "$enable_split_debug" != no; then
4667     use_split_debug=
4668     if test -n "$ENABLE_LTO"; then
4669         true # Inherently incompatible, since no debug info is created while compiling, GCC complains.
4670     elif test "$enable_split_debug" = yes; then
4671         use_split_debug=1
4672     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4673     elif test "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4674         use_split_debug=1
4675     fi
4676     if test -n "$use_split_debug"; then
4677         AC_MSG_CHECKING([whether $CC_BASE supports -gsplit-dwarf])
4678         save_CFLAGS=$CFLAGS
4679         CFLAGS="$CFLAGS -Werror -gsplit-dwarf"
4680         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_SPLIT_DWARF=TRUE ],[])
4681         CFLAGS=$save_CFLAGS
4682         if test "$HAVE_GCC_SPLIT_DWARF" = "TRUE"; then
4683             AC_MSG_RESULT([yes])
4684         else
4685             if test "$enable_split_debug" = yes; then
4686                 AC_MSG_ERROR([no])
4687             else
4688                 AC_MSG_RESULT([no])
4689             fi
4690         fi
4691     fi
4692     if test -z "$HAVE_GCC_SPLIT_DWARF" -a "$test_split_debug" = "yes" -a -n "$use_split_debug"; then
4693         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4694         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4695     fi
4697 AC_SUBST(HAVE_GCC_SPLIT_DWARF)
4699 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4700 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4701 save_CFLAGS=$CFLAGS
4702 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4703 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4704 CFLAGS=$save_CFLAGS
4705 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4706     AC_MSG_RESULT([yes])
4707 else
4708     AC_MSG_RESULT([no])
4710 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4712 ENABLE_GDB_INDEX=
4713 if test "$enable_gdb_index" != "no"; then
4714     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4715     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4716         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4717         save_CFLAGS=$CFLAGS
4718         CFLAGS="$CFLAGS -Werror -ggnu-pubnames"
4719         have_ggnu_pubnames=
4720         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4721         if test "$have_ggnu_pubnames" != "TRUE"; then
4722             if test "$enable_gdb_index" = "yes"; then
4723                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4724             else
4725                 AC_MSG_RESULT( no )
4726             fi
4727         else
4728             AC_MSG_RESULT( yes )
4729             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4730             ldflags_save=$LDFLAGS
4731             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4732             AC_LINK_IFELSE([AC_LANG_PROGRAM([
4733 #include <stdio.h>
4734                 ],[
4735 printf ("hello world\n");
4736                 ])], ENABLE_GDB_INDEX=TRUE, [])
4737             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
4738                 AC_MSG_RESULT( yes )
4739             else
4740                 if test "$enable_gdb_index" = "yes"; then
4741                     AC_MSG_ERROR( no )
4742                 else
4743                     AC_MSG_RESULT( no )
4744                 fi
4745             fi
4746             LDFLAGS=$ldflags_save
4747         fi
4748         CFLAGS=$save_CFLAGS
4749         fi
4750     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4751         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
4752         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
4753     fi
4755 AC_SUBST(ENABLE_GDB_INDEX)
4757 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
4758     enable_sal_log=yes
4760 if test "$enable_sal_log" = yes; then
4761     ENABLE_SAL_LOG=TRUE
4763 AC_SUBST(ENABLE_SAL_LOG)
4765 dnl Check for enable symbols option
4766 dnl ===================================================================
4767 AC_MSG_CHECKING([whether to generate debug information])
4768 if test -z "$enable_symbols"; then
4769     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4770         enable_symbols=yes
4771     else
4772         enable_symbols=no
4773     fi
4775 if test "$enable_symbols" = yes; then
4776     ENABLE_SYMBOLS_FOR=all
4777     AC_MSG_RESULT([yes])
4778 elif test "$enable_symbols" = no; then
4779     ENABLE_SYMBOLS_FOR=
4780     AC_MSG_RESULT([no])
4781 else
4782     # Selective debuginfo.
4783     ENABLE_SYMBOLS_FOR="$enable_symbols"
4784     AC_MSG_RESULT([for "$enable_symbols"])
4786 AC_SUBST(ENABLE_SYMBOLS_FOR)
4788 if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then
4789     # Building on Android with full symbols: without enough memory the linker never finishes currently.
4790     AC_MSG_CHECKING([whether enough memory is available for linking])
4791     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
4792     # Check for 15GB, as Linux reports a bit less than the physical memory size.
4793     if test -n "$mem_size" -a $mem_size -lt 15728640; then
4794         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
4795     else
4796         AC_MSG_RESULT([yes])
4797     fi
4800 ENABLE_OPTIMIZED=
4801 ENABLE_OPTIMIZED_DEBUG=
4802 AC_MSG_CHECKING([whether to compile with optimization flags])
4803 if test -z "$enable_optimized"; then
4804     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4805         enable_optimized=no
4806     else
4807         enable_optimized=yes
4808     fi
4810 if test "$enable_optimized" = yes; then
4811     ENABLE_OPTIMIZED=TRUE
4812     AC_MSG_RESULT([yes])
4813 elif test "$enable_optimized" = debug; then
4814     ENABLE_OPTIMIZED_DEBUG=TRUE
4815     AC_MSG_RESULT([yes (debug)])
4816     HAVE_GCC_OG=
4817     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4818         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
4819         save_CFLAGS=$CFLAGS
4820         CFLAGS="$CFLAGS -Werror -Og"
4821         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
4822         CFLAGS=$save_CFLAGS
4823         if test "$HAVE_GCC_OG" = "TRUE"; then
4824             AC_MSG_RESULT([yes])
4825         else
4826             AC_MSG_RESULT([no])
4827         fi
4828     fi
4829     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
4830         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
4831     fi
4832 else
4833     AC_MSG_RESULT([no])
4835 AC_SUBST(ENABLE_OPTIMIZED)
4836 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
4839 # determine CPUNAME, OS, ...
4841 case "$host_os" in
4843 aix*)
4844     COM=GCC
4845     CPUNAME=POWERPC
4846     OS=AIX
4847     RTL_OS=AIX
4848     RTL_ARCH=PowerPC
4849     PLATFORMID=aix_powerpc
4850     P_SEP=:
4851     ;;
4853 cygwin*|wsl*)
4854     # Already handled
4855     ;;
4857 darwin*|macos*)
4858     COM=GCC
4859     OS=MACOSX
4860     RTL_OS=MacOSX
4861     P_SEP=:
4863     case "$host_cpu" in
4864     aarch64|arm64)
4865         if test "$enable_ios_simulator" = "yes"; then
4866             OS=iOS
4867         else
4868             CPUNAME=AARCH64
4869             RTL_ARCH=AARCH64
4870             PLATFORMID=macosx_aarch64
4871         fi
4872         ;;
4873     x86_64)
4874         if test "$enable_ios_simulator" = "yes"; then
4875             OS=iOS
4876         fi
4877         CPUNAME=X86_64
4878         RTL_ARCH=X86_64
4879         PLATFORMID=macosx_x86_64
4880         ;;
4881     *)
4882         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4883         ;;
4884     esac
4885     ;;
4887 ios*)
4888     COM=GCC
4889     OS=iOS
4890     RTL_OS=iOS
4891     P_SEP=:
4893     case "$host_cpu" in
4894     aarch64|arm64)
4895         if test "$enable_ios_simulator" = "yes"; then
4896             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
4897         fi
4898         ;;
4899     *)
4900         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4901         ;;
4902     esac
4903     CPUNAME=AARCH64
4904     RTL_ARCH=AARCH64
4905     PLATFORMID=ios_arm64
4906     ;;
4908 dragonfly*)
4909     COM=GCC
4910     OS=DRAGONFLY
4911     RTL_OS=DragonFly
4912     P_SEP=:
4914     case "$host_cpu" in
4915     i*86)
4916         CPUNAME=INTEL
4917         RTL_ARCH=x86
4918         PLATFORMID=dragonfly_x86
4919         ;;
4920     x86_64)
4921         CPUNAME=X86_64
4922         RTL_ARCH=X86_64
4923         PLATFORMID=dragonfly_x86_64
4924         ;;
4925     *)
4926         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4927         ;;
4928     esac
4929     ;;
4931 freebsd*)
4932     COM=GCC
4933     RTL_OS=FreeBSD
4934     OS=FREEBSD
4935     P_SEP=:
4937     case "$host_cpu" in
4938     aarch64)
4939         CPUNAME=AARCH64
4940         PLATFORMID=freebsd_aarch64
4941         RTL_ARCH=AARCH64
4942         ;;
4943     i*86)
4944         CPUNAME=INTEL
4945         RTL_ARCH=x86
4946         PLATFORMID=freebsd_x86
4947         ;;
4948     x86_64|amd64)
4949         CPUNAME=X86_64
4950         RTL_ARCH=X86_64
4951         PLATFORMID=freebsd_x86_64
4952         ;;
4953     powerpc64)
4954         CPUNAME=POWERPC64
4955         RTL_ARCH=PowerPC_64
4956         PLATFORMID=freebsd_powerpc64
4957         ;;
4958     powerpc|powerpcspe)
4959         CPUNAME=POWERPC
4960         RTL_ARCH=PowerPC
4961         PLATFORMID=freebsd_powerpc
4962         ;;
4963     *)
4964         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4965         ;;
4966     esac
4967     ;;
4969 haiku*)
4970     COM=GCC
4971     GUIBASE=haiku
4972     RTL_OS=Haiku
4973     OS=HAIKU
4974     P_SEP=:
4976     case "$host_cpu" in
4977     i*86)
4978         CPUNAME=INTEL
4979         RTL_ARCH=x86
4980         PLATFORMID=haiku_x86
4981         ;;
4982     x86_64|amd64)
4983         CPUNAME=X86_64
4984         RTL_ARCH=X86_64
4985         PLATFORMID=haiku_x86_64
4986         ;;
4987     *)
4988         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4989         ;;
4990     esac
4991     ;;
4993 kfreebsd*)
4994     COM=GCC
4995     OS=LINUX
4996     RTL_OS=kFreeBSD
4997     P_SEP=:
4999     case "$host_cpu" in
5001     i*86)
5002         CPUNAME=INTEL
5003         RTL_ARCH=x86
5004         PLATFORMID=kfreebsd_x86
5005         ;;
5006     x86_64)
5007         CPUNAME=X86_64
5008         RTL_ARCH=X86_64
5009         PLATFORMID=kfreebsd_x86_64
5010         ;;
5011     *)
5012         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5013         ;;
5014     esac
5015     ;;
5017 linux-gnu*|linux-musl*)
5018     COM=GCC
5019     OS=LINUX
5020     RTL_OS=Linux
5021     P_SEP=:
5023     case "$host_cpu" in
5025     aarch64)
5026         CPUNAME=AARCH64
5027         PLATFORMID=linux_aarch64
5028         RTL_ARCH=AARCH64
5029         EPM_FLAGS="-a arm64"
5030         ;;
5031     alpha)
5032         CPUNAME=AXP
5033         RTL_ARCH=ALPHA
5034         PLATFORMID=linux_alpha
5035         ;;
5036     arm*)
5037         CPUNAME=ARM
5038         EPM_FLAGS="-a arm"
5039         RTL_ARCH=ARM_EABI
5040         PLATFORMID=linux_arm_eabi
5041         case "$host_cpu" in
5042         arm*-linux)
5043             RTL_ARCH=ARM_OABI
5044             PLATFORMID=linux_arm_oabi
5045             ;;
5046         esac
5047         ;;
5048     hppa)
5049         CPUNAME=HPPA
5050         RTL_ARCH=HPPA
5051         EPM_FLAGS="-a hppa"
5052         PLATFORMID=linux_hppa
5053         ;;
5054     i*86)
5055         CPUNAME=INTEL
5056         RTL_ARCH=x86
5057         PLATFORMID=linux_x86
5058         ;;
5059     ia64)
5060         CPUNAME=IA64
5061         RTL_ARCH=IA64
5062         PLATFORMID=linux_ia64
5063         ;;
5064     mips)
5065         CPUNAME=GODSON
5066         RTL_ARCH=MIPS_EB
5067         EPM_FLAGS="-a mips"
5068         PLATFORMID=linux_mips_eb
5069         ;;
5070     mips64)
5071         CPUNAME=GODSON64
5072         RTL_ARCH=MIPS64_EB
5073         EPM_FLAGS="-a mips64"
5074         PLATFORMID=linux_mips64_eb
5075         ;;
5076     mips64el)
5077         CPUNAME=GODSON64
5078         RTL_ARCH=MIPS64_EL
5079         EPM_FLAGS="-a mips64el"
5080         PLATFORMID=linux_mips64_el
5081         ;;
5082     mipsel)
5083         CPUNAME=GODSON
5084         RTL_ARCH=MIPS_EL
5085         EPM_FLAGS="-a mipsel"
5086         PLATFORMID=linux_mips_el
5087         ;;
5088     m68k)
5089         CPUNAME=M68K
5090         RTL_ARCH=M68K
5091         PLATFORMID=linux_m68k
5092         ;;
5093     powerpc)
5094         CPUNAME=POWERPC
5095         RTL_ARCH=PowerPC
5096         PLATFORMID=linux_powerpc
5097         ;;
5098     powerpc64)
5099         CPUNAME=POWERPC64
5100         RTL_ARCH=PowerPC_64
5101         PLATFORMID=linux_powerpc64
5102         ;;
5103     powerpc64le)
5104         CPUNAME=POWERPC64
5105         RTL_ARCH=PowerPC_64_LE
5106         PLATFORMID=linux_powerpc64_le
5107         ;;
5108     sparc)
5109         CPUNAME=SPARC
5110         RTL_ARCH=SPARC
5111         PLATFORMID=linux_sparc
5112         ;;
5113     sparc64)
5114         CPUNAME=SPARC64
5115         RTL_ARCH=SPARC64
5116         PLATFORMID=linux_sparc64
5117         ;;
5118     s390)
5119         CPUNAME=S390
5120         RTL_ARCH=S390
5121         PLATFORMID=linux_s390
5122         ;;
5123     s390x)
5124         CPUNAME=S390X
5125         RTL_ARCH=S390x
5126         PLATFORMID=linux_s390x
5127         ;;
5128     x86_64)
5129         CPUNAME=X86_64
5130         RTL_ARCH=X86_64
5131         PLATFORMID=linux_x86_64
5132         ;;
5133     *)
5134         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5135         ;;
5136     esac
5137     ;;
5139 linux-android*)
5140     COM=GCC
5141     OS=ANDROID
5142     RTL_OS=Android
5143     P_SEP=:
5145     case "$host_cpu" in
5147     arm|armel)
5148         CPUNAME=ARM
5149         RTL_ARCH=ARM_EABI
5150         PLATFORMID=android_arm_eabi
5151         ;;
5152     aarch64)
5153         CPUNAME=AARCH64
5154         RTL_ARCH=AARCH64
5155         PLATFORMID=android_aarch64
5156         ;;
5157     i*86)
5158         CPUNAME=INTEL
5159         RTL_ARCH=x86
5160         PLATFORMID=android_x86
5161         ;;
5162     x86_64)
5163         CPUNAME=X86_64
5164         RTL_ARCH=X86_64
5165         PLATFORMID=android_x86_64
5166         ;;
5167     *)
5168         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5169         ;;
5170     esac
5171     ;;
5173 *netbsd*)
5174     COM=GCC
5175     OS=NETBSD
5176     RTL_OS=NetBSD
5177     P_SEP=:
5179     case "$host_cpu" in
5180     i*86)
5181         CPUNAME=INTEL
5182         RTL_ARCH=x86
5183         PLATFORMID=netbsd_x86
5184         ;;
5185     powerpc)
5186         CPUNAME=POWERPC
5187         RTL_ARCH=PowerPC
5188         PLATFORMID=netbsd_powerpc
5189         ;;
5190     sparc)
5191         CPUNAME=SPARC
5192         RTL_ARCH=SPARC
5193         PLATFORMID=netbsd_sparc
5194         ;;
5195     x86_64)
5196         CPUNAME=X86_64
5197         RTL_ARCH=X86_64
5198         PLATFORMID=netbsd_x86_64
5199         ;;
5200     *)
5201         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5202         ;;
5203     esac
5204     ;;
5206 openbsd*)
5207     COM=GCC
5208     OS=OPENBSD
5209     RTL_OS=OpenBSD
5210     P_SEP=:
5212     case "$host_cpu" in
5213     i*86)
5214         CPUNAME=INTEL
5215         RTL_ARCH=x86
5216         PLATFORMID=openbsd_x86
5217         ;;
5218     x86_64)
5219         CPUNAME=X86_64
5220         RTL_ARCH=X86_64
5221         PLATFORMID=openbsd_x86_64
5222         ;;
5223     *)
5224         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5225         ;;
5226     esac
5227     SOLARINC="$SOLARINC -I/usr/local/include"
5228     ;;
5230 solaris*)
5231     COM=GCC
5232     OS=SOLARIS
5233     RTL_OS=Solaris
5234     P_SEP=:
5236     case "$host_cpu" in
5237     i*86)
5238         CPUNAME=INTEL
5239         RTL_ARCH=x86
5240         PLATFORMID=solaris_x86
5241         ;;
5242     sparc)
5243         CPUNAME=SPARC
5244         RTL_ARCH=SPARC
5245         PLATFORMID=solaris_sparc
5246         ;;
5247     sparc64)
5248         CPUNAME=SPARC64
5249         RTL_ARCH=SPARC64
5250         PLATFORMID=solaris_sparc64
5251         ;;
5252     *)
5253         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5254         ;;
5255     esac
5256     SOLARINC="$SOLARINC -I/usr/local/include"
5257     ;;
5259 emscripten*)
5260     COM=GCC
5261     OS=EMSCRIPTEN
5262     RTL_OS=Emscripten
5263     P_SEP=:
5265     case "$host_cpu" in
5266     wasm32|wasm64)
5267         ;;
5268     *)
5269         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5270         ;;
5271     esac
5272     CPUNAME=INTEL
5273     RTL_ARCH=x86
5274     PLATFORMID=linux_x86
5275     ;;
5278     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5279     ;;
5280 esac
5282 if test "$with_x" = "no"; then
5283     AC_MSG_ERROR([Use --disable-gui instead. How can we get rid of this option? No idea where it comes from.])
5286 DISABLE_GUI=""
5287 if test "$enable_gui" = "no"; then
5288     if test "$using_x11" != yes; then
5289         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5290     fi
5291     USING_X11=
5292     DISABLE_GUI=TRUE
5293 else
5294     AC_DEFINE(HAVE_FEATURE_UI)
5296 AC_SUBST(DISABLE_GUI)
5298 if test "$using_x11" = yes; then
5299     if test "$USING_X11" = TRUE; then
5300         AC_DEFINE(USING_X11)
5301     else
5302         disable_x11_tests
5303     fi
5304 else
5305     if test "$USING_X11" = TRUE; then
5306         AC_MSG_ERROR([Platform doesn't support X11 (\$using_x11), but \$USING_X11 is set!])
5307     fi
5310 WORKDIR="${BUILDDIR}/workdir"
5311 INSTDIR="${BUILDDIR}/instdir"
5312 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5313 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5314 SOLARINC="-I$SRC_ROOT/include $SOLARINC"
5315 AC_SUBST(COM)
5316 AC_SUBST(CPUNAME)
5317 AC_SUBST(RTL_OS)
5318 AC_SUBST(RTL_ARCH)
5319 AC_SUBST(EPM_FLAGS)
5320 AC_SUBST(USING_X11)
5321 AC_SUBST([INSTDIR])
5322 AC_SUBST([INSTROOT])
5323 AC_SUBST([INSTROOTBASE])
5324 AC_SUBST(OS)
5325 AC_SUBST(P_SEP)
5326 AC_SUBST(WORKDIR)
5327 AC_SUBST(PLATFORMID)
5328 AC_SUBST(WINDOWS_X64)
5329 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5331 if test "$OS" = WNT -a "$COM" = MSC; then
5332     case "$CPUNAME" in
5333     INTEL) CPPU_ENV=msci ;;
5334     X86_64) CPPU_ENV=mscx ;;
5335     AARCH64) CPPU_ENV=msca ;;
5336     *)
5337         AC_MSG_ERROR([Unknown \$CPUNAME '$CPUNAME' for $OS / $COM"])
5338         ;;
5339     esac
5340 else
5341     CPPU_ENV=gcc3
5343 AC_SUBST(CPPU_ENV)
5345 dnl ===================================================================
5346 dnl Test which package format to use
5347 dnl ===================================================================
5348 AC_MSG_CHECKING([which package format to use])
5349 if test -n "$with_package_format" -a "$with_package_format" != no; then
5350     for i in $with_package_format; do
5351         case "$i" in
5352         aix | bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5353             ;;
5354         *)
5355             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5356 aix - AIX software distribution
5357 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5358 deb - Debian software distribution
5359 pkg - Solaris software distribution
5360 rpm - RedHat software distribution
5362 LibreOffice additionally supports:
5363 archive - .tar.gz or .zip
5364 dmg - macOS .dmg
5365 installed - installation tree
5366 msi - Windows .msi
5367         ])
5368             ;;
5369         esac
5370     done
5371     # fakeroot is needed to ensure correct file ownerships/permissions
5372     # inside deb packages and tar archives created on Linux and Solaris.
5373     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5374         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5375         if test "$FAKEROOT" = "no"; then
5376             AC_MSG_ERROR(
5377                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5378         fi
5379     fi
5380     PKGFORMAT="$with_package_format"
5381     AC_MSG_RESULT([$PKGFORMAT])
5382 else
5383     PKGFORMAT=
5384     AC_MSG_RESULT([none])
5386 AC_SUBST(PKGFORMAT)
5388 dnl ===================================================================
5389 dnl handle help related options
5391 dnl If you change help related options, please update README.help
5392 dnl ===================================================================
5394 ENABLE_HTMLHELP=
5395 HELP_OMINDEX_PAGE=
5396 HELP_ONLINE=
5397 WITH_HELPPACKS=
5399 AC_MSG_CHECKING([which help to build])
5400 if test -n "$with_help" -a "$with_help" != "no"; then
5401     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5402     BUILD_TYPE="$BUILD_TYPE HELP"
5403     case "$with_help" in
5404     "html")
5405         ENABLE_HTMLHELP=TRUE
5406         WITH_HELPPACKS=TRUE
5407         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5408         AC_MSG_RESULT([HTML (local)])
5409         ;;
5410     "online")
5411         ENABLE_HTMLHELP=TRUE
5412         HELP_ONLINE=TRUE
5413         AC_MSG_RESULT([HTML (online)])
5414         ;;
5415     yes)
5416         WITH_HELPPACKS=TRUE
5417         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5418         AC_MSG_RESULT([XML (local)])
5419         ;;
5420     *)
5421         AC_MSG_ERROR([Unknown --with-help=$with_help])
5422         ;;
5423     esac
5424 else
5425     AC_MSG_RESULT([no])
5428 AC_MSG_CHECKING([if we need to build the help index tooling])
5429 if test "$with_help" = yes -o "$enable_extension_integration" != no; then
5430     BUILD_TYPE="$BUILD_TYPE HELPTOOLS"
5431     AC_MSG_RESULT([yes])
5432 else
5433     AC_MSG_RESULT([no])
5436 AC_MSG_CHECKING([whether to enable xapian-omega support for online help])
5437 if test -n "$with_omindex" -a "$with_omindex" != "no"; then
5438     if test "$HELP_ONLINE" != TRUE; then
5439         AC_MSG_ERROR([Can't build xapian-omega index without --help=online])
5440     fi
5441     case "$with_omindex" in
5442     "server")
5443         HELP_OMINDEX_PAGE=TRUE
5444         AC_MSG_RESULT([SERVER])
5445         ;;
5446     "noxap")
5447         AC_MSG_RESULT([NOXAP])
5448         ;;
5449     *)
5450         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5451         ;;
5452     esac
5453 else
5454     AC_MSG_RESULT([no])
5457 AC_MSG_CHECKING([whether to include the XML-help support])
5458 if test "$enable_xmlhelp" = yes; then
5459     BUILD_TYPE="$BUILD_TYPE XMLHELP"
5460     AC_DEFINE(HAVE_FEATURE_XMLHELP)
5461     AC_MSG_RESULT([yes])
5462 else
5463     if test "$with_help" = yes; then
5464         add_warning "Building the XML help, but LO with disabled xmlhelp support. Generated help can't be accessed from this LO build!"
5465     fi
5466     AC_MSG_RESULT([no])
5469 dnl Test whether to integrate helppacks into the product's installer
5470 AC_MSG_CHECKING([for helppack integration])
5471 if test -z "$WITH_HELPPACKS" -o "$with_helppack_integration" = no; then
5472     AC_MSG_RESULT([no integration])
5473 else
5474     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
5475     AC_MSG_RESULT([integration])
5478 AC_SUBST([ENABLE_HTMLHELP])
5479 AC_SUBST([HELP_OMINDEX_PAGE])
5480 AC_SUBST([HELP_ONLINE])
5481 # WITH_HELPPACKS is used only in configure
5483 dnl ===================================================================
5484 dnl Set up a different compiler to produce tools to run on the build
5485 dnl machine when doing cross-compilation
5486 dnl ===================================================================
5488 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5489 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5490 if test "$cross_compiling" = "yes"; then
5491     AC_MSG_CHECKING([for BUILD platform configuration])
5492     echo
5493     rm -rf CONF-FOR-BUILD config_build.mk
5494     mkdir CONF-FOR-BUILD
5495     # Here must be listed all files needed when running the configure script. In particular, also
5496     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5497     # keep them in the same order as there.
5498     (cd $SRC_ROOT && tar cf - \
5499         config.guess \
5500         bin/get_config_variables \
5501         solenv/bin/getcompver.awk \
5502         solenv/inc/langlist.mk \
5503         download.lst \
5504         config_host.mk.in \
5505         config_host_lang.mk.in \
5506         Makefile.in \
5507         lo.xcent.in \
5508         bin/bffvalidator.sh.in \
5509         bin/odfvalidator.sh.in \
5510         bin/officeotron.sh.in \
5511         hardened_runtime.xcent.in \
5512         instsetoo_native/util/openoffice.lst.in \
5513         config_host/*.in \
5514         sysui/desktop/macosx/Info.plist.in \
5515         .vscode/vs-code-template.code-workspace.in \
5516         ) \
5517     | (cd CONF-FOR-BUILD && tar xf -)
5518     cp configure CONF-FOR-BUILD
5519     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5520     (
5521     unset COM USING_X11 OS CPUNAME
5522     unset CC CXX SYSBASE CFLAGS
5523     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5524     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5525     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5526     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5527     if test -n "$CC_FOR_BUILD"; then
5528         export CC="$CC_FOR_BUILD"
5529         CC_BASE=`first_arg_basename "$CC"`
5530     fi
5531     if test -n "$CXX_FOR_BUILD"; then
5532         export CXX="$CXX_FOR_BUILD"
5533         CXX_BASE=`first_arg_basename "$CXX"`
5534     fi
5535     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5536     cd CONF-FOR-BUILD
5538     # Handle host configuration, which affects the cross-toolset too
5539     sub_conf_opts=""
5540     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5541     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5542     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5543     if test -n "$ENABLE_JAVA"; then
5544         case "$_os" in
5545         iOS) sub_conf_opts="$sub_conf_opts --without-java" ;; # force it off, like it used to be
5546         Android)
5547             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5548             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5549             ;;
5550         *)
5551             if test -z "$with_jdk_home"; then
5552                 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.])
5553             fi
5554             ;;
5555         esac
5556     else
5557         sub_conf_opts="$sub_conf_opts --without-java"
5558     fi
5559     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5560     test "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" && sub_conf_opts="$sub_conf_opts --with-system-icu"
5561     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no --disable-database-connectivity"
5562     test -n "$with_help" -a "$with_help" != "no" && sub_conf_opts="$sub_conf_opts --with-help=$with_help"
5563     test "$enable_extensions" = yes || sub_conf_opts="$sub_conf_opts --disable-extensions"
5564     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5566     # Don't bother having configure look for stuff not needed for the build platform anyway
5567     sub_conf_defaults=" \
5568         --build="$build_alias" \
5569         --disable-cairo-canvas \
5570         --disable-cups \
5571         --disable-firebird-sdbc \
5572         --disable-gpgmepp \
5573         --disable-gstreamer-1-0 \
5574         --disable-gtk3 \
5575         --disable-gtk4 \
5576         --disable-mariadb-sdbc \
5577         --disable-nss \
5578         --disable-online-update \
5579         --disable-opencl \
5580         --disable-pdfimport \
5581         --disable-postgresql-sdbc \
5582         --disable-skia \
5583         --enable-icecream="$enable_icecream" \
5584         --without-doxygen \
5585         --without-webdav \
5586         --with-parallelism="$with_parallelism" \
5587         --with-theme="$with_theme" \
5588         --with-tls=openssl \
5590     echo "    Running CONF-FOR-BUILD/configure" $sub_conf_defaults $sub_conf_opts $with_build_platform_configure_options --srcdir=$srcdir
5591     ./configure \
5592         $sub_conf_defaults \
5593         $sub_conf_opts \
5594         $with_build_platform_configure_options \
5595         --srcdir=$srcdir \
5596         2>&1 | sed -e 's/^/    /'
5597     if test [${PIPESTATUS[0]}] -ne 0; then
5598         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5599     fi
5601     # filter permitted build targets
5602     PERMITTED_BUILD_TARGETS="
5603         AVMEDIA
5604         BOOST
5605         CAIRO
5606         CLUCENE
5607         CURL
5608         DBCONNECTIVITY
5609         DESKTOP
5610         DYNLOADING
5611         EPOXY
5612         EXPAT
5613         GLM
5614         GRAPHITE
5615         HARFBUZZ
5616         HELPTOOLS
5617         ICU
5618         LCMS2
5619         LIBJPEG_TURBO
5620         LIBLANGTAG
5621         LibO
5622         LIBFFI
5623         LIBPN
5624         LIBXML2
5625         LIBXSLT
5626         MDDS
5627         NATIVE
5628         OPENSSL
5629         ORCUS
5630         PYTHON
5631         SCRIPTING
5632         ZLIB
5634     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5635     # newlined lists, to use grep as a filter
5636     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5637     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5638     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5639     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5641     cp config_host.mk ../config_build.mk
5642     cp config_host_lang.mk ../config_build_lang.mk
5643     mv config.log ../config.Build.log
5644     mkdir -p ../config_build
5645     mv config_host/*.h ../config_build
5646     test -f "$WARNINGS_FILE" && mv "$WARNINGS_FILE" "../$WARNINGS_FILE_FOR_BUILD"
5648     # all these will get a _FOR_BUILD postfix
5649     DIRECT_FOR_BUILD_SETTINGS="
5650         CC
5651         CPPU_ENV
5652         CXX
5653         ILIB
5654         JAVA_HOME
5655         JAVAIFLAGS
5656         JDK
5657         LIBO_BIN_FOLDER
5658         LIBO_LIB_FOLDER
5659         LIBO_URE_LIB_FOLDER
5660         LIBO_URE_MISC_FOLDER
5661         OS
5662         SDKDIRNAME
5663         SYSTEM_LIBXML
5664         SYSTEM_LIBXSLT
5666     # these overwrite host config with build config
5667     OVERWRITING_SETTINGS="
5668         ANT
5669         ANT_HOME
5670         ANT_LIB
5671         HSQLDB_USE_JDBC_4_1
5672         JAVA_CLASSPATH_NOT_SET
5673         JAVA_SOURCE_VER
5674         JAVA_TARGET_VER
5675         JAVACFLAGS
5676         JAVACOMPILER
5677         JAVADOC
5678         JAVADOCISGJDOC
5680     # these need some special handling
5681     EXTRA_HANDLED_SETTINGS="
5682         INSTDIR
5683         INSTROOT
5684         PATH
5685         WORKDIR
5687     OLD_PATH=$PATH
5688     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
5689     BUILD_PATH=$PATH
5690     PATH=$OLD_PATH
5692     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
5693     echo "$line" >>build-config
5695     for V in $DIRECT_FOR_BUILD_SETTINGS; do
5696         VV='$'$V
5697         VV=`eval "echo $VV"`
5698         if test -n "$VV"; then
5699             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
5700             echo "$line" >>build-config
5701         fi
5702     done
5704     for V in $OVERWRITING_SETTINGS; do
5705         VV='$'$V
5706         VV=`eval "echo $VV"`
5707         if test -n "$VV"; then
5708             line=${V}='${'${V}:-$VV'}'
5709             echo "$line" >>build-config
5710         fi
5711     done
5713     for V in INSTDIR INSTROOT WORKDIR; do
5714         VV='$'$V
5715         VV=`eval "echo $VV"`
5716         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
5717         if test -n "$VV"; then
5718             line="${V}_FOR_BUILD='$VV'"
5719             echo "$line" >>build-config
5720         fi
5721     done
5723     )
5724     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
5725     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])
5726     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
5727              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
5729     eval `cat CONF-FOR-BUILD/build-config`
5731     AC_MSG_RESULT([checking for BUILD platform configuration... done])
5733     rm -rf CONF-FOR-BUILD
5734 else
5735     OS_FOR_BUILD="$OS"
5736     CC_FOR_BUILD="$CC"
5737     CPPU_ENV_FOR_BUILD="$CPPU_ENV"
5738     CXX_FOR_BUILD="$CXX"
5739     INSTDIR_FOR_BUILD="$INSTDIR"
5740     INSTROOT_FOR_BUILD="$INSTROOT"
5741     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
5742     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
5743     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
5744     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
5745     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
5746     WORKDIR_FOR_BUILD="$WORKDIR"
5748 AC_SUBST(OS_FOR_BUILD)
5749 AC_SUBST(INSTDIR_FOR_BUILD)
5750 AC_SUBST(INSTROOT_FOR_BUILD)
5751 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
5752 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
5753 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
5754 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
5755 AC_SUBST(SDKDIRNAME_FOR_BUILD)
5756 AC_SUBST(WORKDIR_FOR_BUILD)
5757 AC_SUBST(CC_FOR_BUILD)
5758 AC_SUBST(CXX_FOR_BUILD)
5759 AC_SUBST(CPPU_ENV_FOR_BUILD)
5761 dnl ===================================================================
5762 dnl Check for syslog header
5763 dnl ===================================================================
5764 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
5766 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
5767 dnl ===================================================================
5768 AC_MSG_CHECKING([whether to turn warnings to errors])
5769 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
5770     ENABLE_WERROR="TRUE"
5771     PYTHONWARNINGS="error"
5772     AC_MSG_RESULT([yes])
5773 else
5774     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
5775         ENABLE_WERROR="TRUE"
5776         PYTHONWARNINGS="error"
5777         AC_MSG_RESULT([yes])
5778     else
5779         AC_MSG_RESULT([no])
5780     fi
5782 AC_SUBST(ENABLE_WERROR)
5783 AC_SUBST(PYTHONWARNINGS)
5785 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
5786 dnl ===================================================================
5787 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
5788 if test -z "$enable_assert_always_abort"; then
5789    if test "$ENABLE_DEBUG" = TRUE; then
5790        enable_assert_always_abort=yes
5791    else
5792        enable_assert_always_abort=no
5793    fi
5795 if test "$enable_assert_always_abort" = "yes"; then
5796     ASSERT_ALWAYS_ABORT="TRUE"
5797     AC_MSG_RESULT([yes])
5798 else
5799     ASSERT_ALWAYS_ABORT="FALSE"
5800     AC_MSG_RESULT([no])
5802 AC_SUBST(ASSERT_ALWAYS_ABORT)
5804 # Determine whether to use ooenv for the instdir installation
5805 # ===================================================================
5806 if test $_os != "WINNT" -a $_os != "Darwin"; then
5807     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
5808     if test -z "$enable_ooenv"; then
5809         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5810             enable_ooenv=yes
5811         else
5812             enable_ooenv=no
5813         fi
5814     fi
5815     if test "$enable_ooenv" = "no"; then
5816         AC_MSG_RESULT([no])
5817     else
5818         ENABLE_OOENV="TRUE"
5819         AC_MSG_RESULT([yes])
5820     fi
5822 AC_SUBST(ENABLE_OOENV)
5824 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
5825     if test "$enable_qt5" = "no"; then
5826         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
5827     else
5828         enable_qt5=yes
5829     fi
5832 dnl ===================================================================
5833 dnl check for cups support
5834 dnl ===================================================================
5836 AC_MSG_CHECKING([whether to enable CUPS support])
5837 if test "$test_cups" = yes -a "$enable_cups" != no; then
5838     ENABLE_CUPS=TRUE
5839     AC_MSG_RESULT([yes])
5841     AC_MSG_CHECKING([whether cups support is present])
5842     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
5843     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
5844     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
5845         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
5846     fi
5847 else
5848     AC_MSG_RESULT([no])
5851 AC_SUBST(ENABLE_CUPS)
5853 # fontconfig checks
5854 if test "$using_freetype_fontconfig" = yes; then
5855     AC_MSG_CHECKING([which fontconfig to use])
5857 if test "$using_freetype_fontconfig" = yes -a "$test_system_fontconfig" != no; then
5858     AC_MSG_RESULT([external])
5859     PKG_CHECK_MODULES([FONTCONFIG], [fontconfig >= 2.4.1])
5860     SYSTEM_FONTCONFIG=TRUE
5861     FilterLibs "${FONTCONFIG_LIBS}"
5862     FONTCONFIG_LIBS="${filteredlibs}"
5863 elif test "$using_freetype_fontconfig" = yes; then
5864     AC_MSG_RESULT([internal])
5865     BUILD_TYPE="$BUILD_TYPE FONTCONFIG"
5867 AC_SUBST(FONTCONFIG_CFLAGS)
5868 AC_SUBST(FONTCONFIG_LIBS)
5869 AC_SUBST([SYSTEM_FONTCONFIG])
5871 dnl whether to find & fetch external tarballs?
5872 dnl ===================================================================
5873 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
5874    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
5875        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
5876    else
5877        TARFILE_LOCATION="$LODE_HOME/ext_tar"
5878    fi
5880 if test -z "$TARFILE_LOCATION"; then
5881     if test -d "$SRC_ROOT/src" ; then
5882         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
5883         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
5884     fi
5885     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
5886 else
5887     AbsolutePath "$TARFILE_LOCATION"
5888     PathFormat "${absolute_path}"
5889     TARFILE_LOCATION="${formatted_path}"
5891 AC_SUBST(TARFILE_LOCATION)
5893 AC_MSG_CHECKING([whether we want to fetch tarballs])
5894 if test "$enable_fetch_external" != "no"; then
5895     if test "$with_all_tarballs" = "yes"; then
5896         AC_MSG_RESULT([yes, all of them])
5897         DO_FETCH_TARBALLS="ALL"
5898     else
5899         AC_MSG_RESULT([yes, if we use them])
5900         DO_FETCH_TARBALLS="TRUE"
5901     fi
5902 else
5903     AC_MSG_RESULT([no])
5904     DO_FETCH_TARBALLS=
5906 AC_SUBST(DO_FETCH_TARBALLS)
5908 dnl Test whether to include MySpell dictionaries
5909 dnl ===================================================================
5910 AC_MSG_CHECKING([whether to include MySpell dictionaries])
5911 if test "$with_myspell_dicts" = "yes"; then
5912     AC_MSG_RESULT([yes])
5913     WITH_MYSPELL_DICTS=TRUE
5914     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
5915     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
5916 else
5917     AC_MSG_RESULT([no])
5918     WITH_MYSPELL_DICTS=
5920 AC_SUBST(WITH_MYSPELL_DICTS)
5922 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
5923 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
5924     if test "$with_system_dicts" = yes; then
5925         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
5926     fi
5927     with_system_dicts=no
5930 AC_MSG_CHECKING([whether to use dicts from external paths])
5931 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
5932     AC_MSG_RESULT([yes])
5933     SYSTEM_DICTS=TRUE
5934     AC_MSG_CHECKING([for spelling dictionary directory])
5935     if test -n "$with_external_dict_dir"; then
5936         DICT_SYSTEM_DIR=file://$with_external_dict_dir
5937     else
5938         DICT_SYSTEM_DIR=file:///usr/share/hunspell
5939         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
5940             DICT_SYSTEM_DIR=file:///usr/share/myspell
5941         fi
5942     fi
5943     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
5944     AC_MSG_CHECKING([for hyphenation patterns directory])
5945     if test -n "$with_external_hyph_dir"; then
5946         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
5947     else
5948         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
5949     fi
5950     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
5951     AC_MSG_CHECKING([for thesaurus directory])
5952     if test -n "$with_external_thes_dir"; then
5953         THES_SYSTEM_DIR=file://$with_external_thes_dir
5954     else
5955         THES_SYSTEM_DIR=file:///usr/share/mythes
5956     fi
5957     AC_MSG_RESULT([$THES_SYSTEM_DIR])
5958 else
5959     AC_MSG_RESULT([no])
5960     SYSTEM_DICTS=
5962 AC_SUBST(SYSTEM_DICTS)
5963 AC_SUBST(DICT_SYSTEM_DIR)
5964 AC_SUBST(HYPH_SYSTEM_DIR)
5965 AC_SUBST(THES_SYSTEM_DIR)
5967 dnl ===================================================================
5968 dnl Precompiled headers.
5969 ENABLE_PCH=""
5970 AC_MSG_CHECKING([whether to enable pch feature])
5971 if test -z "$enable_pch"; then
5972     if test "$_os" = "WINNT"; then
5973         # Enabled by default on Windows.
5974         enable_pch=yes
5975         # never use sccache on auto-enabled PCH builds, except if requested explicitely
5976         if test -z "$enable_ccache" -a "$SCCACHE"; then
5977             CCACHE=""
5978         fi
5979     else
5980         enable_pch=no
5981     fi
5983 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
5984     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
5986 if test "$enable_pch" = "system"; then
5987     ENABLE_PCH="1"
5988     AC_MSG_RESULT([yes (system headers)])
5989 elif test "$enable_pch" = "base"; then
5990     ENABLE_PCH="2"
5991     AC_MSG_RESULT([yes (system and base headers)])
5992 elif test "$enable_pch" = "normal"; then
5993     ENABLE_PCH="3"
5994     AC_MSG_RESULT([yes (normal)])
5995 elif test "$enable_pch" = "full"; then
5996     ENABLE_PCH="4"
5997     AC_MSG_RESULT([yes (full)])
5998 elif test "$enable_pch" = "yes"; then
5999     # Pick a suitable default.
6000     if test "$GCC" = "yes"; then
6001         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
6002         # while making the PCHs larger and rebuilds more likely.
6003         ENABLE_PCH="2"
6004         AC_MSG_RESULT([yes (system and base headers)])
6005     else
6006         # With MSVC the highest level makes a significant difference,
6007         # and it was the default when there used to be no PCH levels.
6008         ENABLE_PCH="4"
6009         AC_MSG_RESULT([yes (full)])
6010     fi
6011 elif test "$enable_pch" = "no"; then
6012     AC_MSG_RESULT([no])
6013 else
6014     AC_MSG_ERROR([Unknown value for --enable-pch])
6016 AC_SUBST(ENABLE_PCH)
6017 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
6018 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
6019     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
6020     if test "$CCACHE_BIN" != "not found"; then
6021         AC_MSG_CHECKING([ccache version])
6022         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
6023         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6024         AC_MSG_RESULT([$CCACHE_VERSION])
6025         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
6026         if test "$CCACHE_NUMVER" -gt "030701"; then
6027             AC_MSG_RESULT([yes])
6028         else
6029             AC_MSG_RESULT([no (not newer than 3.7.1)])
6030             CCACHE_DEPEND_MODE=
6031         fi
6032     fi
6035 PCH_INSTANTIATE_TEMPLATES=
6036 if test -n "$ENABLE_PCH"; then
6037     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
6038     save_CFLAGS=$CFLAGS
6039     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
6040     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
6041     CFLAGS=$save_CFLAGS
6042     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
6043         AC_MSG_RESULT(yes)
6044     else
6045         AC_MSG_RESULT(no)
6046     fi
6048 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
6050 BUILDING_PCH_WITH_OBJ=
6051 if test -n "$ENABLE_PCH"; then
6052     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
6053     save_CFLAGS=$CFLAGS
6054     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
6055     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
6056     CFLAGS=$save_CFLAGS
6057     if test -n "$BUILDING_PCH_WITH_OBJ"; then
6058         AC_MSG_RESULT(yes)
6059     else
6060         AC_MSG_RESULT(no)
6061     fi
6063 AC_SUBST(BUILDING_PCH_WITH_OBJ)
6065 PCH_CODEGEN=
6066 PCH_NO_CODEGEN=
6067 fpch_prefix=
6068 if test "$COM" = MSC; then
6069     fpch_prefix="-Xclang "
6071 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6072     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-codegen])
6073     save_CFLAGS=$CFLAGS
6074     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-codegen"
6075     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6076         [
6077         PCH_CODEGEN="${fpch_prefix}-fpch-codegen"
6078         PCH_NO_CODEGEN="${fpch_prefix}-fno-pch-codegen"
6079         ],[])
6080     CFLAGS=$save_CFLAGS
6081     if test -n "$PCH_CODEGEN"; then
6082         AC_MSG_RESULT(yes)
6083     else
6084         AC_MSG_RESULT(no)
6085     fi
6087 AC_SUBST(PCH_CODEGEN)
6088 AC_SUBST(PCH_NO_CODEGEN)
6089 PCH_DEBUGINFO=
6090 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6091     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-debuginfo])
6092     save_CFLAGS=$CFLAGS
6093     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-debuginfo"
6094     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="${fpch_prefix}-fpch-debuginfo" ],[])
6095     CFLAGS=$save_CFLAGS
6096     if test -n "$PCH_DEBUGINFO"; then
6097         AC_MSG_RESULT(yes)
6098     else
6099         AC_MSG_RESULT(no)
6100     fi
6102 AC_SUBST(PCH_DEBUGINFO)
6104 TAB=`printf '\t'`
6106 AC_MSG_CHECKING([the GNU Make version])
6107 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
6108 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6109 if test "$_make_longver" -ge "038200"; then
6110     AC_MSG_RESULT([$GNUMAKE $_make_version])
6112 elif test "$_make_longver" -ge "038100"; then
6113     if test "$build_os" = "cygwin"; then
6114         AC_MSG_ERROR([failed ($GNUMAKE version >= 3.82 needed])
6115     fi
6116     AC_MSG_RESULT([$GNUMAKE $_make_version])
6118     dnl ===================================================================
6119     dnl Search all the common names for sha1sum
6120     dnl ===================================================================
6121     AC_CHECK_PROGS(SHA1SUM, sha1sum sha1 shasum openssl)
6122     if test -z "$SHA1SUM"; then
6123         AC_MSG_ERROR([install the appropriate SHA-1 checksumming program for this OS])
6124     elif test "$SHA1SUM" = "openssl"; then
6125         SHA1SUM="openssl sha1"
6126     fi
6127     AC_MSG_CHECKING([for GNU Make bug 20033])
6128     TESTGMAKEBUG20033=`mktemp -d tmp.XXXXXX`
6129     $SED -e "s/<TAB>/$TAB/g" > $TESTGMAKEBUG20033/Makefile << EOF
6130 A := \$(wildcard *.a)
6132 .PHONY: all
6133 all: \$(A:.a=.b)
6134 <TAB>@echo survived bug20033.
6136 .PHONY: setup
6137 setup:
6138 <TAB>@touch 1.a 2.a 3.a 4.a 5.a 6.a
6140 define d1
6141 @echo lala \$(1)
6142 @sleep 1
6143 endef
6145 define d2
6146 @echo tyty \$(1)
6147 @sleep 1
6148 endef
6150 %.b : %.a
6151 <TAB>\$(eval CHECKSUM := \$(word 1,\$(shell cat \$^ | $SHA1SUM))) \$(if \$(wildcard \$(CACHEDIR)/\$(CHECKSUM)),\
6152 <TAB>\$(call d1,\$(CHECKSUM)),\
6153 <TAB>\$(call d2,\$(CHECKSUM)))
6155     if test -z "`(cd $TESTGMAKEBUG20033 && $GNUMAKE setup && $GNUMAKE -j)|grep survived`"; then
6156         no_parallelism_make="YES"
6157         AC_MSG_RESULT([yes, disable parallelism])
6158     else
6159         AC_MSG_RESULT([no, keep parallelism enabled])
6160     fi
6161     rm -rf $TESTGMAKEBUG20033
6162 else
6163     AC_MSG_ERROR([failed ($GNUMAKE version >= 3.81 needed])
6166 # find if gnumake support file function
6167 AC_MSG_CHECKING([whether GNU Make supports the 'file' function])
6168 TESTGMAKEFILEFUNC="`mktemp -d -t tst.XXXXXX`"
6169 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6170     TESTGMAKEFILEFUNC=`cygpath -m $TESTGMAKEFILEFUNC`
6172 $SED -e "s/<TAB>/$TAB/" > $TESTGMAKEFILEFUNC/Makefile << EOF
6173 \$(file >test.txt,Success )
6175 .PHONY: all
6176 all:
6177 <TAB>@cat test.txt
6180 $GNUMAKE -C $TESTGMAKEFILEFUNC 2>/dev/null 1>&2
6181 if test -f $TESTGMAKEFILEFUNC/test.txt; then
6182     HAVE_GNUMAKE_FILE_FUNC=TRUE
6183     AC_MSG_RESULT([yes])
6184 else
6185     AC_MSG_RESULT([no])
6187 rm -rf $TESTGMAKEFILEFUNC
6188 AC_SUBST(HAVE_GNUMAKE_FILE_FUNC)
6190 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6191 STALE_MAKE=
6192 if test "$_make_ver_check" = ""; then
6193    STALE_MAKE=TRUE
6196 HAVE_LD_HASH_STYLE=FALSE
6197 WITH_LINKER_HASH_STYLE=
6198 AC_MSG_CHECKING([for --hash-style gcc linker support])
6199 if test "$GCC" = "yes"; then
6200     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6201         hash_styles="gnu sysv"
6202     elif test "$with_linker_hash_style" = "no"; then
6203         hash_styles=
6204     else
6205         hash_styles="$with_linker_hash_style"
6206     fi
6208     for hash_style in $hash_styles; do
6209         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6210         hash_style_ldflags_save=$LDFLAGS
6211         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6213         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6214             [
6215 #include <stdio.h>
6216             ],[
6217 printf ("");
6218             ])],
6219             [
6220                   HAVE_LD_HASH_STYLE=TRUE
6221                   WITH_LINKER_HASH_STYLE=$hash_style
6222             ],
6223             [HAVE_LD_HASH_STYLE=FALSE],
6224             [HAVE_LD_HASH_STYLE=FALSE])
6225         LDFLAGS=$hash_style_ldflags_save
6226     done
6228     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6229         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6230     else
6231         AC_MSG_RESULT( no )
6232     fi
6233     LDFLAGS=$hash_style_ldflags_save
6234 else
6235     AC_MSG_RESULT( no )
6237 AC_SUBST(HAVE_LD_HASH_STYLE)
6238 AC_SUBST(WITH_LINKER_HASH_STYLE)
6240 dnl ===================================================================
6241 dnl Check whether there's a Perl version available.
6242 dnl ===================================================================
6243 if test -z "$with_perl_home"; then
6244     AC_PATH_PROG(PERL, perl)
6245 else
6246     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6247     _perl_path="$with_perl_home/bin/perl"
6248     if test -x "$_perl_path"; then
6249         PERL=$_perl_path
6250     else
6251         AC_MSG_ERROR([$_perl_path not found])
6252     fi
6255 dnl ===================================================================
6256 dnl Testing for Perl version 5 or greater.
6257 dnl $] is the Perl version variable, it is returned as an integer
6258 dnl ===================================================================
6259 if test "$PERL"; then
6260     AC_MSG_CHECKING([the Perl version])
6261     ${PERL} -e "exit($]);"
6262     _perl_version=$?
6263     if test "$_perl_version" -lt 5; then
6264         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6265     fi
6266     AC_MSG_RESULT([Perl $_perl_version])
6267 else
6268     AC_MSG_ERROR([Perl not found, install Perl 5])
6271 dnl ===================================================================
6272 dnl Testing for required Perl modules
6273 dnl ===================================================================
6275 AC_MSG_CHECKING([for required Perl modules])
6276 perl_use_string="use Cwd ; use Digest::MD5"
6277 if test "$_os" = "WINNT"; then
6278     if test -n "$PKGFORMAT"; then
6279         for i in $PKGFORMAT; do
6280             case "$i" in
6281             msi)
6282                 # for getting fonts versions to use in MSI
6283                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6284                 ;;
6285             esac
6286         done
6287     fi
6289 if test "$with_system_hsqldb" = "yes"; then
6290     perl_use_string="$perl_use_string ; use Archive::Zip"
6292 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6293     # OpenSSL needs that to build
6294     perl_use_string="$perl_use_string ; use FindBin"
6296 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6297     AC_MSG_RESULT([all modules found])
6298 else
6299     AC_MSG_RESULT([failed to find some modules])
6300     # Find out which modules are missing.
6301     for i in $perl_use_string; do
6302         if test "$i" != "use" -a "$i" != ";"; then
6303             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6304                 missing_perl_modules="$missing_perl_modules $i"
6305             fi
6306         fi
6307     done
6308     AC_MSG_ERROR([
6309     The missing Perl modules are: $missing_perl_modules
6310     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6313 dnl ===================================================================
6314 dnl Check for pkg-config
6315 dnl ===================================================================
6316 if test "$_os" != "WINNT"; then
6317     PKG_PROG_PKG_CONFIG
6320 if test "$_os" != "WINNT"; then
6322     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6323     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6324     # explicitly. Or put /path/to/compiler in PATH yourself.
6326     # Use wrappers for LTO
6327     if test "$ENABLE_LTO" = "TRUE" -a "$COM_IS_CLANG" != "TRUE"; then
6328         AC_CHECK_TOOL(AR,gcc-ar)
6329         AC_CHECK_TOOL(NM,gcc-nm)
6330         AC_CHECK_TOOL(RANLIB,gcc-ranlib)
6331     else
6332         AC_CHECK_TOOL(AR,ar)
6333         AC_CHECK_TOOL(NM,nm)
6334         AC_CHECK_TOOL(RANLIB,ranlib)
6335     fi
6336     AC_CHECK_TOOL(OBJDUMP,objdump)
6337     AC_CHECK_TOOL(READELF,readelf)
6338     AC_CHECK_TOOL(STRIP,strip)
6340 AC_SUBST(AR)
6341 AC_SUBST(LD)
6342 AC_SUBST(NM)
6343 AC_SUBST(OBJDUMP)
6344 AC_SUBST(PKG_CONFIG)
6345 AC_SUBST(PKG_CONFIG_PATH)
6346 AC_SUBST(PKG_CONFIG_LIBDIR)
6347 AC_SUBST(RANLIB)
6348 AC_SUBST(READELF)
6349 AC_SUBST(STRIP)
6351 dnl ===================================================================
6352 dnl pkg-config checks on macOS
6353 dnl ===================================================================
6355 if test $_os = Darwin; then
6356     AC_MSG_CHECKING([for bogus pkg-config])
6357     if test -n "$PKG_CONFIG"; then
6358         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6359             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6360         else
6361             if test "$enable_bogus_pkg_config" = "yes"; then
6362                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6363             else
6364                 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.])
6365             fi
6366         fi
6367     else
6368         AC_MSG_RESULT([no, good])
6369     fi
6372 find_csc()
6374     # Return value: $csctest
6376     unset csctest
6378     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client/InstallPath"
6379     if test -n "$regvalue"; then
6380         csctest=$regvalue
6381         return
6382     fi
6385 find_al()
6387     # Return value: $altest
6389     unset altest
6391     # We need this check to detect 4.6.1 or above.
6392     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6393         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools/InstallationFolder"
6394         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6395             altest=$regvalue
6396             return
6397         fi
6398     done
6400     for x in `ls /proc/registry32/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft\ SDKs/Windows`; do
6401         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools/InstallationFolder"
6402         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6403             altest=$regvalue
6404             return
6405         fi
6406     done
6409 find_dotnetsdk46()
6411     unset frametest
6413     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6; do
6414         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder"
6415         if test -n "$regvalue"; then
6416             frametest=$regvalue
6417             return
6418         fi
6419     done
6422 find_winsdk_version()
6424     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6425     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6427     unset winsdktest winsdkbinsubdir winsdklibsubdir
6429     case "$1" in
6430     8.0|8.0A)
6431         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
6432         if test -n "$regvalue"; then
6433             winsdktest=$regvalue
6434             winsdklibsubdir=win8
6435             return
6436         fi
6437         ;;
6438     8.1|8.1A)
6439         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot81"
6440         if test -n "$regvalue"; then
6441             winsdktest=$regvalue
6442             winsdklibsubdir=winv6.3
6443             return
6444         fi
6445         ;;
6446     10.0)
6447         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/InstallationFolder"
6448         if test -n "$regvalue"; then
6449             winsdktest=$regvalue
6450             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion"
6451             if test -n "$regvalue"; then
6452                 winsdkbinsubdir="$regvalue".0
6453                 winsdklibsubdir=$winsdkbinsubdir
6454                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6455                 local tmppath_unix=$(cygpath -u "$tmppath")
6456                 # test exist the SDK path
6457                 if test -d "$tmppath_unix"; then
6458                    # when path is convertible to a short path then path is okay
6459                    cygpath -d "$tmppath" >/dev/null 2>&1
6460                    if test $? -ne 0; then
6461                       AC_MSG_ERROR([Windows SDK doesn't have a 8.3 name, see NtfsDisable8dot3NameCreation])
6462                    fi
6463                 else
6464                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6465                 fi
6466             fi
6467             return
6468         fi
6469         ;;
6470     esac
6473 find_winsdk()
6475     # Return value: From find_winsdk_version
6477     unset winsdktest
6479     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6480         find_winsdk_version $ver
6481         if test -n "$winsdktest"; then
6482             return
6483         fi
6484     done
6487 find_msms()
6489     # Return value: $msmdir
6491     AC_MSG_CHECKING([for MSVC merge modules directory])
6492     local my_msm_files
6493     local my_msm_dir
6495     dnl Order my_msm_files in increasing order. Then check the directories returned
6496     dnl by ls in an inner loop; assuming they are also ordered in increasing order,
6497     dnl the result will be the highest MSM version found in the highest directory.
6499     case "$VCVER" in
6500         16.0 | 17.0)
6501         my_msm_files="Microsoft_VC141_CRT_x86.msm Microsoft_VC142_CRT_x86.msm ${my_msm_files}"
6502         ;;
6503     esac
6504     for f in $my_msm_files; do
6505         echo "$as_me:$LINENO: searching for $f" >&5
6506     done
6508     msmdir=
6509     case "$VCVER" in
6510     16.0 | 17.0)
6511         for f in ${my_msm_files}; do
6512             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6513                 my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6514                 echo "$as_me:$LINENO: looking for $my_msm_dir${f}])" >&5
6515                 if test -e "$my_msm_dir${f}"; then
6516                     msmdir=$my_msm_dir
6517                 fi
6518             done
6519         done
6520         ;;
6521     esac
6523     if test -n "$msmdir"; then
6524         msmdir=`cygpath -m "$msmdir"`
6525         AC_MSG_RESULT([$msmdir])
6526     else
6527         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6528             AC_MSG_FAILURE([not found])
6529         else
6530             AC_MSG_WARN([not found (check config.log)])
6531             add_warning "MSM none of ${my_msm_files} found"
6532         fi
6533     fi
6536 find_msvc_x64_dlls()
6538     # Return value: $msvcdllpath, $msvcdlls
6540     AC_MSG_CHECKING([for MSVC x64 DLL path])
6542     dnl Order crtver in increasing order. Then check the directories returned by
6543     dnl ls in an inner loop; assuming they are also ordered in increasing order,
6544     dnl the result will be the highest CRT version found in the highest directory.
6546     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6547     case "$VCVER" in
6548     16.0 | 17.0)
6549         for crtver in 141 142 143; do
6550             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6551                 echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT" >&5
6552                 if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"; then
6553                     msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"
6554                 fi
6555             done
6556         done
6557         ;;
6558     esac
6559     AC_MSG_RESULT([$msvcdllpath])
6560     AC_MSG_CHECKING([for MSVC x64 DLLs])
6561     msvcdlls="msvcp140.dll vcruntime140.dll"
6562     for dll in $msvcdlls; do
6563         if ! test -f "$msvcdllpath/$dll"; then
6564             AC_MSG_FAILURE([missing $dll])
6565         fi
6566     done
6567     AC_MSG_RESULT([found all ($msvcdlls)])
6570 dnl =========================================
6571 dnl Check for the Windows  SDK.
6572 dnl =========================================
6573 if test "$_os" = "WINNT"; then
6574     AC_MSG_CHECKING([for Windows SDK])
6575     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6576         find_winsdk
6577         WINDOWS_SDK_HOME=$winsdktest
6579         # normalize if found
6580         if test -n "$WINDOWS_SDK_HOME"; then
6581             WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
6582             WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
6583         fi
6585         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6586     fi
6588     if test -n "$WINDOWS_SDK_HOME"; then
6589         # Remove a possible trailing backslash
6590         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6592         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6593              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6594              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6595             have_windows_sdk_headers=yes
6596         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6597              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6598              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6599             have_windows_sdk_headers=yes
6600         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6601              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6602              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6603             have_windows_sdk_headers=yes
6604         else
6605             have_windows_sdk_headers=no
6606         fi
6608         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6609             have_windows_sdk_libs=yes
6610         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6611             have_windows_sdk_libs=yes
6612         else
6613             have_windows_sdk_libs=no
6614         fi
6616         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6617             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6618 the  Windows SDK are installed.])
6619         fi
6620     fi
6622     if test -z "$WINDOWS_SDK_HOME"; then
6623         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6624     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6625         WINDOWS_SDK_VERSION=80
6626         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6627     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6628         WINDOWS_SDK_VERSION=81
6629         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6630     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6631         WINDOWS_SDK_VERSION=10
6632         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6633     else
6634         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6635     fi
6636     PathFormat "$WINDOWS_SDK_HOME"
6637     WINDOWS_SDK_HOME="$formatted_path"
6638     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6639     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6640         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6641         if test -d "$WINDOWS_SDK_HOME/include/um"; then
6642             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6643         elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then
6644             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6645         fi
6646     fi
6648     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6649     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6650     dnl but not in v8.0), so allow this to be overridden with a
6651     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6652     dnl and configuration error if no WiLangId.vbs is found would arguably be
6653     dnl better, but I do not know under which conditions exactly it is needed by
6654     dnl msiglobal.pm:
6655     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6656         WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6657         WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6658         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6659             WINDOWS_SDK_WILANGID="${WINDOWS_SDK_HOME}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6660             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6661         fi
6662         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6663             WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6664             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6665         fi
6666         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6667             WINDOWS_SDK_WILANGID=$(cygpath -sm "C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs")
6668             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6669         fi
6670     fi
6671     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6672         if test -n "$with_package_format" -a "$with_package_format" != no; then
6673             for i in "$with_package_format"; do
6674                 if test "$i" = "msi"; then
6675                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6676                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6677                     fi
6678                 fi
6679             done
6680         fi
6681     fi
6683 AC_SUBST(WINDOWS_SDK_HOME)
6684 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6685 AC_SUBST(WINDOWS_SDK_VERSION)
6686 AC_SUBST(WINDOWS_SDK_WILANGID)
6688 if test "$build_os" = "cygwin"; then
6689     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6690     dnl dir, it also determines that dir's path w/o an arch segment if any,
6691     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6692     AC_MSG_CHECKING([for midl.exe])
6694     find_winsdk
6695     if test -n "$winsdkbinsubdir" \
6696         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6697     then
6698         MIDL_PATH=$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6699         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin/$winsdkbinsubdir
6700     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6701         MIDL_PATH=$winsdktest/Bin/$WIN_BUILD_ARCH
6702         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6703     elif test -f "$winsdktest/Bin/midl.exe"; then
6704         MIDL_PATH=$winsdktest/Bin
6705         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6706     fi
6707     if test ! -f "$MIDL_PATH/midl.exe"; then
6708         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6709     else
6710         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6711     fi
6713     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6714     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6716     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6717          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6718          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6719          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6720     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6721          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6722          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6723          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
6724     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
6725          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
6726          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6727          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
6728     else
6729         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
6730     fi
6732     dnl Check csc.exe
6733     AC_MSG_CHECKING([for csc.exe])
6734     find_csc
6735     if test -f "$csctest/csc.exe"; then
6736         CSC_PATH="$csctest"
6737     fi
6738     if test ! -f "$CSC_PATH/csc.exe"; then
6739         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
6740     else
6741         AC_MSG_RESULT([$CSC_PATH/csc.exe])
6742     fi
6744     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
6746     dnl Check al.exe
6747     AC_MSG_CHECKING([for al.exe])
6748     find_winsdk
6749     if test -n "$winsdkbinsubdir" \
6750         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
6751     then
6752         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
6753     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/al.exe"; then
6754         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
6755     elif test -f "$winsdktest/Bin/al.exe"; then
6756         AL_PATH="$winsdktest/Bin"
6757     fi
6759     if test -z "$AL_PATH"; then
6760         find_al
6761         if test -f "$altest/bin/al.exe"; then
6762             AL_PATH="$altest/bin"
6763         elif test -f "$altest/al.exe"; then
6764             AL_PATH="$altest"
6765         fi
6766     fi
6767     if test ! -f "$AL_PATH/al.exe"; then
6768         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
6769     else
6770         AC_MSG_RESULT([$AL_PATH/al.exe])
6771     fi
6773     AL_PATH=`win_short_path_for_make "$AL_PATH"`
6775     dnl Check mscoree.lib / .NET Framework dir
6776     AC_MSG_CHECKING(.NET Framework)
6777     find_dotnetsdk46
6778     PathFormat "$frametest"
6779     frametest="$formatted_path"
6780     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6781         DOTNET_FRAMEWORK_HOME="$frametest"
6782     else
6783         find_winsdk
6784         if test -f "$winsdktest/lib/mscoree.lib" -o -f "$winsdktest/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6785             DOTNET_FRAMEWORK_HOME="$winsdktest"
6786         fi
6787     fi
6788     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
6789         AC_MSG_ERROR([mscoree.lib not found])
6790     fi
6791     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
6793     PathFormat "$MIDL_PATH"
6794     MIDL_PATH="$formatted_path"
6796     PathFormat "$AL_PATH"
6797     AL_PATH="$formatted_path"
6799     PathFormat "$DOTNET_FRAMEWORK_HOME"
6800     DOTNET_FRAMEWORK_HOME="$formatted_path"
6802     PathFormat "$CSC_PATH"
6803     CSC_PATH="$formatted_path"
6806 dnl ===================================================================
6807 dnl Testing for C++ compiler and version...
6808 dnl ===================================================================
6810 if test "$_os" != "WINNT"; then
6811     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that
6812     save_CXXFLAGS=$CXXFLAGS
6813     AC_PROG_CXX
6814     CXXFLAGS=$save_CXXFLAGS
6815     if test -z "$CXX_BASE"; then
6816         CXX_BASE=`first_arg_basename "$CXX"`
6817     fi
6820 dnl check for GNU C++ compiler version
6821 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
6822     AC_MSG_CHECKING([the GNU C++ compiler version])
6824     _gpp_version=`$CXX -dumpversion`
6825     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
6827     if test "$_gpp_majmin" -lt "700"; then
6828         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
6829     else
6830         AC_MSG_RESULT([ok (g++ $_gpp_version)])
6831     fi
6833     dnl see https://code.google.com/p/android/issues/detail?id=41770
6834         glibcxx_threads=no
6835         AC_LANG_PUSH([C++])
6836         AC_REQUIRE_CPP
6837         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
6838         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
6839             #include <bits/c++config.h>]],[[
6840             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
6841             && !defined(_GLIBCXX__PTHREADS) \
6842             && !defined(_GLIBCXX_HAS_GTHREADS)
6843             choke me
6844             #endif
6845         ]])],[AC_MSG_RESULT([yes])
6846         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
6847         AC_LANG_POP([C++])
6848         if test $glibcxx_threads = yes; then
6849             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
6850         fi
6852 AC_SUBST(BOOST_CXXFLAGS)
6855 # prefx CXX with ccache if needed
6857 if test "$CCACHE" != ""; then
6858     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
6859     AC_LANG_PUSH([C++])
6860     save_CXXFLAGS=$CXXFLAGS
6861     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
6862     # msvc does not fail on unknown options, check stdout
6863     if test "$COM" = MSC; then
6864         CXXFLAGS="$CXXFLAGS -nologo"
6865     fi
6866     save_ac_cxx_werror_flag=$ac_cxx_werror_flag
6867     ac_cxx_werror_flag=yes
6868     dnl an empty program will do, we're checking the compiler flags
6869     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
6870                       [use_ccache=yes], [use_ccache=no])
6871     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
6872         AC_MSG_RESULT([yes])
6873     else
6874         CXX="$CCACHE $CXX"
6875         CXX_BASE="ccache $CXX_BASE"
6876         AC_MSG_RESULT([no])
6877     fi
6878     CXXFLAGS=$save_CXXFLAGS
6879     ac_cxx_werror_flag=$save_ac_cxx_werror_flag
6880     AC_LANG_POP([C++])
6883 dnl ===================================================================
6884 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
6885 dnl ===================================================================
6887 if test "$_os" != "WINNT"; then
6888     AC_PROG_CXXCPP
6890     dnl Check whether there's a C pre-processor.
6891     AC_PROG_CPP
6895 dnl ===================================================================
6896 dnl Find integral type sizes and alignments
6897 dnl ===================================================================
6899 if test "$_os" != "WINNT"; then
6901     AC_CHECK_SIZEOF(long)
6902     AC_CHECK_SIZEOF(short)
6903     AC_CHECK_SIZEOF(int)
6904     AC_CHECK_SIZEOF(long long)
6905     AC_CHECK_SIZEOF(double)
6906     AC_CHECK_SIZEOF(void*)
6907     AC_CHECK_SIZEOF(size_t)
6909     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
6910     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
6911     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
6912     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
6913     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
6914     SIZEOF_SIZE_T=$ac_cv_sizeof_size_t
6916     dnl Allow build without AC_CHECK_ALIGNOF, grrr
6917     m4_pattern_allow([AC_CHECK_ALIGNOF])
6918     m4_ifdef([AC_CHECK_ALIGNOF],
6919         [
6920             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
6921             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
6922             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
6923             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
6924         ],
6925         [
6926             case "$_os-$host_cpu" in
6927             Linux-i686)
6928                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6929                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6930                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
6931                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
6932                 ;;
6933             Linux-x86_64)
6934                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6935                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6936                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
6937                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
6938                 ;;
6939             *)
6940                 if test -z "$ac_cv_alignof_short" -o \
6941                         -z "$ac_cv_alignof_int" -o \
6942                         -z "$ac_cv_alignof_long" -o \
6943                         -z "$ac_cv_alignof_double"; then
6944                    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.])
6945                 fi
6946                 ;;
6947             esac
6948         ])
6950     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
6951     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
6952     if test $ac_cv_sizeof_long -eq 8; then
6953         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
6954     elif test $ac_cv_sizeof_double -eq 8; then
6955         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
6956     else
6957         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
6958     fi
6960     dnl Check for large file support
6961     AC_SYS_LARGEFILE
6962     if test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
6963         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
6964     fi
6965     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
6966         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
6967     fi
6968 else
6969     # Hardcode for MSVC
6970     SAL_TYPES_SIZEOFSHORT=2
6971     SAL_TYPES_SIZEOFINT=4
6972     SAL_TYPES_SIZEOFLONG=4
6973     SAL_TYPES_SIZEOFLONGLONG=8
6974     if test $WIN_HOST_BITS -eq 32; then
6975         SAL_TYPES_SIZEOFPOINTER=4
6976         SIZEOF_SIZE_T=4
6977     else
6978         SAL_TYPES_SIZEOFPOINTER=8
6979         SIZEOF_SIZE_T=8
6980     fi
6981     SAL_TYPES_ALIGNMENT2=2
6982     SAL_TYPES_ALIGNMENT4=4
6983     SAL_TYPES_ALIGNMENT8=8
6984     LFS_CFLAGS=''
6986 AC_SUBST(LFS_CFLAGS)
6987 AC_SUBST(SIZEOF_SIZE_T)
6989 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
6990 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
6991 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
6992 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
6993 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
6994 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
6995 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
6996 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
6998 dnl ===================================================================
6999 dnl Check whether to enable runtime optimizations
7000 dnl ===================================================================
7001 ENABLE_RUNTIME_OPTIMIZATIONS=
7002 AC_MSG_CHECKING([whether to enable runtime optimizations])
7003 if test -z "$enable_runtime_optimizations"; then
7004     for i in $CC; do
7005         case $i in
7006         -fsanitize=*)
7007             enable_runtime_optimizations=no
7008             break
7009             ;;
7010         esac
7011     done
7013 if test "$enable_runtime_optimizations" != no; then
7014     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
7015     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
7016     AC_MSG_RESULT([yes])
7017 else
7018     AC_MSG_RESULT([no])
7020 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
7022 dnl ===================================================================
7023 dnl Check if valgrind headers are available
7024 dnl ===================================================================
7025 ENABLE_VALGRIND=
7026 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
7027     prev_cppflags=$CPPFLAGS
7028     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
7029     # or where does it come from?
7030     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
7031     AC_CHECK_HEADER([valgrind/valgrind.h],
7032         [ENABLE_VALGRIND=TRUE])
7033     CPPFLAGS=$prev_cppflags
7035 AC_SUBST([ENABLE_VALGRIND])
7036 if test -z "$ENABLE_VALGRIND"; then
7037     if test "$with_valgrind" = yes; then
7038         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
7039     fi
7040     VALGRIND_CFLAGS=
7042 AC_SUBST([VALGRIND_CFLAGS])
7045 dnl ===================================================================
7046 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
7047 dnl ===================================================================
7049 # We need at least the sys/sdt.h include header.
7050 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
7051 if test "$SDT_H_FOUND" = "TRUE"; then
7052     # Found sys/sdt.h header, now make sure the c++ compiler works.
7053     # Old g++ versions had problems with probes in constructors/destructors.
7054     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
7055     AC_LANG_PUSH([C++])
7056     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
7057     #include <sys/sdt.h>
7058     class ProbeClass
7059     {
7060     private:
7061       int& ref;
7062       const char *name;
7064     public:
7065       ProbeClass(int& v, const char *n) : ref(v), name(n)
7066       {
7067         DTRACE_PROBE2(_test_, cons, name, ref);
7068       }
7070       void method(int min)
7071       {
7072         DTRACE_PROBE3(_test_, meth, name, ref, min);
7073         ref -= min;
7074       }
7076       ~ProbeClass()
7077       {
7078         DTRACE_PROBE2(_test_, dest, name, ref);
7079       }
7080     };
7081     ]],[[
7082     int i = 64;
7083     DTRACE_PROBE1(_test_, call, i);
7084     ProbeClass inst = ProbeClass(i, "call");
7085     inst.method(24);
7086     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
7087           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
7088     AC_LANG_POP([C++])
7090 AC_CONFIG_HEADERS([config_host/config_probes.h])
7092 dnl ===================================================================
7093 dnl GCC features
7094 dnl ===================================================================
7095 HAVE_GCC_STACK_CLASH_PROTECTION=
7096 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7097     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
7098     save_CFLAGS=$CFLAGS
7099     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
7100     AC_LINK_IFELSE(
7101         [AC_LANG_PROGRAM(, [[return 0;]])],
7102         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
7103         [AC_MSG_RESULT([no])])
7104     CFLAGS=$save_CFLAGS
7106     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
7107     save_CFLAGS=$CFLAGS
7108     CFLAGS="$CFLAGS -Werror -mno-avx"
7109     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
7110     CFLAGS=$save_CFLAGS
7111     if test "$HAVE_GCC_AVX" = "TRUE"; then
7112         AC_MSG_RESULT([yes])
7113     else
7114         AC_MSG_RESULT([no])
7115     fi
7117     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
7118     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7119     int v = 0;
7120     if (__sync_add_and_fetch(&v, 1) != 1 ||
7121         __sync_sub_and_fetch(&v, 1) != 0)
7122         return 1;
7123     __sync_synchronize();
7124     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
7125         v != 1)
7126         return 1;
7127     return 0;
7128 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
7129     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
7130         AC_MSG_RESULT([yes])
7131         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
7132     else
7133         AC_MSG_RESULT([no])
7134     fi
7136     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
7137     AC_LANG_PUSH([C++])
7138     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7139             #include <cstddef>
7140             #include <cxxabi.h>
7141             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
7142         ])], [
7143             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
7144             AC_MSG_RESULT([yes])
7145         ], [AC_MSG_RESULT([no])])
7146     AC_LANG_POP([C++])
7148     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
7149     AC_LANG_PUSH([C++])
7150     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7151             #include <cstddef>
7152             #include <cxxabi.h>
7153             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7154         ])], [
7155             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7156             AC_MSG_RESULT([yes])
7157         ], [AC_MSG_RESULT([no])])
7158     AC_LANG_POP([C++])
7160     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7161     AC_LANG_PUSH([C++])
7162     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7163             #include <cxxabi.h>
7164             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7165         ])], [
7166             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7167             AC_MSG_RESULT([yes])
7168         ], [AC_MSG_RESULT([no])])
7169     AC_LANG_POP([C++])
7171     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7172     AC_LANG_PUSH([C++])
7173     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7174             #include <cstddef>
7175             #include <cxxabi.h>
7176             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7177         ])], [
7178             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7179             AC_MSG_RESULT([yes])
7180         ], [AC_MSG_RESULT([no])])
7181     AC_LANG_POP([C++])
7183     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7184     AC_LANG_PUSH([C++])
7185     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7186             #include <cstddef>
7187             #include <cxxabi.h>
7188             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7189         ])], [
7190             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7191             AC_MSG_RESULT([yes])
7192         ], [AC_MSG_RESULT([no])])
7193     AC_LANG_POP([C++])
7195     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7196     AC_LANG_PUSH([C++])
7197     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7198             #include <cxxabi.h>
7199             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7200         ])], [
7201             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7202             AC_MSG_RESULT([yes])
7203         ], [AC_MSG_RESULT([no])])
7204     AC_LANG_POP([C++])
7206     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7207     AC_LANG_PUSH([C++])
7208     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7209             #include <cxxabi.h>
7210             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7211         ])], [
7212             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7213             AC_MSG_RESULT([yes])
7214         ], [AC_MSG_RESULT([no])])
7215     AC_LANG_POP([C++])
7217     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7218     AC_LANG_PUSH([C++])
7219     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7220             #include <cxxabi.h>
7221             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7222         ])], [
7223             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7224             AC_MSG_RESULT([yes])
7225         ], [AC_MSG_RESULT([no])])
7226     AC_LANG_POP([C++])
7228     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info in cxxabi.h])
7229     AC_LANG_PUSH([C++])
7230     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7231             #include <cstddef>
7232             #include <cxxabi.h>
7233             std::size_t f() { return sizeof(__cxxabiv1::__si_class_type_info); }
7234         ])], [
7235             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7236             AC_MSG_RESULT([yes])
7237         ], [AC_MSG_RESULT([no])])
7238     AC_LANG_POP([C++])
7240     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7241     AC_LANG_PUSH([C++])
7242     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7243             #include <cstddef>
7244             #include <cxxabi.h>
7245             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7246         ])], [
7247             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7248             AC_MSG_RESULT([yes])
7249         ], [AC_MSG_RESULT([no])])
7250     AC_LANG_POP([C++])
7253 AC_SUBST(HAVE_GCC_AVX)
7254 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7255 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7257 dnl ===================================================================
7258 dnl Identify the C++ library
7259 dnl ===================================================================
7261 AC_MSG_CHECKING([what the C++ library is])
7262 HAVE_LIBSTDCPP=
7263 AC_LANG_PUSH([C++])
7264 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7265 #include <utility>
7266 #ifndef __GLIBCXX__
7267 foo bar
7268 #endif
7269 ]])],
7270     [CPP_LIBRARY=GLIBCXX
7271      cpp_library_name="GNU libstdc++"
7272      HAVE_LIBSTDCPP=TRUE
7273     ],
7274     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7275 #include <utility>
7276 #ifndef _LIBCPP_VERSION
7277 foo bar
7278 #endif
7279 ]])],
7280     [CPP_LIBRARY=LIBCPP
7281      cpp_library_name="LLVM libc++"
7282      AC_DEFINE([HAVE_LIBCXX])
7283     ],
7284     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7285 #include <utility>
7286 #ifndef _MSC_VER
7287 foo bar
7288 #endif
7289 ]])],
7290     [CPP_LIBRARY=MSVCRT
7291      cpp_library_name="Microsoft"
7292     ],
7293     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7294 AC_MSG_RESULT([$cpp_library_name])
7295 AC_LANG_POP([C++])
7296 AC_SUBST([HAVE_LIBSTDCPP])
7298 dnl ===================================================================
7299 dnl Check for gperf
7300 dnl ===================================================================
7301 AC_PATH_PROG(GPERF, gperf)
7302 if test -z "$GPERF"; then
7303     AC_MSG_ERROR([gperf not found but needed. Install it.])
7305 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7306     GPERF=`cygpath -m $GPERF`
7308 AC_MSG_CHECKING([whether gperf is new enough])
7309 my_gperf_ver1=$($GPERF --version | head -n 1)
7310 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7311 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7312 if test "$my_gperf_ver3" -ge 301; then
7313     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7314 else
7315     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7317 AC_SUBST(GPERF)
7319 dnl ===================================================================
7320 dnl Check for system libcmis
7321 dnl ===================================================================
7322 # libcmis requires curl and we can't build curl for iOS
7323 if test "$test_cmis" = "yes" -a "$enable_cmis" = "yes"; then
7324     libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.5 >= 0.5.2])
7325     ENABLE_LIBCMIS=TRUE
7326 else
7327     ENABLE_LIBCMIS=
7329 AC_SUBST(ENABLE_LIBCMIS)
7331 dnl ===================================================================
7332 dnl C++11
7333 dnl ===================================================================
7335 AC_MSG_CHECKING([whether $CXX_BASE supports C++17])
7336 CXXFLAGS_CXX11=
7337 if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7338     if test "$with_latest_c__" = yes; then
7339         CXXFLAGS_CXX11=-std:c++latest
7340     else
7341         CXXFLAGS_CXX11=-std:c++17
7342     fi
7343     CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus"
7344 elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7345     my_flags='-std=c++17 -std=c++1z'
7346     if test "$with_latest_c__" = yes; then
7347         my_flags="-std=c++23 -std=c++2b -std=c++20 -std=c++2a $my_flags"
7348     fi
7349     for flag in $my_flags; do
7350         if test "$COM" = MSC; then
7351             flag="-Xclang $flag"
7352         fi
7353         save_CXXFLAGS=$CXXFLAGS
7354         CXXFLAGS="$CXXFLAGS $flag -Werror"
7355         if test "$SYSTEM_LIBCMIS" = TRUE; then
7356             CXXFLAGS="$CXXFLAGS -DSYSTEM_LIBCMIS $LIBCMIS_CFLAGS"
7357         fi
7358         AC_LANG_PUSH([C++])
7359         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7360             #include <algorithm>
7361             #include <functional>
7362             #include <vector>
7364             #if defined SYSTEM_LIBCMIS
7365             // See ucb/source/ucp/cmis/auth_provider.hxx:
7366             #if !defined __clang__
7367             #pragma GCC diagnostic push
7368             #pragma GCC diagnostic ignored "-Wdeprecated"
7369             #pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
7370             #endif
7371             #include <libcmis/libcmis.hxx>
7372             #if !defined __clang__
7373             #pragma GCC diagnostic pop
7374             #endif
7375             #endif
7377             void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7378                 std::sort(v.begin(), v.end(), fn);
7379             }
7380             ]])],[CXXFLAGS_CXX11=$flag])
7381         AC_LANG_POP([C++])
7382         CXXFLAGS=$save_CXXFLAGS
7383         if test -n "$CXXFLAGS_CXX11"; then
7384             break
7385         fi
7386     done
7388 if test -n "$CXXFLAGS_CXX11"; then
7389     AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7390 else
7391     AC_MSG_ERROR(no)
7393 AC_SUBST(CXXFLAGS_CXX11)
7395 if test "$GCC" = "yes"; then
7396     save_CXXFLAGS=$CXXFLAGS
7397     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7398     CHECK_L_ATOMIC
7399     CXXFLAGS=$save_CXXFLAGS
7400     AC_SUBST(ATOMIC_LIB)
7403 dnl Test for temporarily incompatible libstdc++ 4.7.{0,1}, where
7404 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=179528> introduced
7405 dnl an additional member _M_size into C++11 std::list towards 4.7.0 and
7406 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=189186> removed it
7407 dnl again towards 4.7.2:
7408 if test $CPP_LIBRARY = GLIBCXX; then
7409     AC_MSG_CHECKING([whether using C++11 causes libstdc++ 4.7.0/4.7.1 ABI breakage])
7410     AC_LANG_PUSH([C++])
7411     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7412 #include <list>
7413 #if !defined __GLIBCXX__ || (__GLIBCXX__ != 20120322 && __GLIBCXX__ != 20120614)
7414     // according to <https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html>:
7415     //   GCC 4.7.0: 20120322
7416     //   GCC 4.7.1: 20120614
7417     // and using a range check is not possible as the mapping between
7418     // __GLIBCXX__ values and GCC versions is not monotonic
7419 /* ok */
7420 #else
7421 abi broken
7422 #endif
7423         ]])], [AC_MSG_RESULT(no, ok)],
7424         [AC_MSG_ERROR(yes)])
7425     AC_LANG_POP([C++])
7428 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7429 save_CXXFLAGS=$CXXFLAGS
7430 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7431 AC_LANG_PUSH([C++])
7433 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7434 #include <stddef.h>
7436 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7438 namespace
7440         struct b
7441         {
7442                 int i;
7443                 int j;
7444         };
7446 ]], [[
7447 struct a
7449         int i;
7450         int j;
7452 a thinga[]={{0,0}, {1,1}};
7453 b thingb[]={{0,0}, {1,1}};
7454 size_t i = sizeof(sal_n_array_size(thinga));
7455 size_t j = sizeof(sal_n_array_size(thingb));
7456 return !(i != 0 && j != 0);
7458     ], [ AC_MSG_RESULT(yes) ],
7459     [ AC_MSG_ERROR(no)])
7460 AC_LANG_POP([C++])
7461 CXXFLAGS=$save_CXXFLAGS
7463 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7464 if test "$GCC" = yes; then
7465     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7466     AC_LANG_PUSH([C++])
7467     save_CXXFLAGS=$CXXFLAGS
7468     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7469     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7470     CXXFLAGS=$save_CXXFLAGS
7471     AC_LANG_POP([C++])
7472     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7473         AC_MSG_RESULT([yes])
7474     else
7475         AC_MSG_RESULT([no])
7476     fi
7478 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7480 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7481 AC_LANG_PUSH([C++])
7482 save_CXXFLAGS=$CXXFLAGS
7483 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7484 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7485         #include <algorithm>
7486         #include <initializer_list>
7487         #include <vector>
7488         template<typename T> class S {
7489         private:
7490             std::vector<T> v_;
7491         public:
7492             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7493         };
7494         constinit S<int> s{3, 2, 1};
7495     ])], [
7496         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7497         AC_MSG_RESULT([yes])
7498     ], [AC_MSG_RESULT([no])])
7499 CXXFLAGS=$save_CXXFLAGS
7500 AC_LANG_POP([C++])
7502 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a <span> with unsigned size_type])
7503 AC_LANG_PUSH([C++])
7504 save_CXXFLAGS=$CXXFLAGS
7505 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7506 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7507         #include <span>
7508         #include <type_traits>
7509         // Don't check size_type directly, as it was called index_type before P1872R0:
7510         void f(std::span<int> s) { static_assert(std::is_unsigned_v<decltype(s.size())>); };
7511     ])], [
7512         AC_DEFINE([HAVE_CPP_SPAN],[1])
7513         AC_MSG_RESULT([yes])
7514     ], [AC_MSG_RESULT([no])])
7515 CXXFLAGS=$save_CXXFLAGS
7516 AC_LANG_POP([C++])
7518 AC_MSG_CHECKING([whether $CXX_BASE implements C++ DR P1155R3])
7519 AC_LANG_PUSH([C++])
7520 save_CXXFLAGS=$CXXFLAGS
7521 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7522 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7523         struct S1 { S1(S1 &&); };
7524         struct S2: S1 {};
7525         S1 f(S2 s) { return s; }
7526     ])], [
7527         AC_DEFINE([HAVE_P1155R3],[1])
7528         AC_MSG_RESULT([yes])
7529     ], [AC_MSG_RESULT([no])])
7530 CXXFLAGS=$save_CXXFLAGS
7531 AC_LANG_POP([C++])
7533 AC_MSG_CHECKING([whether $CXX_BASE supports C++20 std::atomic_ref])
7534 HAVE_CXX20_ATOMIC_REF=
7535 AC_LANG_PUSH([C++])
7536 save_CXXFLAGS=$CXXFLAGS
7537 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7538 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7539         #include <atomic>
7540         int x;
7541         std::atomic_ref<int> y(x);
7542     ])], [
7543         HAVE_CXX20_ATOMIC_REF=TRUE
7544         AC_MSG_RESULT([yes])
7545     ], [AC_MSG_RESULT([no])])
7546 CXXFLAGS=$save_CXXFLAGS
7547 AC_LANG_POP([C++])
7548 AC_SUBST([HAVE_CXX20_ATOMIC_REF])
7550 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7551 dnl which is included in -Wextra anyway):
7552 HAVE_WDEPRECATED_COPY_DTOR=
7553 if test "$GCC" = yes; then
7554     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7555     AC_LANG_PUSH([C++])
7556     save_CXXFLAGS=$CXXFLAGS
7557     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7558     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7559             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7560             AC_MSG_RESULT([yes])
7561         ], [AC_MSG_RESULT([no])])
7562     CXXFLAGS=$save_CXXFLAGS
7563     AC_LANG_POP([C++])
7565 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7567 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7568 dnl uninitialized warning for code like
7570 dnl   OString f();
7571 dnl   boost::optional<OString> * g(bool b) {
7572 dnl       boost::optional<OString> o;
7573 dnl       if (b) o = f();
7574 dnl       return new boost::optional<OString>(o);
7575 dnl   }
7577 dnl (as is e.g. present, in a slightly more elaborate form, in
7578 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7579 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7580 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7581 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7582     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7583     AC_LANG_PUSH([C++])
7584     save_CXXFLAGS=$CXXFLAGS
7585     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7586     if test "$ENABLE_OPTIMIZED" = TRUE; then
7587         CXXFLAGS="$CXXFLAGS -O2"
7588     else
7589         CXXFLAGS="$CXXFLAGS -O0"
7590     fi
7591     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7592             #include <new>
7593             void f1(int);
7594             struct S1 {
7595                 ~S1() { f1(n); }
7596                 int n = 0;
7597             };
7598             struct S2 {
7599                 S2() {}
7600                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7601                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7602                 void set(S1 s) {
7603                     new (stg) S1(s);
7604                     init = true;
7605                 }
7606                 bool init = false;
7607                 char stg[sizeof (S1)];
7608             } ;
7609             S1 f2();
7610             S2 * f3(bool b) {
7611                 S2 o;
7612                 if (b) o.set(f2());
7613                 return new S2(o);
7614             }
7615         ]])], [AC_MSG_RESULT([no])], [
7616             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7617             AC_MSG_RESULT([yes])
7618         ])
7619     CXXFLAGS=$save_CXXFLAGS
7620     AC_LANG_POP([C++])
7622 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7624 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7625 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7626 dnl hits us e.g. with GCC 10 and --enable-optimized at
7628 dnl   In file included from include/rtl/string.hxx:49,
7629 dnl                    from include/rtl/ustring.hxx:43,
7630 dnl                    from include/osl/file.hxx:35,
7631 dnl                    from include/codemaker/global.hxx:28,
7632 dnl                    from include/codemaker/options.hxx:23,
7633 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7634 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7635 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,
7636 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,
7637 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,
7638 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7639 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7640 dnl      78 |         memcpy( buffer, data, length );
7641 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7642 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7643 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7644     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7645     AC_LANG_PUSH([C++])
7646     save_CXXFLAGS=$CXXFLAGS
7647     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7648     if test "$ENABLE_OPTIMIZED" = TRUE; then
7649         CXXFLAGS="$CXXFLAGS -O2"
7650     else
7651         CXXFLAGS="$CXXFLAGS -O0"
7652     fi
7653     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7654     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7655             void fill(char const * begin, char const * end, char c);
7656             struct q {
7657                 char ids[4];
7658                 char username[6];
7659             };
7660             void test(q & c) {
7661                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
7662                 __builtin_strncpy(c.username, "root", sizeof(c.username));
7663             }
7664         ]])], [AC_MSG_RESULT([no])], [
7665             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
7666             AC_MSG_RESULT([yes])
7667         ])
7668     CXXFLAGS=$save_CXXFLAGS
7669     AC_LANG_POP([C++])
7671 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
7673 HAVE_DLLEXPORTINLINES=
7674 dnl At least for Clang 14 trunk, -Zc:dllexportInlines- would cause lots of unresolved symbols when
7675 dnl linking e.g. Library_cppuhelper, for whatever reason:
7676 if test "$_os" = "WINNT" && test "$COM_IS_CLANG" != TRUE; then
7677     AC_MSG_CHECKING([whether $CXX_BASE supports -Zc:dllexportInlines-])
7678     AC_LANG_PUSH([C++])
7679     save_CXXFLAGS=$CXXFLAGS
7680     CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
7681     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7682             HAVE_DLLEXPORTINLINES=TRUE
7683             AC_MSG_RESULT([yes])
7684         ], [AC_MSG_RESULT([no])])
7685     CXXFLAGS=$save_CXXFLAGS
7686     AC_LANG_POP([C++])
7688 AC_SUBST([HAVE_DLLEXPORTINLINES])
7690 dnl ===================================================================
7691 dnl CPU Intrinsics support - SSE, AVX
7692 dnl ===================================================================
7694 CXXFLAGS_INTRINSICS_SSE2=
7695 CXXFLAGS_INTRINSICS_SSSE3=
7696 CXXFLAGS_INTRINSICS_SSE41=
7697 CXXFLAGS_INTRINSICS_SSE42=
7698 CXXFLAGS_INTRINSICS_AVX=
7699 CXXFLAGS_INTRINSICS_AVX2=
7700 CXXFLAGS_INTRINSICS_AVX512=
7701 CXXFLAGS_INTRINSICS_AVX512F=
7702 CXXFLAGS_INTRINSICS_F16C=
7703 CXXFLAGS_INTRINSICS_FMA=
7705 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7706     # GCC, Clang or Clang-cl (clang-cl + MSVC's -arch options don't work well together)
7707     flag_sse2=-msse2
7708     flag_ssse3=-mssse3
7709     flag_sse41=-msse4.1
7710     flag_sse42=-msse4.2
7711     flag_avx=-mavx
7712     flag_avx2=-mavx2
7713     flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
7714     flag_avx512f=-mavx512f
7715     flag_f16c=-mf16c
7716     flag_fma=-mfma
7717 else
7718     # With MSVC using -arch is in fact not necessary for being able
7719     # to use CPU intrinsics, code using AVX512F intrinsics will compile
7720     # even if compiled with -arch:AVX, the -arch option really only affects
7721     # instructions generated for C/C++ code.
7722     # So use the matching same (or lower) -arch options, but only in order
7723     # to generate the best matching instructions for the C++ code surrounding
7724     # the intrinsics.
7725     # SSE2 is the default for x86/x64, so no need to specify the option.
7726     flag_sse2=
7727     # No specific options for these, use the next lower.
7728     flag_ssse3="$flag_sse2"
7729     flag_sse41="$flag_sse2"
7730     flag_sse42="$flag_sse2"
7731     flag_avx=-arch:AVX
7732     flag_avx2=-arch:AVX2
7733     flag_avx512=-arch:AVX512
7734     # Using -arch:AVX512 would enable more than just AVX512F, so use only AVX2.
7735     flag_avx512f=-arch:AVX2
7736     # No MSVC options for these.
7737     flag_f16c="$flag_sse2"
7738     flag_fma="$flag_sse2"
7741 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
7742 AC_LANG_PUSH([C++])
7743 save_CXXFLAGS=$CXXFLAGS
7744 CXXFLAGS="$CXXFLAGS $flag_sse2"
7745 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7746     #include <emmintrin.h>
7747     int main () {
7748         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7749         c = _mm_xor_si128 (a, b);
7750         return 0;
7751     }
7752     ])],
7753     [can_compile_sse2=yes],
7754     [can_compile_sse2=no])
7755 AC_LANG_POP([C++])
7756 CXXFLAGS=$save_CXXFLAGS
7757 AC_MSG_RESULT([${can_compile_sse2}])
7758 if test "${can_compile_sse2}" = "yes" ; then
7759     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
7762 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
7763 AC_LANG_PUSH([C++])
7764 save_CXXFLAGS=$CXXFLAGS
7765 CXXFLAGS="$CXXFLAGS $flag_ssse3"
7766 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7767     #include <tmmintrin.h>
7768     int main () {
7769         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7770         c = _mm_maddubs_epi16 (a, b);
7771         return 0;
7772     }
7773     ])],
7774     [can_compile_ssse3=yes],
7775     [can_compile_ssse3=no])
7776 AC_LANG_POP([C++])
7777 CXXFLAGS=$save_CXXFLAGS
7778 AC_MSG_RESULT([${can_compile_ssse3}])
7779 if test "${can_compile_ssse3}" = "yes" ; then
7780     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
7783 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
7784 AC_LANG_PUSH([C++])
7785 save_CXXFLAGS=$CXXFLAGS
7786 CXXFLAGS="$CXXFLAGS $flag_sse41"
7787 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7788     #include <smmintrin.h>
7789     int main () {
7790         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7791         c = _mm_cmpeq_epi64 (a, b);
7792         return 0;
7793     }
7794     ])],
7795     [can_compile_sse41=yes],
7796     [can_compile_sse41=no])
7797 AC_LANG_POP([C++])
7798 CXXFLAGS=$save_CXXFLAGS
7799 AC_MSG_RESULT([${can_compile_sse41}])
7800 if test "${can_compile_sse41}" = "yes" ; then
7801     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
7804 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
7805 AC_LANG_PUSH([C++])
7806 save_CXXFLAGS=$CXXFLAGS
7807 CXXFLAGS="$CXXFLAGS $flag_sse42"
7808 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7809     #include <nmmintrin.h>
7810     int main () {
7811         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7812         c = _mm_cmpgt_epi64 (a, b);
7813         return 0;
7814     }
7815     ])],
7816     [can_compile_sse42=yes],
7817     [can_compile_sse42=no])
7818 AC_LANG_POP([C++])
7819 CXXFLAGS=$save_CXXFLAGS
7820 AC_MSG_RESULT([${can_compile_sse42}])
7821 if test "${can_compile_sse42}" = "yes" ; then
7822     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
7825 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
7826 AC_LANG_PUSH([C++])
7827 save_CXXFLAGS=$CXXFLAGS
7828 CXXFLAGS="$CXXFLAGS $flag_avx"
7829 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7830     #include <immintrin.h>
7831     int main () {
7832         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
7833         c = _mm256_xor_ps(a, b);
7834         return 0;
7835     }
7836     ])],
7837     [can_compile_avx=yes],
7838     [can_compile_avx=no])
7839 AC_LANG_POP([C++])
7840 CXXFLAGS=$save_CXXFLAGS
7841 AC_MSG_RESULT([${can_compile_avx}])
7842 if test "${can_compile_avx}" = "yes" ; then
7843     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
7846 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
7847 AC_LANG_PUSH([C++])
7848 save_CXXFLAGS=$CXXFLAGS
7849 CXXFLAGS="$CXXFLAGS $flag_avx2"
7850 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7851     #include <immintrin.h>
7852     int main () {
7853         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
7854         c = _mm256_maddubs_epi16(a, b);
7855         return 0;
7856     }
7857     ])],
7858     [can_compile_avx2=yes],
7859     [can_compile_avx2=no])
7860 AC_LANG_POP([C++])
7861 CXXFLAGS=$save_CXXFLAGS
7862 AC_MSG_RESULT([${can_compile_avx2}])
7863 if test "${can_compile_avx2}" = "yes" ; then
7864     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
7867 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
7868 AC_LANG_PUSH([C++])
7869 save_CXXFLAGS=$CXXFLAGS
7870 CXXFLAGS="$CXXFLAGS $flag_avx512"
7871 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7872     #include <immintrin.h>
7873     int main () {
7874         __m512i a = _mm512_loadu_si512(0);
7875         __m512d v1 = _mm512_load_pd(0);
7876         // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
7877         __m512d v2 = _mm512_abs_pd(v1);
7878         return 0;
7879     }
7880     ])],
7881     [can_compile_avx512=yes],
7882     [can_compile_avx512=no])
7883 AC_LANG_POP([C++])
7884 CXXFLAGS=$save_CXXFLAGS
7885 AC_MSG_RESULT([${can_compile_avx512}])
7886 if test "${can_compile_avx512}" = "yes" ; then
7887     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
7888     CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
7891 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
7892 AC_LANG_PUSH([C++])
7893 save_CXXFLAGS=$CXXFLAGS
7894 CXXFLAGS="$CXXFLAGS $flag_f16c"
7895 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7896     #include <immintrin.h>
7897     int main () {
7898         __m128i a = _mm_set1_epi32 (0);
7899         __m128 c;
7900         c = _mm_cvtph_ps(a);
7901         return 0;
7902     }
7903     ])],
7904     [can_compile_f16c=yes],
7905     [can_compile_f16c=no])
7906 AC_LANG_POP([C++])
7907 CXXFLAGS=$save_CXXFLAGS
7908 AC_MSG_RESULT([${can_compile_f16c}])
7909 if test "${can_compile_f16c}" = "yes" ; then
7910     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
7913 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
7914 AC_LANG_PUSH([C++])
7915 save_CXXFLAGS=$CXXFLAGS
7916 CXXFLAGS="$CXXFLAGS $flag_fma"
7917 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7918     #include <immintrin.h>
7919     int main () {
7920         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
7921         d = _mm256_fmadd_ps(a, b, c);
7922         return 0;
7923     }
7924     ])],
7925     [can_compile_fma=yes],
7926     [can_compile_fma=no])
7927 AC_LANG_POP([C++])
7928 CXXFLAGS=$save_CXXFLAGS
7929 AC_MSG_RESULT([${can_compile_fma}])
7930 if test "${can_compile_fma}" = "yes" ; then
7931     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
7934 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
7935 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
7936 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
7937 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
7938 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
7939 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
7940 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
7941 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512F])
7942 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
7943 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
7945 dnl ===================================================================
7946 dnl system stl sanity tests
7947 dnl ===================================================================
7948 if test "$_os" != "WINNT"; then
7950     AC_LANG_PUSH([C++])
7952     save_CPPFLAGS="$CPPFLAGS"
7953     if test -n "$MACOSX_SDK_PATH"; then
7954         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
7955     fi
7957     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
7958     # only.
7959     if test "$CPP_LIBRARY" = GLIBCXX; then
7960         dnl gcc#19664, gcc#22482, rhbz#162935
7961         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
7962         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
7963         AC_MSG_RESULT([$stlvisok])
7964         if test "$stlvisok" = "no"; then
7965             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
7966         fi
7967     fi
7969     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
7970     # when we don't make any dynamic libraries?
7971     if test "$DISABLE_DYNLOADING" = ""; then
7972         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
7973         cat > conftestlib1.cc <<_ACEOF
7974 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7975 struct S2: S1<int> { virtual ~S2(); };
7976 S2::~S2() {}
7977 _ACEOF
7978         cat > conftestlib2.cc <<_ACEOF
7979 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7980 struct S2: S1<int> { virtual ~S2(); };
7981 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
7982 _ACEOF
7983         gccvisinlineshiddenok=yes
7984         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
7985             gccvisinlineshiddenok=no
7986         else
7987             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
7988             dnl known to not work with -z defs (unsetting which makes the test
7989             dnl moot, though):
7990             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
7991             if test "$COM_IS_CLANG" = TRUE; then
7992                 for i in $CXX $CXXFLAGS; do
7993                     case $i in
7994                     -fsanitize=*)
7995                         my_linkflagsnoundefs=
7996                         break
7997                         ;;
7998                     esac
7999                 done
8000             fi
8001             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
8002                 gccvisinlineshiddenok=no
8003             fi
8004         fi
8006         rm -fr libconftest*
8007         AC_MSG_RESULT([$gccvisinlineshiddenok])
8008         if test "$gccvisinlineshiddenok" = "no"; then
8009             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
8010         fi
8011     fi
8013    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
8014     cat >visibility.cxx <<_ACEOF
8015 #pragma GCC visibility push(hidden)
8016 struct __attribute__ ((visibility ("default"))) TestStruct {
8017   static void Init();
8019 __attribute__ ((visibility ("default"))) void TestFunc() {
8020   TestStruct::Init();
8022 _ACEOF
8023     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
8024         gccvisbroken=yes
8025     else
8026         case "$host_cpu" in
8027         i?86|x86_64)
8028             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
8029                 gccvisbroken=no
8030             else
8031                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
8032                     gccvisbroken=no
8033                 else
8034                     gccvisbroken=yes
8035                 fi
8036             fi
8037             ;;
8038         *)
8039             gccvisbroken=no
8040             ;;
8041         esac
8042     fi
8043     rm -f visibility.s visibility.cxx
8045     AC_MSG_RESULT([$gccvisbroken])
8046     if test "$gccvisbroken" = "yes"; then
8047         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
8048     fi
8050     CPPFLAGS="$save_CPPFLAGS"
8052     AC_MSG_CHECKING([if CET endbranch is recognized])
8053 cat > endbr.s <<_ACEOF
8054 endbr32
8055 _ACEOF
8056     HAVE_ASM_END_BRANCH_INS_SUPPORT=
8057     if $CXX -c endbr.s -o endbr.o >/dev/null 2>&5; then
8058         AC_MSG_RESULT([yes])
8059         HAVE_ASM_END_BRANCH_INS_SUPPORT=TRUE
8060     else
8061         AC_MSG_RESULT([no])
8062     fi
8063     rm -f endbr.s endbr.o
8064     AC_SUBST(HAVE_ASM_END_BRANCH_INS_SUPPORT)
8066     AC_LANG_POP([C++])
8069 dnl ===================================================================
8070 dnl  Clang++ tests
8071 dnl ===================================================================
8073 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
8074 if test "$GCC" = "yes"; then
8075     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
8076     AC_LANG_PUSH([C++])
8077     save_CXXFLAGS=$CXXFLAGS
8078     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
8079     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
8080     CXXFLAGS=$save_CXXFLAGS
8081     AC_LANG_POP([C++])
8082     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
8083         AC_MSG_RESULT([yes])
8084     else
8085         AC_MSG_RESULT([no])
8086     fi
8088 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
8090 dnl ===================================================================
8091 dnl Compiler plugins
8092 dnl ===================================================================
8094 COMPILER_PLUGINS=
8095 # currently only Clang
8097 if test "$COM_IS_CLANG" != "TRUE"; then
8098     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
8099         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
8100         enable_compiler_plugins=no
8101     fi
8104 COMPILER_PLUGINS_COM_IS_CLANG=
8105 if test "$COM_IS_CLANG" = "TRUE"; then
8106     if test -n "$enable_compiler_plugins"; then
8107         compiler_plugins="$enable_compiler_plugins"
8108     elif test -n "$ENABLE_DBGUTIL"; then
8109         compiler_plugins=test
8110     else
8111         compiler_plugins=no
8112     fi
8113     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
8114         if test "$CLANGVER" -lt 50002; then
8115             if test "$compiler_plugins" = yes; then
8116                 AC_MSG_ERROR([Clang $CLANGVER is too old to build compiler plugins; need >= 5.0.2.])
8117             else
8118                 compiler_plugins=no
8119             fi
8120         fi
8121     fi
8122     if test "$compiler_plugins" != "no"; then
8123         dnl The prefix where Clang resides, override to where Clang resides if
8124         dnl using a source build:
8125         if test -z "$CLANGDIR"; then
8126             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
8127         fi
8128         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
8129         if test -z "$COMPILER_PLUGINS_CXX"; then
8130             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
8131         fi
8132         clangbindir=$CLANGDIR/bin
8133         if test "$build_os" = "cygwin"; then
8134             clangbindir=$(cygpath -u "$clangbindir")
8135         fi
8136         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
8137         if test -n "$LLVM_CONFIG"; then
8138             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
8139             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
8140             if test -z "$CLANGLIBDIR"; then
8141                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
8142             fi
8143             # Try if clang is built from source (in which case its includes are not together with llvm includes).
8144             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
8145             clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
8146             if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
8147                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
8148             fi
8149             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
8150             clangobjdir=$($LLVM_CONFIG --obj-root)
8151             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
8152                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
8153             fi
8154         fi
8155         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
8156         AC_LANG_PUSH([C++])
8157         save_CXX=$CXX
8158         save_CXXCPP=$CXXCPP
8159         save_CPPFLAGS=$CPPFLAGS
8160         save_CXXFLAGS=$CXXFLAGS
8161         save_LDFLAGS=$LDFLAGS
8162         save_LIBS=$LIBS
8163         CXX=$COMPILER_PLUGINS_CXX
8164         CXXCPP="$COMPILER_PLUGINS_CXX -E"
8165         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8166         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8167         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
8168             [COMPILER_PLUGINS=TRUE],
8169             [
8170             if test "$compiler_plugins" = "yes"; then
8171                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
8172             else
8173                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
8174                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
8175             fi
8176             ])
8177         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8178         dnl comment in compilerplugins/Makefile-clang.mk:
8179         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8180             LDFLAGS=""
8181             AC_MSG_CHECKING([for clang libraries to use])
8182             if test -z "$CLANGTOOLLIBS"; then
8183                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8184  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8185                 AC_LINK_IFELSE([
8186                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8187                         [[ clang::FullSourceLoc().dump(); ]])
8188                 ],[CLANGTOOLLIBS="$LIBS"],[])
8189             fi
8190             if test -z "$CLANGTOOLLIBS"; then
8191                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8192                 AC_LINK_IFELSE([
8193                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8194                         [[ clang::FullSourceLoc().dump(); ]])
8195                 ],[CLANGTOOLLIBS="$LIBS"],[])
8196             fi
8197             AC_MSG_RESULT([$CLANGTOOLLIBS])
8198             if test -z "$CLANGTOOLLIBS"; then
8199                 if test "$compiler_plugins" = "yes"; then
8200                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8201                 else
8202                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8203                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8204                 fi
8205                 COMPILER_PLUGINS=
8206             fi
8207             if test -n "$COMPILER_PLUGINS"; then
8208                 if test -z "$CLANGSYSINCLUDE"; then
8209                     if test -n "$LLVM_CONFIG"; then
8210                         # Path to the clang system headers (no idea if there's a better way to get it).
8211                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8212                     fi
8213                 fi
8214             fi
8215         fi
8216         CXX=$save_CXX
8217         CXXCPP=$save_CXXCPP
8218         CPPFLAGS=$save_CPPFLAGS
8219         CXXFLAGS=$save_CXXFLAGS
8220         LDFLAGS=$save_LDFLAGS
8221         LIBS="$save_LIBS"
8222         AC_LANG_POP([C++])
8224         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8225         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8226             #ifndef __clang__
8227             you lose
8228             #endif
8229             int foo=42;
8230             ]])],
8231             [AC_MSG_RESULT([yes])
8232              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8233             [AC_MSG_RESULT([no])])
8234         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8235     fi
8236 else
8237     if test "$enable_compiler_plugins" = "yes"; then
8238         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8239     fi
8241 COMPILER_PLUGINS_ANALYZER_PCH=
8242 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8243     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8245 AC_SUBST(COMPILER_PLUGINS)
8246 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8247 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8248 AC_SUBST(COMPILER_PLUGINS_CXX)
8249 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8250 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8251 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8252 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8253 AC_SUBST(CLANGDIR)
8254 AC_SUBST(CLANGLIBDIR)
8255 AC_SUBST(CLANGTOOLLIBS)
8256 AC_SUBST(CLANGSYSINCLUDE)
8258 # Plugin to help linker.
8259 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8260 # This makes --enable-lto build with clang work.
8261 AC_SUBST(LD_PLUGIN)
8263 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8264 AC_SUBST(HAVE_POSIX_FALLOCATE)
8266 JITC_PROCESSOR_TYPE=""
8267 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8268     # IBMs JDK needs this...
8269     JITC_PROCESSOR_TYPE=6
8270     export JITC_PROCESSOR_TYPE
8272 AC_SUBST([JITC_PROCESSOR_TYPE])
8274 # Misc Windows Stuff
8275 AC_ARG_WITH(ucrt-dir,
8276     AS_HELP_STRING([--with-ucrt-dir],
8277         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8278         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8279         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8280             Windows6.1-KB2999226-x64.msu
8281             Windows6.1-KB2999226-x86.msu
8282             Windows8.1-KB2999226-x64.msu
8283             Windows8.1-KB2999226-x86.msu
8284             Windows8-RT-KB2999226-x64.msu
8285             Windows8-RT-KB2999226-x86.msu
8286         A zip archive including those files is available from Microsoft site:
8287         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8290 UCRT_REDISTDIR="$with_ucrt_dir"
8291 if test $_os = "WINNT"; then
8292     find_msvc_x64_dlls
8293     for i in $PKGFORMAT; do
8294         if test "$i" = msi; then
8295             find_msms
8296             break
8297         fi
8298     done
8299     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8300     MSVC_DLLS="$msvcdlls"
8301     test -n "$msmdir" && MSM_PATH=`win_short_path_for_make "$msmdir"`
8302     # MSVC 15.3 changed it to VC141
8303     if echo "$msvcdllpath" | grep -q "VC143.CRT$"; then
8304         SCPDEFS="$SCPDEFS -DWITH_VC143_REDIST"
8305     elif echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8306         SCPDEFS="$SCPDEFS -DWITH_VC142_REDIST"
8307     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8308         SCPDEFS="$SCPDEFS -DWITH_VC141_REDIST"
8309     else
8310         SCPDEFS="$SCPDEFS -DWITH_VC${VCVER}_REDIST"
8311     fi
8313     if test "$UCRT_REDISTDIR" = "no"; then
8314         dnl explicitly disabled
8315         UCRT_REDISTDIR=""
8316     else
8317         if ! test -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x64.msu" -a \
8318                   -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x86.msu" -a \
8319                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x64.msu" -a \
8320                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x86.msu" -a \
8321                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x64.msu" -a \
8322                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x86.msu"; then
8323             UCRT_REDISTDIR=""
8324             if test -n "$PKGFORMAT"; then
8325                for i in $PKGFORMAT; do
8326                    case "$i" in
8327                    msi)
8328                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8329                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8330                        ;;
8331                    esac
8332                done
8333             fi
8334         fi
8335     fi
8338 AC_SUBST(UCRT_REDISTDIR)
8339 AC_SUBST(MSVC_DLL_PATH)
8340 AC_SUBST(MSVC_DLLS)
8341 AC_SUBST(MSM_PATH)
8344 dnl ===================================================================
8345 dnl Checks for Java
8346 dnl ===================================================================
8347 if test "$ENABLE_JAVA" != ""; then
8349     # Windows-specific tests
8350     if test "$build_os" = "cygwin"; then
8351         if test -z "$with_jdk_home"; then
8352             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8353             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8354             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/CurrentVersion"
8355             if test -n "$regvalue"; then
8356                 ver=$regvalue
8357                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver/JavaHome"
8358                 with_jdk_home=$regvalue
8359             fi
8360             howfound="found automatically"
8361         else
8362             with_jdk_home=`win_short_path_for_make "$with_jdk_home"`
8363             howfound="you passed"
8364         fi
8366         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8367             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])
8368         fi
8369     fi
8371     # 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.
8372     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8373     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8374         with_jdk_home=`/usr/libexec/java_home`
8375     fi
8377     JAVA_HOME=; export JAVA_HOME
8378     if test -z "$with_jdk_home"; then
8379         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8380     else
8381         _java_path="$with_jdk_home/bin/$with_java"
8382         dnl Check if there is a Java interpreter at all.
8383         if test -x "$_java_path"; then
8384             JAVAINTERPRETER=$_java_path
8385         else
8386             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8387         fi
8388     fi
8390     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8391     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8392     dnl loaded by java to run JunitTests:
8393     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8394         shortjdkhome=`cygpath -d "$with_jdk_home"`
8395         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
8396             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8397             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8398         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
8399             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8400             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8401         fi
8403         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8404             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8405         fi
8406         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8407     elif test "$cross_compiling" != "yes"; then
8408         case $CPUNAME in
8409             AARCH64|AXP|X86_64|HPPA|IA64|POWERPC64|S390X|SPARC64|GODSON64)
8410                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8411                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8412                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8413                 fi
8414                 ;;
8415             *) # assumption: everything else 32-bit
8416                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8417                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8418                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8419                 fi
8420                 ;;
8421         esac
8422     fi
8425 dnl ===================================================================
8426 dnl Checks for JDK.
8427 dnl ===================================================================
8429 # Whether all the complexity here actually is needed any more or not, no idea.
8431 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8432     _gij_longver=0
8433     AC_MSG_CHECKING([the installed JDK])
8434     if test -n "$JAVAINTERPRETER"; then
8435         dnl java -version sends output to stderr!
8436         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8437             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8438         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8439             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8440         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8441             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8442         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8443             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8444         else
8445             JDK=sun
8447             dnl Sun JDK specific tests
8448             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8449             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8451             if test "$_jdk_ver" -lt 10900; then
8452                 AC_MSG_ERROR([JDK is too old, you need at least 9 ($_jdk_ver < 10900)])
8453             fi
8454             if test "$_jdk_ver" -gt 10900; then
8455                 JAVA_CLASSPATH_NOT_SET=TRUE
8456             fi
8458             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8459             if test "$_os" = "WINNT"; then
8460                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8461             fi
8462             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8464             # set to limit VM usage for JunitTests
8465             JAVAIFLAGS=-Xmx64M
8466             # set to limit VM usage for javac
8467             JAVACFLAGS=-J-Xmx128M
8468         fi
8469     else
8470         AC_MSG_ERROR([Java not found. You need at least JDK 9])
8471     fi
8472 else
8473     if test -z "$ENABLE_JAVA"; then
8474         dnl Java disabled
8475         JAVA_HOME=
8476         export JAVA_HOME
8477     elif test "$cross_compiling" = "yes"; then
8478         # Just assume compatibility of build and host JDK
8479         JDK=$JDK_FOR_BUILD
8480         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8481     fi
8484 dnl ===================================================================
8485 dnl Checks for javac
8486 dnl ===================================================================
8487 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8488     javacompiler="javac"
8489     : ${JAVA_SOURCE_VER=8}
8490     : ${JAVA_TARGET_VER=8}
8491     if test -z "$with_jdk_home"; then
8492         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8493     else
8494         _javac_path="$with_jdk_home/bin/$javacompiler"
8495         dnl Check if there is a Java compiler at all.
8496         if test -x "$_javac_path"; then
8497             JAVACOMPILER=$_javac_path
8498         fi
8499     fi
8500     if test -z "$JAVACOMPILER"; then
8501         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8502     fi
8503     if test "$build_os" = "cygwin"; then
8504         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8505             JAVACOMPILER="${JAVACOMPILER}.exe"
8506         fi
8507         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8508     fi
8511 dnl ===================================================================
8512 dnl Checks for javadoc
8513 dnl ===================================================================
8514 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8515     if test -z "$with_jdk_home"; then
8516         AC_PATH_PROG(JAVADOC, javadoc)
8517     else
8518         _javadoc_path="$with_jdk_home/bin/javadoc"
8519         dnl Check if there is a javadoc at all.
8520         if test -x "$_javadoc_path"; then
8521             JAVADOC=$_javadoc_path
8522         else
8523             AC_PATH_PROG(JAVADOC, javadoc)
8524         fi
8525     fi
8526     if test -z "$JAVADOC"; then
8527         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8528     fi
8529     if test "$build_os" = "cygwin"; then
8530         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8531             JAVADOC="${JAVADOC}.exe"
8532         fi
8533         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8534     fi
8536     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8537     JAVADOCISGJDOC="yes"
8538     fi
8540 AC_SUBST(JAVADOC)
8541 AC_SUBST(JAVADOCISGJDOC)
8543 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8544     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8545     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8546         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8547            # try to recover first by looking whether we have an alternative
8548            # system as in Debian or newer SuSEs where following /usr/bin/javac
8549            # over /etc/alternatives/javac leads to the right bindir where we
8550            # just need to strip a bit away to get a valid JAVA_HOME
8551            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8552         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8553             # maybe only one level of symlink (e.g. on Mac)
8554             JAVA_HOME=$(readlink $JAVACOMPILER)
8555             if test "$(dirname $JAVA_HOME)" = "."; then
8556                 # we've got no path to trim back
8557                 JAVA_HOME=""
8558             fi
8559         else
8560             # else warn
8561             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8562             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8563             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8564             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8565         fi
8566         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8567         if test "$JAVA_HOME" != "/usr"; then
8568             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8569                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8570                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8571                 dnl Tiger already returns a JDK path...
8572                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8573             else
8574                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8575                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8576                 dnl that checks which version to run
8577                 if test -f "$JAVA_HOME"; then
8578                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8579                 fi
8580             fi
8581         fi
8582     fi
8583     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8585     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8586     if test -z "$JAVA_HOME"; then
8587         if test "x$with_jdk_home" = "x"; then
8588             cat > findhome.java <<_ACEOF
8589 [import java.io.File;
8591 class findhome
8593     public static void main(String args[])
8594     {
8595         String jrelocation = System.getProperty("java.home");
8596         File jre = new File(jrelocation);
8597         System.out.println(jre.getParent());
8598     }
8600 _ACEOF
8601             AC_MSG_CHECKING([if javac works])
8602             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8603             AC_TRY_EVAL(javac_cmd)
8604             if test $? = 0 -a -f ./findhome.class; then
8605                 AC_MSG_RESULT([javac works])
8606             else
8607                 echo "configure: javac test failed" >&5
8608                 cat findhome.java >&5
8609                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8610             fi
8611             AC_MSG_CHECKING([if gij knows its java.home])
8612             JAVA_HOME=`$JAVAINTERPRETER findhome`
8613             if test $? = 0 -a "$JAVA_HOME" != ""; then
8614                 AC_MSG_RESULT([$JAVA_HOME])
8615             else
8616                 echo "configure: java test failed" >&5
8617                 cat findhome.java >&5
8618                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8619             fi
8620             # clean-up after ourselves
8621             rm -f ./findhome.java ./findhome.class
8622         else
8623             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8624         fi
8625     fi
8627     # now check if $JAVA_HOME is really valid
8628     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8629         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8630             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8631             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8632             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
8633             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
8634             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
8635             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
8636         fi
8637     fi
8638     PathFormat "$JAVA_HOME"
8639     JAVA_HOME="$formatted_path"
8642 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
8643     "$_os" != Darwin
8644 then
8645     AC_MSG_CHECKING([for JAWT lib])
8646     if test "$_os" = WINNT; then
8647         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
8648         JAWTLIB=jawt.lib
8649     else
8650         case "$host_cpu" in
8651         arm*)
8652             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
8653             JAVA_ARCH=$my_java_arch
8654             ;;
8655         i*86)
8656             my_java_arch=i386
8657             ;;
8658         m68k)
8659             my_java_arch=m68k
8660             ;;
8661         powerpc)
8662             my_java_arch=ppc
8663             ;;
8664         powerpc64)
8665             my_java_arch=ppc64
8666             ;;
8667         powerpc64le)
8668             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
8669             JAVA_ARCH=$my_java_arch
8670             ;;
8671         sparc64)
8672             my_java_arch=sparcv9
8673             ;;
8674         x86_64)
8675             my_java_arch=amd64
8676             ;;
8677         *)
8678             my_java_arch=$host_cpu
8679             ;;
8680         esac
8681         # This is where JDK9 puts the library
8682         if test -e "$JAVA_HOME/lib/libjawt.so"; then
8683             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
8684         else
8685             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
8686         fi
8687         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
8688     fi
8689     AC_MSG_RESULT([$JAWTLIB])
8691 AC_SUBST(JAWTLIB)
8693 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
8694     case "$host_os" in
8696     aix*)
8697         JAVAINC="-I$JAVA_HOME/include"
8698         JAVAINC="$JAVAINC -I$JAVA_HOME/include/aix"
8699         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8700         ;;
8702     cygwin*|wsl*)
8703         JAVAINC="-I$JAVA_HOME/include/win32"
8704         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
8705         ;;
8707     darwin*|macos*)
8708         if test -d "$JAVA_HOME/include/darwin"; then
8709             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
8710         else
8711             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
8712         fi
8713         ;;
8715     dragonfly*)
8716         JAVAINC="-I$JAVA_HOME/include"
8717         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8718         ;;
8720     freebsd*)
8721         JAVAINC="-I$JAVA_HOME/include"
8722         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
8723         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
8724         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8725         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8726         ;;
8728     k*bsd*-gnu*)
8729         JAVAINC="-I$JAVA_HOME/include"
8730         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8731         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8732         ;;
8734     linux-gnu*)
8735         JAVAINC="-I$JAVA_HOME/include"
8736         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8737         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8738         ;;
8740     *netbsd*)
8741         JAVAINC="-I$JAVA_HOME/include"
8742         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
8743         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8744        ;;
8746     openbsd*)
8747         JAVAINC="-I$JAVA_HOME/include"
8748         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
8749         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8750         ;;
8752     solaris*)
8753         JAVAINC="-I$JAVA_HOME/include"
8754         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
8755         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8756         ;;
8757     esac
8759 SOLARINC="$SOLARINC $JAVAINC"
8761 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8762     JAVA_HOME_FOR_BUILD=$JAVA_HOME
8763     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
8764     JDK_FOR_BUILD=$JDK
8767 AC_SUBST(JAVACFLAGS)
8768 AC_SUBST(JAVACOMPILER)
8769 AC_SUBST(JAVAINTERPRETER)
8770 AC_SUBST(JAVAIFLAGS)
8771 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
8772 AC_SUBST(JAVA_CLASSPATH_NOT_SET)
8773 AC_SUBST(JAVA_HOME)
8774 AC_SUBST(JAVA_HOME_FOR_BUILD)
8775 AC_SUBST(JDK)
8776 AC_SUBST(JDK_FOR_BUILD)
8777 AC_SUBST(JAVA_SOURCE_VER)
8778 AC_SUBST(JAVA_TARGET_VER)
8781 dnl ===================================================================
8782 dnl Export file validation
8783 dnl ===================================================================
8784 AC_MSG_CHECKING([whether to enable export file validation])
8785 if test "$with_export_validation" != "no"; then
8786     if test -z "$ENABLE_JAVA"; then
8787         if test "$with_export_validation" = "yes"; then
8788             AC_MSG_ERROR([requested, but Java is disabled])
8789         else
8790             AC_MSG_RESULT([no, as Java is disabled])
8791         fi
8792     elif ! test -d "${SRC_ROOT}/schema"; then
8793         if test "$with_export_validation" = "yes"; then
8794             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
8795         else
8796             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
8797         fi
8798     else
8799         AC_MSG_RESULT([yes])
8800         AC_DEFINE(HAVE_EXPORT_VALIDATION)
8802         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
8803         if test -z "$ODFVALIDATOR"; then
8804             # remember to download the ODF toolkit with validator later
8805             AC_MSG_NOTICE([no odfvalidator found, will download it])
8806             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
8807             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
8809             # and fetch name of odfvalidator jar name from download.lst
8810             ODFVALIDATOR_JAR=`$SED -n -e "s/export *ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8811             AC_SUBST(ODFVALIDATOR_JAR)
8813             if test -z "$ODFVALIDATOR_JAR"; then
8814                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
8815             fi
8816         fi
8817         if test "$build_os" = "cygwin"; then
8818             # In case of Cygwin it will be executed from Windows,
8819             # so we need to run bash and absolute path to validator
8820             # so instead of "odfvalidator" it will be
8821             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8822             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
8823         else
8824             ODFVALIDATOR="sh $ODFVALIDATOR"
8825         fi
8826         AC_SUBST(ODFVALIDATOR)
8829         AC_PATH_PROGS(OFFICEOTRON, officeotron)
8830         if test -z "$OFFICEOTRON"; then
8831             # remember to download the officeotron with validator later
8832             AC_MSG_NOTICE([no officeotron found, will download it])
8833             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
8834             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
8836             # and fetch name of officeotron jar name from download.lst
8837             OFFICEOTRON_JAR=`$SED -n -e "s/export *OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8838             AC_SUBST(OFFICEOTRON_JAR)
8840             if test -z "$OFFICEOTRON_JAR"; then
8841                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
8842             fi
8843         else
8844             # check version of existing officeotron
8845             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
8846             if test 0"$OFFICEOTRON_VER" -lt 704; then
8847                 AC_MSG_ERROR([officeotron too old])
8848             fi
8849         fi
8850         if test "$build_os" = "cygwin"; then
8851             # In case of Cygwin it will be executed from Windows,
8852             # so we need to run bash and absolute path to validator
8853             # so instead of "odfvalidator" it will be
8854             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8855             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
8856         else
8857             OFFICEOTRON="sh $OFFICEOTRON"
8858         fi
8859     fi
8860     AC_SUBST(OFFICEOTRON)
8861 else
8862     AC_MSG_RESULT([no])
8865 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
8866 if test "$with_bffvalidator" != "no"; then
8867     AC_DEFINE(HAVE_BFFVALIDATOR)
8869     if test "$with_export_validation" = "no"; then
8870         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
8871     fi
8873     if test "$with_bffvalidator" = "yes"; then
8874         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
8875     else
8876         BFFVALIDATOR="$with_bffvalidator"
8877     fi
8879     if test "$build_os" = "cygwin"; then
8880         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
8881             AC_MSG_RESULT($BFFVALIDATOR)
8882         else
8883             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8884         fi
8885     elif test -n "$BFFVALIDATOR"; then
8886         # We are not in Cygwin but need to run Windows binary with wine
8887         AC_PATH_PROGS(WINE, wine)
8889         # so swap in a shell wrapper that converts paths transparently
8890         BFFVALIDATOR_EXE="$BFFVALIDATOR"
8891         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
8892         AC_SUBST(BFFVALIDATOR_EXE)
8893         AC_MSG_RESULT($BFFVALIDATOR)
8894     else
8895         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8896     fi
8897     AC_SUBST(BFFVALIDATOR)
8898 else
8899     AC_MSG_RESULT([no])
8902 dnl ===================================================================
8903 dnl Check for C preprocessor to use
8904 dnl ===================================================================
8905 AC_MSG_CHECKING([which C preprocessor to use in idlc])
8906 SYSTEM_UCPP_IS_GCC=
8907 if test -n "$with_idlc_cpp"; then
8908     AC_MSG_RESULT([$with_idlc_cpp])
8909     AC_PATH_PROG(SYSTEM_UCPP, $with_idlc_cpp)
8910     AC_MSG_CHECKING([if $with_idlc_cpp is GCC CPP])
8911     # ucpp will accept -v (to output version), warn about the others as unknown
8912     # and return 1 (due to -v)
8913     # gcc will accept -v (as verbose), --version (to output version) and -nostdinc
8914     # and return 0 (due to --version ) if all options are supported
8915     $SYSTEM_UCPP -v --version -nostdinc >/dev/null 2>/dev/null
8916     if test $? -eq 0;  then
8917         SYSTEM_UCPP_IS_GCC=TRUE
8918         AC_MSG_RESULT([yes])
8919     else
8920         AC_MSG_RESULT([no])
8921     fi
8922 else
8923     AC_MSG_RESULT([ucpp])
8924     AC_MSG_CHECKING([which ucpp to use])
8925     if test -n "$with_system_ucpp" -a "$with_system_ucpp" != "no"; then
8926         AC_MSG_RESULT([external])
8927         AC_PATH_PROG(SYSTEM_UCPP, ucpp)
8928     else
8929         AC_MSG_RESULT([internal])
8930         BUILD_TYPE="$BUILD_TYPE UCPP"
8931     fi
8933 AC_SUBST(SYSTEM_UCPP)
8934 AC_SUBST(SYSTEM_UCPP_IS_GCC)
8936 dnl ===================================================================
8937 dnl Check for epm (not needed for Windows)
8938 dnl ===================================================================
8939 AC_MSG_CHECKING([whether to enable EPM for packing])
8940 if test "$enable_epm" = "yes"; then
8941     AC_MSG_RESULT([yes])
8942     if test "$_os" != "WINNT"; then
8943         if test $_os = Darwin; then
8944             EPM=internal
8945         elif test -n "$with_epm"; then
8946             EPM=$with_epm
8947         else
8948             AC_PATH_PROG(EPM, epm, no)
8949         fi
8950         if test "$EPM" = "no" -o "$EPM" = "internal"; then
8951             AC_MSG_NOTICE([EPM will be built.])
8952             BUILD_TYPE="$BUILD_TYPE EPM"
8953             EPM=${WORKDIR}/UnpackedTarball/epm/epm
8954         else
8955             # Gentoo has some epm which is something different...
8956             AC_MSG_CHECKING([whether the found epm is the right epm])
8957             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
8958                 AC_MSG_RESULT([yes])
8959             else
8960                 AC_MSG_ERROR([no. Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8961             fi
8962             AC_MSG_CHECKING([epm version])
8963             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
8964             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
8965                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
8966                 AC_MSG_RESULT([OK, >= 3.7])
8967             else
8968                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
8969                 AC_MSG_ERROR([Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8970             fi
8971         fi
8972     fi
8974     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
8975         AC_MSG_CHECKING([for rpm])
8976         for a in "$RPM" rpmbuild rpm; do
8977             $a --usage >/dev/null 2> /dev/null
8978             if test $? -eq 0; then
8979                 RPM=$a
8980                 break
8981             else
8982                 $a --version >/dev/null 2> /dev/null
8983                 if test $? -eq 0; then
8984                     RPM=$a
8985                     break
8986                 fi
8987             fi
8988         done
8989         if test -z "$RPM"; then
8990             AC_MSG_ERROR([not found])
8991         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
8992             RPM_PATH=`which $RPM`
8993             AC_MSG_RESULT([$RPM_PATH])
8994             SCPDEFS="$SCPDEFS -DWITH_RPM"
8995         else
8996             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
8997         fi
8998     fi
8999     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
9000         AC_PATH_PROG(DPKG, dpkg, no)
9001         if test "$DPKG" = "no"; then
9002             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
9003         fi
9004     fi
9005     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
9006        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9007         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
9008             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
9009                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
9010                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
9011                     AC_MSG_RESULT([yes])
9012                 else
9013                     AC_MSG_RESULT([no])
9014                     if echo "$PKGFORMAT" | $GREP -q rpm; then
9015                         _pt="rpm"
9016                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
9017                         add_warning "the rpms will need to be installed with --nodeps"
9018                     else
9019                         _pt="pkg"
9020                     fi
9021                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
9022                     add_warning "the ${_pt}s will not be relocatable"
9023                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
9024                                  relocation will work, you need to patch your epm with the
9025                                  patch in epm/epm-3.7.patch or build with
9026                                  --with-epm=internal which will build a suitable epm])
9027                 fi
9028             fi
9029         fi
9030     fi
9031     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9032         AC_PATH_PROG(PKGMK, pkgmk, no)
9033         if test "$PKGMK" = "no"; then
9034             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
9035         fi
9036     fi
9037     AC_SUBST(RPM)
9038     AC_SUBST(DPKG)
9039     AC_SUBST(PKGMK)
9040 else
9041     for i in $PKGFORMAT; do
9042         case "$i" in
9043         aix | bsd | deb | pkg | rpm | native | portable)
9044             AC_MSG_ERROR(
9045                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
9046             ;;
9047         esac
9048     done
9049     AC_MSG_RESULT([no])
9050     EPM=NO
9052 AC_SUBST(EPM)
9054 ENABLE_LWP=
9055 if test "$enable_lotuswordpro" = "yes"; then
9056     ENABLE_LWP="TRUE"
9058 AC_SUBST(ENABLE_LWP)
9060 dnl ===================================================================
9061 dnl Check for building ODK
9062 dnl ===================================================================
9063 if test "$enable_odk" != yes; then
9064     unset DOXYGEN
9065 else
9066     if test "$with_doxygen" = no; then
9067         AC_MSG_CHECKING([for doxygen])
9068         unset DOXYGEN
9069         AC_MSG_RESULT([no])
9070     else
9071         if test "$with_doxygen" = yes; then
9072             AC_PATH_PROG([DOXYGEN], [doxygen])
9073             if test -z "$DOXYGEN"; then
9074                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
9075             fi
9076             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
9077                 if ! dot -V 2>/dev/null; then
9078                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
9079                 fi
9080             fi
9081         else
9082             AC_MSG_CHECKING([for doxygen])
9083             DOXYGEN=$with_doxygen
9084             AC_MSG_RESULT([$DOXYGEN])
9085         fi
9086         if test -n "$DOXYGEN"; then
9087             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
9088             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
9089             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
9090                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
9091             fi
9092         fi
9093     fi
9095 AC_SUBST([DOXYGEN])
9097 AC_MSG_CHECKING([whether to build the ODK])
9098 if test "$enable_odk" = yes; then
9099     AC_MSG_RESULT([yes])
9100     BUILD_TYPE="$BUILD_TYPE ODK"
9101 else
9102     AC_MSG_RESULT([no])
9105 dnl ===================================================================
9106 dnl Check for system zlib
9107 dnl ===================================================================
9108 if test "$with_system_zlib" = "auto"; then
9109     case "$_os" in
9110     WINNT)
9111         with_system_zlib="$with_system_libs"
9112         ;;
9113     *)
9114         if test "$enable_fuzzers" != "yes"; then
9115             with_system_zlib=yes
9116         else
9117             with_system_zlib=no
9118         fi
9119         ;;
9120     esac
9123 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
9124 dnl and has no pkg-config for it at least on some tinderboxes,
9125 dnl so leaving that out for now
9126 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
9127 AC_MSG_CHECKING([which zlib to use])
9128 if test "$with_system_zlib" = "yes"; then
9129     AC_MSG_RESULT([external])
9130     SYSTEM_ZLIB=TRUE
9131     AC_CHECK_HEADER(zlib.h, [],
9132         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
9133     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
9134         [AC_MSG_ERROR(zlib not found or functional)], [])
9135 else
9136     AC_MSG_RESULT([internal])
9137     SYSTEM_ZLIB=
9138     BUILD_TYPE="$BUILD_TYPE ZLIB"
9139     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
9140     if test "$COM" = "MSC"; then
9141         ZLIB_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/zlib.lib"
9142     else
9143         ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
9144     fi
9146 AC_SUBST(ZLIB_CFLAGS)
9147 AC_SUBST(ZLIB_LIBS)
9148 AC_SUBST(SYSTEM_ZLIB)
9150 dnl ===================================================================
9151 dnl Check for system jpeg
9152 dnl ===================================================================
9153 AC_MSG_CHECKING([which libjpeg to use])
9154 if test "$with_system_jpeg" = "yes"; then
9155     AC_MSG_RESULT([external])
9156     SYSTEM_LIBJPEG=TRUE
9157     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
9158         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
9159     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
9160         [AC_MSG_ERROR(jpeg library not found or functional)], [])
9161 else
9162     SYSTEM_LIBJPEG=
9163     AC_MSG_RESULT([internal, libjpeg-turbo])
9164     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
9166     case "$host_cpu" in
9167     x86_64 | amd64 | i*86 | x86 | ia32)
9168         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
9169         if test -z "$NASM" -a "$build_os" = "cygwin"; then
9170             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
9171                 NASM="$LODE_HOME/opt/bin/nasm"
9172             elif test -x "/opt/lo/bin/nasm"; then
9173                 NASM="/opt/lo/bin/nasm"
9174             fi
9175         fi
9177         if test -n "$NASM"; then
9178             AC_MSG_CHECKING([for object file format of host system])
9179             case "$host_os" in
9180               cygwin* | mingw* | pw32* | wsl*)
9181                 case "$host_cpu" in
9182                   x86_64)
9183                     objfmt='Win64-COFF'
9184                     ;;
9185                   *)
9186                     objfmt='Win32-COFF'
9187                     ;;
9188                 esac
9189               ;;
9190               msdosdjgpp* | go32*)
9191                 objfmt='COFF'
9192               ;;
9193               os2-emx*) # not tested
9194                 objfmt='MSOMF' # obj
9195               ;;
9196               linux*coff* | linux*oldld*)
9197                 objfmt='COFF' # ???
9198               ;;
9199               linux*aout*)
9200                 objfmt='a.out'
9201               ;;
9202               linux*)
9203                 case "$host_cpu" in
9204                   x86_64)
9205                     objfmt='ELF64'
9206                     ;;
9207                   *)
9208                     objfmt='ELF'
9209                     ;;
9210                 esac
9211               ;;
9212               kfreebsd* | freebsd* | netbsd* | openbsd*)
9213                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9214                   objfmt='BSD-a.out'
9215                 else
9216                   case "$host_cpu" in
9217                     x86_64 | amd64)
9218                       objfmt='ELF64'
9219                       ;;
9220                     *)
9221                       objfmt='ELF'
9222                       ;;
9223                   esac
9224                 fi
9225               ;;
9226               solaris* | sunos* | sysv* | sco*)
9227                 case "$host_cpu" in
9228                   x86_64)
9229                     objfmt='ELF64'
9230                     ;;
9231                   *)
9232                     objfmt='ELF'
9233                     ;;
9234                 esac
9235               ;;
9236               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9237                 case "$host_cpu" in
9238                   x86_64)
9239                     objfmt='Mach-O64'
9240                     ;;
9241                   *)
9242                     objfmt='Mach-O'
9243                     ;;
9244                 esac
9245               ;;
9246               *)
9247                 objfmt='ELF ?'
9248               ;;
9249             esac
9251             AC_MSG_RESULT([$objfmt])
9252             if test "$objfmt" = 'ELF ?'; then
9253               objfmt='ELF'
9254               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9255             fi
9257             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9258             case "$objfmt" in
9259               MSOMF)      NAFLAGS='-fobj -DOBJ32 -DPIC';;
9260               Win32-COFF) NAFLAGS='-fwin32 -DWIN32 -DPIC';;
9261               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__ -DPIC';;
9262               COFF)       NAFLAGS='-fcoff -DCOFF -DPIC';;
9263               a.out)      NAFLAGS='-faout -DAOUT -DPIC';;
9264               BSD-a.out)  NAFLAGS='-faoutb -DAOUT -DPIC';;
9265               ELF)        NAFLAGS='-felf -DELF -DPIC';;
9266               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__ -DPIC';;
9267               RDF)        NAFLAGS='-frdf -DRDF -DPIC';;
9268               Mach-O)     NAFLAGS='-fmacho -DMACHO -DPIC';;
9269               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__ -DPIC';;
9270             esac
9271             AC_MSG_RESULT([$NAFLAGS])
9273             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9274             cat > conftest.asm << EOF
9275             [%line __oline__ "configure"
9276                     section .text
9277                     global  _main,main
9278             _main:
9279             main:   xor     eax,eax
9280                     ret
9281             ]
9283             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9284             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9285               AC_MSG_RESULT(yes)
9286             else
9287               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9288               cat conftest.asm >&AS_MESSAGE_LOG_FD
9289               rm -rf conftest*
9290               AC_MSG_RESULT(no)
9291               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9292               NASM=""
9293             fi
9295         fi
9297         if test -z "$NASM"; then
9298 cat << _EOS
9299 ****************************************************************************
9300 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9301 To get one please:
9303 _EOS
9304             if test "$build_os" = "cygwin"; then
9305 cat << _EOS
9306 install a pre-compiled binary for Win32
9308 mkdir -p /opt/lo/bin
9309 cd /opt/lo/bin
9310 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9311 chmod +x nasm
9313 or get and install one from http://www.nasm.us/
9315 Then re-run autogen.sh
9317 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9318 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`which nasm\` finds it.
9320 _EOS
9321             else
9322 cat << _EOS
9323 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md
9325 _EOS
9326             fi
9327             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9328             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9329         fi
9330       ;;
9331     esac
9334 AC_SUBST(NASM)
9335 AC_SUBST(NAFLAGS)
9336 AC_SUBST(LIBJPEG_CFLAGS)
9337 AC_SUBST(LIBJPEG_LIBS)
9338 AC_SUBST(SYSTEM_LIBJPEG)
9340 dnl ===================================================================
9341 dnl Check for system clucene
9342 dnl ===================================================================
9343 dnl we should rather be using
9344 dnl libo_CHECK_SYSTEM_MODULE([clucence],[CLUCENE],[liblucence-core]) here
9345 dnl but the contribs-lib check seems tricky
9346 if test "$enable_xmlhelp" = yes -o "$enable_extension_integration" = yes; then
9347 AC_MSG_CHECKING([which clucene to use])
9348 if test "$with_system_clucene" = "yes"; then
9349     AC_MSG_RESULT([external])
9350     SYSTEM_CLUCENE=TRUE
9351     PKG_CHECK_MODULES(CLUCENE, libclucene-core)
9352     CLUCENE_CFLAGS=[$(printf '%s' "$CLUCENE_CFLAGS" | sed -e 's@-I[^ ]*/CLucene/ext@@' -e "s/-I/${ISYSTEM?}/g")]
9353     FilterLibs "${CLUCENE_LIBS}"
9354     CLUCENE_LIBS="${filteredlibs}"
9355     AC_LANG_PUSH([C++])
9356     save_CXXFLAGS=$CXXFLAGS
9357     save_CPPFLAGS=$CPPFLAGS
9358     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9359     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9360     dnl http://sourceforge.net/tracker/index.php?func=detail&aid=3392466&group_id=80013&atid=558446
9361     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9362     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9363                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9364     CXXFLAGS=$save_CXXFLAGS
9365     CPPFLAGS=$save_CPPFLAGS
9366     AC_LANG_POP([C++])
9368     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9369 else
9370     AC_MSG_RESULT([internal])
9371     SYSTEM_CLUCENE=
9372     BUILD_TYPE="$BUILD_TYPE CLUCENE"
9375 AC_SUBST(SYSTEM_CLUCENE)
9376 AC_SUBST(CLUCENE_CFLAGS)
9377 AC_SUBST(CLUCENE_LIBS)
9379 dnl ===================================================================
9380 dnl Check for system expat
9381 dnl ===================================================================
9382 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9384 dnl ===================================================================
9385 dnl Check for system xmlsec
9386 dnl ===================================================================
9387 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.28])
9389 AC_MSG_CHECKING([whether to enable Embedded OpenType support])
9390 if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_eot" = "yes"; then
9391     ENABLE_EOT="TRUE"
9392     AC_DEFINE([ENABLE_EOT])
9393     AC_MSG_RESULT([yes])
9395     libo_CHECK_SYSTEM_MODULE([libeot],[LIBEOT],[libeot >= 0.01])
9396 else
9397     ENABLE_EOT=
9398     AC_MSG_RESULT([no])
9400 AC_SUBST([ENABLE_EOT])
9402 dnl ===================================================================
9403 dnl Check for DLP libs
9404 dnl ===================================================================
9405 AS_IF([test "$COM" = "MSC"],
9406       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9407       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9409 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1],["-I${WORKDIR}/UnpackedTarball/librevenge/inc"],["-L${librevenge_libdir} -lrevenge-0.0"])
9411 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9413 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9415 AS_IF([test "$COM" = "MSC"],
9416       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9417       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9419 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10],["-I${WORKDIR}/UnpackedTarball/libwpd/inc"],["-L${libwpd_libdir} -lwpd-0.10"])
9421 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9423 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9424 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.12])
9426 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9428 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9430 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9432 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.1])
9433 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.21])
9435 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9436 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10])
9438 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9440 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9441 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9443 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9445 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9447 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9449 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9451 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9452 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9454 dnl ===================================================================
9455 dnl Check for system lcms2
9456 dnl ===================================================================
9457 if test "$with_system_lcms2" != "yes"; then
9458     SYSTEM_LCMS2=
9460 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2],["-I${WORKDIR}/UnpackedTarball/lcms2/include"],["-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"])
9461 if test "$GCC" = "yes"; then
9462     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9464 if test "$COM" = "MSC"; then # override the above
9465     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9468 dnl ===================================================================
9469 dnl Check for system cppunit
9470 dnl ===================================================================
9471 if test "$_os" != "Android" ; then
9472     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9475 dnl ===================================================================
9476 dnl Check whether freetype is available
9477 dnl ===================================================================
9478 if test "$using_freetype_fontconfig" = yes; then
9479     AC_MSG_CHECKING([which freetype to use])
9481 if test "$using_freetype_fontconfig" = yes -a "$test_system_freetype" != no; then
9482     AC_MSG_RESULT([external])
9483     # FreeType has 3 different kinds of versions
9484     # * release, like 2.4.10
9485     # * libtool, like 13.0.7 (this what pkg-config returns)
9486     # * soname
9487     # FreeType's docs/VERSION.DLL provides a table mapping between the three
9488     #
9489     # 9.9.3 is 2.2.0
9490     # When the minimal version is at least 2.8.1, remove Skia's check down below.
9491     PKG_CHECK_MODULES(FREETYPE, freetype2 >= 9.9.3)
9492     FREETYPE_CFLAGS=$(printf '%s' "$FREETYPE_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9493     FilterLibs "${FREETYPE_LIBS}"
9494     FREETYPE_LIBS="${filteredlibs}"
9495     SYSTEM_FREETYPE=TRUE
9496 elif test "$using_freetype_fontconfig" = yes; then
9497     AC_MSG_RESULT([internal])
9498     FREETYPE_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"
9499     if test "x$ac_config_site_64bit_host" = xYES; then
9500         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9501     else
9502         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9503     fi
9504     BUILD_TYPE="$BUILD_TYPE FREETYPE"
9506 AC_SUBST(FREETYPE_CFLAGS)
9507 AC_SUBST(FREETYPE_LIBS)
9508 AC_SUBST([SYSTEM_FREETYPE])
9510 # ===================================================================
9511 # Check for system libxslt
9512 # to prevent incompatibilities between internal libxml2 and external libxslt,
9513 # or vice versa, use with_system_libxml here
9514 # ===================================================================
9515 if test "$with_system_libxml" = "auto"; then
9516     case "$_os" in
9517     WINNT|iOS|Android)
9518         with_system_libxml="$with_system_libs"
9519         ;;
9520     Emscripten)
9521         with_system_libxml=no
9522         ;;
9523     *)
9524         if test "$enable_fuzzers" != "yes"; then
9525             with_system_libxml=yes
9526         else
9527             with_system_libxml=no
9528         fi
9529         ;;
9530     esac
9533 AC_MSG_CHECKING([which libxslt to use])
9534 if test "$with_system_libxml" = "yes"; then
9535     AC_MSG_RESULT([external])
9536     SYSTEM_LIBXSLT=TRUE
9537     if test "$_os" = "Darwin"; then
9538         dnl make sure to use SDK path
9539         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9540         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9541         dnl omit -L/usr/lib
9542         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9543         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9544     else
9545         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9546         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9547         FilterLibs "${LIBXSLT_LIBS}"
9548         LIBXSLT_LIBS="${filteredlibs}"
9549         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9550         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9551         FilterLibs "${LIBEXSLT_LIBS}"
9552         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9553     fi
9555     dnl Check for xsltproc
9556     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9557     if test "$XSLTPROC" = "no"; then
9558         AC_MSG_ERROR([xsltproc is required])
9559     fi
9560 else
9561     AC_MSG_RESULT([internal])
9562     SYSTEM_LIBXSLT=
9563     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9565 AC_SUBST(SYSTEM_LIBXSLT)
9566 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9567     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9569 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9571 AC_SUBST(LIBEXSLT_CFLAGS)
9572 AC_SUBST(LIBEXSLT_LIBS)
9573 AC_SUBST(LIBXSLT_CFLAGS)
9574 AC_SUBST(LIBXSLT_LIBS)
9575 AC_SUBST(XSLTPROC)
9577 # ===================================================================
9578 # Check for system libxml
9579 # ===================================================================
9580 AC_MSG_CHECKING([which libxml to use])
9581 if test "$with_system_libxml" = "yes"; then
9582     AC_MSG_RESULT([external])
9583     SYSTEM_LIBXML=TRUE
9584     if test "$_os" = "Darwin"; then
9585         dnl make sure to use SDK path
9586         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9587         dnl omit -L/usr/lib
9588         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9589     elif test $_os = iOS; then
9590         dnl make sure to use SDK path
9591         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9592         LIBXML_CFLAGS="-I$usr/include/libxml2"
9593         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9594     else
9595         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9596         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9597         FilterLibs "${LIBXML_LIBS}"
9598         LIBXML_LIBS="${filteredlibs}"
9599     fi
9601     dnl Check for xmllint
9602     AC_PATH_PROG(XMLLINT, xmllint, no)
9603     if test "$XMLLINT" = "no"; then
9604         AC_MSG_ERROR([xmllint is required])
9605     fi
9606 else
9607     AC_MSG_RESULT([internal])
9608     SYSTEM_LIBXML=
9609     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9610     if test "$COM" = "MSC"; then
9611         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9612     fi
9613     if test "$COM" = "MSC"; then
9614         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9615     else
9616         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9617         if test "$_os" = Android; then
9618             LIBXML_LIBS="$LIBXML_LIBS -lm"
9619         fi
9620     fi
9621     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9623 AC_SUBST(SYSTEM_LIBXML)
9624 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9625     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9627 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9628 AC_SUBST(LIBXML_CFLAGS)
9629 AC_SUBST(LIBXML_LIBS)
9630 AC_SUBST(XMLLINT)
9632 # =====================================================================
9633 # Checking for a Python interpreter with version >= 3.3.
9634 # Optionally user can pass an option to configure, i. e.
9635 # ./configure PYTHON=/usr/bin/python
9636 # =====================================================================
9637 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9638     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9639     # unless PYTHON is defined as above which allows 'system'
9640     enable_python=internal
9642 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9643     if test -n "$PYTHON"; then
9644         PYTHON_FOR_BUILD=$PYTHON
9645     else
9646         # This allows a lack of system python with no error, we use internal one in that case.
9647         AM_PATH_PYTHON([3.3],, [:])
9648         # Clean PYTHON_VERSION checked below if cross-compiling
9649         PYTHON_VERSION=""
9650         if test "$PYTHON" != ":"; then
9651             PYTHON_FOR_BUILD=$PYTHON
9652         fi
9653     fi
9655 AC_SUBST(PYTHON_FOR_BUILD)
9657 # Checks for Python to use for Pyuno
9658 AC_MSG_CHECKING([which Python to use for Pyuno])
9659 case "$enable_python" in
9660 no|disable)
9661     if test -z $PYTHON_FOR_BUILD; then
9662         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9663         # requirement from the choice whether to include Python stuff in the installer, but why
9664         # bother?
9665         if test "$cross_compiling" = yes; then
9666             enable_python=system
9667         else
9668             AC_MSG_ERROR([Python is required at build time.])
9669         fi
9670     fi
9671     enable_python=no
9672     AC_MSG_RESULT([none])
9673     ;;
9674 ""|yes|auto)
9675     if test "$DISABLE_SCRIPTING" = TRUE -a -n "$PYTHON_FOR_BUILD"; then
9676         AC_MSG_RESULT([no, overridden by --disable-scripting])
9677         enable_python=no
9678     elif test $build_os = cygwin; then
9679         dnl When building on Windows we don't attempt to use any installed
9680         dnl "system"  Python.
9681         AC_MSG_RESULT([fully internal])
9682         enable_python=internal
9683     elif test "$cross_compiling" = yes; then
9684         AC_MSG_RESULT([system])
9685         enable_python=system
9686     else
9687         # Unset variables set by the above AM_PATH_PYTHON so that
9688         # we actually do check anew.
9689         AC_MSG_RESULT([])
9690         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
9691         AM_PATH_PYTHON([3.3],, [:])
9692         AC_MSG_CHECKING([which Python to use for Pyuno])
9693         if test "$PYTHON" = ":"; then
9694             if test -z "$PYTHON_FOR_BUILD"; then
9695                 AC_MSG_RESULT([fully internal])
9696             else
9697                 AC_MSG_RESULT([internal])
9698             fi
9699             enable_python=internal
9700         else
9701             AC_MSG_RESULT([system])
9702             enable_python=system
9703         fi
9704     fi
9705     ;;
9706 internal)
9707     AC_MSG_RESULT([internal])
9708     ;;
9709 fully-internal)
9710     AC_MSG_RESULT([fully internal])
9711     enable_python=internal
9712     ;;
9713 system)
9714     AC_MSG_RESULT([system])
9715     if test "$_os" = Darwin -a -z "$PYTHON"; then
9716         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
9717     fi
9718     ;;
9720     AC_MSG_ERROR([Incorrect --enable-python option])
9721     ;;
9722 esac
9724 if test $enable_python != no; then
9725     BUILD_TYPE="$BUILD_TYPE PYUNO"
9728 if test $enable_python = system; then
9729     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
9730         # Fallback: Accept these in the environment, or as set above
9731         # for MacOSX.
9732         :
9733     elif test "$cross_compiling" != yes; then
9734         # Unset variables set by the above AM_PATH_PYTHON so that
9735         # we actually do check anew.
9736         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
9737         # This causes an error if no python command is found
9738         AM_PATH_PYTHON([3.3])
9739         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
9740         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
9741         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
9742         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
9743         if test -z "$PKG_CONFIG"; then
9744             PYTHON_CFLAGS="-I$python_include"
9745             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9746         elif $PKG_CONFIG --exists python-$python_version-embed; then
9747             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
9748             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
9749         elif $PKG_CONFIG --exists python-$python_version; then
9750             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
9751             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
9752         else
9753             PYTHON_CFLAGS="-I$python_include"
9754             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9755         fi
9756         FilterLibs "${PYTHON_LIBS}"
9757         PYTHON_LIBS="${filteredlibs}"
9758     else
9759         dnl How to find out the cross-compilation Python installation path?
9760         AC_MSG_CHECKING([for python version])
9761         AS_IF([test -n "$PYTHON_VERSION"],
9762               [AC_MSG_RESULT([$PYTHON_VERSION])],
9763               [AC_MSG_RESULT([not found])
9764                AC_MSG_ERROR([no usable python found])])
9765         test -n "$PYTHON_CFLAGS" && break
9766     fi
9768     dnl Check if the headers really work
9769     save_CPPFLAGS="$CPPFLAGS"
9770     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
9771     AC_CHECK_HEADER(Python.h)
9772     CPPFLAGS="$save_CPPFLAGS"
9774     # let the PYTHON_FOR_BUILD match the same python installation that
9775     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
9776     # better for PythonTests.
9777     PYTHON_FOR_BUILD=$PYTHON
9780 if test "$with_lxml" != no; then
9781     if test -z "$PYTHON_FOR_BUILD"; then
9782         case $build_os in
9783             cygwin)
9784                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
9785                 ;;
9786             *)
9787                 if test "$cross_compiling" != yes ; then
9788                     BUILD_TYPE="$BUILD_TYPE LXML"
9789                 fi
9790                 ;;
9791         esac
9792     else
9793         AC_MSG_CHECKING([for python lxml])
9794         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
9795             AC_MSG_RESULT([yes])
9796         else
9797             case $build_os in
9798                 cygwin)
9799                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
9800                     ;;
9801                 *)
9802                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
9803                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
9804                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
9805                         else
9806                             BUILD_TYPE="$BUILD_TYPE LXML"
9807                             AC_MSG_RESULT([no, using internal lxml])
9808                         fi
9809                     else
9810                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
9811                     fi
9812                     ;;
9813             esac
9814         fi
9815     fi
9818 dnl By now enable_python should be "system", "internal" or "no"
9819 case $enable_python in
9820 system)
9821     SYSTEM_PYTHON=TRUE
9823     if test "x$ac_cv_header_Python_h" != "xyes"; then
9824        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
9825     fi
9827     AC_LANG_PUSH(C)
9828     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
9829     AC_MSG_CHECKING([for correct python library version])
9830        AC_RUN_IFELSE([AC_LANG_SOURCE([[
9831 #include <Python.h>
9833 int main(int argc, char **argv) {
9834    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
9835    else return 1;
9837        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
9838     AC_LANG_POP(C)
9840     dnl FIXME Check if the Python library can be linked with, too?
9841     ;;
9843 internal)
9844     SYSTEM_PYTHON=
9845     PYTHON_VERSION_MAJOR=3
9846     PYTHON_VERSION_MINOR=8
9847     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.10
9848     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
9849         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
9850     fi
9851     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
9852     BUILD_TYPE="$BUILD_TYPE PYTHON"
9853     if test "$OS" = LINUX -o "$OS" = WNT ; then
9854         BUILD_TYPE="$BUILD_TYPE LIBFFI"
9855     fi
9856     # Embedded Python dies without Home set
9857     if test "$HOME" = ""; then
9858         export HOME=""
9859     fi
9860     ;;
9862     DISABLE_PYTHON=TRUE
9863     SYSTEM_PYTHON=
9864     ;;
9866     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
9867     ;;
9868 esac
9870 AC_SUBST(DISABLE_PYTHON)
9871 AC_SUBST(SYSTEM_PYTHON)
9872 AC_SUBST(PYTHON_CFLAGS)
9873 AC_SUBST(PYTHON_LIBS)
9874 AC_SUBST(PYTHON_VERSION)
9875 AC_SUBST(PYTHON_VERSION_MAJOR)
9876 AC_SUBST(PYTHON_VERSION_MINOR)
9878 AC_MSG_CHECKING([whether to build LibreLogo])
9879 case "$enable_python" in
9880 no|disable)
9881     AC_MSG_RESULT([no; Python disabled])
9882     ;;
9884     if test "${enable_librelogo}" = "no"; then
9885         AC_MSG_RESULT([no])
9886     else
9887         AC_MSG_RESULT([yes])
9888         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
9889         AC_DEFINE([ENABLE_LIBRELOGO],1)
9890     fi
9891     ;;
9892 esac
9893 AC_SUBST(ENABLE_LIBRELOGO)
9895 ENABLE_MARIADBC=
9896 MARIADBC_MAJOR=1
9897 MARIADBC_MINOR=0
9898 MARIADBC_MICRO=2
9899 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
9900 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
9901     ENABLE_MARIADBC=TRUE
9902     AC_MSG_RESULT([yes])
9903     BUILD_TYPE="$BUILD_TYPE MARIADBC"
9904 else
9905     AC_MSG_RESULT([no])
9907 AC_SUBST(ENABLE_MARIADBC)
9908 AC_SUBST(MARIADBC_MAJOR)
9909 AC_SUBST(MARIADBC_MINOR)
9910 AC_SUBST(MARIADBC_MICRO)
9912 if test "$ENABLE_MARIADBC" = "TRUE"; then
9913     dnl ===================================================================
9914     dnl Check for system MariaDB
9915     dnl ===================================================================
9916     AC_MSG_CHECKING([which MariaDB to use])
9917     if test "$with_system_mariadb" = "yes"; then
9918         AC_MSG_RESULT([external])
9919         SYSTEM_MARIADB_CONNECTOR_C=TRUE
9920         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
9921         if test -z "$MARIADBCONFIG"; then
9922             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
9923             if test -z "$MARIADBCONFIG"; then
9924                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
9925                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
9926             fi
9927         fi
9928         AC_MSG_CHECKING([MariaDB version])
9929         MARIADB_VERSION=`$MARIADBCONFIG --version`
9930         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
9931         if test "$MARIADB_MAJOR" -ge "5"; then
9932             AC_MSG_RESULT([OK])
9933         else
9934             AC_MSG_ERROR([too old, use 5.0.x or later])
9935         fi
9936         AC_MSG_CHECKING([for MariaDB Client library])
9937         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
9938         if test "$COM_IS_CLANG" = TRUE; then
9939             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
9940         fi
9941         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
9942         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
9943         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
9944         dnl linux32:
9945         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
9946             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
9947             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
9948                 | sed -e 's|/lib64/|/lib/|')
9949         fi
9950         FilterLibs "${MARIADB_LIBS}"
9951         MARIADB_LIBS="${filteredlibs}"
9952         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
9953         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
9954         if test "$enable_bundle_mariadb" = "yes"; then
9955             AC_MSG_RESULT([yes])
9956             BUNDLE_MARIADB_CONNECTOR_C=TRUE
9957             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
9959 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
9961 /g' | grep -E '(mysqlclient|mariadb)')
9962             if test "$_os" = "Darwin"; then
9963                 LIBMARIADB=${LIBMARIADB}.dylib
9964             elif test "$_os" = "WINNT"; then
9965                 LIBMARIADB=${LIBMARIADB}.dll
9966             else
9967                 LIBMARIADB=${LIBMARIADB}.so
9968             fi
9969             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
9970             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
9971             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
9972                 AC_MSG_RESULT([found.])
9973                 PathFormat "$LIBMARIADB_PATH"
9974                 LIBMARIADB_PATH="$formatted_path"
9975             else
9976                 AC_MSG_ERROR([not found.])
9977             fi
9978         else
9979             AC_MSG_RESULT([no])
9980             BUNDLE_MARIADB_CONNECTOR_C=
9981         fi
9982     else
9983         AC_MSG_RESULT([internal])
9984         SYSTEM_MARIADB_CONNECTOR_C=
9985         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
9986         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
9987         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
9988     fi
9990     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
9991     AC_SUBST(MARIADB_CFLAGS)
9992     AC_SUBST(MARIADB_LIBS)
9993     AC_SUBST(LIBMARIADB)
9994     AC_SUBST(LIBMARIADB_PATH)
9995     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
9998 dnl ===================================================================
9999 dnl Check for system hsqldb
10000 dnl ===================================================================
10001 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
10002     HSQLDB_USE_JDBC_4_1=
10003     AC_MSG_CHECKING([which hsqldb to use])
10004     if test "$with_system_hsqldb" = "yes"; then
10005         AC_MSG_RESULT([external])
10006         SYSTEM_HSQLDB=TRUE
10007         if test -z $HSQLDB_JAR; then
10008             HSQLDB_JAR=/usr/share/java/hsqldb.jar
10009         fi
10010         if ! test -f $HSQLDB_JAR; then
10011                AC_MSG_ERROR(hsqldb.jar not found.)
10012         fi
10013         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
10014         export HSQLDB_JAR
10015         if $PERL -e \
10016            'use Archive::Zip;
10017             my $file = "$ENV{'HSQLDB_JAR'}";
10018             my $zip = Archive::Zip->new( $file );
10019             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
10020             if ( $mf =~ m/Specification-Version: 1.8.*/ )
10021             {
10022                 push @l, split(/\n/, $mf);
10023                 foreach my $line (@l)
10024                 {
10025                     if ($line =~ m/Specification-Version:/)
10026                     {
10027                         ($t, $version) = split (/:/,$line);
10028                         $version =~ s/^\s//;
10029                         ($a, $b, $c, $d) = split (/\./,$version);
10030                         if ($c == "0" && $d > "8")
10031                         {
10032                             exit 0;
10033                         }
10034                         else
10035                         {
10036                             exit 1;
10037                         }
10038                     }
10039                 }
10040             }
10041             else
10042             {
10043                 exit 1;
10044             }'; then
10045             AC_MSG_RESULT([yes])
10046         else
10047             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
10048         fi
10049     else
10050         AC_MSG_RESULT([internal])
10051         SYSTEM_HSQLDB=
10052         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10053         NEED_ANT=TRUE
10054         AC_MSG_CHECKING([whether hsqldb should be built with JDBC 4.1])
10055         javanumver=`$JAVAINTERPRETER -version 2>&1 | $AWK -v num=true -f $SRC_ROOT/solenv/bin/getcompver.awk`
10056         if expr "$javanumver" '>=' 000100060000 > /dev/null; then
10057             AC_MSG_RESULT([yes])
10058             HSQLDB_USE_JDBC_4_1=TRUE
10059         else
10060             AC_MSG_RESULT([no])
10061         fi
10062     fi
10063 else
10064     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
10065         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10066     fi
10068 AC_SUBST(SYSTEM_HSQLDB)
10069 AC_SUBST(HSQLDB_JAR)
10070 AC_SUBST([HSQLDB_USE_JDBC_4_1])
10072 dnl ===================================================================
10073 dnl Check for PostgreSQL stuff
10074 dnl ===================================================================
10075 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
10076 if test "x$enable_postgresql_sdbc" != "xno"; then
10077     AC_MSG_RESULT([yes])
10078     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
10080     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
10081         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
10082     fi
10083     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
10084         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
10085     fi
10087     postgres_interface=""
10088     if test "$with_system_postgresql" = "yes"; then
10089         postgres_interface="external PostgreSQL"
10090         SYSTEM_POSTGRESQL=TRUE
10091         if test "$_os" = Darwin; then
10092             supp_path=''
10093             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
10094                 pg_supp_path="$P_SEP$d$pg_supp_path"
10095             done
10096         fi
10097         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
10098         if test -n "$PGCONFIG"; then
10099             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
10100             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
10101         else
10102             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
10103               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
10104               POSTGRESQL_LIB=$POSTGRESQL_LIBS
10105             ],[
10106               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
10107             ])
10108         fi
10109         FilterLibs "${POSTGRESQL_LIB}"
10110         POSTGRESQL_LIB="${filteredlibs}"
10111     else
10112         # if/when anything else than PostgreSQL uses Kerberos,
10113         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
10114         WITH_KRB5=
10115         WITH_GSSAPI=
10116         case "$_os" in
10117         Darwin)
10118             # macOS has system MIT Kerberos 5 since 10.4
10119             if test "$with_krb5" != "no"; then
10120                 WITH_KRB5=TRUE
10121                 save_LIBS=$LIBS
10122                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
10123                 # that the libraries where these functions are located on macOS will change, is it?
10124                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10125                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10126                 KRB5_LIBS=$LIBS
10127                 LIBS=$save_LIBS
10128                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10129                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10130                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10131                 LIBS=$save_LIBS
10132             fi
10133             if test "$with_gssapi" != "no"; then
10134                 WITH_GSSAPI=TRUE
10135                 save_LIBS=$LIBS
10136                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10137                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10138                 GSSAPI_LIBS=$LIBS
10139                 LIBS=$save_LIBS
10140             fi
10141             ;;
10142         WINNT)
10143             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
10144                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
10145             fi
10146             ;;
10147         Linux|GNU|*BSD|DragonFly)
10148             if test "$with_krb5" != "no"; then
10149                 WITH_KRB5=TRUE
10150                 save_LIBS=$LIBS
10151                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10152                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10153                 KRB5_LIBS=$LIBS
10154                 LIBS=$save_LIBS
10155                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10156                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10157                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10158                 LIBS=$save_LIBS
10159             fi
10160             if test "$with_gssapi" != "no"; then
10161                 WITH_GSSAPI=TRUE
10162                 save_LIBS=$LIBS
10163                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10164                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10165                 GSSAPI_LIBS=$LIBS
10166                 LIBS=$save_LIBS
10167             fi
10168             ;;
10169         *)
10170             if test "$with_krb5" = "yes"; then
10171                 WITH_KRB5=TRUE
10172                 save_LIBS=$LIBS
10173                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10174                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10175                 KRB5_LIBS=$LIBS
10176                 LIBS=$save_LIBS
10177                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10178                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10179                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10180                 LIBS=$save_LIBS
10181             fi
10182             if test "$with_gssapi" = "yes"; then
10183                 WITH_GSSAPI=TRUE
10184                 save_LIBS=$LIBS
10185                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10186                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10187                 LIBS=$save_LIBS
10188                 GSSAPI_LIBS=$LIBS
10189             fi
10190         esac
10192         if test -n "$with_libpq_path"; then
10193             SYSTEM_POSTGRESQL=TRUE
10194             postgres_interface="external libpq"
10195             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
10196             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
10197         else
10198             SYSTEM_POSTGRESQL=
10199             postgres_interface="internal"
10200             POSTGRESQL_LIB=""
10201             POSTGRESQL_INC="%OVERRIDE_ME%"
10202             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10203         fi
10204     fi
10206     AC_MSG_CHECKING([PostgreSQL C interface])
10207     AC_MSG_RESULT([$postgres_interface])
10209     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10210         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10211         save_CFLAGS=$CFLAGS
10212         save_CPPFLAGS=$CPPFLAGS
10213         save_LIBS=$LIBS
10214         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10215         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10216         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10217         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10218             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10219         CFLAGS=$save_CFLAGS
10220         CPPFLAGS=$save_CPPFLAGS
10221         LIBS=$save_LIBS
10222     fi
10223     BUILD_POSTGRESQL_SDBC=TRUE
10224 else
10225     AC_MSG_RESULT([no])
10227 AC_SUBST(WITH_KRB5)
10228 AC_SUBST(WITH_GSSAPI)
10229 AC_SUBST(GSSAPI_LIBS)
10230 AC_SUBST(KRB5_LIBS)
10231 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10232 AC_SUBST(SYSTEM_POSTGRESQL)
10233 AC_SUBST(POSTGRESQL_INC)
10234 AC_SUBST(POSTGRESQL_LIB)
10236 dnl ===================================================================
10237 dnl Check for Firebird stuff
10238 dnl ===================================================================
10239 ENABLE_FIREBIRD_SDBC=
10240 if test "$enable_firebird_sdbc" = "yes" ; then
10241     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10243     dnl ===================================================================
10244     dnl Check for system Firebird
10245     dnl ===================================================================
10246     AC_MSG_CHECKING([which Firebird to use])
10247     if test "$with_system_firebird" = "yes"; then
10248         AC_MSG_RESULT([external])
10249         SYSTEM_FIREBIRD=TRUE
10250         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10251         if test -z "$FIREBIRDCONFIG"; then
10252             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10253             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10254                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10255             ])
10256             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10257         else
10258             AC_MSG_NOTICE([fb_config found])
10259             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10260             AC_MSG_CHECKING([for Firebird Client library])
10261             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10262             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10263             FilterLibs "${FIREBIRD_LIBS}"
10264             FIREBIRD_LIBS="${filteredlibs}"
10265         fi
10266         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10267         AC_MSG_CHECKING([Firebird version])
10268         if test -n "${FIREBIRD_VERSION}"; then
10269             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10270             if test "$FIREBIRD_MAJOR" -ge "3"; then
10271                 AC_MSG_RESULT([OK])
10272             else
10273                 AC_MSG_ERROR([Ensure firebird >= 3 is installed])
10274             fi
10275         else
10276             save_CFLAGS="${CFLAGS}"
10277             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10278             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10279 #if defined(FB_API_VER) && FB_API_VER == 30
10280 int fb_api_is_30(void) { return 0; }
10281 #else
10282 #error "Wrong Firebird API version"
10283 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10284             CFLAGS="$save_CFLAGS"
10285         fi
10286         ENABLE_FIREBIRD_SDBC=TRUE
10287         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10288     elif test "$enable_database_connectivity" = no; then
10289         AC_MSG_RESULT([none])
10290     elif test "$cross_compiling" = "yes"; then
10291         AC_MSG_RESULT([none])
10292     else
10293         dnl Embedded Firebird has version 3.0
10294         dnl We need libatomic_ops for any non X86/X64 system
10295         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10296             dnl ===================================================================
10297             dnl Check for system libatomic_ops
10298             dnl ===================================================================
10299             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10300             if test "$with_system_libatomic_ops" = "yes"; then
10301                 SYSTEM_LIBATOMIC_OPS=TRUE
10302                 AC_CHECK_HEADERS(atomic_ops.h, [],
10303                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10304             else
10305                 SYSTEM_LIBATOMIC_OPS=
10306                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10307                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10308                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10309             fi
10310         fi
10312         AC_MSG_RESULT([internal])
10313         SYSTEM_FIREBIRD=
10314         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10315         FIREBIRD_LIBS="-lfbclient"
10317         if test "$with_system_libtommath" = "yes"; then
10318             SYSTEM_LIBTOMMATH=TRUE
10319             dnl check for tommath presence
10320             save_LIBS=$LIBS
10321             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10322             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10323             LIBS=$save_LIBS
10324         else
10325             SYSTEM_LIBTOMMATH=
10326             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10327             LIBTOMMATH_LIBS="-ltommath"
10328             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10329         fi
10331         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10332         ENABLE_FIREBIRD_SDBC=TRUE
10333         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10334     fi
10336 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10337 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10338 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10339 AC_SUBST(LIBATOMIC_OPS_LIBS)
10340 AC_SUBST(SYSTEM_FIREBIRD)
10341 AC_SUBST(FIREBIRD_CFLAGS)
10342 AC_SUBST(FIREBIRD_LIBS)
10343 AC_SUBST(SYSTEM_LIBTOMMATH)
10344 AC_SUBST(LIBTOMMATH_CFLAGS)
10345 AC_SUBST(LIBTOMMATH_LIBS)
10347 dnl ===================================================================
10348 dnl Check for system curl
10349 dnl ===================================================================
10350 AC_MSG_CHECKING([which libcurl to use])
10351 if test "$with_system_curl" = "auto"; then
10352     with_system_curl="$with_system_libs"
10355 if test "$enable_curl" = "yes" -a "$with_system_curl" = "yes"; then
10356     AC_MSG_RESULT([external])
10357     SYSTEM_CURL=TRUE
10359     PKG_CHECK_MODULES(CURL, libcurl >= 7.68.0)
10361     ENABLE_CURL=TRUE
10362 elif test "$enable_curl" = "no"; then
10363     AC_MSG_RESULT([none])
10364 else
10365     AC_MSG_RESULT([internal])
10366     SYSTEM_CURL=
10367     BUILD_TYPE="$BUILD_TYPE CURL"
10368     ENABLE_CURL=TRUE
10370 AC_SUBST(SYSTEM_CURL)
10371 AC_SUBST(CURL_CFLAGS)
10372 AC_SUBST(CURL_LIBS)
10373 AC_SUBST(ENABLE_CURL)
10375 dnl ===================================================================
10376 dnl Check for system boost
10377 dnl ===================================================================
10378 AC_MSG_CHECKING([which boost to use])
10379 if test "$with_system_boost" = "yes"; then
10380     AC_MSG_RESULT([external])
10381     SYSTEM_BOOST=TRUE
10382     AX_BOOST_BASE([1.66],,[AC_MSG_ERROR([no suitable Boost found])])
10383     AX_BOOST_DATE_TIME
10384     AX_BOOST_FILESYSTEM
10385     AX_BOOST_IOSTREAMS
10386     AX_BOOST_LOCALE
10387     AC_LANG_PUSH([C++])
10388     save_CXXFLAGS=$CXXFLAGS
10389     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10390     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10391        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10392     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10393        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10394     CXXFLAGS=$save_CXXFLAGS
10395     AC_LANG_POP([C++])
10396     # this is in m4/ax_boost_base.m4
10397     FilterLibs "${BOOST_LDFLAGS}"
10398     BOOST_LDFLAGS="${filteredlibs}"
10399 else
10400     AC_MSG_RESULT([internal])
10401     BUILD_TYPE="$BUILD_TYPE BOOST"
10402     SYSTEM_BOOST=
10403     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10404         # use warning-suppressing wrapper headers
10405         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10406     else
10407         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10408     fi
10410 AC_SUBST(SYSTEM_BOOST)
10412 dnl ===================================================================
10413 dnl Check for system mdds
10414 dnl ===================================================================
10415 libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-2.0 >= 2.0.0], ["-I${WORKDIR}/UnpackedTarball/mdds/include"])
10417 dnl ===================================================================
10418 dnl Check for system glm
10419 dnl ===================================================================
10420 AC_MSG_CHECKING([which glm to use])
10421 if test "$with_system_glm" = "yes"; then
10422     AC_MSG_RESULT([external])
10423     SYSTEM_GLM=TRUE
10424     AC_LANG_PUSH([C++])
10425     AC_CHECK_HEADER([glm/glm.hpp], [],
10426        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10427     AC_LANG_POP([C++])
10428 else
10429     AC_MSG_RESULT([internal])
10430     BUILD_TYPE="$BUILD_TYPE GLM"
10431     SYSTEM_GLM=
10432     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10434 AC_SUBST([GLM_CFLAGS])
10435 AC_SUBST([SYSTEM_GLM])
10437 dnl ===================================================================
10438 dnl Check for system odbc
10439 dnl ===================================================================
10440 AC_MSG_CHECKING([which odbc headers to use])
10441 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
10442     AC_MSG_RESULT([external])
10443     SYSTEM_ODBC_HEADERS=TRUE
10445     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10446         save_CPPFLAGS=$CPPFLAGS
10447         find_winsdk
10448         PathFormat "$winsdktest"
10449         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"
10450         AC_CHECK_HEADER(sqlext.h, [],
10451             [AC_MSG_ERROR(odbc not found. install odbc)],
10452             [#include <windows.h>])
10453         CPPFLAGS=$save_CPPFLAGS
10454     else
10455         AC_CHECK_HEADER(sqlext.h, [],
10456             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10457     fi
10458 elif test "$enable_database_connectivity" = no; then
10459     AC_MSG_RESULT([none])
10460 else
10461     AC_MSG_RESULT([internal])
10462     SYSTEM_ODBC_HEADERS=
10464 AC_SUBST(SYSTEM_ODBC_HEADERS)
10466 dnl ===================================================================
10467 dnl Check for system NSS
10468 dnl ===================================================================
10469 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10470     libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8],,,[
10471         case "$_os" in
10472             Linux)
10473                 with_system_nss=yes
10474             ;;
10475             *)
10476                 with_system_nss=no
10477             ;;
10478         esac])
10479     AC_DEFINE(HAVE_FEATURE_NSS)
10480     ENABLE_NSS=TRUE
10481 elif test $_os != iOS ; then
10482     with_tls=openssl
10484 AC_SUBST(ENABLE_NSS)
10486 dnl ===================================================================
10487 dnl Enable LDAP support
10488 dnl ===================================================================
10490 if test "$test_openldap" = yes; then
10491     AC_MSG_CHECKING([whether to enable LDAP support])
10492     if test "$enable_ldap" = yes -a \( "$ENABLE_NSS" = TRUE -o "$with_system_openldap" = yes \); then
10493         AC_MSG_RESULT([yes])
10494         ENABLE_LDAP=TRUE
10495     else
10496         if test "$enable_ldap" != "yes"; then
10497             AC_MSG_RESULT([no])
10498         else
10499             AC_MSG_RESULT([no (needs NSS or system openldap)])
10500         fi
10501     fi
10503 dnl ===================================================================
10504 dnl Check for system openldap
10505 dnl ===================================================================
10507     if test "$ENABLE_LDAP" = TRUE; then
10508         AC_MSG_CHECKING([which openldap library to use])
10509         if test "$with_system_openldap" = yes; then
10510             AC_MSG_RESULT([external])
10511             SYSTEM_OPENLDAP=TRUE
10512             AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10513             AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10514             AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10515         else
10516             AC_MSG_RESULT([internal])
10517             BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10518         fi
10519     fi
10522 AC_SUBST(ENABLE_LDAP)
10523 AC_SUBST(SYSTEM_OPENLDAP)
10525 dnl ===================================================================
10526 dnl Check for TLS/SSL and cryptographic implementation to use
10527 dnl ===================================================================
10528 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10529 if test -n "$with_tls"; then
10530     case $with_tls in
10531     openssl)
10532         AC_DEFINE(USE_TLS_OPENSSL)
10533         TLS=OPENSSL
10534         AC_MSG_RESULT([$TLS])
10536         if test "$enable_openssl" != "yes"; then
10537             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10538         fi
10540         # warn that OpenSSL has been selected but not all TLS code has this option
10541         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS])
10542         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS"
10543         ;;
10544     nss)
10545         AC_DEFINE(USE_TLS_NSS)
10546         TLS=NSS
10547         AC_MSG_RESULT([$TLS])
10548         ;;
10549     no)
10550         AC_MSG_RESULT([none])
10551         AC_MSG_WARN([Skipping TLS/SSL])
10552         ;;
10553     *)
10554         AC_MSG_RESULT([])
10555         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10556 openssl - OpenSSL
10557 nss - Mozilla's Network Security Services (NSS)
10558     ])
10559         ;;
10560     esac
10561 else
10562     # default to using NSS, it results in smaller oox lib
10563     AC_DEFINE(USE_TLS_NSS)
10564     TLS=NSS
10565     AC_MSG_RESULT([$TLS])
10567 AC_SUBST(TLS)
10569 dnl ===================================================================
10570 dnl Check for system sane
10571 dnl ===================================================================
10572 AC_MSG_CHECKING([which sane header to use])
10573 if test "$with_system_sane" = "yes"; then
10574     AC_MSG_RESULT([external])
10575     AC_CHECK_HEADER(sane/sane.h, [],
10576       [AC_MSG_ERROR(sane not found. install sane)], [])
10577 else
10578     AC_MSG_RESULT([internal])
10579     BUILD_TYPE="$BUILD_TYPE SANE"
10582 dnl ===================================================================
10583 dnl Check for system icu
10584 dnl ===================================================================
10585 SYSTEM_GENBRK=
10586 SYSTEM_GENCCODE=
10587 SYSTEM_GENCMN=
10589 ICU_MAJOR=70
10590 ICU_MINOR=1
10591 ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10592 ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10593 ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10594 AC_MSG_CHECKING([which icu to use])
10595 if test "$with_system_icu" = "yes"; then
10596     AC_MSG_RESULT([external])
10597     SYSTEM_ICU=TRUE
10598     AC_LANG_PUSH([C++])
10599     AC_MSG_CHECKING([for unicode/rbbi.h])
10600     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10601     AC_LANG_POP([C++])
10603     if test "$cross_compiling" != "yes"; then
10604         PKG_CHECK_MODULES(ICU, icu-i18n >= 4.6)
10605         ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10606         ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10607         ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10608     fi
10610     if test "$cross_compiling" = "yes" -a \( "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" \); then
10611         ICU_VERSION_FOR_BUILD=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10612         ICU_MAJOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f1`
10613         ICU_MINOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f2`
10614         AC_MSG_CHECKING([if MinGW and system versions of ICU are compatible])
10615         if test "$ICU_MAJOR" -eq "$ICU_MAJOR_FOR_BUILD" -a "$ICU_MINOR" -eq "$ICU_MINOR_FOR_BUILD"; then
10616             AC_MSG_RESULT([yes])
10617         else
10618             AC_MSG_RESULT([no])
10619             if test "$with_system_icu_for_build" != "force"; then
10620                 AC_MSG_ERROR([System ICU is not version-compatible with MinGW ICU.
10621 You can use --with-system-icu-for-build=force to use it anyway.])
10622             fi
10623         fi
10624     fi
10626     if test "$cross_compiling" != "yes" -o "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force"; then
10627         # using the system icu tools can lead to version confusion, use the
10628         # ones from the build environment when cross-compiling
10629         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10630         if test -z "$SYSTEM_GENBRK"; then
10631             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10632         fi
10633         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10634         if test -z "$SYSTEM_GENCCODE"; then
10635             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10636         fi
10637         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10638         if test -z "$SYSTEM_GENCMN"; then
10639             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10640         fi
10641         if test "$ICU_MAJOR" -ge "49"; then
10642             ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10643             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10644             ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10645         else
10646             ICU_RECLASSIFIED_PREPEND_SET_EMPTY=
10647             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER=
10648             ICU_RECLASSIFIED_HEBREW_LETTER=
10649         fi
10650     fi
10652     if test "$cross_compiling" = "yes"; then
10653         if test "$ICU_MAJOR" -ge "50"; then
10654             AC_MSG_RESULT([Ignore ICU_MINOR as obviously the libraries don't include the minor version in their names any more])
10655             ICU_MINOR=""
10656         fi
10657     fi
10658 else
10659     AC_MSG_RESULT([internal])
10660     SYSTEM_ICU=
10661     BUILD_TYPE="$BUILD_TYPE ICU"
10662     # surprisingly set these only for "internal" (to be used by various other
10663     # external libs): the system icu-config is quite unhelpful and spits out
10664     # dozens of weird flags and also default path -I/usr/include
10665     ICU_CFLAGS="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10666     ICU_LIBS="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10668 if test "$ICU_MAJOR" -ge "59"; then
10669     # As of ICU 59 it defaults to typedef char16_t UChar; which is available
10670     # with -std=c++11 but not all external libraries can be built with that,
10671     # for those use a bit-compatible typedef uint16_t UChar; see
10672     # icu/source/common/unicode/umachine.h
10673     ICU_UCHAR_TYPE="-DUCHAR_TYPE=uint16_t"
10674 else
10675     ICU_UCHAR_TYPE=""
10677 AC_SUBST(SYSTEM_ICU)
10678 AC_SUBST(SYSTEM_GENBRK)
10679 AC_SUBST(SYSTEM_GENCCODE)
10680 AC_SUBST(SYSTEM_GENCMN)
10681 AC_SUBST(ICU_MAJOR)
10682 AC_SUBST(ICU_MINOR)
10683 AC_SUBST(ICU_RECLASSIFIED_PREPEND_SET_EMPTY)
10684 AC_SUBST(ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER)
10685 AC_SUBST(ICU_RECLASSIFIED_HEBREW_LETTER)
10686 AC_SUBST(ICU_CFLAGS)
10687 AC_SUBST(ICU_LIBS)
10688 AC_SUBST(ICU_UCHAR_TYPE)
10690 dnl ==================================================================
10691 dnl Breakpad
10692 dnl ==================================================================
10693 DEFAULT_CRASHDUMP_VALUE="true"
10694 AC_MSG_CHECKING([whether to enable breakpad])
10695 if test "$enable_breakpad" != yes; then
10696     AC_MSG_RESULT([no])
10697 else
10698     AC_MSG_RESULT([yes])
10699     ENABLE_BREAKPAD="TRUE"
10700     AC_DEFINE(ENABLE_BREAKPAD)
10701     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
10702     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
10704     AC_MSG_CHECKING([for disable crash dump])
10705     if test "$enable_crashdump" = no; then
10706         DEFAULT_CRASHDUMP_VALUE="false"
10707         AC_MSG_RESULT([yes])
10708     else
10709        AC_MSG_RESULT([no])
10710     fi
10712     AC_MSG_CHECKING([for crashreport config])
10713     if test "$with_symbol_config" = "no"; then
10714         BREAKPAD_SYMBOL_CONFIG="invalid"
10715         AC_MSG_RESULT([no])
10716     else
10717         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
10718         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
10719         AC_MSG_RESULT([yes])
10720     fi
10721     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
10723 AC_SUBST(ENABLE_BREAKPAD)
10724 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
10726 dnl ==================================================================
10727 dnl libfuzzer
10728 dnl ==================================================================
10729 AC_MSG_CHECKING([whether to enable fuzzers])
10730 if test "$enable_fuzzers" != yes; then
10731     AC_MSG_RESULT([no])
10732 else
10733     if test -z $LIB_FUZZING_ENGINE; then
10734       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
10735     fi
10736     AC_MSG_RESULT([yes])
10737     ENABLE_FUZZERS="TRUE"
10738     AC_DEFINE([ENABLE_FUZZERS],1)
10739     BUILD_TYPE="$BUILD_TYPE FUZZERS"
10741 AC_SUBST(LIB_FUZZING_ENGINE)
10742 AC_SUBST(ENABLE_FUZZERS)
10744 dnl ===================================================================
10745 dnl Orcus
10746 dnl ===================================================================
10747 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.17 >= 0.17.2])
10748 if test "$with_system_orcus" != "yes"; then
10749     if test "$SYSTEM_BOOST" = "TRUE"; then
10750         dnl Link with Boost.System
10751         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
10752         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
10753         dnl in documentation has no effect.
10754         AX_BOOST_SYSTEM
10755     fi
10757 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
10758 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
10759 AC_SUBST([BOOST_SYSTEM_LIB])
10760 AC_SUBST(SYSTEM_LIBORCUS)
10762 dnl ===================================================================
10763 dnl HarfBuzz
10764 dnl ===================================================================
10765 libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3],
10766                          ["-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"],
10767                          ["-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"])
10769 libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 0.9.42],
10770                          ["-I${WORKDIR}/UnpackedTarball/harfbuzz/src"],
10771                          ["-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"])
10773 if test "$COM" = "MSC"; then # override the above
10774     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
10775     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
10778 if test "$with_system_harfbuzz" = "yes"; then
10779     if test "$with_system_graphite" = "no"; then
10780         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
10781     fi
10782     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
10783     save_LIBS="$LIBS"
10784     save_CFLAGS="$CFLAGS"
10785     LIBS="$LIBS $HARFBUZZ_LIBS"
10786     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
10787     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
10788     LIBS="$save_LIBS"
10789     CFLAGS="$save_CFLAGS"
10790 else
10791     if test "$with_system_graphite" = "yes"; then
10792         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
10793     fi
10796 if test "$USING_X11" = TRUE; then
10797     AC_PATH_X
10798     AC_PATH_XTRA
10799     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
10801     if test -z "$x_includes"; then
10802         x_includes="default_x_includes"
10803     fi
10804     if test -z "$x_libraries"; then
10805         x_libraries="default_x_libraries"
10806     fi
10807     CFLAGS="$CFLAGS $X_CFLAGS"
10808     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
10809     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
10810 else
10811     x_includes="no_x_includes"
10812     x_libraries="no_x_libraries"
10815 if test "$USING_X11" = TRUE; then
10816     dnl ===================================================================
10817     dnl Check for extension headers
10818     dnl ===================================================================
10819     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
10820      [#include <X11/extensions/shape.h>])
10822     # vcl needs ICE and SM
10823     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
10824     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
10825         [AC_MSG_ERROR(ICE library not found)])
10826     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
10827     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
10828         [AC_MSG_ERROR(SM library not found)])
10831 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
10832     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
10833     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
10836 dnl ===================================================================
10837 dnl Check for system Xrender
10838 dnl ===================================================================
10839 AC_MSG_CHECKING([whether to use Xrender])
10840 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
10841     AC_MSG_RESULT([yes])
10842     PKG_CHECK_MODULES(XRENDER, xrender)
10843     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10844     FilterLibs "${XRENDER_LIBS}"
10845     XRENDER_LIBS="${filteredlibs}"
10846     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
10847       [AC_MSG_ERROR(libXrender not found or functional)], [])
10848     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
10849       [AC_MSG_ERROR(Xrender not found. install X)], [])
10850 else
10851     AC_MSG_RESULT([no])
10853 AC_SUBST(XRENDER_CFLAGS)
10854 AC_SUBST(XRENDER_LIBS)
10856 dnl ===================================================================
10857 dnl Check for XRandr
10858 dnl ===================================================================
10859 AC_MSG_CHECKING([whether to enable RandR support])
10860 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
10861     AC_MSG_RESULT([yes])
10862     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
10863     if test "$ENABLE_RANDR" != "TRUE"; then
10864         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
10865                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
10866         XRANDR_CFLAGS=" "
10867         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
10868           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
10869         XRANDR_LIBS="-lXrandr "
10870         ENABLE_RANDR="TRUE"
10871     fi
10872     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10873     FilterLibs "${XRANDR_LIBS}"
10874     XRANDR_LIBS="${filteredlibs}"
10875 else
10876     ENABLE_RANDR=""
10877     AC_MSG_RESULT([no])
10879 AC_SUBST(XRANDR_CFLAGS)
10880 AC_SUBST(XRANDR_LIBS)
10881 AC_SUBST(ENABLE_RANDR)
10883 if test "$test_webdav" = yes; then
10884     if test -z "$with_webdav"; then
10885         WITH_WEBDAV=curl
10886     else
10887         WITH_WEBDAV="$with_webdav"
10888     fi
10891 AC_MSG_CHECKING([for webdav library])
10892 case "$WITH_WEBDAV" in
10893 curl)
10894     AC_MSG_RESULT([curl])
10895     # curl is already mandatory (almost) and checked elsewhere
10896     if test "$enable_curl" = "no"; then
10897         AC_MSG_ERROR(["--with-webdav=curl conflicts with --disable-curl"])
10898     fi
10899     ;;
10900 serf)
10901     AC_MSG_RESULT([serf])
10902     # Check for system apr-util
10903     libo_CHECK_SYSTEM_MODULE([apr],[APR],[apr-util-1],
10904                              ["-I${WORKDIR}/UnpackedTarball/apr/include -I${WORKDIR}/UnpackedTarball/apr_util/include"],
10905                              ["-L${WORKDIR}/UnpackedTarball/apr/.libs -lapr-1 -L${WORKDIR}/UnpackedTarball/apr_util/.libs -laprutil-1"])
10906     if test "$COM" = "MSC"; then
10907         APR_LIB_DIR="LibR"
10908         test -n "${MSVC_USE_DEBUG_RUNTIME}" && APR_LIB_DIR="LibD"
10909         APR_LIBS="${WORKDIR}/UnpackedTarball/apr/${APR_LIB_DIR}/apr-1.lib ${WORKDIR}/UnpackedTarball/apr_util/${APR_LIB_DIR}/aprutil-1.lib"
10910     fi
10912     # Check for system serf
10913     libo_CHECK_SYSTEM_MODULE([serf],[SERF],[serf-1 >= 1.3.9])
10914     ;;
10915 neon)
10916     AC_MSG_RESULT([neon])
10917     # Check for system neon
10918     libo_CHECK_SYSTEM_MODULE([neon],[NEON],[neon >= 0.31.2])
10919     if test "$with_system_neon" = "yes"; then
10920         NEON_VERSION="`$PKG_CONFIG --modversion neon | $SED 's/\.//g'`"
10921     else
10922         NEON_VERSION=0312
10923     fi
10924     AC_SUBST(NEON_VERSION)
10925     ;;
10927     AC_MSG_RESULT([none, disabled])
10928     WITH_WEBDAV=""
10929     ;;
10930 esac
10931 AC_SUBST(WITH_WEBDAV)
10933 dnl ===================================================================
10934 dnl Check for disabling cve_tests
10935 dnl ===================================================================
10936 AC_MSG_CHECKING([whether to execute CVE tests])
10937 # If not explicitly enabled or disabled, default
10938 if test -z "$enable_cve_tests"; then
10939     case "$OS" in
10940     WNT)
10941         # Default cves off for Windows with its wild and wonderful
10942         # variety of AV software kicking in and panicking
10943         enable_cve_tests=no
10944         ;;
10945     *)
10946         # otherwise yes
10947         enable_cve_tests=yes
10948         ;;
10949     esac
10951 if test "$enable_cve_tests" = "no"; then
10952     AC_MSG_RESULT([no])
10953     DISABLE_CVE_TESTS=TRUE
10954     AC_SUBST(DISABLE_CVE_TESTS)
10955 else
10956     AC_MSG_RESULT([yes])
10959 dnl ===================================================================
10960 dnl Check for enabling chart XShape tests
10961 dnl ===================================================================
10962 AC_MSG_CHECKING([whether to execute chart XShape tests])
10963 if test "$enable_chart_tests" = "yes" -o '(' "$_os" = "WINNT" -a "$enable_chart_tests" != "no" ')'; then
10964     AC_MSG_RESULT([yes])
10965     ENABLE_CHART_TESTS=TRUE
10966     AC_SUBST(ENABLE_CHART_TESTS)
10967 else
10968     AC_MSG_RESULT([no])
10971 dnl ===================================================================
10972 dnl Check for system openssl
10973 dnl ===================================================================
10974 ENABLE_OPENSSL=
10975 AC_MSG_CHECKING([whether to disable OpenSSL usage])
10976 if test "$enable_openssl" = "yes"; then
10977     AC_MSG_RESULT([no])
10978     ENABLE_OPENSSL=TRUE
10979     if test "$_os" = Darwin ; then
10980         # OpenSSL is deprecated when building for 10.7 or later.
10981         #
10982         # http://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
10983         # http://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
10985         with_system_openssl=no
10986         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10987     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
10988             && test "$with_system_openssl" != "no"; then
10989         with_system_openssl=yes
10990         SYSTEM_OPENSSL=TRUE
10991         OPENSSL_CFLAGS=
10992         OPENSSL_LIBS="-lssl -lcrypto"
10993     else
10994         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10995     fi
10996     if test "$with_system_openssl" = "yes"; then
10997         AC_MSG_CHECKING([whether openssl supports SHA512])
10998         AC_LANG_PUSH([C])
10999         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
11000             SHA512_CTX context;
11001 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
11002         AC_LANG_POP(C)
11003     fi
11004 else
11005     AC_MSG_RESULT([yes])
11007     # warn that although OpenSSL is disabled, system libraries may depend on it
11008     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
11009     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
11012 AC_SUBST([ENABLE_OPENSSL])
11014 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
11015     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
11016         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
11017         enable_cipher_openssl_backend=no
11018     else
11019         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
11020     fi
11022 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
11023 ENABLE_CIPHER_OPENSSL_BACKEND=
11024 if test "$enable_cipher_openssl_backend" = yes; then
11025     AC_MSG_RESULT([yes])
11026     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
11027 else
11028     AC_MSG_RESULT([no])
11030 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
11032 dnl ===================================================================
11033 dnl Select the crypto backends used by LO
11034 dnl ===================================================================
11036 if test "$build_crypto" = yes; then
11037     if test "$OS" = WNT; then
11038         BUILD_TYPE="$BUILD_TYPE CRYPTO_MSCAPI"
11039         AC_DEFINE([USE_CRYPTO_MSCAPI])
11040     elif test "$ENABLE_NSS" = TRUE; then
11041         BUILD_TYPE="$BUILD_TYPE CRYPTO_NSS"
11042         AC_DEFINE([USE_CRYPTO_NSS])
11043     fi
11046 dnl ===================================================================
11047 dnl Check for building gnutls
11048 dnl ===================================================================
11049 AC_MSG_CHECKING([whether to use gnutls])
11050 if test "$WITH_WEBDAV" = "neon" -a "$with_system_neon" = no -a "$enable_openssl" = "no"; then
11051     AC_MSG_RESULT([yes])
11052     AM_PATH_LIBGCRYPT()
11053     PKG_CHECK_MODULES(GNUTLS, [gnutls],,
11054         AC_MSG_ERROR([[Disabling OpenSSL was requested, but GNUTLS is not
11055                       available in the system to use as replacement.]]))
11056     FilterLibs "${LIBGCRYPT_LIBS}"
11057     LIBGCRYPT_LIBS="${filteredlibs}"
11058 else
11059     AC_MSG_RESULT([no])
11062 AC_SUBST([LIBGCRYPT_CFLAGS])
11063 AC_SUBST([LIBGCRYPT_LIBS])
11065 dnl ===================================================================
11066 dnl Check for system redland
11067 dnl ===================================================================
11068 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
11069 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
11070 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
11071 if test "$with_system_redland" = "yes"; then
11072     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
11073             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
11074 else
11075     RAPTOR_MAJOR="0"
11076     RASQAL_MAJOR="3"
11077     REDLAND_MAJOR="0"
11079 AC_SUBST(RAPTOR_MAJOR)
11080 AC_SUBST(RASQAL_MAJOR)
11081 AC_SUBST(REDLAND_MAJOR)
11083 dnl ===================================================================
11084 dnl Check for system hunspell
11085 dnl ===================================================================
11086 AC_MSG_CHECKING([which libhunspell to use])
11087 if test "$with_system_hunspell" = "yes"; then
11088     AC_MSG_RESULT([external])
11089     SYSTEM_HUNSPELL=TRUE
11090     AC_LANG_PUSH([C++])
11091     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
11092     if test "$HUNSPELL_PC" != "TRUE"; then
11093         AC_CHECK_HEADER(hunspell.hxx, [],
11094             [
11095             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
11096             [AC_MSG_ERROR(hunspell headers not found.)], [])
11097             ], [])
11098         AC_CHECK_LIB([hunspell], [main], [:],
11099            [ AC_MSG_ERROR(hunspell library not found.) ], [])
11100         HUNSPELL_LIBS=-lhunspell
11101     fi
11102     AC_LANG_POP([C++])
11103     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11104     FilterLibs "${HUNSPELL_LIBS}"
11105     HUNSPELL_LIBS="${filteredlibs}"
11106 else
11107     AC_MSG_RESULT([internal])
11108     SYSTEM_HUNSPELL=
11109     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
11110     if test "$COM" = "MSC"; then
11111         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
11112     else
11113         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
11114     fi
11115     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
11117 AC_SUBST(SYSTEM_HUNSPELL)
11118 AC_SUBST(HUNSPELL_CFLAGS)
11119 AC_SUBST(HUNSPELL_LIBS)
11121 dnl ===================================================================
11122 dnl Check for system zxing
11123 dnl ===================================================================
11124 AC_MSG_CHECKING([whether to use zxing])
11125 if test "$enable_zxing" = "no"; then
11126     AC_MSG_RESULT([no])
11127     ENABLE_ZXING=
11128     SYSTEM_ZXING=
11129 else
11130     AC_MSG_RESULT([yes])
11131     ENABLE_ZXING=TRUE
11132     AC_MSG_CHECKING([which libzxing to use])
11133     if test "$with_system_zxing" = "yes"; then
11134         AC_MSG_RESULT([external])
11135         SYSTEM_ZXING=TRUE
11136         ZXING_CFLAGS=
11137         AC_LANG_PUSH([C++])
11138         save_CXXFLAGS=$CXXFLAGS
11139         save_IFS=$IFS
11140         IFS=$P_SEP
11141         for i in $CPLUS_INCLUDE_PATH /usr/include; do
11142             dnl Reset IFS as soon as possible, to avoid unexpected side effects (and the
11143             dnl "/usr/include" fallback makes sure we get here at least once; resetting rather than
11144             dnl unsetting follows the advice at <http://git.savannah.gnu.org/gitweb/?p=autoconf.git;
11145             dnl a=commit;h=e51c9919f2cf70185b7916ac040bc0bbfd0f743b> "Add recommendation on (not)
11146             dnl unsetting IFS."):
11147             IFS=$save_IFS
11148             dnl TODO: GCC and Clang treat empty paths in CPLUS_INCLUDE_PATH like ".", but we simply
11149             dnl ignore them here:
11150             if test -z "$i"; then
11151                 continue
11152             fi
11153             dnl TODO: White space in $i would cause problems:
11154             CXXFLAGS="$save_CXXFLAGS -I$i/ZXing"
11155             AC_CHECK_HEADER(MultiFormatWriter.h, [ZXING_CFLAGS=-I$i/ZXing; break],
11156                 [unset ac_cv_header_MultiFormatWriter_h], [#include <stdexcept>])
11157         done
11158         CXXFLAGS=$save_CXXFLAGS
11159         if test -z "$ZXING_CFLAGS"; then
11160             AC_MSG_ERROR(zxing headers not found.)
11161         fi
11162         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
11163             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
11164             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
11165         AC_LANG_POP([C++])
11166         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11167         FilterLibs "${ZXING_LIBS}"
11168         ZXING_LIBS="${filteredlibs}"
11169     else
11170         AC_MSG_RESULT([internal])
11171         SYSTEM_ZXING=
11172         BUILD_TYPE="$BUILD_TYPE ZXING"
11173     fi
11174     if test "$ENABLE_ZXING" = TRUE; then
11175         AC_DEFINE(ENABLE_ZXING)
11176     fi
11178 AC_SUBST(SYSTEM_ZXING)
11179 AC_SUBST(ENABLE_ZXING)
11180 AC_SUBST(ZXING_CFLAGS)
11181 AC_SUBST(ZXING_LIBS)
11183 dnl ===================================================================
11184 dnl Check for system box2d
11185 dnl ===================================================================
11186 AC_MSG_CHECKING([which box2d to use])
11187 if test "$with_system_box2d" = "yes"; then
11188     AC_MSG_RESULT([external])
11189     SYSTEM_BOX2D=TRUE
11190     AC_LANG_PUSH([C++])
11191     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
11192         [BOX2D_H_FOUND='FALSE'])
11193     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
11194         _BOX2D_LIB=box2d
11195         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
11196     else
11197         # fail this. there's no other alternative to check when we are here.
11198         AC_CHECK_HEADER([Box2D/Box2D.h], [],
11199             [AC_MSG_ERROR(box2d headers not found.)])
11200         _BOX2D_LIB=Box2D
11201         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11202     fi
11203     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11204         [ AC_MSG_ERROR(box2d library not found.) ], [])
11205     BOX2D_LIBS=-l$_BOX2D_LIB
11206     AC_LANG_POP([C++])
11207     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11208     FilterLibs "${BOX2D_LIBS}"
11209     BOX2D_LIBS="${filteredlibs}"
11210 else
11211     AC_MSG_RESULT([internal])
11212     SYSTEM_BOX2D=
11213     BUILD_TYPE="$BUILD_TYPE BOX2D"
11215 AC_SUBST(SYSTEM_BOX2D)
11216 AC_SUBST(BOX2D_CFLAGS)
11217 AC_SUBST(BOX2D_LIBS)
11219 dnl ===================================================================
11220 dnl Checking for altlinuxhyph
11221 dnl ===================================================================
11222 AC_MSG_CHECKING([which altlinuxhyph to use])
11223 if test "$with_system_altlinuxhyph" = "yes"; then
11224     AC_MSG_RESULT([external])
11225     SYSTEM_HYPH=TRUE
11226     AC_CHECK_HEADER(hyphen.h, [],
11227        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11228     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11229        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11230        [#include <hyphen.h>])
11231     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11232         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11233     if test -z "$HYPHEN_LIB"; then
11234         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11235            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11236     fi
11237     if test -z "$HYPHEN_LIB"; then
11238         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11239            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11240     fi
11241 else
11242     AC_MSG_RESULT([internal])
11243     SYSTEM_HYPH=
11244     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11245     if test "$COM" = "MSC"; then
11246         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11247     else
11248         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11249     fi
11251 AC_SUBST(SYSTEM_HYPH)
11252 AC_SUBST(HYPHEN_LIB)
11254 dnl ===================================================================
11255 dnl Checking for mythes
11256 dnl ===================================================================
11257 AC_MSG_CHECKING([which mythes to use])
11258 if test "$with_system_mythes" = "yes"; then
11259     AC_MSG_RESULT([external])
11260     SYSTEM_MYTHES=TRUE
11261     AC_LANG_PUSH([C++])
11262     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11263     if test "$MYTHES_PKGCONFIG" = "no"; then
11264         AC_CHECK_HEADER(mythes.hxx, [],
11265             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11266         AC_CHECK_LIB([mythes-1.2], [main], [:],
11267             [ MYTHES_FOUND=no], [])
11268     if test "$MYTHES_FOUND" = "no"; then
11269         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11270                 [ MYTHES_FOUND=no], [])
11271     fi
11272     if test "$MYTHES_FOUND" = "no"; then
11273         AC_MSG_ERROR([mythes library not found!.])
11274     fi
11275     fi
11276     AC_LANG_POP([C++])
11277     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11278     FilterLibs "${MYTHES_LIBS}"
11279     MYTHES_LIBS="${filteredlibs}"
11280 else
11281     AC_MSG_RESULT([internal])
11282     SYSTEM_MYTHES=
11283     BUILD_TYPE="$BUILD_TYPE MYTHES"
11284     if test "$COM" = "MSC"; then
11285         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11286     else
11287         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11288     fi
11290 AC_SUBST(SYSTEM_MYTHES)
11291 AC_SUBST(MYTHES_CFLAGS)
11292 AC_SUBST(MYTHES_LIBS)
11294 dnl ===================================================================
11295 dnl How should we build the linear programming solver ?
11296 dnl ===================================================================
11298 ENABLE_COINMP=
11299 AC_MSG_CHECKING([whether to build with CoinMP])
11300 if test "$enable_coinmp" != "no"; then
11301     ENABLE_COINMP=TRUE
11302     AC_MSG_RESULT([yes])
11303     if test "$with_system_coinmp" = "yes"; then
11304         SYSTEM_COINMP=TRUE
11305         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11306         FilterLibs "${COINMP_LIBS}"
11307         COINMP_LIBS="${filteredlibs}"
11308     else
11309         BUILD_TYPE="$BUILD_TYPE COINMP"
11310     fi
11311 else
11312     AC_MSG_RESULT([no])
11314 AC_SUBST(ENABLE_COINMP)
11315 AC_SUBST(SYSTEM_COINMP)
11316 AC_SUBST(COINMP_CFLAGS)
11317 AC_SUBST(COINMP_LIBS)
11319 ENABLE_LPSOLVE=
11320 AC_MSG_CHECKING([whether to build with lpsolve])
11321 if test "$enable_lpsolve" != "no"; then
11322     ENABLE_LPSOLVE=TRUE
11323     AC_MSG_RESULT([yes])
11324 else
11325     AC_MSG_RESULT([no])
11327 AC_SUBST(ENABLE_LPSOLVE)
11329 if test "$ENABLE_LPSOLVE" = TRUE; then
11330     AC_MSG_CHECKING([which lpsolve to use])
11331     if test "$with_system_lpsolve" = "yes"; then
11332         AC_MSG_RESULT([external])
11333         SYSTEM_LPSOLVE=TRUE
11334         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11335            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11336         save_LIBS=$LIBS
11337         # some systems need this. Like Ubuntu...
11338         AC_CHECK_LIB(m, floor)
11339         AC_CHECK_LIB(dl, dlopen)
11340         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11341             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11342         LIBS=$save_LIBS
11343     else
11344         AC_MSG_RESULT([internal])
11345         SYSTEM_LPSOLVE=
11346         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11347     fi
11349 AC_SUBST(SYSTEM_LPSOLVE)
11351 dnl ===================================================================
11352 dnl Checking for libexttextcat
11353 dnl ===================================================================
11354 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11355 if test "$with_system_libexttextcat" = "yes"; then
11356     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11358 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11360 dnl ===================================================================
11361 dnl Checking for libnumbertext
11362 dnl ===================================================================
11363 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11364 if test "$with_system_libnumbertext" = "yes"; then
11365     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11366     SYSTEM_LIBNUMBERTEXT=YES
11367 else
11368     SYSTEM_LIBNUMBERTEXT=
11369     AC_LANG_PUSH([C++])
11370     save_CPPFLAGS=$CPPFLAGS
11371     CPPFLAGS="$CPPFLAGS $CXXFLAGS_CXX11"
11372     AC_CHECK_HEADERS([codecvt regex])
11373     AS_IF([test "x$ac_cv_header_codecvt" != xyes -o "x$ac_cv_header_regex" != xyes],
11374             [ LIBNUMBERTEXT_CFLAGS=''
11375               AC_MSG_WARN([No system-provided libnumbertext or codecvt/regex C++11 headers (min. libstdc++ 4.9).
11376                            Enable libnumbertext fallback (missing number to number name conversion).])
11377             ])
11378     CPPFLAGS=$save_CPPFLAGS
11379     AC_LANG_POP([C++])
11381 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11382 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11383 AC_SUBST(LIBNUMBERTEXT_CFLAGS)
11385 dnl ***************************************
11386 dnl testing libc version for Linux...
11387 dnl ***************************************
11388 if test "$_os" = "Linux"; then
11389     AC_MSG_CHECKING([whether the libc is recent enough])
11390     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
11391     #include <features.h>
11392     #if defined(__GNU_LIBRARY__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1))
11393     #error glibc >= 2.1 is required
11394     #endif
11395     ]])],, [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([no, upgrade libc])])
11398 dnl =========================================
11399 dnl Check for uuidgen
11400 dnl =========================================
11401 if test "$_os" = "WINNT"; then
11402     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11403     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11404     UUIDGEN=uuidgen.exe
11405     AC_SUBST(UUIDGEN)
11406 else
11407     AC_PATH_PROG([UUIDGEN], [uuidgen])
11408     if test -z "$UUIDGEN"; then
11409         AC_MSG_WARN([uuid is needed for building installation sets])
11410     fi
11413 dnl ***************************************
11414 dnl Checking for bison and flex
11415 dnl ***************************************
11416 AC_PATH_PROG(BISON, bison)
11417 if test -z "$BISON"; then
11418     AC_MSG_ERROR([no bison found in \$PATH, install it])
11419 else
11420     AC_MSG_CHECKING([the bison version])
11421     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11422     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11423     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11424     dnl cause
11425     dnl
11426     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]
11427     dnl   typedef union YYSTYPE
11428     dnl           ~~~~~~^~~~~~~
11429     dnl
11430     dnl while at least 3.4.1 is know to be good:
11431     if test "$COMPILER_PLUGINS" = TRUE; then
11432         if test "$_bison_longver" -lt 2004; then
11433             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11434         fi
11435     else
11436         if test "$_bison_longver" -lt 2000; then
11437             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11438         fi
11439     fi
11441 AC_SUBST([BISON])
11443 AC_PATH_PROG(FLEX, flex)
11444 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11445     FLEX=`cygpath -m $FLEX`
11447 if test -z "$FLEX"; then
11448     AC_MSG_ERROR([no flex found in \$PATH, install it])
11449 else
11450     AC_MSG_CHECKING([the flex version])
11451     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11452     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11453         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11454     fi
11456 AC_SUBST([FLEX])
11457 dnl ***************************************
11458 dnl Checking for patch
11459 dnl ***************************************
11460 AC_PATH_PROG(PATCH, patch)
11461 if test -z "$PATCH"; then
11462     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11465 dnl On Solaris or macOS, check if --with-gnu-patch was used
11466 if test "$_os" = "SunOS" -o "$_os" = "Darwin"; then
11467     if test -z "$with_gnu_patch"; then
11468         GNUPATCH=$PATCH
11469     else
11470         if test -x "$with_gnu_patch"; then
11471             GNUPATCH=$with_gnu_patch
11472         else
11473             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11474         fi
11475     fi
11477     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11478     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11479         AC_MSG_RESULT([yes])
11480     else
11481         AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11482     fi
11483 else
11484     GNUPATCH=$PATCH
11487 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11488     GNUPATCH=`cygpath -m $GNUPATCH`
11491 dnl We also need to check for --with-gnu-cp
11493 if test -z "$with_gnu_cp"; then
11494     # check the place where the good stuff is hidden on Solaris...
11495     if test -x /usr/gnu/bin/cp; then
11496         GNUCP=/usr/gnu/bin/cp
11497     else
11498         AC_PATH_PROGS(GNUCP, gnucp cp)
11499     fi
11500     if test -z $GNUCP; then
11501         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11502     fi
11503 else
11504     if test -x "$with_gnu_cp"; then
11505         GNUCP=$with_gnu_cp
11506     else
11507         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11508     fi
11511 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11512     GNUCP=`cygpath -m $GNUCP`
11515 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11516 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11517     AC_MSG_RESULT([yes])
11518 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11519     AC_MSG_RESULT([yes])
11520 else
11521     case "$build_os" in
11522     darwin*|macos*|netbsd*|openbsd*|freebsd*|dragonfly*|aix*)
11523         x_GNUCP=[\#]
11524         GNUCP=''
11525         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11526         ;;
11527     *)
11528         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11529         ;;
11530     esac
11533 AC_SUBST(GNUPATCH)
11534 AC_SUBST(GNUCP)
11535 AC_SUBST(x_GNUCP)
11537 dnl ***************************************
11538 dnl testing assembler path
11539 dnl ***************************************
11540 ML_EXE=""
11541 if test "$_os" = "WINNT"; then
11542     case "$WIN_HOST_ARCH" in
11543     x86) assembler=ml.exe ;;
11544     x64) assembler=ml64.exe ;;
11545     arm64) assembler=armasm64.exe ;;
11546     esac
11548     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11549     if test -f "$MSVC_HOST_PATH/$assembler"; then
11550         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11551         AC_MSG_RESULT([$ML_EXE])
11552     else
11553         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11554     fi
11557 AC_SUBST(ML_EXE)
11559 dnl ===================================================================
11560 dnl We need zip and unzip
11561 dnl ===================================================================
11562 AC_PATH_PROG(ZIP, zip)
11563 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11564 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11565     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],,)
11568 AC_PATH_PROG(UNZIP, unzip)
11569 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11571 dnl ===================================================================
11572 dnl Zip must be a specific type for different build types.
11573 dnl ===================================================================
11574 if test $build_os = cygwin; then
11575     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11576         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11577     fi
11580 dnl ===================================================================
11581 dnl We need touch with -h option support.
11582 dnl ===================================================================
11583 AC_PATH_PROG(TOUCH, touch)
11584 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11585 touch "$WARNINGS_FILE"
11586 if ! "$TOUCH" -h "$WARNINGS_FILE" 2>/dev/null > /dev/null; then
11587     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],,)
11590 dnl ===================================================================
11591 dnl Check for system epoxy
11592 dnl ===================================================================
11593 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2], ["-I${WORKDIR}/UnpackedTarball/epoxy/include"])
11595 dnl ===================================================================
11596 dnl Set vcl option: coordinate device in double or sal_Int32
11597 dnl ===================================================================
11599 dnl disabled for now, we don't want subtle differences between OSs
11600 dnl AC_MSG_CHECKING([Type to use for Device Pixel coordinates])
11601 dnl if test "$_os" = "Darwin" -o  $_os = iOS ; then
11602 dnl     AC_DEFINE(VCL_FLOAT_DEVICE_PIXEL)
11603 dnl     AC_MSG_RESULT([double])
11604 dnl else
11605 dnl     AC_MSG_RESULT([sal_Int32])
11606 dnl fi
11608 dnl ===================================================================
11609 dnl Show which vclplugs will be built.
11610 dnl ===================================================================
11611 R=""
11612 if test "$USING_X11" != TRUE; then
11613     enable_gtk3=no
11616 ENABLE_GTK3=""
11617 if test "x$enable_gtk3" = "xyes"; then
11618     ENABLE_GTK3="TRUE"
11619     AC_DEFINE(ENABLE_GTK3)
11620     R="$R gtk3"
11622 AC_SUBST(ENABLE_GTK3)
11624 ENABLE_GTK3_KDE5=""
11625 if test "x$enable_gtk3_kde5" = "xyes"; then
11626     ENABLE_GTK3_KDE5="TRUE"
11627     AC_DEFINE(ENABLE_GTK3_KDE5)
11628     R="$R gtk3_kde5"
11630 AC_SUBST(ENABLE_GTK3_KDE5)
11632 ENABLE_GTK4=""
11633 if test "x$enable_gtk4" = "xyes"; then
11634     ENABLE_GTK4="TRUE"
11635     AC_DEFINE(ENABLE_GTK4)
11636     R="$R gtk4"
11638 AC_SUBST(ENABLE_GTK4)
11640 ENABLE_QT5=""
11641 if test "x$enable_qt5" = "xyes"; then
11642     ENABLE_QT5="TRUE"
11643     AC_DEFINE(ENABLE_QT5)
11644     R="$R qt5"
11646 AC_SUBST(ENABLE_QT5)
11648 ENABLE_QT6=""
11649 if test "x$enable_qt6" = "xyes"; then
11650     ENABLE_QT6="TRUE"
11651     AC_DEFINE(ENABLE_QT6)
11652     R="$R qt6"
11654 AC_SUBST(ENABLE_QT6)
11657 ENABLE_KF5=""
11658 if test "x$enable_kf5" = "xyes"; then
11659     ENABLE_KF5="TRUE"
11660     AC_DEFINE(ENABLE_KF5)
11661     R="$R kf5"
11663 AC_SUBST(ENABLE_KF5)
11665 if test "x$USING_X11" = "xyes"; then
11666     R="$R gen"
11669 if test "$_os" = "WINNT"; then
11670     R="$R win"
11671 elif test "$_os" = "Darwin"; then
11672     R="$R osx"
11673 elif test "$_os" = "iOS"; then
11674     R="ios"
11675 elif test "$_os" = Android; then
11676     R="android"
11679 build_vcl_plugins="$R"
11680 if test -z "$build_vcl_plugins"; then
11681     build_vcl_plugins=" none"
11683 AC_MSG_NOTICE([VCLplugs to be built:${build_vcl_plugins}])
11684 VCL_PLUGIN_INFO=$R
11685 AC_SUBST([VCL_PLUGIN_INFO])
11687 dnl ===================================================================
11688 dnl Check for GTK libraries
11689 dnl ===================================================================
11691 GTK3_CFLAGS=""
11692 GTK3_LIBS=""
11693 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11694     if test "$with_system_cairo" = no; then
11695         add_warning 'Non-system cairo combined with gtk3 is assumed to cause trouble; proceed at your own risk.'
11696     fi
11697     : ${with_system_cairo:=yes}
11698     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)
11699     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11700     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11701     FilterLibs "${GTK3_LIBS}"
11702     GTK3_LIBS="${filteredlibs}"
11704     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11705     if test "$with_system_epoxy" != "yes"; then
11706         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11707         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11708                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11709     fi
11711 AC_SUBST(GTK3_LIBS)
11712 AC_SUBST(GTK3_CFLAGS)
11714 GTK4_CFLAGS=""
11715 GTK4_LIBS=""
11716 if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then
11717     if test "$with_system_cairo" = no; then
11718         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11719     fi
11720     : ${with_system_cairo:=yes}
11721     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11722     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11723     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11724     FilterLibs "${GTK4_LIBS}"
11725     GTK4_LIBS="${filteredlibs}"
11727     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11728     if test "$with_system_epoxy" != "yes"; then
11729         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11730         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11731                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11732     fi
11734 AC_SUBST(GTK4_LIBS)
11735 AC_SUBST(GTK4_CFLAGS)
11737 if test "$enable_introspection" = yes; then
11738     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11739         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11740     else
11741         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
11742     fi
11745 dnl ===================================================================
11746 dnl check for dbus support
11747 dnl ===================================================================
11748 ENABLE_DBUS=""
11749 DBUS_CFLAGS=""
11750 DBUS_LIBS=""
11751 DBUS_GLIB_CFLAGS=""
11752 DBUS_GLIB_LIBS=""
11753 DBUS_HAVE_GLIB=""
11755 if test "$enable_dbus" = "no"; then
11756     test_dbus=no
11759 AC_MSG_CHECKING([whether to enable DBUS support])
11760 if test "$test_dbus" = "yes"; then
11761     ENABLE_DBUS="TRUE"
11762     AC_MSG_RESULT([yes])
11763     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
11764     AC_DEFINE(ENABLE_DBUS)
11765     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11766     FilterLibs "${DBUS_LIBS}"
11767     DBUS_LIBS="${filteredlibs}"
11769     # Glib is needed for BluetoothServer
11770     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
11771     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
11772         [
11773             DBUS_HAVE_GLIB="TRUE"
11774             AC_DEFINE(DBUS_HAVE_GLIB,1)
11775         ],
11776         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
11777     )
11778 else
11779     AC_MSG_RESULT([no])
11782 AC_SUBST(ENABLE_DBUS)
11783 AC_SUBST(DBUS_CFLAGS)
11784 AC_SUBST(DBUS_LIBS)
11785 AC_SUBST(DBUS_GLIB_CFLAGS)
11786 AC_SUBST(DBUS_GLIB_LIBS)
11787 AC_SUBST(DBUS_HAVE_GLIB)
11789 AC_MSG_CHECKING([whether to enable Impress remote control])
11790 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
11791     AC_MSG_RESULT([yes])
11792     ENABLE_SDREMOTE=TRUE
11793     SDREMOTE_ENTITLEMENT="      <key>com.apple.security.network.server</key>
11794         <true/>"
11795     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
11797     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
11798         # The Bluetooth code doesn't compile with macOS SDK 10.15
11799         if test "$enable_sdremote_bluetooth" = yes; then
11800             AC_MSG_ERROR([macOS SDK $macosx_sdk does not currently support --enable-sdremote-bluetooth])
11801         fi
11802         add_warning "not building the bluetooth part of the sdremote - used api was removed from macOS SDK 10.15"
11803         enable_sdremote_bluetooth=no
11804     fi
11805     # If not explicitly enabled or disabled, default
11806     if test -z "$enable_sdremote_bluetooth"; then
11807         case "$OS" in
11808         LINUX|MACOSX|WNT)
11809             # Default to yes for these
11810             enable_sdremote_bluetooth=yes
11811             ;;
11812         *)
11813             # otherwise no
11814             enable_sdremote_bluetooth=no
11815             ;;
11816         esac
11817     fi
11818     # $enable_sdremote_bluetooth is guaranteed non-empty now
11820     if test "$enable_sdremote_bluetooth" != "no"; then
11821         if test "$OS" = "LINUX"; then
11822             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
11823                 AC_MSG_RESULT([yes])
11824                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
11825                 dnl ===================================================================
11826                 dnl Check for system bluez
11827                 dnl ===================================================================
11828                 AC_MSG_CHECKING([which Bluetooth header to use])
11829                 if test "$with_system_bluez" = "yes"; then
11830                     AC_MSG_RESULT([external])
11831                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
11832                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
11833                     SYSTEM_BLUEZ=TRUE
11834                 else
11835                     AC_MSG_RESULT([internal])
11836                     SYSTEM_BLUEZ=
11837                 fi
11838             else
11839                 AC_MSG_RESULT([no, dbus disabled])
11840                 ENABLE_SDREMOTE_BLUETOOTH=
11841                 SYSTEM_BLUEZ=
11842             fi
11843         else
11844             AC_MSG_RESULT([yes])
11845             ENABLE_SDREMOTE_BLUETOOTH=TRUE
11846             SYSTEM_BLUEZ=
11847             SDREMOTE_ENTITLEMENT="$SDREMOTE_ENTITLEMENT
11848         <key>com.apple.security.device.bluetooth</key>
11849         <true/>"
11850         fi
11851     else
11852         AC_MSG_RESULT([no])
11853         ENABLE_SDREMOTE_BLUETOOTH=
11854         SYSTEM_BLUEZ=
11855     fi
11856 else
11857     ENABLE_SDREMOTE=
11858     SYSTEM_BLUEZ=
11859     AC_MSG_RESULT([no])
11861 AC_SUBST(ENABLE_SDREMOTE)
11862 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
11863 AC_SUBST(SDREMOTE_ENTITLEMENT)
11864 AC_SUBST(SYSTEM_BLUEZ)
11866 dnl ===================================================================
11867 dnl Check whether to enable GIO support
11868 dnl ===================================================================
11869 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11870     AC_MSG_CHECKING([whether to enable GIO support])
11871     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
11872         dnl Need at least 2.26 for the dbus support.
11873         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
11874                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
11875         if test "$ENABLE_GIO" = "TRUE"; then
11876             AC_DEFINE(ENABLE_GIO)
11877             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11878             FilterLibs "${GIO_LIBS}"
11879             GIO_LIBS="${filteredlibs}"
11880         fi
11881     else
11882         AC_MSG_RESULT([no])
11883     fi
11885 AC_SUBST(ENABLE_GIO)
11886 AC_SUBST(GIO_CFLAGS)
11887 AC_SUBST(GIO_LIBS)
11890 dnl ===================================================================
11892 SPLIT_APP_MODULES=""
11893 if test "$enable_split_app_modules" = "yes"; then
11894     SPLIT_APP_MODULES="TRUE"
11896 AC_SUBST(SPLIT_APP_MODULES)
11898 SPLIT_OPT_FEATURES=""
11899 if test "$enable_split_opt_features" = "yes"; then
11900     SPLIT_OPT_FEATURES="TRUE"
11902 AC_SUBST(SPLIT_OPT_FEATURES)
11904 dnl ===================================================================
11905 dnl Check whether the GStreamer libraries are available.
11906 dnl ===================================================================
11908 ENABLE_GSTREAMER_1_0=""
11910 if test "$test_gstreamer_1_0" = yes; then
11912     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
11913     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
11914         ENABLE_GSTREAMER_1_0="TRUE"
11915         AC_MSG_RESULT([yes])
11916         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
11917         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11918         FilterLibs "${GSTREAMER_1_0_LIBS}"
11919         GSTREAMER_1_0_LIBS="${filteredlibs}"
11920         AC_DEFINE(ENABLE_GSTREAMER_1_0)
11921     else
11922         AC_MSG_RESULT([no])
11923     fi
11925 AC_SUBST(GSTREAMER_1_0_CFLAGS)
11926 AC_SUBST(GSTREAMER_1_0_LIBS)
11927 AC_SUBST(ENABLE_GSTREAMER_1_0)
11929 ENABLE_OPENGL_TRANSITIONS=
11930 ENABLE_OPENGL_CANVAS=
11931 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
11932    : # disable
11933 elif test "$_os" = "Darwin"; then
11934     # We use frameworks on macOS, no need for detail checks
11935     ENABLE_OPENGL_TRANSITIONS=TRUE
11936     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11937     ENABLE_OPENGL_CANVAS=TRUE
11938 elif test $_os = WINNT; then
11939     ENABLE_OPENGL_TRANSITIONS=TRUE
11940     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11941     ENABLE_OPENGL_CANVAS=TRUE
11942 else
11943     if test "$USING_X11" = TRUE; then
11944         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
11945         ENABLE_OPENGL_TRANSITIONS=TRUE
11946         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11947         ENABLE_OPENGL_CANVAS=TRUE
11948     fi
11951 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
11952 AC_SUBST(ENABLE_OPENGL_CANVAS)
11954 dnl =================================================
11955 dnl Check whether to build with OpenCL support.
11956 dnl =================================================
11958 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
11959     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
11960     # platform (optional at run-time, used through clew).
11961     BUILD_TYPE="$BUILD_TYPE OPENCL"
11962     AC_DEFINE(HAVE_FEATURE_OPENCL)
11965 dnl =================================================
11966 dnl Check whether to build with dconf support.
11967 dnl =================================================
11969 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
11970     PKG_CHECK_MODULES([DCONF], [dconf >= 0.15.2], [], [
11971         if test "$enable_dconf" = yes; then
11972             AC_MSG_ERROR([dconf not found])
11973         else
11974             enable_dconf=no
11975         fi])
11977 AC_MSG_CHECKING([whether to enable dconf])
11978 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
11979     DCONF_CFLAGS=
11980     DCONF_LIBS=
11981     ENABLE_DCONF=
11982     AC_MSG_RESULT([no])
11983 else
11984     ENABLE_DCONF=TRUE
11985     AC_DEFINE(ENABLE_DCONF)
11986     AC_MSG_RESULT([yes])
11988 AC_SUBST([DCONF_CFLAGS])
11989 AC_SUBST([DCONF_LIBS])
11990 AC_SUBST([ENABLE_DCONF])
11992 # pdf import?
11993 AC_MSG_CHECKING([whether to build the PDF import feature])
11994 ENABLE_PDFIMPORT=
11995 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
11996     AC_MSG_RESULT([yes])
11997     ENABLE_PDFIMPORT=TRUE
11998     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
11999 else
12000     AC_MSG_RESULT([no])
12003 # Pdfium?
12004 AC_MSG_CHECKING([whether to build PDFium])
12005 ENABLE_PDFIUM=
12006 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
12007     AC_MSG_RESULT([yes])
12008     ENABLE_PDFIUM=TRUE
12009     BUILD_TYPE="$BUILD_TYPE PDFIUM"
12010 else
12011     AC_MSG_RESULT([no])
12013 AC_SUBST(ENABLE_PDFIUM)
12015 if test "$ENABLE_PDFIUM" = "TRUE"; then
12016         AC_MSG_CHECKING([which OpenJPEG library to use])
12017         if test "$with_system_openjpeg" = "yes"; then
12018                 SYSTEM_OPENJPEG2=TRUE
12019                 AC_MSG_RESULT([external])
12020                 PKG_CHECK_MODULES( OPENJPEG2, libopenjp2 )
12021                 OPENJPEG2_CFLAGS=$(printf '%s' "$OPENJPEG2_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12022                 FilterLibs "${OPENJPEG2_LIBS}"
12023                 OPENJPEG2_LIBS="${filteredlibs}"
12024         else
12025                 SYSTEM_OPENJPEG2=FALSE
12026                 AC_MSG_RESULT([internal])
12027         fi
12028         AC_MSG_CHECKING([which Abseil library to use])
12029         if test "$with_system_abseil" = "yes"; then
12030                 AC_MSG_RESULT([external])
12031                 SYSTEM_ABSEIL=TRUE
12032                 AC_LANG_PUSH([C++])
12033                 AC_CHECK_HEADER(absl/types/bad_optional_access.h, [],
12034                         [AC_MSG_ERROR(abseil headers not found.)], [])
12035                 #ABSEIL_CFLAGS=-I/usr/include
12036                 AC_CHECK_LIB([absl_bad_optional_access], [main], [ABSEIL_LIBS=-labsl_bad_optional_access],
12037                         [ AC_MSG_ERROR([libabsl_bad_optional_access library not found.]) ])
12038                 AC_LANG_POP([C++])
12039                 ABSEIL_CFLAGS=$(printf '%s' "$ABSEIL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12040                 FilterLibs "${ABSEIL_LIBS}"
12041                 ABSEIL_LIBS="${filteredlibs}"
12042         else
12043                 AC_MSG_RESULT([internal])
12044         fi
12046 AC_SUBST(SYSTEM_OPENJPEG2)
12047 AC_SUBST(SYSTEM_ABSEIL)
12048 AC_SUBST(ABSEIL_CFLAGS)
12049 AC_SUBST(ABSEIL_LIBS)
12051 dnl ===================================================================
12052 dnl Check for poppler
12053 dnl ===================================================================
12054 ENABLE_POPPLER=
12055 AC_MSG_CHECKING([whether to build Poppler])
12056 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
12057     AC_MSG_RESULT([yes])
12058     ENABLE_POPPLER=TRUE
12059     AC_DEFINE(HAVE_FEATURE_POPPLER)
12060 else
12061     AC_MSG_RESULT([no])
12063 AC_SUBST(ENABLE_POPPLER)
12065 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
12066     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
12069 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
12070     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
12073 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
12074     dnl ===================================================================
12075     dnl Check for system poppler
12076     dnl ===================================================================
12077     AC_MSG_CHECKING([which PDF import poppler to use])
12078     if test "$with_system_poppler" = "yes"; then
12079         AC_MSG_RESULT([external])
12080         SYSTEM_POPPLER=TRUE
12081         PKG_CHECK_MODULES(POPPLER,[poppler >= 0.14 poppler-cpp])
12082         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12083         FilterLibs "${POPPLER_LIBS}"
12084         POPPLER_LIBS="${filteredlibs}"
12085     else
12086         AC_MSG_RESULT([internal])
12087         SYSTEM_POPPLER=
12088         BUILD_TYPE="$BUILD_TYPE POPPLER"
12089     fi
12090     AC_DEFINE([ENABLE_PDFIMPORT],1)
12092 AC_SUBST(ENABLE_PDFIMPORT)
12093 AC_SUBST(SYSTEM_POPPLER)
12094 AC_SUBST(POPPLER_CFLAGS)
12095 AC_SUBST(POPPLER_LIBS)
12097 # Skia?
12098 ENABLE_SKIA=
12099 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
12100     # Skia now requires at least freetype2 >= 2.8.1, which is less that what LO requires as system freetype.
12101     if test "$SYSTEM_FREETYPE" = TRUE; then
12102         PKG_CHECK_EXISTS(freetype2 >= 21.0.15, # 21.0.15 = 2.8.1
12103             [skia_freetype_ok=yes],
12104             [skia_freetype_ok=no])
12105     else # internal is ok
12106         skia_freetype_ok=yes
12107     fi
12108     AC_MSG_CHECKING([whether to build Skia])
12109     if test "$skia_freetype_ok" = "yes"; then
12110         if test "$enable_skia" = "debug"; then
12111             AC_MSG_RESULT([yes (debug)])
12112             ENABLE_SKIA_DEBUG=TRUE
12113         else
12114             AC_MSG_RESULT([yes])
12115             ENABLE_SKIA_DEBUG=
12116         fi
12117         ENABLE_SKIA=TRUE
12118         AC_DEFINE(HAVE_FEATURE_SKIA)
12119         BUILD_TYPE="$BUILD_TYPE SKIA"
12121         if test "$OS" = "MACOSX"; then
12122             AC_DEFINE(SK_SUPPORT_GPU,1)
12123             AC_DEFINE(SK_METAL,1)
12124             SKIA_GPU=METAL
12125             AC_SUBST(SKIA_GPU)
12126         else
12127             AC_DEFINE(SK_SUPPORT_GPU,1)
12128             AC_DEFINE(SK_VULKAN,1)
12129             SKIA_GPU=VULKAN
12130             AC_SUBST(SKIA_GPU)
12131         fi
12133         if test -n "$MAC_OS_X_VERSION_MIN_REQUIRED" && test "$MAC_OS_X_VERSION_MIN_REQUIRED" -lt "101200"; then
12134             SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX=1
12135             AC_SUBST(SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX)
12136         fi
12137     else
12138         AC_MSG_RESULT([no (freetype too old)])
12139         add_warning "freetype version is too old for Skia library, at least 2.8.1 required, Skia support disabled"
12140     fi
12142 else
12143     AC_MSG_CHECKING([whether to build Skia])
12144     AC_MSG_RESULT([no])
12146 AC_SUBST(ENABLE_SKIA)
12147 AC_SUBST(ENABLE_SKIA_DEBUG)
12149 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
12150 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
12151 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
12152 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
12153 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
12154 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
12155 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
12156 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F=
12157 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
12158 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
12159 HAVE_LO_CLANG_DLLEXPORTINLINES=
12161 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE; then
12162     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12163         AC_MSG_CHECKING([for Clang])
12164         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
12165     else
12166         if test "$_os" = "WINNT"; then
12167             AC_MSG_CHECKING([for clang-cl])
12168             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
12169                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
12170                 dnl explicitly set -m32/-m64
12171                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
12172                 LO_CLANG_CXX="$LO_CLANG_CC"
12173                 AC_MSG_RESULT([$LO_CLANG_CC])
12174             else
12175                 AC_MSG_RESULT([no])
12176             fi
12177         else
12178             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
12179             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
12180         fi
12181     fi
12182     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12183         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
12184         clang2_ver=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
12185         if test "$clang2_ver" -lt 50002; then
12186             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
12187             LO_CLANG_CC=
12188             LO_CLANG_CXX=
12189         fi
12190     fi
12191     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX" -a "$_os" = "WINNT"; then
12192         save_CXX="$CXX"
12193         CXX="$LO_CLANG_CXX"
12194         AC_MSG_CHECKING([whether $CXX supports -Zc:dllexportInlines-])
12195         AC_LANG_PUSH([C++])
12196         save_CXXFLAGS=$CXXFLAGS
12197         CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
12198         AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
12199                 HAVE_LO_CLANG_DLLEXPORTINLINES=TRUE
12200                 AC_MSG_RESULT([yes])
12201             ], [AC_MSG_RESULT([no])])
12202         CXXFLAGS=$save_CXXFLAGS
12203         AC_LANG_POP([C++])
12204         CXX="$save_CXX"
12205         if test -z "$HAVE_LO_CLANG_DLLEXPORTINLINES"; then
12206             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.])
12207         fi
12208     fi
12209     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
12210         # Skia is the default on Windows and Mac, so hard-require Clang.
12211         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
12212         if test "$_os" = "WINNT" -o "$_os" = "Darwin"; then
12213             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang, or use --disable-skia.])
12214         else
12215             AC_MSG_WARN([Clang compiler not found.])
12216         fi
12217     else
12219         save_CXX="$CXX"
12220         CXX="$LO_CLANG_CXX"
12221         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
12222         flag_sse2=-msse2
12223         flag_ssse3=-mssse3
12224         flag_sse41=-msse4.1
12225         flag_sse42=-msse4.2
12226         flag_avx=-mavx
12227         flag_avx2=-mavx2
12228         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
12229         flag_avx512f=-mavx512f
12230         flag_f16c=-mf16c
12231         flag_fma=-mfma
12233         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
12234         AC_LANG_PUSH([C++])
12235         save_CXXFLAGS=$CXXFLAGS
12236         CXXFLAGS="$CXXFLAGS $flag_sse2"
12237         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12238             #include <emmintrin.h>
12239             int main () {
12240                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12241                 c = _mm_xor_si128 (a, b);
12242                 return 0;
12243             }
12244             ])],
12245             [can_compile_sse2=yes],
12246             [can_compile_sse2=no])
12247         AC_LANG_POP([C++])
12248         CXXFLAGS=$save_CXXFLAGS
12249         AC_MSG_RESULT([${can_compile_sse2}])
12250         if test "${can_compile_sse2}" = "yes" ; then
12251             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
12252         fi
12254         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
12255         AC_LANG_PUSH([C++])
12256         save_CXXFLAGS=$CXXFLAGS
12257         CXXFLAGS="$CXXFLAGS $flag_ssse3"
12258         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12259             #include <tmmintrin.h>
12260             int main () {
12261                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12262                 c = _mm_maddubs_epi16 (a, b);
12263                 return 0;
12264             }
12265             ])],
12266             [can_compile_ssse3=yes],
12267             [can_compile_ssse3=no])
12268         AC_LANG_POP([C++])
12269         CXXFLAGS=$save_CXXFLAGS
12270         AC_MSG_RESULT([${can_compile_ssse3}])
12271         if test "${can_compile_ssse3}" = "yes" ; then
12272             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
12273         fi
12275         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
12276         AC_LANG_PUSH([C++])
12277         save_CXXFLAGS=$CXXFLAGS
12278         CXXFLAGS="$CXXFLAGS $flag_sse41"
12279         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12280             #include <smmintrin.h>
12281             int main () {
12282                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12283                 c = _mm_cmpeq_epi64 (a, b);
12284                 return 0;
12285             }
12286             ])],
12287             [can_compile_sse41=yes],
12288             [can_compile_sse41=no])
12289         AC_LANG_POP([C++])
12290         CXXFLAGS=$save_CXXFLAGS
12291         AC_MSG_RESULT([${can_compile_sse41}])
12292         if test "${can_compile_sse41}" = "yes" ; then
12293             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12294         fi
12296         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12297         AC_LANG_PUSH([C++])
12298         save_CXXFLAGS=$CXXFLAGS
12299         CXXFLAGS="$CXXFLAGS $flag_sse42"
12300         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12301             #include <nmmintrin.h>
12302             int main () {
12303                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12304                 c = _mm_cmpgt_epi64 (a, b);
12305                 return 0;
12306             }
12307             ])],
12308             [can_compile_sse42=yes],
12309             [can_compile_sse42=no])
12310         AC_LANG_POP([C++])
12311         CXXFLAGS=$save_CXXFLAGS
12312         AC_MSG_RESULT([${can_compile_sse42}])
12313         if test "${can_compile_sse42}" = "yes" ; then
12314             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12315         fi
12317         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12318         AC_LANG_PUSH([C++])
12319         save_CXXFLAGS=$CXXFLAGS
12320         CXXFLAGS="$CXXFLAGS $flag_avx"
12321         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12322             #include <immintrin.h>
12323             int main () {
12324                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12325                 c = _mm256_xor_ps(a, b);
12326                 return 0;
12327             }
12328             ])],
12329             [can_compile_avx=yes],
12330             [can_compile_avx=no])
12331         AC_LANG_POP([C++])
12332         CXXFLAGS=$save_CXXFLAGS
12333         AC_MSG_RESULT([${can_compile_avx}])
12334         if test "${can_compile_avx}" = "yes" ; then
12335             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12336         fi
12338         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12339         AC_LANG_PUSH([C++])
12340         save_CXXFLAGS=$CXXFLAGS
12341         CXXFLAGS="$CXXFLAGS $flag_avx2"
12342         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12343             #include <immintrin.h>
12344             int main () {
12345                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12346                 c = _mm256_maddubs_epi16(a, b);
12347                 return 0;
12348             }
12349             ])],
12350             [can_compile_avx2=yes],
12351             [can_compile_avx2=no])
12352         AC_LANG_POP([C++])
12353         CXXFLAGS=$save_CXXFLAGS
12354         AC_MSG_RESULT([${can_compile_avx2}])
12355         if test "${can_compile_avx2}" = "yes" ; then
12356             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12357         fi
12359         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12360         AC_LANG_PUSH([C++])
12361         save_CXXFLAGS=$CXXFLAGS
12362         CXXFLAGS="$CXXFLAGS $flag_avx512"
12363         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12364             #include <immintrin.h>
12365             int main () {
12366                 __m512i a = _mm512_loadu_si512(0);
12367                 __m512d v1 = _mm512_load_pd(0);
12368                 // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
12369                 __m512d v2 = _mm512_abs_pd(v1);
12370                 return 0;
12371             }
12372             ])],
12373             [can_compile_avx512=yes],
12374             [can_compile_avx512=no])
12375         AC_LANG_POP([C++])
12376         CXXFLAGS=$save_CXXFLAGS
12377         AC_MSG_RESULT([${can_compile_avx512}])
12378         if test "${can_compile_avx512}" = "yes" ; then
12379             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12380             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
12381         fi
12383         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12384         AC_LANG_PUSH([C++])
12385         save_CXXFLAGS=$CXXFLAGS
12386         CXXFLAGS="$CXXFLAGS $flag_f16c"
12387         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12388             #include <immintrin.h>
12389             int main () {
12390                 __m128i a = _mm_set1_epi32 (0);
12391                 __m128 c;
12392                 c = _mm_cvtph_ps(a);
12393                 return 0;
12394             }
12395             ])],
12396             [can_compile_f16c=yes],
12397             [can_compile_f16c=no])
12398         AC_LANG_POP([C++])
12399         CXXFLAGS=$save_CXXFLAGS
12400         AC_MSG_RESULT([${can_compile_f16c}])
12401         if test "${can_compile_f16c}" = "yes" ; then
12402             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12403         fi
12405         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12406         AC_LANG_PUSH([C++])
12407         save_CXXFLAGS=$CXXFLAGS
12408         CXXFLAGS="$CXXFLAGS $flag_fma"
12409         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12410             #include <immintrin.h>
12411             int main () {
12412                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12413                 d = _mm256_fmadd_ps(a, b, c);
12414                 return 0;
12415             }
12416             ])],
12417             [can_compile_fma=yes],
12418             [can_compile_fma=no])
12419         AC_LANG_POP([C++])
12420         CXXFLAGS=$save_CXXFLAGS
12421         AC_MSG_RESULT([${can_compile_fma}])
12422         if test "${can_compile_fma}" = "yes" ; then
12423             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12424         fi
12426         CXX="$save_CXX"
12427     fi
12430 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12432 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12433     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12434     AC_LANG_PUSH([C])
12435     save_CC="$CC"
12436     CC="$LO_CLANG_CC"
12437     save_CFLAGS=$CFLAGS
12438     CFLAGS="$CFLAGS --ccache-skip -O2 -Werror"
12439     dnl an empty program will do, we're checking the compiler flags
12440     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12441                       [use_ccache=yes], [use_ccache=no])
12442     CFLAGS=$save_CFLAGS
12443     CC=$save_CC
12444     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12445         AC_MSG_RESULT([yes])
12446     else
12447         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12448         AC_MSG_RESULT([no])
12449     fi
12450     AC_LANG_POP([C])
12452     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12453     AC_LANG_PUSH([C++])
12454     save_CXX="$CXX"
12455     CXX="$LO_CLANG_CXX"
12456     save_CXXFLAGS=$CXXFLAGS
12457     CXXFLAGS="$CXXFLAGS --ccache-skip -O2 -Werror"
12458     dnl an empty program will do, we're checking the compiler flags
12459     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12460                       [use_ccache=yes], [use_ccache=no])
12461     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12462         AC_MSG_RESULT([yes])
12463     else
12464         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12465         AC_MSG_RESULT([no])
12466     fi
12467     CXXFLAGS=$save_CXXFLAGS
12468     CXX=$save_CXX
12469     AC_LANG_POP([C++])
12472 AC_SUBST(LO_CLANG_CC)
12473 AC_SUBST(LO_CLANG_CXX)
12474 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12475 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12476 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12477 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12478 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12479 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12480 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12481 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F)
12482 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12483 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12484 AC_SUBST(CLANG_USE_LD)
12485 AC_SUBST([HAVE_LO_CLANG_DLLEXPORTINLINES])
12487 SYSTEM_GPGMEPP=
12489 if test "$enable_gpgmepp" = no; then
12490     AC_MSG_CHECKING([whether to enable gpgmepp])
12491     AC_MSG_RESULT([no])
12492 elif test "$enable_mpl_subset" = "yes"; then
12493     AC_MSG_CHECKING([whether gpgmepp should be disabled due to building just MPL])
12494     AC_MSG_RESULT([yes])
12495 elif test "$enable_fuzzers" = "yes"; then
12496     AC_MSG_CHECKING([whether gpgmepp should be disabled due to oss-fuzz])
12497     AC_MSG_RESULT([yes])
12498 elif test "$_os" = "Linux" -o "$_os" = "Darwin" -o "$_os" = "WINNT" ; then
12499     dnl ===================================================================
12500     dnl Check for system gpgme
12501     dnl ===================================================================
12502     AC_MSG_CHECKING([which gpgmepp to use])
12503     if test "$with_system_gpgmepp" = "yes"; then
12504         AC_MSG_RESULT([external])
12505         SYSTEM_GPGMEPP=TRUE
12507         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12508         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12509             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp >= 1.14 development package])], [])
12510         # progress_callback is the only func with plain C linkage
12511         # checking for it also filters out older, KDE-dependent libgpgmepp versions
12512         AC_CHECK_LIB(gpgmepp, progress_callback, [ GPGMEPP_LIBS=-lgpgmepp ],
12513             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12514         AC_CHECK_HEADER(gpgme.h, [],
12515             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12516     else
12517         AC_MSG_RESULT([internal])
12518         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12520         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12521         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12522         if test "$_os" != "WINNT"; then
12523             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12524             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12525         fi
12526     fi
12527     ENABLE_GPGMEPP=TRUE
12528     AC_DEFINE([HAVE_FEATURE_GPGME])
12529     AC_PATH_PROG(GPG, gpg)
12530     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12531     # so let's exclude that manually for the moment
12532     if test -n "$GPG" -a "$_os" != "WINNT"; then
12533         # make sure we not only have a working gpgme, but a full working
12534         # gpg installation to run OpenPGP signature verification
12535         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12536     fi
12537     if test "$_os" = "Linux"; then
12538       uid=`id -u`
12539       AC_MSG_CHECKING([for /run/user/$uid])
12540       if test -d /run/user/$uid; then
12541         AC_MSG_RESULT([yes])
12542         AC_PATH_PROG(GPGCONF, gpgconf)
12544         # Older versions of gpgconf are not working as expected, since
12545         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12546         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12547         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12548         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12549         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12550         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12551         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12552           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12553           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12554           if $GPGCONF --dump-options > /dev/null ; then
12555             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12556               AC_MSG_RESULT([yes])
12557               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12558               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12559             else
12560               AC_MSG_RESULT([no])
12561             fi
12562           else
12563             AC_MSG_RESULT([no. missing or broken gpgconf?])
12564           fi
12565         else
12566           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12567         fi
12568       else
12569         AC_MSG_RESULT([no])
12570      fi
12571    fi
12573 AC_SUBST(ENABLE_GPGMEPP)
12574 AC_SUBST(SYSTEM_GPGMEPP)
12575 AC_SUBST(GPG_ERROR_CFLAGS)
12576 AC_SUBST(GPG_ERROR_LIBS)
12577 AC_SUBST(LIBASSUAN_CFLAGS)
12578 AC_SUBST(LIBASSUAN_LIBS)
12579 AC_SUBST(GPGMEPP_CFLAGS)
12580 AC_SUBST(GPGMEPP_LIBS)
12582 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12583 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12584     AC_MSG_RESULT([yes])
12585     ENABLE_MEDIAWIKI=TRUE
12586     BUILD_TYPE="$BUILD_TYPE XSLTML"
12587     if test  "x$with_java" = "xno"; then
12588         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12589     fi
12590 else
12591     AC_MSG_RESULT([no])
12592     ENABLE_MEDIAWIKI=
12593     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12595 AC_SUBST(ENABLE_MEDIAWIKI)
12597 AC_MSG_CHECKING([whether to build the Report Builder])
12598 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12599     AC_MSG_RESULT([yes])
12600     ENABLE_REPORTBUILDER=TRUE
12601     AC_MSG_CHECKING([which jfreereport libs to use])
12602     if test "$with_system_jfreereport" = "yes"; then
12603         SYSTEM_JFREEREPORT=TRUE
12604         AC_MSG_RESULT([external])
12605         if test -z $SAC_JAR; then
12606             SAC_JAR=/usr/share/java/sac.jar
12607         fi
12608         if ! test -f $SAC_JAR; then
12609              AC_MSG_ERROR(sac.jar not found.)
12610         fi
12612         if test -z $LIBXML_JAR; then
12613             if test -f /usr/share/java/libxml-1.0.0.jar; then
12614                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12615             elif test -f /usr/share/java/libxml.jar; then
12616                 LIBXML_JAR=/usr/share/java/libxml.jar
12617             else
12618                 AC_MSG_ERROR(libxml.jar replacement not found.)
12619             fi
12620         elif ! test -f $LIBXML_JAR; then
12621             AC_MSG_ERROR(libxml.jar not found.)
12622         fi
12624         if test -z $FLUTE_JAR; then
12625             if test -f /usr/share/java/flute-1.3.0.jar; then
12626                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12627             elif test -f /usr/share/java/flute.jar; then
12628                 FLUTE_JAR=/usr/share/java/flute.jar
12629             else
12630                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12631             fi
12632         elif ! test -f $FLUTE_JAR; then
12633             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12634         fi
12636         if test -z $JFREEREPORT_JAR; then
12637             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12638                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12639             elif test -f /usr/share/java/flow-engine.jar; then
12640                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12641             else
12642                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12643             fi
12644         elif ! test -f  $JFREEREPORT_JAR; then
12645                 AC_MSG_ERROR(jfreereport.jar not found.)
12646         fi
12648         if test -z $LIBLAYOUT_JAR; then
12649             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12650                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12651             elif test -f /usr/share/java/liblayout.jar; then
12652                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12653             else
12654                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12655             fi
12656         elif ! test -f $LIBLAYOUT_JAR; then
12657                 AC_MSG_ERROR(liblayout.jar not found.)
12658         fi
12660         if test -z $LIBLOADER_JAR; then
12661             if test -f /usr/share/java/libloader-1.0.0.jar; then
12662                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
12663             elif test -f /usr/share/java/libloader.jar; then
12664                 LIBLOADER_JAR=/usr/share/java/libloader.jar
12665             else
12666                 AC_MSG_ERROR(libloader.jar replacement not found.)
12667             fi
12668         elif ! test -f  $LIBLOADER_JAR; then
12669             AC_MSG_ERROR(libloader.jar not found.)
12670         fi
12672         if test -z $LIBFORMULA_JAR; then
12673             if test -f /usr/share/java/libformula-0.2.0.jar; then
12674                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
12675             elif test -f /usr/share/java/libformula.jar; then
12676                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
12677             else
12678                 AC_MSG_ERROR(libformula.jar replacement not found.)
12679             fi
12680         elif ! test -f $LIBFORMULA_JAR; then
12681                 AC_MSG_ERROR(libformula.jar not found.)
12682         fi
12684         if test -z $LIBREPOSITORY_JAR; then
12685             if test -f /usr/share/java/librepository-1.0.0.jar; then
12686                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
12687             elif test -f /usr/share/java/librepository.jar; then
12688                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
12689             else
12690                 AC_MSG_ERROR(librepository.jar replacement not found.)
12691             fi
12692         elif ! test -f $LIBREPOSITORY_JAR; then
12693             AC_MSG_ERROR(librepository.jar not found.)
12694         fi
12696         if test -z $LIBFONTS_JAR; then
12697             if test -f /usr/share/java/libfonts-1.0.0.jar; then
12698                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
12699             elif test -f /usr/share/java/libfonts.jar; then
12700                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
12701             else
12702                 AC_MSG_ERROR(libfonts.jar replacement not found.)
12703             fi
12704         elif ! test -f $LIBFONTS_JAR; then
12705                 AC_MSG_ERROR(libfonts.jar not found.)
12706         fi
12708         if test -z $LIBSERIALIZER_JAR; then
12709             if test -f /usr/share/java/libserializer-1.0.0.jar; then
12710                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
12711             elif test -f /usr/share/java/libserializer.jar; then
12712                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
12713             else
12714                 AC_MSG_ERROR(libserializer.jar replacement not found.)
12715             fi
12716         elif ! test -f $LIBSERIALIZER_JAR; then
12717                 AC_MSG_ERROR(libserializer.jar not found.)
12718         fi
12720         if test -z $LIBBASE_JAR; then
12721             if test -f /usr/share/java/libbase-1.0.0.jar; then
12722                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
12723             elif test -f /usr/share/java/libbase.jar; then
12724                 LIBBASE_JAR=/usr/share/java/libbase.jar
12725             else
12726                 AC_MSG_ERROR(libbase.jar replacement not found.)
12727             fi
12728         elif ! test -f $LIBBASE_JAR; then
12729             AC_MSG_ERROR(libbase.jar not found.)
12730         fi
12732     else
12733         AC_MSG_RESULT([internal])
12734         SYSTEM_JFREEREPORT=
12735         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
12736         NEED_ANT=TRUE
12737     fi
12738 else
12739     AC_MSG_RESULT([no])
12740     ENABLE_REPORTBUILDER=
12741     SYSTEM_JFREEREPORT=
12743 AC_SUBST(ENABLE_REPORTBUILDER)
12744 AC_SUBST(SYSTEM_JFREEREPORT)
12745 AC_SUBST(SAC_JAR)
12746 AC_SUBST(LIBXML_JAR)
12747 AC_SUBST(FLUTE_JAR)
12748 AC_SUBST(JFREEREPORT_JAR)
12749 AC_SUBST(LIBBASE_JAR)
12750 AC_SUBST(LIBLAYOUT_JAR)
12751 AC_SUBST(LIBLOADER_JAR)
12752 AC_SUBST(LIBFORMULA_JAR)
12753 AC_SUBST(LIBREPOSITORY_JAR)
12754 AC_SUBST(LIBFONTS_JAR)
12755 AC_SUBST(LIBSERIALIZER_JAR)
12757 # scripting provider for BeanShell?
12758 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
12759 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
12760     AC_MSG_RESULT([yes])
12761     ENABLE_SCRIPTING_BEANSHELL=TRUE
12763     dnl ===================================================================
12764     dnl Check for system beanshell
12765     dnl ===================================================================
12766     AC_MSG_CHECKING([which beanshell to use])
12767     if test "$with_system_beanshell" = "yes"; then
12768         AC_MSG_RESULT([external])
12769         SYSTEM_BSH=TRUE
12770         if test -z $BSH_JAR; then
12771             BSH_JAR=/usr/share/java/bsh.jar
12772         fi
12773         if ! test -f $BSH_JAR; then
12774             AC_MSG_ERROR(bsh.jar not found.)
12775         fi
12776     else
12777         AC_MSG_RESULT([internal])
12778         SYSTEM_BSH=
12779         BUILD_TYPE="$BUILD_TYPE BSH"
12780     fi
12781 else
12782     AC_MSG_RESULT([no])
12783     ENABLE_SCRIPTING_BEANSHELL=
12784     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
12786 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
12787 AC_SUBST(SYSTEM_BSH)
12788 AC_SUBST(BSH_JAR)
12790 # scripting provider for JavaScript?
12791 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
12792 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
12793     AC_MSG_RESULT([yes])
12794     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
12796     dnl ===================================================================
12797     dnl Check for system rhino
12798     dnl ===================================================================
12799     AC_MSG_CHECKING([which rhino to use])
12800     if test "$with_system_rhino" = "yes"; then
12801         AC_MSG_RESULT([external])
12802         SYSTEM_RHINO=TRUE
12803         if test -z $RHINO_JAR; then
12804             RHINO_JAR=/usr/share/java/js.jar
12805         fi
12806         if ! test -f $RHINO_JAR; then
12807             AC_MSG_ERROR(js.jar not found.)
12808         fi
12809     else
12810         AC_MSG_RESULT([internal])
12811         SYSTEM_RHINO=
12812         BUILD_TYPE="$BUILD_TYPE RHINO"
12813         NEED_ANT=TRUE
12814     fi
12815 else
12816     AC_MSG_RESULT([no])
12817     ENABLE_SCRIPTING_JAVASCRIPT=
12818     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
12820 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
12821 AC_SUBST(SYSTEM_RHINO)
12822 AC_SUBST(RHINO_JAR)
12824 # This is only used in Qt5/Qt6/KF5 checks to determine if /usr/lib64
12825 # paths should be added to library search path. So lets put all 64-bit
12826 # platforms there.
12827 supports_multilib=
12828 case "$host_cpu" in
12829 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el)
12830     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
12831         supports_multilib="yes"
12832     fi
12833     ;;
12835     ;;
12836 esac
12838 dnl ===================================================================
12839 dnl QT5 Integration
12840 dnl ===================================================================
12842 QT5_CFLAGS=""
12843 QT5_LIBS=""
12844 QMAKE5="qmake"
12845 MOC5="moc"
12846 QT5_GOBJECT_CFLAGS=""
12847 QT5_GOBJECT_LIBS=""
12848 QT5_HAVE_GOBJECT=""
12849 QT5_PLATFORMS_SRCDIR=""
12850 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12851         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
12852         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12853 then
12854     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
12855     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
12857     if test -n "$supports_multilib"; then
12858         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
12859     fi
12861     qt5_test_include="QtWidgets/qapplication.h"
12862     if test "$_os" = "Emscripten"; then
12863         qt5_test_library="libQt5Widgets.a"
12864     else
12865         qt5_test_library="libQt5Widgets.so"
12866     fi
12868     dnl Check for qmake5
12869     if test -n "$QT5DIR"; then
12870         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
12871     else
12872         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
12873     fi
12874     if test "$QMAKE5" = "no"; then
12875         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12876     else
12877         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
12878         if test -z "$qmake5_test_ver"; then
12879             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12880         fi
12881         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
12882         qt5_minimal_minor="6"
12883         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
12884             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
12885         else
12886             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
12887         fi
12888     fi
12890     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
12891     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
12892     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
12893     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
12895     AC_MSG_CHECKING([for Qt5 headers])
12896     qt5_incdir="no"
12897     for inc_dir in $qt5_incdirs; do
12898         if test -r "$inc_dir/$qt5_test_include"; then
12899             qt5_incdir="$inc_dir"
12900             break
12901         fi
12902     done
12903     AC_MSG_RESULT([$qt5_incdir])
12904     if test "x$qt5_incdir" = "xno"; then
12905         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12906     fi
12907     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
12908     AC_LANG_PUSH([C++])
12909     save_CPPFLAGS=$CPPFLAGS
12910     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
12911     AC_CHECK_HEADER(QtCore/qconfig.h, [],
12912         [AC_MSG_ERROR(qconfig.h header not found.)], [])
12913     CPPFLAGS=$save_CPPFLAGS
12914     AC_LANG_POP([C++])
12916     AC_MSG_CHECKING([for Qt5 libraries])
12917     qt5_libdir="no"
12918     for lib_dir in $qt5_libdirs; do
12919         if test -r "$lib_dir/$qt5_test_library"; then
12920             qt5_libdir="$lib_dir"
12921             break
12922         fi
12923     done
12924     AC_MSG_RESULT([$qt5_libdir])
12925     if test "x$qt5_libdir" = "xno"; then
12926         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12927     fi
12929     if test "$_os" = "Emscripten"; then
12930         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
12931             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
12932         fi
12933         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
12934             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
12935         fi
12936     fi
12938     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
12939     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12940     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
12941     if test "$_os" = "Emscripten"; then
12942         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
12943     fi
12945     if test "$USING_X11" = TRUE; then
12946         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
12947         PKG_CHECK_MODULES(QT5_XCB_ICCCM,[xcb-icccm],[
12948             QT5_HAVE_XCB_ICCCM=1
12949             AC_DEFINE(QT5_HAVE_XCB_ICCCM)
12950         ],[
12951             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)])
12952             add_warning "XCB ICCCM not found, which is needed for Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)"
12953         ])
12954         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
12955         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
12956         QT5_USING_X11=1
12957         AC_DEFINE(QT5_USING_X11)
12958     fi
12960     dnl Check for Meta Object Compiler
12962     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
12963     if test "$MOC5" = "no"; then
12964         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
12965 the root of your Qt installation by exporting QT5DIR before running "configure".])
12966     fi
12968     if test "$test_gstreamer_1_0" = yes; then
12969         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
12970                 QT5_HAVE_GOBJECT=1
12971                 AC_DEFINE(QT5_HAVE_GOBJECT)
12972             ],
12973             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
12974         )
12975     fi
12977 AC_SUBST(QT5_CFLAGS)
12978 AC_SUBST(QT5_LIBS)
12979 AC_SUBST(MOC5)
12980 AC_SUBST(QT5_GOBJECT_CFLAGS)
12981 AC_SUBST(QT5_GOBJECT_LIBS)
12982 AC_SUBST(QT5_HAVE_GOBJECT)
12983 AC_SUBST(QT5_PLATFORMS_SRCDIR)
12985 dnl ===================================================================
12986 dnl QT6 Integration
12987 dnl ===================================================================
12989 QT6_CFLAGS=""
12990 QT6_LIBS=""
12991 QMAKE6="qmake"
12992 MOC6="moc"
12993 QT6_PLATFORMS_SRCDIR=""
12994 if test \( "$test_qt6" = "yes" -a "$ENABLE_QT6" = "TRUE" \)
12995 then
12996     qt6_incdirs="$QT6INC /usr/include/qt6 /usr/include $x_includes"
12997     qt6_libdirs="$QT6LIB /usr/lib/qt6 /usr/lib $x_libraries"
12999     if test -n "$supports_multilib"; then
13000         qt6_libdirs="$qt6_libdirs /usr/lib64/qt6 /usr/lib64/qt /usr/lib64"
13001     fi
13003     qt6_test_include="QtWidgets/qapplication.h"
13004     if test "$_os" = "Emscripten"; then
13005         qt6_test_library="libQt6Widgets.a"
13006     else
13007         qt6_test_library="libQt6Widgets.so"
13008     fi
13010     dnl Check for qmake6
13011     if test -n "$QT6DIR"; then
13012         AC_PATH_PROG(QMAKE6, [qmake], no, [$QT6DIR/bin])
13013     else
13014         AC_PATH_PROGS(QMAKE6, [qmake-qt6 qmake], no)
13015     fi
13016     if test "$QMAKE6" = "no"; then
13017         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13018     else
13019         qmake6_test_ver="`$QMAKE6 -v 2>&1 | $SED -n -e 's/^Using Qt version \(6\.[[0-9.]]\+\).*$/\1/p'`"
13020         if test -z "$qmake6_test_ver"; then
13021             AC_MSG_ERROR([Wrong qmake for Qt6 found. Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13022         fi
13023         AC_MSG_NOTICE([Detected Qt6 version: $qmake6_test_ver])
13024     fi
13026     qt6_incdirs="`$QMAKE6 -query QT_INSTALL_HEADERS` $qt6_incdirs"
13027     qt6_libdirs="`$QMAKE6 -query QT_INSTALL_LIBS` $qt6_libdirs"
13028     qt6_platformsdir="`$QMAKE6 -query QT_INSTALL_PLUGINS`/platforms"
13029     QT6_PLATFORMS_SRCDIR="$qt6_platformsdir"
13031     AC_MSG_CHECKING([for Qt6 headers])
13032     qt6_incdir="no"
13033     for inc_dir in $qt6_incdirs; do
13034         if test -r "$inc_dir/$qt6_test_include"; then
13035             qt6_incdir="$inc_dir"
13036             break
13037         fi
13038     done
13039     AC_MSG_RESULT([$qt6_incdir])
13040     if test "x$qt6_incdir" = "xno"; then
13041         AC_MSG_ERROR([Qt6 headers not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13042     fi
13043     # check for scenario: qt6-qtbase-devel-*.86_64 installed but host is i686
13044     AC_LANG_PUSH([C++])
13045     save_CPPFLAGS=$CPPFLAGS
13046     CPPFLAGS="${CPPFLAGS} -I${qt6_incdir}"
13047     AC_CHECK_HEADER(QtCore/qconfig.h, [],
13048         [AC_MSG_ERROR(qconfig.h header not found.)], [])
13049     CPPFLAGS=$save_CPPFLAGS
13050     AC_LANG_POP([C++])
13052     AC_MSG_CHECKING([for Qt6 libraries])
13053     qt6_libdir="no"
13054     for lib_dir in $qt6_libdirs; do
13055         if test -r "$lib_dir/$qt6_test_library"; then
13056             qt6_libdir="$lib_dir"
13057             break
13058         fi
13059     done
13060     AC_MSG_RESULT([$qt6_libdir])
13061     if test "x$qt6_libdir" = "xno"; then
13062         AC_MSG_ERROR([Qt6 libraries not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13063     fi
13065     if test "$_os" = "Emscripten"; then
13066         if test ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html ; then
13067             QT6_PLATFORMS_SRCDIR="${QT6_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
13068         fi
13069         if test ! -f "${qt6_platformsdir}"/libqwasm.a -o ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html; then
13070             AC_MSG_ERROR([No Qt6 WASM QPA plugin found in ${qt6_platformsdir} or ${QT6_PLATFORMS_SRCDIR}])
13071         fi
13072     fi
13074     QT6_CFLAGS="-I$qt6_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13075     QT6_CFLAGS=$(printf '%s' "$QT6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13076     QT6_LIBS="-L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
13077     if test "$_os" = "Emscripten"; then
13078         QT6_LIBS="$QT6_LIBS -lqtpcre2 -lQt6EventDispatcherSupport -lQt6FontDatabaseSupport -L${qt6_platformsdir} -lqwasm"
13079     fi
13081     if test "$USING_X11" = TRUE; then
13082         PKG_CHECK_MODULES(QT6_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for key modifier handling in X11.])])
13083         QT6_CFLAGS="$QT6_CFLAGS $QT6_XCB_CFLAGS"
13084         QT6_LIBS="$QT6_LIBS $QT6_XCB_LIBS"
13085         QT6_USING_X11=1
13086         AC_DEFINE(QT6_USING_X11)
13087     fi
13089     dnl Check for Meta Object Compiler
13091     AC_PATH_PROGS( MOC6, [moc-qt6 moc], no, [`dirname $qt6_libdir`/libexec:$QT6DIR/libexec:$PATH])
13092     if test "$MOC6" = "no"; then
13093         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13094 the root of your Qt installation by exporting QT6DIR before running "configure".])
13095     fi
13097 AC_SUBST(QT6_CFLAGS)
13098 AC_SUBST(QT6_LIBS)
13099 AC_SUBST(MOC6)
13100 AC_SUBST(QT6_PLATFORMS_SRCDIR)
13102 dnl ===================================================================
13103 dnl KF5 Integration
13104 dnl ===================================================================
13106 KF5_CFLAGS=""
13107 KF5_LIBS=""
13108 KF5_CONFIG="kf5-config"
13109 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13110         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13111 then
13112     if test "$OS" = "HAIKU"; then
13113         haiku_arch="`echo $RTL_ARCH | tr X x`"
13114         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13115         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13116     fi
13118     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
13119     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
13120     if test -n "$supports_multilib"; then
13121         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
13122     fi
13124     kf5_test_include="KF5/KIOFileWidgets/KFileWidget"
13125     kf5_test_library="libKF5KIOFileWidgets.so"
13126     kf5_libdirs="$qt5_libdir $kf5_libdirs"
13128     dnl kf5 KDE4 support compatibility installed
13129     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
13130     if test "$KF5_CONFIG" != "no"; then
13131         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
13132         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
13133     fi
13135     dnl Check for KF5 headers
13136     AC_MSG_CHECKING([for KF5 headers])
13137     kf5_incdir="no"
13138     for kf5_check in $kf5_incdirs; do
13139         if test -r "$kf5_check/$kf5_test_include"; then
13140             kf5_incdir="$kf5_check/KF5"
13141             break
13142         fi
13143     done
13144     AC_MSG_RESULT([$kf5_incdir])
13145     if test "x$kf5_incdir" = "xno"; then
13146         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13147     fi
13149     dnl Check for KF5 libraries
13150     AC_MSG_CHECKING([for KF5 libraries])
13151     kf5_libdir="no"
13152     for kf5_check in $kf5_libdirs; do
13153         if test -r "$kf5_check/$kf5_test_library"; then
13154             kf5_libdir="$kf5_check"
13155             break
13156         fi
13157     done
13159     AC_MSG_RESULT([$kf5_libdir])
13160     if test "x$kf5_libdir" = "xno"; then
13161         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13162     fi
13164     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"
13165     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13166     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13168     if test "$USING_X11" = TRUE; then
13169         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
13170     fi
13172     AC_LANG_PUSH([C++])
13173     save_CXXFLAGS=$CXXFLAGS
13174     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
13175     AC_MSG_CHECKING([whether KDE is >= 5.0])
13176        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13177 #include <kcoreaddons_version.h>
13179 int main(int argc, char **argv) {
13180        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
13181        else return 1;
13183        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13184     CXXFLAGS=$save_CXXFLAGS
13185     AC_LANG_POP([C++])
13187 AC_SUBST(KF5_CFLAGS)
13188 AC_SUBST(KF5_LIBS)
13190 dnl ===================================================================
13191 dnl Test whether to include Evolution 2 support
13192 dnl ===================================================================
13193 AC_MSG_CHECKING([whether to enable evolution 2 support])
13194 if test "$enable_evolution2" = yes; then
13195     AC_MSG_RESULT([yes])
13196     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
13197     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13198     FilterLibs "${GOBJECT_LIBS}"
13199     GOBJECT_LIBS="${filteredlibs}"
13200     ENABLE_EVOAB2="TRUE"
13201 else
13202     AC_MSG_RESULT([no])
13204 AC_SUBST(ENABLE_EVOAB2)
13205 AC_SUBST(GOBJECT_CFLAGS)
13206 AC_SUBST(GOBJECT_LIBS)
13208 dnl ===================================================================
13209 dnl Test which themes to include
13210 dnl ===================================================================
13211 AC_MSG_CHECKING([which themes to include])
13212 # if none given use default subset of available themes
13213 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
13214     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"
13217 WITH_THEMES=""
13218 if test "x$with_theme" != "xno"; then
13219     for theme in $with_theme; do
13220         case $theme in
13221         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" ;;
13222         default) real_theme=colibre ;;
13223         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
13224         esac
13225         WITH_THEMES=`echo "$WITH_THEMES $real_theme"|tr '\ ' '\n'|sort|uniq|tr '\n' '\ '`
13226     done
13228 AC_MSG_RESULT([$WITH_THEMES])
13229 AC_SUBST([WITH_THEMES])
13230 # FIXME: remove this, and the convenience default->colibre remapping after a grace period
13231 for theme in $with_theme; do
13232     case $theme in
13233     default) AC_MSG_WARN([--with-theme=default is deprecated and will be removed, use --with-theme=colibre]) ;;
13234     *) ;;
13235     esac
13236 done
13238 ###############################################################################
13239 # Extensions checking
13240 ###############################################################################
13241 AC_MSG_CHECKING([for extensions integration])
13242 if test "x$enable_extension_integration" != "xno"; then
13243     WITH_EXTENSION_INTEGRATION=TRUE
13244     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
13245     AC_MSG_RESULT([yes, use integration])
13246 else
13247     WITH_EXTENSION_INTEGRATION=
13248     AC_MSG_RESULT([no, do not integrate])
13250 AC_SUBST(WITH_EXTENSION_INTEGRATION)
13252 dnl Should any extra extensions be included?
13253 dnl There are standalone tests for each of these below.
13254 WITH_EXTRA_EXTENSIONS=
13255 AC_SUBST([WITH_EXTRA_EXTENSIONS])
13257 libo_CHECK_EXTENSION([ConvertTextToNumber],[CT2N],[ct2n],[ct2n],[])
13258 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
13259 if test "x$with_java" != "xno"; then
13260     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
13261     libo_CHECK_EXTENSION([LanguageTool],[LANGUAGETOOL],[languagetool],[languagetool],[])
13264 AC_MSG_CHECKING([whether to build opens___.ttf])
13265 if test "$enable_build_opensymbol" = "yes"; then
13266     AC_MSG_RESULT([yes])
13267     AC_PATH_PROG(FONTFORGE, fontforge)
13268     if test -z "$FONTFORGE"; then
13269         AC_MSG_ERROR([fontforge not installed])
13270     fi
13271 else
13272     AC_MSG_RESULT([no])
13273     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
13275 AC_SUBST(FONTFORGE)
13277 dnl ===================================================================
13278 dnl Test whether to include fonts
13279 dnl ===================================================================
13280 AC_MSG_CHECKING([whether to include third-party fonts])
13281 if test "$with_fonts" != "no"; then
13282     AC_MSG_RESULT([yes])
13283     WITH_FONTS=TRUE
13284     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
13285     AC_DEFINE(HAVE_MORE_FONTS)
13286 else
13287     AC_MSG_RESULT([no])
13288     WITH_FONTS=
13289     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
13291 AC_SUBST(WITH_FONTS)
13294 dnl ===================================================================
13295 dnl Test whether to enable online update service
13296 dnl ===================================================================
13297 AC_MSG_CHECKING([whether to enable online update])
13298 ENABLE_ONLINE_UPDATE=
13299 ENABLE_ONLINE_UPDATE_MAR=
13300 UPDATE_CONFIG=
13301 if test "$enable_online_update" = ""; then
13302     AC_MSG_RESULT([no])
13303 else
13304     if test "$enable_online_update" = "mar"; then
13305         AC_MSG_RESULT([yes - MAR-based online update])
13306         ENABLE_ONLINE_UPDATE_MAR="TRUE"
13307         if test "$with_update_config" = ""; then
13308             AC_MSG_ERROR([mar based online updater needs an update config specified with "with-update-config])
13309         fi
13310         UPDATE_CONFIG="$with_update_config"
13311         AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
13312     elif test "$enable_online_update" = "yes"; then
13313         AC_MSG_RESULT([yes])
13314         ENABLE_ONLINE_UPDATE="TRUE"
13315     else
13316         AC_MSG_RESULT([no])
13317     fi
13319 AC_SUBST(ENABLE_ONLINE_UPDATE)
13320 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
13321 AC_SUBST(UPDATE_CONFIG)
13324 PRIVACY_POLICY_URL="$with_privacy_policy_url"
13325 if test "$ENABLE_ONLINE_UPDATE" = TRUE -o "$ENABLE_BREAKPAD" = "TRUE"; then
13326     if test "x$with_privacy_policy_url" = "xundefined"; then
13327         AC_MSG_FAILURE([online update or breakpad/crashreporting are enabled, but no --with-privacy-policy-url=... was provided])
13328     fi
13330 AC_SUBST(PRIVACY_POLICY_URL)
13331 dnl ===================================================================
13332 dnl Test whether we need bzip2
13333 dnl ===================================================================
13334 SYSTEM_BZIP2=
13335 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE"; then
13336     AC_MSG_CHECKING([whether to use system bzip2])
13337     if test "$with_system_bzip2" = yes; then
13338         SYSTEM_BZIP2=TRUE
13339         AC_MSG_RESULT([yes])
13340         PKG_CHECK_MODULES(BZIP2, bzip2)
13341         FilterLibs "${BZIP2_LIBS}"
13342         BZIP2_LIBS="${filteredlibs}"
13343     else
13344         AC_MSG_RESULT([no])
13345         BUILD_TYPE="$BUILD_TYPE BZIP2"
13346     fi
13348 AC_SUBST(SYSTEM_BZIP2)
13349 AC_SUBST(BZIP2_CFLAGS)
13350 AC_SUBST(BZIP2_LIBS)
13352 dnl ===================================================================
13353 dnl Test whether to enable extension update
13354 dnl ===================================================================
13355 AC_MSG_CHECKING([whether to enable extension update])
13356 ENABLE_EXTENSION_UPDATE=
13357 if test "x$enable_extension_update" = "xno"; then
13358     AC_MSG_RESULT([no])
13359 else
13360     AC_MSG_RESULT([yes])
13361     ENABLE_EXTENSION_UPDATE="TRUE"
13362     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
13363     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
13365 AC_SUBST(ENABLE_EXTENSION_UPDATE)
13368 dnl ===================================================================
13369 dnl Test whether to create MSI with LIMITUI=1 (silent install)
13370 dnl ===================================================================
13371 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
13372 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
13373     AC_MSG_RESULT([no])
13374     ENABLE_SILENT_MSI=
13375 else
13376     AC_MSG_RESULT([yes])
13377     ENABLE_SILENT_MSI=TRUE
13378     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
13380 AC_SUBST(ENABLE_SILENT_MSI)
13382 AC_MSG_CHECKING([whether and how to use Xinerama])
13383 if test "$_os" = "Linux" -o "$_os" = "FreeBSD"; then
13384     if test "$x_libraries" = "default_x_libraries"; then
13385         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
13386         if test "x$XINERAMALIB" = x; then
13387            XINERAMALIB="/usr/lib"
13388         fi
13389     else
13390         XINERAMALIB="$x_libraries"
13391     fi
13392     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13393         # we have both versions, let the user decide but use the dynamic one
13394         # per default
13395         USE_XINERAMA=TRUE
13396         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13397             XINERAMA_LINK=dynamic
13398         else
13399             XINERAMA_LINK=static
13400         fi
13401     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13402         # we have only the dynamic version
13403         USE_XINERAMA=TRUE
13404         XINERAMA_LINK=dynamic
13405     elif test -e "$XINERAMALIB/libXinerama.a"; then
13406         # static version
13407         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13408             USE_XINERAMA=TRUE
13409             XINERAMA_LINK=static
13410         else
13411             USE_XINERAMA=
13412             XINERAMA_LINK=none
13413         fi
13414     else
13415         # no Xinerama
13416         USE_XINERAMA=
13417         XINERAMA_LINK=none
13418     fi
13419     if test "$USE_XINERAMA" = "TRUE"; then
13420         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13421         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13422             [AC_MSG_ERROR(Xinerama header not found.)], [])
13423         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13424         if test "x$XEXTLIB" = x; then
13425            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13426         fi
13427         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13428         if test "$_os" = "FreeBSD"; then
13429             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13430         fi
13431         if test "$_os" = "Linux"; then
13432             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13433         fi
13434         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13435             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13436     else
13437         AC_MSG_RESULT([no, libXinerama not found or wrong architecture.])
13438     fi
13439 else
13440     USE_XINERAMA=
13441     XINERAMA_LINK=none
13442     AC_MSG_RESULT([no])
13444 AC_SUBST(USE_XINERAMA)
13445 AC_SUBST(XINERAMA_LINK)
13447 dnl ===================================================================
13448 dnl Test whether to build cairo or rely on the system version
13449 dnl ===================================================================
13451 if test "$test_cairo" = "yes"; then
13452     AC_MSG_CHECKING([whether to use the system cairo])
13454     : ${with_system_cairo:=$with_system_libs}
13455     if test "$with_system_cairo" = "yes"; then
13456         SYSTEM_CAIRO=TRUE
13457         AC_MSG_RESULT([yes])
13459         PKG_CHECK_MODULES( CAIRO, cairo >= 1.8.0 )
13460         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13461         FilterLibs "${CAIRO_LIBS}"
13462         CAIRO_LIBS="${filteredlibs}"
13464         if test "$test_xrender" = "yes"; then
13465             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13466             AC_LANG_PUSH([C])
13467             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13468 #ifdef PictStandardA8
13469 #else
13470       return fail;
13471 #endif
13472 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13474             AC_LANG_POP([C])
13475         fi
13476     else
13477         AC_MSG_RESULT([no])
13478         BUILD_TYPE="$BUILD_TYPE CAIRO"
13479     fi
13481     if test "$enable_cairo_canvas" != no; then
13482         AC_DEFINE(ENABLE_CAIRO_CANVAS)
13483         ENABLE_CAIRO_CANVAS=TRUE
13484     fi
13487 AC_SUBST(CAIRO_CFLAGS)
13488 AC_SUBST(CAIRO_LIBS)
13489 AC_SUBST(ENABLE_CAIRO_CANVAS)
13490 AC_SUBST(SYSTEM_CAIRO)
13492 dnl ===================================================================
13493 dnl Test whether to use avahi
13494 dnl ===================================================================
13495 if test "$_os" = "WINNT"; then
13496     # Windows uses bundled mDNSResponder
13497     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13498 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13499     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13500                       [ENABLE_AVAHI="TRUE"])
13501     AC_DEFINE(HAVE_FEATURE_AVAHI)
13502     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13503     FilterLibs "${AVAHI_LIBS}"
13504     AVAHI_LIBS="${filteredlibs}"
13507 AC_SUBST(ENABLE_AVAHI)
13508 AC_SUBST(AVAHI_CFLAGS)
13509 AC_SUBST(AVAHI_LIBS)
13511 dnl ===================================================================
13512 dnl Test whether to use liblangtag
13513 dnl ===================================================================
13514 SYSTEM_LIBLANGTAG=
13515 AC_MSG_CHECKING([whether to use system liblangtag])
13516 if test "$with_system_liblangtag" = yes; then
13517     SYSTEM_LIBLANGTAG=TRUE
13518     AC_MSG_RESULT([yes])
13519     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
13520     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
13521     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
13522     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13523     FilterLibs "${LIBLANGTAG_LIBS}"
13524     LIBLANGTAG_LIBS="${filteredlibs}"
13525 else
13526     SYSTEM_LIBLANGTAG=
13527     AC_MSG_RESULT([no])
13528     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
13529     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
13530     if test "$COM" = "MSC"; then
13531         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
13532     else
13533         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
13534     fi
13536 AC_SUBST(SYSTEM_LIBLANGTAG)
13537 AC_SUBST(LIBLANGTAG_CFLAGS)
13538 AC_SUBST(LIBLANGTAG_LIBS)
13540 dnl ===================================================================
13541 dnl Test whether to build libpng or rely on the system version
13542 dnl ===================================================================
13544 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng],["-I${WORKDIR}/UnpackedTarball/libpng"],["-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"])
13546 dnl ===================================================================
13547 dnl Check for runtime JVM search path
13548 dnl ===================================================================
13549 if test "$ENABLE_JAVA" != ""; then
13550     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
13551     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
13552         AC_MSG_RESULT([yes])
13553         if ! test -d "$with_jvm_path"; then
13554             AC_MSG_ERROR(["$with_jvm_path" not a directory])
13555         fi
13556         if ! test -d "$with_jvm_path"jvm; then
13557             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
13558         fi
13559         JVM_ONE_PATH_CHECK="$with_jvm_path"
13560         AC_SUBST(JVM_ONE_PATH_CHECK)
13561     else
13562         AC_MSG_RESULT([no])
13563     fi
13566 dnl ===================================================================
13567 dnl Test for the presence of Ant and that it works
13568 dnl ===================================================================
13570 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
13571     ANT_HOME=; export ANT_HOME
13572     WITH_ANT_HOME=; export WITH_ANT_HOME
13573     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
13574         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
13575             if test "$_os" = "WINNT"; then
13576                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
13577             else
13578                 with_ant_home="$LODE_HOME/opt/ant"
13579             fi
13580         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
13581             with_ant_home="$LODE_HOME/opt/ant"
13582         fi
13583     fi
13584     if test -z "$with_ant_home"; then
13585         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
13586     else
13587         if test "$_os" = "WINNT"; then
13588             # AC_PATH_PROGS needs unix path
13589             with_ant_home=`cygpath -u "$with_ant_home"`
13590         fi
13591         AbsolutePath "$with_ant_home"
13592         with_ant_home=$absolute_path
13593         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
13594         WITH_ANT_HOME=$with_ant_home
13595         ANT_HOME=$with_ant_home
13596     fi
13598     if test -z "$ANT"; then
13599         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
13600     else
13601         # resolve relative or absolute symlink
13602         while test -h "$ANT"; do
13603             a_cwd=`pwd`
13604             a_basename=`basename "$ANT"`
13605             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
13606             cd "`dirname "$ANT"`"
13607             cd "`dirname "$a_script"`"
13608             ANT="`pwd`"/"`basename "$a_script"`"
13609             cd "$a_cwd"
13610         done
13612         AC_MSG_CHECKING([if $ANT works])
13613         mkdir -p conftest.dir
13614         a_cwd=$(pwd)
13615         cd conftest.dir
13616         cat > conftest.java << EOF
13617         public class conftest {
13618             int testmethod(int a, int b) {
13619                     return a + b;
13620             }
13621         }
13624         cat > conftest.xml << EOF
13625         <project name="conftest" default="conftest">
13626         <target name="conftest">
13627             <javac srcdir="." includes="conftest.java">
13628             </javac>
13629         </target>
13630         </project>
13633         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
13634         if test $? = 0 -a -f ./conftest.class; then
13635             AC_MSG_RESULT([Ant works])
13636             if test -z "$WITH_ANT_HOME"; then
13637                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
13638                 if test -z "$ANT_HOME"; then
13639                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
13640                 fi
13641             else
13642                 ANT_HOME="$WITH_ANT_HOME"
13643             fi
13644         else
13645             echo "configure: Ant test failed" >&5
13646             cat conftest.java >&5
13647             cat conftest.xml >&5
13648             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
13649         fi
13650         cd "$a_cwd"
13651         rm -fr conftest.dir
13652     fi
13653     if test -z "$ANT_HOME"; then
13654         ANT_HOME="NO_ANT_HOME"
13655     else
13656         PathFormat "$ANT_HOME"
13657         ANT_HOME="$formatted_path"
13658         PathFormat "$ANT"
13659         ANT="$formatted_path"
13660     fi
13662     dnl Checking for ant.jar
13663     if test "$ANT_HOME" != "NO_ANT_HOME"; then
13664         AC_MSG_CHECKING([Ant lib directory])
13665         if test -f $ANT_HOME/lib/ant.jar; then
13666             ANT_LIB="$ANT_HOME/lib"
13667         else
13668             if test -f $ANT_HOME/ant.jar; then
13669                 ANT_LIB="$ANT_HOME"
13670             else
13671                 if test -f /usr/share/java/ant.jar; then
13672                     ANT_LIB=/usr/share/java
13673                 else
13674                     if test -f /usr/share/ant-core/lib/ant.jar; then
13675                         ANT_LIB=/usr/share/ant-core/lib
13676                     else
13677                         if test -f $ANT_HOME/lib/ant/ant.jar; then
13678                             ANT_LIB="$ANT_HOME/lib/ant"
13679                         else
13680                             if test -f /usr/share/lib/ant/ant.jar; then
13681                                 ANT_LIB=/usr/share/lib/ant
13682                             else
13683                                 AC_MSG_ERROR([Ant libraries not found!])
13684                             fi
13685                         fi
13686                     fi
13687                 fi
13688             fi
13689         fi
13690         PathFormat "$ANT_LIB"
13691         ANT_LIB="$formatted_path"
13692         AC_MSG_RESULT([Ant lib directory found.])
13693     fi
13695     ant_minver=1.6.0
13696     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
13698     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
13699     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
13700     ant_version_major=`echo $ant_version | cut -d. -f1`
13701     ant_version_minor=`echo $ant_version | cut -d. -f2`
13702     echo "configure: ant_version $ant_version " >&5
13703     echo "configure: ant_version_major $ant_version_major " >&5
13704     echo "configure: ant_version_minor $ant_version_minor " >&5
13705     if test "$ant_version_major" -ge "2"; then
13706         AC_MSG_RESULT([yes, $ant_version])
13707     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
13708         AC_MSG_RESULT([yes, $ant_version])
13709     else
13710         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
13711     fi
13713     rm -f conftest* core core.* *.core
13715 AC_SUBST(ANT)
13716 AC_SUBST(ANT_HOME)
13717 AC_SUBST(ANT_LIB)
13719 OOO_JUNIT_JAR=
13720 HAMCREST_JAR=
13721 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
13722     AC_MSG_CHECKING([for JUnit 4])
13723     if test "$with_junit" = "yes"; then
13724         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
13725             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
13726         elif test -e /usr/share/java/junit4.jar; then
13727             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
13728         else
13729            if test -e /usr/share/lib/java/junit.jar; then
13730               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
13731            else
13732               OOO_JUNIT_JAR=/usr/share/java/junit.jar
13733            fi
13734         fi
13735     else
13736         OOO_JUNIT_JAR=$with_junit
13737     fi
13738     if test "$_os" = "WINNT"; then
13739         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
13740     fi
13741     printf 'import org.junit.Before;' > conftest.java
13742     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13743         AC_MSG_RESULT([$OOO_JUNIT_JAR])
13744     else
13745         AC_MSG_ERROR(
13746 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
13747  specify its pathname via --with-junit=..., or disable it via --without-junit])
13748     fi
13749     rm -f conftest.class conftest.java
13750     if test $OOO_JUNIT_JAR != ""; then
13751         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
13752     fi
13754     AC_MSG_CHECKING([for included Hamcrest])
13755     printf 'import org.hamcrest.BaseDescription;' > conftest.java
13756     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13757         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
13758     else
13759         AC_MSG_RESULT([Not included])
13760         AC_MSG_CHECKING([for standalone hamcrest jar.])
13761         if test "$with_hamcrest" = "yes"; then
13762             if test -e /usr/share/lib/java/hamcrest.jar; then
13763                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
13764             elif test -e /usr/share/java/hamcrest/core.jar; then
13765                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
13766             elif test -e /usr/share/java/hamcrest/hamcrest.jar; then
13767                 HAMCREST_JAR=/usr/share/java/hamcrest/hamcrest.jar
13768             else
13769                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
13770             fi
13771         else
13772             HAMCREST_JAR=$with_hamcrest
13773         fi
13774         if test "$_os" = "WINNT"; then
13775             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
13776         fi
13777         if "$JAVACOMPILER" -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
13778             AC_MSG_RESULT([$HAMCREST_JAR])
13779         else
13780             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),
13781                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
13782         fi
13783     fi
13784     rm -f conftest.class conftest.java
13786 AC_SUBST(OOO_JUNIT_JAR)
13787 AC_SUBST(HAMCREST_JAR)
13790 AC_SUBST(SCPDEFS)
13793 # check for wget and curl
13795 WGET=
13796 CURL=
13798 if test "$enable_fetch_external" != "no"; then
13800 CURL=`which curl 2>/dev/null`
13802 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
13803     # wget new enough?
13804     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
13805     if test $? -eq 0; then
13806         WGET=$i
13807         break
13808     fi
13809 done
13811 if test -z "$WGET" -a -z "$CURL"; then
13812     AC_MSG_ERROR([neither wget nor curl found!])
13817 AC_SUBST(WGET)
13818 AC_SUBST(CURL)
13821 # check for sha256sum
13823 SHA256SUM=
13825 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
13826     eval "$i -a 256 --version" > /dev/null 2>&1
13827     ret=$?
13828     if test $ret -eq 0; then
13829         SHA256SUM="$i -a 256"
13830         break
13831     fi
13832 done
13834 if test -z "$SHA256SUM"; then
13835     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
13836         eval "$i --version" > /dev/null 2>&1
13837         ret=$?
13838         if test $ret -eq 0; then
13839             SHA256SUM=$i
13840             break
13841         fi
13842     done
13845 if test -z "$SHA256SUM"; then
13846     AC_MSG_ERROR([no sha256sum found!])
13849 AC_SUBST(SHA256SUM)
13851 dnl ===================================================================
13852 dnl Dealing with l10n options
13853 dnl ===================================================================
13854 AC_MSG_CHECKING([which languages to be built])
13855 # get list of all languages
13856 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
13857 # the sed command does the following:
13858 #   + if a line ends with a backslash, append the next line to it
13859 #   + adds " on the beginning of the value (after =)
13860 #   + adds " at the end of the value
13861 #   + removes en-US; we want to put it on the beginning
13862 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
13863 [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)]
13864 ALL_LANGS="en-US $completelangiso"
13865 # check the configured localizations
13866 WITH_LANG="$with_lang"
13868 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
13869 # (Norwegian is "nb" and "nn".)
13870 if test "$WITH_LANG" = "no"; then
13871     WITH_LANG=
13874 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
13875     AC_MSG_RESULT([en-US])
13876 else
13877     AC_MSG_RESULT([$WITH_LANG])
13878     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
13879     if test -z "$MSGFMT"; then
13880         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
13881             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
13882         elif test -x "/opt/lo/bin/msgfmt"; then
13883             MSGFMT="/opt/lo/bin/msgfmt"
13884         else
13885             AC_CHECK_PROGS(MSGFMT, [msgfmt])
13886             if test -z "$MSGFMT"; then
13887                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
13888             fi
13889         fi
13890     fi
13891     if test -z "$MSGUNIQ"; then
13892         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
13893             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
13894         elif test -x "/opt/lo/bin/msguniq"; then
13895             MSGUNIQ="/opt/lo/bin/msguniq"
13896         else
13897             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
13898             if test -z "$MSGUNIQ"; then
13899                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
13900             fi
13901         fi
13902     fi
13904 AC_SUBST(MSGFMT)
13905 AC_SUBST(MSGUNIQ)
13906 # check that the list is valid
13907 for lang in $WITH_LANG; do
13908     test "$lang" = "ALL" && continue
13909     # need to check for the exact string, so add space before and after the list of all languages
13910     for vl in $ALL_LANGS; do
13911         if test "$vl" = "$lang"; then
13912            break
13913         fi
13914     done
13915     if test "$vl" != "$lang"; then
13916         # if you're reading this - you prolly quoted your languages remove the quotes ...
13917         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
13918     fi
13919 done
13920 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
13921     echo $WITH_LANG | grep -q en-US
13922     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
13924 # list with substituted ALL
13925 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
13926 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
13927 test "$WITH_LANG" = "en-US" && WITH_LANG=
13928 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
13929     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
13930     ALL_LANGS=`echo $ALL_LANGS qtz`
13932 AC_SUBST(ALL_LANGS)
13933 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
13934 AC_SUBST(WITH_LANG)
13935 AC_SUBST(WITH_LANG_LIST)
13936 AC_SUBST(GIT_NEEDED_SUBMODULES)
13938 WITH_POOR_HELP_LOCALIZATIONS=
13939 if test -d "$SRC_ROOT/translations/source"; then
13940     for l in `ls -1 $SRC_ROOT/translations/source`; do
13941         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
13942             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
13943         fi
13944     done
13946 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
13948 if test -n "$with_locales"; then
13949     WITH_LOCALES="$with_locales"
13951     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
13952     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
13953     # config_host/config_locales.h.in
13954     for locale in $WITH_LOCALES; do
13955         lang=${locale%_*}
13957         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
13959         case $lang in
13960         hi|mr*ne)
13961             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
13962             ;;
13963         bg|ru)
13964             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
13965             ;;
13966         esac
13967     done
13968 else
13969     AC_DEFINE(WITH_LOCALE_ALL)
13971 AC_SUBST(WITH_LOCALES)
13973 dnl git submodule update --reference
13974 dnl ===================================================================
13975 if test -n "${GIT_REFERENCE_SRC}"; then
13976     for repo in ${GIT_NEEDED_SUBMODULES}; do
13977         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
13978             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
13979         fi
13980     done
13982 AC_SUBST(GIT_REFERENCE_SRC)
13984 dnl git submodules linked dirs
13985 dnl ===================================================================
13986 if test -n "${GIT_LINK_SRC}"; then
13987     for repo in ${GIT_NEEDED_SUBMODULES}; do
13988         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
13989             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
13990         fi
13991     done
13993 AC_SUBST(GIT_LINK_SRC)
13995 dnl branding
13996 dnl ===================================================================
13997 AC_MSG_CHECKING([for alternative branding images directory])
13998 # initialize mapped arrays
13999 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
14000 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
14002 if test -z "$with_branding" -o "$with_branding" = "no"; then
14003     AC_MSG_RESULT([none])
14004     DEFAULT_BRAND_IMAGES="$brand_files"
14005 else
14006     if ! test -d $with_branding ; then
14007         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
14008     else
14009         AC_MSG_RESULT([$with_branding])
14010         CUSTOM_BRAND_DIR="$with_branding"
14011         for lfile in $brand_files
14012         do
14013             if ! test -f $with_branding/$lfile ; then
14014                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
14015                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
14016             else
14017                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
14018             fi
14019         done
14020         check_for_progress="yes"
14021     fi
14023 AC_SUBST([BRAND_INTRO_IMAGES])
14024 AC_SUBST([CUSTOM_BRAND_DIR])
14025 AC_SUBST([CUSTOM_BRAND_IMAGES])
14026 AC_SUBST([DEFAULT_BRAND_IMAGES])
14029 AC_MSG_CHECKING([for 'intro' progress settings])
14030 PROGRESSBARCOLOR=
14031 PROGRESSSIZE=
14032 PROGRESSPOSITION=
14033 PROGRESSFRAMECOLOR=
14034 PROGRESSTEXTCOLOR=
14035 PROGRESSTEXTBASELINE=
14037 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
14038     source "$with_branding/progress.conf"
14039     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
14040 else
14041     AC_MSG_RESULT([none])
14044 AC_SUBST(PROGRESSBARCOLOR)
14045 AC_SUBST(PROGRESSSIZE)
14046 AC_SUBST(PROGRESSPOSITION)
14047 AC_SUBST(PROGRESSFRAMECOLOR)
14048 AC_SUBST(PROGRESSTEXTCOLOR)
14049 AC_SUBST(PROGRESSTEXTBASELINE)
14052 dnl ===================================================================
14053 dnl Custom build version
14054 dnl ===================================================================
14055 AC_MSG_CHECKING([for extra build ID])
14056 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
14057     EXTRA_BUILDID="$with_extra_buildid"
14059 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
14060 if test -n "$EXTRA_BUILDID" ; then
14061     AC_MSG_RESULT([$EXTRA_BUILDID])
14062 else
14063     AC_MSG_RESULT([not set])
14065 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
14067 OOO_VENDOR=
14068 AC_MSG_CHECKING([for vendor])
14069 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
14070     OOO_VENDOR="$USERNAME"
14072     if test -z "$OOO_VENDOR"; then
14073         OOO_VENDOR="$USER"
14074     fi
14076     if test -z "$OOO_VENDOR"; then
14077         OOO_VENDOR="`id -u -n`"
14078     fi
14080     AC_MSG_RESULT([not set, using $OOO_VENDOR])
14081 else
14082     OOO_VENDOR="$with_vendor"
14083     AC_MSG_RESULT([$OOO_VENDOR])
14085 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
14086 AC_SUBST(OOO_VENDOR)
14088 if test "$_os" = "Android" ; then
14089     ANDROID_PACKAGE_NAME=
14090     AC_MSG_CHECKING([for Android package name])
14091     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
14092         if test -n "$ENABLE_DEBUG"; then
14093             # Default to the package name that makes ndk-gdb happy.
14094             ANDROID_PACKAGE_NAME="org.libreoffice"
14095         else
14096             ANDROID_PACKAGE_NAME="org.example.libreoffice"
14097         fi
14099         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
14100     else
14101         ANDROID_PACKAGE_NAME="$with_android_package_name"
14102         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
14103     fi
14104     AC_SUBST(ANDROID_PACKAGE_NAME)
14107 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
14108 if test "$with_compat_oowrappers" = "yes"; then
14109     WITH_COMPAT_OOWRAPPERS=TRUE
14110     AC_MSG_RESULT(yes)
14111 else
14112     WITH_COMPAT_OOWRAPPERS=
14113     AC_MSG_RESULT(no)
14115 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
14117 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{print tolower($0)}'`
14118 AC_MSG_CHECKING([for install dirname])
14119 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
14120     INSTALLDIRNAME="$with_install_dirname"
14122 AC_MSG_RESULT([$INSTALLDIRNAME])
14123 AC_SUBST(INSTALLDIRNAME)
14125 AC_MSG_CHECKING([for prefix])
14126 test "x$prefix" = xNONE && prefix=$ac_default_prefix
14127 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
14128 PREFIXDIR="$prefix"
14129 AC_MSG_RESULT([$PREFIXDIR])
14130 AC_SUBST(PREFIXDIR)
14132 LIBDIR=[$(eval echo $(eval echo $libdir))]
14133 AC_SUBST(LIBDIR)
14135 DATADIR=[$(eval echo $(eval echo $datadir))]
14136 AC_SUBST(DATADIR)
14138 MANDIR=[$(eval echo $(eval echo $mandir))]
14139 AC_SUBST(MANDIR)
14141 DOCDIR=[$(eval echo $(eval echo $docdir))]
14142 AC_SUBST(DOCDIR)
14144 BINDIR=[$(eval echo $(eval echo $bindir))]
14145 AC_SUBST(BINDIR)
14147 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
14148 AC_SUBST(INSTALLDIR)
14150 TESTINSTALLDIR="${BUILDDIR}/test-install"
14151 AC_SUBST(TESTINSTALLDIR)
14154 # ===================================================================
14155 # OAuth2 id and secrets
14156 # ===================================================================
14158 AC_MSG_CHECKING([for Google Drive client id and secret])
14159 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
14160     AC_MSG_RESULT([not set])
14161     GDRIVE_CLIENT_ID="\"\""
14162     GDRIVE_CLIENT_SECRET="\"\""
14163 else
14164     AC_MSG_RESULT([set])
14165     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
14166     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
14168 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
14169 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
14171 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
14172 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
14173     AC_MSG_RESULT([not set])
14174     ALFRESCO_CLOUD_CLIENT_ID="\"\""
14175     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
14176 else
14177     AC_MSG_RESULT([set])
14178     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
14179     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
14181 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
14182 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
14184 AC_MSG_CHECKING([for OneDrive client id and secret])
14185 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
14186     AC_MSG_RESULT([not set])
14187     ONEDRIVE_CLIENT_ID="\"\""
14188     ONEDRIVE_CLIENT_SECRET="\"\""
14189 else
14190     AC_MSG_RESULT([set])
14191     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
14192     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
14194 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
14195 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
14198 dnl ===================================================================
14199 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
14200 dnl --enable-dependency-tracking configure option
14201 dnl ===================================================================
14202 AC_MSG_CHECKING([whether to enable dependency tracking])
14203 if test "$enable_dependency_tracking" = "no"; then
14204     nodep=TRUE
14205     AC_MSG_RESULT([no])
14206 else
14207     AC_MSG_RESULT([yes])
14209 AC_SUBST(nodep)
14211 dnl ===================================================================
14212 dnl Number of CPUs to use during the build
14213 dnl ===================================================================
14214 AC_MSG_CHECKING([for number of processors to use])
14215 # plain --with-parallelism is just the default
14216 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
14217     if test "$with_parallelism" = "no"; then
14218         PARALLELISM=0
14219     else
14220         PARALLELISM=$with_parallelism
14221     fi
14222 else
14223     if test "$enable_icecream" = "yes"; then
14224         PARALLELISM="40"
14225     else
14226         case `uname -s` in
14228         Darwin|FreeBSD|NetBSD|OpenBSD)
14229             PARALLELISM=`sysctl -n hw.ncpu`
14230             ;;
14232         Linux)
14233             PARALLELISM=`getconf _NPROCESSORS_ONLN`
14234         ;;
14235         # what else than above does profit here *and* has /proc?
14236         *)
14237             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
14238             ;;
14239         esac
14241         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
14242         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
14243     fi
14246 if test "$no_parallelism_make" = "YES" && test $PARALLELISM -gt 1; then
14247     if test -z "$with_parallelism"; then
14248             AC_MSG_WARN([gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this.])
14249             add_warning "gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this."
14250             PARALLELISM="1"
14251     else
14252         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."
14253     fi
14256 if test $PARALLELISM -eq 0; then
14257     AC_MSG_RESULT([explicit make -j option needed])
14258 else
14259     AC_MSG_RESULT([$PARALLELISM])
14261 AC_SUBST(PARALLELISM)
14263 IWYU_PATH="$with_iwyu"
14264 AC_SUBST(IWYU_PATH)
14265 if test ! -z "$IWYU_PATH"; then
14266     if test ! -f "$IWYU_PATH"; then
14267         AC_MSG_ERROR([cannot find include-what-you-use binary specified by --with-iwyu])
14268     fi
14272 # Set up ILIB for MSVC build
14274 ILIB1=
14275 if test "$build_os" = "cygwin"; then
14276     ILIB="."
14277     if test -n "$JAVA_HOME"; then
14278         ILIB="$ILIB;$JAVA_HOME/lib"
14279     fi
14280     ILIB1=-link
14281     ILIB="$ILIB;$COMPATH/lib/$WIN_HOST_ARCH"
14282     ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/$WIN_HOST_ARCH"
14283     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14284     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14285     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
14286         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14287         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14288     fi
14289     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
14290     ucrtlibpath_formatted=$formatted_path
14291     ILIB="$ILIB;$ucrtlibpath_formatted"
14292     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
14293     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
14294         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/lib"
14295     else
14296         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
14297     fi
14299     if test "$cross_compiling" != "yes"; then
14300         ILIB_FOR_BUILD="$ILIB"
14301     fi
14303 AC_SUBST(ILIB)
14304 AC_SUBST(ILIB_FOR_BUILD)
14306 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
14307 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
14308 dnl from consteval constructor initializing const variable",
14309 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
14310 dnl expression' with consteval constructor", <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
14311 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
14312 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'", or
14313 dnl <https://developercommunity.visualstudio.com/t/1581879> "Bogus error C7595 with consteval
14314 dnl constructor in ternary expression (/std:c++latest)":
14315 AC_LANG_PUSH([C++])
14316 save_CXX=$CXX
14317 if test "$COM" = MSC && test "$COM_IS_CLANG" != TRUE; then
14318     CXX="env LIB=$ILIB $CXX"
14320 save_CXXFLAGS=$CXXFLAGS
14321 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
14322 AC_RUN_IFELSE([AC_LANG_PROGRAM([
14323         struct S {
14324             consteval S() { i = 1; }
14325             int i = 0;
14326         };
14327         S const s;
14329         struct S1 { consteval S1(int) {} };
14330         struct S2 {
14331             S1 x;
14332             S2(): x(0) {}
14333         };
14335         struct S3 {
14336             consteval S3() {}
14337             union {
14338                 int a;
14339                 unsigned b = 0;
14340             };
14341         };
14342         void f() { S3(); }
14344         struct S4 { consteval S4() = default; };
14345         void f4(bool b) { b ? S4() : S4(); }
14346     ], [
14347         return (s.i == 1) ? 0 : 1;
14348     ])], [
14349         AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
14350         AC_MSG_RESULT([yes])
14351     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
14352 CXX=$save_CXX
14353 CXXFLAGS=$save_CXXFLAGS
14354 AC_LANG_POP([C++])
14356 # ===================================================================
14357 # Creating bigger shared library to link against
14358 # ===================================================================
14359 AC_MSG_CHECKING([whether to create huge library])
14360 MERGELIBS=
14362 if test $_os = iOS -o $_os = Android; then
14363     # Never any point in mergelibs for these as we build just static
14364     # libraries anyway...
14365     enable_mergelibs=no
14368 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
14369     if test $_os != Linux -a $_os != WINNT; then
14370         add_warning "--enable-mergelibs is not tested for this platform"
14371     fi
14372     MERGELIBS="TRUE"
14373     AC_MSG_RESULT([yes])
14374     AC_DEFINE(ENABLE_MERGELIBS)
14375 else
14376     AC_MSG_RESULT([no])
14378 AC_SUBST([MERGELIBS])
14380 dnl ===================================================================
14381 dnl icerun is a wrapper that stops us spawning tens of processes
14382 dnl locally - for tools that can't be executed on the compile cluster
14383 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
14384 dnl ===================================================================
14385 AC_MSG_CHECKING([whether to use icerun wrapper])
14386 ICECREAM_RUN=
14387 if test "$enable_icecream" = "yes" && which icerun >/dev/null 2>&1 ; then
14388     ICECREAM_RUN=icerun
14389     AC_MSG_RESULT([yes])
14390 else
14391     AC_MSG_RESULT([no])
14393 AC_SUBST(ICECREAM_RUN)
14395 dnl ===================================================================
14396 dnl Setup the ICECC_VERSION for the build the same way it was set for
14397 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
14398 dnl ===================================================================
14399 x_ICECC_VERSION=[\#]
14400 if test -n "$ICECC_VERSION" ; then
14401     x_ICECC_VERSION=
14403 AC_SUBST(x_ICECC_VERSION)
14404 AC_SUBST(ICECC_VERSION)
14406 dnl ===================================================================
14408 AC_MSG_CHECKING([MPL subset])
14409 MPL_SUBSET=
14411 if test "$enable_mpl_subset" = "yes"; then
14412     warn_report=false
14413     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
14414         warn_report=true
14415     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
14416         warn_report=true
14417     fi
14418     if test "$warn_report" = "true"; then
14419         AC_MSG_ERROR([need to --disable-report-builder - extended database report builder.])
14420     fi
14421     if test "x$enable_postgresql_sdbc" != "xno"; then
14422         AC_MSG_ERROR([need to --disable-postgresql-sdbc - the PostgreSQL database backend.])
14423     fi
14424     if test "$enable_lotuswordpro" = "yes"; then
14425         AC_MSG_ERROR([need to --disable-lotuswordpro - a Lotus Word Pro file format import filter.])
14426     fi
14427     if test "$WITH_WEBDAV" = "neon"; then
14428         AC_MSG_ERROR([need --with-webdav=serf or --without-webdav - webdav support.])
14429     fi
14430     if test -n "$ENABLE_POPPLER"; then
14431         if test "x$SYSTEM_POPPLER" = "x"; then
14432             AC_MSG_ERROR([need to disable PDF import via poppler or use system library])
14433         fi
14434     fi
14435     # cf. m4/libo_check_extension.m4
14436     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
14437         AC_MSG_ERROR([need to disable extra extensions '$WITH_EXTRA_EXTENSIONS'])
14438     fi
14439     for theme in $WITH_THEMES; do
14440         case $theme in
14441         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
14442             AC_MSG_ERROR([need to disable icon themes from '$WITH_THEMES': $theme present, use --with-theme=colibre]) ;;
14443         *) : ;;
14444         esac
14445     done
14447     ENABLE_OPENGL_TRANSITIONS=
14449     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
14450         AC_MSG_ERROR([need to --disable-lpsolve - calc linear programming solver.])
14451     fi
14453     MPL_SUBSET="TRUE"
14454     AC_DEFINE(MPL_HAVE_SUBSET)
14455     AC_MSG_RESULT([only])
14456 else
14457     AC_MSG_RESULT([no restrictions])
14459 AC_SUBST(MPL_SUBSET)
14461 dnl ===================================================================
14463 AC_MSG_CHECKING([formula logger])
14464 ENABLE_FORMULA_LOGGER=
14466 if test "x$enable_formula_logger" = "xyes"; then
14467     AC_MSG_RESULT([yes])
14468     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14469     ENABLE_FORMULA_LOGGER=TRUE
14470 elif test -n "$ENABLE_DBGUTIL" ; then
14471     AC_MSG_RESULT([yes])
14472     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14473     ENABLE_FORMULA_LOGGER=TRUE
14474 else
14475     AC_MSG_RESULT([no])
14478 AC_SUBST(ENABLE_FORMULA_LOGGER)
14480 dnl ===================================================================
14481 dnl Checking for active Antivirus software.
14482 dnl ===================================================================
14484 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
14485     AC_MSG_CHECKING([for active Antivirus software])
14486     ANTIVIRUS_LIST=`cscript.exe //Nologo $SRC_ROOT/antivirusDetection.vbs`
14487     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
14488         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
14489             AC_MSG_RESULT([found])
14490             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
14491             echo $EICAR_STRING > $SRC_ROOT/eicar
14492             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
14493             rm $SRC_ROOT/eicar
14494             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14495                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14496             fi
14497             echo $EICAR_STRING > $BUILDDIR/eicar
14498             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
14499             rm $BUILDDIR/eicar
14500             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14501                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14502             fi
14503             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"
14504         else
14505             AC_MSG_RESULT([not found])
14506         fi
14507     else
14508         AC_MSG_RESULT([n/a])
14509     fi
14512 dnl ===================================================================
14513 dnl Setting up the environment.
14514 dnl ===================================================================
14515 AC_MSG_NOTICE([setting up the build environment variables...])
14517 AC_SUBST(COMPATH)
14519 if test "$build_os" = "cygwin"; then
14520     if test -d "$COMPATH/atlmfc/lib/spectre"; then
14521         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
14522         ATL_INCLUDE="$COMPATH/atlmfc/include"
14523     elif test -d "$COMPATH/atlmfc/lib"; then
14524         ATL_LIB="$COMPATH/atlmfc/lib"
14525         ATL_INCLUDE="$COMPATH/atlmfc/include"
14526     else
14527         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
14528         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
14529     fi
14530     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
14531     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
14532     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
14534     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
14535     PathFormat "/usr/bin/find.exe"
14536     FIND="$formatted_path"
14537     PathFormat "/usr/bin/sort.exe"
14538     SORT="$formatted_path"
14539     PathFormat "/usr/bin/grep.exe"
14540     WIN_GREP="$formatted_path"
14541     PathFormat "/usr/bin/ls.exe"
14542     WIN_LS="$formatted_path"
14543     PathFormat "/usr/bin/touch.exe"
14544     WIN_TOUCH="$formatted_path"
14545 else
14546     FIND=find
14547     SORT=sort
14550 AC_SUBST(ATL_INCLUDE)
14551 AC_SUBST(ATL_LIB)
14552 AC_SUBST(FIND)
14553 AC_SUBST(SORT)
14554 AC_SUBST(WIN_GREP)
14555 AC_SUBST(WIN_LS)
14556 AC_SUBST(WIN_TOUCH)
14558 AC_SUBST(BUILD_TYPE)
14560 AC_SUBST(SOLARINC)
14562 PathFormat "$PERL"
14563 PERL="$formatted_path"
14564 AC_SUBST(PERL)
14566 if test -n "$TMPDIR"; then
14567     TEMP_DIRECTORY="$TMPDIR"
14568 else
14569     TEMP_DIRECTORY="/tmp"
14571 if test "$build_os" = "cygwin"; then
14572     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
14574 AC_SUBST(TEMP_DIRECTORY)
14576 # setup the PATH for the environment
14577 if test -n "$LO_PATH_FOR_BUILD"; then
14578     LO_PATH="$LO_PATH_FOR_BUILD"
14579     case "$host_os" in
14580     cygwin*|wsl*)
14581         pathmunge "$MSVC_HOST_PATH" "before"
14582         ;;
14583     esac
14584 else
14585     LO_PATH="$PATH"
14587     case "$host_os" in
14589     aix*|dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
14590         if test "$ENABLE_JAVA" != ""; then
14591             pathmunge "$JAVA_HOME/bin" "after"
14592         fi
14593         ;;
14595     cygwin*|wsl*)
14596         # Win32 make needs native paths
14597         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
14598             LO_PATH=`cygpath -p -m "$PATH"`
14599         fi
14600         if test "$WIN_BUILD_ARCH" = "x64"; then
14601             # needed for msi packaging
14602             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
14603         fi
14604         # .NET 4.6 and higher don't have bin directory
14605         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
14606             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
14607         fi
14608         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
14609         pathmunge "$CSC_PATH" "before"
14610         pathmunge "$MIDL_PATH" "before"
14611         pathmunge "$AL_PATH" "before"
14612         pathmunge "$MSVC_MULTI_PATH" "before"
14613         pathmunge "$MSVC_BUILD_PATH" "before"
14614         if test -n "$MSBUILD_PATH" ; then
14615             pathmunge "$MSBUILD_PATH" "before"
14616         fi
14617         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
14618         if test "$ENABLE_JAVA" != ""; then
14619             if test -d "$JAVA_HOME/jre/bin/client"; then
14620                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
14621             fi
14622             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
14623                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
14624             fi
14625             pathmunge "$JAVA_HOME/bin" "before"
14626         fi
14627         pathmunge "$MSVC_HOST_PATH" "before"
14628         ;;
14630     solaris*)
14631         pathmunge "/usr/css/bin" "before"
14632         if test "$ENABLE_JAVA" != ""; then
14633             pathmunge "$JAVA_HOME/bin" "after"
14634         fi
14635         ;;
14636     esac
14639 AC_SUBST(LO_PATH)
14641 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
14642 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
14643     x_LO_ELFCHECK_ALLOWLIST=
14644 else
14645     x_LO_ELFCHECK_ALLOWLIST=[\#]
14647 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
14648 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
14650 libo_FUZZ_SUMMARY
14652 # Generate a configuration sha256 we can use for deps
14653 if test -f config_host.mk; then
14654     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
14656 if test -f config_host_lang.mk; then
14657     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
14660 CFLAGS=$my_original_CFLAGS
14661 CXXFLAGS=$my_original_CXXFLAGS
14662 CPPFLAGS=$my_original_CPPFLAGS
14664 AC_CONFIG_LINKS([include:include])
14666 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
14667 # BUILD platform configuration] - otherwise breaks cross building
14668 AC_CONFIG_FILES([config_host.mk
14669                  config_host_lang.mk
14670                  Makefile
14671                  lo.xcent
14672                  bin/bffvalidator.sh
14673                  bin/odfvalidator.sh
14674                  bin/officeotron.sh
14675                  hardened_runtime.xcent
14676                  instsetoo_native/util/openoffice.lst
14677                  sysui/desktop/macosx/Info.plist
14678                  vs-code-template.code-workspace:.vscode/vs-code-template.code-workspace.in])
14679 AC_CONFIG_HEADERS([config_host/config_buildid.h])
14680 AC_CONFIG_HEADERS([config_host/config_box2d.h])
14681 AC_CONFIG_HEADERS([config_host/config_clang.h])
14682 AC_CONFIG_HEADERS([config_host/config_crypto.h])
14683 AC_CONFIG_HEADERS([config_host/config_dconf.h])
14684 AC_CONFIG_HEADERS([config_host/config_eot.h])
14685 AC_CONFIG_HEADERS([config_host/config_extensions.h])
14686 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
14687 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
14688 AC_CONFIG_HEADERS([config_host/config_dbus.h])
14689 AC_CONFIG_HEADERS([config_host/config_features.h])
14690 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
14691 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
14692 AC_CONFIG_HEADERS([config_host/config_firebird.h])
14693 AC_CONFIG_HEADERS([config_host/config_folders.h])
14694 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
14695 AC_CONFIG_HEADERS([config_host/config_gio.h])
14696 AC_CONFIG_HEADERS([config_host/config_global.h])
14697 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
14698 AC_CONFIG_HEADERS([config_host/config_java.h])
14699 AC_CONFIG_HEADERS([config_host/config_langs.h])
14700 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
14701 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
14702 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
14703 AC_CONFIG_HEADERS([config_host/config_locales.h])
14704 AC_CONFIG_HEADERS([config_host/config_mpl.h])
14705 AC_CONFIG_HEADERS([config_host/config_oox.h])
14706 AC_CONFIG_HEADERS([config_host/config_options.h])
14707 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
14708 AC_CONFIG_HEADERS([config_host/config_zxing.h])
14709 AC_CONFIG_HEADERS([config_host/config_skia.h])
14710 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
14711 AC_CONFIG_HEADERS([config_host/config_vendor.h])
14712 AC_CONFIG_HEADERS([config_host/config_vcl.h])
14713 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
14714 AC_CONFIG_HEADERS([config_host/config_version.h])
14715 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
14716 AC_CONFIG_HEADERS([config_host/config_poppler.h])
14717 AC_CONFIG_HEADERS([config_host/config_python.h])
14718 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
14719 AC_OUTPUT
14721 if test "$CROSS_COMPILING" = TRUE; then
14722     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
14725 # touch the config timestamp file
14726 if test ! -f config_host.mk.stamp; then
14727     echo > config_host.mk.stamp
14728 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
14729     echo "Host Configuration unchanged - avoiding scp2 stamp update"
14730 else
14731     echo > config_host.mk.stamp
14734 # touch the config lang timestamp file
14735 if test ! -f config_host_lang.mk.stamp; then
14736     echo > config_host_lang.mk.stamp
14737 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
14738     echo "Language Configuration unchanged - avoiding scp2 stamp update"
14739 else
14740     echo > config_host_lang.mk.stamp
14744 if test \( "$STALE_MAKE" = "TRUE" -o "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE" \) \
14745         -a "$build_os" = "cygwin"; then
14747 cat << _EOS
14748 ****************************************************************************
14749 WARNING:
14750 Your make version is known to be horribly slow, and hard to debug
14751 problems with. To get a reasonably functional make please do:
14753 to install a pre-compiled binary make for Win32
14755  mkdir -p /opt/lo/bin
14756  cd /opt/lo/bin
14757  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
14758  cp make-4.2.1-msvc.exe make
14759  chmod +x make
14761 to install from source:
14762 place yourself in a working directory of you choice.
14764  git clone git://git.savannah.gnu.org/make.git
14766  [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"]
14767  set PATH=%PATH%;C:\Cygwin\bin
14768  [or Cygwin64, if that is what you have]
14769  cd path-to-make-repo-you-cloned-above
14770  build_w32.bat --without-guile
14772 should result in a WinRel/gnumake.exe.
14773 Copy it to the Cygwin /opt/lo/bin directory as make.exe
14775 Then re-run autogen.sh
14777 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
14778 Alternatively, you can install the 'new' make where ever you want and make sure that `which make` finds it.
14780 _EOS
14781 if test "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE"; then
14782     AC_MSG_ERROR([no file function found; the build will fail without it; use GNU make 4.0 or later])
14787 cat << _EOF
14788 ****************************************************************************
14790 To build, run:
14791 $GNUMAKE
14793 To view some help, run:
14794 $GNUMAKE help
14796 _EOF
14798 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
14799     cat << _EOF
14800 After the build has finished successfully, you can immediately run what you built using the command:
14801 _EOF
14803     if test $_os = Darwin; then
14804         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
14805     else
14806         echo instdir/program/soffice
14807     fi
14808     cat << _EOF
14810 If you want to run the smoketest, run:
14811 $GNUMAKE check
14813 _EOF
14816 if test -s "$WARNINGS_FILE_FOR_BUILD"; then
14817     echo "BUILD / cross-toolset config, repeated ($WARNINGS_FILE_FOR_BUILD)"
14818     cat "$WARNINGS_FILE_FOR_BUILD"
14819     echo
14822 if test -s "$WARNINGS_FILE"; then
14823     echo "HOST config ($WARNINGS_FILE)"
14824     cat "$WARNINGS_FILE"
14827 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: