sc: filter: html: fix missing color scale conditional format
[LibreOffice.git] / configure.ac
blobfac7acde7c2b56398363c60ee52ba96ae569666a
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.7.2.M3],[],[],[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])
3289     MACOSX_SDK_BUILD_VERSION=$(xcodebuild -version -sdk "$MACOSX_SDK_PATH" ProductBuildVersion)
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     my_xcode_ver1=$(xcrun xcodebuild -version | tail -n 1)
3357     MACOSX_XCODE_BUILD_VERSION=${my_xcode_ver1#Build version }
3359     case "$with_macosx_version_min_required" in
3360     10.12)
3361         MAC_OS_X_VERSION_MIN_REQUIRED="101200"
3362         ;;
3363     10.13)
3364         MAC_OS_X_VERSION_MIN_REQUIRED="101300"
3365         ;;
3366     10.14)
3367         MAC_OS_X_VERSION_MIN_REQUIRED="101400"
3368         ;;
3369     10.15)
3370         MAC_OS_X_VERSION_MIN_REQUIRED="101500"
3371         ;;
3372     10.16)
3373         MAC_OS_X_VERSION_MIN_REQUIRED="101600"
3374         ;;
3375     11.0)
3376         MAC_OS_X_VERSION_MIN_REQUIRED="110000"
3377         ;;
3378     11.1)
3379         MAC_OS_X_VERSION_MIN_REQUIRED="110100"
3380         ;;
3381     11.3)
3382         MAC_OS_X_VERSION_MIN_REQUIRED="110300"
3383         ;;
3384     12.0)
3385         MAC_OS_X_VERSION_MIN_REQUIRED="120000"
3386         ;;
3387     12.1)
3388         MAC_OS_X_VERSION_MIN_REQUIRED="120100"
3389         ;;
3390     12.3)
3391         MAC_OS_X_VERSION_MIN_REQUIRED="120300"
3392         ;;
3393     *)
3394         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])
3395         ;;
3396     esac
3398     LIBTOOL=/usr/bin/libtool
3399     INSTALL_NAME_TOOL=install_name_tool
3400     if test -z "$save_CC"; then
3401         stdlib=-stdlib=libc++
3403         AC_MSG_CHECKING([what C compiler to use])
3404         CC="`xcrun -find clang`"
3405         CC_BASE=`first_arg_basename "$CC"`
3406         if test "$host_cpu" = x86_64; then
3407             CC+=" -target x86_64-apple-macos"
3408         else
3409             CC+=" -target arm64-apple-macos"
3410         fi
3411         CC+=" -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3412         AC_MSG_RESULT([$CC])
3414         AC_MSG_CHECKING([what C++ compiler to use])
3415         CXX="`xcrun -find clang++`"
3416         CXX_BASE=`first_arg_basename "$CXX"`
3417         if test "$host_cpu" = x86_64; then
3418             CXX+=" -target x86_64-apple-macos"
3419         else
3420             CXX+=" -target arm64-apple-macos"
3421         fi
3422         CXX+=" $stdlib -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3423         AC_MSG_RESULT([$CXX])
3425         INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3426         AR=`xcrun -find ar`
3427         NM=`xcrun -find nm`
3428         STRIP=`xcrun -find strip`
3429         LIBTOOL=`xcrun -find libtool`
3430         RANLIB=`xcrun -find ranlib`
3431     fi
3433     case "$with_macosx_version_max_allowed" in
3434     10.12)
3435         MAC_OS_X_VERSION_MAX_ALLOWED="101200"
3436         ;;
3437     10.13)
3438         MAC_OS_X_VERSION_MAX_ALLOWED="101300"
3439         ;;
3440     10.14)
3441         MAC_OS_X_VERSION_MAX_ALLOWED="101400"
3442         ;;
3443     10.15)
3444         MAC_OS_X_VERSION_MAX_ALLOWED="101500"
3445         ;;
3446     11.0)
3447         MAC_OS_X_VERSION_MAX_ALLOWED="110000"
3448         ;;
3449     11.1)
3450         MAC_OS_X_VERSION_MAX_ALLOWED="110100"
3451         ;;
3452     11.3)
3453         MAC_OS_X_VERSION_MAX_ALLOWED="110300"
3454         ;;
3455     12.0)
3456         MAC_OS_X_VERSION_MAX_ALLOWED="120000"
3457         ;;
3458     12.1)
3459         MAC_OS_X_VERSION_MAX_ALLOWED="120100"
3460         ;;
3461     12.3)
3462         MAC_OS_X_VERSION_MAX_ALLOWED="120300"
3463         ;;
3464     *)
3465         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])
3466         ;;
3467     esac
3469     AC_MSG_CHECKING([that macosx-version-min-required is coherent with macosx-version-max-allowed])
3470     if test $MAC_OS_X_VERSION_MIN_REQUIRED -gt $MAC_OS_X_VERSION_MAX_ALLOWED; then
3471         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])
3472     else
3473         AC_MSG_RESULT([ok])
3474     fi
3476     AC_MSG_CHECKING([that macosx-version-max-allowed is coherent with macos-with-sdk])
3477     if test $MAC_OS_X_VERSION_MAX_ALLOWED -gt $MACOSX_SDK_VERSION; then
3478         AC_MSG_ERROR([the version maximum allowed cannot be greater than the sdk level])
3479     else
3480         AC_MSG_RESULT([ok])
3481     fi
3482     AC_MSG_NOTICE([MAC_OS_X_VERSION_MIN_REQUIRED=$MAC_OS_X_VERSION_MIN_REQUIRED])
3483     AC_MSG_NOTICE([MAC_OS_X_VERSION_MAX_ALLOWED=$MAC_OS_X_VERSION_MAX_ALLOWED])
3485     AC_MSG_CHECKING([whether to do code signing])
3487     if test -z "$enable_macosx_code_signing" -o "$enable_macosx_code_signing" == "no" ; then
3488         AC_MSG_RESULT([no])
3489     else
3490         if test "$enable_macosx_code_signing" = yes; then
3491             # By default use the first suitable certificate (?).
3493             # http://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3494             # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3495             # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3496             # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3497             # "Developer ID Application" one.
3498             identity="Developer ID Application:"
3499         else
3500             identity=$enable_macosx_code_signing
3501         fi
3502         identity=`security find-identity -p codesigning -v 2>/dev/null | $AWK "/$identity/{print \\$2; exit}"`
3503         if test -n "$identity"; then
3504             MACOSX_CODESIGNING_IDENTITY=$identity
3505             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3506             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3507         else
3508             AC_MSG_ERROR([cannot determine identity to use])
3509         fi
3510     fi
3512     AC_MSG_CHECKING([whether to create a Mac App Store package])
3514     if test -z "$enable_macosx_package_signing" || test "$enable_macosx_package_signing" == no; then
3515         AC_MSG_RESULT([no])
3516     elif test -z "$MACOSX_CODESIGNING_IDENTITY"; then
3517         AC_MSG_ERROR([You forgot --enable-macosx-code-signing])
3518     else
3519         if test "$enable_macosx_package_signing" = yes; then
3520             # By default use the first suitable certificate.
3521             # It should be a "3rd Party Mac Developer Installer" one
3522             identity="3rd Party Mac Developer Installer:"
3523         else
3524             identity=$enable_macosx_package_signing
3525         fi
3526         identity=`security find-identity -v 2>/dev/null | $AWK "/$identity/ {print \\$2; exit}"`
3527         if test -n "$identity"; then
3528             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3529             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3530             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3531         else
3532             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3533         fi
3534     fi
3536     if test -n "$MACOSX_CODESIGNING_IDENTITY" -a -n "$MACOSX_PACKAGE_SIGNING_IDENTITY" -a "$MACOSX_CODESIGNING_IDENTITY" = "$MACOSX_PACKAGE_SIGNING_IDENTITY"; then
3537         AC_MSG_ERROR([You should not use the same identity for code and package signing])
3538     fi
3540     AC_MSG_CHECKING([whether to sandbox the application])
3542     if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then
3543         AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java])
3544     elif test "$enable_macosx_sandbox" = yes; then
3545         ENABLE_MACOSX_SANDBOX=TRUE
3546         AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX)
3547         AC_MSG_RESULT([yes])
3548     else
3549         AC_MSG_RESULT([no])
3550     fi
3552     AC_MSG_CHECKING([what macOS app bundle identifier to use])
3553     MACOSX_BUNDLE_IDENTIFIER=$with_macosx_bundle_identifier
3554     AC_MSG_RESULT([$MACOSX_BUNDLE_IDENTIFIER])
3556     if test -n "$with_macosx_provisioning_profile" ; then
3557         if test ! -f "$with_macosx_provisioning_profile"; then
3558             AC_MSG_ERROR([provisioning profile not found at $with_macosx_provisioning_profile])
3559         else
3560             MACOSX_PROVISIONING_PROFILE=$with_macosx_provisioning_profile
3561             MACOSX_PROVISIONING_INFO=$([security cms -D -i "$MACOSX_PROVISIONING_PROFILE" | \
3562                 xmllint --xpath "//key[.='com.apple.application-identifier' or .='com.apple.developer.team-identifier'] \
3563                     | //key[.='com.apple.application-identifier' or .='com.apple.developer.team-identifier']/following-sibling::string[1]" - | \
3564                 sed -e 's#><#>\n\t<#g' -e 's#^#\t#'])
3565         fi
3566     fi
3568 AC_SUBST(MACOSX_SDK_PATH)
3569 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3570 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3571 AC_SUBST(MAC_OS_X_VERSION_MAX_ALLOWED)
3572 AC_SUBST(INSTALL_NAME_TOOL)
3573 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3574 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3575 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3576 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3577 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3578 AC_SUBST(MACOSX_PROVISIONING_INFO)
3579 AC_SUBST(MACOSX_PROVISIONING_PROFILE)
3580 AC_SUBST(MACOSX_SDK_BUILD_VERSION)
3581 AC_SUBST(MACOSX_XCODE_BUILD_VERSION)
3583 dnl ===================================================================
3584 dnl Check iOS SDK and compiler
3585 dnl ===================================================================
3587 if test $_os = iOS; then
3588     AC_MSG_CHECKING([what iOS SDK to use])
3589     current_sdk_ver=15.0
3590     older_sdk_vers="14.5"
3591     if test "$enable_ios_simulator" = "yes"; then
3592         platform=iPhoneSimulator
3593         versionmin=-mios-simulator-version-min=13.6
3594     else
3595         platform=iPhoneOS
3596         versionmin=-miphoneos-version-min=13.6
3597     fi
3598     xcode_developer=`xcode-select -print-path`
3600     for sdkver in $current_sdk_ver $older_sdk_vers; do
3601         t=$xcode_developer/Platforms/$platform.platform/Developer/SDKs/$platform$sdkver.sdk
3602         if test -d $t; then
3603             sysroot=$t
3604             break
3605         fi
3606     done
3608     if test -z "$sysroot"; then
3609         AC_MSG_ERROR([Could not find iOS SDK, expected something like $xcode_developer/Platforms/$platform.platform/Developer/SDKs/${platform}${current_sdk_ver}.sdk])
3610     fi
3612     AC_MSG_RESULT($sysroot)
3614     stdlib="-stdlib=libc++"
3616     AC_MSG_CHECKING([what C compiler to use])
3617     CC="`xcrun -find clang`"
3618     CC_BASE=`first_arg_basename "$CC"`
3619     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3620     AC_MSG_RESULT([$CC])
3622     AC_MSG_CHECKING([what C++ compiler to use])
3623     CXX="`xcrun -find clang++`"
3624     CXX_BASE=`first_arg_basename "$CXX"`
3625     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3626     AC_MSG_RESULT([$CXX])
3628     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3629     AR=`xcrun -find ar`
3630     NM=`xcrun -find nm`
3631     STRIP=`xcrun -find strip`
3632     LIBTOOL=`xcrun -find libtool`
3633     RANLIB=`xcrun -find ranlib`
3636 AC_MSG_CHECKING([whether to treat the installation as read-only])
3638 if test $_os = Darwin; then
3639     enable_readonly_installset=yes
3640 elif test "$enable_extensions" != yes; then
3641     enable_readonly_installset=yes
3643 if test "$enable_readonly_installset" = yes; then
3644     AC_MSG_RESULT([yes])
3645     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3646 else
3647     AC_MSG_RESULT([no])
3650 dnl ===================================================================
3651 dnl Structure of install set
3652 dnl ===================================================================
3654 if test $_os = Darwin; then
3655     LIBO_BIN_FOLDER=MacOS
3656     LIBO_ETC_FOLDER=Resources
3657     LIBO_LIBEXEC_FOLDER=MacOS
3658     LIBO_LIB_FOLDER=Frameworks
3659     LIBO_LIB_PYUNO_FOLDER=Resources
3660     LIBO_SHARE_FOLDER=Resources
3661     LIBO_SHARE_HELP_FOLDER=Resources/help
3662     LIBO_SHARE_JAVA_FOLDER=Resources/java
3663     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3664     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3665     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3666     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3667     LIBO_URE_BIN_FOLDER=MacOS
3668     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3669     LIBO_URE_LIB_FOLDER=Frameworks
3670     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3671     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3672 elif test $_os = WINNT; then
3673     LIBO_BIN_FOLDER=program
3674     LIBO_ETC_FOLDER=program
3675     LIBO_LIBEXEC_FOLDER=program
3676     LIBO_LIB_FOLDER=program
3677     LIBO_LIB_PYUNO_FOLDER=program
3678     LIBO_SHARE_FOLDER=share
3679     LIBO_SHARE_HELP_FOLDER=help
3680     LIBO_SHARE_JAVA_FOLDER=program/classes
3681     LIBO_SHARE_PRESETS_FOLDER=presets
3682     LIBO_SHARE_READMES_FOLDER=readmes
3683     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3684     LIBO_SHARE_SHELL_FOLDER=program/shell
3685     LIBO_URE_BIN_FOLDER=program
3686     LIBO_URE_ETC_FOLDER=program
3687     LIBO_URE_LIB_FOLDER=program
3688     LIBO_URE_MISC_FOLDER=program
3689     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3690 else
3691     LIBO_BIN_FOLDER=program
3692     LIBO_ETC_FOLDER=program
3693     LIBO_LIBEXEC_FOLDER=program
3694     LIBO_LIB_FOLDER=program
3695     LIBO_LIB_PYUNO_FOLDER=program
3696     LIBO_SHARE_FOLDER=share
3697     LIBO_SHARE_HELP_FOLDER=help
3698     LIBO_SHARE_JAVA_FOLDER=program/classes
3699     LIBO_SHARE_PRESETS_FOLDER=presets
3700     LIBO_SHARE_READMES_FOLDER=readmes
3701     if test "$enable_fuzzers" != yes; then
3702         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3703     else
3704         LIBO_SHARE_RESOURCE_FOLDER=resource
3705     fi
3706     LIBO_SHARE_SHELL_FOLDER=program/shell
3707     LIBO_URE_BIN_FOLDER=program
3708     LIBO_URE_ETC_FOLDER=program
3709     LIBO_URE_LIB_FOLDER=program
3710     LIBO_URE_MISC_FOLDER=program
3711     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3713 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3714 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3715 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3716 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3717 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3718 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3719 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3720 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3721 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3722 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3723 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3724 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3725 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3726 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3727 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3728 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3730 # Not all of them needed in config_host.mk, add more if need arises
3731 AC_SUBST(LIBO_BIN_FOLDER)
3732 AC_SUBST(LIBO_ETC_FOLDER)
3733 AC_SUBST(LIBO_LIB_FOLDER)
3734 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3735 AC_SUBST(LIBO_SHARE_FOLDER)
3736 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3737 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3738 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3739 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3740 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3741 AC_SUBST(LIBO_URE_BIN_FOLDER)
3742 AC_SUBST(LIBO_URE_ETC_FOLDER)
3743 AC_SUBST(LIBO_URE_LIB_FOLDER)
3744 AC_SUBST(LIBO_URE_MISC_FOLDER)
3745 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3747 dnl ===================================================================
3748 dnl Windows specific tests and stuff
3749 dnl ===================================================================
3751 reg_get_value()
3753     # Return value: $regvalue
3754     unset regvalue
3756     if test "$build_os" = "wsl"; then
3757         regvalue=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --read-registry $1 "$2" 2>/dev/null)
3758         return
3759     fi
3761     local _regentry="/proc/registry${1}/${2}"
3762     if test -f "$_regentry"; then
3763         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3764         # Registry keys read via /proc/registry* are always \0 terminated!
3765         local _regvalue=$(tr -d '\0' < "$_regentry")
3766         if test $? -eq 0; then
3767             regvalue=$_regvalue
3768         fi
3769     fi
3772 # Get a value from the 32-bit side of the Registry
3773 reg_get_value_32()
3775     reg_get_value "32" "$1"
3778 # Get a value from the 64-bit side of the Registry
3779 reg_get_value_64()
3781     reg_get_value "64" "$1"
3784 case "$host_os" in
3785 cygwin*|wsl*)
3786     COM=MSC
3787     OS=WNT
3788     RTL_OS=Windows
3789     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3790         P_SEP=";"
3791     else
3792         P_SEP=:
3793     fi
3794     case "$host_cpu" in
3795     x86_64)
3796         CPUNAME=X86_64
3797         RTL_ARCH=X86_64
3798         PLATFORMID=windows_x86_64
3799         WINDOWS_X64=1
3800         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
3801         WIN_HOST_ARCH="x64"
3802         WIN_MULTI_ARCH="x86"
3803         WIN_HOST_BITS=64
3804         ;;
3805     i*86)
3806         CPUNAME=INTEL
3807         RTL_ARCH=x86
3808         PLATFORMID=windows_x86
3809         WIN_HOST_ARCH="x86"
3810         WIN_HOST_BITS=32
3811         WIN_OTHER_ARCH="x64"
3812         ;;
3813     aarch64)
3814         CPUNAME=AARCH64
3815         RTL_ARCH=AARCH64
3816         PLATFORMID=windows_aarch64
3817         WINDOWS_X64=1
3818         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
3819         WIN_HOST_ARCH="arm64"
3820         WIN_HOST_BITS=64
3821         with_ucrt_dir=no
3822         ;;
3823     *)
3824         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
3825         ;;
3826     esac
3828     case "$build_cpu" in
3829     x86_64) WIN_BUILD_ARCH="x64" ;;
3830     i*86) WIN_BUILD_ARCH="x86" ;;
3831     aarch64) WIN_BUILD_ARCH="arm64" ;;
3832     *)
3833         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
3834         ;;
3835     esac
3837     SCPDEFS="$SCPDEFS -D_MSC_VER"
3838     ;;
3839 esac
3841 # multi-arch is an arch, which can execute on the host (x86 on x64), while
3842 # other-arch won't, but wouldn't break the build (x64 on x86).
3843 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
3844     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
3848 if test "$_os" = "iOS" -o "$build_cpu" != "$host_cpu"; then
3849     # To allow building Windows multi-arch releases without cross-tooling
3850     if test -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH"; then
3851         cross_compiling="yes"
3852     fi
3855 ENABLE_WASM_STRIP=''
3856 if test "$cross_compiling" = "yes"; then
3857     export CROSS_COMPILING=TRUE
3858     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
3859         ENABLE_WASM_STRIP=TRUE
3860     fi
3861 else
3862     CROSS_COMPILING=
3863     BUILD_TYPE="$BUILD_TYPE NATIVE"
3865 AC_SUBST(CROSS_COMPILING)
3866 AC_SUBST(ENABLE_WASM_STRIP)
3868 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
3869 # NOTE: must _not_ be used for bundled external libraries!
3870 ISYSTEM=
3871 if test "$GCC" = "yes"; then
3872     AC_MSG_CHECKING( for -isystem )
3873     save_CFLAGS=$CFLAGS
3874     CFLAGS="$CFLAGS -isystem /usr/include -Werror"
3875     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
3876     CFLAGS=$save_CFLAGS
3877     if test -n "$ISYSTEM"; then
3878         AC_MSG_RESULT(yes)
3879     else
3880         AC_MSG_RESULT(no)
3881     fi
3883 if test -z "$ISYSTEM"; then
3884     # fall back to using -I
3885     ISYSTEM=-I
3887 AC_SUBST(ISYSTEM)
3889 dnl ===================================================================
3890 dnl  Check which Visual Studio compiler is used
3891 dnl ===================================================================
3893 map_vs_year_to_version()
3895     # Return value: $vsversion
3897     unset vsversion
3899     case $1 in
3900     2019)
3901         vsversion=16;;
3902     2022)
3903         vsversion=17;;
3904     *)
3905         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
3906     esac
3909 vs_versions_to_check()
3911     # Args: $1 (optional) : versions to check, in the order of preference
3912     # Return value: $vsversions
3914     unset vsversions
3916     if test -n "$1"; then
3917         map_vs_year_to_version "$1"
3918         vsversions=$vsversion
3919     else
3920         # Default version is 2019
3921         vsversions="16"
3922     fi
3925 win_get_env_from_vsvars32bat()
3927     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
3928     # Also seems to be located in another directory under the same name: vsvars32.bat
3929     # https://github.com/bazelbuild/bazel/blob/master/src/main/native/build_windows_jni.sh#L56-L57
3930     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$(cygpath -w $VC_PRODUCT_DIR)" > $WRAPPERBATCHFILEPATH
3931     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
3932     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
3933     local result
3934     if test "$build_os" = "wsl"; then
3935         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
3936     else
3937         chmod +x $WRAPPERBATCHFILEPATH
3938         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
3939     fi
3940     rm -f $WRAPPERBATCHFILEPATH
3941     printf '%s' "$result"
3944 find_ucrt()
3946     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/InstallationFolder"
3947     if test -n "$regvalue"; then
3948         PathFormat "$regvalue"
3949         UCRTSDKDIR=$formatted_path_unix
3950         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion"
3951         UCRTVERSION=$regvalue
3952         # Rest if not exist
3953         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
3954           UCRTSDKDIR=
3955         fi
3956     fi
3957     if test -z "$UCRTSDKDIR"; then
3958         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
3959         ide_env_file="${ide_env_dir}VsDevCmd.bat"
3960         if test -f "$ide_env_file"; then
3961             PathFormat "$(win_get_env_from_vsvars32bat UniversalCRTSdkDir)"
3962             UCRTSDKDIR=$formatted_path
3963             UCRTVERSION=$(win_get_env_from_vsvars32bat UCRTVersion)
3964             dnl Hack needed at least by tml:
3965             if test "$UCRTVERSION" = 10.0.15063.0 \
3966                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
3967                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
3968             then
3969                 UCRTVERSION=10.0.14393.0
3970             fi
3971         else
3972           AC_MSG_ERROR([No UCRT found])
3973         fi
3974     fi
3977 find_msvc()
3979     # Find Visual C++
3980     # Args: $1 (optional) : The VS version year
3981     # Return values: $vctest, $vcyear, $vctoolset, $vcnumwithdot, $vcbuildnumber
3983     unset vctest vctoolset vcnumwithdot vcbuildnumber
3985     vs_versions_to_check "$1"
3986     if test "$build_os" = wsl; then
3987         vswhere="$PROGRAMFILESX86"
3988     else
3989         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
3990     fi
3991     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
3992     PathFormat "$vswhere"
3993     vswhere=$formatted_path_unix
3994     for ver in $vsversions; do
3995         vswhereoutput=`$vswhere -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3996         if test -z "$vswhereoutput"; then
3997             vswhereoutput=`$vswhere -prerelease -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3998         fi
3999         # Fall back to all MS products (this includes VC++ Build Tools)
4000         if ! test -n "$vswhereoutput"; then
4001             AC_MSG_CHECKING([VC++ Build Tools and similar])
4002             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4003         fi
4004         if test -n "$vswhereoutput"; then
4005             PathFormat "$vswhereoutput"
4006             vctest=$formatted_path_unix
4007             break
4008         fi
4009     done
4011     if test -n "$vctest"; then
4012         vcnumwithdot="$ver.0"
4013         case "$vcnumwithdot" in
4014         16.0)
4015             vcyear=2019
4016             vctoolset=v142
4017             ;;
4018         17.0)
4019             vcyear=2022
4020             vctoolset=v143
4021             ;;
4022         esac
4023         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
4025     fi
4028 test_cl_exe()
4030     AC_MSG_CHECKING([$1 compiler])
4032     CL_EXE_PATH="$2/cl.exe"
4034     if test ! -f "$CL_EXE_PATH"; then
4035         if test "$1" = "multi-arch"; then
4036             AC_MSG_WARN([no compiler (cl.exe) in $2])
4037             return 1
4038         else
4039             AC_MSG_ERROR([no compiler (cl.exe) in $2])
4040         fi
4041     fi
4043     dnl ===========================================================
4044     dnl  Check for the corresponding mspdb*.dll
4045     dnl ===========================================================
4047     # MSVC 15.0 has libraries from 14.0?
4048     mspdbnum="140"
4050     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
4051         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
4052     fi
4054     # The compiles has to find its shared libraries
4055     OLD_PATH="$PATH"
4056     TEMP_PATH=`cygpath -d "$2"`
4057     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
4059     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
4060         AC_MSG_ERROR([no compiler (cl.exe) in $2])
4061     fi
4063     PATH="$OLD_PATH"
4065     AC_MSG_RESULT([$CL_EXE_PATH])
4068 SOLARINC=
4069 MSBUILD_PATH=
4070 DEVENV=
4071 if test "$_os" = "WINNT"; then
4072     AC_MSG_CHECKING([Visual C++])
4073     find_msvc "$with_visual_studio"
4074     if test -z "$vctest"; then
4075         if test -n "$with_visual_studio"; then
4076             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
4077         else
4078             AC_MSG_ERROR([no Visual Studio installation found])
4079         fi
4080     fi
4081     AC_MSG_RESULT([])
4083     VC_PRODUCT_DIR="$vctest/VC"
4084     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
4086     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
4087     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
4088         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
4089         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
4090         if test $? -ne 0; then
4091             WIN_MULTI_ARCH=""
4092             WIN_OTHER_ARCH=""
4093         fi
4094     fi
4096     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
4097         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
4098         test_cl_exe "build" "$MSVC_BUILD_PATH"
4099     fi
4101     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
4102         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
4103         test_cl_exe "host" "$MSVC_HOST_PATH"
4104     else
4105         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
4106     fi
4108     AC_MSG_CHECKING([for short pathname of VC product directory])
4109     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
4110     AC_MSG_RESULT([$VC_PRODUCT_DIR])
4112     UCRTSDKDIR=
4113     UCRTVERSION=
4115     AC_MSG_CHECKING([for UCRT location])
4116     find_ucrt
4117     # find_ucrt errors out if it doesn't find it
4118     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
4119     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
4120     ucrtincpath_formatted=$formatted_path
4121     # SOLARINC is used for external modules and must be set too.
4122     # And no, it's not sufficient to set SOLARINC only, as configure
4123     # itself doesn't honour it.
4124     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
4125     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
4126     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
4127     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4129     AC_SUBST(UCRTSDKDIR)
4130     AC_SUBST(UCRTVERSION)
4132     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4133     # Find the proper version of MSBuild.exe to use based on the VS version
4134     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath
4135     if test -z "$regvalue" ; then
4136         if test "$WIN_BUILD_ARCH" != "x64"; then
4137             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4138         else
4139             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4140         fi
4141     fi
4142     if test -d "$regvalue" ; then
4143         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4144         AC_MSG_RESULT([$regvalue])
4145     else
4146         AC_MSG_ERROR([MSBuild.exe location not found])
4147     fi
4149     # Find the version of devenv.exe
4150     # MSVC 2017 devenv does not start properly from a DOS 8.3 path
4151     DEVENV=$(cygpath -lm "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe")
4152     DEVENV_unix=$(cygpath -u "$DEVENV")
4153     if test ! -e "$DEVENV_unix"; then
4154         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4155     fi
4157     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4158     dnl needed when building CLR code:
4159     if test -z "$MSVC_CXX"; then
4160         # This gives us a posix path with 8.3 filename restrictions
4161         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4162     fi
4164     if test -z "$CC"; then
4165         CC=$MSVC_CXX
4166         CC_BASE=`first_arg_basename "$CC"`
4167     fi
4168     if test -z "$CXX"; then
4169         CXX=$MSVC_CXX
4170         CXX_BASE=`first_arg_basename "$CXX"`
4171     fi
4173     if test -n "$CC"; then
4174         # Remove /cl.exe from CC case insensitive
4175         AC_MSG_NOTICE([found Visual C++ $vcyear])
4177         main_include_dir=`cygpath -d -m "$COMPATH/Include"`
4178         CPPFLAGS="$CPPFLAGS -I$main_include_dir"
4180         PathFormat "$COMPATH"
4181         COMPATH=`win_short_path_for_make "$formatted_path"`
4183         VCVER=$vcnumwithdot
4184         VCTOOLSET=$vctoolset
4186         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4187         # are always "better", we list them in reverse chronological order.
4189         case "$vcnumwithdot" in
4190         16.0 | 17.0)
4191             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4192             ;;
4193         esac
4195         # The expectation is that --with-windows-sdk should not need to be used
4196         if test -n "$with_windows_sdk"; then
4197             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4198             *" "$with_windows_sdk" "*)
4199                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4200                 ;;
4201             *)
4202                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4203                 ;;
4204             esac
4205         fi
4207         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4208         ac_objext=obj
4209         ac_exeext=exe
4211     else
4212         AC_MSG_ERROR([Visual C++ not found after all, huh])
4213     fi
4215     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4216     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4217         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4218         // between Visual Studio versions and _MSC_VER:
4219         #if _MSC_VER < 1925
4220         #error
4221         #endif
4222     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4224     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4225     # version of the Explorer extension (and maybe other small
4226     # bits, too) needed when installing a 32-bit LibreOffice on a
4227     # 64-bit OS. The 64-bit Explorer extension is a feature that
4228     # has been present since long in OOo. Don't confuse it with
4229     # building LibreOffice itself as 64-bit code.
4231     BUILD_X64=
4232     CXX_X64_BINARY=
4234     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4235         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4236         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4237              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4238         then
4239             BUILD_X64=TRUE
4240             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4241             AC_MSG_RESULT([found])
4242         else
4243             AC_MSG_RESULT([not found])
4244             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4245         fi
4246     elif test "$WIN_HOST_ARCH" = "x64"; then
4247         CXX_X64_BINARY=$CXX
4248     fi
4249     AC_SUBST(BUILD_X64)
4251     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4252     AC_SUBST(CXX_X64_BINARY)
4254     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4255     # needed to support TWAIN scan on both 32- and 64-bit systems
4257     case "$WIN_HOST_ARCH" in
4258     x64)
4259         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4260         if test -n "$CXX_X86_BINARY"; then
4261             BUILD_X86=TRUE
4262             AC_MSG_RESULT([preset])
4263         elif test -n "$WIN_MULTI_ARCH"; then
4264             BUILD_X86=TRUE
4265             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4266             CXX_X86_BINARY+=" /arch:SSE"
4267             AC_MSG_RESULT([found])
4268         else
4269             AC_MSG_RESULT([not found])
4270             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4271         fi
4272         ;;
4273     x86)
4274         BUILD_X86=TRUE
4275         CXX_X86_BINARY=$MSVC_CXX
4276         ;;
4277     esac
4278     AC_SUBST(BUILD_X86)
4279     AC_SUBST(CXX_X86_BINARY)
4281 AC_SUBST(VCVER)
4282 AC_SUBST(VCTOOLSET)
4283 AC_SUBST(DEVENV)
4284 AC_SUBST(MSVC_CXX)
4286 COM_IS_CLANG=
4287 AC_MSG_CHECKING([whether the compiler is actually Clang])
4288 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4289     #ifndef __clang__
4290     you lose
4291     #endif
4292     int foo=42;
4293     ]])],
4294     [AC_MSG_RESULT([yes])
4295      COM_IS_CLANG=TRUE],
4296     [AC_MSG_RESULT([no])])
4297 AC_SUBST(COM_IS_CLANG)
4299 CC_PLAIN=$CC
4300 CLANGVER=
4301 if test "$COM_IS_CLANG" = TRUE; then
4302     AC_MSG_CHECKING([whether Clang is new enough])
4303     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4304         #if !defined __apple_build_version__
4305         #error
4306         #endif
4307         ]])],
4308         [my_apple_clang=yes],[my_apple_clang=])
4309     if test "$my_apple_clang" = yes; then
4310         AC_MSG_RESULT([assumed yes (Apple Clang)])
4311     elif test "$_os" = Emscripten; then
4312         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4313     else
4314         if test "$_os" = WINNT; then
4315             dnl In which case, assume clang-cl:
4316             my_args="/EP /TC"
4317             dnl Filter out -FIIntrin.h, which needs to be explicitly stated for
4318             dnl clang-cl:
4319             CC_PLAIN=
4320             for i in $CC; do
4321                 case $i in
4322                 -FIIntrin.h)
4323                     ;;
4324                 *)
4325                     CC_PLAIN="$CC_PLAIN $i"
4326                     ;;
4327                 esac
4328             done
4329         else
4330             my_args="-E -P"
4331         fi
4332         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC_PLAIN $my_args - | sed 's/ //g'`
4333         CLANG_FULL_VERSION=`echo __clang_version__ | $CC_PLAIN $my_args -`
4334         CLANGVER=`echo $clang_version \
4335             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4336         if test "$CLANGVER" -ge 50002; then
4337             AC_MSG_RESULT([yes ($clang_version)])
4338         else
4339             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 5.0.2])
4340         fi
4341         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4342         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4343     fi
4346 SHOWINCLUDES_PREFIX=
4347 if test "$_os" = WINNT; then
4348     dnl We need to guess the prefix of the -showIncludes output, it can be
4349     dnl localized
4350     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4351     echo "#include <stdlib.h>" > conftest.c
4352     SHOWINCLUDES_PREFIX=`$CC_PLAIN $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4353         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4354     rm -f conftest.c conftest.obj
4355     if test -z "$SHOWINCLUDES_PREFIX"; then
4356         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4357     else
4358         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4359     fi
4361 AC_SUBST(SHOWINCLUDES_PREFIX)
4364 # prefix C with ccache if needed
4366 if test "$CCACHE" != ""; then
4367     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4369     AC_LANG_PUSH([C])
4370     save_CFLAGS=$CFLAGS
4371     CFLAGS="$CFLAGS --ccache-skip -O2"
4372     # msvc does not fail on unknown options, check stdout
4373     if test "$COM" = MSC; then
4374         CFLAGS="$CFLAGS -nologo"
4375     fi
4376     save_ac_c_werror_flag=$ac_c_werror_flag
4377     ac_c_werror_flag=yes
4378     dnl an empty program will do, we're checking the compiler flags
4379     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4380                       [use_ccache=yes], [use_ccache=no])
4381     CFLAGS=$save_CFLAGS
4382     ac_c_werror_flag=$save_ac_c_werror_flag
4383     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4384         AC_MSG_RESULT([yes])
4385     else
4386         CC="$CCACHE $CC"
4387         CC_BASE="ccache $CC_BASE"
4388         AC_MSG_RESULT([no])
4389     fi
4390     AC_LANG_POP([C])
4393 # ===================================================================
4394 # check various GCC options that Clang does not support now but maybe
4395 # will somewhen in the future, check them even for GCC, so that the
4396 # flags are set
4397 # ===================================================================
4399 HAVE_GCC_GGDB2=
4400 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4401     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4402     save_CFLAGS=$CFLAGS
4403     CFLAGS="$CFLAGS -Werror -ggdb2"
4404     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4405     CFLAGS=$save_CFLAGS
4406     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4407         AC_MSG_RESULT([yes])
4408     else
4409         AC_MSG_RESULT([no])
4410     fi
4412     if test "$host_cpu" = "m68k"; then
4413         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4414         save_CFLAGS=$CFLAGS
4415         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4416         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4417         CFLAGS=$save_CFLAGS
4418         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4419             AC_MSG_RESULT([yes])
4420         else
4421             AC_MSG_ERROR([no])
4422         fi
4423     fi
4425 AC_SUBST(HAVE_GCC_GGDB2)
4427 dnl ===================================================================
4428 dnl  Test the gcc version
4429 dnl ===================================================================
4430 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4431     AC_MSG_CHECKING([the GCC version])
4432     _gcc_version=`$CC -dumpfullversion`
4433     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4434         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4435     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4437     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4439     if test "$gcc_full_version" -lt 70000; then
4440         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 7.0.0])
4441     fi
4442 else
4443     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4444     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4445     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4446     # (which reports itself as GCC 4.2.1).
4447     GCC_VERSION=
4449 AC_SUBST(GCC_VERSION)
4451 dnl Set the ENABLE_DBGUTIL variable
4452 dnl ===================================================================
4453 AC_MSG_CHECKING([whether to build with additional debug utilities])
4454 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4455     ENABLE_DBGUTIL="TRUE"
4456     # this is an extra var so it can have different default on different MSVC
4457     # versions (in case there are version specific problems with it)
4458     MSVC_USE_DEBUG_RUNTIME="TRUE"
4460     AC_MSG_RESULT([yes])
4461     # cppunit and graphite expose STL in public headers
4462     if test "$with_system_cppunit" = "yes"; then
4463         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4464     else
4465         with_system_cppunit=no
4466     fi
4467     if test "$with_system_graphite" = "yes"; then
4468         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4469     else
4470         with_system_graphite=no
4471     fi
4472     if test "$with_system_orcus" = "yes"; then
4473         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4474     else
4475         with_system_orcus=no
4476     fi
4477     if test "$with_system_libcmis" = "yes"; then
4478         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4479     else
4480         with_system_libcmis=no
4481     fi
4482     if test "$with_system_hunspell" = "yes"; then
4483         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4484     else
4485         with_system_hunspell=no
4486     fi
4487     if test "$with_system_gpgmepp" = "yes"; then
4488         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4489     else
4490         with_system_gpgmepp=no
4491     fi
4492     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4493     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4494     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4495     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4496     # of those two is using the system variant:
4497     if test "$with_system_libnumbertext" = "yes"; then
4498         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4499     else
4500         with_system_libnumbertext=no
4501     fi
4502     if test "$with_system_libwps" = "yes"; then
4503         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4504     else
4505         with_system_libwps=no
4506     fi
4507 else
4508     ENABLE_DBGUTIL=""
4509     MSVC_USE_DEBUG_RUNTIME=""
4510     AC_MSG_RESULT([no])
4512 AC_SUBST(ENABLE_DBGUTIL)
4513 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4515 dnl Set the ENABLE_DEBUG variable.
4516 dnl ===================================================================
4517 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4518     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4520 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4521     if test -z "$libo_fuzzed_enable_debug"; then
4522         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4523     else
4524         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4525         enable_debug=yes
4526     fi
4529 AC_MSG_CHECKING([whether to do a debug build])
4530 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4531     ENABLE_DEBUG="TRUE"
4532     if test -n "$ENABLE_DBGUTIL" ; then
4533         AC_MSG_RESULT([yes (dbgutil)])
4534     else
4535         AC_MSG_RESULT([yes])
4536     fi
4537 else
4538     ENABLE_DEBUG=""
4539     AC_MSG_RESULT([no])
4541 AC_SUBST(ENABLE_DEBUG)
4543 dnl ===================================================================
4544 dnl Select the linker to use (gold/lld/ld.bfd).
4545 dnl This is done only after compiler checks (need to know if Clang is
4546 dnl used, for different defaults) and after checking if a debug build
4547 dnl is wanted (non-debug builds get the default linker if not explicitly
4548 dnl specified otherwise).
4549 dnl All checks for linker features/options should come after this.
4550 dnl ===================================================================
4551 check_use_ld()
4553     use_ld=-fuse-ld=${1%%:*}
4554     use_ld_path=${1#*:}
4555     if test "$use_ld_path" != "$1"; then
4556         use_ld="$use_ld --ld-path=$use_ld_path"
4557     fi
4558     use_ld_fail_if_error=$2
4559     use_ld_ok=
4560     AC_MSG_CHECKING([for $use_ld linker support])
4561     use_ld_ldflags_save="$LDFLAGS"
4562     LDFLAGS="$LDFLAGS $use_ld"
4563     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4564 #include <stdio.h>
4565         ],[
4566 printf ("hello world\n");
4567         ])], USE_LD=$use_ld, [])
4568     if test -n "$USE_LD"; then
4569         AC_MSG_RESULT( yes )
4570         use_ld_ok=yes
4571     else
4572         if test -n "$use_ld_fail_if_error"; then
4573             AC_MSG_ERROR( no )
4574         else
4575             AC_MSG_RESULT( no )
4576         fi
4577     fi
4578     if test -n "$use_ld_ok"; then
4579         dnl keep the value of LDFLAGS
4580         return 0
4581     fi
4582     LDFLAGS="$use_ld_ldflags_save"
4583     return 1
4585 USE_LD=
4586 if test "$enable_ld" != "no"; then
4587     if test "$GCC" = "yes"; then
4588         if test -n "$enable_ld"; then
4589             check_use_ld "$enable_ld" fail_if_error
4590         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4591             dnl non-debug builds default to the default linker
4592             true
4593         elif test -n "$COM_IS_CLANG"; then
4594             check_use_ld lld
4595             if test $? -ne 0; then
4596                 check_use_ld gold
4597             fi
4598         else
4599             # For gcc first try gold, new versions also support lld.
4600             check_use_ld gold
4601             if test $? -ne 0; then
4602                 check_use_ld lld
4603             fi
4604         fi
4605         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4606         rm conftest.out
4607         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD)')
4608         if test -z "$ld_used"; then
4609             ld_used="unknown"
4610         fi
4611         AC_MSG_CHECKING([for linker that is used])
4612         AC_MSG_RESULT([$ld_used])
4613         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4614             if echo "$ld_used" | grep -q "^GNU ld"; then
4615                 AC_MSG_WARN([The default GNU linker is slow, consider using the LLD or the GNU gold linker.])
4616                 add_warning "The default GNU linker is slow, consider using the LLD or the GNU gold linker."
4617             fi
4618         fi
4619     else
4620         if test "$enable_ld" = "yes"; then
4621             AC_MSG_ERROR([--enable-ld not supported])
4622         fi
4623     fi
4625 AC_SUBST(USE_LD)
4627 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4628 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4629     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4630     bsymbolic_functions_ldflags_save=$LDFLAGS
4631     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4632     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4633 #include <stdio.h>
4634         ],[
4635 printf ("hello world\n");
4636         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4637     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4638         AC_MSG_RESULT( found )
4639     else
4640         AC_MSG_RESULT( not found )
4641     fi
4642     LDFLAGS=$bsymbolic_functions_ldflags_save
4644 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4646 LD_GC_SECTIONS=
4647 if test "$GCC" = "yes"; then
4648     for flag in "--gc-sections" "-dead_strip"; do
4649         AC_MSG_CHECKING([for $flag linker support])
4650         ldflags_save=$LDFLAGS
4651         LDFLAGS="$LDFLAGS -Wl,$flag"
4652         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4653 #include <stdio.h>
4654             ],[
4655 printf ("hello world\n");
4656             ])],[
4657             LD_GC_SECTIONS="-Wl,$flag"
4658             AC_MSG_RESULT( found )
4659             ], [
4660             AC_MSG_RESULT( not found )
4661             ])
4662         LDFLAGS=$ldflags_save
4663         if test -n "$LD_GC_SECTIONS"; then
4664             break
4665         fi
4666     done
4668 AC_SUBST(LD_GC_SECTIONS)
4670 HAVE_GSPLIT_DWARF=
4671 if test "$enable_split_debug" != no; then
4672     use_split_debug=
4673     if test -n "$ENABLE_LTO"; then
4674         true # Inherently incompatible, since no debug info is created while compiling, GCC complains.
4675     elif test "$enable_split_debug" = yes; then
4676         use_split_debug=1
4677     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4678     elif test "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4679         use_split_debug=1
4680     fi
4681     if test -n "$use_split_debug"; then
4682         AC_MSG_CHECKING([whether $CC_BASE supports -gsplit-dwarf])
4683         save_CFLAGS=$CFLAGS
4684         CFLAGS="$CFLAGS -Werror -gsplit-dwarf"
4685         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_SPLIT_DWARF=TRUE ],[])
4686         CFLAGS=$save_CFLAGS
4687         if test "$HAVE_GCC_SPLIT_DWARF" = "TRUE"; then
4688             AC_MSG_RESULT([yes])
4689         else
4690             if test "$enable_split_debug" = yes; then
4691                 AC_MSG_ERROR([no])
4692             else
4693                 AC_MSG_RESULT([no])
4694             fi
4695         fi
4696     fi
4697     if test -z "$HAVE_GCC_SPLIT_DWARF" -a "$test_split_debug" = "yes" -a -n "$use_split_debug"; then
4698         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4699         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4700     fi
4702 AC_SUBST(HAVE_GCC_SPLIT_DWARF)
4704 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4705 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4706 save_CFLAGS=$CFLAGS
4707 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4708 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4709 CFLAGS=$save_CFLAGS
4710 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4711     AC_MSG_RESULT([yes])
4712 else
4713     AC_MSG_RESULT([no])
4715 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4717 ENABLE_GDB_INDEX=
4718 if test "$enable_gdb_index" != "no"; then
4719     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4720     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4721         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4722         save_CFLAGS=$CFLAGS
4723         CFLAGS="$CFLAGS -Werror -ggnu-pubnames"
4724         have_ggnu_pubnames=
4725         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4726         if test "$have_ggnu_pubnames" != "TRUE"; then
4727             if test "$enable_gdb_index" = "yes"; then
4728                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4729             else
4730                 AC_MSG_RESULT( no )
4731             fi
4732         else
4733             AC_MSG_RESULT( yes )
4734             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4735             ldflags_save=$LDFLAGS
4736             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4737             AC_LINK_IFELSE([AC_LANG_PROGRAM([
4738 #include <stdio.h>
4739                 ],[
4740 printf ("hello world\n");
4741                 ])], ENABLE_GDB_INDEX=TRUE, [])
4742             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
4743                 AC_MSG_RESULT( yes )
4744             else
4745                 if test "$enable_gdb_index" = "yes"; then
4746                     AC_MSG_ERROR( no )
4747                 else
4748                     AC_MSG_RESULT( no )
4749                 fi
4750             fi
4751             LDFLAGS=$ldflags_save
4752         fi
4753         CFLAGS=$save_CFLAGS
4754         fi
4755     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4756         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
4757         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
4758     fi
4760 AC_SUBST(ENABLE_GDB_INDEX)
4762 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
4763     enable_sal_log=yes
4765 if test "$enable_sal_log" = yes; then
4766     ENABLE_SAL_LOG=TRUE
4768 AC_SUBST(ENABLE_SAL_LOG)
4770 dnl Check for enable symbols option
4771 dnl ===================================================================
4772 AC_MSG_CHECKING([whether to generate debug information])
4773 if test -z "$enable_symbols"; then
4774     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4775         enable_symbols=yes
4776     else
4777         enable_symbols=no
4778     fi
4780 if test "$enable_symbols" = yes; then
4781     ENABLE_SYMBOLS_FOR=all
4782     AC_MSG_RESULT([yes])
4783 elif test "$enable_symbols" = no; then
4784     ENABLE_SYMBOLS_FOR=
4785     AC_MSG_RESULT([no])
4786 else
4787     # Selective debuginfo.
4788     ENABLE_SYMBOLS_FOR="$enable_symbols"
4789     AC_MSG_RESULT([for "$enable_symbols"])
4791 AC_SUBST(ENABLE_SYMBOLS_FOR)
4793 if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then
4794     # Building on Android with full symbols: without enough memory the linker never finishes currently.
4795     AC_MSG_CHECKING([whether enough memory is available for linking])
4796     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
4797     # Check for 15GB, as Linux reports a bit less than the physical memory size.
4798     if test -n "$mem_size" -a $mem_size -lt 15728640; then
4799         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
4800     else
4801         AC_MSG_RESULT([yes])
4802     fi
4805 ENABLE_OPTIMIZED=
4806 ENABLE_OPTIMIZED_DEBUG=
4807 AC_MSG_CHECKING([whether to compile with optimization flags])
4808 if test -z "$enable_optimized"; then
4809     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4810         enable_optimized=no
4811     else
4812         enable_optimized=yes
4813     fi
4815 if test "$enable_optimized" = yes; then
4816     ENABLE_OPTIMIZED=TRUE
4817     AC_MSG_RESULT([yes])
4818 elif test "$enable_optimized" = debug; then
4819     ENABLE_OPTIMIZED_DEBUG=TRUE
4820     AC_MSG_RESULT([yes (debug)])
4821     HAVE_GCC_OG=
4822     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4823         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
4824         save_CFLAGS=$CFLAGS
4825         CFLAGS="$CFLAGS -Werror -Og"
4826         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
4827         CFLAGS=$save_CFLAGS
4828         if test "$HAVE_GCC_OG" = "TRUE"; then
4829             AC_MSG_RESULT([yes])
4830         else
4831             AC_MSG_RESULT([no])
4832         fi
4833     fi
4834     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
4835         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
4836     fi
4837 else
4838     AC_MSG_RESULT([no])
4840 AC_SUBST(ENABLE_OPTIMIZED)
4841 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
4844 # determine CPUNAME, OS, ...
4846 case "$host_os" in
4848 aix*)
4849     COM=GCC
4850     CPUNAME=POWERPC
4851     OS=AIX
4852     RTL_OS=AIX
4853     RTL_ARCH=PowerPC
4854     PLATFORMID=aix_powerpc
4855     P_SEP=:
4856     ;;
4858 cygwin*|wsl*)
4859     # Already handled
4860     ;;
4862 darwin*|macos*)
4863     COM=GCC
4864     OS=MACOSX
4865     RTL_OS=MacOSX
4866     P_SEP=:
4868     case "$host_cpu" in
4869     aarch64|arm64)
4870         if test "$enable_ios_simulator" = "yes"; then
4871             OS=iOS
4872         else
4873             CPUNAME=AARCH64
4874             RTL_ARCH=AARCH64
4875             PLATFORMID=macosx_aarch64
4876         fi
4877         ;;
4878     x86_64)
4879         if test "$enable_ios_simulator" = "yes"; then
4880             OS=iOS
4881         fi
4882         CPUNAME=X86_64
4883         RTL_ARCH=X86_64
4884         PLATFORMID=macosx_x86_64
4885         ;;
4886     *)
4887         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4888         ;;
4889     esac
4890     ;;
4892 ios*)
4893     COM=GCC
4894     OS=iOS
4895     RTL_OS=iOS
4896     P_SEP=:
4898     case "$host_cpu" in
4899     aarch64|arm64)
4900         if test "$enable_ios_simulator" = "yes"; then
4901             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
4902         fi
4903         ;;
4904     *)
4905         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4906         ;;
4907     esac
4908     CPUNAME=AARCH64
4909     RTL_ARCH=AARCH64
4910     PLATFORMID=ios_arm64
4911     ;;
4913 dragonfly*)
4914     COM=GCC
4915     OS=DRAGONFLY
4916     RTL_OS=DragonFly
4917     P_SEP=:
4919     case "$host_cpu" in
4920     i*86)
4921         CPUNAME=INTEL
4922         RTL_ARCH=x86
4923         PLATFORMID=dragonfly_x86
4924         ;;
4925     x86_64)
4926         CPUNAME=X86_64
4927         RTL_ARCH=X86_64
4928         PLATFORMID=dragonfly_x86_64
4929         ;;
4930     *)
4931         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4932         ;;
4933     esac
4934     ;;
4936 freebsd*)
4937     COM=GCC
4938     RTL_OS=FreeBSD
4939     OS=FREEBSD
4940     P_SEP=:
4942     case "$host_cpu" in
4943     aarch64)
4944         CPUNAME=AARCH64
4945         PLATFORMID=freebsd_aarch64
4946         RTL_ARCH=AARCH64
4947         ;;
4948     i*86)
4949         CPUNAME=INTEL
4950         RTL_ARCH=x86
4951         PLATFORMID=freebsd_x86
4952         ;;
4953     x86_64|amd64)
4954         CPUNAME=X86_64
4955         RTL_ARCH=X86_64
4956         PLATFORMID=freebsd_x86_64
4957         ;;
4958     powerpc64)
4959         CPUNAME=POWERPC64
4960         RTL_ARCH=PowerPC_64
4961         PLATFORMID=freebsd_powerpc64
4962         ;;
4963     powerpc|powerpcspe)
4964         CPUNAME=POWERPC
4965         RTL_ARCH=PowerPC
4966         PLATFORMID=freebsd_powerpc
4967         ;;
4968     *)
4969         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4970         ;;
4971     esac
4972     ;;
4974 haiku*)
4975     COM=GCC
4976     GUIBASE=haiku
4977     RTL_OS=Haiku
4978     OS=HAIKU
4979     P_SEP=:
4981     case "$host_cpu" in
4982     i*86)
4983         CPUNAME=INTEL
4984         RTL_ARCH=x86
4985         PLATFORMID=haiku_x86
4986         ;;
4987     x86_64|amd64)
4988         CPUNAME=X86_64
4989         RTL_ARCH=X86_64
4990         PLATFORMID=haiku_x86_64
4991         ;;
4992     *)
4993         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4994         ;;
4995     esac
4996     ;;
4998 kfreebsd*)
4999     COM=GCC
5000     OS=LINUX
5001     RTL_OS=kFreeBSD
5002     P_SEP=:
5004     case "$host_cpu" in
5006     i*86)
5007         CPUNAME=INTEL
5008         RTL_ARCH=x86
5009         PLATFORMID=kfreebsd_x86
5010         ;;
5011     x86_64)
5012         CPUNAME=X86_64
5013         RTL_ARCH=X86_64
5014         PLATFORMID=kfreebsd_x86_64
5015         ;;
5016     *)
5017         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5018         ;;
5019     esac
5020     ;;
5022 linux-gnu*|linux-musl*)
5023     COM=GCC
5024     OS=LINUX
5025     RTL_OS=Linux
5026     P_SEP=:
5028     case "$host_cpu" in
5030     aarch64)
5031         CPUNAME=AARCH64
5032         PLATFORMID=linux_aarch64
5033         RTL_ARCH=AARCH64
5034         EPM_FLAGS="-a arm64"
5035         ;;
5036     alpha)
5037         CPUNAME=AXP
5038         RTL_ARCH=ALPHA
5039         PLATFORMID=linux_alpha
5040         ;;
5041     arm*)
5042         CPUNAME=ARM
5043         EPM_FLAGS="-a arm"
5044         RTL_ARCH=ARM_EABI
5045         PLATFORMID=linux_arm_eabi
5046         case "$host_cpu" in
5047         arm*-linux)
5048             RTL_ARCH=ARM_OABI
5049             PLATFORMID=linux_arm_oabi
5050             ;;
5051         esac
5052         ;;
5053     hppa)
5054         CPUNAME=HPPA
5055         RTL_ARCH=HPPA
5056         EPM_FLAGS="-a hppa"
5057         PLATFORMID=linux_hppa
5058         ;;
5059     i*86)
5060         CPUNAME=INTEL
5061         RTL_ARCH=x86
5062         PLATFORMID=linux_x86
5063         ;;
5064     ia64)
5065         CPUNAME=IA64
5066         RTL_ARCH=IA64
5067         PLATFORMID=linux_ia64
5068         ;;
5069     mips)
5070         CPUNAME=GODSON
5071         RTL_ARCH=MIPS_EB
5072         EPM_FLAGS="-a mips"
5073         PLATFORMID=linux_mips_eb
5074         ;;
5075     mips64)
5076         CPUNAME=GODSON64
5077         RTL_ARCH=MIPS64_EB
5078         EPM_FLAGS="-a mips64"
5079         PLATFORMID=linux_mips64_eb
5080         ;;
5081     mips64el)
5082         CPUNAME=GODSON64
5083         RTL_ARCH=MIPS64_EL
5084         EPM_FLAGS="-a mips64el"
5085         PLATFORMID=linux_mips64_el
5086         ;;
5087     mipsel)
5088         CPUNAME=GODSON
5089         RTL_ARCH=MIPS_EL
5090         EPM_FLAGS="-a mipsel"
5091         PLATFORMID=linux_mips_el
5092         ;;
5093     m68k)
5094         CPUNAME=M68K
5095         RTL_ARCH=M68K
5096         PLATFORMID=linux_m68k
5097         ;;
5098     powerpc)
5099         CPUNAME=POWERPC
5100         RTL_ARCH=PowerPC
5101         PLATFORMID=linux_powerpc
5102         ;;
5103     powerpc64)
5104         CPUNAME=POWERPC64
5105         RTL_ARCH=PowerPC_64
5106         PLATFORMID=linux_powerpc64
5107         ;;
5108     powerpc64le)
5109         CPUNAME=POWERPC64
5110         RTL_ARCH=PowerPC_64_LE
5111         PLATFORMID=linux_powerpc64_le
5112         ;;
5113     sparc)
5114         CPUNAME=SPARC
5115         RTL_ARCH=SPARC
5116         PLATFORMID=linux_sparc
5117         ;;
5118     sparc64)
5119         CPUNAME=SPARC64
5120         RTL_ARCH=SPARC64
5121         PLATFORMID=linux_sparc64
5122         ;;
5123     s390)
5124         CPUNAME=S390
5125         RTL_ARCH=S390
5126         PLATFORMID=linux_s390
5127         ;;
5128     s390x)
5129         CPUNAME=S390X
5130         RTL_ARCH=S390x
5131         PLATFORMID=linux_s390x
5132         ;;
5133     x86_64)
5134         CPUNAME=X86_64
5135         RTL_ARCH=X86_64
5136         PLATFORMID=linux_x86_64
5137         ;;
5138     *)
5139         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5140         ;;
5141     esac
5142     ;;
5144 linux-android*)
5145     COM=GCC
5146     OS=ANDROID
5147     RTL_OS=Android
5148     P_SEP=:
5150     case "$host_cpu" in
5152     arm|armel)
5153         CPUNAME=ARM
5154         RTL_ARCH=ARM_EABI
5155         PLATFORMID=android_arm_eabi
5156         ;;
5157     aarch64)
5158         CPUNAME=AARCH64
5159         RTL_ARCH=AARCH64
5160         PLATFORMID=android_aarch64
5161         ;;
5162     i*86)
5163         CPUNAME=INTEL
5164         RTL_ARCH=x86
5165         PLATFORMID=android_x86
5166         ;;
5167     x86_64)
5168         CPUNAME=X86_64
5169         RTL_ARCH=X86_64
5170         PLATFORMID=android_x86_64
5171         ;;
5172     *)
5173         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5174         ;;
5175     esac
5176     ;;
5178 *netbsd*)
5179     COM=GCC
5180     OS=NETBSD
5181     RTL_OS=NetBSD
5182     P_SEP=:
5184     case "$host_cpu" in
5185     i*86)
5186         CPUNAME=INTEL
5187         RTL_ARCH=x86
5188         PLATFORMID=netbsd_x86
5189         ;;
5190     powerpc)
5191         CPUNAME=POWERPC
5192         RTL_ARCH=PowerPC
5193         PLATFORMID=netbsd_powerpc
5194         ;;
5195     sparc)
5196         CPUNAME=SPARC
5197         RTL_ARCH=SPARC
5198         PLATFORMID=netbsd_sparc
5199         ;;
5200     x86_64)
5201         CPUNAME=X86_64
5202         RTL_ARCH=X86_64
5203         PLATFORMID=netbsd_x86_64
5204         ;;
5205     *)
5206         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5207         ;;
5208     esac
5209     ;;
5211 openbsd*)
5212     COM=GCC
5213     OS=OPENBSD
5214     RTL_OS=OpenBSD
5215     P_SEP=:
5217     case "$host_cpu" in
5218     i*86)
5219         CPUNAME=INTEL
5220         RTL_ARCH=x86
5221         PLATFORMID=openbsd_x86
5222         ;;
5223     x86_64)
5224         CPUNAME=X86_64
5225         RTL_ARCH=X86_64
5226         PLATFORMID=openbsd_x86_64
5227         ;;
5228     *)
5229         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5230         ;;
5231     esac
5232     SOLARINC="$SOLARINC -I/usr/local/include"
5233     ;;
5235 solaris*)
5236     COM=GCC
5237     OS=SOLARIS
5238     RTL_OS=Solaris
5239     P_SEP=:
5241     case "$host_cpu" in
5242     i*86)
5243         CPUNAME=INTEL
5244         RTL_ARCH=x86
5245         PLATFORMID=solaris_x86
5246         ;;
5247     sparc)
5248         CPUNAME=SPARC
5249         RTL_ARCH=SPARC
5250         PLATFORMID=solaris_sparc
5251         ;;
5252     sparc64)
5253         CPUNAME=SPARC64
5254         RTL_ARCH=SPARC64
5255         PLATFORMID=solaris_sparc64
5256         ;;
5257     *)
5258         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5259         ;;
5260     esac
5261     SOLARINC="$SOLARINC -I/usr/local/include"
5262     ;;
5264 emscripten*)
5265     COM=GCC
5266     OS=EMSCRIPTEN
5267     RTL_OS=Emscripten
5268     P_SEP=:
5270     case "$host_cpu" in
5271     wasm32|wasm64)
5272         ;;
5273     *)
5274         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5275         ;;
5276     esac
5277     CPUNAME=INTEL
5278     RTL_ARCH=x86
5279     PLATFORMID=linux_x86
5280     ;;
5283     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5284     ;;
5285 esac
5287 if test "$with_x" = "no"; then
5288     AC_MSG_ERROR([Use --disable-gui instead. How can we get rid of this option? No idea where it comes from.])
5291 DISABLE_GUI=""
5292 if test "$enable_gui" = "no"; then
5293     if test "$using_x11" != yes; then
5294         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5295     fi
5296     USING_X11=
5297     DISABLE_GUI=TRUE
5298 else
5299     AC_DEFINE(HAVE_FEATURE_UI)
5301 AC_SUBST(DISABLE_GUI)
5303 if test "$using_x11" = yes; then
5304     if test "$USING_X11" = TRUE; then
5305         AC_DEFINE(USING_X11)
5306     else
5307         disable_x11_tests
5308     fi
5309 else
5310     if test "$USING_X11" = TRUE; then
5311         AC_MSG_ERROR([Platform doesn't support X11 (\$using_x11), but \$USING_X11 is set!])
5312     fi
5315 WORKDIR="${BUILDDIR}/workdir"
5316 INSTDIR="${BUILDDIR}/instdir"
5317 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5318 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5319 SOLARINC="-I$SRC_ROOT/include $SOLARINC"
5320 AC_SUBST(COM)
5321 AC_SUBST(CPUNAME)
5322 AC_SUBST(RTL_OS)
5323 AC_SUBST(RTL_ARCH)
5324 AC_SUBST(EPM_FLAGS)
5325 AC_SUBST(USING_X11)
5326 AC_SUBST([INSTDIR])
5327 AC_SUBST([INSTROOT])
5328 AC_SUBST([INSTROOTBASE])
5329 AC_SUBST(OS)
5330 AC_SUBST(P_SEP)
5331 AC_SUBST(WORKDIR)
5332 AC_SUBST(PLATFORMID)
5333 AC_SUBST(WINDOWS_X64)
5334 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5336 if test "$OS" = WNT -a "$COM" = MSC; then
5337     case "$CPUNAME" in
5338     INTEL) CPPU_ENV=msci ;;
5339     X86_64) CPPU_ENV=mscx ;;
5340     AARCH64) CPPU_ENV=msca ;;
5341     *)
5342         AC_MSG_ERROR([Unknown \$CPUNAME '$CPUNAME' for $OS / $COM"])
5343         ;;
5344     esac
5345 else
5346     CPPU_ENV=gcc3
5348 AC_SUBST(CPPU_ENV)
5350 dnl ===================================================================
5351 dnl Test which package format to use
5352 dnl ===================================================================
5353 AC_MSG_CHECKING([which package format to use])
5354 if test -n "$with_package_format" -a "$with_package_format" != no; then
5355     for i in $with_package_format; do
5356         case "$i" in
5357         aix | bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5358             ;;
5359         *)
5360             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5361 aix - AIX software distribution
5362 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5363 deb - Debian software distribution
5364 pkg - Solaris software distribution
5365 rpm - RedHat software distribution
5367 LibreOffice additionally supports:
5368 archive - .tar.gz or .zip
5369 dmg - macOS .dmg
5370 installed - installation tree
5371 msi - Windows .msi
5372         ])
5373             ;;
5374         esac
5375     done
5376     # fakeroot is needed to ensure correct file ownerships/permissions
5377     # inside deb packages and tar archives created on Linux and Solaris.
5378     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5379         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5380         if test "$FAKEROOT" = "no"; then
5381             AC_MSG_ERROR(
5382                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5383         fi
5384     fi
5385     PKGFORMAT="$with_package_format"
5386     AC_MSG_RESULT([$PKGFORMAT])
5387 else
5388     PKGFORMAT=
5389     AC_MSG_RESULT([none])
5391 AC_SUBST(PKGFORMAT)
5393 dnl ===================================================================
5394 dnl handle help related options
5396 dnl If you change help related options, please update README.help
5397 dnl ===================================================================
5399 ENABLE_HTMLHELP=
5400 HELP_OMINDEX_PAGE=
5401 HELP_ONLINE=
5402 WITH_HELPPACKS=
5404 AC_MSG_CHECKING([which help to build])
5405 if test -n "$with_help" -a "$with_help" != "no"; then
5406     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5407     BUILD_TYPE="$BUILD_TYPE HELP"
5408     case "$with_help" in
5409     "html")
5410         ENABLE_HTMLHELP=TRUE
5411         WITH_HELPPACKS=TRUE
5412         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5413         AC_MSG_RESULT([HTML (local)])
5414         ;;
5415     "online")
5416         ENABLE_HTMLHELP=TRUE
5417         HELP_ONLINE=TRUE
5418         AC_MSG_RESULT([HTML (online)])
5419         ;;
5420     yes)
5421         WITH_HELPPACKS=TRUE
5422         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5423         AC_MSG_RESULT([XML (local)])
5424         ;;
5425     *)
5426         AC_MSG_ERROR([Unknown --with-help=$with_help])
5427         ;;
5428     esac
5429 else
5430     AC_MSG_RESULT([no])
5433 AC_MSG_CHECKING([if we need to build the help index tooling])
5434 if test "$with_help" = yes -o "$enable_extension_integration" != no; then
5435     BUILD_TYPE="$BUILD_TYPE HELPTOOLS"
5436     AC_MSG_RESULT([yes])
5437 else
5438     AC_MSG_RESULT([no])
5441 AC_MSG_CHECKING([whether to enable xapian-omega support for online help])
5442 if test -n "$with_omindex" -a "$with_omindex" != "no"; then
5443     if test "$HELP_ONLINE" != TRUE; then
5444         AC_MSG_ERROR([Can't build xapian-omega index without --help=online])
5445     fi
5446     case "$with_omindex" in
5447     "server")
5448         HELP_OMINDEX_PAGE=TRUE
5449         AC_MSG_RESULT([SERVER])
5450         ;;
5451     "noxap")
5452         AC_MSG_RESULT([NOXAP])
5453         ;;
5454     *)
5455         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5456         ;;
5457     esac
5458 else
5459     AC_MSG_RESULT([no])
5462 AC_MSG_CHECKING([whether to include the XML-help support])
5463 if test "$enable_xmlhelp" = yes; then
5464     BUILD_TYPE="$BUILD_TYPE XMLHELP"
5465     AC_DEFINE(HAVE_FEATURE_XMLHELP)
5466     AC_MSG_RESULT([yes])
5467 else
5468     if test "$with_help" = yes; then
5469         add_warning "Building the XML help, but LO with disabled xmlhelp support. Generated help can't be accessed from this LO build!"
5470     fi
5471     AC_MSG_RESULT([no])
5474 dnl Test whether to integrate helppacks into the product's installer
5475 AC_MSG_CHECKING([for helppack integration])
5476 if test -z "$WITH_HELPPACKS" -o "$with_helppack_integration" = no; then
5477     AC_MSG_RESULT([no integration])
5478 else
5479     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
5480     AC_MSG_RESULT([integration])
5483 AC_SUBST([ENABLE_HTMLHELP])
5484 AC_SUBST([HELP_OMINDEX_PAGE])
5485 AC_SUBST([HELP_ONLINE])
5486 # WITH_HELPPACKS is used only in configure
5488 dnl ===================================================================
5489 dnl Set up a different compiler to produce tools to run on the build
5490 dnl machine when doing cross-compilation
5491 dnl ===================================================================
5493 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5494 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5495 if test "$cross_compiling" = "yes"; then
5496     AC_MSG_CHECKING([for BUILD platform configuration])
5497     echo
5498     rm -rf CONF-FOR-BUILD config_build.mk
5499     mkdir CONF-FOR-BUILD
5500     # Here must be listed all files needed when running the configure script. In particular, also
5501     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5502     # keep them in the same order as there.
5503     (cd $SRC_ROOT && tar cf - \
5504         config.guess \
5505         bin/get_config_variables \
5506         solenv/bin/getcompver.awk \
5507         solenv/inc/langlist.mk \
5508         download.lst \
5509         config_host.mk.in \
5510         config_host_lang.mk.in \
5511         Makefile.in \
5512         lo.xcent.in \
5513         bin/bffvalidator.sh.in \
5514         bin/odfvalidator.sh.in \
5515         bin/officeotron.sh.in \
5516         hardened_runtime.xcent.in \
5517         instsetoo_native/util/openoffice.lst.in \
5518         config_host/*.in \
5519         sysui/desktop/macosx/Info.plist.in \
5520         .vscode/vs-code-template.code-workspace.in \
5521         ) \
5522     | (cd CONF-FOR-BUILD && tar xf -)
5523     cp configure CONF-FOR-BUILD
5524     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5525     (
5526     unset COM USING_X11 OS CPUNAME
5527     unset CC CXX SYSBASE CFLAGS
5528     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5529     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5530     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5531     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5532     if test -n "$CC_FOR_BUILD"; then
5533         export CC="$CC_FOR_BUILD"
5534         CC_BASE=`first_arg_basename "$CC"`
5535     fi
5536     if test -n "$CXX_FOR_BUILD"; then
5537         export CXX="$CXX_FOR_BUILD"
5538         CXX_BASE=`first_arg_basename "$CXX"`
5539     fi
5540     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5541     cd CONF-FOR-BUILD
5543     # Handle host configuration, which affects the cross-toolset too
5544     sub_conf_opts=""
5545     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5546     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5547     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5548     if test -n "$ENABLE_JAVA"; then
5549         case "$_os" in
5550         iOS) sub_conf_opts="$sub_conf_opts --without-java" ;; # force it off, like it used to be
5551         Android)
5552             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5553             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5554             ;;
5555         *)
5556             if test -z "$with_jdk_home"; then
5557                 AC_MSG_ERROR([Missing host JDK! This can't be detected for the build OS, so you have to specify it with --with-jdk-home.])
5558             fi
5559             ;;
5560         esac
5561     else
5562         sub_conf_opts="$sub_conf_opts --without-java"
5563     fi
5564     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5565     test "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" && sub_conf_opts="$sub_conf_opts --with-system-icu"
5566     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no --disable-database-connectivity"
5567     test -n "$with_help" -a "$with_help" != "no" && sub_conf_opts="$sub_conf_opts --with-help=$with_help"
5568     test "$enable_extensions" = yes || sub_conf_opts="$sub_conf_opts --disable-extensions"
5569     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5571     # Don't bother having configure look for stuff not needed for the build platform anyway
5572     sub_conf_defaults=" \
5573         --build="$build_alias" \
5574         --disable-cairo-canvas \
5575         --disable-cups \
5576         --disable-firebird-sdbc \
5577         --disable-gpgmepp \
5578         --disable-gstreamer-1-0 \
5579         --disable-gtk3 \
5580         --disable-gtk4 \
5581         --disable-mariadb-sdbc \
5582         --disable-nss \
5583         --disable-online-update \
5584         --disable-opencl \
5585         --disable-pdfimport \
5586         --disable-postgresql-sdbc \
5587         --disable-skia \
5588         --enable-icecream="$enable_icecream" \
5589         --without-doxygen \
5590         --without-webdav \
5591         --with-parallelism="$with_parallelism" \
5592         --with-theme="$with_theme" \
5593         --with-tls=openssl \
5595     echo "    Running CONF-FOR-BUILD/configure" $sub_conf_defaults $sub_conf_opts $with_build_platform_configure_options --srcdir=$srcdir
5596     ./configure \
5597         $sub_conf_defaults \
5598         $sub_conf_opts \
5599         $with_build_platform_configure_options \
5600         --srcdir=$srcdir \
5601         2>&1 | sed -e 's/^/    /'
5602     if test [${PIPESTATUS[0]}] -ne 0; then
5603         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5604     fi
5606     # filter permitted build targets
5607     PERMITTED_BUILD_TARGETS="
5608         AVMEDIA
5609         BOOST
5610         CAIRO
5611         CLUCENE
5612         CURL
5613         DBCONNECTIVITY
5614         DESKTOP
5615         DYNLOADING
5616         EPOXY
5617         EXPAT
5618         GLM
5619         GRAPHITE
5620         HARFBUZZ
5621         HELPTOOLS
5622         ICU
5623         LCMS2
5624         LIBJPEG_TURBO
5625         LIBLANGTAG
5626         LibO
5627         LIBFFI
5628         LIBPN
5629         LIBXML2
5630         LIBXSLT
5631         MDDS
5632         NATIVE
5633         OPENSSL
5634         ORCUS
5635         PYTHON
5636         SCRIPTING
5637         ZLIB
5639     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5640     # newlined lists, to use grep as a filter
5641     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5642     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5643     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5644     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5646     cp config_host.mk ../config_build.mk
5647     cp config_host_lang.mk ../config_build_lang.mk
5648     mv config.log ../config.Build.log
5649     mkdir -p ../config_build
5650     mv config_host/*.h ../config_build
5651     test -f "$WARNINGS_FILE" && mv "$WARNINGS_FILE" "../$WARNINGS_FILE_FOR_BUILD"
5653     # all these will get a _FOR_BUILD postfix
5654     DIRECT_FOR_BUILD_SETTINGS="
5655         CC
5656         CPPU_ENV
5657         CXX
5658         ILIB
5659         JAVA_HOME
5660         JAVAIFLAGS
5661         JDK
5662         LIBO_BIN_FOLDER
5663         LIBO_LIB_FOLDER
5664         LIBO_URE_LIB_FOLDER
5665         LIBO_URE_MISC_FOLDER
5666         OS
5667         SDKDIRNAME
5668         SYSTEM_LIBXML
5669         SYSTEM_LIBXSLT
5671     # these overwrite host config with build config
5672     OVERWRITING_SETTINGS="
5673         ANT
5674         ANT_HOME
5675         ANT_LIB
5676         HSQLDB_USE_JDBC_4_1
5677         JAVA_CLASSPATH_NOT_SET
5678         JAVA_SOURCE_VER
5679         JAVA_TARGET_VER
5680         JAVACFLAGS
5681         JAVACOMPILER
5682         JAVADOC
5683         JAVADOCISGJDOC
5685     # these need some special handling
5686     EXTRA_HANDLED_SETTINGS="
5687         INSTDIR
5688         INSTROOT
5689         PATH
5690         WORKDIR
5692     OLD_PATH=$PATH
5693     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
5694     BUILD_PATH=$PATH
5695     PATH=$OLD_PATH
5697     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
5698     echo "$line" >>build-config
5700     for V in $DIRECT_FOR_BUILD_SETTINGS; do
5701         VV='$'$V
5702         VV=`eval "echo $VV"`
5703         if test -n "$VV"; then
5704             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
5705             echo "$line" >>build-config
5706         fi
5707     done
5709     for V in $OVERWRITING_SETTINGS; do
5710         VV='$'$V
5711         VV=`eval "echo $VV"`
5712         if test -n "$VV"; then
5713             line=${V}='${'${V}:-$VV'}'
5714             echo "$line" >>build-config
5715         fi
5716     done
5718     for V in INSTDIR INSTROOT WORKDIR; do
5719         VV='$'$V
5720         VV=`eval "echo $VV"`
5721         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
5722         if test -n "$VV"; then
5723             line="${V}_FOR_BUILD='$VV'"
5724             echo "$line" >>build-config
5725         fi
5726     done
5728     )
5729     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
5730     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])
5731     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
5732              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
5734     eval `cat CONF-FOR-BUILD/build-config`
5736     AC_MSG_RESULT([checking for BUILD platform configuration... done])
5738     rm -rf CONF-FOR-BUILD
5739 else
5740     OS_FOR_BUILD="$OS"
5741     CC_FOR_BUILD="$CC"
5742     CPPU_ENV_FOR_BUILD="$CPPU_ENV"
5743     CXX_FOR_BUILD="$CXX"
5744     INSTDIR_FOR_BUILD="$INSTDIR"
5745     INSTROOT_FOR_BUILD="$INSTROOT"
5746     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
5747     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
5748     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
5749     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
5750     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
5751     WORKDIR_FOR_BUILD="$WORKDIR"
5753 AC_SUBST(OS_FOR_BUILD)
5754 AC_SUBST(INSTDIR_FOR_BUILD)
5755 AC_SUBST(INSTROOT_FOR_BUILD)
5756 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
5757 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
5758 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
5759 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
5760 AC_SUBST(SDKDIRNAME_FOR_BUILD)
5761 AC_SUBST(WORKDIR_FOR_BUILD)
5762 AC_SUBST(CC_FOR_BUILD)
5763 AC_SUBST(CXX_FOR_BUILD)
5764 AC_SUBST(CPPU_ENV_FOR_BUILD)
5766 dnl ===================================================================
5767 dnl Check for syslog header
5768 dnl ===================================================================
5769 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
5771 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
5772 dnl ===================================================================
5773 AC_MSG_CHECKING([whether to turn warnings to errors])
5774 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
5775     ENABLE_WERROR="TRUE"
5776     PYTHONWARNINGS="error"
5777     AC_MSG_RESULT([yes])
5778 else
5779     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
5780         ENABLE_WERROR="TRUE"
5781         PYTHONWARNINGS="error"
5782         AC_MSG_RESULT([yes])
5783     else
5784         AC_MSG_RESULT([no])
5785     fi
5787 AC_SUBST(ENABLE_WERROR)
5788 AC_SUBST(PYTHONWARNINGS)
5790 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
5791 dnl ===================================================================
5792 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
5793 if test -z "$enable_assert_always_abort"; then
5794    if test "$ENABLE_DEBUG" = TRUE; then
5795        enable_assert_always_abort=yes
5796    else
5797        enable_assert_always_abort=no
5798    fi
5800 if test "$enable_assert_always_abort" = "yes"; then
5801     ASSERT_ALWAYS_ABORT="TRUE"
5802     AC_MSG_RESULT([yes])
5803 else
5804     ASSERT_ALWAYS_ABORT="FALSE"
5805     AC_MSG_RESULT([no])
5807 AC_SUBST(ASSERT_ALWAYS_ABORT)
5809 # Determine whether to use ooenv for the instdir installation
5810 # ===================================================================
5811 if test $_os != "WINNT" -a $_os != "Darwin"; then
5812     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
5813     if test -z "$enable_ooenv"; then
5814         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5815             enable_ooenv=yes
5816         else
5817             enable_ooenv=no
5818         fi
5819     fi
5820     if test "$enable_ooenv" = "no"; then
5821         AC_MSG_RESULT([no])
5822     else
5823         ENABLE_OOENV="TRUE"
5824         AC_MSG_RESULT([yes])
5825     fi
5827 AC_SUBST(ENABLE_OOENV)
5829 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
5830     if test "$enable_qt5" = "no"; then
5831         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
5832     else
5833         enable_qt5=yes
5834     fi
5837 dnl ===================================================================
5838 dnl check for cups support
5839 dnl ===================================================================
5841 AC_MSG_CHECKING([whether to enable CUPS support])
5842 if test "$test_cups" = yes -a "$enable_cups" != no; then
5843     ENABLE_CUPS=TRUE
5844     AC_MSG_RESULT([yes])
5846     AC_MSG_CHECKING([whether cups support is present])
5847     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
5848     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
5849     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
5850         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
5851     fi
5852 else
5853     AC_MSG_RESULT([no])
5856 AC_SUBST(ENABLE_CUPS)
5858 # fontconfig checks
5859 if test "$using_freetype_fontconfig" = yes; then
5860     AC_MSG_CHECKING([which fontconfig to use])
5862 if test "$using_freetype_fontconfig" = yes -a "$test_system_fontconfig" != no; then
5863     AC_MSG_RESULT([external])
5864     PKG_CHECK_MODULES([FONTCONFIG], [fontconfig >= 2.4.1])
5865     SYSTEM_FONTCONFIG=TRUE
5866     FilterLibs "${FONTCONFIG_LIBS}"
5867     FONTCONFIG_LIBS="${filteredlibs}"
5868 elif test "$using_freetype_fontconfig" = yes; then
5869     AC_MSG_RESULT([internal])
5870     BUILD_TYPE="$BUILD_TYPE FONTCONFIG"
5872 AC_SUBST(FONTCONFIG_CFLAGS)
5873 AC_SUBST(FONTCONFIG_LIBS)
5874 AC_SUBST([SYSTEM_FONTCONFIG])
5876 dnl whether to find & fetch external tarballs?
5877 dnl ===================================================================
5878 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
5879    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
5880        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
5881    else
5882        TARFILE_LOCATION="$LODE_HOME/ext_tar"
5883    fi
5885 if test -z "$TARFILE_LOCATION"; then
5886     if test -d "$SRC_ROOT/src" ; then
5887         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
5888         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
5889     fi
5890     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
5891 else
5892     AbsolutePath "$TARFILE_LOCATION"
5893     PathFormat "${absolute_path}"
5894     TARFILE_LOCATION="${formatted_path}"
5896 AC_SUBST(TARFILE_LOCATION)
5898 AC_MSG_CHECKING([whether we want to fetch tarballs])
5899 if test "$enable_fetch_external" != "no"; then
5900     if test "$with_all_tarballs" = "yes"; then
5901         AC_MSG_RESULT([yes, all of them])
5902         DO_FETCH_TARBALLS="ALL"
5903     else
5904         AC_MSG_RESULT([yes, if we use them])
5905         DO_FETCH_TARBALLS="TRUE"
5906     fi
5907 else
5908     AC_MSG_RESULT([no])
5909     DO_FETCH_TARBALLS=
5911 AC_SUBST(DO_FETCH_TARBALLS)
5913 dnl Test whether to include MySpell dictionaries
5914 dnl ===================================================================
5915 AC_MSG_CHECKING([whether to include MySpell dictionaries])
5916 if test "$with_myspell_dicts" = "yes"; then
5917     AC_MSG_RESULT([yes])
5918     WITH_MYSPELL_DICTS=TRUE
5919     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
5920     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
5921 else
5922     AC_MSG_RESULT([no])
5923     WITH_MYSPELL_DICTS=
5925 AC_SUBST(WITH_MYSPELL_DICTS)
5927 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
5928 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
5929     if test "$with_system_dicts" = yes; then
5930         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
5931     fi
5932     with_system_dicts=no
5935 AC_MSG_CHECKING([whether to use dicts from external paths])
5936 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
5937     AC_MSG_RESULT([yes])
5938     SYSTEM_DICTS=TRUE
5939     AC_MSG_CHECKING([for spelling dictionary directory])
5940     if test -n "$with_external_dict_dir"; then
5941         DICT_SYSTEM_DIR=file://$with_external_dict_dir
5942     else
5943         DICT_SYSTEM_DIR=file:///usr/share/hunspell
5944         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
5945             DICT_SYSTEM_DIR=file:///usr/share/myspell
5946         fi
5947     fi
5948     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
5949     AC_MSG_CHECKING([for hyphenation patterns directory])
5950     if test -n "$with_external_hyph_dir"; then
5951         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
5952     else
5953         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
5954     fi
5955     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
5956     AC_MSG_CHECKING([for thesaurus directory])
5957     if test -n "$with_external_thes_dir"; then
5958         THES_SYSTEM_DIR=file://$with_external_thes_dir
5959     else
5960         THES_SYSTEM_DIR=file:///usr/share/mythes
5961     fi
5962     AC_MSG_RESULT([$THES_SYSTEM_DIR])
5963 else
5964     AC_MSG_RESULT([no])
5965     SYSTEM_DICTS=
5967 AC_SUBST(SYSTEM_DICTS)
5968 AC_SUBST(DICT_SYSTEM_DIR)
5969 AC_SUBST(HYPH_SYSTEM_DIR)
5970 AC_SUBST(THES_SYSTEM_DIR)
5972 dnl ===================================================================
5973 dnl Precompiled headers.
5974 ENABLE_PCH=""
5975 AC_MSG_CHECKING([whether to enable pch feature])
5976 if test -z "$enable_pch"; then
5977     if test "$_os" = "WINNT"; then
5978         # Enabled by default on Windows.
5979         enable_pch=yes
5980         # never use sccache on auto-enabled PCH builds, except if requested explicitely
5981         if test -z "$enable_ccache" -a "$SCCACHE"; then
5982             CCACHE=""
5983         fi
5984     else
5985         enable_pch=no
5986     fi
5988 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
5989     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
5991 if test "$enable_pch" = "system"; then
5992     ENABLE_PCH="1"
5993     AC_MSG_RESULT([yes (system headers)])
5994 elif test "$enable_pch" = "base"; then
5995     ENABLE_PCH="2"
5996     AC_MSG_RESULT([yes (system and base headers)])
5997 elif test "$enable_pch" = "normal"; then
5998     ENABLE_PCH="3"
5999     AC_MSG_RESULT([yes (normal)])
6000 elif test "$enable_pch" = "full"; then
6001     ENABLE_PCH="4"
6002     AC_MSG_RESULT([yes (full)])
6003 elif test "$enable_pch" = "yes"; then
6004     # Pick a suitable default.
6005     if test "$GCC" = "yes"; then
6006         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
6007         # while making the PCHs larger and rebuilds more likely.
6008         ENABLE_PCH="2"
6009         AC_MSG_RESULT([yes (system and base headers)])
6010     else
6011         # With MSVC the highest level makes a significant difference,
6012         # and it was the default when there used to be no PCH levels.
6013         ENABLE_PCH="4"
6014         AC_MSG_RESULT([yes (full)])
6015     fi
6016 elif test "$enable_pch" = "no"; then
6017     AC_MSG_RESULT([no])
6018 else
6019     AC_MSG_ERROR([Unknown value for --enable-pch])
6021 AC_SUBST(ENABLE_PCH)
6022 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
6023 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
6024     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
6025     if test "$CCACHE_BIN" != "not found"; then
6026         AC_MSG_CHECKING([ccache version])
6027         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
6028         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6029         AC_MSG_RESULT([$CCACHE_VERSION])
6030         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
6031         if test "$CCACHE_NUMVER" -gt "030701"; then
6032             AC_MSG_RESULT([yes])
6033         else
6034             AC_MSG_RESULT([no (not newer than 3.7.1)])
6035             CCACHE_DEPEND_MODE=
6036         fi
6037     fi
6040 PCH_INSTANTIATE_TEMPLATES=
6041 if test -n "$ENABLE_PCH"; then
6042     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
6043     save_CFLAGS=$CFLAGS
6044     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
6045     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
6046     CFLAGS=$save_CFLAGS
6047     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
6048         AC_MSG_RESULT(yes)
6049     else
6050         AC_MSG_RESULT(no)
6051     fi
6053 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
6055 BUILDING_PCH_WITH_OBJ=
6056 if test -n "$ENABLE_PCH"; then
6057     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
6058     save_CFLAGS=$CFLAGS
6059     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
6060     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
6061     CFLAGS=$save_CFLAGS
6062     if test -n "$BUILDING_PCH_WITH_OBJ"; then
6063         AC_MSG_RESULT(yes)
6064     else
6065         AC_MSG_RESULT(no)
6066     fi
6068 AC_SUBST(BUILDING_PCH_WITH_OBJ)
6070 PCH_CODEGEN=
6071 PCH_NO_CODEGEN=
6072 fpch_prefix=
6073 if test "$COM" = MSC; then
6074     fpch_prefix="-Xclang "
6076 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6077     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-codegen])
6078     save_CFLAGS=$CFLAGS
6079     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-codegen"
6080     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6081         [
6082         PCH_CODEGEN="${fpch_prefix}-fpch-codegen"
6083         PCH_NO_CODEGEN="${fpch_prefix}-fno-pch-codegen"
6084         ],[])
6085     CFLAGS=$save_CFLAGS
6086     if test -n "$PCH_CODEGEN"; then
6087         AC_MSG_RESULT(yes)
6088     else
6089         AC_MSG_RESULT(no)
6090     fi
6092 AC_SUBST(PCH_CODEGEN)
6093 AC_SUBST(PCH_NO_CODEGEN)
6094 PCH_DEBUGINFO=
6095 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6096     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-debuginfo])
6097     save_CFLAGS=$CFLAGS
6098     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-debuginfo"
6099     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="${fpch_prefix}-fpch-debuginfo" ],[])
6100     CFLAGS=$save_CFLAGS
6101     if test -n "$PCH_DEBUGINFO"; then
6102         AC_MSG_RESULT(yes)
6103     else
6104         AC_MSG_RESULT(no)
6105     fi
6107 AC_SUBST(PCH_DEBUGINFO)
6109 TAB=`printf '\t'`
6111 AC_MSG_CHECKING([the GNU Make version])
6112 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
6113 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6114 if test "$_make_longver" -ge "038200"; then
6115     AC_MSG_RESULT([$GNUMAKE $_make_version])
6117 elif test "$_make_longver" -ge "038100"; then
6118     if test "$build_os" = "cygwin"; then
6119         AC_MSG_ERROR([failed ($GNUMAKE version >= 3.82 needed])
6120     fi
6121     AC_MSG_RESULT([$GNUMAKE $_make_version])
6123     dnl ===================================================================
6124     dnl Search all the common names for sha1sum
6125     dnl ===================================================================
6126     AC_CHECK_PROGS(SHA1SUM, sha1sum sha1 shasum openssl)
6127     if test -z "$SHA1SUM"; then
6128         AC_MSG_ERROR([install the appropriate SHA-1 checksumming program for this OS])
6129     elif test "$SHA1SUM" = "openssl"; then
6130         SHA1SUM="openssl sha1"
6131     fi
6132     AC_MSG_CHECKING([for GNU Make bug 20033])
6133     TESTGMAKEBUG20033=`mktemp -d tmp.XXXXXX`
6134     $SED -e "s/<TAB>/$TAB/g" > $TESTGMAKEBUG20033/Makefile << EOF
6135 A := \$(wildcard *.a)
6137 .PHONY: all
6138 all: \$(A:.a=.b)
6139 <TAB>@echo survived bug20033.
6141 .PHONY: setup
6142 setup:
6143 <TAB>@touch 1.a 2.a 3.a 4.a 5.a 6.a
6145 define d1
6146 @echo lala \$(1)
6147 @sleep 1
6148 endef
6150 define d2
6151 @echo tyty \$(1)
6152 @sleep 1
6153 endef
6155 %.b : %.a
6156 <TAB>\$(eval CHECKSUM := \$(word 1,\$(shell cat \$^ | $SHA1SUM))) \$(if \$(wildcard \$(CACHEDIR)/\$(CHECKSUM)),\
6157 <TAB>\$(call d1,\$(CHECKSUM)),\
6158 <TAB>\$(call d2,\$(CHECKSUM)))
6160     if test -z "`(cd $TESTGMAKEBUG20033 && $GNUMAKE setup && $GNUMAKE -j)|grep survived`"; then
6161         no_parallelism_make="YES"
6162         AC_MSG_RESULT([yes, disable parallelism])
6163     else
6164         AC_MSG_RESULT([no, keep parallelism enabled])
6165     fi
6166     rm -rf $TESTGMAKEBUG20033
6167 else
6168     AC_MSG_ERROR([failed ($GNUMAKE version >= 3.81 needed])
6171 # find if gnumake support file function
6172 AC_MSG_CHECKING([whether GNU Make supports the 'file' function])
6173 TESTGMAKEFILEFUNC="`mktemp -d -t tst.XXXXXX`"
6174 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6175     TESTGMAKEFILEFUNC=`cygpath -m $TESTGMAKEFILEFUNC`
6177 $SED -e "s/<TAB>/$TAB/" > $TESTGMAKEFILEFUNC/Makefile << EOF
6178 \$(file >test.txt,Success )
6180 .PHONY: all
6181 all:
6182 <TAB>@cat test.txt
6185 $GNUMAKE -C $TESTGMAKEFILEFUNC 2>/dev/null 1>&2
6186 if test -f $TESTGMAKEFILEFUNC/test.txt; then
6187     HAVE_GNUMAKE_FILE_FUNC=TRUE
6188     AC_MSG_RESULT([yes])
6189 else
6190     AC_MSG_RESULT([no])
6192 rm -rf $TESTGMAKEFILEFUNC
6193 AC_SUBST(HAVE_GNUMAKE_FILE_FUNC)
6195 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6196 STALE_MAKE=
6197 if test "$_make_ver_check" = ""; then
6198    STALE_MAKE=TRUE
6201 HAVE_LD_HASH_STYLE=FALSE
6202 WITH_LINKER_HASH_STYLE=
6203 AC_MSG_CHECKING([for --hash-style gcc linker support])
6204 if test "$GCC" = "yes"; then
6205     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6206         hash_styles="gnu sysv"
6207     elif test "$with_linker_hash_style" = "no"; then
6208         hash_styles=
6209     else
6210         hash_styles="$with_linker_hash_style"
6211     fi
6213     for hash_style in $hash_styles; do
6214         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6215         hash_style_ldflags_save=$LDFLAGS
6216         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6218         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6219             [
6220 #include <stdio.h>
6221             ],[
6222 printf ("");
6223             ])],
6224             [
6225                   HAVE_LD_HASH_STYLE=TRUE
6226                   WITH_LINKER_HASH_STYLE=$hash_style
6227             ],
6228             [HAVE_LD_HASH_STYLE=FALSE],
6229             [HAVE_LD_HASH_STYLE=FALSE])
6230         LDFLAGS=$hash_style_ldflags_save
6231     done
6233     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6234         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6235     else
6236         AC_MSG_RESULT( no )
6237     fi
6238     LDFLAGS=$hash_style_ldflags_save
6239 else
6240     AC_MSG_RESULT( no )
6242 AC_SUBST(HAVE_LD_HASH_STYLE)
6243 AC_SUBST(WITH_LINKER_HASH_STYLE)
6245 dnl ===================================================================
6246 dnl Check whether there's a Perl version available.
6247 dnl ===================================================================
6248 if test -z "$with_perl_home"; then
6249     AC_PATH_PROG(PERL, perl)
6250 else
6251     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6252     _perl_path="$with_perl_home/bin/perl"
6253     if test -x "$_perl_path"; then
6254         PERL=$_perl_path
6255     else
6256         AC_MSG_ERROR([$_perl_path not found])
6257     fi
6260 dnl ===================================================================
6261 dnl Testing for Perl version 5 or greater.
6262 dnl $] is the Perl version variable, it is returned as an integer
6263 dnl ===================================================================
6264 if test "$PERL"; then
6265     AC_MSG_CHECKING([the Perl version])
6266     ${PERL} -e "exit($]);"
6267     _perl_version=$?
6268     if test "$_perl_version" -lt 5; then
6269         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6270     fi
6271     AC_MSG_RESULT([Perl $_perl_version])
6272 else
6273     AC_MSG_ERROR([Perl not found, install Perl 5])
6276 dnl ===================================================================
6277 dnl Testing for required Perl modules
6278 dnl ===================================================================
6280 AC_MSG_CHECKING([for required Perl modules])
6281 perl_use_string="use Cwd ; use Digest::MD5"
6282 if test "$_os" = "WINNT"; then
6283     if test -n "$PKGFORMAT"; then
6284         for i in $PKGFORMAT; do
6285             case "$i" in
6286             msi)
6287                 # for getting fonts versions to use in MSI
6288                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6289                 ;;
6290             esac
6291         done
6292     fi
6294 if test "$with_system_hsqldb" = "yes"; then
6295     perl_use_string="$perl_use_string ; use Archive::Zip"
6297 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6298     # OpenSSL needs that to build
6299     perl_use_string="$perl_use_string ; use FindBin"
6301 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6302     AC_MSG_RESULT([all modules found])
6303 else
6304     AC_MSG_RESULT([failed to find some modules])
6305     # Find out which modules are missing.
6306     for i in $perl_use_string; do
6307         if test "$i" != "use" -a "$i" != ";"; then
6308             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6309                 missing_perl_modules="$missing_perl_modules $i"
6310             fi
6311         fi
6312     done
6313     AC_MSG_ERROR([
6314     The missing Perl modules are: $missing_perl_modules
6315     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6318 dnl ===================================================================
6319 dnl Check for pkg-config
6320 dnl ===================================================================
6321 if test "$_os" != "WINNT"; then
6322     PKG_PROG_PKG_CONFIG
6325 if test "$_os" != "WINNT"; then
6327     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6328     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6329     # explicitly. Or put /path/to/compiler in PATH yourself.
6331     # Use wrappers for LTO
6332     if test "$ENABLE_LTO" = "TRUE" -a "$COM_IS_CLANG" != "TRUE"; then
6333         AC_CHECK_TOOL(AR,gcc-ar)
6334         AC_CHECK_TOOL(NM,gcc-nm)
6335         AC_CHECK_TOOL(RANLIB,gcc-ranlib)
6336     else
6337         AC_CHECK_TOOL(AR,ar)
6338         AC_CHECK_TOOL(NM,nm)
6339         AC_CHECK_TOOL(RANLIB,ranlib)
6340     fi
6341     AC_CHECK_TOOL(OBJDUMP,objdump)
6342     AC_CHECK_TOOL(READELF,readelf)
6343     AC_CHECK_TOOL(STRIP,strip)
6345 AC_SUBST(AR)
6346 AC_SUBST(LD)
6347 AC_SUBST(NM)
6348 AC_SUBST(OBJDUMP)
6349 AC_SUBST(PKG_CONFIG)
6350 AC_SUBST(PKG_CONFIG_PATH)
6351 AC_SUBST(PKG_CONFIG_LIBDIR)
6352 AC_SUBST(RANLIB)
6353 AC_SUBST(READELF)
6354 AC_SUBST(STRIP)
6356 dnl ===================================================================
6357 dnl pkg-config checks on macOS
6358 dnl ===================================================================
6360 if test $_os = Darwin; then
6361     AC_MSG_CHECKING([for bogus pkg-config])
6362     if test -n "$PKG_CONFIG"; then
6363         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6364             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6365         else
6366             if test "$enable_bogus_pkg_config" = "yes"; then
6367                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6368             else
6369                 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.])
6370             fi
6371         fi
6372     else
6373         AC_MSG_RESULT([no, good])
6374     fi
6377 find_csc()
6379     # Return value: $csctest
6381     unset csctest
6383     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client/InstallPath"
6384     if test -n "$regvalue"; then
6385         csctest=$regvalue
6386         return
6387     fi
6390 find_al()
6392     # Return value: $altest
6394     unset altest
6396     # We need this check to detect 4.6.1 or above.
6397     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6398         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools/InstallationFolder"
6399         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6400             altest=$regvalue
6401             return
6402         fi
6403     done
6405     for x in `ls /proc/registry32/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft\ SDKs/Windows`; do
6406         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools/InstallationFolder"
6407         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6408             altest=$regvalue
6409             return
6410         fi
6411     done
6414 find_dotnetsdk46()
6416     unset frametest
6418     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6; do
6419         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder"
6420         if test -n "$regvalue"; then
6421             frametest=$regvalue
6422             return
6423         fi
6424     done
6427 find_winsdk_version()
6429     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6430     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6432     unset winsdktest winsdkbinsubdir winsdklibsubdir
6434     case "$1" in
6435     8.0|8.0A)
6436         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
6437         if test -n "$regvalue"; then
6438             winsdktest=$regvalue
6439             winsdklibsubdir=win8
6440             return
6441         fi
6442         ;;
6443     8.1|8.1A)
6444         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot81"
6445         if test -n "$regvalue"; then
6446             winsdktest=$regvalue
6447             winsdklibsubdir=winv6.3
6448             return
6449         fi
6450         ;;
6451     10.0)
6452         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/InstallationFolder"
6453         if test -n "$regvalue"; then
6454             winsdktest=$regvalue
6455             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion"
6456             if test -n "$regvalue"; then
6457                 winsdkbinsubdir="$regvalue".0
6458                 winsdklibsubdir=$winsdkbinsubdir
6459                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6460                 local tmppath_unix=$(cygpath -u "$tmppath")
6461                 # test exist the SDK path
6462                 if test -d "$tmppath_unix"; then
6463                    # when path is convertible to a short path then path is okay
6464                    cygpath -d "$tmppath" >/dev/null 2>&1
6465                    if test $? -ne 0; then
6466                       AC_MSG_ERROR([Windows SDK doesn't have a 8.3 name, see NtfsDisable8dot3NameCreation])
6467                    fi
6468                 else
6469                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6470                 fi
6471             fi
6472             return
6473         fi
6474         ;;
6475     esac
6478 find_winsdk()
6480     # Return value: From find_winsdk_version
6482     unset winsdktest
6484     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6485         find_winsdk_version $ver
6486         if test -n "$winsdktest"; then
6487             return
6488         fi
6489     done
6492 find_msms()
6494     # Return value: $msmdir
6496     AC_MSG_CHECKING([for MSVC merge modules directory])
6497     local my_msm_files
6498     local my_msm_dir
6500     dnl Order my_msm_files in increasing order. Then check the directories returned
6501     dnl by ls in an inner loop; assuming they are also ordered in increasing order,
6502     dnl the result will be the highest MSM version found in the highest directory.
6504     case "$VCVER" in
6505         16.0 | 17.0)
6506         my_msm_files="Microsoft_VC141_CRT_x86.msm Microsoft_VC142_CRT_x86.msm ${my_msm_files}"
6507         ;;
6508     esac
6509     for f in $my_msm_files; do
6510         echo "$as_me:$LINENO: searching for $f" >&5
6511     done
6513     msmdir=
6514     case "$VCVER" in
6515     16.0 | 17.0)
6516         for f in ${my_msm_files}; do
6517             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6518                 my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6519                 echo "$as_me:$LINENO: looking for $my_msm_dir${f}])" >&5
6520                 if test -e "$my_msm_dir${f}"; then
6521                     msmdir=$my_msm_dir
6522                 fi
6523             done
6524         done
6525         ;;
6526     esac
6528     if test -n "$msmdir"; then
6529         msmdir=`cygpath -m "$msmdir"`
6530         AC_MSG_RESULT([$msmdir])
6531     else
6532         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6533             AC_MSG_FAILURE([not found])
6534         else
6535             AC_MSG_WARN([not found (check config.log)])
6536             add_warning "MSM none of ${my_msm_files} found"
6537         fi
6538     fi
6541 find_msvc_x64_dlls()
6543     # Return value: $msvcdllpath, $msvcdlls
6545     AC_MSG_CHECKING([for MSVC x64 DLL path])
6547     dnl Order crtver in increasing order. Then check the directories returned by
6548     dnl ls in an inner loop; assuming they are also ordered in increasing order,
6549     dnl the result will be the highest CRT version found in the highest directory.
6551     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6552     case "$VCVER" in
6553     16.0 | 17.0)
6554         for crtver in 141 142 143; do
6555             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6556                 echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT" >&5
6557                 if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"; then
6558                     msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"
6559                 fi
6560             done
6561         done
6562         ;;
6563     esac
6564     AC_MSG_RESULT([$msvcdllpath])
6565     AC_MSG_CHECKING([for MSVC x64 DLLs])
6566     msvcdlls="msvcp140.dll vcruntime140.dll"
6567     for dll in $msvcdlls; do
6568         if ! test -f "$msvcdllpath/$dll"; then
6569             AC_MSG_FAILURE([missing $dll])
6570         fi
6571     done
6572     AC_MSG_RESULT([found all ($msvcdlls)])
6575 dnl =========================================
6576 dnl Check for the Windows  SDK.
6577 dnl =========================================
6578 if test "$_os" = "WINNT"; then
6579     AC_MSG_CHECKING([for Windows SDK])
6580     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6581         find_winsdk
6582         WINDOWS_SDK_HOME=$winsdktest
6584         # normalize if found
6585         if test -n "$WINDOWS_SDK_HOME"; then
6586             WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
6587             WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
6588         fi
6590         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6591     fi
6593     if test -n "$WINDOWS_SDK_HOME"; then
6594         # Remove a possible trailing backslash
6595         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6597         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6598              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6599              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6600             have_windows_sdk_headers=yes
6601         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6602              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6603              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6604             have_windows_sdk_headers=yes
6605         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6606              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6607              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6608             have_windows_sdk_headers=yes
6609         else
6610             have_windows_sdk_headers=no
6611         fi
6613         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6614             have_windows_sdk_libs=yes
6615         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6616             have_windows_sdk_libs=yes
6617         else
6618             have_windows_sdk_libs=no
6619         fi
6621         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6622             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6623 the  Windows SDK are installed.])
6624         fi
6625     fi
6627     if test -z "$WINDOWS_SDK_HOME"; then
6628         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6629     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6630         WINDOWS_SDK_VERSION=80
6631         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6632     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6633         WINDOWS_SDK_VERSION=81
6634         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6635     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6636         WINDOWS_SDK_VERSION=10
6637         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6638     else
6639         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6640     fi
6641     PathFormat "$WINDOWS_SDK_HOME"
6642     WINDOWS_SDK_HOME="$formatted_path"
6643     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6644     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6645         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6646         if test -d "$WINDOWS_SDK_HOME/include/um"; then
6647             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6648         elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then
6649             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6650         fi
6651     fi
6653     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6654     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6655     dnl but not in v8.0), so allow this to be overridden with a
6656     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6657     dnl and configuration error if no WiLangId.vbs is found would arguably be
6658     dnl better, but I do not know under which conditions exactly it is needed by
6659     dnl msiglobal.pm:
6660     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6661         WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6662         WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6663         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6664             WINDOWS_SDK_WILANGID="${WINDOWS_SDK_HOME}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6665             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6666         fi
6667         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6668             WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6669             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6670         fi
6671         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6672             WINDOWS_SDK_WILANGID=$(cygpath -sm "C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs")
6673             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6674         fi
6675     fi
6676     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6677         if test -n "$with_package_format" -a "$with_package_format" != no; then
6678             for i in "$with_package_format"; do
6679                 if test "$i" = "msi"; then
6680                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6681                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6682                     fi
6683                 fi
6684             done
6685         fi
6686     fi
6688 AC_SUBST(WINDOWS_SDK_HOME)
6689 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6690 AC_SUBST(WINDOWS_SDK_VERSION)
6691 AC_SUBST(WINDOWS_SDK_WILANGID)
6693 if test "$build_os" = "cygwin"; then
6694     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6695     dnl dir, it also determines that dir's path w/o an arch segment if any,
6696     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6697     AC_MSG_CHECKING([for midl.exe])
6699     find_winsdk
6700     if test -n "$winsdkbinsubdir" \
6701         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6702     then
6703         MIDL_PATH=$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6704         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin/$winsdkbinsubdir
6705     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6706         MIDL_PATH=$winsdktest/Bin/$WIN_BUILD_ARCH
6707         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6708     elif test -f "$winsdktest/Bin/midl.exe"; then
6709         MIDL_PATH=$winsdktest/Bin
6710         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6711     fi
6712     if test ! -f "$MIDL_PATH/midl.exe"; then
6713         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6714     else
6715         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6716     fi
6718     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6719     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6721     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6722          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6723          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6724          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6725     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6726          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6727          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6728          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
6729     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
6730          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
6731          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6732          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
6733     else
6734         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
6735     fi
6737     dnl Check csc.exe
6738     AC_MSG_CHECKING([for csc.exe])
6739     find_csc
6740     if test -f "$csctest/csc.exe"; then
6741         CSC_PATH="$csctest"
6742     fi
6743     if test ! -f "$CSC_PATH/csc.exe"; then
6744         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
6745     else
6746         AC_MSG_RESULT([$CSC_PATH/csc.exe])
6747     fi
6749     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
6751     dnl Check al.exe
6752     AC_MSG_CHECKING([for al.exe])
6753     find_winsdk
6754     if test -n "$winsdkbinsubdir" \
6755         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
6756     then
6757         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
6758     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/al.exe"; then
6759         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
6760     elif test -f "$winsdktest/Bin/al.exe"; then
6761         AL_PATH="$winsdktest/Bin"
6762     fi
6764     if test -z "$AL_PATH"; then
6765         find_al
6766         if test -f "$altest/bin/al.exe"; then
6767             AL_PATH="$altest/bin"
6768         elif test -f "$altest/al.exe"; then
6769             AL_PATH="$altest"
6770         fi
6771     fi
6772     if test ! -f "$AL_PATH/al.exe"; then
6773         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
6774     else
6775         AC_MSG_RESULT([$AL_PATH/al.exe])
6776     fi
6778     AL_PATH=`win_short_path_for_make "$AL_PATH"`
6780     dnl Check mscoree.lib / .NET Framework dir
6781     AC_MSG_CHECKING(.NET Framework)
6782     find_dotnetsdk46
6783     PathFormat "$frametest"
6784     frametest="$formatted_path"
6785     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6786         DOTNET_FRAMEWORK_HOME="$frametest"
6787     else
6788         find_winsdk
6789         if test -f "$winsdktest/lib/mscoree.lib" -o -f "$winsdktest/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6790             DOTNET_FRAMEWORK_HOME="$winsdktest"
6791         fi
6792     fi
6793     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
6794         AC_MSG_ERROR([mscoree.lib not found])
6795     fi
6796     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
6798     PathFormat "$MIDL_PATH"
6799     MIDL_PATH="$formatted_path"
6801     PathFormat "$AL_PATH"
6802     AL_PATH="$formatted_path"
6804     PathFormat "$DOTNET_FRAMEWORK_HOME"
6805     DOTNET_FRAMEWORK_HOME="$formatted_path"
6807     PathFormat "$CSC_PATH"
6808     CSC_PATH="$formatted_path"
6811 dnl ===================================================================
6812 dnl Testing for C++ compiler and version...
6813 dnl ===================================================================
6815 if test "$_os" != "WINNT"; then
6816     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that
6817     save_CXXFLAGS=$CXXFLAGS
6818     AC_PROG_CXX
6819     CXXFLAGS=$save_CXXFLAGS
6820     if test -z "$CXX_BASE"; then
6821         CXX_BASE=`first_arg_basename "$CXX"`
6822     fi
6825 dnl check for GNU C++ compiler version
6826 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
6827     AC_MSG_CHECKING([the GNU C++ compiler version])
6829     _gpp_version=`$CXX -dumpversion`
6830     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
6832     if test "$_gpp_majmin" -lt "700"; then
6833         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
6834     else
6835         AC_MSG_RESULT([ok (g++ $_gpp_version)])
6836     fi
6838     dnl see https://code.google.com/p/android/issues/detail?id=41770
6839         glibcxx_threads=no
6840         AC_LANG_PUSH([C++])
6841         AC_REQUIRE_CPP
6842         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
6843         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
6844             #include <bits/c++config.h>]],[[
6845             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
6846             && !defined(_GLIBCXX__PTHREADS) \
6847             && !defined(_GLIBCXX_HAS_GTHREADS)
6848             choke me
6849             #endif
6850         ]])],[AC_MSG_RESULT([yes])
6851         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
6852         AC_LANG_POP([C++])
6853         if test $glibcxx_threads = yes; then
6854             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
6855         fi
6857 AC_SUBST(BOOST_CXXFLAGS)
6860 # prefx CXX with ccache if needed
6862 if test "$CCACHE" != ""; then
6863     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
6864     AC_LANG_PUSH([C++])
6865     save_CXXFLAGS=$CXXFLAGS
6866     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
6867     # msvc does not fail on unknown options, check stdout
6868     if test "$COM" = MSC; then
6869         CXXFLAGS="$CXXFLAGS -nologo"
6870     fi
6871     save_ac_cxx_werror_flag=$ac_cxx_werror_flag
6872     ac_cxx_werror_flag=yes
6873     dnl an empty program will do, we're checking the compiler flags
6874     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
6875                       [use_ccache=yes], [use_ccache=no])
6876     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
6877         AC_MSG_RESULT([yes])
6878     else
6879         CXX="$CCACHE $CXX"
6880         CXX_BASE="ccache $CXX_BASE"
6881         AC_MSG_RESULT([no])
6882     fi
6883     CXXFLAGS=$save_CXXFLAGS
6884     ac_cxx_werror_flag=$save_ac_cxx_werror_flag
6885     AC_LANG_POP([C++])
6888 dnl ===================================================================
6889 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
6890 dnl ===================================================================
6892 if test "$_os" != "WINNT"; then
6893     AC_PROG_CXXCPP
6895     dnl Check whether there's a C pre-processor.
6896     AC_PROG_CPP
6900 dnl ===================================================================
6901 dnl Find integral type sizes and alignments
6902 dnl ===================================================================
6904 if test "$_os" != "WINNT"; then
6906     AC_CHECK_SIZEOF(long)
6907     AC_CHECK_SIZEOF(short)
6908     AC_CHECK_SIZEOF(int)
6909     AC_CHECK_SIZEOF(long long)
6910     AC_CHECK_SIZEOF(double)
6911     AC_CHECK_SIZEOF(void*)
6912     AC_CHECK_SIZEOF(size_t)
6914     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
6915     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
6916     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
6917     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
6918     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
6919     SIZEOF_SIZE_T=$ac_cv_sizeof_size_t
6921     dnl Allow build without AC_CHECK_ALIGNOF, grrr
6922     m4_pattern_allow([AC_CHECK_ALIGNOF])
6923     m4_ifdef([AC_CHECK_ALIGNOF],
6924         [
6925             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
6926             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
6927             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
6928             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
6929         ],
6930         [
6931             case "$_os-$host_cpu" in
6932             Linux-i686)
6933                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6934                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6935                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
6936                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
6937                 ;;
6938             Linux-x86_64)
6939                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6940                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6941                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
6942                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
6943                 ;;
6944             *)
6945                 if test -z "$ac_cv_alignof_short" -o \
6946                         -z "$ac_cv_alignof_int" -o \
6947                         -z "$ac_cv_alignof_long" -o \
6948                         -z "$ac_cv_alignof_double"; then
6949                    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.])
6950                 fi
6951                 ;;
6952             esac
6953         ])
6955     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
6956     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
6957     if test $ac_cv_sizeof_long -eq 8; then
6958         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
6959     elif test $ac_cv_sizeof_double -eq 8; then
6960         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
6961     else
6962         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
6963     fi
6965     dnl Check for large file support
6966     AC_SYS_LARGEFILE
6967     if test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
6968         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
6969     fi
6970     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
6971         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
6972     fi
6973 else
6974     # Hardcode for MSVC
6975     SAL_TYPES_SIZEOFSHORT=2
6976     SAL_TYPES_SIZEOFINT=4
6977     SAL_TYPES_SIZEOFLONG=4
6978     SAL_TYPES_SIZEOFLONGLONG=8
6979     if test $WIN_HOST_BITS -eq 32; then
6980         SAL_TYPES_SIZEOFPOINTER=4
6981         SIZEOF_SIZE_T=4
6982     else
6983         SAL_TYPES_SIZEOFPOINTER=8
6984         SIZEOF_SIZE_T=8
6985     fi
6986     SAL_TYPES_ALIGNMENT2=2
6987     SAL_TYPES_ALIGNMENT4=4
6988     SAL_TYPES_ALIGNMENT8=8
6989     LFS_CFLAGS=''
6991 AC_SUBST(LFS_CFLAGS)
6992 AC_SUBST(SIZEOF_SIZE_T)
6994 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
6995 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
6996 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
6997 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
6998 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
6999 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
7000 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
7001 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
7003 dnl ===================================================================
7004 dnl Check whether to enable runtime optimizations
7005 dnl ===================================================================
7006 ENABLE_RUNTIME_OPTIMIZATIONS=
7007 AC_MSG_CHECKING([whether to enable runtime optimizations])
7008 if test -z "$enable_runtime_optimizations"; then
7009     for i in $CC; do
7010         case $i in
7011         -fsanitize=*)
7012             enable_runtime_optimizations=no
7013             break
7014             ;;
7015         esac
7016     done
7018 if test "$enable_runtime_optimizations" != no; then
7019     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
7020     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
7021     AC_MSG_RESULT([yes])
7022 else
7023     AC_MSG_RESULT([no])
7025 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
7027 dnl ===================================================================
7028 dnl Check if valgrind headers are available
7029 dnl ===================================================================
7030 ENABLE_VALGRIND=
7031 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
7032     prev_cppflags=$CPPFLAGS
7033     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
7034     # or where does it come from?
7035     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
7036     AC_CHECK_HEADER([valgrind/valgrind.h],
7037         [ENABLE_VALGRIND=TRUE])
7038     CPPFLAGS=$prev_cppflags
7040 AC_SUBST([ENABLE_VALGRIND])
7041 if test -z "$ENABLE_VALGRIND"; then
7042     if test "$with_valgrind" = yes; then
7043         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
7044     fi
7045     VALGRIND_CFLAGS=
7047 AC_SUBST([VALGRIND_CFLAGS])
7050 dnl ===================================================================
7051 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
7052 dnl ===================================================================
7054 # We need at least the sys/sdt.h include header.
7055 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
7056 if test "$SDT_H_FOUND" = "TRUE"; then
7057     # Found sys/sdt.h header, now make sure the c++ compiler works.
7058     # Old g++ versions had problems with probes in constructors/destructors.
7059     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
7060     AC_LANG_PUSH([C++])
7061     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
7062     #include <sys/sdt.h>
7063     class ProbeClass
7064     {
7065     private:
7066       int& ref;
7067       const char *name;
7069     public:
7070       ProbeClass(int& v, const char *n) : ref(v), name(n)
7071       {
7072         DTRACE_PROBE2(_test_, cons, name, ref);
7073       }
7075       void method(int min)
7076       {
7077         DTRACE_PROBE3(_test_, meth, name, ref, min);
7078         ref -= min;
7079       }
7081       ~ProbeClass()
7082       {
7083         DTRACE_PROBE2(_test_, dest, name, ref);
7084       }
7085     };
7086     ]],[[
7087     int i = 64;
7088     DTRACE_PROBE1(_test_, call, i);
7089     ProbeClass inst = ProbeClass(i, "call");
7090     inst.method(24);
7091     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
7092           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
7093     AC_LANG_POP([C++])
7095 AC_CONFIG_HEADERS([config_host/config_probes.h])
7097 dnl ===================================================================
7098 dnl GCC features
7099 dnl ===================================================================
7100 HAVE_GCC_STACK_CLASH_PROTECTION=
7101 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7102     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
7103     save_CFLAGS=$CFLAGS
7104     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
7105     AC_LINK_IFELSE(
7106         [AC_LANG_PROGRAM(, [[return 0;]])],
7107         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
7108         [AC_MSG_RESULT([no])])
7109     CFLAGS=$save_CFLAGS
7111     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
7112     save_CFLAGS=$CFLAGS
7113     CFLAGS="$CFLAGS -Werror -mno-avx"
7114     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
7115     CFLAGS=$save_CFLAGS
7116     if test "$HAVE_GCC_AVX" = "TRUE"; then
7117         AC_MSG_RESULT([yes])
7118     else
7119         AC_MSG_RESULT([no])
7120     fi
7122     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
7123     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7124     int v = 0;
7125     if (__sync_add_and_fetch(&v, 1) != 1 ||
7126         __sync_sub_and_fetch(&v, 1) != 0)
7127         return 1;
7128     __sync_synchronize();
7129     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
7130         v != 1)
7131         return 1;
7132     return 0;
7133 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
7134     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
7135         AC_MSG_RESULT([yes])
7136         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
7137     else
7138         AC_MSG_RESULT([no])
7139     fi
7141     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
7142     AC_LANG_PUSH([C++])
7143     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7144             #include <cstddef>
7145             #include <cxxabi.h>
7146             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
7147         ])], [
7148             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
7149             AC_MSG_RESULT([yes])
7150         ], [AC_MSG_RESULT([no])])
7151     AC_LANG_POP([C++])
7153     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
7154     AC_LANG_PUSH([C++])
7155     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7156             #include <cstddef>
7157             #include <cxxabi.h>
7158             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7159         ])], [
7160             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7161             AC_MSG_RESULT([yes])
7162         ], [AC_MSG_RESULT([no])])
7163     AC_LANG_POP([C++])
7165     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7166     AC_LANG_PUSH([C++])
7167     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7168             #include <cxxabi.h>
7169             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7170         ])], [
7171             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7172             AC_MSG_RESULT([yes])
7173         ], [AC_MSG_RESULT([no])])
7174     AC_LANG_POP([C++])
7176     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7177     AC_LANG_PUSH([C++])
7178     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7179             #include <cstddef>
7180             #include <cxxabi.h>
7181             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7182         ])], [
7183             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7184             AC_MSG_RESULT([yes])
7185         ], [AC_MSG_RESULT([no])])
7186     AC_LANG_POP([C++])
7188     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7189     AC_LANG_PUSH([C++])
7190     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7191             #include <cstddef>
7192             #include <cxxabi.h>
7193             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7194         ])], [
7195             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7196             AC_MSG_RESULT([yes])
7197         ], [AC_MSG_RESULT([no])])
7198     AC_LANG_POP([C++])
7200     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7201     AC_LANG_PUSH([C++])
7202     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7203             #include <cxxabi.h>
7204             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7205         ])], [
7206             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7207             AC_MSG_RESULT([yes])
7208         ], [AC_MSG_RESULT([no])])
7209     AC_LANG_POP([C++])
7211     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7212     AC_LANG_PUSH([C++])
7213     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7214             #include <cxxabi.h>
7215             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7216         ])], [
7217             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7218             AC_MSG_RESULT([yes])
7219         ], [AC_MSG_RESULT([no])])
7220     AC_LANG_POP([C++])
7222     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7223     AC_LANG_PUSH([C++])
7224     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7225             #include <cxxabi.h>
7226             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7227         ])], [
7228             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7229             AC_MSG_RESULT([yes])
7230         ], [AC_MSG_RESULT([no])])
7231     AC_LANG_POP([C++])
7233     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info in cxxabi.h])
7234     AC_LANG_PUSH([C++])
7235     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7236             #include <cstddef>
7237             #include <cxxabi.h>
7238             std::size_t f() { return sizeof(__cxxabiv1::__si_class_type_info); }
7239         ])], [
7240             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7241             AC_MSG_RESULT([yes])
7242         ], [AC_MSG_RESULT([no])])
7243     AC_LANG_POP([C++])
7245     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7246     AC_LANG_PUSH([C++])
7247     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7248             #include <cstddef>
7249             #include <cxxabi.h>
7250             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7251         ])], [
7252             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7253             AC_MSG_RESULT([yes])
7254         ], [AC_MSG_RESULT([no])])
7255     AC_LANG_POP([C++])
7258 AC_SUBST(HAVE_GCC_AVX)
7259 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7260 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7262 dnl ===================================================================
7263 dnl Identify the C++ library
7264 dnl ===================================================================
7266 AC_MSG_CHECKING([what the C++ library is])
7267 HAVE_LIBSTDCPP=
7268 AC_LANG_PUSH([C++])
7269 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7270 #include <utility>
7271 #ifndef __GLIBCXX__
7272 foo bar
7273 #endif
7274 ]])],
7275     [CPP_LIBRARY=GLIBCXX
7276      cpp_library_name="GNU libstdc++"
7277      HAVE_LIBSTDCPP=TRUE
7278     ],
7279     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7280 #include <utility>
7281 #ifndef _LIBCPP_VERSION
7282 foo bar
7283 #endif
7284 ]])],
7285     [CPP_LIBRARY=LIBCPP
7286      cpp_library_name="LLVM libc++"
7287      AC_DEFINE([HAVE_LIBCXX])
7288     ],
7289     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7290 #include <utility>
7291 #ifndef _MSC_VER
7292 foo bar
7293 #endif
7294 ]])],
7295     [CPP_LIBRARY=MSVCRT
7296      cpp_library_name="Microsoft"
7297     ],
7298     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7299 AC_MSG_RESULT([$cpp_library_name])
7300 AC_LANG_POP([C++])
7301 AC_SUBST([HAVE_LIBSTDCPP])
7303 dnl ===================================================================
7304 dnl Check for gperf
7305 dnl ===================================================================
7306 AC_PATH_PROG(GPERF, gperf)
7307 if test -z "$GPERF"; then
7308     AC_MSG_ERROR([gperf not found but needed. Install it.])
7310 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7311     GPERF=`cygpath -m $GPERF`
7313 AC_MSG_CHECKING([whether gperf is new enough])
7314 my_gperf_ver1=$($GPERF --version | head -n 1)
7315 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7316 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7317 if test "$my_gperf_ver3" -ge 301; then
7318     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7319 else
7320     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7322 AC_SUBST(GPERF)
7324 dnl ===================================================================
7325 dnl Check for system libcmis
7326 dnl ===================================================================
7327 # libcmis requires curl and we can't build curl for iOS
7328 if test "$test_cmis" = "yes" -a "$enable_cmis" = "yes"; then
7329     libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.5 >= 0.5.2])
7330     ENABLE_LIBCMIS=TRUE
7331 else
7332     ENABLE_LIBCMIS=
7334 AC_SUBST(ENABLE_LIBCMIS)
7336 dnl ===================================================================
7337 dnl C++11
7338 dnl ===================================================================
7340 AC_MSG_CHECKING([whether $CXX_BASE supports C++17])
7341 CXXFLAGS_CXX11=
7342 if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7343     if test "$with_latest_c__" = yes; then
7344         CXXFLAGS_CXX11=-std:c++latest
7345     else
7346         CXXFLAGS_CXX11=-std:c++17
7347     fi
7348     CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus"
7349 elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7350     my_flags='-std=c++17 -std=c++1z'
7351     if test "$with_latest_c__" = yes; then
7352         my_flags="-std=c++23 -std=c++2b -std=c++20 -std=c++2a $my_flags"
7353     fi
7354     for flag in $my_flags; do
7355         if test "$COM" = MSC; then
7356             flag="-Xclang $flag"
7357         fi
7358         save_CXXFLAGS=$CXXFLAGS
7359         CXXFLAGS="$CXXFLAGS $flag -Werror"
7360         if test "$SYSTEM_LIBCMIS" = TRUE; then
7361             CXXFLAGS="$CXXFLAGS -DSYSTEM_LIBCMIS $LIBCMIS_CFLAGS"
7362         fi
7363         AC_LANG_PUSH([C++])
7364         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7365             #include <algorithm>
7366             #include <functional>
7367             #include <vector>
7369             #if defined SYSTEM_LIBCMIS
7370             // See ucb/source/ucp/cmis/auth_provider.hxx:
7371             #if !defined __clang__
7372             #pragma GCC diagnostic push
7373             #pragma GCC diagnostic ignored "-Wdeprecated"
7374             #pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
7375             #endif
7376             #include <libcmis/libcmis.hxx>
7377             #if !defined __clang__
7378             #pragma GCC diagnostic pop
7379             #endif
7380             #endif
7382             void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7383                 std::sort(v.begin(), v.end(), fn);
7384             }
7385             ]])],[CXXFLAGS_CXX11=$flag])
7386         AC_LANG_POP([C++])
7387         CXXFLAGS=$save_CXXFLAGS
7388         if test -n "$CXXFLAGS_CXX11"; then
7389             break
7390         fi
7391     done
7393 if test -n "$CXXFLAGS_CXX11"; then
7394     AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7395 else
7396     AC_MSG_ERROR(no)
7398 AC_SUBST(CXXFLAGS_CXX11)
7400 if test "$GCC" = "yes"; then
7401     save_CXXFLAGS=$CXXFLAGS
7402     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7403     CHECK_L_ATOMIC
7404     CXXFLAGS=$save_CXXFLAGS
7405     AC_SUBST(ATOMIC_LIB)
7408 dnl Test for temporarily incompatible libstdc++ 4.7.{0,1}, where
7409 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=179528> introduced
7410 dnl an additional member _M_size into C++11 std::list towards 4.7.0 and
7411 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=189186> removed it
7412 dnl again towards 4.7.2:
7413 if test $CPP_LIBRARY = GLIBCXX; then
7414     AC_MSG_CHECKING([whether using C++11 causes libstdc++ 4.7.0/4.7.1 ABI breakage])
7415     AC_LANG_PUSH([C++])
7416     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7417 #include <list>
7418 #if !defined __GLIBCXX__ || (__GLIBCXX__ != 20120322 && __GLIBCXX__ != 20120614)
7419     // according to <https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html>:
7420     //   GCC 4.7.0: 20120322
7421     //   GCC 4.7.1: 20120614
7422     // and using a range check is not possible as the mapping between
7423     // __GLIBCXX__ values and GCC versions is not monotonic
7424 /* ok */
7425 #else
7426 abi broken
7427 #endif
7428         ]])], [AC_MSG_RESULT(no, ok)],
7429         [AC_MSG_ERROR(yes)])
7430     AC_LANG_POP([C++])
7433 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7434 save_CXXFLAGS=$CXXFLAGS
7435 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7436 AC_LANG_PUSH([C++])
7438 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7439 #include <stddef.h>
7441 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7443 namespace
7445         struct b
7446         {
7447                 int i;
7448                 int j;
7449         };
7451 ]], [[
7452 struct a
7454         int i;
7455         int j;
7457 a thinga[]={{0,0}, {1,1}};
7458 b thingb[]={{0,0}, {1,1}};
7459 size_t i = sizeof(sal_n_array_size(thinga));
7460 size_t j = sizeof(sal_n_array_size(thingb));
7461 return !(i != 0 && j != 0);
7463     ], [ AC_MSG_RESULT(yes) ],
7464     [ AC_MSG_ERROR(no)])
7465 AC_LANG_POP([C++])
7466 CXXFLAGS=$save_CXXFLAGS
7468 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7469 if test "$GCC" = yes; then
7470     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7471     AC_LANG_PUSH([C++])
7472     save_CXXFLAGS=$CXXFLAGS
7473     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7474     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7475     CXXFLAGS=$save_CXXFLAGS
7476     AC_LANG_POP([C++])
7477     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7478         AC_MSG_RESULT([yes])
7479     else
7480         AC_MSG_RESULT([no])
7481     fi
7483 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7485 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7486 AC_LANG_PUSH([C++])
7487 save_CXXFLAGS=$CXXFLAGS
7488 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7489 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7490         #include <algorithm>
7491         #include <initializer_list>
7492         #include <vector>
7493         template<typename T> class S {
7494         private:
7495             std::vector<T> v_;
7496         public:
7497             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7498         };
7499         constinit S<int> s{3, 2, 1};
7500     ])], [
7501         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7502         AC_MSG_RESULT([yes])
7503     ], [AC_MSG_RESULT([no])])
7504 CXXFLAGS=$save_CXXFLAGS
7505 AC_LANG_POP([C++])
7507 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a <span> with unsigned size_type])
7508 AC_LANG_PUSH([C++])
7509 save_CXXFLAGS=$CXXFLAGS
7510 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7511 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7512         #include <span>
7513         #include <type_traits>
7514         // Don't check size_type directly, as it was called index_type before P1872R0:
7515         void f(std::span<int> s) { static_assert(std::is_unsigned_v<decltype(s.size())>); };
7516     ])], [
7517         AC_DEFINE([HAVE_CPP_SPAN],[1])
7518         AC_MSG_RESULT([yes])
7519     ], [AC_MSG_RESULT([no])])
7520 CXXFLAGS=$save_CXXFLAGS
7521 AC_LANG_POP([C++])
7523 AC_MSG_CHECKING([whether $CXX_BASE implements C++ DR P1155R3])
7524 AC_LANG_PUSH([C++])
7525 save_CXXFLAGS=$CXXFLAGS
7526 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7527 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7528         struct S1 { S1(S1 &&); };
7529         struct S2: S1 {};
7530         S1 f(S2 s) { return s; }
7531     ])], [
7532         AC_DEFINE([HAVE_P1155R3],[1])
7533         AC_MSG_RESULT([yes])
7534     ], [AC_MSG_RESULT([no])])
7535 CXXFLAGS=$save_CXXFLAGS
7536 AC_LANG_POP([C++])
7538 AC_MSG_CHECKING([whether $CXX_BASE supports C++20 std::atomic_ref])
7539 HAVE_CXX20_ATOMIC_REF=
7540 AC_LANG_PUSH([C++])
7541 save_CXXFLAGS=$CXXFLAGS
7542 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7543 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7544         #include <atomic>
7545         int x;
7546         std::atomic_ref<int> y(x);
7547     ])], [
7548         HAVE_CXX20_ATOMIC_REF=TRUE
7549         AC_MSG_RESULT([yes])
7550     ], [AC_MSG_RESULT([no])])
7551 CXXFLAGS=$save_CXXFLAGS
7552 AC_LANG_POP([C++])
7553 AC_SUBST([HAVE_CXX20_ATOMIC_REF])
7555 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7556 dnl which is included in -Wextra anyway):
7557 HAVE_WDEPRECATED_COPY_DTOR=
7558 if test "$GCC" = yes; then
7559     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7560     AC_LANG_PUSH([C++])
7561     save_CXXFLAGS=$CXXFLAGS
7562     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7563     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7564             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7565             AC_MSG_RESULT([yes])
7566         ], [AC_MSG_RESULT([no])])
7567     CXXFLAGS=$save_CXXFLAGS
7568     AC_LANG_POP([C++])
7570 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7572 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7573 dnl uninitialized warning for code like
7575 dnl   OString f();
7576 dnl   boost::optional<OString> * g(bool b) {
7577 dnl       boost::optional<OString> o;
7578 dnl       if (b) o = f();
7579 dnl       return new boost::optional<OString>(o);
7580 dnl   }
7582 dnl (as is e.g. present, in a slightly more elaborate form, in
7583 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7584 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7585 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7586 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7587     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7588     AC_LANG_PUSH([C++])
7589     save_CXXFLAGS=$CXXFLAGS
7590     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7591     if test "$ENABLE_OPTIMIZED" = TRUE; then
7592         CXXFLAGS="$CXXFLAGS -O2"
7593     else
7594         CXXFLAGS="$CXXFLAGS -O0"
7595     fi
7596     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7597             #include <new>
7598             void f1(int);
7599             struct S1 {
7600                 ~S1() { f1(n); }
7601                 int n = 0;
7602             };
7603             struct S2 {
7604                 S2() {}
7605                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7606                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7607                 void set(S1 s) {
7608                     new (stg) S1(s);
7609                     init = true;
7610                 }
7611                 bool init = false;
7612                 char stg[sizeof (S1)];
7613             } ;
7614             S1 f2();
7615             S2 * f3(bool b) {
7616                 S2 o;
7617                 if (b) o.set(f2());
7618                 return new S2(o);
7619             }
7620         ]])], [AC_MSG_RESULT([no])], [
7621             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7622             AC_MSG_RESULT([yes])
7623         ])
7624     CXXFLAGS=$save_CXXFLAGS
7625     AC_LANG_POP([C++])
7627 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7629 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7630 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7631 dnl hits us e.g. with GCC 10 and --enable-optimized at
7633 dnl   In file included from include/rtl/string.hxx:49,
7634 dnl                    from include/rtl/ustring.hxx:43,
7635 dnl                    from include/osl/file.hxx:35,
7636 dnl                    from include/codemaker/global.hxx:28,
7637 dnl                    from include/codemaker/options.hxx:23,
7638 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7639 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7640 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,
7641 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,
7642 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,
7643 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7644 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7645 dnl      78 |         memcpy( buffer, data, length );
7646 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7647 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7648 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7649     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7650     AC_LANG_PUSH([C++])
7651     save_CXXFLAGS=$CXXFLAGS
7652     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7653     if test "$ENABLE_OPTIMIZED" = TRUE; then
7654         CXXFLAGS="$CXXFLAGS -O2"
7655     else
7656         CXXFLAGS="$CXXFLAGS -O0"
7657     fi
7658     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7659     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7660             void fill(char const * begin, char const * end, char c);
7661             struct q {
7662                 char ids[4];
7663                 char username[6];
7664             };
7665             void test(q & c) {
7666                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
7667                 __builtin_strncpy(c.username, "root", sizeof(c.username));
7668             }
7669         ]])], [AC_MSG_RESULT([no])], [
7670             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
7671             AC_MSG_RESULT([yes])
7672         ])
7673     CXXFLAGS=$save_CXXFLAGS
7674     AC_LANG_POP([C++])
7676 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
7678 HAVE_DLLEXPORTINLINES=
7679 dnl At least for Clang 14 trunk, -Zc:dllexportInlines- would cause lots of unresolved symbols when
7680 dnl linking e.g. Library_cppuhelper, for whatever reason:
7681 if test "$_os" = "WINNT" && test "$COM_IS_CLANG" != TRUE; then
7682     AC_MSG_CHECKING([whether $CXX_BASE supports -Zc:dllexportInlines-])
7683     AC_LANG_PUSH([C++])
7684     save_CXXFLAGS=$CXXFLAGS
7685     CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
7686     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7687             HAVE_DLLEXPORTINLINES=TRUE
7688             AC_MSG_RESULT([yes])
7689         ], [AC_MSG_RESULT([no])])
7690     CXXFLAGS=$save_CXXFLAGS
7691     AC_LANG_POP([C++])
7693 AC_SUBST([HAVE_DLLEXPORTINLINES])
7695 dnl ===================================================================
7696 dnl CPU Intrinsics support - SSE, AVX
7697 dnl ===================================================================
7699 CXXFLAGS_INTRINSICS_SSE2=
7700 CXXFLAGS_INTRINSICS_SSSE3=
7701 CXXFLAGS_INTRINSICS_SSE41=
7702 CXXFLAGS_INTRINSICS_SSE42=
7703 CXXFLAGS_INTRINSICS_AVX=
7704 CXXFLAGS_INTRINSICS_AVX2=
7705 CXXFLAGS_INTRINSICS_AVX512=
7706 CXXFLAGS_INTRINSICS_AVX512F=
7707 CXXFLAGS_INTRINSICS_F16C=
7708 CXXFLAGS_INTRINSICS_FMA=
7710 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7711     # GCC, Clang or Clang-cl (clang-cl + MSVC's -arch options don't work well together)
7712     flag_sse2=-msse2
7713     flag_ssse3=-mssse3
7714     flag_sse41=-msse4.1
7715     flag_sse42=-msse4.2
7716     flag_avx=-mavx
7717     flag_avx2=-mavx2
7718     flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
7719     flag_avx512f=-mavx512f
7720     flag_f16c=-mf16c
7721     flag_fma=-mfma
7722 else
7723     # With MSVC using -arch is in fact not necessary for being able
7724     # to use CPU intrinsics, code using AVX512F intrinsics will compile
7725     # even if compiled with -arch:AVX, the -arch option really only affects
7726     # instructions generated for C/C++ code.
7727     # So use the matching same (or lower) -arch options, but only in order
7728     # to generate the best matching instructions for the C++ code surrounding
7729     # the intrinsics.
7730     # SSE2 is the default for x86/x64, so no need to specify the option.
7731     flag_sse2=
7732     # No specific options for these, use the next lower.
7733     flag_ssse3="$flag_sse2"
7734     flag_sse41="$flag_sse2"
7735     flag_sse42="$flag_sse2"
7736     flag_avx=-arch:AVX
7737     flag_avx2=-arch:AVX2
7738     flag_avx512=-arch:AVX512
7739     # Using -arch:AVX512 would enable more than just AVX512F, so use only AVX2.
7740     flag_avx512f=-arch:AVX2
7741     # No MSVC options for these.
7742     flag_f16c="$flag_sse2"
7743     flag_fma="$flag_sse2"
7746 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
7747 AC_LANG_PUSH([C++])
7748 save_CXXFLAGS=$CXXFLAGS
7749 CXXFLAGS="$CXXFLAGS $flag_sse2"
7750 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7751     #include <emmintrin.h>
7752     int main () {
7753         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7754         c = _mm_xor_si128 (a, b);
7755         return 0;
7756     }
7757     ])],
7758     [can_compile_sse2=yes],
7759     [can_compile_sse2=no])
7760 AC_LANG_POP([C++])
7761 CXXFLAGS=$save_CXXFLAGS
7762 AC_MSG_RESULT([${can_compile_sse2}])
7763 if test "${can_compile_sse2}" = "yes" ; then
7764     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
7767 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
7768 AC_LANG_PUSH([C++])
7769 save_CXXFLAGS=$CXXFLAGS
7770 CXXFLAGS="$CXXFLAGS $flag_ssse3"
7771 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7772     #include <tmmintrin.h>
7773     int main () {
7774         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7775         c = _mm_maddubs_epi16 (a, b);
7776         return 0;
7777     }
7778     ])],
7779     [can_compile_ssse3=yes],
7780     [can_compile_ssse3=no])
7781 AC_LANG_POP([C++])
7782 CXXFLAGS=$save_CXXFLAGS
7783 AC_MSG_RESULT([${can_compile_ssse3}])
7784 if test "${can_compile_ssse3}" = "yes" ; then
7785     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
7788 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
7789 AC_LANG_PUSH([C++])
7790 save_CXXFLAGS=$CXXFLAGS
7791 CXXFLAGS="$CXXFLAGS $flag_sse41"
7792 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7793     #include <smmintrin.h>
7794     int main () {
7795         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7796         c = _mm_cmpeq_epi64 (a, b);
7797         return 0;
7798     }
7799     ])],
7800     [can_compile_sse41=yes],
7801     [can_compile_sse41=no])
7802 AC_LANG_POP([C++])
7803 CXXFLAGS=$save_CXXFLAGS
7804 AC_MSG_RESULT([${can_compile_sse41}])
7805 if test "${can_compile_sse41}" = "yes" ; then
7806     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
7809 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
7810 AC_LANG_PUSH([C++])
7811 save_CXXFLAGS=$CXXFLAGS
7812 CXXFLAGS="$CXXFLAGS $flag_sse42"
7813 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7814     #include <nmmintrin.h>
7815     int main () {
7816         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7817         c = _mm_cmpgt_epi64 (a, b);
7818         return 0;
7819     }
7820     ])],
7821     [can_compile_sse42=yes],
7822     [can_compile_sse42=no])
7823 AC_LANG_POP([C++])
7824 CXXFLAGS=$save_CXXFLAGS
7825 AC_MSG_RESULT([${can_compile_sse42}])
7826 if test "${can_compile_sse42}" = "yes" ; then
7827     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
7830 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
7831 AC_LANG_PUSH([C++])
7832 save_CXXFLAGS=$CXXFLAGS
7833 CXXFLAGS="$CXXFLAGS $flag_avx"
7834 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7835     #include <immintrin.h>
7836     int main () {
7837         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
7838         c = _mm256_xor_ps(a, b);
7839         return 0;
7840     }
7841     ])],
7842     [can_compile_avx=yes],
7843     [can_compile_avx=no])
7844 AC_LANG_POP([C++])
7845 CXXFLAGS=$save_CXXFLAGS
7846 AC_MSG_RESULT([${can_compile_avx}])
7847 if test "${can_compile_avx}" = "yes" ; then
7848     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
7851 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
7852 AC_LANG_PUSH([C++])
7853 save_CXXFLAGS=$CXXFLAGS
7854 CXXFLAGS="$CXXFLAGS $flag_avx2"
7855 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7856     #include <immintrin.h>
7857     int main () {
7858         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
7859         c = _mm256_maddubs_epi16(a, b);
7860         return 0;
7861     }
7862     ])],
7863     [can_compile_avx2=yes],
7864     [can_compile_avx2=no])
7865 AC_LANG_POP([C++])
7866 CXXFLAGS=$save_CXXFLAGS
7867 AC_MSG_RESULT([${can_compile_avx2}])
7868 if test "${can_compile_avx2}" = "yes" ; then
7869     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
7872 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
7873 AC_LANG_PUSH([C++])
7874 save_CXXFLAGS=$CXXFLAGS
7875 CXXFLAGS="$CXXFLAGS $flag_avx512"
7876 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7877     #include <immintrin.h>
7878     int main () {
7879         __m512i a = _mm512_loadu_si512(0);
7880         __m512d v1 = _mm512_load_pd(0);
7881         // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
7882         __m512d v2 = _mm512_abs_pd(v1);
7883         return 0;
7884     }
7885     ])],
7886     [can_compile_avx512=yes],
7887     [can_compile_avx512=no])
7888 AC_LANG_POP([C++])
7889 CXXFLAGS=$save_CXXFLAGS
7890 AC_MSG_RESULT([${can_compile_avx512}])
7891 if test "${can_compile_avx512}" = "yes" ; then
7892     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
7893     CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
7896 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
7897 AC_LANG_PUSH([C++])
7898 save_CXXFLAGS=$CXXFLAGS
7899 CXXFLAGS="$CXXFLAGS $flag_f16c"
7900 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7901     #include <immintrin.h>
7902     int main () {
7903         __m128i a = _mm_set1_epi32 (0);
7904         __m128 c;
7905         c = _mm_cvtph_ps(a);
7906         return 0;
7907     }
7908     ])],
7909     [can_compile_f16c=yes],
7910     [can_compile_f16c=no])
7911 AC_LANG_POP([C++])
7912 CXXFLAGS=$save_CXXFLAGS
7913 AC_MSG_RESULT([${can_compile_f16c}])
7914 if test "${can_compile_f16c}" = "yes" ; then
7915     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
7918 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
7919 AC_LANG_PUSH([C++])
7920 save_CXXFLAGS=$CXXFLAGS
7921 CXXFLAGS="$CXXFLAGS $flag_fma"
7922 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7923     #include <immintrin.h>
7924     int main () {
7925         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
7926         d = _mm256_fmadd_ps(a, b, c);
7927         return 0;
7928     }
7929     ])],
7930     [can_compile_fma=yes],
7931     [can_compile_fma=no])
7932 AC_LANG_POP([C++])
7933 CXXFLAGS=$save_CXXFLAGS
7934 AC_MSG_RESULT([${can_compile_fma}])
7935 if test "${can_compile_fma}" = "yes" ; then
7936     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
7939 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
7940 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
7941 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
7942 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
7943 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
7944 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
7945 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
7946 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512F])
7947 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
7948 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
7950 dnl ===================================================================
7951 dnl system stl sanity tests
7952 dnl ===================================================================
7953 if test "$_os" != "WINNT"; then
7955     AC_LANG_PUSH([C++])
7957     save_CPPFLAGS="$CPPFLAGS"
7958     if test -n "$MACOSX_SDK_PATH"; then
7959         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
7960     fi
7962     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
7963     # only.
7964     if test "$CPP_LIBRARY" = GLIBCXX; then
7965         dnl gcc#19664, gcc#22482, rhbz#162935
7966         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
7967         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
7968         AC_MSG_RESULT([$stlvisok])
7969         if test "$stlvisok" = "no"; then
7970             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
7971         fi
7972     fi
7974     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
7975     # when we don't make any dynamic libraries?
7976     if test "$DISABLE_DYNLOADING" = ""; then
7977         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
7978         cat > conftestlib1.cc <<_ACEOF
7979 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7980 struct S2: S1<int> { virtual ~S2(); };
7981 S2::~S2() {}
7982 _ACEOF
7983         cat > conftestlib2.cc <<_ACEOF
7984 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7985 struct S2: S1<int> { virtual ~S2(); };
7986 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
7987 _ACEOF
7988         gccvisinlineshiddenok=yes
7989         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
7990             gccvisinlineshiddenok=no
7991         else
7992             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
7993             dnl known to not work with -z defs (unsetting which makes the test
7994             dnl moot, though):
7995             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
7996             if test "$COM_IS_CLANG" = TRUE; then
7997                 for i in $CXX $CXXFLAGS; do
7998                     case $i in
7999                     -fsanitize=*)
8000                         my_linkflagsnoundefs=
8001                         break
8002                         ;;
8003                     esac
8004                 done
8005             fi
8006             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
8007                 gccvisinlineshiddenok=no
8008             fi
8009         fi
8011         rm -fr libconftest*
8012         AC_MSG_RESULT([$gccvisinlineshiddenok])
8013         if test "$gccvisinlineshiddenok" = "no"; then
8014             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
8015         fi
8016     fi
8018    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
8019     cat >visibility.cxx <<_ACEOF
8020 #pragma GCC visibility push(hidden)
8021 struct __attribute__ ((visibility ("default"))) TestStruct {
8022   static void Init();
8024 __attribute__ ((visibility ("default"))) void TestFunc() {
8025   TestStruct::Init();
8027 _ACEOF
8028     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
8029         gccvisbroken=yes
8030     else
8031         case "$host_cpu" in
8032         i?86|x86_64)
8033             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
8034                 gccvisbroken=no
8035             else
8036                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
8037                     gccvisbroken=no
8038                 else
8039                     gccvisbroken=yes
8040                 fi
8041             fi
8042             ;;
8043         *)
8044             gccvisbroken=no
8045             ;;
8046         esac
8047     fi
8048     rm -f visibility.s visibility.cxx
8050     AC_MSG_RESULT([$gccvisbroken])
8051     if test "$gccvisbroken" = "yes"; then
8052         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
8053     fi
8055     CPPFLAGS="$save_CPPFLAGS"
8057     AC_MSG_CHECKING([if CET endbranch is recognized])
8058 cat > endbr.s <<_ACEOF
8059 endbr32
8060 _ACEOF
8061     HAVE_ASM_END_BRANCH_INS_SUPPORT=
8062     if $CXX -c endbr.s -o endbr.o >/dev/null 2>&5; then
8063         AC_MSG_RESULT([yes])
8064         HAVE_ASM_END_BRANCH_INS_SUPPORT=TRUE
8065     else
8066         AC_MSG_RESULT([no])
8067     fi
8068     rm -f endbr.s endbr.o
8069     AC_SUBST(HAVE_ASM_END_BRANCH_INS_SUPPORT)
8071     AC_LANG_POP([C++])
8074 dnl ===================================================================
8075 dnl  Clang++ tests
8076 dnl ===================================================================
8078 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
8079 if test "$GCC" = "yes"; then
8080     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
8081     AC_LANG_PUSH([C++])
8082     save_CXXFLAGS=$CXXFLAGS
8083     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
8084     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
8085     CXXFLAGS=$save_CXXFLAGS
8086     AC_LANG_POP([C++])
8087     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
8088         AC_MSG_RESULT([yes])
8089     else
8090         AC_MSG_RESULT([no])
8091     fi
8093 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
8095 dnl ===================================================================
8096 dnl Compiler plugins
8097 dnl ===================================================================
8099 COMPILER_PLUGINS=
8100 # currently only Clang
8102 if test "$COM_IS_CLANG" != "TRUE"; then
8103     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
8104         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
8105         enable_compiler_plugins=no
8106     fi
8109 COMPILER_PLUGINS_COM_IS_CLANG=
8110 if test "$COM_IS_CLANG" = "TRUE"; then
8111     if test -n "$enable_compiler_plugins"; then
8112         compiler_plugins="$enable_compiler_plugins"
8113     elif test -n "$ENABLE_DBGUTIL"; then
8114         compiler_plugins=test
8115     else
8116         compiler_plugins=no
8117     fi
8118     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
8119         if test "$CLANGVER" -lt 50002; then
8120             if test "$compiler_plugins" = yes; then
8121                 AC_MSG_ERROR([Clang $CLANGVER is too old to build compiler plugins; need >= 5.0.2.])
8122             else
8123                 compiler_plugins=no
8124             fi
8125         fi
8126     fi
8127     if test "$compiler_plugins" != "no"; then
8128         dnl The prefix where Clang resides, override to where Clang resides if
8129         dnl using a source build:
8130         if test -z "$CLANGDIR"; then
8131             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
8132         fi
8133         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
8134         if test -z "$COMPILER_PLUGINS_CXX"; then
8135             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
8136         fi
8137         clangbindir=$CLANGDIR/bin
8138         if test "$build_os" = "cygwin"; then
8139             clangbindir=$(cygpath -u "$clangbindir")
8140         fi
8141         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
8142         if test -n "$LLVM_CONFIG"; then
8143             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
8144             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
8145             if test -z "$CLANGLIBDIR"; then
8146                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
8147             fi
8148             # Try if clang is built from source (in which case its includes are not together with llvm includes).
8149             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
8150             clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
8151             if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
8152                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
8153             fi
8154             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
8155             clangobjdir=$($LLVM_CONFIG --obj-root)
8156             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
8157                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
8158             fi
8159         fi
8160         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
8161         AC_LANG_PUSH([C++])
8162         save_CXX=$CXX
8163         save_CXXCPP=$CXXCPP
8164         save_CPPFLAGS=$CPPFLAGS
8165         save_CXXFLAGS=$CXXFLAGS
8166         save_LDFLAGS=$LDFLAGS
8167         save_LIBS=$LIBS
8168         CXX=$COMPILER_PLUGINS_CXX
8169         CXXCPP="$COMPILER_PLUGINS_CXX -E"
8170         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8171         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8172         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
8173             [COMPILER_PLUGINS=TRUE],
8174             [
8175             if test "$compiler_plugins" = "yes"; then
8176                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
8177             else
8178                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
8179                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
8180             fi
8181             ])
8182         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8183         dnl comment in compilerplugins/Makefile-clang.mk:
8184         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8185             LDFLAGS=""
8186             AC_MSG_CHECKING([for clang libraries to use])
8187             if test -z "$CLANGTOOLLIBS"; then
8188                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8189  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8190                 AC_LINK_IFELSE([
8191                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8192                         [[ clang::FullSourceLoc().dump(); ]])
8193                 ],[CLANGTOOLLIBS="$LIBS"],[])
8194             fi
8195             if test -z "$CLANGTOOLLIBS"; then
8196                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8197                 AC_LINK_IFELSE([
8198                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8199                         [[ clang::FullSourceLoc().dump(); ]])
8200                 ],[CLANGTOOLLIBS="$LIBS"],[])
8201             fi
8202             AC_MSG_RESULT([$CLANGTOOLLIBS])
8203             if test -z "$CLANGTOOLLIBS"; then
8204                 if test "$compiler_plugins" = "yes"; then
8205                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8206                 else
8207                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8208                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8209                 fi
8210                 COMPILER_PLUGINS=
8211             fi
8212             if test -n "$COMPILER_PLUGINS"; then
8213                 if test -z "$CLANGSYSINCLUDE"; then
8214                     if test -n "$LLVM_CONFIG"; then
8215                         # Path to the clang system headers (no idea if there's a better way to get it).
8216                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8217                     fi
8218                 fi
8219             fi
8220         fi
8221         CXX=$save_CXX
8222         CXXCPP=$save_CXXCPP
8223         CPPFLAGS=$save_CPPFLAGS
8224         CXXFLAGS=$save_CXXFLAGS
8225         LDFLAGS=$save_LDFLAGS
8226         LIBS="$save_LIBS"
8227         AC_LANG_POP([C++])
8229         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8230         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8231             #ifndef __clang__
8232             you lose
8233             #endif
8234             int foo=42;
8235             ]])],
8236             [AC_MSG_RESULT([yes])
8237              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8238             [AC_MSG_RESULT([no])])
8239         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8240     fi
8241 else
8242     if test "$enable_compiler_plugins" = "yes"; then
8243         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8244     fi
8246 COMPILER_PLUGINS_ANALYZER_PCH=
8247 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8248     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8250 AC_SUBST(COMPILER_PLUGINS)
8251 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8252 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8253 AC_SUBST(COMPILER_PLUGINS_CXX)
8254 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8255 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8256 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8257 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8258 AC_SUBST(CLANGDIR)
8259 AC_SUBST(CLANGLIBDIR)
8260 AC_SUBST(CLANGTOOLLIBS)
8261 AC_SUBST(CLANGSYSINCLUDE)
8263 # Plugin to help linker.
8264 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8265 # This makes --enable-lto build with clang work.
8266 AC_SUBST(LD_PLUGIN)
8268 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8269 AC_SUBST(HAVE_POSIX_FALLOCATE)
8271 JITC_PROCESSOR_TYPE=""
8272 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8273     # IBMs JDK needs this...
8274     JITC_PROCESSOR_TYPE=6
8275     export JITC_PROCESSOR_TYPE
8277 AC_SUBST([JITC_PROCESSOR_TYPE])
8279 # Misc Windows Stuff
8280 AC_ARG_WITH(ucrt-dir,
8281     AS_HELP_STRING([--with-ucrt-dir],
8282         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8283         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8284         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8285             Windows6.1-KB2999226-x64.msu
8286             Windows6.1-KB2999226-x86.msu
8287             Windows8.1-KB2999226-x64.msu
8288             Windows8.1-KB2999226-x86.msu
8289             Windows8-RT-KB2999226-x64.msu
8290             Windows8-RT-KB2999226-x86.msu
8291         A zip archive including those files is available from Microsoft site:
8292         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8295 UCRT_REDISTDIR="$with_ucrt_dir"
8296 if test $_os = "WINNT"; then
8297     find_msvc_x64_dlls
8298     for i in $PKGFORMAT; do
8299         if test "$i" = msi; then
8300             find_msms
8301             break
8302         fi
8303     done
8304     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8305     MSVC_DLLS="$msvcdlls"
8306     test -n "$msmdir" && MSM_PATH=`win_short_path_for_make "$msmdir"`
8307     # MSVC 15.3 changed it to VC141
8308     if echo "$msvcdllpath" | grep -q "VC143.CRT$"; then
8309         SCPDEFS="$SCPDEFS -DWITH_VC143_REDIST"
8310     elif echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8311         SCPDEFS="$SCPDEFS -DWITH_VC142_REDIST"
8312     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8313         SCPDEFS="$SCPDEFS -DWITH_VC141_REDIST"
8314     else
8315         SCPDEFS="$SCPDEFS -DWITH_VC${VCVER}_REDIST"
8316     fi
8318     if test "$UCRT_REDISTDIR" = "no"; then
8319         dnl explicitly disabled
8320         UCRT_REDISTDIR=""
8321     else
8322         if ! test -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x64.msu" -a \
8323                   -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x86.msu" -a \
8324                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x64.msu" -a \
8325                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x86.msu" -a \
8326                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x64.msu" -a \
8327                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x86.msu"; then
8328             UCRT_REDISTDIR=""
8329             if test -n "$PKGFORMAT"; then
8330                for i in $PKGFORMAT; do
8331                    case "$i" in
8332                    msi)
8333                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8334                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8335                        ;;
8336                    esac
8337                done
8338             fi
8339         fi
8340     fi
8343 AC_SUBST(UCRT_REDISTDIR)
8344 AC_SUBST(MSVC_DLL_PATH)
8345 AC_SUBST(MSVC_DLLS)
8346 AC_SUBST(MSM_PATH)
8349 dnl ===================================================================
8350 dnl Checks for Java
8351 dnl ===================================================================
8352 if test "$ENABLE_JAVA" != ""; then
8354     # Windows-specific tests
8355     if test "$build_os" = "cygwin"; then
8356         if test -z "$with_jdk_home"; then
8357             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8358             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8359             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/CurrentVersion"
8360             if test -n "$regvalue"; then
8361                 ver=$regvalue
8362                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver/JavaHome"
8363                 with_jdk_home=$regvalue
8364             fi
8365             howfound="found automatically"
8366         else
8367             with_jdk_home=`win_short_path_for_make "$with_jdk_home"`
8368             howfound="you passed"
8369         fi
8371         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8372             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])
8373         fi
8374     fi
8376     # 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.
8377     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8378     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8379         with_jdk_home=`/usr/libexec/java_home`
8380     fi
8382     JAVA_HOME=; export JAVA_HOME
8383     if test -z "$with_jdk_home"; then
8384         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8385     else
8386         _java_path="$with_jdk_home/bin/$with_java"
8387         dnl Check if there is a Java interpreter at all.
8388         if test -x "$_java_path"; then
8389             JAVAINTERPRETER=$_java_path
8390         else
8391             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8392         fi
8393     fi
8395     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8396     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8397     dnl loaded by java to run JunitTests:
8398     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8399         shortjdkhome=`cygpath -d "$with_jdk_home"`
8400         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
8401             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8402             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8403         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
8404             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8405             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8406         fi
8408         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8409             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8410         fi
8411         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8412     elif test "$cross_compiling" != "yes"; then
8413         case $CPUNAME in
8414             AARCH64|AXP|X86_64|HPPA|IA64|POWERPC64|S390X|SPARC64|GODSON64)
8415                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8416                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8417                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8418                 fi
8419                 ;;
8420             *) # assumption: everything else 32-bit
8421                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8422                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8423                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8424                 fi
8425                 ;;
8426         esac
8427     fi
8430 dnl ===================================================================
8431 dnl Checks for JDK.
8432 dnl ===================================================================
8434 # Whether all the complexity here actually is needed any more or not, no idea.
8436 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8437     _gij_longver=0
8438     AC_MSG_CHECKING([the installed JDK])
8439     if test -n "$JAVAINTERPRETER"; then
8440         dnl java -version sends output to stderr!
8441         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8442             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8443         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8444             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8445         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8446             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8447         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8448             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8449         else
8450             JDK=sun
8452             dnl Sun JDK specific tests
8453             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8454             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8456             if test "$_jdk_ver" -lt 10900; then
8457                 AC_MSG_ERROR([JDK is too old, you need at least 9 ($_jdk_ver < 10900)])
8458             fi
8459             if test "$_jdk_ver" -gt 10900; then
8460                 JAVA_CLASSPATH_NOT_SET=TRUE
8461             fi
8463             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8464             if test "$_os" = "WINNT"; then
8465                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8466             fi
8467             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8469             # set to limit VM usage for JunitTests
8470             JAVAIFLAGS=-Xmx64M
8471             # set to limit VM usage for javac
8472             JAVACFLAGS=-J-Xmx128M
8473         fi
8474     else
8475         AC_MSG_ERROR([Java not found. You need at least JDK 9])
8476     fi
8477 else
8478     if test -z "$ENABLE_JAVA"; then
8479         dnl Java disabled
8480         JAVA_HOME=
8481         export JAVA_HOME
8482     elif test "$cross_compiling" = "yes"; then
8483         # Just assume compatibility of build and host JDK
8484         JDK=$JDK_FOR_BUILD
8485         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8486     fi
8489 dnl ===================================================================
8490 dnl Checks for javac
8491 dnl ===================================================================
8492 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8493     javacompiler="javac"
8494     : ${JAVA_SOURCE_VER=8}
8495     : ${JAVA_TARGET_VER=8}
8496     if test -z "$with_jdk_home"; then
8497         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8498     else
8499         _javac_path="$with_jdk_home/bin/$javacompiler"
8500         dnl Check if there is a Java compiler at all.
8501         if test -x "$_javac_path"; then
8502             JAVACOMPILER=$_javac_path
8503         fi
8504     fi
8505     if test -z "$JAVACOMPILER"; then
8506         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8507     fi
8508     if test "$build_os" = "cygwin"; then
8509         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8510             JAVACOMPILER="${JAVACOMPILER}.exe"
8511         fi
8512         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8513     fi
8516 dnl ===================================================================
8517 dnl Checks for javadoc
8518 dnl ===================================================================
8519 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8520     if test -z "$with_jdk_home"; then
8521         AC_PATH_PROG(JAVADOC, javadoc)
8522     else
8523         _javadoc_path="$with_jdk_home/bin/javadoc"
8524         dnl Check if there is a javadoc at all.
8525         if test -x "$_javadoc_path"; then
8526             JAVADOC=$_javadoc_path
8527         else
8528             AC_PATH_PROG(JAVADOC, javadoc)
8529         fi
8530     fi
8531     if test -z "$JAVADOC"; then
8532         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8533     fi
8534     if test "$build_os" = "cygwin"; then
8535         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8536             JAVADOC="${JAVADOC}.exe"
8537         fi
8538         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8539     fi
8541     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8542     JAVADOCISGJDOC="yes"
8543     fi
8545 AC_SUBST(JAVADOC)
8546 AC_SUBST(JAVADOCISGJDOC)
8548 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8549     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8550     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8551         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8552            # try to recover first by looking whether we have an alternative
8553            # system as in Debian or newer SuSEs where following /usr/bin/javac
8554            # over /etc/alternatives/javac leads to the right bindir where we
8555            # just need to strip a bit away to get a valid JAVA_HOME
8556            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8557         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8558             # maybe only one level of symlink (e.g. on Mac)
8559             JAVA_HOME=$(readlink $JAVACOMPILER)
8560             if test "$(dirname $JAVA_HOME)" = "."; then
8561                 # we've got no path to trim back
8562                 JAVA_HOME=""
8563             fi
8564         else
8565             # else warn
8566             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8567             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8568             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8569             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8570         fi
8571         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8572         if test "$JAVA_HOME" != "/usr"; then
8573             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8574                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8575                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8576                 dnl Tiger already returns a JDK path...
8577                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8578             else
8579                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8580                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8581                 dnl that checks which version to run
8582                 if test -f "$JAVA_HOME"; then
8583                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8584                 fi
8585             fi
8586         fi
8587     fi
8588     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8590     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8591     if test -z "$JAVA_HOME"; then
8592         if test "x$with_jdk_home" = "x"; then
8593             cat > findhome.java <<_ACEOF
8594 [import java.io.File;
8596 class findhome
8598     public static void main(String args[])
8599     {
8600         String jrelocation = System.getProperty("java.home");
8601         File jre = new File(jrelocation);
8602         System.out.println(jre.getParent());
8603     }
8605 _ACEOF
8606             AC_MSG_CHECKING([if javac works])
8607             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8608             AC_TRY_EVAL(javac_cmd)
8609             if test $? = 0 -a -f ./findhome.class; then
8610                 AC_MSG_RESULT([javac works])
8611             else
8612                 echo "configure: javac test failed" >&5
8613                 cat findhome.java >&5
8614                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8615             fi
8616             AC_MSG_CHECKING([if gij knows its java.home])
8617             JAVA_HOME=`$JAVAINTERPRETER findhome`
8618             if test $? = 0 -a "$JAVA_HOME" != ""; then
8619                 AC_MSG_RESULT([$JAVA_HOME])
8620             else
8621                 echo "configure: java test failed" >&5
8622                 cat findhome.java >&5
8623                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8624             fi
8625             # clean-up after ourselves
8626             rm -f ./findhome.java ./findhome.class
8627         else
8628             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8629         fi
8630     fi
8632     # now check if $JAVA_HOME is really valid
8633     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8634         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8635             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8636             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8637             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
8638             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
8639             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
8640             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
8641         fi
8642     fi
8643     PathFormat "$JAVA_HOME"
8644     JAVA_HOME="$formatted_path"
8647 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
8648     "$_os" != Darwin
8649 then
8650     AC_MSG_CHECKING([for JAWT lib])
8651     if test "$_os" = WINNT; then
8652         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
8653         JAWTLIB=jawt.lib
8654     else
8655         case "$host_cpu" in
8656         arm*)
8657             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
8658             JAVA_ARCH=$my_java_arch
8659             ;;
8660         i*86)
8661             my_java_arch=i386
8662             ;;
8663         m68k)
8664             my_java_arch=m68k
8665             ;;
8666         powerpc)
8667             my_java_arch=ppc
8668             ;;
8669         powerpc64)
8670             my_java_arch=ppc64
8671             ;;
8672         powerpc64le)
8673             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
8674             JAVA_ARCH=$my_java_arch
8675             ;;
8676         sparc64)
8677             my_java_arch=sparcv9
8678             ;;
8679         x86_64)
8680             my_java_arch=amd64
8681             ;;
8682         *)
8683             my_java_arch=$host_cpu
8684             ;;
8685         esac
8686         # This is where JDK9 puts the library
8687         if test -e "$JAVA_HOME/lib/libjawt.so"; then
8688             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
8689         else
8690             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
8691         fi
8692         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
8693     fi
8694     AC_MSG_RESULT([$JAWTLIB])
8696 AC_SUBST(JAWTLIB)
8698 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
8699     case "$host_os" in
8701     aix*)
8702         JAVAINC="-I$JAVA_HOME/include"
8703         JAVAINC="$JAVAINC -I$JAVA_HOME/include/aix"
8704         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8705         ;;
8707     cygwin*|wsl*)
8708         JAVAINC="-I$JAVA_HOME/include/win32"
8709         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
8710         ;;
8712     darwin*|macos*)
8713         if test -d "$JAVA_HOME/include/darwin"; then
8714             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
8715         else
8716             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
8717         fi
8718         ;;
8720     dragonfly*)
8721         JAVAINC="-I$JAVA_HOME/include"
8722         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8723         ;;
8725     freebsd*)
8726         JAVAINC="-I$JAVA_HOME/include"
8727         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
8728         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
8729         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8730         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8731         ;;
8733     k*bsd*-gnu*)
8734         JAVAINC="-I$JAVA_HOME/include"
8735         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8736         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8737         ;;
8739     linux-gnu*)
8740         JAVAINC="-I$JAVA_HOME/include"
8741         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8742         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8743         ;;
8745     *netbsd*)
8746         JAVAINC="-I$JAVA_HOME/include"
8747         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
8748         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8749        ;;
8751     openbsd*)
8752         JAVAINC="-I$JAVA_HOME/include"
8753         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
8754         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8755         ;;
8757     solaris*)
8758         JAVAINC="-I$JAVA_HOME/include"
8759         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
8760         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8761         ;;
8762     esac
8764 SOLARINC="$SOLARINC $JAVAINC"
8766 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8767     JAVA_HOME_FOR_BUILD=$JAVA_HOME
8768     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
8769     JDK_FOR_BUILD=$JDK
8772 AC_SUBST(JAVACFLAGS)
8773 AC_SUBST(JAVACOMPILER)
8774 AC_SUBST(JAVAINTERPRETER)
8775 AC_SUBST(JAVAIFLAGS)
8776 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
8777 AC_SUBST(JAVA_CLASSPATH_NOT_SET)
8778 AC_SUBST(JAVA_HOME)
8779 AC_SUBST(JAVA_HOME_FOR_BUILD)
8780 AC_SUBST(JDK)
8781 AC_SUBST(JDK_FOR_BUILD)
8782 AC_SUBST(JAVA_SOURCE_VER)
8783 AC_SUBST(JAVA_TARGET_VER)
8786 dnl ===================================================================
8787 dnl Export file validation
8788 dnl ===================================================================
8789 AC_MSG_CHECKING([whether to enable export file validation])
8790 if test "$with_export_validation" != "no"; then
8791     if test -z "$ENABLE_JAVA"; then
8792         if test "$with_export_validation" = "yes"; then
8793             AC_MSG_ERROR([requested, but Java is disabled])
8794         else
8795             AC_MSG_RESULT([no, as Java is disabled])
8796         fi
8797     elif ! test -d "${SRC_ROOT}/schema"; then
8798         if test "$with_export_validation" = "yes"; then
8799             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
8800         else
8801             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
8802         fi
8803     else
8804         AC_MSG_RESULT([yes])
8805         AC_DEFINE(HAVE_EXPORT_VALIDATION)
8807         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
8808         if test -z "$ODFVALIDATOR"; then
8809             # remember to download the ODF toolkit with validator later
8810             AC_MSG_NOTICE([no odfvalidator found, will download it])
8811             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
8812             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
8814             # and fetch name of odfvalidator jar name from download.lst
8815             ODFVALIDATOR_JAR=`$SED -n -e "s/export *ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8816             AC_SUBST(ODFVALIDATOR_JAR)
8818             if test -z "$ODFVALIDATOR_JAR"; then
8819                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
8820             fi
8821         fi
8822         if test "$build_os" = "cygwin"; then
8823             # In case of Cygwin it will be executed from Windows,
8824             # so we need to run bash and absolute path to validator
8825             # so instead of "odfvalidator" it will be
8826             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8827             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
8828         else
8829             ODFVALIDATOR="sh $ODFVALIDATOR"
8830         fi
8831         AC_SUBST(ODFVALIDATOR)
8834         AC_PATH_PROGS(OFFICEOTRON, officeotron)
8835         if test -z "$OFFICEOTRON"; then
8836             # remember to download the officeotron with validator later
8837             AC_MSG_NOTICE([no officeotron found, will download it])
8838             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
8839             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
8841             # and fetch name of officeotron jar name from download.lst
8842             OFFICEOTRON_JAR=`$SED -n -e "s/export *OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8843             AC_SUBST(OFFICEOTRON_JAR)
8845             if test -z "$OFFICEOTRON_JAR"; then
8846                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
8847             fi
8848         else
8849             # check version of existing officeotron
8850             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
8851             if test 0"$OFFICEOTRON_VER" -lt 704; then
8852                 AC_MSG_ERROR([officeotron too old])
8853             fi
8854         fi
8855         if test "$build_os" = "cygwin"; then
8856             # In case of Cygwin it will be executed from Windows,
8857             # so we need to run bash and absolute path to validator
8858             # so instead of "odfvalidator" it will be
8859             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8860             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
8861         else
8862             OFFICEOTRON="sh $OFFICEOTRON"
8863         fi
8864     fi
8865     AC_SUBST(OFFICEOTRON)
8866 else
8867     AC_MSG_RESULT([no])
8870 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
8871 if test "$with_bffvalidator" != "no"; then
8872     AC_DEFINE(HAVE_BFFVALIDATOR)
8874     if test "$with_export_validation" = "no"; then
8875         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
8876     fi
8878     if test "$with_bffvalidator" = "yes"; then
8879         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
8880     else
8881         BFFVALIDATOR="$with_bffvalidator"
8882     fi
8884     if test "$build_os" = "cygwin"; then
8885         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
8886             AC_MSG_RESULT($BFFVALIDATOR)
8887         else
8888             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8889         fi
8890     elif test -n "$BFFVALIDATOR"; then
8891         # We are not in Cygwin but need to run Windows binary with wine
8892         AC_PATH_PROGS(WINE, wine)
8894         # so swap in a shell wrapper that converts paths transparently
8895         BFFVALIDATOR_EXE="$BFFVALIDATOR"
8896         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
8897         AC_SUBST(BFFVALIDATOR_EXE)
8898         AC_MSG_RESULT($BFFVALIDATOR)
8899     else
8900         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8901     fi
8902     AC_SUBST(BFFVALIDATOR)
8903 else
8904     AC_MSG_RESULT([no])
8907 dnl ===================================================================
8908 dnl Check for C preprocessor to use
8909 dnl ===================================================================
8910 AC_MSG_CHECKING([which C preprocessor to use in idlc])
8911 SYSTEM_UCPP_IS_GCC=
8912 if test -n "$with_idlc_cpp"; then
8913     AC_MSG_RESULT([$with_idlc_cpp])
8914     AC_PATH_PROG(SYSTEM_UCPP, $with_idlc_cpp)
8915     AC_MSG_CHECKING([if $with_idlc_cpp is GCC CPP])
8916     # ucpp will accept -v (to output version), warn about the others as unknown
8917     # and return 1 (due to -v)
8918     # gcc will accept -v (as verbose), --version (to output version) and -nostdinc
8919     # and return 0 (due to --version ) if all options are supported
8920     $SYSTEM_UCPP -v --version -nostdinc >/dev/null 2>/dev/null
8921     if test $? -eq 0;  then
8922         SYSTEM_UCPP_IS_GCC=TRUE
8923         AC_MSG_RESULT([yes])
8924     else
8925         AC_MSG_RESULT([no])
8926     fi
8927 else
8928     AC_MSG_RESULT([ucpp])
8929     AC_MSG_CHECKING([which ucpp to use])
8930     if test -n "$with_system_ucpp" -a "$with_system_ucpp" != "no"; then
8931         AC_MSG_RESULT([external])
8932         AC_PATH_PROG(SYSTEM_UCPP, ucpp)
8933     else
8934         AC_MSG_RESULT([internal])
8935         BUILD_TYPE="$BUILD_TYPE UCPP"
8936     fi
8938 AC_SUBST(SYSTEM_UCPP)
8939 AC_SUBST(SYSTEM_UCPP_IS_GCC)
8941 dnl ===================================================================
8942 dnl Check for epm (not needed for Windows)
8943 dnl ===================================================================
8944 AC_MSG_CHECKING([whether to enable EPM for packing])
8945 if test "$enable_epm" = "yes"; then
8946     AC_MSG_RESULT([yes])
8947     if test "$_os" != "WINNT"; then
8948         if test $_os = Darwin; then
8949             EPM=internal
8950         elif test -n "$with_epm"; then
8951             EPM=$with_epm
8952         else
8953             AC_PATH_PROG(EPM, epm, no)
8954         fi
8955         if test "$EPM" = "no" -o "$EPM" = "internal"; then
8956             AC_MSG_NOTICE([EPM will be built.])
8957             BUILD_TYPE="$BUILD_TYPE EPM"
8958             EPM=${WORKDIR}/UnpackedTarball/epm/epm
8959         else
8960             # Gentoo has some epm which is something different...
8961             AC_MSG_CHECKING([whether the found epm is the right epm])
8962             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
8963                 AC_MSG_RESULT([yes])
8964             else
8965                 AC_MSG_ERROR([no. Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8966             fi
8967             AC_MSG_CHECKING([epm version])
8968             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
8969             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
8970                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
8971                 AC_MSG_RESULT([OK, >= 3.7])
8972             else
8973                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
8974                 AC_MSG_ERROR([Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8975             fi
8976         fi
8977     fi
8979     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
8980         AC_MSG_CHECKING([for rpm])
8981         for a in "$RPM" rpmbuild rpm; do
8982             $a --usage >/dev/null 2> /dev/null
8983             if test $? -eq 0; then
8984                 RPM=$a
8985                 break
8986             else
8987                 $a --version >/dev/null 2> /dev/null
8988                 if test $? -eq 0; then
8989                     RPM=$a
8990                     break
8991                 fi
8992             fi
8993         done
8994         if test -z "$RPM"; then
8995             AC_MSG_ERROR([not found])
8996         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
8997             RPM_PATH=`which $RPM`
8998             AC_MSG_RESULT([$RPM_PATH])
8999             SCPDEFS="$SCPDEFS -DWITH_RPM"
9000         else
9001             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
9002         fi
9003     fi
9004     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
9005         AC_PATH_PROG(DPKG, dpkg, no)
9006         if test "$DPKG" = "no"; then
9007             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
9008         fi
9009     fi
9010     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
9011        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9012         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
9013             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
9014                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
9015                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
9016                     AC_MSG_RESULT([yes])
9017                 else
9018                     AC_MSG_RESULT([no])
9019                     if echo "$PKGFORMAT" | $GREP -q rpm; then
9020                         _pt="rpm"
9021                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
9022                         add_warning "the rpms will need to be installed with --nodeps"
9023                     else
9024                         _pt="pkg"
9025                     fi
9026                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
9027                     add_warning "the ${_pt}s will not be relocatable"
9028                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
9029                                  relocation will work, you need to patch your epm with the
9030                                  patch in epm/epm-3.7.patch or build with
9031                                  --with-epm=internal which will build a suitable epm])
9032                 fi
9033             fi
9034         fi
9035     fi
9036     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9037         AC_PATH_PROG(PKGMK, pkgmk, no)
9038         if test "$PKGMK" = "no"; then
9039             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
9040         fi
9041     fi
9042     AC_SUBST(RPM)
9043     AC_SUBST(DPKG)
9044     AC_SUBST(PKGMK)
9045 else
9046     for i in $PKGFORMAT; do
9047         case "$i" in
9048         aix | bsd | deb | pkg | rpm | native | portable)
9049             AC_MSG_ERROR(
9050                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
9051             ;;
9052         esac
9053     done
9054     AC_MSG_RESULT([no])
9055     EPM=NO
9057 AC_SUBST(EPM)
9059 ENABLE_LWP=
9060 if test "$enable_lotuswordpro" = "yes"; then
9061     ENABLE_LWP="TRUE"
9063 AC_SUBST(ENABLE_LWP)
9065 dnl ===================================================================
9066 dnl Check for building ODK
9067 dnl ===================================================================
9068 if test "$enable_odk" != yes; then
9069     unset DOXYGEN
9070 else
9071     if test "$with_doxygen" = no; then
9072         AC_MSG_CHECKING([for doxygen])
9073         unset DOXYGEN
9074         AC_MSG_RESULT([no])
9075     else
9076         if test "$with_doxygen" = yes; then
9077             AC_PATH_PROG([DOXYGEN], [doxygen])
9078             if test -z "$DOXYGEN"; then
9079                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
9080             fi
9081             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
9082                 if ! dot -V 2>/dev/null; then
9083                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
9084                 fi
9085             fi
9086         else
9087             AC_MSG_CHECKING([for doxygen])
9088             DOXYGEN=$with_doxygen
9089             AC_MSG_RESULT([$DOXYGEN])
9090         fi
9091         if test -n "$DOXYGEN"; then
9092             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
9093             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
9094             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
9095                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
9096             fi
9097         fi
9098     fi
9100 AC_SUBST([DOXYGEN])
9102 AC_MSG_CHECKING([whether to build the ODK])
9103 if test "$enable_odk" = yes; then
9104     AC_MSG_RESULT([yes])
9105     BUILD_TYPE="$BUILD_TYPE ODK"
9106 else
9107     AC_MSG_RESULT([no])
9110 dnl ===================================================================
9111 dnl Check for system zlib
9112 dnl ===================================================================
9113 if test "$with_system_zlib" = "auto"; then
9114     case "$_os" in
9115     WINNT)
9116         with_system_zlib="$with_system_libs"
9117         ;;
9118     *)
9119         if test "$enable_fuzzers" != "yes"; then
9120             with_system_zlib=yes
9121         else
9122             with_system_zlib=no
9123         fi
9124         ;;
9125     esac
9128 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
9129 dnl and has no pkg-config for it at least on some tinderboxes,
9130 dnl so leaving that out for now
9131 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
9132 AC_MSG_CHECKING([which zlib to use])
9133 if test "$with_system_zlib" = "yes"; then
9134     AC_MSG_RESULT([external])
9135     SYSTEM_ZLIB=TRUE
9136     AC_CHECK_HEADER(zlib.h, [],
9137         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
9138     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
9139         [AC_MSG_ERROR(zlib not found or functional)], [])
9140 else
9141     AC_MSG_RESULT([internal])
9142     SYSTEM_ZLIB=
9143     BUILD_TYPE="$BUILD_TYPE ZLIB"
9144     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
9145     if test "$COM" = "MSC"; then
9146         ZLIB_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/zlib.lib"
9147     else
9148         ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
9149     fi
9151 AC_SUBST(ZLIB_CFLAGS)
9152 AC_SUBST(ZLIB_LIBS)
9153 AC_SUBST(SYSTEM_ZLIB)
9155 dnl ===================================================================
9156 dnl Check for system jpeg
9157 dnl ===================================================================
9158 AC_MSG_CHECKING([which libjpeg to use])
9159 if test "$with_system_jpeg" = "yes"; then
9160     AC_MSG_RESULT([external])
9161     SYSTEM_LIBJPEG=TRUE
9162     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
9163         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
9164     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
9165         [AC_MSG_ERROR(jpeg library not found or functional)], [])
9166 else
9167     SYSTEM_LIBJPEG=
9168     AC_MSG_RESULT([internal, libjpeg-turbo])
9169     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
9171     case "$host_cpu" in
9172     x86_64 | amd64 | i*86 | x86 | ia32)
9173         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
9174         if test -z "$NASM" -a "$build_os" = "cygwin"; then
9175             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
9176                 NASM="$LODE_HOME/opt/bin/nasm"
9177             elif test -x "/opt/lo/bin/nasm"; then
9178                 NASM="/opt/lo/bin/nasm"
9179             fi
9180         fi
9182         if test -n "$NASM"; then
9183             AC_MSG_CHECKING([for object file format of host system])
9184             case "$host_os" in
9185               cygwin* | mingw* | pw32* | wsl*)
9186                 case "$host_cpu" in
9187                   x86_64)
9188                     objfmt='Win64-COFF'
9189                     ;;
9190                   *)
9191                     objfmt='Win32-COFF'
9192                     ;;
9193                 esac
9194               ;;
9195               msdosdjgpp* | go32*)
9196                 objfmt='COFF'
9197               ;;
9198               os2-emx*) # not tested
9199                 objfmt='MSOMF' # obj
9200               ;;
9201               linux*coff* | linux*oldld*)
9202                 objfmt='COFF' # ???
9203               ;;
9204               linux*aout*)
9205                 objfmt='a.out'
9206               ;;
9207               linux*)
9208                 case "$host_cpu" in
9209                   x86_64)
9210                     objfmt='ELF64'
9211                     ;;
9212                   *)
9213                     objfmt='ELF'
9214                     ;;
9215                 esac
9216               ;;
9217               kfreebsd* | freebsd* | netbsd* | openbsd*)
9218                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9219                   objfmt='BSD-a.out'
9220                 else
9221                   case "$host_cpu" in
9222                     x86_64 | amd64)
9223                       objfmt='ELF64'
9224                       ;;
9225                     *)
9226                       objfmt='ELF'
9227                       ;;
9228                   esac
9229                 fi
9230               ;;
9231               solaris* | sunos* | sysv* | sco*)
9232                 case "$host_cpu" in
9233                   x86_64)
9234                     objfmt='ELF64'
9235                     ;;
9236                   *)
9237                     objfmt='ELF'
9238                     ;;
9239                 esac
9240               ;;
9241               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9242                 case "$host_cpu" in
9243                   x86_64)
9244                     objfmt='Mach-O64'
9245                     ;;
9246                   *)
9247                     objfmt='Mach-O'
9248                     ;;
9249                 esac
9250               ;;
9251               *)
9252                 objfmt='ELF ?'
9253               ;;
9254             esac
9256             AC_MSG_RESULT([$objfmt])
9257             if test "$objfmt" = 'ELF ?'; then
9258               objfmt='ELF'
9259               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9260             fi
9262             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9263             case "$objfmt" in
9264               MSOMF)      NAFLAGS='-fobj -DOBJ32 -DPIC';;
9265               Win32-COFF) NAFLAGS='-fwin32 -DWIN32 -DPIC';;
9266               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__ -DPIC';;
9267               COFF)       NAFLAGS='-fcoff -DCOFF -DPIC';;
9268               a.out)      NAFLAGS='-faout -DAOUT -DPIC';;
9269               BSD-a.out)  NAFLAGS='-faoutb -DAOUT -DPIC';;
9270               ELF)        NAFLAGS='-felf -DELF -DPIC';;
9271               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__ -DPIC';;
9272               RDF)        NAFLAGS='-frdf -DRDF -DPIC';;
9273               Mach-O)     NAFLAGS='-fmacho -DMACHO -DPIC';;
9274               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__ -DPIC';;
9275             esac
9276             AC_MSG_RESULT([$NAFLAGS])
9278             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9279             cat > conftest.asm << EOF
9280             [%line __oline__ "configure"
9281                     section .text
9282                     global  _main,main
9283             _main:
9284             main:   xor     eax,eax
9285                     ret
9286             ]
9288             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9289             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9290               AC_MSG_RESULT(yes)
9291             else
9292               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9293               cat conftest.asm >&AS_MESSAGE_LOG_FD
9294               rm -rf conftest*
9295               AC_MSG_RESULT(no)
9296               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9297               NASM=""
9298             fi
9300         fi
9302         if test -z "$NASM"; then
9303 cat << _EOS
9304 ****************************************************************************
9305 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9306 To get one please:
9308 _EOS
9309             if test "$build_os" = "cygwin"; then
9310 cat << _EOS
9311 install a pre-compiled binary for Win32
9313 mkdir -p /opt/lo/bin
9314 cd /opt/lo/bin
9315 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9316 chmod +x nasm
9318 or get and install one from http://www.nasm.us/
9320 Then re-run autogen.sh
9322 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9323 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`which nasm\` finds it.
9325 _EOS
9326             else
9327 cat << _EOS
9328 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md
9330 _EOS
9331             fi
9332             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9333             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9334         fi
9335       ;;
9336     esac
9339 AC_SUBST(NASM)
9340 AC_SUBST(NAFLAGS)
9341 AC_SUBST(LIBJPEG_CFLAGS)
9342 AC_SUBST(LIBJPEG_LIBS)
9343 AC_SUBST(SYSTEM_LIBJPEG)
9345 dnl ===================================================================
9346 dnl Check for system clucene
9347 dnl ===================================================================
9348 dnl we should rather be using
9349 dnl libo_CHECK_SYSTEM_MODULE([clucence],[CLUCENE],[liblucence-core]) here
9350 dnl but the contribs-lib check seems tricky
9351 if test "$enable_xmlhelp" = yes -o "$enable_extension_integration" = yes; then
9352 AC_MSG_CHECKING([which clucene to use])
9353 if test "$with_system_clucene" = "yes"; then
9354     AC_MSG_RESULT([external])
9355     SYSTEM_CLUCENE=TRUE
9356     PKG_CHECK_MODULES(CLUCENE, libclucene-core)
9357     CLUCENE_CFLAGS=[$(printf '%s' "$CLUCENE_CFLAGS" | sed -e 's@-I[^ ]*/CLucene/ext@@' -e "s/-I/${ISYSTEM?}/g")]
9358     FilterLibs "${CLUCENE_LIBS}"
9359     CLUCENE_LIBS="${filteredlibs}"
9360     AC_LANG_PUSH([C++])
9361     save_CXXFLAGS=$CXXFLAGS
9362     save_CPPFLAGS=$CPPFLAGS
9363     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9364     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9365     dnl http://sourceforge.net/tracker/index.php?func=detail&aid=3392466&group_id=80013&atid=558446
9366     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9367     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9368                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9369     CXXFLAGS=$save_CXXFLAGS
9370     CPPFLAGS=$save_CPPFLAGS
9371     AC_LANG_POP([C++])
9373     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9374 else
9375     AC_MSG_RESULT([internal])
9376     SYSTEM_CLUCENE=
9377     BUILD_TYPE="$BUILD_TYPE CLUCENE"
9380 AC_SUBST(SYSTEM_CLUCENE)
9381 AC_SUBST(CLUCENE_CFLAGS)
9382 AC_SUBST(CLUCENE_LIBS)
9384 dnl ===================================================================
9385 dnl Check for system expat
9386 dnl ===================================================================
9387 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9389 dnl ===================================================================
9390 dnl Check for system xmlsec
9391 dnl ===================================================================
9392 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.28])
9394 AC_MSG_CHECKING([whether to enable Embedded OpenType support])
9395 if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_eot" = "yes"; then
9396     ENABLE_EOT="TRUE"
9397     AC_DEFINE([ENABLE_EOT])
9398     AC_MSG_RESULT([yes])
9400     libo_CHECK_SYSTEM_MODULE([libeot],[LIBEOT],[libeot >= 0.01])
9401 else
9402     ENABLE_EOT=
9403     AC_MSG_RESULT([no])
9405 AC_SUBST([ENABLE_EOT])
9407 dnl ===================================================================
9408 dnl Check for DLP libs
9409 dnl ===================================================================
9410 AS_IF([test "$COM" = "MSC"],
9411       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9412       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9414 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1],["-I${WORKDIR}/UnpackedTarball/librevenge/inc"],["-L${librevenge_libdir} -lrevenge-0.0"])
9416 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9418 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9420 AS_IF([test "$COM" = "MSC"],
9421       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9422       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9424 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10],["-I${WORKDIR}/UnpackedTarball/libwpd/inc"],["-L${libwpd_libdir} -lwpd-0.10"])
9426 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9428 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9429 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.12])
9431 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9433 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9435 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9437 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.1])
9438 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.21])
9440 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9441 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10])
9443 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9445 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9446 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9448 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9450 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9452 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9454 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9456 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9457 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9459 dnl ===================================================================
9460 dnl Check for system lcms2
9461 dnl ===================================================================
9462 if test "$with_system_lcms2" != "yes"; then
9463     SYSTEM_LCMS2=
9465 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2],["-I${WORKDIR}/UnpackedTarball/lcms2/include"],["-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"])
9466 if test "$GCC" = "yes"; then
9467     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9469 if test "$COM" = "MSC"; then # override the above
9470     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9473 dnl ===================================================================
9474 dnl Check for system cppunit
9475 dnl ===================================================================
9476 if test "$_os" != "Android" ; then
9477     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9480 dnl ===================================================================
9481 dnl Check whether freetype is available
9482 dnl ===================================================================
9483 if test "$using_freetype_fontconfig" = yes; then
9484     AC_MSG_CHECKING([which freetype to use])
9486 if test "$using_freetype_fontconfig" = yes -a "$test_system_freetype" != no; then
9487     AC_MSG_RESULT([external])
9488     # FreeType has 3 different kinds of versions
9489     # * release, like 2.4.10
9490     # * libtool, like 13.0.7 (this what pkg-config returns)
9491     # * soname
9492     # FreeType's docs/VERSION.DLL provides a table mapping between the three
9493     #
9494     # 9.9.3 is 2.2.0
9495     # When the minimal version is at least 2.8.1, remove Skia's check down below.
9496     PKG_CHECK_MODULES(FREETYPE, freetype2 >= 9.9.3)
9497     FREETYPE_CFLAGS=$(printf '%s' "$FREETYPE_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9498     FilterLibs "${FREETYPE_LIBS}"
9499     FREETYPE_LIBS="${filteredlibs}"
9500     SYSTEM_FREETYPE=TRUE
9501 elif test "$using_freetype_fontconfig" = yes; then
9502     AC_MSG_RESULT([internal])
9503     FREETYPE_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"
9504     if test "x$ac_config_site_64bit_host" = xYES; then
9505         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9506     else
9507         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9508     fi
9509     BUILD_TYPE="$BUILD_TYPE FREETYPE"
9511 AC_SUBST(FREETYPE_CFLAGS)
9512 AC_SUBST(FREETYPE_LIBS)
9513 AC_SUBST([SYSTEM_FREETYPE])
9515 # ===================================================================
9516 # Check for system libxslt
9517 # to prevent incompatibilities between internal libxml2 and external libxslt,
9518 # or vice versa, use with_system_libxml here
9519 # ===================================================================
9520 if test "$with_system_libxml" = "auto"; then
9521     case "$_os" in
9522     WINNT|iOS|Android)
9523         with_system_libxml="$with_system_libs"
9524         ;;
9525     Emscripten)
9526         with_system_libxml=no
9527         ;;
9528     *)
9529         if test "$enable_fuzzers" != "yes"; then
9530             with_system_libxml=yes
9531         else
9532             with_system_libxml=no
9533         fi
9534         ;;
9535     esac
9538 AC_MSG_CHECKING([which libxslt to use])
9539 if test "$with_system_libxml" = "yes"; then
9540     AC_MSG_RESULT([external])
9541     SYSTEM_LIBXSLT=TRUE
9542     if test "$_os" = "Darwin"; then
9543         dnl make sure to use SDK path
9544         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9545         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9546         dnl omit -L/usr/lib
9547         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9548         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9549     else
9550         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9551         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9552         FilterLibs "${LIBXSLT_LIBS}"
9553         LIBXSLT_LIBS="${filteredlibs}"
9554         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9555         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9556         FilterLibs "${LIBEXSLT_LIBS}"
9557         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9558     fi
9560     dnl Check for xsltproc
9561     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9562     if test "$XSLTPROC" = "no"; then
9563         AC_MSG_ERROR([xsltproc is required])
9564     fi
9565 else
9566     AC_MSG_RESULT([internal])
9567     SYSTEM_LIBXSLT=
9568     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9570 AC_SUBST(SYSTEM_LIBXSLT)
9571 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9572     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9574 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9576 AC_SUBST(LIBEXSLT_CFLAGS)
9577 AC_SUBST(LIBEXSLT_LIBS)
9578 AC_SUBST(LIBXSLT_CFLAGS)
9579 AC_SUBST(LIBXSLT_LIBS)
9580 AC_SUBST(XSLTPROC)
9582 # ===================================================================
9583 # Check for system libxml
9584 # ===================================================================
9585 AC_MSG_CHECKING([which libxml to use])
9586 if test "$with_system_libxml" = "yes"; then
9587     AC_MSG_RESULT([external])
9588     SYSTEM_LIBXML=TRUE
9589     if test "$_os" = "Darwin"; then
9590         dnl make sure to use SDK path
9591         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9592         dnl omit -L/usr/lib
9593         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9594     elif test $_os = iOS; then
9595         dnl make sure to use SDK path
9596         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9597         LIBXML_CFLAGS="-I$usr/include/libxml2"
9598         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9599     else
9600         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9601         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9602         FilterLibs "${LIBXML_LIBS}"
9603         LIBXML_LIBS="${filteredlibs}"
9604     fi
9606     dnl Check for xmllint
9607     AC_PATH_PROG(XMLLINT, xmllint, no)
9608     if test "$XMLLINT" = "no"; then
9609         AC_MSG_ERROR([xmllint is required])
9610     fi
9611 else
9612     AC_MSG_RESULT([internal])
9613     SYSTEM_LIBXML=
9614     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9615     if test "$COM" = "MSC"; then
9616         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9617     fi
9618     if test "$COM" = "MSC"; then
9619         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9620     else
9621         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9622         if test "$DISABLE_DYNLOADING" = TRUE; then
9623             LIBXML_LIBS="$LIBXML_LIBS -lm"
9624         fi
9625     fi
9626     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9628 AC_SUBST(SYSTEM_LIBXML)
9629 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9630     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9632 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9633 AC_SUBST(LIBXML_CFLAGS)
9634 AC_SUBST(LIBXML_LIBS)
9635 AC_SUBST(XMLLINT)
9637 # =====================================================================
9638 # Checking for a Python interpreter with version >= 3.3.
9639 # Optionally user can pass an option to configure, i. e.
9640 # ./configure PYTHON=/usr/bin/python
9641 # =====================================================================
9642 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9643     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9644     # unless PYTHON is defined as above which allows 'system'
9645     enable_python=internal
9647 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9648     if test -n "$PYTHON"; then
9649         PYTHON_FOR_BUILD=$PYTHON
9650     else
9651         # This allows a lack of system python with no error, we use internal one in that case.
9652         AM_PATH_PYTHON([3.3],, [:])
9653         # Clean PYTHON_VERSION checked below if cross-compiling
9654         PYTHON_VERSION=""
9655         if test "$PYTHON" != ":"; then
9656             PYTHON_FOR_BUILD=$PYTHON
9657         fi
9658     fi
9660 AC_SUBST(PYTHON_FOR_BUILD)
9662 # Checks for Python to use for Pyuno
9663 AC_MSG_CHECKING([which Python to use for Pyuno])
9664 case "$enable_python" in
9665 no|disable)
9666     if test -z $PYTHON_FOR_BUILD; then
9667         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9668         # requirement from the choice whether to include Python stuff in the installer, but why
9669         # bother?
9670         if test "$cross_compiling" = yes; then
9671             enable_python=system
9672         else
9673             AC_MSG_ERROR([Python is required at build time.])
9674         fi
9675     fi
9676     enable_python=no
9677     AC_MSG_RESULT([none])
9678     ;;
9679 ""|yes|auto)
9680     if test "$DISABLE_SCRIPTING" = TRUE -a -n "$PYTHON_FOR_BUILD"; then
9681         AC_MSG_RESULT([no, overridden by --disable-scripting])
9682         enable_python=no
9683     elif test $build_os = cygwin; then
9684         dnl When building on Windows we don't attempt to use any installed
9685         dnl "system"  Python.
9686         AC_MSG_RESULT([fully internal])
9687         enable_python=internal
9688     elif test "$cross_compiling" = yes; then
9689         AC_MSG_RESULT([system])
9690         enable_python=system
9691     else
9692         # Unset variables set by the above AM_PATH_PYTHON so that
9693         # we actually do check anew.
9694         AC_MSG_RESULT([])
9695         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
9696         AM_PATH_PYTHON([3.3],, [:])
9697         AC_MSG_CHECKING([which Python to use for Pyuno])
9698         if test "$PYTHON" = ":"; then
9699             if test -z "$PYTHON_FOR_BUILD"; then
9700                 AC_MSG_RESULT([fully internal])
9701             else
9702                 AC_MSG_RESULT([internal])
9703             fi
9704             enable_python=internal
9705         else
9706             AC_MSG_RESULT([system])
9707             enable_python=system
9708         fi
9709     fi
9710     ;;
9711 internal)
9712     AC_MSG_RESULT([internal])
9713     ;;
9714 fully-internal)
9715     AC_MSG_RESULT([fully internal])
9716     enable_python=internal
9717     ;;
9718 system)
9719     AC_MSG_RESULT([system])
9720     if test "$_os" = Darwin -a -z "$PYTHON"; then
9721         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
9722     fi
9723     ;;
9725     AC_MSG_ERROR([Incorrect --enable-python option])
9726     ;;
9727 esac
9729 if test $enable_python != no; then
9730     BUILD_TYPE="$BUILD_TYPE PYUNO"
9733 if test $enable_python = system; then
9734     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
9735         # Fallback: Accept these in the environment, or as set above
9736         # for MacOSX.
9737         :
9738     elif test "$cross_compiling" != yes; then
9739         # Unset variables set by the above AM_PATH_PYTHON so that
9740         # we actually do check anew.
9741         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
9742         # This causes an error if no python command is found
9743         AM_PATH_PYTHON([3.3])
9744         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
9745         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
9746         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
9747         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
9748         if test -z "$PKG_CONFIG"; then
9749             PYTHON_CFLAGS="-I$python_include"
9750             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9751         elif $PKG_CONFIG --exists python-$python_version-embed; then
9752             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
9753             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
9754         elif $PKG_CONFIG --exists python-$python_version; then
9755             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
9756             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
9757         else
9758             PYTHON_CFLAGS="-I$python_include"
9759             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9760         fi
9761         FilterLibs "${PYTHON_LIBS}"
9762         PYTHON_LIBS="${filteredlibs}"
9763     else
9764         dnl How to find out the cross-compilation Python installation path?
9765         AC_MSG_CHECKING([for python version])
9766         AS_IF([test -n "$PYTHON_VERSION"],
9767               [AC_MSG_RESULT([$PYTHON_VERSION])],
9768               [AC_MSG_RESULT([not found])
9769                AC_MSG_ERROR([no usable python found])])
9770         test -n "$PYTHON_CFLAGS" && break
9771     fi
9773     dnl Check if the headers really work
9774     save_CPPFLAGS="$CPPFLAGS"
9775     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
9776     AC_CHECK_HEADER(Python.h)
9777     CPPFLAGS="$save_CPPFLAGS"
9779     # let the PYTHON_FOR_BUILD match the same python installation that
9780     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
9781     # better for PythonTests.
9782     PYTHON_FOR_BUILD=$PYTHON
9785 if test "$with_lxml" != no; then
9786     if test -z "$PYTHON_FOR_BUILD"; then
9787         case $build_os in
9788             cygwin)
9789                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
9790                 ;;
9791             *)
9792                 if test "$cross_compiling" != yes ; then
9793                     BUILD_TYPE="$BUILD_TYPE LXML"
9794                 fi
9795                 ;;
9796         esac
9797     else
9798         AC_MSG_CHECKING([for python lxml])
9799         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
9800             AC_MSG_RESULT([yes])
9801         else
9802             case $build_os in
9803                 cygwin)
9804                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
9805                     ;;
9806                 *)
9807                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
9808                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
9809                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
9810                         else
9811                             BUILD_TYPE="$BUILD_TYPE LXML"
9812                             AC_MSG_RESULT([no, using internal lxml])
9813                         fi
9814                     else
9815                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
9816                     fi
9817                     ;;
9818             esac
9819         fi
9820     fi
9823 dnl By now enable_python should be "system", "internal" or "no"
9824 case $enable_python in
9825 system)
9826     SYSTEM_PYTHON=TRUE
9828     if test "x$ac_cv_header_Python_h" != "xyes"; then
9829        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
9830     fi
9832     AC_LANG_PUSH(C)
9833     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
9834     AC_MSG_CHECKING([for correct python library version])
9835        AC_RUN_IFELSE([AC_LANG_SOURCE([[
9836 #include <Python.h>
9838 int main(int argc, char **argv) {
9839    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
9840    else return 1;
9842        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
9843     AC_LANG_POP(C)
9845     dnl FIXME Check if the Python library can be linked with, too?
9846     ;;
9848 internal)
9849     SYSTEM_PYTHON=
9850     PYTHON_VERSION_MAJOR=3
9851     PYTHON_VERSION_MINOR=8
9852     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.16
9853     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
9854         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
9855     fi
9856     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
9857     BUILD_TYPE="$BUILD_TYPE PYTHON"
9858     if test "$OS" = LINUX -o "$OS" = WNT ; then
9859         BUILD_TYPE="$BUILD_TYPE LIBFFI"
9860     fi
9861     # Embedded Python dies without Home set
9862     if test "$HOME" = ""; then
9863         export HOME=""
9864     fi
9865     ;;
9867     DISABLE_PYTHON=TRUE
9868     SYSTEM_PYTHON=
9869     ;;
9871     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
9872     ;;
9873 esac
9875 AC_SUBST(DISABLE_PYTHON)
9876 AC_SUBST(SYSTEM_PYTHON)
9877 AC_SUBST(PYTHON_CFLAGS)
9878 AC_SUBST(PYTHON_LIBS)
9879 AC_SUBST(PYTHON_VERSION)
9880 AC_SUBST(PYTHON_VERSION_MAJOR)
9881 AC_SUBST(PYTHON_VERSION_MINOR)
9883 AC_MSG_CHECKING([whether to build LibreLogo])
9884 case "$enable_python" in
9885 no|disable)
9886     AC_MSG_RESULT([no; Python disabled])
9887     ;;
9889     if test "${enable_librelogo}" = "no"; then
9890         AC_MSG_RESULT([no])
9891     else
9892         AC_MSG_RESULT([yes])
9893         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
9894         AC_DEFINE([ENABLE_LIBRELOGO],1)
9895     fi
9896     ;;
9897 esac
9898 AC_SUBST(ENABLE_LIBRELOGO)
9900 ENABLE_MARIADBC=
9901 MARIADBC_MAJOR=1
9902 MARIADBC_MINOR=0
9903 MARIADBC_MICRO=2
9904 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
9905 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
9906     ENABLE_MARIADBC=TRUE
9907     AC_MSG_RESULT([yes])
9908     BUILD_TYPE="$BUILD_TYPE MARIADBC"
9909 else
9910     AC_MSG_RESULT([no])
9912 AC_SUBST(ENABLE_MARIADBC)
9913 AC_SUBST(MARIADBC_MAJOR)
9914 AC_SUBST(MARIADBC_MINOR)
9915 AC_SUBST(MARIADBC_MICRO)
9917 if test "$ENABLE_MARIADBC" = "TRUE"; then
9918     dnl ===================================================================
9919     dnl Check for system MariaDB
9920     dnl ===================================================================
9921     AC_MSG_CHECKING([which MariaDB to use])
9922     if test "$with_system_mariadb" = "yes"; then
9923         AC_MSG_RESULT([external])
9924         SYSTEM_MARIADB_CONNECTOR_C=TRUE
9925         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
9926         if test -z "$MARIADBCONFIG"; then
9927             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
9928             if test -z "$MARIADBCONFIG"; then
9929                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
9930                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
9931             fi
9932         fi
9933         AC_MSG_CHECKING([MariaDB version])
9934         MARIADB_VERSION=`$MARIADBCONFIG --version`
9935         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
9936         if test "$MARIADB_MAJOR" -ge "5"; then
9937             AC_MSG_RESULT([OK])
9938         else
9939             AC_MSG_ERROR([too old, use 5.0.x or later])
9940         fi
9941         AC_MSG_CHECKING([for MariaDB Client library])
9942         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
9943         if test "$COM_IS_CLANG" = TRUE; then
9944             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
9945         fi
9946         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
9947         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
9948         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
9949         dnl linux32:
9950         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
9951             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
9952             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
9953                 | sed -e 's|/lib64/|/lib/|')
9954         fi
9955         FilterLibs "${MARIADB_LIBS}"
9956         MARIADB_LIBS="${filteredlibs}"
9957         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
9958         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
9959         if test "$enable_bundle_mariadb" = "yes"; then
9960             AC_MSG_RESULT([yes])
9961             BUNDLE_MARIADB_CONNECTOR_C=TRUE
9962             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
9964 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
9966 /g' | grep -E '(mysqlclient|mariadb)')
9967             if test "$_os" = "Darwin"; then
9968                 LIBMARIADB=${LIBMARIADB}.dylib
9969             elif test "$_os" = "WINNT"; then
9970                 LIBMARIADB=${LIBMARIADB}.dll
9971             else
9972                 LIBMARIADB=${LIBMARIADB}.so
9973             fi
9974             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
9975             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
9976             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
9977                 AC_MSG_RESULT([found.])
9978                 PathFormat "$LIBMARIADB_PATH"
9979                 LIBMARIADB_PATH="$formatted_path"
9980             else
9981                 AC_MSG_ERROR([not found.])
9982             fi
9983         else
9984             AC_MSG_RESULT([no])
9985             BUNDLE_MARIADB_CONNECTOR_C=
9986         fi
9987     else
9988         AC_MSG_RESULT([internal])
9989         SYSTEM_MARIADB_CONNECTOR_C=
9990         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
9991         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
9992         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
9993     fi
9995     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
9996     AC_SUBST(MARIADB_CFLAGS)
9997     AC_SUBST(MARIADB_LIBS)
9998     AC_SUBST(LIBMARIADB)
9999     AC_SUBST(LIBMARIADB_PATH)
10000     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
10003 dnl ===================================================================
10004 dnl Check for system hsqldb
10005 dnl ===================================================================
10006 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
10007     HSQLDB_USE_JDBC_4_1=
10008     AC_MSG_CHECKING([which hsqldb to use])
10009     if test "$with_system_hsqldb" = "yes"; then
10010         AC_MSG_RESULT([external])
10011         SYSTEM_HSQLDB=TRUE
10012         if test -z $HSQLDB_JAR; then
10013             HSQLDB_JAR=/usr/share/java/hsqldb.jar
10014         fi
10015         if ! test -f $HSQLDB_JAR; then
10016                AC_MSG_ERROR(hsqldb.jar not found.)
10017         fi
10018         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
10019         export HSQLDB_JAR
10020         if $PERL -e \
10021            'use Archive::Zip;
10022             my $file = "$ENV{'HSQLDB_JAR'}";
10023             my $zip = Archive::Zip->new( $file );
10024             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
10025             if ( $mf =~ m/Specification-Version: 1.8.*/ )
10026             {
10027                 push @l, split(/\n/, $mf);
10028                 foreach my $line (@l)
10029                 {
10030                     if ($line =~ m/Specification-Version:/)
10031                     {
10032                         ($t, $version) = split (/:/,$line);
10033                         $version =~ s/^\s//;
10034                         ($a, $b, $c, $d) = split (/\./,$version);
10035                         if ($c == "0" && $d > "8")
10036                         {
10037                             exit 0;
10038                         }
10039                         else
10040                         {
10041                             exit 1;
10042                         }
10043                     }
10044                 }
10045             }
10046             else
10047             {
10048                 exit 1;
10049             }'; then
10050             AC_MSG_RESULT([yes])
10051         else
10052             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
10053         fi
10054     else
10055         AC_MSG_RESULT([internal])
10056         SYSTEM_HSQLDB=
10057         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10058         NEED_ANT=TRUE
10059         AC_MSG_CHECKING([whether hsqldb should be built with JDBC 4.1])
10060         javanumver=`$JAVAINTERPRETER -version 2>&1 | $AWK -v num=true -f $SRC_ROOT/solenv/bin/getcompver.awk`
10061         if expr "$javanumver" '>=' 000100060000 > /dev/null; then
10062             AC_MSG_RESULT([yes])
10063             HSQLDB_USE_JDBC_4_1=TRUE
10064         else
10065             AC_MSG_RESULT([no])
10066         fi
10067     fi
10068 else
10069     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
10070         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10071     fi
10073 AC_SUBST(SYSTEM_HSQLDB)
10074 AC_SUBST(HSQLDB_JAR)
10075 AC_SUBST([HSQLDB_USE_JDBC_4_1])
10077 dnl ===================================================================
10078 dnl Check for PostgreSQL stuff
10079 dnl ===================================================================
10080 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
10081 if test "x$enable_postgresql_sdbc" != "xno"; then
10082     AC_MSG_RESULT([yes])
10083     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
10085     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
10086         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
10087     fi
10088     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
10089         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
10090     fi
10092     postgres_interface=""
10093     if test "$with_system_postgresql" = "yes"; then
10094         postgres_interface="external PostgreSQL"
10095         SYSTEM_POSTGRESQL=TRUE
10096         if test "$_os" = Darwin; then
10097             supp_path=''
10098             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
10099                 pg_supp_path="$P_SEP$d$pg_supp_path"
10100             done
10101         fi
10102         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
10103         if test -n "$PGCONFIG"; then
10104             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
10105             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
10106         else
10107             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
10108               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
10109               POSTGRESQL_LIB=$POSTGRESQL_LIBS
10110             ],[
10111               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
10112             ])
10113         fi
10114         FilterLibs "${POSTGRESQL_LIB}"
10115         POSTGRESQL_LIB="${filteredlibs}"
10116     else
10117         # if/when anything else than PostgreSQL uses Kerberos,
10118         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
10119         WITH_KRB5=
10120         WITH_GSSAPI=
10121         case "$_os" in
10122         Darwin)
10123             # macOS has system MIT Kerberos 5 since 10.4
10124             if test "$with_krb5" != "no"; then
10125                 WITH_KRB5=TRUE
10126                 save_LIBS=$LIBS
10127                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
10128                 # that the libraries where these functions are located on macOS will change, is it?
10129                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10130                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10131                 KRB5_LIBS=$LIBS
10132                 LIBS=$save_LIBS
10133                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10134                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10135                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10136                 LIBS=$save_LIBS
10137             fi
10138             if test "$with_gssapi" != "no"; then
10139                 WITH_GSSAPI=TRUE
10140                 save_LIBS=$LIBS
10141                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10142                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10143                 GSSAPI_LIBS=$LIBS
10144                 LIBS=$save_LIBS
10145             fi
10146             ;;
10147         WINNT)
10148             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
10149                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
10150             fi
10151             ;;
10152         Linux|GNU|*BSD|DragonFly)
10153             if test "$with_krb5" != "no"; then
10154                 WITH_KRB5=TRUE
10155                 save_LIBS=$LIBS
10156                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10157                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10158                 KRB5_LIBS=$LIBS
10159                 LIBS=$save_LIBS
10160                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10161                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10162                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10163                 LIBS=$save_LIBS
10164             fi
10165             if test "$with_gssapi" != "no"; then
10166                 WITH_GSSAPI=TRUE
10167                 save_LIBS=$LIBS
10168                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10169                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10170                 GSSAPI_LIBS=$LIBS
10171                 LIBS=$save_LIBS
10172             fi
10173             ;;
10174         *)
10175             if test "$with_krb5" = "yes"; then
10176                 WITH_KRB5=TRUE
10177                 save_LIBS=$LIBS
10178                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10179                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10180                 KRB5_LIBS=$LIBS
10181                 LIBS=$save_LIBS
10182                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10183                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10184                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10185                 LIBS=$save_LIBS
10186             fi
10187             if test "$with_gssapi" = "yes"; then
10188                 WITH_GSSAPI=TRUE
10189                 save_LIBS=$LIBS
10190                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10191                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10192                 LIBS=$save_LIBS
10193                 GSSAPI_LIBS=$LIBS
10194             fi
10195         esac
10197         if test -n "$with_libpq_path"; then
10198             SYSTEM_POSTGRESQL=TRUE
10199             postgres_interface="external libpq"
10200             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
10201             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
10202         else
10203             SYSTEM_POSTGRESQL=
10204             postgres_interface="internal"
10205             POSTGRESQL_LIB=""
10206             POSTGRESQL_INC="%OVERRIDE_ME%"
10207             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10208         fi
10209     fi
10211     AC_MSG_CHECKING([PostgreSQL C interface])
10212     AC_MSG_RESULT([$postgres_interface])
10214     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10215         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10216         save_CFLAGS=$CFLAGS
10217         save_CPPFLAGS=$CPPFLAGS
10218         save_LIBS=$LIBS
10219         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10220         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10221         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10222         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10223             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10224         CFLAGS=$save_CFLAGS
10225         CPPFLAGS=$save_CPPFLAGS
10226         LIBS=$save_LIBS
10227     fi
10228     BUILD_POSTGRESQL_SDBC=TRUE
10229 else
10230     AC_MSG_RESULT([no])
10232 AC_SUBST(WITH_KRB5)
10233 AC_SUBST(WITH_GSSAPI)
10234 AC_SUBST(GSSAPI_LIBS)
10235 AC_SUBST(KRB5_LIBS)
10236 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10237 AC_SUBST(SYSTEM_POSTGRESQL)
10238 AC_SUBST(POSTGRESQL_INC)
10239 AC_SUBST(POSTGRESQL_LIB)
10241 dnl ===================================================================
10242 dnl Check for Firebird stuff
10243 dnl ===================================================================
10244 ENABLE_FIREBIRD_SDBC=
10245 if test "$enable_firebird_sdbc" = "yes" ; then
10246     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10248     dnl ===================================================================
10249     dnl Check for system Firebird
10250     dnl ===================================================================
10251     AC_MSG_CHECKING([which Firebird to use])
10252     if test "$with_system_firebird" = "yes"; then
10253         AC_MSG_RESULT([external])
10254         SYSTEM_FIREBIRD=TRUE
10255         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10256         if test -z "$FIREBIRDCONFIG"; then
10257             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10258             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10259                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10260             ])
10261             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10262         else
10263             AC_MSG_NOTICE([fb_config found])
10264             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10265             AC_MSG_CHECKING([for Firebird Client library])
10266             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10267             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10268             FilterLibs "${FIREBIRD_LIBS}"
10269             FIREBIRD_LIBS="${filteredlibs}"
10270         fi
10271         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10272         AC_MSG_CHECKING([Firebird version])
10273         if test -n "${FIREBIRD_VERSION}"; then
10274             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10275             if test "$FIREBIRD_MAJOR" -ge "3"; then
10276                 AC_MSG_RESULT([OK])
10277             else
10278                 AC_MSG_ERROR([Ensure firebird >= 3 is installed])
10279             fi
10280         else
10281             save_CFLAGS="${CFLAGS}"
10282             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10283             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10284 #if defined(FB_API_VER) && FB_API_VER == 30
10285 int fb_api_is_30(void) { return 0; }
10286 #else
10287 #error "Wrong Firebird API version"
10288 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10289             CFLAGS="$save_CFLAGS"
10290         fi
10291         ENABLE_FIREBIRD_SDBC=TRUE
10292         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10293     elif test "$enable_database_connectivity" = no; then
10294         AC_MSG_RESULT([none])
10295     elif test "$cross_compiling" = "yes"; then
10296         AC_MSG_RESULT([none])
10297     else
10298         dnl Embedded Firebird has version 3.0
10299         dnl We need libatomic_ops for any non X86/X64 system
10300         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10301             dnl ===================================================================
10302             dnl Check for system libatomic_ops
10303             dnl ===================================================================
10304             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10305             if test "$with_system_libatomic_ops" = "yes"; then
10306                 SYSTEM_LIBATOMIC_OPS=TRUE
10307                 AC_CHECK_HEADERS(atomic_ops.h, [],
10308                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10309             else
10310                 SYSTEM_LIBATOMIC_OPS=
10311                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10312                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10313                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10314             fi
10315         fi
10317         AC_MSG_RESULT([internal])
10318         SYSTEM_FIREBIRD=
10319         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10320         FIREBIRD_LIBS="-lfbclient"
10322         if test "$with_system_libtommath" = "yes"; then
10323             SYSTEM_LIBTOMMATH=TRUE
10324             dnl check for tommath presence
10325             save_LIBS=$LIBS
10326             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10327             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10328             LIBS=$save_LIBS
10329         else
10330             SYSTEM_LIBTOMMATH=
10331             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10332             LIBTOMMATH_LIBS="-ltommath"
10333             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10334         fi
10336         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10337         ENABLE_FIREBIRD_SDBC=TRUE
10338         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10339     fi
10341 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10342 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10343 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10344 AC_SUBST(LIBATOMIC_OPS_LIBS)
10345 AC_SUBST(SYSTEM_FIREBIRD)
10346 AC_SUBST(FIREBIRD_CFLAGS)
10347 AC_SUBST(FIREBIRD_LIBS)
10348 AC_SUBST(SYSTEM_LIBTOMMATH)
10349 AC_SUBST(LIBTOMMATH_CFLAGS)
10350 AC_SUBST(LIBTOMMATH_LIBS)
10352 dnl ===================================================================
10353 dnl Check for system curl
10354 dnl ===================================================================
10355 AC_MSG_CHECKING([which libcurl to use])
10356 if test "$with_system_curl" = "auto"; then
10357     with_system_curl="$with_system_libs"
10360 if test "$enable_curl" = "yes" -a "$with_system_curl" = "yes"; then
10361     AC_MSG_RESULT([external])
10362     SYSTEM_CURL=TRUE
10364     PKG_CHECK_MODULES(CURL, libcurl >= 7.68.0)
10366     ENABLE_CURL=TRUE
10367 elif test "$enable_curl" = "no"; then
10368     AC_MSG_RESULT([none])
10369 else
10370     AC_MSG_RESULT([internal])
10371     SYSTEM_CURL=
10372     BUILD_TYPE="$BUILD_TYPE CURL"
10373     ENABLE_CURL=TRUE
10375 AC_SUBST(SYSTEM_CURL)
10376 AC_SUBST(CURL_CFLAGS)
10377 AC_SUBST(CURL_LIBS)
10378 AC_SUBST(ENABLE_CURL)
10380 dnl ===================================================================
10381 dnl Check for system boost
10382 dnl ===================================================================
10383 AC_MSG_CHECKING([which boost to use])
10384 if test "$with_system_boost" = "yes"; then
10385     AC_MSG_RESULT([external])
10386     SYSTEM_BOOST=TRUE
10387     AX_BOOST_BASE([1.66],,[AC_MSG_ERROR([no suitable Boost found])])
10388     AX_BOOST_DATE_TIME
10389     AX_BOOST_FILESYSTEM
10390     AX_BOOST_IOSTREAMS
10391     AX_BOOST_LOCALE
10392     AC_LANG_PUSH([C++])
10393     save_CXXFLAGS=$CXXFLAGS
10394     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10395     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10396        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10397     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10398        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10399     CXXFLAGS=$save_CXXFLAGS
10400     AC_LANG_POP([C++])
10401     # this is in m4/ax_boost_base.m4
10402     FilterLibs "${BOOST_LDFLAGS}"
10403     BOOST_LDFLAGS="${filteredlibs}"
10404 else
10405     AC_MSG_RESULT([internal])
10406     BUILD_TYPE="$BUILD_TYPE BOOST"
10407     SYSTEM_BOOST=
10408     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10409         # use warning-suppressing wrapper headers
10410         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10411     else
10412         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10413     fi
10415 AC_SUBST(SYSTEM_BOOST)
10417 dnl ===================================================================
10418 dnl Check for system mdds
10419 dnl ===================================================================
10420 libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-2.0 >= 2.0.0], ["-I${WORKDIR}/UnpackedTarball/mdds/include"])
10422 dnl ===================================================================
10423 dnl Check for system glm
10424 dnl ===================================================================
10425 AC_MSG_CHECKING([which glm to use])
10426 if test "$with_system_glm" = "yes"; then
10427     AC_MSG_RESULT([external])
10428     SYSTEM_GLM=TRUE
10429     AC_LANG_PUSH([C++])
10430     AC_CHECK_HEADER([glm/glm.hpp], [],
10431        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10432     AC_LANG_POP([C++])
10433 else
10434     AC_MSG_RESULT([internal])
10435     BUILD_TYPE="$BUILD_TYPE GLM"
10436     SYSTEM_GLM=
10437     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10439 AC_SUBST([GLM_CFLAGS])
10440 AC_SUBST([SYSTEM_GLM])
10442 dnl ===================================================================
10443 dnl Check for system odbc
10444 dnl ===================================================================
10445 AC_MSG_CHECKING([which odbc headers to use])
10446 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
10447     AC_MSG_RESULT([external])
10448     SYSTEM_ODBC_HEADERS=TRUE
10450     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10451         save_CPPFLAGS=$CPPFLAGS
10452         find_winsdk
10453         PathFormat "$winsdktest"
10454         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"
10455         AC_CHECK_HEADER(sqlext.h, [],
10456             [AC_MSG_ERROR(odbc not found. install odbc)],
10457             [#include <windows.h>])
10458         CPPFLAGS=$save_CPPFLAGS
10459     else
10460         AC_CHECK_HEADER(sqlext.h, [],
10461             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10462     fi
10463 elif test "$enable_database_connectivity" = no; then
10464     AC_MSG_RESULT([none])
10465 else
10466     AC_MSG_RESULT([internal])
10467     SYSTEM_ODBC_HEADERS=
10469 AC_SUBST(SYSTEM_ODBC_HEADERS)
10471 dnl ===================================================================
10472 dnl Check for system NSS
10473 dnl ===================================================================
10474 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10475     libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8],,,[
10476         case "$_os" in
10477             Linux)
10478                 with_system_nss=yes
10479             ;;
10480             *)
10481                 with_system_nss=no
10482             ;;
10483         esac])
10484     AC_DEFINE(HAVE_FEATURE_NSS)
10485     ENABLE_NSS=TRUE
10486 elif test $_os != iOS ; then
10487     with_tls=openssl
10489 AC_SUBST(ENABLE_NSS)
10491 dnl ===================================================================
10492 dnl Enable LDAP support
10493 dnl ===================================================================
10495 if test "$test_openldap" = yes; then
10496     AC_MSG_CHECKING([whether to enable LDAP support])
10497     if test "$enable_ldap" = yes -a \( "$ENABLE_NSS" = TRUE -o "$with_system_openldap" = yes \); then
10498         AC_MSG_RESULT([yes])
10499         ENABLE_LDAP=TRUE
10500     else
10501         if test "$enable_ldap" != "yes"; then
10502             AC_MSG_RESULT([no])
10503         else
10504             AC_MSG_RESULT([no (needs NSS or system openldap)])
10505         fi
10506     fi
10508 dnl ===================================================================
10509 dnl Check for system openldap
10510 dnl ===================================================================
10512     if test "$ENABLE_LDAP" = TRUE; then
10513         AC_MSG_CHECKING([which openldap library to use])
10514         if test "$with_system_openldap" = yes; then
10515             AC_MSG_RESULT([external])
10516             SYSTEM_OPENLDAP=TRUE
10517             AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10518             AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10519             AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10520         else
10521             AC_MSG_RESULT([internal])
10522             BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10523         fi
10524     fi
10527 AC_SUBST(ENABLE_LDAP)
10528 AC_SUBST(SYSTEM_OPENLDAP)
10530 dnl ===================================================================
10531 dnl Check for TLS/SSL and cryptographic implementation to use
10532 dnl ===================================================================
10533 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10534 if test -n "$with_tls"; then
10535     case $with_tls in
10536     openssl)
10537         AC_DEFINE(USE_TLS_OPENSSL)
10538         TLS=OPENSSL
10539         AC_MSG_RESULT([$TLS])
10541         if test "$enable_openssl" != "yes"; then
10542             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10543         fi
10545         # warn that OpenSSL has been selected but not all TLS code has this option
10546         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS])
10547         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS"
10548         ;;
10549     nss)
10550         AC_DEFINE(USE_TLS_NSS)
10551         TLS=NSS
10552         AC_MSG_RESULT([$TLS])
10553         ;;
10554     no)
10555         AC_MSG_RESULT([none])
10556         AC_MSG_WARN([Skipping TLS/SSL])
10557         ;;
10558     *)
10559         AC_MSG_RESULT([])
10560         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10561 openssl - OpenSSL
10562 nss - Mozilla's Network Security Services (NSS)
10563     ])
10564         ;;
10565     esac
10566 else
10567     # default to using NSS, it results in smaller oox lib
10568     AC_DEFINE(USE_TLS_NSS)
10569     TLS=NSS
10570     AC_MSG_RESULT([$TLS])
10572 AC_SUBST(TLS)
10574 dnl ===================================================================
10575 dnl Check for system sane
10576 dnl ===================================================================
10577 AC_MSG_CHECKING([which sane header to use])
10578 if test "$with_system_sane" = "yes"; then
10579     AC_MSG_RESULT([external])
10580     AC_CHECK_HEADER(sane/sane.h, [],
10581       [AC_MSG_ERROR(sane not found. install sane)], [])
10582 else
10583     AC_MSG_RESULT([internal])
10584     BUILD_TYPE="$BUILD_TYPE SANE"
10587 dnl ===================================================================
10588 dnl Check for system icu
10589 dnl ===================================================================
10590 SYSTEM_GENBRK=
10591 SYSTEM_GENCCODE=
10592 SYSTEM_GENCMN=
10594 ICU_MAJOR=70
10595 ICU_MINOR=1
10596 ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10597 ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10598 ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10599 AC_MSG_CHECKING([which icu to use])
10600 if test "$with_system_icu" = "yes"; then
10601     AC_MSG_RESULT([external])
10602     SYSTEM_ICU=TRUE
10603     AC_LANG_PUSH([C++])
10604     AC_MSG_CHECKING([for unicode/rbbi.h])
10605     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10606     AC_LANG_POP([C++])
10608     if test "$cross_compiling" != "yes"; then
10609         PKG_CHECK_MODULES(ICU, icu-i18n >= 4.6)
10610         ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10611         ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10612         ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10613     fi
10615     if test "$cross_compiling" = "yes" -a \( "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" \); then
10616         ICU_VERSION_FOR_BUILD=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10617         ICU_MAJOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f1`
10618         ICU_MINOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f2`
10619         AC_MSG_CHECKING([if MinGW and system versions of ICU are compatible])
10620         if test "$ICU_MAJOR" -eq "$ICU_MAJOR_FOR_BUILD" -a "$ICU_MINOR" -eq "$ICU_MINOR_FOR_BUILD"; then
10621             AC_MSG_RESULT([yes])
10622         else
10623             AC_MSG_RESULT([no])
10624             if test "$with_system_icu_for_build" != "force"; then
10625                 AC_MSG_ERROR([System ICU is not version-compatible with MinGW ICU.
10626 You can use --with-system-icu-for-build=force to use it anyway.])
10627             fi
10628         fi
10629     fi
10631     if test "$cross_compiling" != "yes" -o "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force"; then
10632         # using the system icu tools can lead to version confusion, use the
10633         # ones from the build environment when cross-compiling
10634         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10635         if test -z "$SYSTEM_GENBRK"; then
10636             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10637         fi
10638         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10639         if test -z "$SYSTEM_GENCCODE"; then
10640             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10641         fi
10642         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10643         if test -z "$SYSTEM_GENCMN"; then
10644             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10645         fi
10646         if test "$ICU_MAJOR" -ge "49"; then
10647             ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10648             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10649             ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10650         else
10651             ICU_RECLASSIFIED_PREPEND_SET_EMPTY=
10652             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER=
10653             ICU_RECLASSIFIED_HEBREW_LETTER=
10654         fi
10655     fi
10657     if test "$cross_compiling" = "yes"; then
10658         if test "$ICU_MAJOR" -ge "50"; then
10659             AC_MSG_RESULT([Ignore ICU_MINOR as obviously the libraries don't include the minor version in their names any more])
10660             ICU_MINOR=""
10661         fi
10662     fi
10663 else
10664     AC_MSG_RESULT([internal])
10665     SYSTEM_ICU=
10666     BUILD_TYPE="$BUILD_TYPE ICU"
10667     # surprisingly set these only for "internal" (to be used by various other
10668     # external libs): the system icu-config is quite unhelpful and spits out
10669     # dozens of weird flags and also default path -I/usr/include
10670     ICU_CFLAGS="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10671     ICU_LIBS="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10673 if test "$ICU_MAJOR" -ge "59"; then
10674     # As of ICU 59 it defaults to typedef char16_t UChar; which is available
10675     # with -std=c++11 but not all external libraries can be built with that,
10676     # for those use a bit-compatible typedef uint16_t UChar; see
10677     # icu/source/common/unicode/umachine.h
10678     ICU_UCHAR_TYPE="-DUCHAR_TYPE=uint16_t"
10679 else
10680     ICU_UCHAR_TYPE=""
10682 AC_SUBST(SYSTEM_ICU)
10683 AC_SUBST(SYSTEM_GENBRK)
10684 AC_SUBST(SYSTEM_GENCCODE)
10685 AC_SUBST(SYSTEM_GENCMN)
10686 AC_SUBST(ICU_MAJOR)
10687 AC_SUBST(ICU_MINOR)
10688 AC_SUBST(ICU_RECLASSIFIED_PREPEND_SET_EMPTY)
10689 AC_SUBST(ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER)
10690 AC_SUBST(ICU_RECLASSIFIED_HEBREW_LETTER)
10691 AC_SUBST(ICU_CFLAGS)
10692 AC_SUBST(ICU_LIBS)
10693 AC_SUBST(ICU_UCHAR_TYPE)
10695 dnl ==================================================================
10696 dnl Breakpad
10697 dnl ==================================================================
10698 DEFAULT_CRASHDUMP_VALUE="true"
10699 AC_MSG_CHECKING([whether to enable breakpad])
10700 if test "$enable_breakpad" != yes; then
10701     AC_MSG_RESULT([no])
10702 else
10703     AC_MSG_RESULT([yes])
10704     ENABLE_BREAKPAD="TRUE"
10705     AC_DEFINE(ENABLE_BREAKPAD)
10706     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
10707     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
10709     AC_MSG_CHECKING([for disable crash dump])
10710     if test "$enable_crashdump" = no; then
10711         DEFAULT_CRASHDUMP_VALUE="false"
10712         AC_MSG_RESULT([yes])
10713     else
10714        AC_MSG_RESULT([no])
10715     fi
10717     AC_MSG_CHECKING([for crashreport config])
10718     if test "$with_symbol_config" = "no"; then
10719         BREAKPAD_SYMBOL_CONFIG="invalid"
10720         AC_MSG_RESULT([no])
10721     else
10722         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
10723         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
10724         AC_MSG_RESULT([yes])
10725     fi
10726     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
10728 AC_SUBST(ENABLE_BREAKPAD)
10729 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
10731 dnl ==================================================================
10732 dnl libfuzzer
10733 dnl ==================================================================
10734 AC_MSG_CHECKING([whether to enable fuzzers])
10735 if test "$enable_fuzzers" != yes; then
10736     AC_MSG_RESULT([no])
10737 else
10738     if test -z $LIB_FUZZING_ENGINE; then
10739       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
10740     fi
10741     AC_MSG_RESULT([yes])
10742     ENABLE_FUZZERS="TRUE"
10743     AC_DEFINE([ENABLE_FUZZERS],1)
10744     BUILD_TYPE="$BUILD_TYPE FUZZERS"
10746 AC_SUBST(LIB_FUZZING_ENGINE)
10747 AC_SUBST(ENABLE_FUZZERS)
10749 dnl ===================================================================
10750 dnl Orcus
10751 dnl ===================================================================
10752 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.17 >= 0.17.2])
10753 if test "$with_system_orcus" != "yes"; then
10754     if test "$SYSTEM_BOOST" = "TRUE"; then
10755         dnl Link with Boost.System
10756         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
10757         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
10758         dnl in documentation has no effect.
10759         AX_BOOST_SYSTEM
10760     fi
10762 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
10763 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
10764 AC_SUBST([BOOST_SYSTEM_LIB])
10765 AC_SUBST(SYSTEM_LIBORCUS)
10767 dnl ===================================================================
10768 dnl HarfBuzz
10769 dnl ===================================================================
10770 libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3],
10771                          ["-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"],
10772                          ["-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"])
10774 libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 0.9.42],
10775                          ["-I${WORKDIR}/UnpackedTarball/harfbuzz/src"],
10776                          ["-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"])
10778 if test "$COM" = "MSC"; then # override the above
10779     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
10780     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
10783 if test "$with_system_harfbuzz" = "yes"; then
10784     if test "$with_system_graphite" = "no"; then
10785         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
10786     fi
10787     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
10788     save_LIBS="$LIBS"
10789     save_CFLAGS="$CFLAGS"
10790     LIBS="$LIBS $HARFBUZZ_LIBS"
10791     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
10792     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
10793     LIBS="$save_LIBS"
10794     CFLAGS="$save_CFLAGS"
10795 else
10796     if test "$with_system_graphite" = "yes"; then
10797         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
10798     fi
10801 if test "$USING_X11" = TRUE; then
10802     AC_PATH_X
10803     AC_PATH_XTRA
10804     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
10806     if test -z "$x_includes"; then
10807         x_includes="default_x_includes"
10808     fi
10809     if test -z "$x_libraries"; then
10810         x_libraries="default_x_libraries"
10811     fi
10812     CFLAGS="$CFLAGS $X_CFLAGS"
10813     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
10814     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
10815 else
10816     x_includes="no_x_includes"
10817     x_libraries="no_x_libraries"
10820 if test "$USING_X11" = TRUE; then
10821     dnl ===================================================================
10822     dnl Check for extension headers
10823     dnl ===================================================================
10824     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
10825      [#include <X11/extensions/shape.h>])
10827     # vcl needs ICE and SM
10828     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
10829     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
10830         [AC_MSG_ERROR(ICE library not found)])
10831     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
10832     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
10833         [AC_MSG_ERROR(SM library not found)])
10836 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
10837     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
10838     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
10841 dnl ===================================================================
10842 dnl Check for system Xrender
10843 dnl ===================================================================
10844 AC_MSG_CHECKING([whether to use Xrender])
10845 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
10846     AC_MSG_RESULT([yes])
10847     PKG_CHECK_MODULES(XRENDER, xrender)
10848     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10849     FilterLibs "${XRENDER_LIBS}"
10850     XRENDER_LIBS="${filteredlibs}"
10851     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
10852       [AC_MSG_ERROR(libXrender not found or functional)], [])
10853     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
10854       [AC_MSG_ERROR(Xrender not found. install X)], [])
10855 else
10856     AC_MSG_RESULT([no])
10858 AC_SUBST(XRENDER_CFLAGS)
10859 AC_SUBST(XRENDER_LIBS)
10861 dnl ===================================================================
10862 dnl Check for XRandr
10863 dnl ===================================================================
10864 AC_MSG_CHECKING([whether to enable RandR support])
10865 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
10866     AC_MSG_RESULT([yes])
10867     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
10868     if test "$ENABLE_RANDR" != "TRUE"; then
10869         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
10870                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
10871         XRANDR_CFLAGS=" "
10872         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
10873           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
10874         XRANDR_LIBS="-lXrandr "
10875         ENABLE_RANDR="TRUE"
10876     fi
10877     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10878     FilterLibs "${XRANDR_LIBS}"
10879     XRANDR_LIBS="${filteredlibs}"
10880 else
10881     ENABLE_RANDR=""
10882     AC_MSG_RESULT([no])
10884 AC_SUBST(XRANDR_CFLAGS)
10885 AC_SUBST(XRANDR_LIBS)
10886 AC_SUBST(ENABLE_RANDR)
10888 if test "$test_webdav" = yes; then
10889     if test -z "$with_webdav"; then
10890         WITH_WEBDAV=curl
10891     else
10892         WITH_WEBDAV="$with_webdav"
10893     fi
10896 AC_MSG_CHECKING([for webdav library])
10897 case "$WITH_WEBDAV" in
10898 curl)
10899     AC_MSG_RESULT([curl])
10900     # curl is already mandatory (almost) and checked elsewhere
10901     if test "$enable_curl" = "no"; then
10902         AC_MSG_ERROR(["--with-webdav=curl conflicts with --disable-curl"])
10903     fi
10904     ;;
10905 serf)
10906     AC_MSG_RESULT([serf])
10907     # Check for system apr-util
10908     libo_CHECK_SYSTEM_MODULE([apr],[APR],[apr-util-1],
10909                              ["-I${WORKDIR}/UnpackedTarball/apr/include -I${WORKDIR}/UnpackedTarball/apr_util/include"],
10910                              ["-L${WORKDIR}/UnpackedTarball/apr/.libs -lapr-1 -L${WORKDIR}/UnpackedTarball/apr_util/.libs -laprutil-1"])
10911     if test "$COM" = "MSC"; then
10912         APR_LIB_DIR="LibR"
10913         test -n "${MSVC_USE_DEBUG_RUNTIME}" && APR_LIB_DIR="LibD"
10914         APR_LIBS="${WORKDIR}/UnpackedTarball/apr/${APR_LIB_DIR}/apr-1.lib ${WORKDIR}/UnpackedTarball/apr_util/${APR_LIB_DIR}/aprutil-1.lib"
10915     fi
10917     # Check for system serf
10918     libo_CHECK_SYSTEM_MODULE([serf],[SERF],[serf-1 >= 1.3.9])
10919     ;;
10920 neon)
10921     AC_MSG_RESULT([neon])
10922     # Check for system neon
10923     libo_CHECK_SYSTEM_MODULE([neon],[NEON],[neon >= 0.31.2])
10924     if test "$with_system_neon" = "yes"; then
10925         NEON_VERSION="`$PKG_CONFIG --modversion neon | $SED 's/\.//g'`"
10926     else
10927         NEON_VERSION=0312
10928     fi
10929     AC_SUBST(NEON_VERSION)
10930     ;;
10932     AC_MSG_RESULT([none, disabled])
10933     WITH_WEBDAV=""
10934     ;;
10935 esac
10936 AC_SUBST(WITH_WEBDAV)
10938 dnl ===================================================================
10939 dnl Check for disabling cve_tests
10940 dnl ===================================================================
10941 AC_MSG_CHECKING([whether to execute CVE tests])
10942 # If not explicitly enabled or disabled, default
10943 if test -z "$enable_cve_tests"; then
10944     case "$OS" in
10945     WNT)
10946         # Default cves off for Windows with its wild and wonderful
10947         # variety of AV software kicking in and panicking
10948         enable_cve_tests=no
10949         ;;
10950     *)
10951         # otherwise yes
10952         enable_cve_tests=yes
10953         ;;
10954     esac
10956 if test "$enable_cve_tests" = "no"; then
10957     AC_MSG_RESULT([no])
10958     DISABLE_CVE_TESTS=TRUE
10959     AC_SUBST(DISABLE_CVE_TESTS)
10960 else
10961     AC_MSG_RESULT([yes])
10964 dnl ===================================================================
10965 dnl Check for enabling chart XShape tests
10966 dnl ===================================================================
10967 AC_MSG_CHECKING([whether to execute chart XShape tests])
10968 if test "$enable_chart_tests" = "yes" -o '(' "$_os" = "WINNT" -a "$enable_chart_tests" != "no" ')'; then
10969     AC_MSG_RESULT([yes])
10970     ENABLE_CHART_TESTS=TRUE
10971     AC_SUBST(ENABLE_CHART_TESTS)
10972 else
10973     AC_MSG_RESULT([no])
10976 dnl ===================================================================
10977 dnl Check for system openssl
10978 dnl ===================================================================
10979 ENABLE_OPENSSL=
10980 AC_MSG_CHECKING([whether to disable OpenSSL usage])
10981 if test "$enable_openssl" = "yes"; then
10982     AC_MSG_RESULT([no])
10983     ENABLE_OPENSSL=TRUE
10984     if test "$_os" = Darwin ; then
10985         # OpenSSL is deprecated when building for 10.7 or later.
10986         #
10987         # http://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
10988         # http://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
10990         with_system_openssl=no
10991         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10992     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
10993             && test "$with_system_openssl" != "no"; then
10994         with_system_openssl=yes
10995         SYSTEM_OPENSSL=TRUE
10996         OPENSSL_CFLAGS=
10997         OPENSSL_LIBS="-lssl -lcrypto"
10998     else
10999         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
11000     fi
11001     if test "$with_system_openssl" = "yes"; then
11002         AC_MSG_CHECKING([whether openssl supports SHA512])
11003         AC_LANG_PUSH([C])
11004         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
11005             SHA512_CTX context;
11006 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
11007         AC_LANG_POP(C)
11008     fi
11009 else
11010     AC_MSG_RESULT([yes])
11012     # warn that although OpenSSL is disabled, system libraries may depend on it
11013     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
11014     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
11017 AC_SUBST([ENABLE_OPENSSL])
11019 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
11020     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
11021         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
11022         enable_cipher_openssl_backend=no
11023     else
11024         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
11025     fi
11027 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
11028 ENABLE_CIPHER_OPENSSL_BACKEND=
11029 if test "$enable_cipher_openssl_backend" = yes; then
11030     AC_MSG_RESULT([yes])
11031     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
11032 else
11033     AC_MSG_RESULT([no])
11035 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
11037 dnl ===================================================================
11038 dnl Select the crypto backends used by LO
11039 dnl ===================================================================
11041 if test "$build_crypto" = yes; then
11042     if test "$OS" = WNT; then
11043         BUILD_TYPE="$BUILD_TYPE CRYPTO_MSCAPI"
11044         AC_DEFINE([USE_CRYPTO_MSCAPI])
11045     elif test "$ENABLE_NSS" = TRUE; then
11046         BUILD_TYPE="$BUILD_TYPE CRYPTO_NSS"
11047         AC_DEFINE([USE_CRYPTO_NSS])
11048     fi
11051 dnl ===================================================================
11052 dnl Check for building gnutls
11053 dnl ===================================================================
11054 AC_MSG_CHECKING([whether to use gnutls])
11055 if test "$WITH_WEBDAV" = "neon" -a "$with_system_neon" = no -a "$enable_openssl" = "no"; then
11056     AC_MSG_RESULT([yes])
11057     AM_PATH_LIBGCRYPT()
11058     PKG_CHECK_MODULES(GNUTLS, [gnutls],,
11059         AC_MSG_ERROR([[Disabling OpenSSL was requested, but GNUTLS is not
11060                       available in the system to use as replacement.]]))
11061     FilterLibs "${LIBGCRYPT_LIBS}"
11062     LIBGCRYPT_LIBS="${filteredlibs}"
11063 else
11064     AC_MSG_RESULT([no])
11067 AC_SUBST([LIBGCRYPT_CFLAGS])
11068 AC_SUBST([LIBGCRYPT_LIBS])
11070 dnl ===================================================================
11071 dnl Check for system redland
11072 dnl ===================================================================
11073 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
11074 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
11075 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
11076 if test "$with_system_redland" = "yes"; then
11077     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
11078             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
11079 else
11080     RAPTOR_MAJOR="0"
11081     RASQAL_MAJOR="3"
11082     REDLAND_MAJOR="0"
11084 AC_SUBST(RAPTOR_MAJOR)
11085 AC_SUBST(RASQAL_MAJOR)
11086 AC_SUBST(REDLAND_MAJOR)
11088 dnl ===================================================================
11089 dnl Check for system hunspell
11090 dnl ===================================================================
11091 AC_MSG_CHECKING([which libhunspell to use])
11092 if test "$with_system_hunspell" = "yes"; then
11093     AC_MSG_RESULT([external])
11094     SYSTEM_HUNSPELL=TRUE
11095     AC_LANG_PUSH([C++])
11096     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
11097     if test "$HUNSPELL_PC" != "TRUE"; then
11098         AC_CHECK_HEADER(hunspell.hxx, [],
11099             [
11100             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
11101             [AC_MSG_ERROR(hunspell headers not found.)], [])
11102             ], [])
11103         AC_CHECK_LIB([hunspell], [main], [:],
11104            [ AC_MSG_ERROR(hunspell library not found.) ], [])
11105         HUNSPELL_LIBS=-lhunspell
11106     fi
11107     AC_LANG_POP([C++])
11108     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11109     FilterLibs "${HUNSPELL_LIBS}"
11110     HUNSPELL_LIBS="${filteredlibs}"
11111 else
11112     AC_MSG_RESULT([internal])
11113     SYSTEM_HUNSPELL=
11114     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
11115     if test "$COM" = "MSC"; then
11116         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
11117     else
11118         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
11119     fi
11120     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
11122 AC_SUBST(SYSTEM_HUNSPELL)
11123 AC_SUBST(HUNSPELL_CFLAGS)
11124 AC_SUBST(HUNSPELL_LIBS)
11126 dnl ===================================================================
11127 dnl Check for system zxing
11128 dnl ===================================================================
11129 AC_MSG_CHECKING([whether to use zxing])
11130 if test "$enable_zxing" = "no"; then
11131     AC_MSG_RESULT([no])
11132     ENABLE_ZXING=
11133     SYSTEM_ZXING=
11134 else
11135     AC_MSG_RESULT([yes])
11136     ENABLE_ZXING=TRUE
11137     AC_MSG_CHECKING([which libzxing to use])
11138     if test "$with_system_zxing" = "yes"; then
11139         AC_MSG_RESULT([external])
11140         SYSTEM_ZXING=TRUE
11141         ZXING_CFLAGS=
11142         AC_LANG_PUSH([C++])
11143         save_CXXFLAGS=$CXXFLAGS
11144         save_IFS=$IFS
11145         IFS=$P_SEP
11146         for i in $CPLUS_INCLUDE_PATH /usr/include; do
11147             dnl Reset IFS as soon as possible, to avoid unexpected side effects (and the
11148             dnl "/usr/include" fallback makes sure we get here at least once; resetting rather than
11149             dnl unsetting follows the advice at <http://git.savannah.gnu.org/gitweb/?p=autoconf.git;
11150             dnl a=commit;h=e51c9919f2cf70185b7916ac040bc0bbfd0f743b> "Add recommendation on (not)
11151             dnl unsetting IFS."):
11152             IFS=$save_IFS
11153             dnl TODO: GCC and Clang treat empty paths in CPLUS_INCLUDE_PATH like ".", but we simply
11154             dnl ignore them here:
11155             if test -z "$i"; then
11156                 continue
11157             fi
11158             dnl TODO: White space in $i would cause problems:
11159             CXXFLAGS="$save_CXXFLAGS -I$i/ZXing"
11160             AC_CHECK_HEADER(MultiFormatWriter.h, [ZXING_CFLAGS=-I$i/ZXing; break],
11161                 [unset ac_cv_header_MultiFormatWriter_h], [#include <stdexcept>])
11162         done
11163         CXXFLAGS=$save_CXXFLAGS
11164         if test -z "$ZXING_CFLAGS"; then
11165             AC_MSG_ERROR(zxing headers not found.)
11166         fi
11167         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
11168             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
11169             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
11170         AC_LANG_POP([C++])
11171         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11172         FilterLibs "${ZXING_LIBS}"
11173         ZXING_LIBS="${filteredlibs}"
11174     else
11175         AC_MSG_RESULT([internal])
11176         SYSTEM_ZXING=
11177         BUILD_TYPE="$BUILD_TYPE ZXING"
11178     fi
11179     if test "$ENABLE_ZXING" = TRUE; then
11180         AC_DEFINE(ENABLE_ZXING)
11181     fi
11183 AC_SUBST(SYSTEM_ZXING)
11184 AC_SUBST(ENABLE_ZXING)
11185 AC_SUBST(ZXING_CFLAGS)
11186 AC_SUBST(ZXING_LIBS)
11188 dnl ===================================================================
11189 dnl Check for system box2d
11190 dnl ===================================================================
11191 AC_MSG_CHECKING([which box2d to use])
11192 if test "$with_system_box2d" = "yes"; then
11193     AC_MSG_RESULT([external])
11194     SYSTEM_BOX2D=TRUE
11195     AC_LANG_PUSH([C++])
11196     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
11197         [BOX2D_H_FOUND='FALSE'])
11198     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
11199         _BOX2D_LIB=box2d
11200         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
11201     else
11202         # fail this. there's no other alternative to check when we are here.
11203         AC_CHECK_HEADER([Box2D/Box2D.h], [],
11204             [AC_MSG_ERROR(box2d headers not found.)])
11205         _BOX2D_LIB=Box2D
11206         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11207     fi
11208     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11209         [ AC_MSG_ERROR(box2d library not found.) ], [])
11210     BOX2D_LIBS=-l$_BOX2D_LIB
11211     AC_LANG_POP([C++])
11212     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11213     FilterLibs "${BOX2D_LIBS}"
11214     BOX2D_LIBS="${filteredlibs}"
11215 else
11216     AC_MSG_RESULT([internal])
11217     SYSTEM_BOX2D=
11218     BUILD_TYPE="$BUILD_TYPE BOX2D"
11220 AC_SUBST(SYSTEM_BOX2D)
11221 AC_SUBST(BOX2D_CFLAGS)
11222 AC_SUBST(BOX2D_LIBS)
11224 dnl ===================================================================
11225 dnl Checking for altlinuxhyph
11226 dnl ===================================================================
11227 AC_MSG_CHECKING([which altlinuxhyph to use])
11228 if test "$with_system_altlinuxhyph" = "yes"; then
11229     AC_MSG_RESULT([external])
11230     SYSTEM_HYPH=TRUE
11231     AC_CHECK_HEADER(hyphen.h, [],
11232        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11233     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11234        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11235        [#include <hyphen.h>])
11236     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11237         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11238     if test -z "$HYPHEN_LIB"; then
11239         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11240            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11241     fi
11242     if test -z "$HYPHEN_LIB"; then
11243         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11244            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11245     fi
11246 else
11247     AC_MSG_RESULT([internal])
11248     SYSTEM_HYPH=
11249     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11250     if test "$COM" = "MSC"; then
11251         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11252     else
11253         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11254     fi
11256 AC_SUBST(SYSTEM_HYPH)
11257 AC_SUBST(HYPHEN_LIB)
11259 dnl ===================================================================
11260 dnl Checking for mythes
11261 dnl ===================================================================
11262 AC_MSG_CHECKING([which mythes to use])
11263 if test "$with_system_mythes" = "yes"; then
11264     AC_MSG_RESULT([external])
11265     SYSTEM_MYTHES=TRUE
11266     AC_LANG_PUSH([C++])
11267     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11268     if test "$MYTHES_PKGCONFIG" = "no"; then
11269         AC_CHECK_HEADER(mythes.hxx, [],
11270             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11271         AC_CHECK_LIB([mythes-1.2], [main], [:],
11272             [ MYTHES_FOUND=no], [])
11273     if test "$MYTHES_FOUND" = "no"; then
11274         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11275                 [ MYTHES_FOUND=no], [])
11276     fi
11277     if test "$MYTHES_FOUND" = "no"; then
11278         AC_MSG_ERROR([mythes library not found!.])
11279     fi
11280     fi
11281     AC_LANG_POP([C++])
11282     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11283     FilterLibs "${MYTHES_LIBS}"
11284     MYTHES_LIBS="${filteredlibs}"
11285 else
11286     AC_MSG_RESULT([internal])
11287     SYSTEM_MYTHES=
11288     BUILD_TYPE="$BUILD_TYPE MYTHES"
11289     if test "$COM" = "MSC"; then
11290         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11291     else
11292         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11293     fi
11295 AC_SUBST(SYSTEM_MYTHES)
11296 AC_SUBST(MYTHES_CFLAGS)
11297 AC_SUBST(MYTHES_LIBS)
11299 dnl ===================================================================
11300 dnl How should we build the linear programming solver ?
11301 dnl ===================================================================
11303 ENABLE_COINMP=
11304 AC_MSG_CHECKING([whether to build with CoinMP])
11305 if test "$enable_coinmp" != "no"; then
11306     ENABLE_COINMP=TRUE
11307     AC_MSG_RESULT([yes])
11308     if test "$with_system_coinmp" = "yes"; then
11309         SYSTEM_COINMP=TRUE
11310         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11311         FilterLibs "${COINMP_LIBS}"
11312         COINMP_LIBS="${filteredlibs}"
11313     else
11314         BUILD_TYPE="$BUILD_TYPE COINMP"
11315     fi
11316 else
11317     AC_MSG_RESULT([no])
11319 AC_SUBST(ENABLE_COINMP)
11320 AC_SUBST(SYSTEM_COINMP)
11321 AC_SUBST(COINMP_CFLAGS)
11322 AC_SUBST(COINMP_LIBS)
11324 ENABLE_LPSOLVE=
11325 AC_MSG_CHECKING([whether to build with lpsolve])
11326 if test "$enable_lpsolve" != "no"; then
11327     ENABLE_LPSOLVE=TRUE
11328     AC_MSG_RESULT([yes])
11329 else
11330     AC_MSG_RESULT([no])
11332 AC_SUBST(ENABLE_LPSOLVE)
11334 if test "$ENABLE_LPSOLVE" = TRUE; then
11335     AC_MSG_CHECKING([which lpsolve to use])
11336     if test "$with_system_lpsolve" = "yes"; then
11337         AC_MSG_RESULT([external])
11338         SYSTEM_LPSOLVE=TRUE
11339         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11340            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11341         save_LIBS=$LIBS
11342         # some systems need this. Like Ubuntu...
11343         AC_CHECK_LIB(m, floor)
11344         AC_CHECK_LIB(dl, dlopen)
11345         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11346             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11347         LIBS=$save_LIBS
11348     else
11349         AC_MSG_RESULT([internal])
11350         SYSTEM_LPSOLVE=
11351         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11352     fi
11354 AC_SUBST(SYSTEM_LPSOLVE)
11356 dnl ===================================================================
11357 dnl Checking for libexttextcat
11358 dnl ===================================================================
11359 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11360 if test "$with_system_libexttextcat" = "yes"; then
11361     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11363 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11365 dnl ===================================================================
11366 dnl Checking for libnumbertext
11367 dnl ===================================================================
11368 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11369 if test "$with_system_libnumbertext" = "yes"; then
11370     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11371     SYSTEM_LIBNUMBERTEXT=YES
11372 else
11373     SYSTEM_LIBNUMBERTEXT=
11374     AC_LANG_PUSH([C++])
11375     save_CPPFLAGS=$CPPFLAGS
11376     CPPFLAGS="$CPPFLAGS $CXXFLAGS_CXX11"
11377     AC_CHECK_HEADERS([codecvt regex])
11378     AS_IF([test "x$ac_cv_header_codecvt" != xyes -o "x$ac_cv_header_regex" != xyes],
11379             [ LIBNUMBERTEXT_CFLAGS=''
11380               AC_MSG_WARN([No system-provided libnumbertext or codecvt/regex C++11 headers (min. libstdc++ 4.9).
11381                            Enable libnumbertext fallback (missing number to number name conversion).])
11382             ])
11383     CPPFLAGS=$save_CPPFLAGS
11384     AC_LANG_POP([C++])
11386 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11387 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11388 AC_SUBST(LIBNUMBERTEXT_CFLAGS)
11390 dnl ***************************************
11391 dnl testing libc version for Linux...
11392 dnl ***************************************
11393 if test "$_os" = "Linux"; then
11394     AC_MSG_CHECKING([whether the libc is recent enough])
11395     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
11396     #include <features.h>
11397     #if defined(__GNU_LIBRARY__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1))
11398     #error glibc >= 2.1 is required
11399     #endif
11400     ]])],, [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([no, upgrade libc])])
11403 dnl =========================================
11404 dnl Check for uuidgen
11405 dnl =========================================
11406 if test "$_os" = "WINNT"; then
11407     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11408     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11409     UUIDGEN=uuidgen.exe
11410     AC_SUBST(UUIDGEN)
11411 else
11412     AC_PATH_PROG([UUIDGEN], [uuidgen])
11413     if test -z "$UUIDGEN"; then
11414         AC_MSG_WARN([uuid is needed for building installation sets])
11415     fi
11418 dnl ***************************************
11419 dnl Checking for bison and flex
11420 dnl ***************************************
11421 AC_PATH_PROG(BISON, bison)
11422 if test -z "$BISON"; then
11423     AC_MSG_ERROR([no bison found in \$PATH, install it])
11424 else
11425     AC_MSG_CHECKING([the bison version])
11426     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11427     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11428     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11429     dnl cause
11430     dnl
11431     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]
11432     dnl   typedef union YYSTYPE
11433     dnl           ~~~~~~^~~~~~~
11434     dnl
11435     dnl while at least 3.4.1 is know to be good:
11436     if test "$COMPILER_PLUGINS" = TRUE; then
11437         if test "$_bison_longver" -lt 2004; then
11438             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11439         fi
11440     else
11441         if test "$_bison_longver" -lt 2000; then
11442             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11443         fi
11444     fi
11446 AC_SUBST([BISON])
11448 AC_PATH_PROG(FLEX, flex)
11449 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11450     FLEX=`cygpath -m $FLEX`
11452 if test -z "$FLEX"; then
11453     AC_MSG_ERROR([no flex found in \$PATH, install it])
11454 else
11455     AC_MSG_CHECKING([the flex version])
11456     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11457     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11458         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11459     fi
11461 AC_SUBST([FLEX])
11462 dnl ***************************************
11463 dnl Checking for patch
11464 dnl ***************************************
11465 AC_PATH_PROG(PATCH, patch)
11466 if test -z "$PATCH"; then
11467     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11470 dnl On Solaris or macOS, check if --with-gnu-patch was used
11471 if test "$_os" = "SunOS" -o "$_os" = "Darwin"; then
11472     if test -z "$with_gnu_patch"; then
11473         GNUPATCH=$PATCH
11474     else
11475         if test -x "$with_gnu_patch"; then
11476             GNUPATCH=$with_gnu_patch
11477         else
11478             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11479         fi
11480     fi
11482     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11483     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11484         AC_MSG_RESULT([yes])
11485     else
11486         AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11487     fi
11488 else
11489     GNUPATCH=$PATCH
11492 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11493     GNUPATCH=`cygpath -m $GNUPATCH`
11496 dnl We also need to check for --with-gnu-cp
11498 if test -z "$with_gnu_cp"; then
11499     # check the place where the good stuff is hidden on Solaris...
11500     if test -x /usr/gnu/bin/cp; then
11501         GNUCP=/usr/gnu/bin/cp
11502     else
11503         AC_PATH_PROGS(GNUCP, gnucp cp)
11504     fi
11505     if test -z $GNUCP; then
11506         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11507     fi
11508 else
11509     if test -x "$with_gnu_cp"; then
11510         GNUCP=$with_gnu_cp
11511     else
11512         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11513     fi
11516 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11517     GNUCP=`cygpath -m $GNUCP`
11520 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11521 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11522     AC_MSG_RESULT([yes])
11523 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11524     AC_MSG_RESULT([yes])
11525 else
11526     case "$build_os" in
11527     darwin*|macos*|netbsd*|openbsd*|freebsd*|dragonfly*|aix*)
11528         x_GNUCP=[\#]
11529         GNUCP=''
11530         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11531         ;;
11532     *)
11533         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11534         ;;
11535     esac
11538 AC_SUBST(GNUPATCH)
11539 AC_SUBST(GNUCP)
11540 AC_SUBST(x_GNUCP)
11542 dnl ***************************************
11543 dnl testing assembler path
11544 dnl ***************************************
11545 ML_EXE=""
11546 if test "$_os" = "WINNT"; then
11547     case "$WIN_HOST_ARCH" in
11548     x86) assembler=ml.exe ;;
11549     x64) assembler=ml64.exe ;;
11550     arm64) assembler=armasm64.exe ;;
11551     esac
11553     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11554     if test -f "$MSVC_HOST_PATH/$assembler"; then
11555         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11556         AC_MSG_RESULT([$ML_EXE])
11557     else
11558         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11559     fi
11562 AC_SUBST(ML_EXE)
11564 dnl ===================================================================
11565 dnl We need zip and unzip
11566 dnl ===================================================================
11567 AC_PATH_PROG(ZIP, zip)
11568 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11569 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11570     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],,)
11573 AC_PATH_PROG(UNZIP, unzip)
11574 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11576 dnl ===================================================================
11577 dnl Zip must be a specific type for different build types.
11578 dnl ===================================================================
11579 if test $build_os = cygwin; then
11580     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11581         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11582     fi
11585 dnl ===================================================================
11586 dnl We need touch with -h option support.
11587 dnl ===================================================================
11588 AC_PATH_PROG(TOUCH, touch)
11589 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11590 touch "$WARNINGS_FILE"
11591 if ! "$TOUCH" -h "$WARNINGS_FILE" 2>/dev/null > /dev/null; then
11592     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],,)
11595 dnl ===================================================================
11596 dnl Check for system epoxy
11597 dnl ===================================================================
11598 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2], ["-I${WORKDIR}/UnpackedTarball/epoxy/include"])
11600 dnl ===================================================================
11601 dnl Set vcl option: coordinate device in double or sal_Int32
11602 dnl ===================================================================
11604 dnl disabled for now, we don't want subtle differences between OSs
11605 dnl AC_MSG_CHECKING([Type to use for Device Pixel coordinates])
11606 dnl if test "$_os" = "Darwin" -o  $_os = iOS ; then
11607 dnl     AC_DEFINE(VCL_FLOAT_DEVICE_PIXEL)
11608 dnl     AC_MSG_RESULT([double])
11609 dnl else
11610 dnl     AC_MSG_RESULT([sal_Int32])
11611 dnl fi
11613 dnl ===================================================================
11614 dnl Show which vclplugs will be built.
11615 dnl ===================================================================
11616 R=""
11617 if test "$USING_X11" != TRUE; then
11618     enable_gtk3=no
11621 ENABLE_GTK3=""
11622 if test "x$enable_gtk3" = "xyes"; then
11623     ENABLE_GTK3="TRUE"
11624     AC_DEFINE(ENABLE_GTK3)
11625     R="$R gtk3"
11627 AC_SUBST(ENABLE_GTK3)
11629 ENABLE_GTK3_KDE5=""
11630 if test "x$enable_gtk3_kde5" = "xyes"; then
11631     ENABLE_GTK3_KDE5="TRUE"
11632     AC_DEFINE(ENABLE_GTK3_KDE5)
11633     R="$R gtk3_kde5"
11635 AC_SUBST(ENABLE_GTK3_KDE5)
11637 ENABLE_GTK4=""
11638 if test "x$enable_gtk4" = "xyes"; then
11639     ENABLE_GTK4="TRUE"
11640     AC_DEFINE(ENABLE_GTK4)
11641     R="$R gtk4"
11643 AC_SUBST(ENABLE_GTK4)
11645 ENABLE_QT5=""
11646 if test "x$enable_qt5" = "xyes"; then
11647     ENABLE_QT5="TRUE"
11648     AC_DEFINE(ENABLE_QT5)
11649     R="$R qt5"
11651 AC_SUBST(ENABLE_QT5)
11653 ENABLE_QT6=""
11654 if test "x$enable_qt6" = "xyes"; then
11655     ENABLE_QT6="TRUE"
11656     AC_DEFINE(ENABLE_QT6)
11657     R="$R qt6"
11659 AC_SUBST(ENABLE_QT6)
11662 ENABLE_KF5=""
11663 if test "x$enable_kf5" = "xyes"; then
11664     ENABLE_KF5="TRUE"
11665     AC_DEFINE(ENABLE_KF5)
11666     R="$R kf5"
11668 AC_SUBST(ENABLE_KF5)
11670 if test "x$USING_X11" = "xyes"; then
11671     R="$R gen"
11674 if test "$_os" = "WINNT"; then
11675     R="$R win"
11676 elif test "$_os" = "Darwin"; then
11677     R="$R osx"
11678 elif test "$_os" = "iOS"; then
11679     R="ios"
11680 elif test "$_os" = Android; then
11681     R="android"
11684 build_vcl_plugins="$R"
11685 if test -z "$build_vcl_plugins"; then
11686     build_vcl_plugins=" none"
11688 AC_MSG_NOTICE([VCLplugs to be built:${build_vcl_plugins}])
11689 VCL_PLUGIN_INFO=$R
11690 AC_SUBST([VCL_PLUGIN_INFO])
11692 dnl ===================================================================
11693 dnl Check for GTK libraries
11694 dnl ===================================================================
11696 GTK3_CFLAGS=""
11697 GTK3_LIBS=""
11698 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11699     if test "$with_system_cairo" = no; then
11700         add_warning 'Non-system cairo combined with gtk3 is assumed to cause trouble; proceed at your own risk.'
11701     fi
11702     : ${with_system_cairo:=yes}
11703     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)
11704     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11705     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11706     FilterLibs "${GTK3_LIBS}"
11707     GTK3_LIBS="${filteredlibs}"
11709     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11710     if test "$with_system_epoxy" != "yes"; then
11711         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11712         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11713                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11714     fi
11716 AC_SUBST(GTK3_LIBS)
11717 AC_SUBST(GTK3_CFLAGS)
11719 GTK4_CFLAGS=""
11720 GTK4_LIBS=""
11721 if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then
11722     if test "$with_system_cairo" = no; then
11723         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11724     fi
11725     : ${with_system_cairo:=yes}
11726     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11727     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11728     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11729     FilterLibs "${GTK4_LIBS}"
11730     GTK4_LIBS="${filteredlibs}"
11732     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11733     if test "$with_system_epoxy" != "yes"; then
11734         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11735         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11736                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11737     fi
11739 AC_SUBST(GTK4_LIBS)
11740 AC_SUBST(GTK4_CFLAGS)
11742 if test "$enable_introspection" = yes; then
11743     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11744         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11745     else
11746         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
11747     fi
11750 dnl ===================================================================
11751 dnl check for dbus support
11752 dnl ===================================================================
11753 ENABLE_DBUS=""
11754 DBUS_CFLAGS=""
11755 DBUS_LIBS=""
11756 DBUS_GLIB_CFLAGS=""
11757 DBUS_GLIB_LIBS=""
11758 DBUS_HAVE_GLIB=""
11760 if test "$enable_dbus" = "no"; then
11761     test_dbus=no
11764 AC_MSG_CHECKING([whether to enable DBUS support])
11765 if test "$test_dbus" = "yes"; then
11766     ENABLE_DBUS="TRUE"
11767     AC_MSG_RESULT([yes])
11768     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
11769     AC_DEFINE(ENABLE_DBUS)
11770     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11771     FilterLibs "${DBUS_LIBS}"
11772     DBUS_LIBS="${filteredlibs}"
11774     # Glib is needed for BluetoothServer
11775     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
11776     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
11777         [
11778             DBUS_HAVE_GLIB="TRUE"
11779             AC_DEFINE(DBUS_HAVE_GLIB,1)
11780         ],
11781         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
11782     )
11783 else
11784     AC_MSG_RESULT([no])
11787 AC_SUBST(ENABLE_DBUS)
11788 AC_SUBST(DBUS_CFLAGS)
11789 AC_SUBST(DBUS_LIBS)
11790 AC_SUBST(DBUS_GLIB_CFLAGS)
11791 AC_SUBST(DBUS_GLIB_LIBS)
11792 AC_SUBST(DBUS_HAVE_GLIB)
11794 AC_MSG_CHECKING([whether to enable Impress remote control])
11795 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
11796     AC_MSG_RESULT([yes])
11797     ENABLE_SDREMOTE=TRUE
11798     SDREMOTE_ENTITLEMENT="      <key>com.apple.security.network.server</key>
11799         <true/>"
11800     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
11802     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
11803         # The Bluetooth code doesn't compile with macOS SDK 10.15
11804         if test "$enable_sdremote_bluetooth" = yes; then
11805             AC_MSG_ERROR([macOS SDK $macosx_sdk does not currently support --enable-sdremote-bluetooth])
11806         fi
11807         add_warning "not building the bluetooth part of the sdremote - used api was removed from macOS SDK 10.15"
11808         enable_sdremote_bluetooth=no
11809     fi
11810     # If not explicitly enabled or disabled, default
11811     if test -z "$enable_sdremote_bluetooth"; then
11812         case "$OS" in
11813         LINUX|MACOSX|WNT)
11814             # Default to yes for these
11815             enable_sdremote_bluetooth=yes
11816             ;;
11817         *)
11818             # otherwise no
11819             enable_sdremote_bluetooth=no
11820             ;;
11821         esac
11822     fi
11823     # $enable_sdremote_bluetooth is guaranteed non-empty now
11825     if test "$enable_sdremote_bluetooth" != "no"; then
11826         if test "$OS" = "LINUX"; then
11827             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
11828                 AC_MSG_RESULT([yes])
11829                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
11830                 dnl ===================================================================
11831                 dnl Check for system bluez
11832                 dnl ===================================================================
11833                 AC_MSG_CHECKING([which Bluetooth header to use])
11834                 if test "$with_system_bluez" = "yes"; then
11835                     AC_MSG_RESULT([external])
11836                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
11837                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
11838                     SYSTEM_BLUEZ=TRUE
11839                 else
11840                     AC_MSG_RESULT([internal])
11841                     SYSTEM_BLUEZ=
11842                 fi
11843             else
11844                 AC_MSG_RESULT([no, dbus disabled])
11845                 ENABLE_SDREMOTE_BLUETOOTH=
11846                 SYSTEM_BLUEZ=
11847             fi
11848         else
11849             AC_MSG_RESULT([yes])
11850             ENABLE_SDREMOTE_BLUETOOTH=TRUE
11851             SYSTEM_BLUEZ=
11852             SDREMOTE_ENTITLEMENT="$SDREMOTE_ENTITLEMENT
11853         <key>com.apple.security.device.bluetooth</key>
11854         <true/>"
11855         fi
11856     else
11857         AC_MSG_RESULT([no])
11858         ENABLE_SDREMOTE_BLUETOOTH=
11859         SYSTEM_BLUEZ=
11860     fi
11861 else
11862     ENABLE_SDREMOTE=
11863     SYSTEM_BLUEZ=
11864     AC_MSG_RESULT([no])
11866 AC_SUBST(ENABLE_SDREMOTE)
11867 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
11868 AC_SUBST(SDREMOTE_ENTITLEMENT)
11869 AC_SUBST(SYSTEM_BLUEZ)
11871 dnl ===================================================================
11872 dnl Check whether to enable GIO support
11873 dnl ===================================================================
11874 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11875     AC_MSG_CHECKING([whether to enable GIO support])
11876     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
11877         dnl Need at least 2.26 for the dbus support.
11878         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
11879                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
11880         if test "$ENABLE_GIO" = "TRUE"; then
11881             AC_DEFINE(ENABLE_GIO)
11882             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11883             FilterLibs "${GIO_LIBS}"
11884             GIO_LIBS="${filteredlibs}"
11885         fi
11886     else
11887         AC_MSG_RESULT([no])
11888     fi
11890 AC_SUBST(ENABLE_GIO)
11891 AC_SUBST(GIO_CFLAGS)
11892 AC_SUBST(GIO_LIBS)
11895 dnl ===================================================================
11897 SPLIT_APP_MODULES=""
11898 if test "$enable_split_app_modules" = "yes"; then
11899     SPLIT_APP_MODULES="TRUE"
11901 AC_SUBST(SPLIT_APP_MODULES)
11903 SPLIT_OPT_FEATURES=""
11904 if test "$enable_split_opt_features" = "yes"; then
11905     SPLIT_OPT_FEATURES="TRUE"
11907 AC_SUBST(SPLIT_OPT_FEATURES)
11909 dnl ===================================================================
11910 dnl Check whether the GStreamer libraries are available.
11911 dnl ===================================================================
11913 ENABLE_GSTREAMER_1_0=""
11915 if test "$test_gstreamer_1_0" = yes; then
11917     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
11918     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
11919         ENABLE_GSTREAMER_1_0="TRUE"
11920         AC_MSG_RESULT([yes])
11921         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
11922         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11923         FilterLibs "${GSTREAMER_1_0_LIBS}"
11924         GSTREAMER_1_0_LIBS="${filteredlibs}"
11925         AC_DEFINE(ENABLE_GSTREAMER_1_0)
11926     else
11927         AC_MSG_RESULT([no])
11928     fi
11930 AC_SUBST(GSTREAMER_1_0_CFLAGS)
11931 AC_SUBST(GSTREAMER_1_0_LIBS)
11932 AC_SUBST(ENABLE_GSTREAMER_1_0)
11934 ENABLE_OPENGL_TRANSITIONS=
11935 ENABLE_OPENGL_CANVAS=
11936 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
11937    : # disable
11938 elif test "$_os" = "Darwin"; then
11939     # We use frameworks on macOS, no need for detail checks
11940     ENABLE_OPENGL_TRANSITIONS=TRUE
11941     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11942     ENABLE_OPENGL_CANVAS=TRUE
11943 elif test $_os = WINNT; then
11944     ENABLE_OPENGL_TRANSITIONS=TRUE
11945     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11946     ENABLE_OPENGL_CANVAS=TRUE
11947 else
11948     if test "$USING_X11" = TRUE; then
11949         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
11950         ENABLE_OPENGL_TRANSITIONS=TRUE
11951         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11952         ENABLE_OPENGL_CANVAS=TRUE
11953     fi
11956 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
11957 AC_SUBST(ENABLE_OPENGL_CANVAS)
11959 dnl =================================================
11960 dnl Check whether to build with OpenCL support.
11961 dnl =================================================
11963 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
11964     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
11965     # platform (optional at run-time, used through clew).
11966     BUILD_TYPE="$BUILD_TYPE OPENCL"
11967     AC_DEFINE(HAVE_FEATURE_OPENCL)
11970 dnl =================================================
11971 dnl Check whether to build with dconf support.
11972 dnl =================================================
11974 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
11975     PKG_CHECK_MODULES([DCONF], [dconf >= 0.15.2], [], [
11976         if test "$enable_dconf" = yes; then
11977             AC_MSG_ERROR([dconf not found])
11978         else
11979             enable_dconf=no
11980         fi])
11982 AC_MSG_CHECKING([whether to enable dconf])
11983 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
11984     DCONF_CFLAGS=
11985     DCONF_LIBS=
11986     ENABLE_DCONF=
11987     AC_MSG_RESULT([no])
11988 else
11989     ENABLE_DCONF=TRUE
11990     AC_DEFINE(ENABLE_DCONF)
11991     AC_MSG_RESULT([yes])
11993 AC_SUBST([DCONF_CFLAGS])
11994 AC_SUBST([DCONF_LIBS])
11995 AC_SUBST([ENABLE_DCONF])
11997 # pdf import?
11998 AC_MSG_CHECKING([whether to build the PDF import feature])
11999 ENABLE_PDFIMPORT=
12000 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
12001     AC_MSG_RESULT([yes])
12002     ENABLE_PDFIMPORT=TRUE
12003     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
12004 else
12005     AC_MSG_RESULT([no])
12008 # Pdfium?
12009 AC_MSG_CHECKING([whether to build PDFium])
12010 ENABLE_PDFIUM=
12011 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
12012     AC_MSG_RESULT([yes])
12013     ENABLE_PDFIUM=TRUE
12014     BUILD_TYPE="$BUILD_TYPE PDFIUM"
12015 else
12016     AC_MSG_RESULT([no])
12018 AC_SUBST(ENABLE_PDFIUM)
12020 if test "$ENABLE_PDFIUM" = "TRUE"; then
12021         AC_MSG_CHECKING([which OpenJPEG library to use])
12022         if test "$with_system_openjpeg" = "yes"; then
12023                 SYSTEM_OPENJPEG2=TRUE
12024                 AC_MSG_RESULT([external])
12025                 PKG_CHECK_MODULES( OPENJPEG2, libopenjp2 )
12026                 OPENJPEG2_CFLAGS=$(printf '%s' "$OPENJPEG2_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12027                 FilterLibs "${OPENJPEG2_LIBS}"
12028                 OPENJPEG2_LIBS="${filteredlibs}"
12029         else
12030                 SYSTEM_OPENJPEG2=FALSE
12031                 AC_MSG_RESULT([internal])
12032         fi
12033         AC_MSG_CHECKING([which Abseil library to use])
12034         if test "$with_system_abseil" = "yes"; then
12035                 AC_MSG_RESULT([external])
12036                 SYSTEM_ABSEIL=TRUE
12037                 AC_LANG_PUSH([C++])
12038                 AC_CHECK_HEADER(absl/types/bad_optional_access.h, [],
12039                         [AC_MSG_ERROR(abseil headers not found.)], [])
12040                 #ABSEIL_CFLAGS=-I/usr/include
12041                 AC_CHECK_LIB([absl_bad_optional_access], [main], [ABSEIL_LIBS=-labsl_bad_optional_access],
12042                         [ AC_MSG_ERROR([libabsl_bad_optional_access library not found.]) ])
12043                 AC_LANG_POP([C++])
12044                 ABSEIL_CFLAGS=$(printf '%s' "$ABSEIL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12045                 FilterLibs "${ABSEIL_LIBS}"
12046                 ABSEIL_LIBS="${filteredlibs}"
12047         else
12048                 AC_MSG_RESULT([internal])
12049         fi
12051 AC_SUBST(SYSTEM_OPENJPEG2)
12052 AC_SUBST(SYSTEM_ABSEIL)
12053 AC_SUBST(ABSEIL_CFLAGS)
12054 AC_SUBST(ABSEIL_LIBS)
12056 dnl ===================================================================
12057 dnl Check for poppler
12058 dnl ===================================================================
12059 ENABLE_POPPLER=
12060 AC_MSG_CHECKING([whether to build Poppler])
12061 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
12062     AC_MSG_RESULT([yes])
12063     ENABLE_POPPLER=TRUE
12064     AC_DEFINE(HAVE_FEATURE_POPPLER)
12065 else
12066     AC_MSG_RESULT([no])
12068 AC_SUBST(ENABLE_POPPLER)
12070 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
12071     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
12074 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
12075     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
12078 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
12079     dnl ===================================================================
12080     dnl Check for system poppler
12081     dnl ===================================================================
12082     AC_MSG_CHECKING([which PDF import poppler to use])
12083     if test "$with_system_poppler" = "yes"; then
12084         AC_MSG_RESULT([external])
12085         SYSTEM_POPPLER=TRUE
12086         PKG_CHECK_MODULES(POPPLER,[poppler >= 0.14 poppler-cpp])
12087         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12088         FilterLibs "${POPPLER_LIBS}"
12089         POPPLER_LIBS="${filteredlibs}"
12090     else
12091         AC_MSG_RESULT([internal])
12092         SYSTEM_POPPLER=
12093         BUILD_TYPE="$BUILD_TYPE POPPLER"
12094     fi
12095     AC_DEFINE([ENABLE_PDFIMPORT],1)
12097 AC_SUBST(ENABLE_PDFIMPORT)
12098 AC_SUBST(SYSTEM_POPPLER)
12099 AC_SUBST(POPPLER_CFLAGS)
12100 AC_SUBST(POPPLER_LIBS)
12102 # Skia?
12103 ENABLE_SKIA=
12104 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
12105     # Skia now requires at least freetype2 >= 2.8.1, which is less that what LO requires as system freetype.
12106     if test "$SYSTEM_FREETYPE" = TRUE; then
12107         PKG_CHECK_EXISTS(freetype2 >= 21.0.15, # 21.0.15 = 2.8.1
12108             [skia_freetype_ok=yes],
12109             [skia_freetype_ok=no])
12110     else # internal is ok
12111         skia_freetype_ok=yes
12112     fi
12113     AC_MSG_CHECKING([whether to build Skia])
12114     if test "$skia_freetype_ok" = "yes"; then
12115         if test "$enable_skia" = "debug"; then
12116             AC_MSG_RESULT([yes (debug)])
12117             ENABLE_SKIA_DEBUG=TRUE
12118         else
12119             AC_MSG_RESULT([yes])
12120             ENABLE_SKIA_DEBUG=
12121         fi
12122         ENABLE_SKIA=TRUE
12123         AC_DEFINE(HAVE_FEATURE_SKIA)
12124         BUILD_TYPE="$BUILD_TYPE SKIA"
12126         if test "$OS" = "MACOSX"; then
12127             AC_DEFINE(SK_SUPPORT_GPU,1)
12128             AC_DEFINE(SK_METAL,1)
12129             SKIA_GPU=METAL
12130             AC_SUBST(SKIA_GPU)
12131         else
12132             AC_DEFINE(SK_SUPPORT_GPU,1)
12133             AC_DEFINE(SK_VULKAN,1)
12134             SKIA_GPU=VULKAN
12135             AC_SUBST(SKIA_GPU)
12136         fi
12138         if test -n "$MAC_OS_X_VERSION_MIN_REQUIRED" && test "$MAC_OS_X_VERSION_MIN_REQUIRED" -lt "101200"; then
12139             SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX=1
12140             AC_SUBST(SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX)
12141         fi
12142     else
12143         AC_MSG_RESULT([no (freetype too old)])
12144         add_warning "freetype version is too old for Skia library, at least 2.8.1 required, Skia support disabled"
12145     fi
12147 else
12148     AC_MSG_CHECKING([whether to build Skia])
12149     AC_MSG_RESULT([no])
12151 AC_SUBST(ENABLE_SKIA)
12152 AC_SUBST(ENABLE_SKIA_DEBUG)
12154 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
12155 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
12156 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
12157 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
12158 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
12159 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
12160 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
12161 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F=
12162 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
12163 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
12164 HAVE_LO_CLANG_DLLEXPORTINLINES=
12166 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE; then
12167     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12168         AC_MSG_CHECKING([for Clang])
12169         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
12170     else
12171         if test "$_os" = "WINNT"; then
12172             AC_MSG_CHECKING([for clang-cl])
12173             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
12174                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
12175                 dnl explicitly set -m32/-m64
12176                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
12177                 LO_CLANG_CXX="$LO_CLANG_CC"
12178                 AC_MSG_RESULT([$LO_CLANG_CC])
12179             else
12180                 AC_MSG_RESULT([no])
12181             fi
12182         else
12183             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
12184             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
12185         fi
12186     fi
12187     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12188         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
12189         clang2_ver=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
12190         if test "$clang2_ver" -lt 50002; then
12191             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
12192             LO_CLANG_CC=
12193             LO_CLANG_CXX=
12194         fi
12195     fi
12196     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX" -a "$_os" = "WINNT"; then
12197         save_CXX="$CXX"
12198         CXX="$LO_CLANG_CXX"
12199         AC_MSG_CHECKING([whether $CXX supports -Zc:dllexportInlines-])
12200         AC_LANG_PUSH([C++])
12201         save_CXXFLAGS=$CXXFLAGS
12202         CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
12203         AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
12204                 HAVE_LO_CLANG_DLLEXPORTINLINES=TRUE
12205                 AC_MSG_RESULT([yes])
12206             ], [AC_MSG_RESULT([no])])
12207         CXXFLAGS=$save_CXXFLAGS
12208         AC_LANG_POP([C++])
12209         CXX="$save_CXX"
12210         if test -z "$HAVE_LO_CLANG_DLLEXPORTINLINES"; then
12211             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.])
12212         fi
12213     fi
12214     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
12215         # Skia is the default on Windows and Mac, so hard-require Clang.
12216         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
12217         if test "$_os" = "WINNT" -o "$_os" = "Darwin"; then
12218             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang, or use --disable-skia.])
12219         else
12220             AC_MSG_WARN([Clang compiler not found.])
12221         fi
12222     else
12224         save_CXX="$CXX"
12225         CXX="$LO_CLANG_CXX"
12226         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
12227         flag_sse2=-msse2
12228         flag_ssse3=-mssse3
12229         flag_sse41=-msse4.1
12230         flag_sse42=-msse4.2
12231         flag_avx=-mavx
12232         flag_avx2=-mavx2
12233         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
12234         flag_avx512f=-mavx512f
12235         flag_f16c=-mf16c
12236         flag_fma=-mfma
12238         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
12239         AC_LANG_PUSH([C++])
12240         save_CXXFLAGS=$CXXFLAGS
12241         CXXFLAGS="$CXXFLAGS $flag_sse2"
12242         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12243             #include <emmintrin.h>
12244             int main () {
12245                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12246                 c = _mm_xor_si128 (a, b);
12247                 return 0;
12248             }
12249             ])],
12250             [can_compile_sse2=yes],
12251             [can_compile_sse2=no])
12252         AC_LANG_POP([C++])
12253         CXXFLAGS=$save_CXXFLAGS
12254         AC_MSG_RESULT([${can_compile_sse2}])
12255         if test "${can_compile_sse2}" = "yes" ; then
12256             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
12257         fi
12259         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
12260         AC_LANG_PUSH([C++])
12261         save_CXXFLAGS=$CXXFLAGS
12262         CXXFLAGS="$CXXFLAGS $flag_ssse3"
12263         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12264             #include <tmmintrin.h>
12265             int main () {
12266                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12267                 c = _mm_maddubs_epi16 (a, b);
12268                 return 0;
12269             }
12270             ])],
12271             [can_compile_ssse3=yes],
12272             [can_compile_ssse3=no])
12273         AC_LANG_POP([C++])
12274         CXXFLAGS=$save_CXXFLAGS
12275         AC_MSG_RESULT([${can_compile_ssse3}])
12276         if test "${can_compile_ssse3}" = "yes" ; then
12277             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
12278         fi
12280         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
12281         AC_LANG_PUSH([C++])
12282         save_CXXFLAGS=$CXXFLAGS
12283         CXXFLAGS="$CXXFLAGS $flag_sse41"
12284         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12285             #include <smmintrin.h>
12286             int main () {
12287                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12288                 c = _mm_cmpeq_epi64 (a, b);
12289                 return 0;
12290             }
12291             ])],
12292             [can_compile_sse41=yes],
12293             [can_compile_sse41=no])
12294         AC_LANG_POP([C++])
12295         CXXFLAGS=$save_CXXFLAGS
12296         AC_MSG_RESULT([${can_compile_sse41}])
12297         if test "${can_compile_sse41}" = "yes" ; then
12298             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12299         fi
12301         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12302         AC_LANG_PUSH([C++])
12303         save_CXXFLAGS=$CXXFLAGS
12304         CXXFLAGS="$CXXFLAGS $flag_sse42"
12305         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12306             #include <nmmintrin.h>
12307             int main () {
12308                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12309                 c = _mm_cmpgt_epi64 (a, b);
12310                 return 0;
12311             }
12312             ])],
12313             [can_compile_sse42=yes],
12314             [can_compile_sse42=no])
12315         AC_LANG_POP([C++])
12316         CXXFLAGS=$save_CXXFLAGS
12317         AC_MSG_RESULT([${can_compile_sse42}])
12318         if test "${can_compile_sse42}" = "yes" ; then
12319             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12320         fi
12322         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12323         AC_LANG_PUSH([C++])
12324         save_CXXFLAGS=$CXXFLAGS
12325         CXXFLAGS="$CXXFLAGS $flag_avx"
12326         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12327             #include <immintrin.h>
12328             int main () {
12329                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12330                 c = _mm256_xor_ps(a, b);
12331                 return 0;
12332             }
12333             ])],
12334             [can_compile_avx=yes],
12335             [can_compile_avx=no])
12336         AC_LANG_POP([C++])
12337         CXXFLAGS=$save_CXXFLAGS
12338         AC_MSG_RESULT([${can_compile_avx}])
12339         if test "${can_compile_avx}" = "yes" ; then
12340             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12341         fi
12343         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12344         AC_LANG_PUSH([C++])
12345         save_CXXFLAGS=$CXXFLAGS
12346         CXXFLAGS="$CXXFLAGS $flag_avx2"
12347         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12348             #include <immintrin.h>
12349             int main () {
12350                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12351                 c = _mm256_maddubs_epi16(a, b);
12352                 return 0;
12353             }
12354             ])],
12355             [can_compile_avx2=yes],
12356             [can_compile_avx2=no])
12357         AC_LANG_POP([C++])
12358         CXXFLAGS=$save_CXXFLAGS
12359         AC_MSG_RESULT([${can_compile_avx2}])
12360         if test "${can_compile_avx2}" = "yes" ; then
12361             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12362         fi
12364         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12365         AC_LANG_PUSH([C++])
12366         save_CXXFLAGS=$CXXFLAGS
12367         CXXFLAGS="$CXXFLAGS $flag_avx512"
12368         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12369             #include <immintrin.h>
12370             int main () {
12371                 __m512i a = _mm512_loadu_si512(0);
12372                 __m512d v1 = _mm512_load_pd(0);
12373                 // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
12374                 __m512d v2 = _mm512_abs_pd(v1);
12375                 return 0;
12376             }
12377             ])],
12378             [can_compile_avx512=yes],
12379             [can_compile_avx512=no])
12380         AC_LANG_POP([C++])
12381         CXXFLAGS=$save_CXXFLAGS
12382         AC_MSG_RESULT([${can_compile_avx512}])
12383         if test "${can_compile_avx512}" = "yes" ; then
12384             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12385             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
12386         fi
12388         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12389         AC_LANG_PUSH([C++])
12390         save_CXXFLAGS=$CXXFLAGS
12391         CXXFLAGS="$CXXFLAGS $flag_f16c"
12392         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12393             #include <immintrin.h>
12394             int main () {
12395                 __m128i a = _mm_set1_epi32 (0);
12396                 __m128 c;
12397                 c = _mm_cvtph_ps(a);
12398                 return 0;
12399             }
12400             ])],
12401             [can_compile_f16c=yes],
12402             [can_compile_f16c=no])
12403         AC_LANG_POP([C++])
12404         CXXFLAGS=$save_CXXFLAGS
12405         AC_MSG_RESULT([${can_compile_f16c}])
12406         if test "${can_compile_f16c}" = "yes" ; then
12407             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12408         fi
12410         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12411         AC_LANG_PUSH([C++])
12412         save_CXXFLAGS=$CXXFLAGS
12413         CXXFLAGS="$CXXFLAGS $flag_fma"
12414         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12415             #include <immintrin.h>
12416             int main () {
12417                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12418                 d = _mm256_fmadd_ps(a, b, c);
12419                 return 0;
12420             }
12421             ])],
12422             [can_compile_fma=yes],
12423             [can_compile_fma=no])
12424         AC_LANG_POP([C++])
12425         CXXFLAGS=$save_CXXFLAGS
12426         AC_MSG_RESULT([${can_compile_fma}])
12427         if test "${can_compile_fma}" = "yes" ; then
12428             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12429         fi
12431         CXX="$save_CXX"
12432     fi
12435 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12437 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12438     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12439     AC_LANG_PUSH([C])
12440     save_CC="$CC"
12441     CC="$LO_CLANG_CC"
12442     save_CFLAGS=$CFLAGS
12443     CFLAGS="$CFLAGS --ccache-skip -O2 -Werror"
12444     dnl an empty program will do, we're checking the compiler flags
12445     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12446                       [use_ccache=yes], [use_ccache=no])
12447     CFLAGS=$save_CFLAGS
12448     CC=$save_CC
12449     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12450         AC_MSG_RESULT([yes])
12451     else
12452         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12453         AC_MSG_RESULT([no])
12454     fi
12455     AC_LANG_POP([C])
12457     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12458     AC_LANG_PUSH([C++])
12459     save_CXX="$CXX"
12460     CXX="$LO_CLANG_CXX"
12461     save_CXXFLAGS=$CXXFLAGS
12462     CXXFLAGS="$CXXFLAGS --ccache-skip -O2 -Werror"
12463     dnl an empty program will do, we're checking the compiler flags
12464     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12465                       [use_ccache=yes], [use_ccache=no])
12466     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12467         AC_MSG_RESULT([yes])
12468     else
12469         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12470         AC_MSG_RESULT([no])
12471     fi
12472     CXXFLAGS=$save_CXXFLAGS
12473     CXX=$save_CXX
12474     AC_LANG_POP([C++])
12477 AC_SUBST(LO_CLANG_CC)
12478 AC_SUBST(LO_CLANG_CXX)
12479 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12480 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12481 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12482 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12483 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12484 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12485 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12486 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F)
12487 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12488 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12489 AC_SUBST(CLANG_USE_LD)
12490 AC_SUBST([HAVE_LO_CLANG_DLLEXPORTINLINES])
12492 SYSTEM_GPGMEPP=
12494 if test "$enable_gpgmepp" = no; then
12495     AC_MSG_CHECKING([whether to enable gpgmepp])
12496     AC_MSG_RESULT([no])
12497 elif test "$enable_mpl_subset" = "yes"; then
12498     AC_MSG_CHECKING([whether gpgmepp should be disabled due to building just MPL])
12499     AC_MSG_RESULT([yes])
12500 elif test "$enable_fuzzers" = "yes"; then
12501     AC_MSG_CHECKING([whether gpgmepp should be disabled due to oss-fuzz])
12502     AC_MSG_RESULT([yes])
12503 elif test "$_os" = "Linux" -o "$_os" = "Darwin" -o "$_os" = "WINNT" ; then
12504     dnl ===================================================================
12505     dnl Check for system gpgme
12506     dnl ===================================================================
12507     AC_MSG_CHECKING([which gpgmepp to use])
12508     if test "$with_system_gpgmepp" = "yes"; then
12509         AC_MSG_RESULT([external])
12510         SYSTEM_GPGMEPP=TRUE
12512         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12513         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12514             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp >= 1.14 development package])], [])
12515         # progress_callback is the only func with plain C linkage
12516         # checking for it also filters out older, KDE-dependent libgpgmepp versions
12517         AC_CHECK_LIB(gpgmepp, progress_callback, [ GPGMEPP_LIBS=-lgpgmepp ],
12518             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12519         AC_CHECK_HEADER(gpgme.h, [],
12520             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12521     else
12522         AC_MSG_RESULT([internal])
12523         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12525         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12526         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12527         if test "$_os" != "WINNT"; then
12528             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12529             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12530         fi
12531     fi
12532     ENABLE_GPGMEPP=TRUE
12533     AC_DEFINE([HAVE_FEATURE_GPGME])
12534     AC_PATH_PROG(GPG, gpg)
12535     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12536     # so let's exclude that manually for the moment
12537     if test -n "$GPG" -a "$_os" != "WINNT"; then
12538         # make sure we not only have a working gpgme, but a full working
12539         # gpg installation to run OpenPGP signature verification
12540         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12541     fi
12542     if test "$_os" = "Linux"; then
12543       uid=`id -u`
12544       AC_MSG_CHECKING([for /run/user/$uid])
12545       if test -d /run/user/$uid; then
12546         AC_MSG_RESULT([yes])
12547         AC_PATH_PROG(GPGCONF, gpgconf)
12549         # Older versions of gpgconf are not working as expected, since
12550         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12551         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12552         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12553         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12554         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12555         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12556         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12557           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12558           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12559           if $GPGCONF --dump-options > /dev/null ; then
12560             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12561               AC_MSG_RESULT([yes])
12562               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12563               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12564             else
12565               AC_MSG_RESULT([no])
12566             fi
12567           else
12568             AC_MSG_RESULT([no. missing or broken gpgconf?])
12569           fi
12570         else
12571           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12572         fi
12573       else
12574         AC_MSG_RESULT([no])
12575      fi
12576    fi
12578 AC_SUBST(ENABLE_GPGMEPP)
12579 AC_SUBST(SYSTEM_GPGMEPP)
12580 AC_SUBST(GPG_ERROR_CFLAGS)
12581 AC_SUBST(GPG_ERROR_LIBS)
12582 AC_SUBST(LIBASSUAN_CFLAGS)
12583 AC_SUBST(LIBASSUAN_LIBS)
12584 AC_SUBST(GPGMEPP_CFLAGS)
12585 AC_SUBST(GPGMEPP_LIBS)
12587 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12588 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12589     AC_MSG_RESULT([yes])
12590     ENABLE_MEDIAWIKI=TRUE
12591     BUILD_TYPE="$BUILD_TYPE XSLTML"
12592     if test  "x$with_java" = "xno"; then
12593         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12594     fi
12595 else
12596     AC_MSG_RESULT([no])
12597     ENABLE_MEDIAWIKI=
12598     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12600 AC_SUBST(ENABLE_MEDIAWIKI)
12602 AC_MSG_CHECKING([whether to build the Report Builder])
12603 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12604     AC_MSG_RESULT([yes])
12605     ENABLE_REPORTBUILDER=TRUE
12606     AC_MSG_CHECKING([which jfreereport libs to use])
12607     if test "$with_system_jfreereport" = "yes"; then
12608         SYSTEM_JFREEREPORT=TRUE
12609         AC_MSG_RESULT([external])
12610         if test -z $SAC_JAR; then
12611             SAC_JAR=/usr/share/java/sac.jar
12612         fi
12613         if ! test -f $SAC_JAR; then
12614              AC_MSG_ERROR(sac.jar not found.)
12615         fi
12617         if test -z $LIBXML_JAR; then
12618             if test -f /usr/share/java/libxml-1.0.0.jar; then
12619                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12620             elif test -f /usr/share/java/libxml.jar; then
12621                 LIBXML_JAR=/usr/share/java/libxml.jar
12622             else
12623                 AC_MSG_ERROR(libxml.jar replacement not found.)
12624             fi
12625         elif ! test -f $LIBXML_JAR; then
12626             AC_MSG_ERROR(libxml.jar not found.)
12627         fi
12629         if test -z $FLUTE_JAR; then
12630             if test -f /usr/share/java/flute-1.3.0.jar; then
12631                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12632             elif test -f /usr/share/java/flute.jar; then
12633                 FLUTE_JAR=/usr/share/java/flute.jar
12634             else
12635                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12636             fi
12637         elif ! test -f $FLUTE_JAR; then
12638             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12639         fi
12641         if test -z $JFREEREPORT_JAR; then
12642             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12643                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12644             elif test -f /usr/share/java/flow-engine.jar; then
12645                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12646             else
12647                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12648             fi
12649         elif ! test -f  $JFREEREPORT_JAR; then
12650                 AC_MSG_ERROR(jfreereport.jar not found.)
12651         fi
12653         if test -z $LIBLAYOUT_JAR; then
12654             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12655                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12656             elif test -f /usr/share/java/liblayout.jar; then
12657                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12658             else
12659                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12660             fi
12661         elif ! test -f $LIBLAYOUT_JAR; then
12662                 AC_MSG_ERROR(liblayout.jar not found.)
12663         fi
12665         if test -z $LIBLOADER_JAR; then
12666             if test -f /usr/share/java/libloader-1.0.0.jar; then
12667                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
12668             elif test -f /usr/share/java/libloader.jar; then
12669                 LIBLOADER_JAR=/usr/share/java/libloader.jar
12670             else
12671                 AC_MSG_ERROR(libloader.jar replacement not found.)
12672             fi
12673         elif ! test -f  $LIBLOADER_JAR; then
12674             AC_MSG_ERROR(libloader.jar not found.)
12675         fi
12677         if test -z $LIBFORMULA_JAR; then
12678             if test -f /usr/share/java/libformula-0.2.0.jar; then
12679                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
12680             elif test -f /usr/share/java/libformula.jar; then
12681                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
12682             else
12683                 AC_MSG_ERROR(libformula.jar replacement not found.)
12684             fi
12685         elif ! test -f $LIBFORMULA_JAR; then
12686                 AC_MSG_ERROR(libformula.jar not found.)
12687         fi
12689         if test -z $LIBREPOSITORY_JAR; then
12690             if test -f /usr/share/java/librepository-1.0.0.jar; then
12691                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
12692             elif test -f /usr/share/java/librepository.jar; then
12693                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
12694             else
12695                 AC_MSG_ERROR(librepository.jar replacement not found.)
12696             fi
12697         elif ! test -f $LIBREPOSITORY_JAR; then
12698             AC_MSG_ERROR(librepository.jar not found.)
12699         fi
12701         if test -z $LIBFONTS_JAR; then
12702             if test -f /usr/share/java/libfonts-1.0.0.jar; then
12703                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
12704             elif test -f /usr/share/java/libfonts.jar; then
12705                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
12706             else
12707                 AC_MSG_ERROR(libfonts.jar replacement not found.)
12708             fi
12709         elif ! test -f $LIBFONTS_JAR; then
12710                 AC_MSG_ERROR(libfonts.jar not found.)
12711         fi
12713         if test -z $LIBSERIALIZER_JAR; then
12714             if test -f /usr/share/java/libserializer-1.0.0.jar; then
12715                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
12716             elif test -f /usr/share/java/libserializer.jar; then
12717                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
12718             else
12719                 AC_MSG_ERROR(libserializer.jar replacement not found.)
12720             fi
12721         elif ! test -f $LIBSERIALIZER_JAR; then
12722                 AC_MSG_ERROR(libserializer.jar not found.)
12723         fi
12725         if test -z $LIBBASE_JAR; then
12726             if test -f /usr/share/java/libbase-1.0.0.jar; then
12727                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
12728             elif test -f /usr/share/java/libbase.jar; then
12729                 LIBBASE_JAR=/usr/share/java/libbase.jar
12730             else
12731                 AC_MSG_ERROR(libbase.jar replacement not found.)
12732             fi
12733         elif ! test -f $LIBBASE_JAR; then
12734             AC_MSG_ERROR(libbase.jar not found.)
12735         fi
12737     else
12738         AC_MSG_RESULT([internal])
12739         SYSTEM_JFREEREPORT=
12740         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
12741         NEED_ANT=TRUE
12742     fi
12743 else
12744     AC_MSG_RESULT([no])
12745     ENABLE_REPORTBUILDER=
12746     SYSTEM_JFREEREPORT=
12748 AC_SUBST(ENABLE_REPORTBUILDER)
12749 AC_SUBST(SYSTEM_JFREEREPORT)
12750 AC_SUBST(SAC_JAR)
12751 AC_SUBST(LIBXML_JAR)
12752 AC_SUBST(FLUTE_JAR)
12753 AC_SUBST(JFREEREPORT_JAR)
12754 AC_SUBST(LIBBASE_JAR)
12755 AC_SUBST(LIBLAYOUT_JAR)
12756 AC_SUBST(LIBLOADER_JAR)
12757 AC_SUBST(LIBFORMULA_JAR)
12758 AC_SUBST(LIBREPOSITORY_JAR)
12759 AC_SUBST(LIBFONTS_JAR)
12760 AC_SUBST(LIBSERIALIZER_JAR)
12762 # scripting provider for BeanShell?
12763 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
12764 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
12765     AC_MSG_RESULT([yes])
12766     ENABLE_SCRIPTING_BEANSHELL=TRUE
12768     dnl ===================================================================
12769     dnl Check for system beanshell
12770     dnl ===================================================================
12771     AC_MSG_CHECKING([which beanshell to use])
12772     if test "$with_system_beanshell" = "yes"; then
12773         AC_MSG_RESULT([external])
12774         SYSTEM_BSH=TRUE
12775         if test -z $BSH_JAR; then
12776             BSH_JAR=/usr/share/java/bsh.jar
12777         fi
12778         if ! test -f $BSH_JAR; then
12779             AC_MSG_ERROR(bsh.jar not found.)
12780         fi
12781     else
12782         AC_MSG_RESULT([internal])
12783         SYSTEM_BSH=
12784         BUILD_TYPE="$BUILD_TYPE BSH"
12785     fi
12786 else
12787     AC_MSG_RESULT([no])
12788     ENABLE_SCRIPTING_BEANSHELL=
12789     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
12791 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
12792 AC_SUBST(SYSTEM_BSH)
12793 AC_SUBST(BSH_JAR)
12795 # scripting provider for JavaScript?
12796 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
12797 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
12798     AC_MSG_RESULT([yes])
12799     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
12801     dnl ===================================================================
12802     dnl Check for system rhino
12803     dnl ===================================================================
12804     AC_MSG_CHECKING([which rhino to use])
12805     if test "$with_system_rhino" = "yes"; then
12806         AC_MSG_RESULT([external])
12807         SYSTEM_RHINO=TRUE
12808         if test -z $RHINO_JAR; then
12809             RHINO_JAR=/usr/share/java/js.jar
12810         fi
12811         if ! test -f $RHINO_JAR; then
12812             AC_MSG_ERROR(js.jar not found.)
12813         fi
12814     else
12815         AC_MSG_RESULT([internal])
12816         SYSTEM_RHINO=
12817         BUILD_TYPE="$BUILD_TYPE RHINO"
12818         NEED_ANT=TRUE
12819     fi
12820 else
12821     AC_MSG_RESULT([no])
12822     ENABLE_SCRIPTING_JAVASCRIPT=
12823     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
12825 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
12826 AC_SUBST(SYSTEM_RHINO)
12827 AC_SUBST(RHINO_JAR)
12829 # This is only used in Qt5/Qt6/KF5 checks to determine if /usr/lib64
12830 # paths should be added to library search path. So lets put all 64-bit
12831 # platforms there.
12832 supports_multilib=
12833 case "$host_cpu" in
12834 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el)
12835     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
12836         supports_multilib="yes"
12837     fi
12838     ;;
12840     ;;
12841 esac
12843 dnl ===================================================================
12844 dnl QT5 Integration
12845 dnl ===================================================================
12847 QT5_CFLAGS=""
12848 QT5_LIBS=""
12849 QMAKE5="qmake"
12850 MOC5="moc"
12851 QT5_GOBJECT_CFLAGS=""
12852 QT5_GOBJECT_LIBS=""
12853 QT5_HAVE_GOBJECT=""
12854 QT5_PLATFORMS_SRCDIR=""
12855 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12856         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
12857         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12858 then
12859     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
12860     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
12862     if test -n "$supports_multilib"; then
12863         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
12864     fi
12866     qt5_test_include="QtWidgets/qapplication.h"
12867     if test "$_os" = "Emscripten"; then
12868         qt5_test_library="libQt5Widgets.a"
12869     else
12870         qt5_test_library="libQt5Widgets.so"
12871     fi
12873     dnl Check for qmake5
12874     if test -n "$QT5DIR"; then
12875         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
12876     else
12877         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
12878     fi
12879     if test "$QMAKE5" = "no"; then
12880         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12881     else
12882         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
12883         if test -z "$qmake5_test_ver"; then
12884             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12885         fi
12886         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
12887         qt5_minimal_minor="6"
12888         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
12889             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
12890         else
12891             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
12892         fi
12893     fi
12895     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
12896     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
12897     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
12898     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
12900     AC_MSG_CHECKING([for Qt5 headers])
12901     qt5_incdir="no"
12902     for inc_dir in $qt5_incdirs; do
12903         if test -r "$inc_dir/$qt5_test_include"; then
12904             qt5_incdir="$inc_dir"
12905             break
12906         fi
12907     done
12908     AC_MSG_RESULT([$qt5_incdir])
12909     if test "x$qt5_incdir" = "xno"; then
12910         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12911     fi
12912     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
12913     AC_LANG_PUSH([C++])
12914     save_CPPFLAGS=$CPPFLAGS
12915     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
12916     AC_CHECK_HEADER(QtCore/qconfig.h, [],
12917         [AC_MSG_ERROR(qconfig.h header not found.)], [])
12918     CPPFLAGS=$save_CPPFLAGS
12919     AC_LANG_POP([C++])
12921     AC_MSG_CHECKING([for Qt5 libraries])
12922     qt5_libdir="no"
12923     for lib_dir in $qt5_libdirs; do
12924         if test -r "$lib_dir/$qt5_test_library"; then
12925             qt5_libdir="$lib_dir"
12926             break
12927         fi
12928     done
12929     AC_MSG_RESULT([$qt5_libdir])
12930     if test "x$qt5_libdir" = "xno"; then
12931         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12932     fi
12934     if test "$_os" = "Emscripten"; then
12935         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
12936             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
12937         fi
12938         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
12939             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
12940         fi
12941     fi
12943     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
12944     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12945     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
12946     if test "$_os" = "Emscripten"; then
12947         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
12948     fi
12950     if test "$USING_X11" = TRUE; then
12951         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
12952         PKG_CHECK_MODULES(QT5_XCB_ICCCM,[xcb-icccm],[
12953             QT5_HAVE_XCB_ICCCM=1
12954             AC_DEFINE(QT5_HAVE_XCB_ICCCM)
12955         ],[
12956             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)])
12957             add_warning "XCB ICCCM not found, which is needed for Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)"
12958         ])
12959         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
12960         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
12961         QT5_USING_X11=1
12962         AC_DEFINE(QT5_USING_X11)
12963     fi
12965     dnl Check for Meta Object Compiler
12967     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
12968     if test "$MOC5" = "no"; then
12969         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
12970 the root of your Qt installation by exporting QT5DIR before running "configure".])
12971     fi
12973     if test "$test_gstreamer_1_0" = yes; then
12974         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
12975                 QT5_HAVE_GOBJECT=1
12976                 AC_DEFINE(QT5_HAVE_GOBJECT)
12977             ],
12978             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
12979         )
12980     fi
12982 AC_SUBST(QT5_CFLAGS)
12983 AC_SUBST(QT5_LIBS)
12984 AC_SUBST(MOC5)
12985 AC_SUBST(QT5_GOBJECT_CFLAGS)
12986 AC_SUBST(QT5_GOBJECT_LIBS)
12987 AC_SUBST(QT5_HAVE_GOBJECT)
12988 AC_SUBST(QT5_PLATFORMS_SRCDIR)
12990 dnl ===================================================================
12991 dnl QT6 Integration
12992 dnl ===================================================================
12994 QT6_CFLAGS=""
12995 QT6_LIBS=""
12996 QMAKE6="qmake"
12997 MOC6="moc"
12998 QT6_PLATFORMS_SRCDIR=""
12999 if test \( "$test_qt6" = "yes" -a "$ENABLE_QT6" = "TRUE" \)
13000 then
13001     qt6_incdirs="$QT6INC /usr/include/qt6 /usr/include $x_includes"
13002     qt6_libdirs="$QT6LIB /usr/lib/qt6 /usr/lib $x_libraries"
13004     if test -n "$supports_multilib"; then
13005         qt6_libdirs="$qt6_libdirs /usr/lib64/qt6 /usr/lib64/qt /usr/lib64"
13006     fi
13008     qt6_test_include="QtWidgets/qapplication.h"
13009     if test "$_os" = "Emscripten"; then
13010         qt6_test_library="libQt6Widgets.a"
13011     else
13012         qt6_test_library="libQt6Widgets.so"
13013     fi
13015     dnl Check for qmake6
13016     if test -n "$QT6DIR"; then
13017         AC_PATH_PROG(QMAKE6, [qmake], no, [$QT6DIR/bin])
13018     else
13019         AC_PATH_PROGS(QMAKE6, [qmake-qt6 qmake], no)
13020     fi
13021     if test "$QMAKE6" = "no"; then
13022         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13023     else
13024         qmake6_test_ver="`$QMAKE6 -v 2>&1 | $SED -n -e 's/^Using Qt version \(6\.[[0-9.]]\+\).*$/\1/p'`"
13025         if test -z "$qmake6_test_ver"; then
13026             AC_MSG_ERROR([Wrong qmake for Qt6 found. Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13027         fi
13028         AC_MSG_NOTICE([Detected Qt6 version: $qmake6_test_ver])
13029     fi
13031     qt6_incdirs="`$QMAKE6 -query QT_INSTALL_HEADERS` $qt6_incdirs"
13032     qt6_libdirs="`$QMAKE6 -query QT_INSTALL_LIBS` $qt6_libdirs"
13033     qt6_platformsdir="`$QMAKE6 -query QT_INSTALL_PLUGINS`/platforms"
13034     QT6_PLATFORMS_SRCDIR="$qt6_platformsdir"
13036     AC_MSG_CHECKING([for Qt6 headers])
13037     qt6_incdir="no"
13038     for inc_dir in $qt6_incdirs; do
13039         if test -r "$inc_dir/$qt6_test_include"; then
13040             qt6_incdir="$inc_dir"
13041             break
13042         fi
13043     done
13044     AC_MSG_RESULT([$qt6_incdir])
13045     if test "x$qt6_incdir" = "xno"; then
13046         AC_MSG_ERROR([Qt6 headers not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13047     fi
13048     # check for scenario: qt6-qtbase-devel-*.86_64 installed but host is i686
13049     AC_LANG_PUSH([C++])
13050     save_CPPFLAGS=$CPPFLAGS
13051     CPPFLAGS="${CPPFLAGS} -I${qt6_incdir}"
13052     AC_CHECK_HEADER(QtCore/qconfig.h, [],
13053         [AC_MSG_ERROR(qconfig.h header not found.)], [])
13054     CPPFLAGS=$save_CPPFLAGS
13055     AC_LANG_POP([C++])
13057     AC_MSG_CHECKING([for Qt6 libraries])
13058     qt6_libdir="no"
13059     for lib_dir in $qt6_libdirs; do
13060         if test -r "$lib_dir/$qt6_test_library"; then
13061             qt6_libdir="$lib_dir"
13062             break
13063         fi
13064     done
13065     AC_MSG_RESULT([$qt6_libdir])
13066     if test "x$qt6_libdir" = "xno"; then
13067         AC_MSG_ERROR([Qt6 libraries not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13068     fi
13070     if test "$_os" = "Emscripten"; then
13071         if test ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html ; then
13072             QT6_PLATFORMS_SRCDIR="${QT6_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
13073         fi
13074         if test ! -f "${qt6_platformsdir}"/libqwasm.a -o ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html; then
13075             AC_MSG_ERROR([No Qt6 WASM QPA plugin found in ${qt6_platformsdir} or ${QT6_PLATFORMS_SRCDIR}])
13076         fi
13077     fi
13079     QT6_CFLAGS="-I$qt6_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13080     QT6_CFLAGS=$(printf '%s' "$QT6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13081     QT6_LIBS="-L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
13082     if test "$_os" = "Emscripten"; then
13083         QT6_LIBS="$QT6_LIBS -lqtpcre2 -lQt6EventDispatcherSupport -lQt6FontDatabaseSupport -L${qt6_platformsdir} -lqwasm"
13084     fi
13086     if test "$USING_X11" = TRUE; then
13087         PKG_CHECK_MODULES(QT6_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for key modifier handling in X11.])])
13088         QT6_CFLAGS="$QT6_CFLAGS $QT6_XCB_CFLAGS"
13089         QT6_LIBS="$QT6_LIBS $QT6_XCB_LIBS"
13090         QT6_USING_X11=1
13091         AC_DEFINE(QT6_USING_X11)
13092     fi
13094     dnl Check for Meta Object Compiler
13096     AC_PATH_PROGS( MOC6, [moc-qt6 moc], no, [`dirname $qt6_libdir`/libexec:$QT6DIR/libexec:$PATH])
13097     if test "$MOC6" = "no"; then
13098         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13099 the root of your Qt installation by exporting QT6DIR before running "configure".])
13100     fi
13102 AC_SUBST(QT6_CFLAGS)
13103 AC_SUBST(QT6_LIBS)
13104 AC_SUBST(MOC6)
13105 AC_SUBST(QT6_PLATFORMS_SRCDIR)
13107 dnl ===================================================================
13108 dnl KF5 Integration
13109 dnl ===================================================================
13111 KF5_CFLAGS=""
13112 KF5_LIBS=""
13113 KF5_CONFIG="kf5-config"
13114 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13115         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13116 then
13117     if test "$OS" = "HAIKU"; then
13118         haiku_arch="`echo $RTL_ARCH | tr X x`"
13119         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13120         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13121     fi
13123     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
13124     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
13125     if test -n "$supports_multilib"; then
13126         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
13127     fi
13129     kf5_test_include="KF5/KIOFileWidgets/KFileWidget"
13130     kf5_test_library="libKF5KIOFileWidgets.so"
13131     kf5_libdirs="$qt5_libdir $kf5_libdirs"
13133     dnl kf5 KDE4 support compatibility installed
13134     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
13135     if test "$KF5_CONFIG" != "no"; then
13136         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
13137         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
13138     fi
13140     dnl Check for KF5 headers
13141     AC_MSG_CHECKING([for KF5 headers])
13142     kf5_incdir="no"
13143     for kf5_check in $kf5_incdirs; do
13144         if test -r "$kf5_check/$kf5_test_include"; then
13145             kf5_incdir="$kf5_check/KF5"
13146             break
13147         fi
13148     done
13149     AC_MSG_RESULT([$kf5_incdir])
13150     if test "x$kf5_incdir" = "xno"; then
13151         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13152     fi
13154     dnl Check for KF5 libraries
13155     AC_MSG_CHECKING([for KF5 libraries])
13156     kf5_libdir="no"
13157     for kf5_check in $kf5_libdirs; do
13158         if test -r "$kf5_check/$kf5_test_library"; then
13159             kf5_libdir="$kf5_check"
13160             break
13161         fi
13162     done
13164     AC_MSG_RESULT([$kf5_libdir])
13165     if test "x$kf5_libdir" = "xno"; then
13166         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13167     fi
13169     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"
13170     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13171     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13173     if test "$USING_X11" = TRUE; then
13174         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
13175     fi
13177     AC_LANG_PUSH([C++])
13178     save_CXXFLAGS=$CXXFLAGS
13179     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
13180     AC_MSG_CHECKING([whether KDE is >= 5.0])
13181        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13182 #include <kcoreaddons_version.h>
13184 int main(int argc, char **argv) {
13185        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
13186        else return 1;
13188        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13189     CXXFLAGS=$save_CXXFLAGS
13190     AC_LANG_POP([C++])
13192 AC_SUBST(KF5_CFLAGS)
13193 AC_SUBST(KF5_LIBS)
13195 dnl ===================================================================
13196 dnl Test whether to include Evolution 2 support
13197 dnl ===================================================================
13198 AC_MSG_CHECKING([whether to enable evolution 2 support])
13199 if test "$enable_evolution2" = yes; then
13200     AC_MSG_RESULT([yes])
13201     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
13202     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13203     FilterLibs "${GOBJECT_LIBS}"
13204     GOBJECT_LIBS="${filteredlibs}"
13205     ENABLE_EVOAB2="TRUE"
13206 else
13207     AC_MSG_RESULT([no])
13209 AC_SUBST(ENABLE_EVOAB2)
13210 AC_SUBST(GOBJECT_CFLAGS)
13211 AC_SUBST(GOBJECT_LIBS)
13213 dnl ===================================================================
13214 dnl Test which themes to include
13215 dnl ===================================================================
13216 AC_MSG_CHECKING([which themes to include])
13217 # if none given use default subset of available themes
13218 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
13219     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"
13222 WITH_THEMES=""
13223 if test "x$with_theme" != "xno"; then
13224     for theme in $with_theme; do
13225         case $theme in
13226         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" ;;
13227         default) real_theme=colibre ;;
13228         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
13229         esac
13230         WITH_THEMES=`echo "$WITH_THEMES $real_theme"|tr '\ ' '\n'|sort|uniq|tr '\n' '\ '`
13231     done
13233 AC_MSG_RESULT([$WITH_THEMES])
13234 AC_SUBST([WITH_THEMES])
13235 # FIXME: remove this, and the convenience default->colibre remapping after a grace period
13236 for theme in $with_theme; do
13237     case $theme in
13238     default) AC_MSG_WARN([--with-theme=default is deprecated and will be removed, use --with-theme=colibre]) ;;
13239     *) ;;
13240     esac
13241 done
13243 ###############################################################################
13244 # Extensions checking
13245 ###############################################################################
13246 AC_MSG_CHECKING([for extensions integration])
13247 if test "x$enable_extension_integration" != "xno"; then
13248     WITH_EXTENSION_INTEGRATION=TRUE
13249     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
13250     AC_MSG_RESULT([yes, use integration])
13251 else
13252     WITH_EXTENSION_INTEGRATION=
13253     AC_MSG_RESULT([no, do not integrate])
13255 AC_SUBST(WITH_EXTENSION_INTEGRATION)
13257 dnl Should any extra extensions be included?
13258 dnl There are standalone tests for each of these below.
13259 WITH_EXTRA_EXTENSIONS=
13260 AC_SUBST([WITH_EXTRA_EXTENSIONS])
13262 libo_CHECK_EXTENSION([ConvertTextToNumber],[CT2N],[ct2n],[ct2n],[])
13263 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
13264 if test "x$with_java" != "xno"; then
13265     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
13266     libo_CHECK_EXTENSION([LanguageTool],[LANGUAGETOOL],[languagetool],[languagetool],[])
13269 AC_MSG_CHECKING([whether to build opens___.ttf])
13270 if test "$enable_build_opensymbol" = "yes"; then
13271     AC_MSG_RESULT([yes])
13272     AC_PATH_PROG(FONTFORGE, fontforge)
13273     if test -z "$FONTFORGE"; then
13274         AC_MSG_ERROR([fontforge not installed])
13275     fi
13276 else
13277     AC_MSG_RESULT([no])
13278     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
13280 AC_SUBST(FONTFORGE)
13282 dnl ===================================================================
13283 dnl Test whether to include fonts
13284 dnl ===================================================================
13285 AC_MSG_CHECKING([whether to include third-party fonts])
13286 if test "$with_fonts" != "no"; then
13287     AC_MSG_RESULT([yes])
13288     WITH_FONTS=TRUE
13289     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
13290     AC_DEFINE(HAVE_MORE_FONTS)
13291 else
13292     AC_MSG_RESULT([no])
13293     WITH_FONTS=
13294     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
13296 AC_SUBST(WITH_FONTS)
13299 dnl ===================================================================
13300 dnl Test whether to enable online update service
13301 dnl ===================================================================
13302 AC_MSG_CHECKING([whether to enable online update])
13303 ENABLE_ONLINE_UPDATE=
13304 ENABLE_ONLINE_UPDATE_MAR=
13305 UPDATE_CONFIG=
13306 if test "$enable_online_update" = ""; then
13307     AC_MSG_RESULT([no])
13308 else
13309     if test "$enable_online_update" = "mar"; then
13310         AC_MSG_RESULT([yes - MAR-based online update])
13311         ENABLE_ONLINE_UPDATE_MAR="TRUE"
13312         if test "$with_update_config" = ""; then
13313             AC_MSG_ERROR([mar based online updater needs an update config specified with "with-update-config])
13314         fi
13315         UPDATE_CONFIG="$with_update_config"
13316         AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
13317     elif test "$enable_online_update" = "yes"; then
13318         AC_MSG_RESULT([yes])
13319         ENABLE_ONLINE_UPDATE="TRUE"
13320     else
13321         AC_MSG_RESULT([no])
13322     fi
13324 AC_SUBST(ENABLE_ONLINE_UPDATE)
13325 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
13326 AC_SUBST(UPDATE_CONFIG)
13329 PRIVACY_POLICY_URL="$with_privacy_policy_url"
13330 if test "$ENABLE_ONLINE_UPDATE" = TRUE -o "$ENABLE_BREAKPAD" = "TRUE"; then
13331     if test "x$with_privacy_policy_url" = "xundefined"; then
13332         AC_MSG_FAILURE([online update or breakpad/crashreporting are enabled, but no --with-privacy-policy-url=... was provided])
13333     fi
13335 AC_SUBST(PRIVACY_POLICY_URL)
13336 dnl ===================================================================
13337 dnl Test whether we need bzip2
13338 dnl ===================================================================
13339 SYSTEM_BZIP2=
13340 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE"; then
13341     AC_MSG_CHECKING([whether to use system bzip2])
13342     if test "$with_system_bzip2" = yes; then
13343         SYSTEM_BZIP2=TRUE
13344         AC_MSG_RESULT([yes])
13345         PKG_CHECK_MODULES(BZIP2, bzip2)
13346         FilterLibs "${BZIP2_LIBS}"
13347         BZIP2_LIBS="${filteredlibs}"
13348     else
13349         AC_MSG_RESULT([no])
13350         BUILD_TYPE="$BUILD_TYPE BZIP2"
13351     fi
13353 AC_SUBST(SYSTEM_BZIP2)
13354 AC_SUBST(BZIP2_CFLAGS)
13355 AC_SUBST(BZIP2_LIBS)
13357 dnl ===================================================================
13358 dnl Test whether to enable extension update
13359 dnl ===================================================================
13360 AC_MSG_CHECKING([whether to enable extension update])
13361 ENABLE_EXTENSION_UPDATE=
13362 if test "x$enable_extension_update" = "xno"; then
13363     AC_MSG_RESULT([no])
13364 else
13365     AC_MSG_RESULT([yes])
13366     ENABLE_EXTENSION_UPDATE="TRUE"
13367     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
13368     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
13370 AC_SUBST(ENABLE_EXTENSION_UPDATE)
13373 dnl ===================================================================
13374 dnl Test whether to create MSI with LIMITUI=1 (silent install)
13375 dnl ===================================================================
13376 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
13377 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
13378     AC_MSG_RESULT([no])
13379     ENABLE_SILENT_MSI=
13380 else
13381     AC_MSG_RESULT([yes])
13382     ENABLE_SILENT_MSI=TRUE
13383     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
13385 AC_SUBST(ENABLE_SILENT_MSI)
13387 AC_MSG_CHECKING([whether and how to use Xinerama])
13388 if test "$_os" = "Linux" -o "$_os" = "FreeBSD"; then
13389     if test "$x_libraries" = "default_x_libraries"; then
13390         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
13391         if test "x$XINERAMALIB" = x; then
13392            XINERAMALIB="/usr/lib"
13393         fi
13394     else
13395         XINERAMALIB="$x_libraries"
13396     fi
13397     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13398         # we have both versions, let the user decide but use the dynamic one
13399         # per default
13400         USE_XINERAMA=TRUE
13401         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13402             XINERAMA_LINK=dynamic
13403         else
13404             XINERAMA_LINK=static
13405         fi
13406     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13407         # we have only the dynamic version
13408         USE_XINERAMA=TRUE
13409         XINERAMA_LINK=dynamic
13410     elif test -e "$XINERAMALIB/libXinerama.a"; then
13411         # static version
13412         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13413             USE_XINERAMA=TRUE
13414             XINERAMA_LINK=static
13415         else
13416             USE_XINERAMA=
13417             XINERAMA_LINK=none
13418         fi
13419     else
13420         # no Xinerama
13421         USE_XINERAMA=
13422         XINERAMA_LINK=none
13423     fi
13424     if test "$USE_XINERAMA" = "TRUE"; then
13425         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13426         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13427             [AC_MSG_ERROR(Xinerama header not found.)], [])
13428         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13429         if test "x$XEXTLIB" = x; then
13430            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13431         fi
13432         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13433         if test "$_os" = "FreeBSD"; then
13434             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13435         fi
13436         if test "$_os" = "Linux"; then
13437             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13438         fi
13439         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13440             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13441     else
13442         AC_MSG_RESULT([no, libXinerama not found or wrong architecture.])
13443     fi
13444 else
13445     USE_XINERAMA=
13446     XINERAMA_LINK=none
13447     AC_MSG_RESULT([no])
13449 AC_SUBST(USE_XINERAMA)
13450 AC_SUBST(XINERAMA_LINK)
13452 dnl ===================================================================
13453 dnl Test whether to build cairo or rely on the system version
13454 dnl ===================================================================
13456 if test "$test_cairo" = "yes"; then
13457     AC_MSG_CHECKING([whether to use the system cairo])
13459     : ${with_system_cairo:=$with_system_libs}
13460     if test "$with_system_cairo" = "yes"; then
13461         SYSTEM_CAIRO=TRUE
13462         AC_MSG_RESULT([yes])
13464         PKG_CHECK_MODULES( CAIRO, cairo >= 1.8.0 )
13465         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13466         FilterLibs "${CAIRO_LIBS}"
13467         CAIRO_LIBS="${filteredlibs}"
13469         if test "$test_xrender" = "yes"; then
13470             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13471             AC_LANG_PUSH([C])
13472             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13473 #ifdef PictStandardA8
13474 #else
13475       return fail;
13476 #endif
13477 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13479             AC_LANG_POP([C])
13480         fi
13481     else
13482         AC_MSG_RESULT([no])
13483         BUILD_TYPE="$BUILD_TYPE CAIRO"
13484     fi
13486     if test "$enable_cairo_canvas" != no; then
13487         AC_DEFINE(ENABLE_CAIRO_CANVAS)
13488         ENABLE_CAIRO_CANVAS=TRUE
13489     fi
13492 AC_SUBST(CAIRO_CFLAGS)
13493 AC_SUBST(CAIRO_LIBS)
13494 AC_SUBST(ENABLE_CAIRO_CANVAS)
13495 AC_SUBST(SYSTEM_CAIRO)
13497 dnl ===================================================================
13498 dnl Test whether to use avahi
13499 dnl ===================================================================
13500 if test "$_os" = "WINNT"; then
13501     # Windows uses bundled mDNSResponder
13502     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13503 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13504     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13505                       [ENABLE_AVAHI="TRUE"])
13506     AC_DEFINE(HAVE_FEATURE_AVAHI)
13507     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13508     FilterLibs "${AVAHI_LIBS}"
13509     AVAHI_LIBS="${filteredlibs}"
13512 AC_SUBST(ENABLE_AVAHI)
13513 AC_SUBST(AVAHI_CFLAGS)
13514 AC_SUBST(AVAHI_LIBS)
13516 dnl ===================================================================
13517 dnl Test whether to use liblangtag
13518 dnl ===================================================================
13519 SYSTEM_LIBLANGTAG=
13520 AC_MSG_CHECKING([whether to use system liblangtag])
13521 if test "$with_system_liblangtag" = yes; then
13522     SYSTEM_LIBLANGTAG=TRUE
13523     AC_MSG_RESULT([yes])
13524     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
13525     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
13526     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
13527     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13528     FilterLibs "${LIBLANGTAG_LIBS}"
13529     LIBLANGTAG_LIBS="${filteredlibs}"
13530 else
13531     SYSTEM_LIBLANGTAG=
13532     AC_MSG_RESULT([no])
13533     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
13534     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
13535     if test "$COM" = "MSC"; then
13536         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
13537     else
13538         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
13539     fi
13541 AC_SUBST(SYSTEM_LIBLANGTAG)
13542 AC_SUBST(LIBLANGTAG_CFLAGS)
13543 AC_SUBST(LIBLANGTAG_LIBS)
13545 dnl ===================================================================
13546 dnl Test whether to build libpng or rely on the system version
13547 dnl ===================================================================
13549 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng],["-I${WORKDIR}/UnpackedTarball/libpng"],["-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"])
13551 dnl ===================================================================
13552 dnl Check for runtime JVM search path
13553 dnl ===================================================================
13554 if test "$ENABLE_JAVA" != ""; then
13555     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
13556     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
13557         AC_MSG_RESULT([yes])
13558         if ! test -d "$with_jvm_path"; then
13559             AC_MSG_ERROR(["$with_jvm_path" not a directory])
13560         fi
13561         if ! test -d "$with_jvm_path"jvm; then
13562             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
13563         fi
13564         JVM_ONE_PATH_CHECK="$with_jvm_path"
13565         AC_SUBST(JVM_ONE_PATH_CHECK)
13566     else
13567         AC_MSG_RESULT([no])
13568     fi
13571 dnl ===================================================================
13572 dnl Test for the presence of Ant and that it works
13573 dnl ===================================================================
13575 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
13576     ANT_HOME=; export ANT_HOME
13577     WITH_ANT_HOME=; export WITH_ANT_HOME
13578     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
13579         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
13580             if test "$_os" = "WINNT"; then
13581                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
13582             else
13583                 with_ant_home="$LODE_HOME/opt/ant"
13584             fi
13585         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
13586             with_ant_home="$LODE_HOME/opt/ant"
13587         fi
13588     fi
13589     if test -z "$with_ant_home"; then
13590         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
13591     else
13592         if test "$_os" = "WINNT"; then
13593             # AC_PATH_PROGS needs unix path
13594             with_ant_home=`cygpath -u "$with_ant_home"`
13595         fi
13596         AbsolutePath "$with_ant_home"
13597         with_ant_home=$absolute_path
13598         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
13599         WITH_ANT_HOME=$with_ant_home
13600         ANT_HOME=$with_ant_home
13601     fi
13603     if test -z "$ANT"; then
13604         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
13605     else
13606         # resolve relative or absolute symlink
13607         while test -h "$ANT"; do
13608             a_cwd=`pwd`
13609             a_basename=`basename "$ANT"`
13610             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
13611             cd "`dirname "$ANT"`"
13612             cd "`dirname "$a_script"`"
13613             ANT="`pwd`"/"`basename "$a_script"`"
13614             cd "$a_cwd"
13615         done
13617         AC_MSG_CHECKING([if $ANT works])
13618         mkdir -p conftest.dir
13619         a_cwd=$(pwd)
13620         cd conftest.dir
13621         cat > conftest.java << EOF
13622         public class conftest {
13623             int testmethod(int a, int b) {
13624                     return a + b;
13625             }
13626         }
13629         cat > conftest.xml << EOF
13630         <project name="conftest" default="conftest">
13631         <target name="conftest">
13632             <javac srcdir="." includes="conftest.java">
13633             </javac>
13634         </target>
13635         </project>
13638         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
13639         if test $? = 0 -a -f ./conftest.class; then
13640             AC_MSG_RESULT([Ant works])
13641             if test -z "$WITH_ANT_HOME"; then
13642                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
13643                 if test -z "$ANT_HOME"; then
13644                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
13645                 fi
13646             else
13647                 ANT_HOME="$WITH_ANT_HOME"
13648             fi
13649         else
13650             echo "configure: Ant test failed" >&5
13651             cat conftest.java >&5
13652             cat conftest.xml >&5
13653             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
13654         fi
13655         cd "$a_cwd"
13656         rm -fr conftest.dir
13657     fi
13658     if test -z "$ANT_HOME"; then
13659         ANT_HOME="NO_ANT_HOME"
13660     else
13661         PathFormat "$ANT_HOME"
13662         ANT_HOME="$formatted_path"
13663         PathFormat "$ANT"
13664         ANT="$formatted_path"
13665     fi
13667     dnl Checking for ant.jar
13668     if test "$ANT_HOME" != "NO_ANT_HOME"; then
13669         AC_MSG_CHECKING([Ant lib directory])
13670         if test -f $ANT_HOME/lib/ant.jar; then
13671             ANT_LIB="$ANT_HOME/lib"
13672         else
13673             if test -f $ANT_HOME/ant.jar; then
13674                 ANT_LIB="$ANT_HOME"
13675             else
13676                 if test -f /usr/share/java/ant.jar; then
13677                     ANT_LIB=/usr/share/java
13678                 else
13679                     if test -f /usr/share/ant-core/lib/ant.jar; then
13680                         ANT_LIB=/usr/share/ant-core/lib
13681                     else
13682                         if test -f $ANT_HOME/lib/ant/ant.jar; then
13683                             ANT_LIB="$ANT_HOME/lib/ant"
13684                         else
13685                             if test -f /usr/share/lib/ant/ant.jar; then
13686                                 ANT_LIB=/usr/share/lib/ant
13687                             else
13688                                 AC_MSG_ERROR([Ant libraries not found!])
13689                             fi
13690                         fi
13691                     fi
13692                 fi
13693             fi
13694         fi
13695         PathFormat "$ANT_LIB"
13696         ANT_LIB="$formatted_path"
13697         AC_MSG_RESULT([Ant lib directory found.])
13698     fi
13700     ant_minver=1.6.0
13701     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
13703     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
13704     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
13705     ant_version_major=`echo $ant_version | cut -d. -f1`
13706     ant_version_minor=`echo $ant_version | cut -d. -f2`
13707     echo "configure: ant_version $ant_version " >&5
13708     echo "configure: ant_version_major $ant_version_major " >&5
13709     echo "configure: ant_version_minor $ant_version_minor " >&5
13710     if test "$ant_version_major" -ge "2"; then
13711         AC_MSG_RESULT([yes, $ant_version])
13712     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
13713         AC_MSG_RESULT([yes, $ant_version])
13714     else
13715         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
13716     fi
13718     rm -f conftest* core core.* *.core
13720 AC_SUBST(ANT)
13721 AC_SUBST(ANT_HOME)
13722 AC_SUBST(ANT_LIB)
13724 OOO_JUNIT_JAR=
13725 HAMCREST_JAR=
13726 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
13727     AC_MSG_CHECKING([for JUnit 4])
13728     if test "$with_junit" = "yes"; then
13729         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
13730             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
13731         elif test -e /usr/share/java/junit4.jar; then
13732             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
13733         else
13734            if test -e /usr/share/lib/java/junit.jar; then
13735               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
13736            else
13737               OOO_JUNIT_JAR=/usr/share/java/junit.jar
13738            fi
13739         fi
13740     else
13741         OOO_JUNIT_JAR=$with_junit
13742     fi
13743     if test "$_os" = "WINNT"; then
13744         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
13745     fi
13746     printf 'import org.junit.Before;' > conftest.java
13747     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13748         AC_MSG_RESULT([$OOO_JUNIT_JAR])
13749     else
13750         AC_MSG_ERROR(
13751 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
13752  specify its pathname via --with-junit=..., or disable it via --without-junit])
13753     fi
13754     rm -f conftest.class conftest.java
13755     if test $OOO_JUNIT_JAR != ""; then
13756         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
13757     fi
13759     AC_MSG_CHECKING([for included Hamcrest])
13760     printf 'import org.hamcrest.BaseDescription;' > conftest.java
13761     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13762         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
13763     else
13764         AC_MSG_RESULT([Not included])
13765         AC_MSG_CHECKING([for standalone hamcrest jar.])
13766         if test "$with_hamcrest" = "yes"; then
13767             if test -e /usr/share/lib/java/hamcrest.jar; then
13768                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
13769             elif test -e /usr/share/java/hamcrest/core.jar; then
13770                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
13771             elif test -e /usr/share/java/hamcrest/hamcrest.jar; then
13772                 HAMCREST_JAR=/usr/share/java/hamcrest/hamcrest.jar
13773             else
13774                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
13775             fi
13776         else
13777             HAMCREST_JAR=$with_hamcrest
13778         fi
13779         if test "$_os" = "WINNT"; then
13780             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
13781         fi
13782         if "$JAVACOMPILER" -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
13783             AC_MSG_RESULT([$HAMCREST_JAR])
13784         else
13785             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),
13786                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
13787         fi
13788     fi
13789     rm -f conftest.class conftest.java
13791 AC_SUBST(OOO_JUNIT_JAR)
13792 AC_SUBST(HAMCREST_JAR)
13795 AC_SUBST(SCPDEFS)
13798 # check for wget and curl
13800 WGET=
13801 CURL=
13803 if test "$enable_fetch_external" != "no"; then
13805 CURL=`which curl 2>/dev/null`
13807 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
13808     # wget new enough?
13809     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
13810     if test $? -eq 0; then
13811         WGET=$i
13812         break
13813     fi
13814 done
13816 if test -z "$WGET" -a -z "$CURL"; then
13817     AC_MSG_ERROR([neither wget nor curl found!])
13822 AC_SUBST(WGET)
13823 AC_SUBST(CURL)
13826 # check for sha256sum
13828 SHA256SUM=
13830 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
13831     eval "$i -a 256 --version" > /dev/null 2>&1
13832     ret=$?
13833     if test $ret -eq 0; then
13834         SHA256SUM="$i -a 256"
13835         break
13836     fi
13837 done
13839 if test -z "$SHA256SUM"; then
13840     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
13841         eval "$i --version" > /dev/null 2>&1
13842         ret=$?
13843         if test $ret -eq 0; then
13844             SHA256SUM=$i
13845             break
13846         fi
13847     done
13850 if test -z "$SHA256SUM"; then
13851     AC_MSG_ERROR([no sha256sum found!])
13854 AC_SUBST(SHA256SUM)
13856 dnl ===================================================================
13857 dnl Dealing with l10n options
13858 dnl ===================================================================
13859 AC_MSG_CHECKING([which languages to be built])
13860 # get list of all languages
13861 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
13862 # the sed command does the following:
13863 #   + if a line ends with a backslash, append the next line to it
13864 #   + adds " on the beginning of the value (after =)
13865 #   + adds " at the end of the value
13866 #   + removes en-US; we want to put it on the beginning
13867 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
13868 [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)]
13869 ALL_LANGS="en-US $completelangiso"
13870 # check the configured localizations
13871 WITH_LANG="$with_lang"
13873 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
13874 # (Norwegian is "nb" and "nn".)
13875 if test "$WITH_LANG" = "no"; then
13876     WITH_LANG=
13879 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
13880     AC_MSG_RESULT([en-US])
13881 else
13882     AC_MSG_RESULT([$WITH_LANG])
13883     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
13884     if test -z "$MSGFMT"; then
13885         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
13886             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
13887         elif test -x "/opt/lo/bin/msgfmt"; then
13888             MSGFMT="/opt/lo/bin/msgfmt"
13889         else
13890             AC_CHECK_PROGS(MSGFMT, [msgfmt])
13891             if test -z "$MSGFMT"; then
13892                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
13893             fi
13894         fi
13895     fi
13896     if test -z "$MSGUNIQ"; then
13897         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
13898             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
13899         elif test -x "/opt/lo/bin/msguniq"; then
13900             MSGUNIQ="/opt/lo/bin/msguniq"
13901         else
13902             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
13903             if test -z "$MSGUNIQ"; then
13904                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
13905             fi
13906         fi
13907     fi
13909 AC_SUBST(MSGFMT)
13910 AC_SUBST(MSGUNIQ)
13911 # check that the list is valid
13912 for lang in $WITH_LANG; do
13913     test "$lang" = "ALL" && continue
13914     # need to check for the exact string, so add space before and after the list of all languages
13915     for vl in $ALL_LANGS; do
13916         if test "$vl" = "$lang"; then
13917            break
13918         fi
13919     done
13920     if test "$vl" != "$lang"; then
13921         # if you're reading this - you prolly quoted your languages remove the quotes ...
13922         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
13923     fi
13924 done
13925 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
13926     echo $WITH_LANG | grep -q en-US
13927     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
13929 # list with substituted ALL
13930 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
13931 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
13932 test "$WITH_LANG" = "en-US" && WITH_LANG=
13933 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
13934     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
13935     ALL_LANGS=`echo $ALL_LANGS qtz`
13937 AC_SUBST(ALL_LANGS)
13938 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
13939 AC_SUBST(WITH_LANG)
13940 AC_SUBST(WITH_LANG_LIST)
13941 AC_SUBST(GIT_NEEDED_SUBMODULES)
13943 WITH_POOR_HELP_LOCALIZATIONS=
13944 if test -d "$SRC_ROOT/translations/source"; then
13945     for l in `ls -1 $SRC_ROOT/translations/source`; do
13946         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
13947             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
13948         fi
13949     done
13951 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
13953 if test -n "$with_locales"; then
13954     WITH_LOCALES="$with_locales"
13956     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
13957     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
13958     # config_host/config_locales.h.in
13959     for locale in $WITH_LOCALES; do
13960         lang=${locale%_*}
13962         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
13964         case $lang in
13965         hi|mr*ne)
13966             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
13967             ;;
13968         bg|ru)
13969             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
13970             ;;
13971         esac
13972     done
13973 else
13974     AC_DEFINE(WITH_LOCALE_ALL)
13976 AC_SUBST(WITH_LOCALES)
13978 dnl git submodule update --reference
13979 dnl ===================================================================
13980 if test -n "${GIT_REFERENCE_SRC}"; then
13981     for repo in ${GIT_NEEDED_SUBMODULES}; do
13982         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
13983             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
13984         fi
13985     done
13987 AC_SUBST(GIT_REFERENCE_SRC)
13989 dnl git submodules linked dirs
13990 dnl ===================================================================
13991 if test -n "${GIT_LINK_SRC}"; then
13992     for repo in ${GIT_NEEDED_SUBMODULES}; do
13993         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
13994             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
13995         fi
13996     done
13998 AC_SUBST(GIT_LINK_SRC)
14000 dnl branding
14001 dnl ===================================================================
14002 AC_MSG_CHECKING([for alternative branding images directory])
14003 # initialize mapped arrays
14004 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
14005 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
14007 if test -z "$with_branding" -o "$with_branding" = "no"; then
14008     AC_MSG_RESULT([none])
14009     DEFAULT_BRAND_IMAGES="$brand_files"
14010 else
14011     if ! test -d $with_branding ; then
14012         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
14013     else
14014         AC_MSG_RESULT([$with_branding])
14015         CUSTOM_BRAND_DIR="$with_branding"
14016         for lfile in $brand_files
14017         do
14018             if ! test -f $with_branding/$lfile ; then
14019                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
14020                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
14021             else
14022                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
14023             fi
14024         done
14025         check_for_progress="yes"
14026     fi
14028 AC_SUBST([BRAND_INTRO_IMAGES])
14029 AC_SUBST([CUSTOM_BRAND_DIR])
14030 AC_SUBST([CUSTOM_BRAND_IMAGES])
14031 AC_SUBST([DEFAULT_BRAND_IMAGES])
14034 AC_MSG_CHECKING([for 'intro' progress settings])
14035 PROGRESSBARCOLOR=
14036 PROGRESSSIZE=
14037 PROGRESSPOSITION=
14038 PROGRESSFRAMECOLOR=
14039 PROGRESSTEXTCOLOR=
14040 PROGRESSTEXTBASELINE=
14042 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
14043     source "$with_branding/progress.conf"
14044     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
14045 else
14046     AC_MSG_RESULT([none])
14049 AC_SUBST(PROGRESSBARCOLOR)
14050 AC_SUBST(PROGRESSSIZE)
14051 AC_SUBST(PROGRESSPOSITION)
14052 AC_SUBST(PROGRESSFRAMECOLOR)
14053 AC_SUBST(PROGRESSTEXTCOLOR)
14054 AC_SUBST(PROGRESSTEXTBASELINE)
14057 dnl ===================================================================
14058 dnl Custom build version
14059 dnl ===================================================================
14060 AC_MSG_CHECKING([for extra build ID])
14061 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
14062     EXTRA_BUILDID="$with_extra_buildid"
14064 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
14065 if test -n "$EXTRA_BUILDID" ; then
14066     AC_MSG_RESULT([$EXTRA_BUILDID])
14067 else
14068     AC_MSG_RESULT([not set])
14070 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
14072 OOO_VENDOR=
14073 AC_MSG_CHECKING([for vendor])
14074 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
14075     OOO_VENDOR="$USERNAME"
14077     if test -z "$OOO_VENDOR"; then
14078         OOO_VENDOR="$USER"
14079     fi
14081     if test -z "$OOO_VENDOR"; then
14082         OOO_VENDOR="`id -u -n`"
14083     fi
14085     AC_MSG_RESULT([not set, using $OOO_VENDOR])
14086 else
14087     OOO_VENDOR="$with_vendor"
14088     AC_MSG_RESULT([$OOO_VENDOR])
14090 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
14091 AC_SUBST(OOO_VENDOR)
14093 if test "$_os" = "Android" ; then
14094     ANDROID_PACKAGE_NAME=
14095     AC_MSG_CHECKING([for Android package name])
14096     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
14097         if test -n "$ENABLE_DEBUG"; then
14098             # Default to the package name that makes ndk-gdb happy.
14099             ANDROID_PACKAGE_NAME="org.libreoffice"
14100         else
14101             ANDROID_PACKAGE_NAME="org.example.libreoffice"
14102         fi
14104         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
14105     else
14106         ANDROID_PACKAGE_NAME="$with_android_package_name"
14107         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
14108     fi
14109     AC_SUBST(ANDROID_PACKAGE_NAME)
14112 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
14113 if test "$with_compat_oowrappers" = "yes"; then
14114     WITH_COMPAT_OOWRAPPERS=TRUE
14115     AC_MSG_RESULT(yes)
14116 else
14117     WITH_COMPAT_OOWRAPPERS=
14118     AC_MSG_RESULT(no)
14120 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
14122 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{print tolower($0)}'`
14123 AC_MSG_CHECKING([for install dirname])
14124 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
14125     INSTALLDIRNAME="$with_install_dirname"
14127 AC_MSG_RESULT([$INSTALLDIRNAME])
14128 AC_SUBST(INSTALLDIRNAME)
14130 AC_MSG_CHECKING([for prefix])
14131 test "x$prefix" = xNONE && prefix=$ac_default_prefix
14132 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
14133 PREFIXDIR="$prefix"
14134 AC_MSG_RESULT([$PREFIXDIR])
14135 AC_SUBST(PREFIXDIR)
14137 LIBDIR=[$(eval echo $(eval echo $libdir))]
14138 AC_SUBST(LIBDIR)
14140 DATADIR=[$(eval echo $(eval echo $datadir))]
14141 AC_SUBST(DATADIR)
14143 MANDIR=[$(eval echo $(eval echo $mandir))]
14144 AC_SUBST(MANDIR)
14146 DOCDIR=[$(eval echo $(eval echo $docdir))]
14147 AC_SUBST(DOCDIR)
14149 BINDIR=[$(eval echo $(eval echo $bindir))]
14150 AC_SUBST(BINDIR)
14152 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
14153 AC_SUBST(INSTALLDIR)
14155 TESTINSTALLDIR="${BUILDDIR}/test-install"
14156 AC_SUBST(TESTINSTALLDIR)
14159 # ===================================================================
14160 # OAuth2 id and secrets
14161 # ===================================================================
14163 AC_MSG_CHECKING([for Google Drive client id and secret])
14164 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
14165     AC_MSG_RESULT([not set])
14166     GDRIVE_CLIENT_ID="\"\""
14167     GDRIVE_CLIENT_SECRET="\"\""
14168 else
14169     AC_MSG_RESULT([set])
14170     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
14171     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
14173 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
14174 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
14176 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
14177 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
14178     AC_MSG_RESULT([not set])
14179     ALFRESCO_CLOUD_CLIENT_ID="\"\""
14180     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
14181 else
14182     AC_MSG_RESULT([set])
14183     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
14184     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
14186 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
14187 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
14189 AC_MSG_CHECKING([for OneDrive client id and secret])
14190 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
14191     AC_MSG_RESULT([not set])
14192     ONEDRIVE_CLIENT_ID="\"\""
14193     ONEDRIVE_CLIENT_SECRET="\"\""
14194 else
14195     AC_MSG_RESULT([set])
14196     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
14197     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
14199 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
14200 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
14203 dnl ===================================================================
14204 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
14205 dnl --enable-dependency-tracking configure option
14206 dnl ===================================================================
14207 AC_MSG_CHECKING([whether to enable dependency tracking])
14208 if test "$enable_dependency_tracking" = "no"; then
14209     nodep=TRUE
14210     AC_MSG_RESULT([no])
14211 else
14212     AC_MSG_RESULT([yes])
14214 AC_SUBST(nodep)
14216 dnl ===================================================================
14217 dnl Number of CPUs to use during the build
14218 dnl ===================================================================
14219 AC_MSG_CHECKING([for number of processors to use])
14220 # plain --with-parallelism is just the default
14221 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
14222     if test "$with_parallelism" = "no"; then
14223         PARALLELISM=0
14224     else
14225         PARALLELISM=$with_parallelism
14226     fi
14227 else
14228     if test "$enable_icecream" = "yes"; then
14229         PARALLELISM="40"
14230     else
14231         case `uname -s` in
14233         Darwin|FreeBSD|NetBSD|OpenBSD)
14234             PARALLELISM=`sysctl -n hw.ncpu`
14235             ;;
14237         Linux)
14238             PARALLELISM=`getconf _NPROCESSORS_ONLN`
14239         ;;
14240         # what else than above does profit here *and* has /proc?
14241         *)
14242             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
14243             ;;
14244         esac
14246         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
14247         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
14248     fi
14251 if test "$no_parallelism_make" = "YES" && test $PARALLELISM -gt 1; then
14252     if test -z "$with_parallelism"; then
14253             AC_MSG_WARN([gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this.])
14254             add_warning "gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this."
14255             PARALLELISM="1"
14256     else
14257         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."
14258     fi
14261 if test $PARALLELISM -eq 0; then
14262     AC_MSG_RESULT([explicit make -j option needed])
14263 else
14264     AC_MSG_RESULT([$PARALLELISM])
14266 AC_SUBST(PARALLELISM)
14268 IWYU_PATH="$with_iwyu"
14269 AC_SUBST(IWYU_PATH)
14270 if test ! -z "$IWYU_PATH"; then
14271     if test ! -f "$IWYU_PATH"; then
14272         AC_MSG_ERROR([cannot find include-what-you-use binary specified by --with-iwyu])
14273     fi
14277 # Set up ILIB for MSVC build
14279 ILIB1=
14280 if test "$build_os" = "cygwin"; then
14281     ILIB="."
14282     if test -n "$JAVA_HOME"; then
14283         ILIB="$ILIB;$JAVA_HOME/lib"
14284     fi
14285     ILIB1=-link
14286     ILIB="$ILIB;$COMPATH/lib/$WIN_HOST_ARCH"
14287     ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/$WIN_HOST_ARCH"
14288     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14289     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14290     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
14291         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14292         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14293     fi
14294     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
14295     ucrtlibpath_formatted=$formatted_path
14296     ILIB="$ILIB;$ucrtlibpath_formatted"
14297     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
14298     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
14299         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/lib"
14300     else
14301         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
14302     fi
14304     if test "$cross_compiling" != "yes"; then
14305         ILIB_FOR_BUILD="$ILIB"
14306     fi
14308 AC_SUBST(ILIB)
14309 AC_SUBST(ILIB_FOR_BUILD)
14311 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
14312 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
14313 dnl from consteval constructor initializing const variable",
14314 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
14315 dnl expression' with consteval constructor", <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
14316 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
14317 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'", or
14318 dnl <https://developercommunity.visualstudio.com/t/1581879> "Bogus error C7595 with consteval
14319 dnl constructor in ternary expression (/std:c++latest)":
14320 AC_LANG_PUSH([C++])
14321 save_CXX=$CXX
14322 if test "$COM" = MSC && test "$COM_IS_CLANG" != TRUE; then
14323     CXX="env LIB=$ILIB $CXX"
14325 save_CXXFLAGS=$CXXFLAGS
14326 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
14327 AC_RUN_IFELSE([AC_LANG_PROGRAM([
14328         struct S {
14329             consteval S() { i = 1; }
14330             int i = 0;
14331         };
14332         S const s;
14334         struct S1 { consteval S1(int) {} };
14335         struct S2 {
14336             S1 x;
14337             S2(): x(0) {}
14338         };
14340         struct S3 {
14341             consteval S3() {}
14342             union {
14343                 int a;
14344                 unsigned b = 0;
14345             };
14346         };
14347         void f() { S3(); }
14349         struct S4 { consteval S4() = default; };
14350         void f4(bool b) { b ? S4() : S4(); }
14351     ], [
14352         return (s.i == 1) ? 0 : 1;
14353     ])], [
14354         AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
14355         AC_MSG_RESULT([yes])
14356     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
14357 CXX=$save_CXX
14358 CXXFLAGS=$save_CXXFLAGS
14359 AC_LANG_POP([C++])
14361 # ===================================================================
14362 # Creating bigger shared library to link against
14363 # ===================================================================
14364 AC_MSG_CHECKING([whether to create huge library])
14365 MERGELIBS=
14367 if test $_os = iOS -o $_os = Android; then
14368     # Never any point in mergelibs for these as we build just static
14369     # libraries anyway...
14370     enable_mergelibs=no
14373 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
14374     if test $_os != Linux -a $_os != WINNT; then
14375         add_warning "--enable-mergelibs is not tested for this platform"
14376     fi
14377     MERGELIBS="TRUE"
14378     AC_MSG_RESULT([yes])
14379     AC_DEFINE(ENABLE_MERGELIBS)
14380 else
14381     AC_MSG_RESULT([no])
14383 AC_SUBST([MERGELIBS])
14385 dnl ===================================================================
14386 dnl icerun is a wrapper that stops us spawning tens of processes
14387 dnl locally - for tools that can't be executed on the compile cluster
14388 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
14389 dnl ===================================================================
14390 AC_MSG_CHECKING([whether to use icerun wrapper])
14391 ICECREAM_RUN=
14392 if test "$enable_icecream" = "yes" && which icerun >/dev/null 2>&1 ; then
14393     ICECREAM_RUN=icerun
14394     AC_MSG_RESULT([yes])
14395 else
14396     AC_MSG_RESULT([no])
14398 AC_SUBST(ICECREAM_RUN)
14400 dnl ===================================================================
14401 dnl Setup the ICECC_VERSION for the build the same way it was set for
14402 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
14403 dnl ===================================================================
14404 x_ICECC_VERSION=[\#]
14405 if test -n "$ICECC_VERSION" ; then
14406     x_ICECC_VERSION=
14408 AC_SUBST(x_ICECC_VERSION)
14409 AC_SUBST(ICECC_VERSION)
14411 dnl ===================================================================
14413 AC_MSG_CHECKING([MPL subset])
14414 MPL_SUBSET=
14416 if test "$enable_mpl_subset" = "yes"; then
14417     warn_report=false
14418     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
14419         warn_report=true
14420     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
14421         warn_report=true
14422     fi
14423     if test "$warn_report" = "true"; then
14424         AC_MSG_ERROR([need to --disable-report-builder - extended database report builder.])
14425     fi
14426     if test "x$enable_postgresql_sdbc" != "xno"; then
14427         AC_MSG_ERROR([need to --disable-postgresql-sdbc - the PostgreSQL database backend.])
14428     fi
14429     if test "$enable_lotuswordpro" = "yes"; then
14430         AC_MSG_ERROR([need to --disable-lotuswordpro - a Lotus Word Pro file format import filter.])
14431     fi
14432     if test "$WITH_WEBDAV" = "neon"; then
14433         AC_MSG_ERROR([need --with-webdav=serf or --without-webdav - webdav support.])
14434     fi
14435     if test -n "$ENABLE_POPPLER"; then
14436         if test "x$SYSTEM_POPPLER" = "x"; then
14437             AC_MSG_ERROR([need to disable PDF import via poppler or use system library])
14438         fi
14439     fi
14440     # cf. m4/libo_check_extension.m4
14441     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
14442         AC_MSG_ERROR([need to disable extra extensions '$WITH_EXTRA_EXTENSIONS'])
14443     fi
14444     for theme in $WITH_THEMES; do
14445         case $theme in
14446         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
14447             AC_MSG_ERROR([need to disable icon themes from '$WITH_THEMES': $theme present, use --with-theme=colibre]) ;;
14448         *) : ;;
14449         esac
14450     done
14452     ENABLE_OPENGL_TRANSITIONS=
14454     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
14455         AC_MSG_ERROR([need to --disable-lpsolve - calc linear programming solver.])
14456     fi
14458     MPL_SUBSET="TRUE"
14459     AC_DEFINE(MPL_HAVE_SUBSET)
14460     AC_MSG_RESULT([only])
14461 else
14462     AC_MSG_RESULT([no restrictions])
14464 AC_SUBST(MPL_SUBSET)
14466 dnl ===================================================================
14468 AC_MSG_CHECKING([formula logger])
14469 ENABLE_FORMULA_LOGGER=
14471 if test "x$enable_formula_logger" = "xyes"; then
14472     AC_MSG_RESULT([yes])
14473     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14474     ENABLE_FORMULA_LOGGER=TRUE
14475 elif test -n "$ENABLE_DBGUTIL" ; then
14476     AC_MSG_RESULT([yes])
14477     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14478     ENABLE_FORMULA_LOGGER=TRUE
14479 else
14480     AC_MSG_RESULT([no])
14483 AC_SUBST(ENABLE_FORMULA_LOGGER)
14485 dnl ===================================================================
14486 dnl Checking for active Antivirus software.
14487 dnl ===================================================================
14489 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
14490     AC_MSG_CHECKING([for active Antivirus software])
14491     ANTIVIRUS_LIST=`cscript.exe //Nologo $SRC_ROOT/antivirusDetection.vbs`
14492     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
14493         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
14494             AC_MSG_RESULT([found])
14495             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
14496             echo $EICAR_STRING > $SRC_ROOT/eicar
14497             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
14498             rm $SRC_ROOT/eicar
14499             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14500                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14501             fi
14502             echo $EICAR_STRING > $BUILDDIR/eicar
14503             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
14504             rm $BUILDDIR/eicar
14505             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14506                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14507             fi
14508             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"
14509         else
14510             AC_MSG_RESULT([not found])
14511         fi
14512     else
14513         AC_MSG_RESULT([n/a])
14514     fi
14517 dnl ===================================================================
14518 dnl Setting up the environment.
14519 dnl ===================================================================
14520 AC_MSG_NOTICE([setting up the build environment variables...])
14522 AC_SUBST(COMPATH)
14524 if test "$build_os" = "cygwin"; then
14525     if test -d "$COMPATH/atlmfc/lib/spectre"; then
14526         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
14527         ATL_INCLUDE="$COMPATH/atlmfc/include"
14528     elif test -d "$COMPATH/atlmfc/lib"; then
14529         ATL_LIB="$COMPATH/atlmfc/lib"
14530         ATL_INCLUDE="$COMPATH/atlmfc/include"
14531     else
14532         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
14533         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
14534     fi
14535     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
14536     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
14537     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
14539     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
14540     PathFormat "/usr/bin/find.exe"
14541     FIND="$formatted_path"
14542     PathFormat "/usr/bin/sort.exe"
14543     SORT="$formatted_path"
14544     PathFormat "/usr/bin/grep.exe"
14545     WIN_GREP="$formatted_path"
14546     PathFormat "/usr/bin/ls.exe"
14547     WIN_LS="$formatted_path"
14548     PathFormat "/usr/bin/touch.exe"
14549     WIN_TOUCH="$formatted_path"
14550 else
14551     FIND=find
14552     SORT=sort
14555 AC_SUBST(ATL_INCLUDE)
14556 AC_SUBST(ATL_LIB)
14557 AC_SUBST(FIND)
14558 AC_SUBST(SORT)
14559 AC_SUBST(WIN_GREP)
14560 AC_SUBST(WIN_LS)
14561 AC_SUBST(WIN_TOUCH)
14563 AC_SUBST(BUILD_TYPE)
14565 AC_SUBST(SOLARINC)
14567 PathFormat "$PERL"
14568 PERL="$formatted_path"
14569 AC_SUBST(PERL)
14571 if test -n "$TMPDIR"; then
14572     TEMP_DIRECTORY="$TMPDIR"
14573 else
14574     TEMP_DIRECTORY="/tmp"
14576 if test "$build_os" = "cygwin"; then
14577     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
14579 AC_SUBST(TEMP_DIRECTORY)
14581 # setup the PATH for the environment
14582 if test -n "$LO_PATH_FOR_BUILD"; then
14583     LO_PATH="$LO_PATH_FOR_BUILD"
14584     case "$host_os" in
14585     cygwin*|wsl*)
14586         pathmunge "$MSVC_HOST_PATH" "before"
14587         ;;
14588     esac
14589 else
14590     LO_PATH="$PATH"
14592     case "$host_os" in
14594     aix*|dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
14595         if test "$ENABLE_JAVA" != ""; then
14596             pathmunge "$JAVA_HOME/bin" "after"
14597         fi
14598         ;;
14600     cygwin*|wsl*)
14601         # Win32 make needs native paths
14602         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
14603             LO_PATH=`cygpath -p -m "$PATH"`
14604         fi
14605         if test "$WIN_BUILD_ARCH" = "x64"; then
14606             # needed for msi packaging
14607             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
14608         fi
14609         # .NET 4.6 and higher don't have bin directory
14610         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
14611             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
14612         fi
14613         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
14614         pathmunge "$CSC_PATH" "before"
14615         pathmunge "$MIDL_PATH" "before"
14616         pathmunge "$AL_PATH" "before"
14617         pathmunge "$MSVC_MULTI_PATH" "before"
14618         pathmunge "$MSVC_BUILD_PATH" "before"
14619         if test -n "$MSBUILD_PATH" ; then
14620             pathmunge "$MSBUILD_PATH" "before"
14621         fi
14622         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
14623         if test "$ENABLE_JAVA" != ""; then
14624             if test -d "$JAVA_HOME/jre/bin/client"; then
14625                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
14626             fi
14627             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
14628                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
14629             fi
14630             pathmunge "$JAVA_HOME/bin" "before"
14631         fi
14632         pathmunge "$MSVC_HOST_PATH" "before"
14633         ;;
14635     solaris*)
14636         pathmunge "/usr/css/bin" "before"
14637         if test "$ENABLE_JAVA" != ""; then
14638             pathmunge "$JAVA_HOME/bin" "after"
14639         fi
14640         ;;
14641     esac
14644 AC_SUBST(LO_PATH)
14646 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
14647 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
14648     x_LO_ELFCHECK_ALLOWLIST=
14649 else
14650     x_LO_ELFCHECK_ALLOWLIST=[\#]
14652 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
14653 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
14655 libo_FUZZ_SUMMARY
14657 # Generate a configuration sha256 we can use for deps
14658 if test -f config_host.mk; then
14659     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
14661 if test -f config_host_lang.mk; then
14662     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
14665 CFLAGS=$my_original_CFLAGS
14666 CXXFLAGS=$my_original_CXXFLAGS
14667 CPPFLAGS=$my_original_CPPFLAGS
14669 AC_CONFIG_LINKS([include:include])
14671 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
14672 # BUILD platform configuration] - otherwise breaks cross building
14673 AC_CONFIG_FILES([config_host.mk
14674                  config_host_lang.mk
14675                  Makefile
14676                  lo.xcent
14677                  bin/bffvalidator.sh
14678                  bin/odfvalidator.sh
14679                  bin/officeotron.sh
14680                  hardened_runtime.xcent
14681                  instsetoo_native/util/openoffice.lst
14682                  sysui/desktop/macosx/Info.plist
14683                  vs-code-template.code-workspace:.vscode/vs-code-template.code-workspace.in])
14684 AC_CONFIG_HEADERS([config_host/config_buildid.h])
14685 AC_CONFIG_HEADERS([config_host/config_box2d.h])
14686 AC_CONFIG_HEADERS([config_host/config_clang.h])
14687 AC_CONFIG_HEADERS([config_host/config_crypto.h])
14688 AC_CONFIG_HEADERS([config_host/config_dconf.h])
14689 AC_CONFIG_HEADERS([config_host/config_eot.h])
14690 AC_CONFIG_HEADERS([config_host/config_extensions.h])
14691 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
14692 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
14693 AC_CONFIG_HEADERS([config_host/config_dbus.h])
14694 AC_CONFIG_HEADERS([config_host/config_features.h])
14695 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
14696 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
14697 AC_CONFIG_HEADERS([config_host/config_firebird.h])
14698 AC_CONFIG_HEADERS([config_host/config_folders.h])
14699 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
14700 AC_CONFIG_HEADERS([config_host/config_gio.h])
14701 AC_CONFIG_HEADERS([config_host/config_global.h])
14702 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
14703 AC_CONFIG_HEADERS([config_host/config_java.h])
14704 AC_CONFIG_HEADERS([config_host/config_langs.h])
14705 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
14706 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
14707 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
14708 AC_CONFIG_HEADERS([config_host/config_locales.h])
14709 AC_CONFIG_HEADERS([config_host/config_mpl.h])
14710 AC_CONFIG_HEADERS([config_host/config_oox.h])
14711 AC_CONFIG_HEADERS([config_host/config_options.h])
14712 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
14713 AC_CONFIG_HEADERS([config_host/config_zxing.h])
14714 AC_CONFIG_HEADERS([config_host/config_skia.h])
14715 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
14716 AC_CONFIG_HEADERS([config_host/config_vendor.h])
14717 AC_CONFIG_HEADERS([config_host/config_vcl.h])
14718 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
14719 AC_CONFIG_HEADERS([config_host/config_version.h])
14720 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
14721 AC_CONFIG_HEADERS([config_host/config_poppler.h])
14722 AC_CONFIG_HEADERS([config_host/config_python.h])
14723 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
14724 AC_OUTPUT
14726 if test "$CROSS_COMPILING" = TRUE; then
14727     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
14730 # touch the config timestamp file
14731 if test ! -f config_host.mk.stamp; then
14732     echo > config_host.mk.stamp
14733 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
14734     echo "Host Configuration unchanged - avoiding scp2 stamp update"
14735 else
14736     echo > config_host.mk.stamp
14739 # touch the config lang timestamp file
14740 if test ! -f config_host_lang.mk.stamp; then
14741     echo > config_host_lang.mk.stamp
14742 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
14743     echo "Language Configuration unchanged - avoiding scp2 stamp update"
14744 else
14745     echo > config_host_lang.mk.stamp
14749 if test \( "$STALE_MAKE" = "TRUE" -o "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE" \) \
14750         -a "$build_os" = "cygwin"; then
14752 cat << _EOS
14753 ****************************************************************************
14754 WARNING:
14755 Your make version is known to be horribly slow, and hard to debug
14756 problems with. To get a reasonably functional make please do:
14758 to install a pre-compiled binary make for Win32
14760  mkdir -p /opt/lo/bin
14761  cd /opt/lo/bin
14762  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
14763  cp make-4.2.1-msvc.exe make
14764  chmod +x make
14766 to install from source:
14767 place yourself in a working directory of you choice.
14769  git clone git://git.savannah.gnu.org/make.git
14771  [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"]
14772  set PATH=%PATH%;C:\Cygwin\bin
14773  [or Cygwin64, if that is what you have]
14774  cd path-to-make-repo-you-cloned-above
14775  build_w32.bat --without-guile
14777 should result in a WinRel/gnumake.exe.
14778 Copy it to the Cygwin /opt/lo/bin directory as make.exe
14780 Then re-run autogen.sh
14782 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
14783 Alternatively, you can install the 'new' make where ever you want and make sure that `which make` finds it.
14785 _EOS
14786 if test "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE"; then
14787     AC_MSG_ERROR([no file function found; the build will fail without it; use GNU make 4.0 or later])
14792 cat << _EOF
14793 ****************************************************************************
14795 To build, run:
14796 $GNUMAKE
14798 To view some help, run:
14799 $GNUMAKE help
14801 _EOF
14803 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
14804     cat << _EOF
14805 After the build has finished successfully, you can immediately run what you built using the command:
14806 _EOF
14808     if test $_os = Darwin; then
14809         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
14810     else
14811         echo instdir/program/soffice
14812     fi
14813     cat << _EOF
14815 If you want to run the smoketest, run:
14816 $GNUMAKE check
14818 _EOF
14821 if test -s "$WARNINGS_FILE_FOR_BUILD"; then
14822     echo "BUILD / cross-toolset config, repeated ($WARNINGS_FILE_FOR_BUILD)"
14823     cat "$WARNINGS_FILE_FOR_BUILD"
14824     echo
14827 if test -s "$WARNINGS_FILE"; then
14828     echo "HOST config ($WARNINGS_FILE)"
14829     cat "$WARNINGS_FILE"
14832 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: