lastPoint might be 0xFFFF
[LibreOffice.git] / configure.ac
blob2e773f12706956e22c37a798566e98a5274fe754
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.2.0.0+],[],[],[http://documentfoundation.org/])
14 dnl libnumbertext needs autoconf 2.68, but that can pick up autoconf268 just fine if it is installed
15 dnl whereas aclocal (as run by autogen.sh) insists on using autoconf and fails hard
16 dnl so check for the version of autoconf that is actually used to create the configure script
17 AC_PREREQ([2.59])
18 m4_if(m4_version_compare(m4_defn([AC_AUTOCONF_VERSION]), [2.68]), -1,
19     [AC_MSG_ERROR([at least autoconf version 2.68 is needed (you can use AUTOCONF environment variable to point to a suitable one)])])
21 if test -n "$BUILD_TYPE"; then
22     AC_MSG_ERROR([You have sourced config_host.mk in this shell.  This may lead to trouble, please run in a fresh (login) shell.])
25 save_CC=$CC
26 save_CXX=$CXX
28 first_arg_basename()
30     for i in $1; do
31         basename "$i"
32         break
33     done
36 CC_BASE=`first_arg_basename "$CC"`
37 CXX_BASE=`first_arg_basename "$CXX"`
39 BUILD_TYPE="LibO"
40 SCPDEFS=""
41 GIT_NEEDED_SUBMODULES=""
42 LO_PATH= # used by path_munge to construct a PATH variable
44 FilterLibs()
46     # Return value: $filteredlibs
48     filteredlibs=
49     for f in $1; do
50         case "$f" in
51             # let's start with Fedora's paths for now
52             -L/lib|-L/lib/|-L/lib64|-L/lib64/|-L/usr/lib|-L/usr/lib/|-L/usr/lib64|-L/usr/lib64/)
53                 # ignore it: on UNIXoids it is searched by default anyway
54                 # but if it's given explicitly then it may override other paths
55                 # (on macOS it would be an error to use it instead of SDK)
56                 ;;
57             *)
58                 filteredlibs="$filteredlibs $f"
59                 ;;
60         esac
61     done
64 PathFormat()
66     # Args: $1: A pathname. On Cygwin and WSL, in either the Unix or the Windows format. Note that this
67     # function is called also on Unix.
68     #
69     # Return value: $formatted_path and $formatted_path_unix.
70     #
71     # $formatted_path is the argument in Windows format, but using forward slashes instead of
72     # backslashes, using 8.3 pathname components if necessary (if it otherwise would contains spaces
73     # or shell metacharacters).
74     #
75     # $formatted_path_unix is the argument in a form usable in Cygwin or WSL, using 8.3 components if
76     # necessary. On Cygwin, it is the same as $formatted_path, but on WSL it is $formatted_path as a
77     # Unix pathname.
78     #
79     # Errors out if 8.3 names are needed but aren't present for some of the path components.
81     # Examples:
82     #
83     # /home/tml/lo/master-optimised => C:/cygwin64/home/tml/lo/master-optimised
84     #
85     # C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe => C:/PROGRA~2/MICROS~3/INSTAL~1/vswhere.exe
86     #
87     # C:\Program Files (x86)\Microsoft Visual Studio\2019\Community => C:/PROGRA~2/MICROS~3/2019/COMMUN~1
88     #
89     # C:/PROGRA~2/WI3CF2~1/10/Include/10.0.18362.0/ucrt => C:/PROGRA~2/WI3CF2~1/10/Include/10.0.18362.0/ucrt
90     #
91     # /cygdrive/c/PROGRA~2/WI3CF2~1/10 => C:/PROGRA~2/WI3CF2~1/10
92     #
93     # C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\ => C:/PROGRA~2/WI3CF2~1/NETFXSDK/4.8/
94     #
95     # /usr/bin/find.exe => C:/cygwin64/bin/find.exe
97     if test -n "$UNITTEST_WSL_PATHFORMAT"; then
98         printf "PathFormat $1 ==> "
99     fi
101     formatted_path="$1"
102     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
103         if test "$build_os" = "wsl"; then
104             formatted_path=$(echo "$formatted_path" | tr -d '\r')
105         fi
107         pf_conv_to_dos=
108         # spaces,parentheses,brackets,braces are problematic in pathname
109         # so are backslashes
110         case "$formatted_path" in
111             *\ * | *\)* | *\(* | *\{* | *\}* | *\[* | *\]* | *\\* )
112                 pf_conv_to_dos="yes"
113             ;;
114         esac
115         if test "$pf_conv_to_dos" = "yes"; then
116             if test "$build_os" = "wsl"; then
117                 case "$formatted_path" in
118                     /*)
119                         formatted_path=$(wslpath -w "$formatted_path")
120                         ;;
121                 esac
122                 formatted_path=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --8.3 "$formatted_path")
123             elif test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
124                 formatted_path=`cygpath -sm "$formatted_path"`
125             else
126                 formatted_path=`cygpath -d "$formatted_path"`
127             fi
128             if test $? -ne 0;  then
129                 AC_MSG_ERROR([path conversion failed for "$1".])
130             fi
131         fi
132         fp_count_colon=`echo "$formatted_path" | $GREP -c "[:]"`
133         fp_count_slash=`echo "$formatted_path" | $GREP -c "[/]"`
134         if test "$fp_count_slash$fp_count_colon" != "00"; then
135             if test "$fp_count_colon" = "0"; then
136                 new_formatted_path=`realpath "$formatted_path"`
137                 if test $? -ne 0;  then
138                     AC_MSG_WARN([realpath failed for "$formatted_path", not necessarily a problem.])
139                 else
140                     formatted_path="$new_formatted_path"
141                 fi
142             fi
143             if test "$build_os" = "wsl"; then
144                 if test "$fp_count_colon" != "0"; then
145                     formatted_path=$(wslpath "$formatted_path")
146                     local final_slash=
147                     case "$formatted_path" in
148                         */)
149                             final_slash=/
150                             ;;
151                     esac
152                     formatted_path=$(wslpath -m $formatted_path)
153                     case "$formatted_path" in
154                         */)
155                             ;;
156                         *)
157                             formatted_path="$formatted_path"$final_slash
158                             ;;
159                     esac
160                 else
161                     formatted_path=$(wslpath -m "$formatted_path")
162                 fi
163             else
164                 formatted_path=`cygpath -m "$formatted_path"`
165             fi
166             if test $? -ne 0;  then
167                 AC_MSG_ERROR([path conversion failed for "$1".])
168             fi
169         fi
170         fp_count_space=`echo "$formatted_path" | $GREP -c "[ ]"`
171         if test "$fp_count_space" != "0"; then
172             AC_MSG_ERROR([converted path "$formatted_path" still contains spaces. Short filenames (8.3 filenames) support was disabled on this system?])
173         fi
174     fi
175     if test "$build_os" = "wsl"; then
176         # WSL can't run Windows binaries from Windows pathnames so we need a separate return value in Unix format
177         formatted_path_unix=$(wslpath "$formatted_path")
178     else
179         # But Cygwin can
180         formatted_path_unix="$formatted_path"
181     fi
184 AbsolutePath()
186     # There appears to be no simple and portable method to get an absolute and
187     # canonical path, so we try creating the directory if does not exist and
188     # utilizing the shell and pwd.
190     # Args: $1: A possibly relative pathname
191     # Return value: $absolute_path
193     local rel="$1"
194     absolute_path=""
195     test ! -e "$rel" && mkdir -p "$rel"
196     if test -d "$rel" ; then
197         cd "$rel" || AC_MSG_ERROR([absolute path resolution failed for "$rel".])
198         absolute_path="$(pwd)"
199         cd - > /dev/null
200     else
201         AC_MSG_ERROR([Failed to resolve absolute path.  "$rel" does not exist or is not a directory.])
202     fi
205 WARNINGS_FILE=config.warn
206 WARNINGS_FILE_FOR_BUILD=config.Build.warn
207 rm -f "$WARNINGS_FILE" "$WARNINGS_FILE_FOR_BUILD"
208 have_WARNINGS="no"
209 add_warning()
211     if test "$have_WARNINGS" = "no"; then
212         echo "*************************************" > "$WARNINGS_FILE"
213         have_WARNINGS="yes"
214         if which tput >/dev/null && test "`tput colors 2>/dev/null || echo 0`" -ge 8; then
215             dnl <esc> as actual byte (U+1b), [ escaped using quadrigraph @<:@
216             COLORWARN='*\e@<:@1;33;40m WARNING \e@<:@0m:'
217         else
218             COLORWARN="* WARNING :"
219         fi
220     fi
221     echo "$COLORWARN $@" >> "$WARNINGS_FILE"
224 dnl Some Mac User have the bad habit of letting a lot of crap
225 dnl accumulate in their PATH and even adding stuff in /usr/local/bin
226 dnl that confuse the build.
227 dnl For the ones that use LODE, let's be nice and protect them
228 dnl from themselves
230 mac_sanitize_path()
232     mac_path="$LODE_HOME/opt/bin:/usr/bin:/bin:/usr/sbin:/sbin"
233 dnl a common but nevertheless necessary thing that may be in a fancy
234 dnl path location is git, so make sure we have it
235     mac_git_path=`which git 2>/dev/null`
236     if test -n "$mac_git_path" -a -x "$mac_git_path" -a "$mac_git_path" != "/usr/bin/git" ; then
237         mac_path="$mac_path:`dirname $mac_git_path`"
238     fi
239 dnl a not so common but nevertheless quite helpful thing that may be in a fancy
240 dnl path location is gpg, so make sure we find it
241     mac_gpg_path=`which gpg 2>/dev/null`
242     if test -n "$mac_gpg_path" -a -x "$mac_gpg_path" -a "$mac_gpg_path" != "/usr/bin/gpg" ; then
243         mac_path="$mac_path:`dirname $mac_gpg_path`"
244     fi
245     PATH="$mac_path"
246     unset mac_path
247     unset mac_git_path
248     unset mac_gpg_path
251 echo "********************************************************************"
252 echo "*"
253 echo "*   Running ${PACKAGE_NAME} build configuration."
254 echo "*"
255 echo "********************************************************************"
256 echo ""
258 dnl ===================================================================
259 dnl checks build and host OSes
260 dnl do this before argument processing to allow for platform dependent defaults
261 dnl ===================================================================
263 # Check for WSL (version 2, at least). But if --host is explicitly specified (to really do build for
264 # Linux on WSL) trust that.
265 if test -z "$host" -a -z "$build" -a "`wslsys -v 2>/dev/null`" != ""; then
266     ac_cv_host="x86_64-pc-wsl"
267     ac_cv_host_cpu="x86_64"
268     ac_cv_host_os="wsl"
269     ac_cv_build="$ac_cv_host"
270     ac_cv_build_cpu="$ac_cv_host_cpu"
271     ac_cv_build_os="$ac_cv_host_os"
273     # Emulation of Cygwin's cygpath command for WSL.
274     cygpath()
275     {
276         if test -n "$UNITTEST_WSL_CYGPATH"; then
277             echo -n cygpath "$@" "==> "
278         fi
280         # Cygwin's real cygpath has a plethora of options but we use only a few here.
281         local args="$@"
282         local opt
283         local opt_d opt_m opt_u opt_w opt_l opt_s opt_p
284         OPTIND=1
286         while getopts dmuwlsp opt; do
287             case "$opt" in
288                 \?)
289                     AC_MSG_ERROR([Unimplemented cygpath emulation option in invocation: cygpath $args])
290                     ;;
291                 ?)
292                     eval opt_$opt=yes
293                     ;;
294             esac
295         done
297         shift $((OPTIND-1))
299         if test $# -ne 1; then
300             AC_MSG_ERROR([Invalid cygpath emulation invocation: Pathname missing]);
301         fi
303         local input="$1"
305         local result
307         if test -n "$opt_d" -o -n "$opt_m" -o -n "$opt_w"; then
308             # Print Windows path, possibly in 8.3 form (-d) or with forward slashes (-m)
310             if test -n "$opt_u"; then
311                 AC_MSG_ERROR([Invalid cygpath invocation: Both Windows and Unix path output requested])
312             fi
314             case "$input" in
315                 /mnt/*)
316                     # A Windows file in WSL format
317                     input=$(wslpath -w "$input")
318                     ;;
319                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
320                     # Already in Windows format
321                     ;;
322                 /*)
323                     input=$(wslpath -w "$input")
324                     ;;
325                 *)
326                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
327                     ;;
328             esac
329             if test -n "$opt_d" -o -n "$opt_s"; then
330                 input=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --8.3 "$input")
331             fi
332             if test -n "$opt_m"; then
333                 input="${input//\\//}"
334             fi
335             echo "$input"
336         else
337             # Print Unix path
339             case "$input" in
340                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
341                     wslpath -u "$input"
342                     ;;
343                 /)
344                     echo "$input"
345                     ;;
346                 *)
347                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
348                     ;;
349             esac
350         fi
351     }
353     if test -n "$UNITTEST_WSL_CYGPATH"; then
354         BUILDDIR=.
356         # Nothing special with these file names, just arbitrary ones picked to test with
357         cygpath -d /usr/lib64/ld-linux-x86-64.so.2
358         cygpath -w /usr/lib64/ld-linux-x86-64.so.2
359         cygpath -m /usr/lib64/ld-linux-x86-64.so.2
360         cygpath -m -s /usr/lib64/ld-linux-x86-64.so.2
361         # At least on my machine for instance this file does have an 8.3 name
362         cygpath -d /mnt/c/windows/WindowsUpdate.log
363         # But for instance this one doesn't
364         cygpath -w /mnt/c/windows/system32/AboutSettingsHandlers.dll
365         cygpath -ws /mnt/c/windows/WindowsUpdate.log
366         cygpath -m /mnt/c/windows/system32/AboutSettingsHandlers.dll
367         cygpath -ms /mnt/c/windows/WindowsUpdate.log
369         cygpath -u 'c:\windows\system32\AboutSettingsHandlers.dll'
370         cygpath -u 'c:/windows/system32/AboutSettingsHandlers.dll'
372         exit 0
373     fi
376 AC_CANONICAL_HOST
377 AC_CANONICAL_BUILD
379 if test -n "$UNITTEST_WSL_PATHFORMAT"; then
380     BUILDDIR=.
381     GREP=grep
383     # Use of PathFormat must be after AC_CANONICAL_BUILD above
384     PathFormat /
385     printf "$formatted_path , $formatted_path_unix\n"
387     PathFormat $PWD
388     printf "$formatted_path , $formatted_path_unix\n"
390     PathFormat "$PROGRAMFILESX86"
391     printf "$formatted_path , $formatted_path_unix\n"
393     exit 0
396 AC_MSG_CHECKING([for product name])
397 PRODUCTNAME="AC_PACKAGE_NAME"
398 if test -n "$with_product_name" -a "$with_product_name" != no; then
399     PRODUCTNAME="$with_product_name"
401 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
402     PRODUCTNAME="${PRODUCTNAME}Dev"
404 AC_MSG_RESULT([$PRODUCTNAME])
405 AC_SUBST(PRODUCTNAME)
406 PRODUCTNAME_WITHOUT_SPACES=$(printf %s "$PRODUCTNAME" | sed 's/ //g')
407 AC_SUBST(PRODUCTNAME_WITHOUT_SPACES)
409 dnl ===================================================================
410 dnl Our version is defined by the AC_INIT() at the top of this script.
411 dnl ===================================================================
413 AC_MSG_CHECKING([for package version])
414 if test -n "$with_package_version" -a "$with_package_version" != no; then
415     PACKAGE_VERSION="$with_package_version"
417 AC_MSG_RESULT([$PACKAGE_VERSION])
419 set `echo "$PACKAGE_VERSION" | sed "s/\./ /g"`
421 LIBO_VERSION_MAJOR=$1
422 LIBO_VERSION_MINOR=$2
423 LIBO_VERSION_MICRO=$3
424 LIBO_VERSION_PATCH=$4
426 LIBO_VERSION_SUFFIX=$5
428 # Split out LIBO_VERSION_SUFFIX_SUFFIX... horrible crack. But apparently wanted separately in
429 # openoffice.lst as ABOUTBOXPRODUCTVERSIONSUFFIX. Note that the double brackets are for m4's sake,
430 # they get undoubled before actually passed to sed.
431 LIBO_VERSION_SUFFIX_SUFFIX=`echo "$LIBO_VERSION_SUFFIX" | sed -e 's/.*[[a-zA-Z0-9]]\([[^a-zA-Z0-9]]*\)$/\1/'`
432 test -n "$LIBO_VERSION_SUFFIX_SUFFIX" && LIBO_VERSION_SUFFIX="${LIBO_VERSION_SUFFIX%${LIBO_VERSION_SUFFIX_SUFFIX}}"
433 # LIBO_VERSION_SUFFIX, if non-empty, should include the period separator
434 test -n "$LIBO_VERSION_SUFFIX" && LIBO_VERSION_SUFFIX=".$LIBO_VERSION_SUFFIX"
436 # The value for key CFBundleVersion in the Info.plist file must be a period-separated list of at most
437 # three non-negative integers. Please find more information about CFBundleVersion at
438 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleversion
440 # The value for key CFBundleShortVersionString in the Info.plist file must be a period-separated list
441 # of at most three non-negative integers. Please find more information about
442 # CFBundleShortVersionString at
443 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring
445 # But that is enforced only in the App Store, and we apparently want to break the rules otherwise.
447 if test "$enable_macosx_sandbox" = yes; then
448     MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.`expr $LIBO_VERSION_MICRO '*' 1000 + $LIBO_VERSION_PATCH`
449     MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION
450 else
451     MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.$LIBO_VERSION_MICRO.$LIBO_VERSION_PATCH
452     MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION$LIBO_VERSION_SUFFIX
455 AC_SUBST(LIBO_VERSION_MAJOR)
456 AC_SUBST(LIBO_VERSION_MINOR)
457 AC_SUBST(LIBO_VERSION_MICRO)
458 AC_SUBST(LIBO_VERSION_PATCH)
459 AC_SUBST(LIBO_VERSION_SUFFIX)
460 AC_SUBST(LIBO_VERSION_SUFFIX_SUFFIX)
461 AC_SUBST(MACOSX_BUNDLE_SHORTVERSION)
462 AC_SUBST(MACOSX_BUNDLE_VERSION)
464 AC_DEFINE_UNQUOTED(LIBO_VERSION_MAJOR,$LIBO_VERSION_MAJOR)
465 AC_DEFINE_UNQUOTED(LIBO_VERSION_MINOR,$LIBO_VERSION_MINOR)
466 AC_DEFINE_UNQUOTED(LIBO_VERSION_MICRO,$LIBO_VERSION_MICRO)
467 AC_DEFINE_UNQUOTED(LIBO_VERSION_PATCH,$LIBO_VERSION_PATCH)
469 LIBO_THIS_YEAR=`date +%Y`
470 AC_DEFINE_UNQUOTED(LIBO_THIS_YEAR,$LIBO_THIS_YEAR)
472 dnl ===================================================================
473 dnl Product version
474 dnl ===================================================================
475 AC_MSG_CHECKING([for product version])
476 PRODUCTVERSION="$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR"
477 AC_MSG_RESULT([$PRODUCTVERSION])
478 AC_SUBST(PRODUCTVERSION)
480 AC_PROG_EGREP
481 # AC_PROG_EGREP doesn't set GREP on all systems as well
482 AC_PATH_PROG(GREP, grep)
484 BUILDDIR=`pwd`
485 cd $srcdir
486 SRC_ROOT=`pwd`
487 cd $BUILDDIR
488 x_Cygwin=[\#]
490 dnl ======================================
491 dnl Required GObject introspection version
492 dnl ======================================
493 INTROSPECTION_REQUIRED_VERSION=1.32.0
495 dnl ===================================================================
496 dnl Search all the common names for GNU Make
497 dnl ===================================================================
498 AC_MSG_CHECKING([for GNU Make])
500 # try to use our own make if it is available and GNUMAKE was not already defined
501 if test -z "$GNUMAKE"; then
502     if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/make" ; then
503         GNUMAKE="$LODE_HOME/opt/bin/make"
504     elif test -x "/opt/lo/bin/make"; then
505         GNUMAKE="/opt/lo/bin/make"
506     fi
509 GNUMAKE_WIN_NATIVE=
510 for a in "$MAKE" "$GNUMAKE" make gmake gnumake; do
511     if test -n "$a"; then
512         $a --version 2> /dev/null | grep GNU  2>&1 > /dev/null
513         if test $? -eq 0;  then
514             if test "$build_os" = "cygwin"; then
515                 if test -n "$($a -v | grep 'Built for Windows')" ; then
516                     GNUMAKE="$(cygpath -m "$(which "$(cygpath -u $a)")")"
517                     GNUMAKE_WIN_NATIVE="TRUE"
518                 else
519                     GNUMAKE=`which $a`
520                 fi
521             else
522                 GNUMAKE=`which $a`
523             fi
524             break
525         fi
526     fi
527 done
528 AC_MSG_RESULT($GNUMAKE)
529 if test -z "$GNUMAKE"; then
530     AC_MSG_ERROR([not found. install GNU Make.])
531 else
532     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
533         AC_MSG_NOTICE([Using a native Win32 GNU Make version.])
534     fi
537 win_short_path_for_make()
539     local short_path="$1"
540     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
541         cygpath -sm "$short_path"
542     else
543         cygpath -u "$(cygpath -d "$short_path")"
544     fi
548 if test "$build_os" = "cygwin"; then
549     PathFormat "$SRC_ROOT"
550     SRC_ROOT="$formatted_path"
551     PathFormat "$BUILDDIR"
552     BUILDDIR="$formatted_path"
553     x_Cygwin=
554     AC_MSG_CHECKING(for explicit COMSPEC)
555     if test -z "$COMSPEC"; then
556         AC_MSG_ERROR([COMSPEC not set in environment, please set it and rerun])
557     else
558         AC_MSG_RESULT([found: $COMSPEC])
559     fi
562 AC_SUBST(SRC_ROOT)
563 AC_SUBST(BUILDDIR)
564 AC_SUBST(x_Cygwin)
565 AC_DEFINE_UNQUOTED(SRCDIR,"$SRC_ROOT")
566 AC_DEFINE_UNQUOTED(SRC_ROOT,"$SRC_ROOT")
567 AC_DEFINE_UNQUOTED(BUILDDIR,"$BUILDDIR")
569 if test "z$EUID" = "z0" -a "`uname -o 2>/dev/null`" = "Cygwin"; then
570     AC_MSG_ERROR([You must build LibreOffice as a normal user - not using an administrative account])
573 # need sed in os checks...
574 AC_PATH_PROGS(SED, sed)
575 if test -z "$SED"; then
576     AC_MSG_ERROR([install sed to run this script])
579 # Set the ENABLE_LTO variable
580 # ===================================================================
581 AC_MSG_CHECKING([whether to use link-time optimization])
582 if test -n "$enable_lto" -a "$enable_lto" != "no"; then
583     ENABLE_LTO="TRUE"
584     AC_MSG_RESULT([yes])
585 else
586     ENABLE_LTO=""
587     AC_MSG_RESULT([no])
589 AC_SUBST(ENABLE_LTO)
591 AC_ARG_ENABLE(fuzz-options,
592     AS_HELP_STRING([--enable-fuzz-options],
593         [Randomly enable or disable each of those configurable options
594          that are supposed to be freely selectable without interdependencies,
595          or where bad interaction from interdependencies is automatically avoided.])
598 dnl ===================================================================
599 dnl When building for Android, --with-android-ndk,
600 dnl --with-android-ndk-toolchain-version and --with-android-sdk are
601 dnl mandatory
602 dnl ===================================================================
604 AC_ARG_WITH(android-ndk,
605     AS_HELP_STRING([--with-android-ndk],
606         [Specify location of the Android Native Development Kit. Mandatory when building for Android.]),
609 AC_ARG_WITH(android-ndk-toolchain-version,
610     AS_HELP_STRING([--with-android-ndk-toolchain-version],
611         [Specify which toolchain version to use, of those present in the
612         Android NDK you are using. The default (and only supported version currently) is "clang5.0"]),,
613         with_android_ndk_toolchain_version=clang5.0)
615 AC_ARG_WITH(android-sdk,
616     AS_HELP_STRING([--with-android-sdk],
617         [Specify location of the Android SDK. Mandatory when building for Android.]),
620 AC_ARG_WITH(android-api-level,
621     AS_HELP_STRING([--with-android-api-level],
622         [Specify the API level when building for Android. Defaults to 16 for ARM and x86 and to 21 for ARM64 and x86-64]),
625 ANDROID_NDK_HOME=
626 if test -z "$with_android_ndk" -a -e "$SRC_ROOT/external/android-ndk" -a "$build" != "$host"; then
627     with_android_ndk="$SRC_ROOT/external/android-ndk"
629 if test -n "$with_android_ndk"; then
630     eval ANDROID_NDK_HOME=$with_android_ndk
632     # Set up a lot of pre-canned defaults
634     if test ! -f $ANDROID_NDK_HOME/RELEASE.TXT; then
635         if test ! -f $ANDROID_NDK_HOME/source.properties; then
636             AC_MSG_ERROR([Unrecognized Android NDK. Missing RELEASE.TXT or source.properties file in $ANDROID_NDK_HOME.])
637         fi
638         ANDROID_NDK_VERSION=`sed -n -e 's/Pkg.Revision = //p' $ANDROID_NDK_HOME/source.properties`
639     else
640         ANDROID_NDK_VERSION=`cut -f1 -d' ' <$ANDROID_NDK_HOME/RELEASE.TXT`
641     fi
642     if test -z "$ANDROID_NDK_VERSION";  then
643         AC_MSG_ERROR([Failed to determine Android NDK version. Please check your installation.])
644     fi
645     case $ANDROID_NDK_VERSION in
646     r9*|r10*)
647         AC_MSG_ERROR([Building for Android is only supported with NDK versions above 16.x*])
648         ;;
649     11.1.*|12.1.*|13.1.*|14.1.*)
650         AC_MSG_ERROR([Building for Android is only supported with NDK versions above 16.x.*])
651         ;;
652     16.*|17.*|18.*|19.*|20.*)
653         ;;
654     *)
655         AC_MSG_WARN([Untested Android NDK version $ANDROID_NDK_VERSION, only versions 16.* til 20.* have been used successfully. Proceed at your own risk.])
656         add_warning "Untested Android NDK version $ANDROID_NDK_VERSION, only versions 16.* til 20.* have been used successfully. Proceed at your own risk."
657         ;;
658     esac
660     ANDROID_API_LEVEL=16
661     if test -n "$with_android_api_level" ; then
662         ANDROID_API_LEVEL="$with_android_api_level"
663     fi
665     android_cpu=$host_cpu
666     if test $host_cpu = arm; then
667         android_platform_prefix=arm-linux-androideabi
668         android_gnu_prefix=$android_platform_prefix
669         LLVM_TRIPLE=armv7a-linux-androideabi
670         ANDROID_APP_ABI=armeabi-v7a
671         ANDROIDCFLAGS="-mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=neon -Wl,--fix-cortex-a8"
672     elif test $host_cpu = aarch64; then
673         android_platform_prefix=aarch64-linux-android
674         android_gnu_prefix=$android_platform_prefix
675         LLVM_TRIPLE=$android_platform_prefix
676         # minimum android version that supports aarch64
677         if test "$ANDROID_API_LEVEL" -lt "21" ; then
678             ANDROID_API_LEVEL=21
679         fi
680         ANDROID_APP_ABI=arm64-v8a
681     elif test $host_cpu = x86_64; then
682         android_platform_prefix=x86_64-linux-android
683         android_gnu_prefix=$android_platform_prefix
684         LLVM_TRIPLE=$android_platform_prefix
685         # minimum android version that supports x86_64
686         ANDROID_API_LEVEL=21
687         ANDROID_APP_ABI=x86_64
688     else
689         # host_cpu is something like "i386" or "i686" I guess, NDK uses
690         # "x86" in some contexts
691         android_cpu=x86
692         android_platform_prefix=$android_cpu
693         android_gnu_prefix=i686-linux-android
694         LLVM_TRIPLE=$android_gnu_prefix
695         ANDROID_APP_ABI=x86
696     fi
698     case "$with_android_ndk_toolchain_version" in
699     clang5.0)
700         ANDROID_GCC_TOOLCHAIN_VERSION=4.9
701         ;;
702     *)
703         AC_MSG_ERROR([Unrecognized value for the --with-android-ndk-toolchain-version option. Building for Android is only supported with Clang 5.*])
704     esac
706     AC_MSG_NOTICE([using the Android API level... $ANDROID_API_LEVEL])
708     # NDK 15 or later toolchain is 64bit-only, except for Windows that we don't support. Using a 64-bit
709     # linker is required if you compile large parts of the code with -g. A 32-bit linker just won't
710     # manage to link the (app-specific) single huge .so that is built for the app in
711     # android/source/ if there is debug information in a significant part of the object files.
712     # (A 64-bit ld.gold grows too much over 10 gigabytes of virtual space when linking such a .so if
713     # all objects have been built with debug information.)
714     case $build_os in
715     linux-gnu*)
716         android_HOST_TAG=linux-x86_64
717         ;;
718     darwin*)
719         android_HOST_TAG=darwin-x86_64
720         ;;
721     *)
722         AC_MSG_ERROR([We only support building for Android from Linux or macOS])
723         # ndk would also support windows and windows-x86_64
724         ;;
725     esac
726     android_TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/$android_HOST_TAG
727     ANDROID_COMPILER_BIN=$android_TOOLCHAIN/bin
728     dnl TODO: NSS build uses it...
729     ANDROID_BINUTILS_PREBUILT_ROOT=$ANDROID_NDK_HOME/toolchains/$android_platform_prefix-$ANDROID_GCC_TOOLCHAIN_VERSION/prebuilt/$android_HOST_TAG
730     AC_SUBST(ANDROID_BINUTILS_PREBUILT_ROOT)
732     test -z "$AR" && AR=$ANDROID_COMPILER_BIN/$android_gnu_prefix-ar
733     test -z "$NM" && NM=$ANDROID_COMPILER_BIN/$android_gnu_prefix-nm
734     test -z "$OBJDUMP" && OBJDUMP=$ANDROID_COMPILER_BIN/$android_gnu_prefix-objdump
735     test -z "$RANLIB" && RANLIB=$ANDROID_COMPILER_BIN/$android_gnu_prefix-ranlib
736     test -z "$STRIP" && STRIP=$ANDROID_COMPILER_BIN/$android_gnu_prefix-strip
738     ANDROIDCFLAGS="$ANDROIDCFLAGS -target ${LLVM_TRIPLE}${ANDROID_API_LEVEL}"
739     ANDROIDCFLAGS="$ANDROIDCFLAGS -no-canonical-prefixes -ffunction-sections -fdata-sections -Qunused-arguments"
740     if test "$ENABLE_LTO" = TRUE; then
741         # -flto comes from com_GCC_defs.mk, too, but we need to make sure it gets passed as part of
742         # $CC and $CXX when building external libraries
743         ANDROIDCFLAGS="$ANDROIDCFLAGS -flto -fuse-linker-plugin -O2"
744     fi
746     ANDROIDCXXFLAGS="$ANDROIDCFLAGS -stdlib=libc++"
748     if test -z "$CC"; then
749         CC="$ANDROID_COMPILER_BIN/clang $ANDROIDCFLAGS"
750         CC_BASE="clang"
751     fi
752     if test -z "$CXX"; then
753         CXX="$ANDROID_COMPILER_BIN/clang++ $ANDROIDCXXFLAGS"
754         CXX_BASE="clang++"
755     fi
757 AC_SUBST(ANDROID_NDK_HOME)
758 AC_SUBST(ANDROID_APP_ABI)
759 AC_SUBST(ANDROID_GCC_TOOLCHAIN_VERSION)
761 dnl ===================================================================
762 dnl --with-android-sdk
763 dnl ===================================================================
764 ANDROID_SDK_HOME=
765 if test -z "$with_android_sdk" -a -e "$SRC_ROOT/external/android-sdk-linux" -a "$build" != "$host"; then
766     with_android_sdk="$SRC_ROOT/external/android-sdk-linux"
768 if test -n "$with_android_sdk"; then
769     eval ANDROID_SDK_HOME=$with_android_sdk
770     PATH="$ANDROID_SDK_HOME/platform-tools:$ANDROID_SDK_HOME/tools:$PATH"
772 AC_SUBST(ANDROID_SDK_HOME)
774 AC_ARG_ENABLE([android-lok],
775     AS_HELP_STRING([--enable-android-lok],
776         [The Android app from the android/ subdir needs several tweaks all
777          over the place that break the LOK when used in the Online-based
778          Android app.  This switch indicates that the intent of this build is
779          actually the Online-based, non-modified LOK.])
781 ENABLE_ANDROID_LOK=
782 if test -n "$ANDROID_NDK_HOME" ; then
783     if test "$enable_android_lok" = yes; then
784         ENABLE_ANDROID_LOK=TRUE
785         AC_DEFINE(HAVE_FEATURE_ANDROID_LOK)
786         AC_MSG_NOTICE([building the Android version... for the Online-based Android app])
787     else
788         AC_MSG_NOTICE([building the Android version... for the app from the android/ subdir])
789     fi
791 AC_SUBST([ENABLE_ANDROID_LOK])
793 libo_FUZZ_ARG_ENABLE([android-editing],
794     AS_HELP_STRING([--enable-android-editing],
795         [Enable the experimental editing feature on Android.])
797 ENABLE_ANDROID_EDITING=
798 if test "$enable_android_editing" = yes; then
799     ENABLE_ANDROID_EDITING=TRUE
801 AC_SUBST([ENABLE_ANDROID_EDITING])
803 disable_database_connectivity_dependencies()
805     enable_evolution2=no
806     enable_firebird_sdbc=no
807     enable_mariadb_sdbc=no
808     enable_postgresql_sdbc=no
809     enable_report_builder=no
812 # ===================================================================
814 # Start initial platform setup
816 # The using_* variables reflect platform support and should not be
817 # changed after the "End initial platform setup" block.
818 # This is also true for most test_* variables.
819 # ===================================================================
820 build_crypto=yes
821 test_cmis=yes
822 test_gdb_index=no
823 test_openldap=yes
824 test_split_debug=no
825 test_webdav=yes
827 # There is currently just iOS not using salplug, so this explicitly enables it.
828 # must: using_freetype_fontconfig
829 #  may: using_headless_plugin defaults to $using_freetype_fontconfig
830 using_vclplug=yes
831 # must: using_x11
833 # Default values, as such probably valid just for Linux, set
834 # differently below just for Mac OSX, but at least better than
835 # hardcoding these as we used to do. Much of this is duplicated also
836 # in solenv for old build system and for gbuild, ideally we should
837 # perhaps define stuff like this only here in configure.ac?
839 LINKFLAGSSHL="-shared"
840 PICSWITCH="-fpic"
841 DLLPOST=".so"
843 LINKFLAGSNOUNDEFS="-Wl,-z,defs"
845 INSTROOTBASESUFFIX=
846 INSTROOTCONTENTSUFFIX=
847 SDKDIRNAME=sdk
849 HOST_PLATFORM="$host"
851 host_cpu_for_clang="$host_cpu"
853 case "$host_os" in
855 solaris*)
856     using_freetype_fontconfig=yes
857     using_x11=yes
858     build_skia=yes
859     _os=SunOS
861     dnl ===========================================================
862     dnl Check whether we're using Solaris 10 - SPARC or Intel.
863     dnl ===========================================================
864     AC_MSG_CHECKING([the Solaris operating system release])
865     _os_release=`echo $host_os | $SED -e s/solaris2\.//`
866     if test "$_os_release" -lt "10"; then
867         AC_MSG_ERROR([use Solaris >= 10 to build LibreOffice])
868     else
869         AC_MSG_RESULT([ok ($_os_release)])
870     fi
872     dnl Check whether we're using a SPARC or i386 processor
873     AC_MSG_CHECKING([the processor type])
874     if test "$host_cpu" = "sparc" -o "$host_cpu" = "i386"; then
875         AC_MSG_RESULT([ok ($host_cpu)])
876     else
877         AC_MSG_ERROR([only SPARC and i386 processors are supported])
878     fi
879     ;;
881 linux-gnu*|k*bsd*-gnu*|linux-musl*)
882     using_freetype_fontconfig=yes
883     using_x11=yes
884     build_skia=yes
885     test_gdb_index=yes
886     test_split_debug=yes
887     if test "$enable_fuzzers" = yes; then
888         test_system_freetype=no
889     fi
890     _os=Linux
891     ;;
893 gnu)
894     using_freetype_fontconfig=yes
895     using_x11=no
896     _os=GNU
897      ;;
899 cygwin*|wsl*)
900     # When building on Windows normally with MSVC under Cygwin,
901     # configure thinks that the host platform (the platform the
902     # built code will run on) is Cygwin, even if it obviously is
903     # Windows, which in Autoconf terminology is called
904     # "mingw32". (Which is misleading as MinGW is the name of the
905     # tool-chain, not an operating system.)
907     # Somewhat confusing, yes. But this configure script doesn't
908     # look at $host etc that much, it mostly uses its own $_os
909     # variable, set here in this case statement.
911     using_freetype_fontconfig=no
912     using_x11=no
913     test_openldap=no
914     build_skia=yes
915     _os=WINNT
917     DLLPOST=".dll"
918     LINKFLAGSNOUNDEFS=
920     if test "$host_cpu" = "aarch64"; then
921         build_skia=no
922         enable_gpgmepp=no
923         enable_coinmp=no
924         enable_firebird_sdbc=no
925     fi
926     ;;
928 darwin*|macos*) # macOS
929     using_freetype_fontconfig=no
930     using_x11=no
931     build_skia=yes
932     if test -n "$LODE_HOME" ; then
933         mac_sanitize_path
934         AC_MSG_NOTICE([sanitized the PATH to $PATH])
935     fi
936     _os=Darwin
937     INSTROOTBASESUFFIX=/$PRODUCTNAME_WITHOUT_SPACES.app
938     INSTROOTCONTENTSUFFIX=/Contents
939     SDKDIRNAME=${PRODUCTNAME_WITHOUT_SPACES}${PRODUCTVERSION}_SDK
940     # See comment above the case "$host_os"
941     LINKFLAGSSHL="-dynamiclib -single_module"
943     # -fPIC is default
944     PICSWITCH=""
946     DLLPOST=".dylib"
948     # -undefined error is the default
949     LINKFLAGSNOUNDEFS=""
950     case "$host_cpu" in
951     aarch64|arm64)
952         case "$host_os" in
953         macos*)
954             # HOST_PLATFORM is used for external projects and their configury occasionally doesn't like
955             # the "macos" part so be sure to use aarch64-apple-darwin for now.
956             HOST_PLATFORM=aarch64-apple-darwin
957             ;;
958         esac
960         # Apple's Clang uses "arm64"
961         host_cpu_for_clang=arm64
962     esac
965 ios*) # iOS
966     using_freetype_fontconfig=no
967     using_vclplug=no
968     using_x11=no
969     build_crypto=no
970     test_cmis=no
971     test_openldap=no
972     test_webdav=no
973     if test -n "$LODE_HOME" ; then
974         mac_sanitize_path
975         AC_MSG_NOTICE([sanitized the PATH to $PATH])
976     fi
977     enable_gpgmepp=no
978     _os=iOS
979     enable_mpl_subset=yes
980     enable_lotuswordpro=no
981     disable_database_connectivity_dependencies
982     enable_coinmp=no
983     enable_lpsolve=no
984     enable_extension_integration=no
985     enable_xmlhelp=no
986     with_ppds=no
987     if test "$enable_ios_simulator" = "yes"; then
988         host=x86_64-apple-darwin
989     fi
990     # See comment above the case "$host_os"
991     LINKFLAGSSHL="-dynamiclib -single_module"
993     # -fPIC is default
994     PICSWITCH=""
996     DLLPOST=".dylib"
998     # -undefined error is the default
999     LINKFLAGSNOUNDEFS=""
1001     # HOST_PLATFORM is used for external projects and their configury typically doesn't like the "ios"
1002     # part, so use aarch64-apple-darwin for now.
1003     HOST_PLATFORM=aarch64-apple-darwin
1005     # Apple's Clang uses "arm64"
1006     host_cpu_for_clang=arm64
1009 freebsd*)
1010     using_freetype_fontconfig=yes
1011     using_x11=yes
1012     build_skia=yes
1013     AC_MSG_CHECKING([the FreeBSD operating system release])
1014     if test -n "$with_os_version"; then
1015         OSVERSION="$with_os_version"
1016     else
1017         OSVERSION=`/sbin/sysctl -n kern.osreldate`
1018     fi
1019     AC_MSG_RESULT([found OSVERSION=$OSVERSION])
1020     AC_MSG_CHECKING([which thread library to use])
1021     if test "$OSVERSION" -lt "500016"; then
1022         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1023         PTHREAD_LIBS="-pthread"
1024     elif test "$OSVERSION" -lt "502102"; then
1025         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1026         PTHREAD_LIBS="-lc_r"
1027     else
1028         PTHREAD_CFLAGS=""
1029         PTHREAD_LIBS="-pthread"
1030     fi
1031     AC_MSG_RESULT([$PTHREAD_LIBS])
1032     _os=FreeBSD
1033     ;;
1035 *netbsd*)
1036     using_freetype_fontconfig=yes
1037     using_x11=yes
1038     test_gtk3_kde5=no
1039     build_skia=yes
1040     PTHREAD_LIBS="-pthread -lpthread"
1041     _os=NetBSD
1042     ;;
1044 aix*)
1045     using_freetype_fontconfig=yes
1046     using_x11=yes
1047     test_randr=no
1048     test_gstreamer_1_0=no
1049     PTHREAD_LIBS=-pthread
1050     _os=AIX
1051     ;;
1053 openbsd*)
1054     using_freetype_fontconfig=yes
1055     using_x11=yes
1056     PTHREAD_CFLAGS="-D_THREAD_SAFE"
1057     PTHREAD_LIBS="-pthread"
1058     _os=OpenBSD
1059     ;;
1061 dragonfly*)
1062     using_freetype_fontconfig=yes
1063     using_x11=yes
1064     build_skia=yes
1065     PTHREAD_LIBS="-pthread"
1066     _os=DragonFly
1067     ;;
1069 linux-android*)
1070     using_freetype_fontconfig=yes
1071     using_headless_plugin=no
1072     using_x11=no
1073     build_crypto=no
1074     test_openldap=no
1075     test_system_freetype=no
1076     test_webdav=no
1077     disable_database_connectivity_dependencies
1078     enable_lotuswordpro=no
1079     enable_mpl_subset=yes
1080     enable_cairo_canvas=no
1081     enable_coinmp=yes
1082     enable_lpsolve=no
1083     enable_odk=no
1084     enable_python=no
1085     enable_xmlhelp=no
1086     _os=Android
1088     AC_DEFINE(HAVE_FT_FACE_GETCHARVARIANTINDEX)
1089     ;;
1091 haiku*)
1092     using_freetype_fontconfig=yes
1093     using_x11=no
1094     test_gtk3_kde5=no
1095     test_kf5=yes
1096     enable_odk=no
1097     enable_coinmp=no
1098     enable_pdfium=no
1099     enable_sdremote=no
1100     enable_postgresql_sdbc=no
1101     enable_firebird_sdbc=no
1102     _os=Haiku
1103     ;;
1105 emscripten)
1106     using_freetype_fontconfig=yes
1107     using_x11=no
1108     test_openldap=no
1109     enable_compiler_plugins=no
1110     test_cmis=no
1111     test_webdav=no
1112     enable_database_connectivity=no
1113     enable_lpsolve=no
1114     enable_xmlhelp=no
1115     with_system_zlib=no
1116     with_theme="breeze"
1117     _os=Emscripten
1118     ;;
1121     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
1122     ;;
1123 esac
1125 AC_SUBST(HOST_PLATFORM)
1127 if test -z "$using_x11" -o -z "$using_freetype_fontconfig"; then
1128     AC_MSG_ERROR([You must set \$using_freetype_fontconfig and \$using_x11 for your platform])
1131 # Set defaults, if not set by platform
1132 test "${test_cups+set}" = set || test_cups="$using_x11"
1133 test "${test_dbus+set}" = set || test_dbus="$using_x11"
1134 test "${test_gstreamer_1_0+set}" = set || test_gstreamer_1_0="$using_x11"
1135 test "${test_gtk3+set}" = set || test_gtk3="$using_x11"
1136 test "${test_gtk4+set}" = set || test_gtk4="$using_x11"
1137 test "${test_kf5+set}" = set || test_kf5="$using_x11"
1138 # don't handle test_qt5, so it can disable test_kf5 later
1139 test "${test_qt6+set}" = set || test_qt6="$using_x11"
1140 test "${test_randr+set}" = set || test_randr="$using_x11"
1141 test "${test_xrender+set}" = set || test_xrender="$using_x11"
1142 test "${using_headless_plugin+set}" = set || using_headless_plugin="$using_freetype_fontconfig"
1144 test "${test_gtk3_kde5+set}" != set -a "$test_kf5" = yes -a "$test_gtk3" = yes && test_gtk3_kde5="yes"
1145 test "${test_system_fontconfig+set}" != set -a "${test_system_freetype+set}" = set && test_system_fontconfig="$test_system_freetype"
1146 test "${test_system_freetype+set}" != set -a "${test_system_fontconfig+set}" = set && test_system_freetype="$test_system_fontconfig"
1148 # convenience / platform overriding "fixes"
1149 # Don't sort!
1150 test "$test_kf5" = yes -a "$test_qt5" = no && test_kf5=no
1151 test "$test_kf5" = yes && test_qt5=yes
1152 test "$test_gtk3" != yes -o "$test_kf5" != yes && test_gtk3_kde5=no
1153 test "$using_freetype_fontconfig" = no && using_headless_plugin=no
1154 test "$using_freetype_fontconfig" = yes && test_cairo=yes
1156 # Keep in sync with the above $using_x11 depending test default list
1157 disable_x11_tests()
1159     test_cups=no
1160     test_dbus=no
1161     test_gstreamer_1_0=no
1162     test_gtk3_kde5=no
1163     test_gtk3=no
1164     test_gtk4=no
1165     test_kf5=no
1166     test_qt5=no
1167     test_qt6=no
1168     test_randr=no
1169     test_xrender=no
1172 test "$using_x11" = yes && USING_X11=TRUE
1174 if test "$using_freetype_fontconfig" = yes; then
1175     if test "$using_headless_plugin" = yes; then
1176         AC_DEFINE(ENABLE_HEADLESS)
1177         ENABLE_HEADLESS=TRUE
1178     fi
1181 AC_SUBST(ENABLE_HEADLESS)
1183 AC_MSG_NOTICE([VCL platform uses freetype+fontconfig: $using_freetype_fontconfig])
1184 AC_MSG_NOTICE([VCL platform uses headless plugin: $using_headless_plugin])
1185 AC_MSG_NOTICE([VCL platform uses vclplug: $using_vclplug])
1186 AC_MSG_NOTICE([VCL platform uses X11: $using_x11])
1188 # ===================================================================
1190 # End initial platform setup
1192 # ===================================================================
1194 if test "$_os" = "Android" ; then
1195     # Verify that the NDK and SDK options are proper
1196     if test -z "$with_android_ndk"; then
1197         AC_MSG_ERROR([the --with-android-ndk option is mandatory, unless it is available at external/android-ndk/.])
1198     elif test ! -f "$ANDROID_NDK_HOME/meta/abis.json"; then
1199         AC_MSG_ERROR([the --with-android-ndk option does not point to an Android NDK])
1200     fi
1202     if test -z "$ANDROID_SDK_HOME"; then
1203         AC_MSG_ERROR([the --with-android-sdk option is mandatory, unless it is available at external/android-sdk-linux/.])
1204     elif test ! -d "$ANDROID_SDK_HOME/platforms"; then
1205         AC_MSG_ERROR([the --with-android-sdk option does not point to an Android SDK])
1206     fi
1208     BUILD_TOOLS_VERSION=`$SED -n -e 's/.*buildToolsVersion "\(.*\)"/\1/p' $SRC_ROOT/android/source/build.gradle`
1209     if test ! -d "$ANDROID_SDK_HOME/build-tools/$BUILD_TOOLS_VERSION"; then
1210         AC_MSG_WARN([android build-tools $BUILD_TOOLS_VERSION not found - install with
1211                          $ANDROID_SDK_HOME/tools/android update sdk -u --all --filter build-tools-$BUILD_TOOLS_VERSION
1212                     or adjust change $SRC_ROOT/android/source/build.gradle accordingly])
1213         add_warning "android build-tools $BUILD_TOOLS_VERSION not found - install with"
1214         add_warning "    $ANDROID_SDK_HOME/tools/android update sdk -u --all --filter build-tools-$BUILD_TOOLS_VERSION"
1215         add_warning "or adjust $SRC_ROOT/android/source/build.gradle accordingly"
1216     fi
1217     if test ! -f "$ANDROID_SDK_HOME/extras/android/m2repository/source.properties"; then
1218         AC_MSG_WARN([android support repository not found - install with
1219                          $ANDROID_SDK_HOME/tools/android update sdk -u --filter extra-android-m2repository
1220                      to allow the build to download the specified version of the android support libraries])
1221         add_warning "android support repository not found - install with"
1222         add_warning "    $ANDROID_SDK_HOME/tools/android update sdk -u --filter extra-android-m2repository"
1223         add_warning "to allow the build to download the specified version of the android support libraries"
1224     fi
1227 if test "$_os" = "AIX"; then
1228     AC_PATH_PROG(GAWK, gawk)
1229     if test -z "$GAWK"; then
1230         AC_MSG_ERROR([gawk not found in \$PATH])
1231     fi
1234 AC_SUBST(SDKDIRNAME)
1236 AC_SUBST(PTHREAD_CFLAGS)
1237 AC_SUBST(PTHREAD_LIBS)
1239 # Check for explicit A/C/CXX/OBJC/OBJCXX/LDFLAGS.
1240 # By default use the ones specified by our build system,
1241 # but explicit override is possible.
1242 AC_MSG_CHECKING(for explicit AFLAGS)
1243 if test -n "$AFLAGS"; then
1244     AC_MSG_RESULT([$AFLAGS])
1245     x_AFLAGS=
1246 else
1247     AC_MSG_RESULT(no)
1248     x_AFLAGS=[\#]
1250 AC_MSG_CHECKING(for explicit CFLAGS)
1251 if test -n "$CFLAGS"; then
1252     AC_MSG_RESULT([$CFLAGS])
1253     x_CFLAGS=
1254 else
1255     AC_MSG_RESULT(no)
1256     x_CFLAGS=[\#]
1258 AC_MSG_CHECKING(for explicit CXXFLAGS)
1259 if test -n "$CXXFLAGS"; then
1260     AC_MSG_RESULT([$CXXFLAGS])
1261     x_CXXFLAGS=
1262 else
1263     AC_MSG_RESULT(no)
1264     x_CXXFLAGS=[\#]
1266 AC_MSG_CHECKING(for explicit OBJCFLAGS)
1267 if test -n "$OBJCFLAGS"; then
1268     AC_MSG_RESULT([$OBJCFLAGS])
1269     x_OBJCFLAGS=
1270 else
1271     AC_MSG_RESULT(no)
1272     x_OBJCFLAGS=[\#]
1274 AC_MSG_CHECKING(for explicit OBJCXXFLAGS)
1275 if test -n "$OBJCXXFLAGS"; then
1276     AC_MSG_RESULT([$OBJCXXFLAGS])
1277     x_OBJCXXFLAGS=
1278 else
1279     AC_MSG_RESULT(no)
1280     x_OBJCXXFLAGS=[\#]
1282 AC_MSG_CHECKING(for explicit LDFLAGS)
1283 if test -n "$LDFLAGS"; then
1284     AC_MSG_RESULT([$LDFLAGS])
1285     x_LDFLAGS=
1286 else
1287     AC_MSG_RESULT(no)
1288     x_LDFLAGS=[\#]
1290 AC_SUBST(AFLAGS)
1291 AC_SUBST(CFLAGS)
1292 AC_SUBST(CXXFLAGS)
1293 AC_SUBST(OBJCFLAGS)
1294 AC_SUBST(OBJCXXFLAGS)
1295 AC_SUBST(LDFLAGS)
1296 AC_SUBST(x_AFLAGS)
1297 AC_SUBST(x_CFLAGS)
1298 AC_SUBST(x_CXXFLAGS)
1299 AC_SUBST(x_OBJCFLAGS)
1300 AC_SUBST(x_OBJCXXFLAGS)
1301 AC_SUBST(x_LDFLAGS)
1303 dnl These are potentially set for MSVC, in the code checking for UCRT below:
1304 my_original_CFLAGS=$CFLAGS
1305 my_original_CXXFLAGS=$CXXFLAGS
1306 my_original_CPPFLAGS=$CPPFLAGS
1308 dnl The following checks for gcc, cc and then cl (if it weren't guarded for win32)
1309 dnl Needs to precede the AC_C_BIGENDIAN and AC_SEARCH_LIBS calls below, which apparently call
1310 dnl AC_PROG_CC internally.
1311 if test "$_os" != "WINNT"; then
1312     # AC_PROG_CC sets CFLAGS to -g -O2 if not set, avoid that
1313     save_CFLAGS=$CFLAGS
1314     AC_PROG_CC
1315     CFLAGS=$save_CFLAGS
1316     if test -z "$CC_BASE"; then
1317         CC_BASE=`first_arg_basename "$CC"`
1318     fi
1321 if test "$_os" != "WINNT"; then
1322     AC_C_BIGENDIAN([ENDIANNESS=big], [ENDIANNESS=little])
1323 else
1324     ENDIANNESS=little
1326 AC_SUBST(ENDIANNESS)
1328 if test $_os != "WINNT"; then
1329     save_LIBS="$LIBS"
1330     AC_SEARCH_LIBS([dlsym], [dl],
1331         [case "$ac_cv_search_dlsym" in -l*) DLOPEN_LIBS="$ac_cv_search_dlsym";; esac],
1332         [AC_MSG_ERROR([dlsym not found in either libc nor libdl])])
1333     LIBS="$save_LIBS"
1335 AC_SUBST(DLOPEN_LIBS)
1337 # Check for a (GNU) backtrace implementation
1338 AC_ARG_VAR([BACKTRACE_CFLAGS], [Compiler flags needed to use backtrace(3)])
1339 AC_ARG_VAR([BACKTRACE_LIBS], [Linker flags needed to use backtrace(3)])
1340 AS_IF([test "x$BACKTRACE_LIBS$BACKTRACE_CFLAGS" = x], [
1341     save_LIBS="$LIBS"
1342     AC_SEARCH_LIBS([backtrace], [libexecinfo],
1343         [case "$ac_cv_search_backtrace" in -l*) BACKTRACE_LIBS="$ac_cv_search_backtrace";; esac],
1344         [PKG_CHECK_MODULES([BACKTRACE], [libexecinfo], [ac_cv_search_backtrace=], [:])])
1345     LIBS="$save_LIBS"
1347 AS_IF([test "x$ac_cv_search_backtrace" != xno ], [
1348     AC_DEFINE([HAVE_FEATURE_BACKTRACE])
1351 dnl ===================================================================
1352 dnl Sanity checks for Emscripten SDK setup
1353 dnl ===================================================================
1355 if test "$_os" = "Emscripten"; then
1356     EMSCRIPTEN_ERROR=0
1357     if ! which emconfigure >/dev/null 2>&1; then
1358         AC_MSG_WARN([emconfigure must be in your \$PATH])
1359         EMSCRIPTEN_ERROR=1
1360     fi
1361     if test -z "$EMMAKEN_JUST_CONFIGURE"; then
1362         AC_MSG_WARN(["\$EMMAKEN_JUST_CONFIGURE wasn't set by emconfigure. Prefix configure or use autogen.sh])
1363         EMSCRIPTEN_ERROR=1
1364     fi
1365     if test $EMSCRIPTEN_ERROR -ne 0; then
1366         AC_MSG_ERROR(["Please fix your EMSDK setup to build with Emscripten!"])
1367     fi
1370 ###############################################################################
1371 # Extensions switches --enable/--disable
1372 ###############################################################################
1373 # By default these should be enabled unless having extra dependencies.
1374 # If there is extra dependency over configure options then the enable should
1375 # be automagic based on whether the requiring feature is enabled or not.
1376 # All this options change anything only with --enable-extension-integration.
1378 # The name of this option and its help string makes it sound as if
1379 # extensions are built anyway, just not integrated in the installer,
1380 # if you use --disable-extension-integration. Is that really the
1381 # case?
1383 AC_ARG_ENABLE(ios-simulator,
1384     AS_HELP_STRING([--enable-ios-simulator],
1385         [build for iOS simulator])
1388 libo_FUZZ_ARG_ENABLE(extension-integration,
1389     AS_HELP_STRING([--disable-extension-integration],
1390         [Disable integration of the built extensions in the installer of the
1391          product. Use this switch to disable the integration.])
1394 AC_ARG_ENABLE(avmedia,
1395     AS_HELP_STRING([--disable-avmedia],
1396         [Disable displaying and inserting AV media in documents. Work in progress, use only if you are hacking on it.])
1399 AC_ARG_ENABLE(database-connectivity,
1400     AS_HELP_STRING([--disable-database-connectivity],
1401         [Disable various database connectivity. Work in progress, use only if you are hacking on it.])
1404 # This doesn't mean not building (or "integrating") extensions
1405 # (although it probably should; i.e. it should imply
1406 # --disable-extension-integration I guess), it means not supporting
1407 # any extension mechanism at all
1408 libo_FUZZ_ARG_ENABLE(extensions,
1409     AS_HELP_STRING([--disable-extensions],
1410         [Disable all add-on extension functionality. Work in progress, use only if you are hacking on it.])
1413 AC_ARG_ENABLE(scripting,
1414     AS_HELP_STRING([--disable-scripting],
1415         [Disable BASIC, Java and Python. Work in progress, use only if you are hacking on it.])
1418 # This is mainly for Android and iOS, but could potentially be used in some
1419 # special case otherwise, too, so factored out as a separate setting
1421 AC_ARG_ENABLE(dynamic-loading,
1422     AS_HELP_STRING([--disable-dynamic-loading],
1423         [Disable any use of dynamic loading of code. Work in progress, use only if you are hacking on it.])
1426 libo_FUZZ_ARG_ENABLE(report-builder,
1427     AS_HELP_STRING([--disable-report-builder],
1428         [Disable the Report Builder.])
1431 libo_FUZZ_ARG_ENABLE(ext-wiki-publisher,
1432     AS_HELP_STRING([--enable-ext-wiki-publisher],
1433         [Enable the Wiki Publisher extension.])
1436 libo_FUZZ_ARG_ENABLE(lpsolve,
1437     AS_HELP_STRING([--disable-lpsolve],
1438         [Disable compilation of the lp solve solver ])
1440 libo_FUZZ_ARG_ENABLE(coinmp,
1441     AS_HELP_STRING([--disable-coinmp],
1442         [Disable compilation of the CoinMP solver ])
1445 libo_FUZZ_ARG_ENABLE(pdfimport,
1446     AS_HELP_STRING([--disable-pdfimport],
1447         [Disable building the PDF import feature.])
1450 libo_FUZZ_ARG_ENABLE(pdfium,
1451     AS_HELP_STRING([--disable-pdfium],
1452         [Disable building PDFium. Results in unsecure PDF signature verification.])
1455 libo_FUZZ_ARG_ENABLE(skia,
1456     AS_HELP_STRING([--disable-skia],
1457         [Disable building Skia. Use --enable-skia=debug to build without optimizations.])
1460 ###############################################################################
1462 dnl ---------- *** ----------
1464 libo_FUZZ_ARG_ENABLE(mergelibs,
1465     AS_HELP_STRING([--enable-mergelibs],
1466         [Merge several of the smaller libraries into one big, "merged", one.])
1469 libo_FUZZ_ARG_ENABLE(breakpad,
1470     AS_HELP_STRING([--enable-breakpad],
1471         [Enables breakpad for crash reporting.])
1474 libo_FUZZ_ARG_ENABLE(crashdump,
1475     AS_HELP_STRING([--disable-crashdump],
1476         [Disable dump.ini and dump-file, when --enable-breakpad])
1479 AC_ARG_ENABLE(fetch-external,
1480     AS_HELP_STRING([--disable-fetch-external],
1481         [Disables fetching external tarballs from web sources.])
1484 AC_ARG_ENABLE(fuzzers,
1485     AS_HELP_STRING([--enable-fuzzers],
1486         [Enables building libfuzzer targets for fuzz testing.])
1489 libo_FUZZ_ARG_ENABLE(pch,
1490     AS_HELP_STRING([--enable-pch=<yes/no/system/base/normal/full>],
1491         [Enables precompiled header support for C++. Forced default on Windows/VC build.
1492          Using 'system' will include only external headers, 'base' will add also headers
1493          from base modules, 'normal' will also add all headers except from the module built,
1494          'full' will use all suitable headers even from a module itself.])
1497 libo_FUZZ_ARG_ENABLE(epm,
1498     AS_HELP_STRING([--enable-epm],
1499         [LibreOffice includes self-packaging code, that requires epm, however epm is
1500          useless for large scale package building.])
1503 libo_FUZZ_ARG_ENABLE(odk,
1504     AS_HELP_STRING([--enable-odk],
1505         [Enable building the Office Development Kit, the part that extensions need to build against])
1508 AC_ARG_ENABLE(mpl-subset,
1509     AS_HELP_STRING([--enable-mpl-subset],
1510         [Don't compile any pieces which are not MPL or more liberally licensed])
1513 libo_FUZZ_ARG_ENABLE(evolution2,
1514     AS_HELP_STRING([--enable-evolution2],
1515         [Allows the built-in evolution 2 addressbook connectivity build to be
1516          enabled.])
1519 AC_ARG_ENABLE(avahi,
1520     AS_HELP_STRING([--enable-avahi],
1521         [Determines whether to use Avahi to advertise Impress to remote controls.])
1524 libo_FUZZ_ARG_ENABLE(werror,
1525     AS_HELP_STRING([--enable-werror],
1526         [Turn warnings to errors. (Has no effect in modules where the treating
1527          of warnings as errors is disabled explicitly.)]),
1530 libo_FUZZ_ARG_ENABLE(assert-always-abort,
1531     AS_HELP_STRING([--enable-assert-always-abort],
1532         [make assert() failures abort even when building without --enable-debug or --enable-dbgutil.]),
1535 libo_FUZZ_ARG_ENABLE(dbgutil,
1536     AS_HELP_STRING([--enable-dbgutil],
1537         [Provide debugging support from --enable-debug and include additional debugging
1538          utilities such as object counting or more expensive checks.
1539          This is the recommended option for developers.
1540          Note that this makes the build ABI incompatible, it is not possible to mix object
1541          files or libraries from a --enable-dbgutil and a --disable-dbgutil build.]))
1543 libo_FUZZ_ARG_ENABLE(debug,
1544     AS_HELP_STRING([--enable-debug],
1545         [Include debugging information, disable compiler optimization and inlining plus
1546          extra debugging code like assertions. Extra large build! (enables -g compiler flag).]))
1548 libo_FUZZ_ARG_ENABLE(split-debug,
1549     AS_HELP_STRING([--disable-split-debug],
1550         [Disable using split debug information (-gsplit-dwarf compile flag). Split debug information
1551          saves disk space and build time, but requires tools that support it (both build tools and debuggers).]))
1553 libo_FUZZ_ARG_ENABLE(gdb-index,
1554     AS_HELP_STRING([--disable-gdb-index],
1555         [Disables creating debug information in the gdb index format, which makes gdb start faster.
1556          The feature requires the gold or lld linker.]))
1558 libo_FUZZ_ARG_ENABLE(sal-log,
1559     AS_HELP_STRING([--enable-sal-log],
1560         [Make SAL_INFO and SAL_WARN calls do something even in a non-debug build.]))
1562 libo_FUZZ_ARG_ENABLE(symbols,
1563     AS_HELP_STRING([--enable-symbols],
1564         [Generate debug information.
1565          By default, enabled for --enable-debug and --enable-dbgutil, disabled
1566          otherwise. It is possible to explicitly specify gbuild build targets
1567          (where 'all' means everything, '-' prepended means to not enable, '/' appended means
1568          everything in the directory; there is no ordering, more specific overrides
1569          more general, and disabling takes precedence).
1570          Example: --enable-symbols="all -sw/ -Library_sc".]))
1572 libo_FUZZ_ARG_ENABLE(optimized,
1573     AS_HELP_STRING([--enable-optimized=<yes/no/debug>],
1574         [Whether to compile with optimization flags.
1575          By default, disabled for --enable-debug and --enable-dbgutil, enabled
1576          otherwise. Using 'debug' will try to use only optimizations that should
1577          not interfere with debugging. For Emscripten we default to optimized (-O1)
1578          debug build, as otherwise binaries become too large.]))
1580 libo_FUZZ_ARG_ENABLE(runtime-optimizations,
1581     AS_HELP_STRING([--disable-runtime-optimizations],
1582         [Statically disable certain runtime optimizations (like rtl/alloc.h or
1583          JVM JIT) that are known to interact badly with certain dynamic analysis
1584          tools (like -fsanitize=address or Valgrind).  By default, disabled iff
1585          CC contains "-fsanitize=*".  (For Valgrind, those runtime optimizations
1586          are typically disabled dynamically via RUNNING_ON_VALGRIND.)]))
1588 AC_ARG_WITH(valgrind,
1589     AS_HELP_STRING([--with-valgrind],
1590         [Make availability of Valgrind headers a hard requirement.]))
1592 libo_FUZZ_ARG_ENABLE(compiler-plugins,
1593     AS_HELP_STRING([--enable-compiler-plugins],
1594         [Enable compiler plugins that will perform additional checks during
1595          building. Enabled automatically by --enable-dbgutil.
1596          Use --enable-compiler-plugins=debug to also enable debug code in the plugins.]))
1597 COMPILER_PLUGINS_DEBUG=
1598 if test "$enable_compiler_plugins" = debug; then
1599     enable_compiler_plugins=yes
1600     COMPILER_PLUGINS_DEBUG=TRUE
1603 libo_FUZZ_ARG_ENABLE(compiler-plugins-analyzer-pch,
1604     AS_HELP_STRING([--disable-compiler-plugins-analyzer-pch],
1605         [Disable use of precompiled headers when running the Clang compiler plugin analyzer.  Not
1606          relevant in the --disable-compiler-plugins case.]))
1608 libo_FUZZ_ARG_ENABLE(ooenv,
1609     AS_HELP_STRING([--enable-ooenv],
1610         [Enable ooenv for the instdir installation.]))
1612 AC_ARG_ENABLE(lto,
1613     AS_HELP_STRING([--enable-lto],
1614         [Enable link-time optimization. Suitable for (optimised) product builds. Building might take
1615          longer but libraries and executables are optimized for speed. For GCC, best to use the 'gold'
1616          linker.)]))
1618 AC_ARG_ENABLE(python,
1619     AS_HELP_STRING([--enable-python=<no/auto/system/internal/fully-internal>],
1620         [Enables or disables Python support at run-time.
1621          Also specifies what Python to use at build-time.
1622          'fully-internal' even forces the internal version for uses of Python
1623          during the build.
1624          On macOS the only choices are
1625          'internal' (default) or 'fully-internal'. Otherwise the default is 'auto'.
1626          ]))
1628 libo_FUZZ_ARG_ENABLE(gtk3,
1629     AS_HELP_STRING([--disable-gtk3],
1630         [Determines whether to use Gtk+ 3.0 vclplug on platforms where Gtk+ 3.0 is available.]),
1631 ,test "${enable_gtk3+set}" = set || enable_gtk3=yes)
1633 AC_ARG_ENABLE(gtk4,
1634     AS_HELP_STRING([--enable-gtk4],
1635         [Determines whether to use Gtk+ 4.0 vclplug on platforms where Gtk+ 4.0 is available.]))
1637 AC_ARG_ENABLE(introspection,
1638     AS_HELP_STRING([--enable-introspection],
1639         [Generate files for GObject introspection.  Requires --enable-gtk3.  (Typically used by
1640          Linux distributions.)]))
1642 AC_ARG_ENABLE(split-app-modules,
1643     AS_HELP_STRING([--enable-split-app-modules],
1644         [Split file lists for app modules, e.g. base, calc.
1645          Has effect only with make distro-pack-install]),
1648 AC_ARG_ENABLE(split-opt-features,
1649     AS_HELP_STRING([--enable-split-opt-features],
1650         [Split file lists for some optional features, e.g. pyuno, testtool.
1651          Has effect only with make distro-pack-install]),
1654 libo_FUZZ_ARG_ENABLE(cairo-canvas,
1655     AS_HELP_STRING([--disable-cairo-canvas],
1656         [Determines whether to build the Cairo canvas on platforms where Cairo is available.]),
1659 libo_FUZZ_ARG_ENABLE(dbus,
1660     AS_HELP_STRING([--disable-dbus],
1661         [Determines whether to enable features that depend on dbus.
1662          e.g. Presentation mode screensaver control, bluetooth presentation control, automatic font install]),
1663 ,test "${enable_dbus+set}" = set || enable_dbus=yes)
1665 libo_FUZZ_ARG_ENABLE(sdremote,
1666     AS_HELP_STRING([--disable-sdremote],
1667         [Determines whether to enable Impress remote control (i.e. the server component).]),
1668 ,test "${enable_sdremote+set}" = set || enable_sdremote=yes)
1670 libo_FUZZ_ARG_ENABLE(sdremote-bluetooth,
1671     AS_HELP_STRING([--disable-sdremote-bluetooth],
1672         [Determines whether to build sdremote with bluetooth support.
1673          Requires dbus on Linux.]))
1675 libo_FUZZ_ARG_ENABLE(gio,
1676     AS_HELP_STRING([--disable-gio],
1677         [Determines whether to use the GIO support.]),
1678 ,test "${enable_gio+set}" = set || enable_gio=yes)
1680 AC_ARG_ENABLE(qt5,
1681     AS_HELP_STRING([--enable-qt5],
1682         [Determines whether to use Qt5 vclplug on platforms where Qt5 is
1683          available.]),
1686 AC_ARG_ENABLE(qt6,
1687     AS_HELP_STRING([--enable-qt6],
1688         [Determines whether to use Qt6 vclplug on platforms where Qt6 is
1689          available.]),
1692 AC_ARG_ENABLE(kf5,
1693     AS_HELP_STRING([--enable-kf5],
1694         [Determines whether to use Qt5/KF5 vclplug on platforms where Qt5 and
1695          KF5 are available.]),
1698 AC_ARG_ENABLE(gtk3_kde5,
1699     AS_HELP_STRING([--enable-gtk3-kde5],
1700         [Determines whether to use Gtk3 vclplug with KF5 file dialogs on
1701          platforms where Gtk3, Qt5 and Plasma is available.]),
1704 AC_ARG_ENABLE(gui,
1705     AS_HELP_STRING([--disable-gui],
1706         [Disable use of X11 or Wayland to reduce dependencies (e.g. for building LibreOfficeKit).]),
1707 ,enable_gui=yes)
1709 libo_FUZZ_ARG_ENABLE(randr,
1710     AS_HELP_STRING([--disable-randr],
1711         [Disable RandR support in the vcl project.]),
1712 ,test "${enable_randr+set}" = set || enable_randr=yes)
1714 libo_FUZZ_ARG_ENABLE(gstreamer-1-0,
1715     AS_HELP_STRING([--disable-gstreamer-1-0],
1716         [Disable building with the gstreamer 1.0 avmedia backend.]),
1717 ,test "${enable_gstreamer_1_0+set}" = set || enable_gstreamer_1_0=yes)
1719 libo_FUZZ_ARG_ENABLE([eot],
1720     [AS_HELP_STRING([--enable-eot],
1721         [Enable support for Embedded OpenType fonts.])],
1722 ,test "${enable_eot+set}" = set || enable_eot=no)
1724 libo_FUZZ_ARG_ENABLE(cve-tests,
1725     AS_HELP_STRING([--disable-cve-tests],
1726         [Prevent CVE tests to be executed]),
1729 libo_FUZZ_ARG_ENABLE(chart-tests,
1730     AS_HELP_STRING([--enable-chart-tests],
1731         [Executes chart XShape tests. In a perfect world these tests would be
1732          stable and everyone could run them, in reality it is best to run them
1733          only on a few machines that are known to work and maintained by people
1734          who can judge if a test failure is a regression or not.]),
1737 AC_ARG_ENABLE(build-opensymbol,
1738     AS_HELP_STRING([--enable-build-opensymbol],
1739         [Do not use the prebuilt opens___.ttf. Build it instead. This needs
1740          fontforge installed.]),
1743 AC_ARG_ENABLE(dependency-tracking,
1744     AS_HELP_STRING([--enable-dependency-tracking],
1745         [Do not reject slow dependency extractors.])[
1746   --disable-dependency-tracking
1747                           Disables generation of dependency information.
1748                           Speed up one-time builds.],
1751 AC_ARG_ENABLE(icecream,
1752     AS_HELP_STRING([--enable-icecream],
1753         [Use the 'icecream' distributed compiling tool to speedup the compilation.
1754          It defaults to /opt/icecream for the location of the icecream gcc/g++
1755          wrappers, you can override that using --with-gcc-home=/the/path switch.]),
1758 AC_ARG_ENABLE(ld,
1759     AS_HELP_STRING([--enable-ld=<linker>],
1760         [Use the specified linker. Both 'gold' and 'lld' linkers generally use less memory and link faster.
1761          By default tries to use the best linker possible, use --disable-ld to use the default linker.
1762          If <linker> contains any ':', the part before the first ':' is used as the value of
1763          -fuse-ld, while the part after the first ':' is used as the value of --ld-path (which is
1764          needed for Clang 12).]),
1767 libo_FUZZ_ARG_ENABLE(cups,
1768     AS_HELP_STRING([--disable-cups],
1769         [Do not build cups support.])
1772 AC_ARG_ENABLE(ccache,
1773     AS_HELP_STRING([--disable-ccache],
1774         [Do not try to use ccache automatically.
1775          By default we will try to detect if ccache is available; in that case if
1776          CC/CXX are not yet set, and --enable-icecream is not given, we
1777          attempt to use ccache. --disable-ccache disables ccache completely.
1778          Additionally ccache's depend mode is enabled if possible,
1779          use --enable-ccache=nodepend to enable ccache without depend mode.
1783 AC_ARG_ENABLE(z7-debug,
1784     AS_HELP_STRING([--enable-z7-debug],
1785         [Makes the MSVC compiler use -Z7 for debugging instead of the default -Zi. Using this option takes
1786          more disk spaces but allows to use ccache. Final PDB files are created even with this option enabled.
1787          Enabled by default if ccache is detected.]))
1789 libo_FUZZ_ARG_ENABLE(online-update,
1790     AS_HELP_STRING([--enable-online-update],
1791         [Enable the online update service that will check for new versions of
1792          LibreOffice. Disabled by default. Requires --with-privacy-policy-url to be set.
1793          If the value is "mar", the experimental Mozilla-like update will be
1794          enabled instead of the traditional update mechanism.]),
1797 AC_ARG_WITH(update-config,
1798     AS_HELP_STRING([--with-update-config=/tmp/update.ini],
1799                    [Path to the update config ini file]))
1801 libo_FUZZ_ARG_ENABLE(extension-update,
1802     AS_HELP_STRING([--disable-extension-update],
1803         [Disable possibility to update installed extensions.]),
1806 libo_FUZZ_ARG_ENABLE(release-build,
1807     AS_HELP_STRING([--enable-release-build],
1808         [Enable release build. Note that the "release build" choice is orthogonal to
1809          whether symbols are present, debug info is generated, or optimization
1810          is done.
1811          See http://wiki.documentfoundation.org/Development/DevBuild]),
1814 AC_ARG_ENABLE(windows-build-signing,
1815     AS_HELP_STRING([--enable-windows-build-signing],
1816         [Enable signing of windows binaries (*.exe, *.dll)]),
1819 AC_ARG_ENABLE(silent-msi,
1820     AS_HELP_STRING([--enable-silent-msi],
1821         [Enable MSI with LIMITUI=1 (silent install).]),
1824 AC_ARG_ENABLE(macosx-code-signing,
1825     AS_HELP_STRING([--enable-macosx-code-signing=<identity>],
1826         [Sign executables, dylibs, frameworks and the app bundle. If you
1827          don't provide an identity the first suitable certificate
1828          in your keychain is used.]),
1831 AC_ARG_ENABLE(macosx-package-signing,
1832     AS_HELP_STRING([--enable-macosx-package-signing=<identity>],
1833         [Create a .pkg suitable for uploading to the Mac App Store and sign
1834          it. If you don't provide an identity the first suitable certificate
1835          in your keychain is used.]),
1838 AC_ARG_ENABLE(macosx-sandbox,
1839     AS_HELP_STRING([--enable-macosx-sandbox],
1840         [Make the app bundle run in a sandbox. Requires code signing.
1841          Is required by apps distributed in the Mac App Store, and implies
1842          adherence to App Store rules.]),
1845 AC_ARG_WITH(macosx-bundle-identifier,
1846     AS_HELP_STRING([--with-macosx-bundle-identifier=tld.mumble.orifice.TheOffice],
1847         [Define the macOS bundle identifier. Default is the somewhat weird
1848          org.libreoffice.script ("script", huh?).]),
1849 ,with_macosx_bundle_identifier=org.libreoffice.script)
1851 AC_ARG_WITH(product-name,
1852     AS_HELP_STRING([--with-product-name='My Own Office Suite'],
1853         [Define the product name. Default is AC_PACKAGE_NAME.]),
1854 ,with_product_name=$PRODUCTNAME)
1856 libo_FUZZ_ARG_ENABLE(community-flavor,
1857     AS_HELP_STRING([--disable-community-flavor],
1858         [Disable the Community branding.]),
1861 AC_ARG_WITH(package-version,
1862     AS_HELP_STRING([--with-package-version='3.1.4.5'],
1863         [Define the package version. Default is AC_PACKAGE_VERSION. Use only if you distribute an own build for macOS.]),
1866 libo_FUZZ_ARG_ENABLE(readonly-installset,
1867     AS_HELP_STRING([--enable-readonly-installset],
1868         [Prevents any attempts by LibreOffice to write into its installation. That means
1869          at least that no "system-wide" extensions can be added. Partly experimental work in
1870          progress, probably not fully implemented. Always enabled for macOS.]),
1873 libo_FUZZ_ARG_ENABLE(mariadb-sdbc,
1874     AS_HELP_STRING([--disable-mariadb-sdbc],
1875         [Disable the build of the MariaDB/MySQL-SDBC driver.])
1878 libo_FUZZ_ARG_ENABLE(postgresql-sdbc,
1879     AS_HELP_STRING([--disable-postgresql-sdbc],
1880         [Disable the build of the PostgreSQL-SDBC driver.])
1883 libo_FUZZ_ARG_ENABLE(lotuswordpro,
1884     AS_HELP_STRING([--disable-lotuswordpro],
1885         [Disable the build of the Lotus Word Pro filter.]),
1886 ,test "${enable_lotuswordpro+set}" = set || enable_lotuswordpro=yes)
1888 libo_FUZZ_ARG_ENABLE(firebird-sdbc,
1889     AS_HELP_STRING([--disable-firebird-sdbc],
1890         [Disable the build of the Firebird-SDBC driver if it doesn't compile for you.]),
1891 ,test "${enable_firebird_sdbc+set}" = set || enable_firebird_sdbc=yes)
1893 AC_ARG_ENABLE(bogus-pkg-config,
1894     AS_HELP_STRING([--enable-bogus-pkg-config],
1895         [MACOSX only: on MacOSX pkg-config can cause trouble. by default if one is found in the PATH, an error is issued. This flag turn that error into a warning.]),
1898 AC_ARG_ENABLE(openssl,
1899     AS_HELP_STRING([--disable-openssl],
1900         [Disable using libssl/libcrypto from OpenSSL. If disabled,
1901          components will either use GNUTLS or NSS. Work in progress,
1902          use only if you are hacking on it.]),
1903 ,enable_openssl=yes)
1905 libo_FUZZ_ARG_ENABLE(cipher-openssl-backend,
1906     AS_HELP_STRING([--enable-cipher-openssl-backend],
1907         [Enable using OpenSSL as the actual implementation of the rtl/cipher.h functionality.
1908          Requires --enable-openssl.]))
1910 AC_ARG_ENABLE(nss,
1911     AS_HELP_STRING([--disable-nss],
1912         [Disable using NSS. If disabled,
1913          components will either use GNUTLS or openssl. Work in progress,
1914          use only if you are hacking on it.]),
1915 ,enable_nss=yes)
1917 AC_ARG_ENABLE(library-bin-tar,
1918     AS_HELP_STRING([--enable-library-bin-tar],
1919         [Enable the building and reused of tarball of binary build for some 'external' libraries.
1920         Some libraries can save their build result in a tarball
1921         stored in TARFILE_LOCATION. That binary tarball is
1922         uniquely identified by the source tarball,
1923         the content of the config_host.mk file and the content
1924         of the top-level directory in core for that library
1925         If this option is enabled, then if such a tarfile exist, it will be untarred
1926         instead of the source tarfile, and the build step will be skipped for that
1927         library.
1928         If a proper tarfile does not exist, then the normal source-based
1929         build is done for that library and a proper binary tarfile is created
1930         for the next time.]),
1933 AC_ARG_ENABLE(dconf,
1934     AS_HELP_STRING([--disable-dconf],
1935         [Disable the dconf configuration backend (enabled by default where
1936          available).]))
1938 libo_FUZZ_ARG_ENABLE(formula-logger,
1939     AS_HELP_STRING(
1940         [--enable-formula-logger],
1941         [Enable formula logger for logging formula calculation flow in Calc.]
1942     )
1945 AC_ARG_ENABLE(ldap,
1946     AS_HELP_STRING([--disable-ldap],
1947         [Disable LDAP support.]),
1948 ,enable_ldap=yes)
1950 AC_ARG_ENABLE(opencl,
1951     AS_HELP_STRING([--disable-opencl],
1952         [Disable OpenCL support.]),
1953 ,enable_opencl=yes)
1955 libo_FUZZ_ARG_ENABLE(librelogo,
1956     AS_HELP_STRING([--disable-librelogo],
1957         [Do not build LibreLogo.]),
1958 ,enable_librelogo=yes)
1960 AC_ARG_ENABLE(cmis,
1961     AS_HELP_STRING([--disable-cmis],
1962         [Disable CMIS support.]),
1963 ,enable_cmis=yes)
1965 AC_ARG_ENABLE(curl,
1966     AS_HELP_STRING([--disable-curl],
1967         [Disable CURL support.]),
1968 ,enable_curl=yes)
1970 AC_ARG_ENABLE(wasm-strip,
1971     AS_HELP_STRING([--enable-wasm-strip],
1972         [Strip the static build like for WASM/emscripten platform.]),
1973 ,enable_wasm_strip=yes)
1975 AC_ARG_ENABLE(xmlhelp,
1976     AS_HELP_STRING([--disable-xmlhelp],
1977         [Disable XML help support]),
1978 ,enable_xmlhelp=yes)
1981 dnl ===================================================================
1982 dnl Optional Packages (--with/without-)
1983 dnl ===================================================================
1985 AC_ARG_WITH(gcc-home,
1986     AS_HELP_STRING([--with-gcc-home],
1987         [Specify the location of gcc/g++ manually. This can be used in conjunction
1988          with --enable-icecream when icecream gcc/g++ wrappers are installed in a
1989          non-default path.]),
1992 AC_ARG_WITH(gnu-patch,
1993     AS_HELP_STRING([--with-gnu-patch],
1994         [Specify location of GNU patch on Solaris or FreeBSD.]),
1997 AC_ARG_WITH(build-platform-configure-options,
1998     AS_HELP_STRING([--with-build-platform-configure-options],
1999         [Specify options for the configure script run for the *build* platform in a cross-compilation]),
2002 AC_ARG_WITH(gnu-cp,
2003     AS_HELP_STRING([--with-gnu-cp],
2004         [Specify location of GNU cp on Solaris or FreeBSD.]),
2007 AC_ARG_WITH(external-tar,
2008     AS_HELP_STRING([--with-external-tar=<TARFILE_PATH>],
2009         [Specify an absolute path of where to find (and store) tarfiles.]),
2010     TARFILE_LOCATION=$withval ,
2013 AC_ARG_WITH(referenced-git,
2014     AS_HELP_STRING([--with-referenced-git=<OTHER_CHECKOUT_DIR>],
2015         [Specify another checkout directory to reference. This makes use of
2016                  git submodule update --reference, and saves a lot of diskspace
2017                  when having multiple trees side-by-side.]),
2018     GIT_REFERENCE_SRC=$withval ,
2021 AC_ARG_WITH(linked-git,
2022     AS_HELP_STRING([--with-linked-git=<submodules repo basedir>],
2023         [Specify a directory where the repositories of submodules are located.
2024          This uses a method similar to git-new-workdir to get submodules.]),
2025     GIT_LINK_SRC=$withval ,
2028 AC_ARG_WITH(galleries,
2029     AS_HELP_STRING([--with-galleries],
2030         [Specify how galleries should be built. It is possible either to
2031          build these internally from source ("build"),
2032          or to disable them ("no")]),
2035 AC_ARG_WITH(theme,
2036     AS_HELP_STRING([--with-theme="theme1 theme2..."],
2037         [Choose which themes to include. By default those themes with an '*' are included.
2038          Possible choices: *breeze, *breeze_dark, *breeze_dark_svg, *breeze_svg, *colibre, *colibre_svg, *elementary,
2039          *elementary_svg, *karasa_jaga, *karasa_jaga_svg, *sifr, *sifr_dark, *sifr_dark_svg, *sifr_svg, *sukapura, *sukapura_svg.]),
2042 libo_FUZZ_ARG_WITH(helppack-integration,
2043     AS_HELP_STRING([--without-helppack-integration],
2044         [It will not integrate the helppacks to the installer
2045          of the product. Please use this switch to use the online help
2046          or separate help packages.]),
2049 libo_FUZZ_ARG_WITH(fonts,
2050     AS_HELP_STRING([--without-fonts],
2051         [LibreOffice includes some third-party fonts to provide a reliable basis for
2052          help content, templates, samples, etc. When these fonts are already
2053          known to be available on the system then you should use this option.]),
2056 AC_ARG_WITH(epm,
2057     AS_HELP_STRING([--with-epm],
2058         [Decides which epm to use. Default is to use the one from the system if
2059          one is built. When either this is not there or you say =internal epm
2060          will be built.]),
2063 AC_ARG_WITH(package-format,
2064     AS_HELP_STRING([--with-package-format],
2065         [Specify package format(s) for LibreOffice installation sets. The
2066          implicit --without-package-format leads to no installation sets being
2067          generated. Possible values: aix, archive, bsd, deb, dmg,
2068          installed, msi, pkg, and rpm.
2069          Example: --with-package-format='deb rpm']),
2072 AC_ARG_WITH(tls,
2073     AS_HELP_STRING([--with-tls],
2074         [Decides which TLS/SSL and cryptographic implementations to use for
2075          LibreOffice's code. Notice that this doesn't apply for depending
2076          libraries like "neon", for example. Default is to use NSS
2077          although OpenSSL is also possible. Notice that selecting NSS restricts
2078          the usage of OpenSSL in LO's code but selecting OpenSSL doesn't
2079          restrict by now the usage of NSS in LO's code. Possible values:
2080          openssl, nss. Example: --with-tls="nss"]),
2083 AC_ARG_WITH(system-libs,
2084     AS_HELP_STRING([--with-system-libs],
2085         [Use libraries already on system -- enables all --with-system-* flags.]),
2088 AC_ARG_WITH(system-bzip2,
2089     AS_HELP_STRING([--with-system-bzip2],
2090         [Use bzip2 already on system. Used only when --enable-online-update=mar]),,
2091     [with_system_bzip2="$with_system_libs"])
2093 AC_ARG_WITH(system-headers,
2094     AS_HELP_STRING([--with-system-headers],
2095         [Use headers already on system -- enables all --with-system-* flags for
2096          external packages whose headers are the only entities used i.e.
2097          boost/odbc/sane-header(s).]),,
2098     [with_system_headers="$with_system_libs"])
2100 AC_ARG_WITH(system-jars,
2101     AS_HELP_STRING([--without-system-jars],
2102         [When building with --with-system-libs, also the needed jars are expected
2103          on the system. Use this to disable that]),,
2104     [with_system_jars="$with_system_libs"])
2106 AC_ARG_WITH(system-cairo,
2107     AS_HELP_STRING([--with-system-cairo],
2108         [Use cairo libraries already on system.  Happens automatically for
2109          (implicit) --enable-gtk3.]))
2111 AC_ARG_WITH(system-epoxy,
2112     AS_HELP_STRING([--with-system-epoxy],
2113         [Use epoxy libraries already on system.  Happens automatically for
2114          (implicit) --enable-gtk3.]),,
2115        [with_system_epoxy="$with_system_libs"])
2117 AC_ARG_WITH(myspell-dicts,
2118     AS_HELP_STRING([--with-myspell-dicts],
2119         [Adds myspell dictionaries to the LibreOffice installation set]),
2122 AC_ARG_WITH(system-dicts,
2123     AS_HELP_STRING([--without-system-dicts],
2124         [Do not use dictionaries from system paths.]),
2127 AC_ARG_WITH(external-dict-dir,
2128     AS_HELP_STRING([--with-external-dict-dir],
2129         [Specify external dictionary dir.]),
2132 AC_ARG_WITH(external-hyph-dir,
2133     AS_HELP_STRING([--with-external-hyph-dir],
2134         [Specify external hyphenation pattern dir.]),
2137 AC_ARG_WITH(external-thes-dir,
2138     AS_HELP_STRING([--with-external-thes-dir],
2139         [Specify external thesaurus dir.]),
2142 AC_ARG_WITH(system-zlib,
2143     AS_HELP_STRING([--with-system-zlib],
2144         [Use zlib already on system.]),,
2145     [with_system_zlib=auto])
2147 AC_ARG_WITH(system-jpeg,
2148     AS_HELP_STRING([--with-system-jpeg],
2149         [Use jpeg already on system.]),,
2150     [with_system_jpeg="$with_system_libs"])
2152 AC_ARG_WITH(system-clucene,
2153     AS_HELP_STRING([--with-system-clucene],
2154         [Use clucene already on system.]),,
2155     [with_system_clucene="$with_system_libs"])
2157 AC_ARG_WITH(system-expat,
2158     AS_HELP_STRING([--with-system-expat],
2159         [Use expat already on system.]),,
2160     [with_system_expat="$with_system_libs"])
2162 AC_ARG_WITH(system-libxml,
2163     AS_HELP_STRING([--with-system-libxml],
2164         [Use libxml/libxslt already on system.]),,
2165     [with_system_libxml=auto])
2167 AC_ARG_WITH(system-icu,
2168     AS_HELP_STRING([--with-system-icu],
2169         [Use icu already on system.]),,
2170     [with_system_icu="$with_system_libs"])
2172 AC_ARG_WITH(system-ucpp,
2173     AS_HELP_STRING([--with-system-ucpp],
2174         [Use ucpp already on system.]),,
2175     [])
2177 AC_ARG_WITH(system-openldap,
2178     AS_HELP_STRING([--with-system-openldap],
2179         [Use the OpenLDAP LDAP SDK already on system.]),,
2180     [with_system_openldap="$with_system_libs"])
2182 libo_FUZZ_ARG_ENABLE(poppler,
2183     AS_HELP_STRING([--disable-poppler],
2184         [Disable building Poppler.])
2187 AC_ARG_WITH(system-poppler,
2188     AS_HELP_STRING([--with-system-poppler],
2189         [Use system poppler (only needed for PDF import).]),,
2190     [with_system_poppler="$with_system_libs"])
2192 AC_ARG_WITH(system-abseil,
2193     AS_HELP_STRING([--with-system-abseil],
2194         [Use the abseil libraries already on system.]),,
2195     [with_system_abseil="$with_system_libs"])
2197 AC_ARG_WITH(system-openjpeg,
2198     AS_HELP_STRING([--with-system-openjpeg],
2199         [Use the OpenJPEG library already on system.]),,
2200     [with_system_openjpeg="$with_system_libs"])
2202 libo_FUZZ_ARG_ENABLE(gpgmepp,
2203     AS_HELP_STRING([--disable-gpgmepp],
2204         [Disable building gpgmepp. Do not use in normal cases unless you want to fix potential problems it causes.])
2207 AC_ARG_WITH(system-gpgmepp,
2208     AS_HELP_STRING([--with-system-gpgmepp],
2209         [Use gpgmepp already on system]),,
2210     [with_system_gpgmepp="$with_system_libs"])
2212 AC_ARG_WITH(system-mariadb,
2213     AS_HELP_STRING([--with-system-mariadb],
2214         [Use MariaDB/MySQL libraries already on system.]),,
2215     [with_system_mariadb="$with_system_libs"])
2217 AC_ARG_ENABLE(bundle-mariadb,
2218     AS_HELP_STRING([--enable-bundle-mariadb],
2219         [When using MariaDB/MySQL libraries already on system, bundle them with the MariaDB Connector/LibreOffice.])
2222 AC_ARG_WITH(system-postgresql,
2223     AS_HELP_STRING([--with-system-postgresql],
2224         [Use PostgreSQL libraries already on system, for building the PostgreSQL-SDBC
2225          driver. If pg_config is not in PATH, use PGCONFIG to point to it.]),,
2226     [with_system_postgresql="$with_system_libs"])
2228 AC_ARG_WITH(libpq-path,
2229     AS_HELP_STRING([--with-libpq-path=<absolute path to your libpq installation>],
2230         [Use this PostgreSQL C interface (libpq) installation for building
2231          the PostgreSQL-SDBC extension.]),
2234 AC_ARG_WITH(system-firebird,
2235     AS_HELP_STRING([--with-system-firebird],
2236         [Use Firebird libraries already on system, for building the Firebird-SDBC
2237          driver. If fb_config is not in PATH, use FBCONFIG to point to it.]),,
2238     [with_system_firebird="$with_system_libs"])
2240 AC_ARG_WITH(system-libtommath,
2241             AS_HELP_STRING([--with-system-libtommath],
2242                            [Use libtommath already on system]),,
2243             [with_system_libtommath="$with_system_libs"])
2245 AC_ARG_WITH(system-hsqldb,
2246     AS_HELP_STRING([--with-system-hsqldb],
2247         [Use hsqldb already on system.]))
2249 AC_ARG_WITH(hsqldb-jar,
2250     AS_HELP_STRING([--with-hsqldb-jar=JARFILE],
2251         [Specify path to jarfile manually.]),
2252     HSQLDB_JAR=$withval)
2254 libo_FUZZ_ARG_ENABLE(scripting-beanshell,
2255     AS_HELP_STRING([--disable-scripting-beanshell],
2256         [Disable support for scripts in BeanShell.]),
2260 AC_ARG_WITH(system-beanshell,
2261     AS_HELP_STRING([--with-system-beanshell],
2262         [Use beanshell already on system.]),,
2263     [with_system_beanshell="$with_system_jars"])
2265 AC_ARG_WITH(beanshell-jar,
2266     AS_HELP_STRING([--with-beanshell-jar=JARFILE],
2267         [Specify path to jarfile manually.]),
2268     BSH_JAR=$withval)
2270 libo_FUZZ_ARG_ENABLE(scripting-javascript,
2271     AS_HELP_STRING([--disable-scripting-javascript],
2272         [Disable support for scripts in JavaScript.]),
2276 AC_ARG_WITH(system-rhino,
2277     AS_HELP_STRING([--with-system-rhino],
2278         [Use rhino already on system.]),,)
2279 #    [with_system_rhino="$with_system_jars"])
2280 # Above is not used as we have different debug interface
2281 # patched into internal rhino. This code needs to be fixed
2282 # before we can enable it by default.
2284 AC_ARG_WITH(rhino-jar,
2285     AS_HELP_STRING([--with-rhino-jar=JARFILE],
2286         [Specify path to jarfile manually.]),
2287     RHINO_JAR=$withval)
2289 AC_ARG_WITH(system-jfreereport,
2290     AS_HELP_STRING([--with-system-jfreereport],
2291         [Use JFreeReport already on system.]),,
2292     [with_system_jfreereport="$with_system_jars"])
2294 AC_ARG_WITH(sac-jar,
2295     AS_HELP_STRING([--with-sac-jar=JARFILE],
2296         [Specify path to jarfile manually.]),
2297     SAC_JAR=$withval)
2299 AC_ARG_WITH(libxml-jar,
2300     AS_HELP_STRING([--with-libxml-jar=JARFILE],
2301         [Specify path to jarfile manually.]),
2302     LIBXML_JAR=$withval)
2304 AC_ARG_WITH(flute-jar,
2305     AS_HELP_STRING([--with-flute-jar=JARFILE],
2306         [Specify path to jarfile manually.]),
2307     FLUTE_JAR=$withval)
2309 AC_ARG_WITH(jfreereport-jar,
2310     AS_HELP_STRING([--with-jfreereport-jar=JARFILE],
2311         [Specify path to jarfile manually.]),
2312     JFREEREPORT_JAR=$withval)
2314 AC_ARG_WITH(liblayout-jar,
2315     AS_HELP_STRING([--with-liblayout-jar=JARFILE],
2316         [Specify path to jarfile manually.]),
2317     LIBLAYOUT_JAR=$withval)
2319 AC_ARG_WITH(libloader-jar,
2320     AS_HELP_STRING([--with-libloader-jar=JARFILE],
2321         [Specify path to jarfile manually.]),
2322     LIBLOADER_JAR=$withval)
2324 AC_ARG_WITH(libformula-jar,
2325     AS_HELP_STRING([--with-libformula-jar=JARFILE],
2326         [Specify path to jarfile manually.]),
2327     LIBFORMULA_JAR=$withval)
2329 AC_ARG_WITH(librepository-jar,
2330     AS_HELP_STRING([--with-librepository-jar=JARFILE],
2331         [Specify path to jarfile manually.]),
2332     LIBREPOSITORY_JAR=$withval)
2334 AC_ARG_WITH(libfonts-jar,
2335     AS_HELP_STRING([--with-libfonts-jar=JARFILE],
2336         [Specify path to jarfile manually.]),
2337     LIBFONTS_JAR=$withval)
2339 AC_ARG_WITH(libserializer-jar,
2340     AS_HELP_STRING([--with-libserializer-jar=JARFILE],
2341         [Specify path to jarfile manually.]),
2342     LIBSERIALIZER_JAR=$withval)
2344 AC_ARG_WITH(libbase-jar,
2345     AS_HELP_STRING([--with-libbase-jar=JARFILE],
2346         [Specify path to jarfile manually.]),
2347     LIBBASE_JAR=$withval)
2349 AC_ARG_WITH(system-odbc,
2350     AS_HELP_STRING([--with-system-odbc],
2351         [Use the odbc headers already on system.]),,
2352     [with_system_odbc="auto"])
2354 AC_ARG_WITH(system-sane,
2355     AS_HELP_STRING([--with-system-sane],
2356         [Use sane.h already on system.]),,
2357     [with_system_sane="$with_system_headers"])
2359 AC_ARG_WITH(system-bluez,
2360     AS_HELP_STRING([--with-system-bluez],
2361         [Use bluetooth.h already on system.]),,
2362     [with_system_bluez="$with_system_headers"])
2364 AC_ARG_WITH(system-curl,
2365     AS_HELP_STRING([--with-system-curl],
2366         [Use curl already on system.]),,
2367     [with_system_curl=auto])
2369 AC_ARG_WITH(system-boost,
2370     AS_HELP_STRING([--with-system-boost],
2371         [Use boost already on system.]),,
2372     [with_system_boost="$with_system_headers"])
2374 AC_ARG_WITH(system-cuckoo,
2375     AS_HELP_STRING([--with-system-cuckoo],
2376         [Use libcuckoo already on system.]),,
2377     [with_system_cuckoo="$with_system_headers"])
2379 AC_ARG_WITH(system-glm,
2380     AS_HELP_STRING([--with-system-glm],
2381         [Use glm already on system.]),,
2382     [with_system_glm="$with_system_headers"])
2384 AC_ARG_WITH(system-hunspell,
2385     AS_HELP_STRING([--with-system-hunspell],
2386         [Use libhunspell already on system.]),,
2387     [with_system_hunspell="$with_system_libs"])
2389 libo_FUZZ_ARG_ENABLE(zxing,
2390     AS_HELP_STRING([--disable-zxing],
2391        [Disable use of zxing external library.]))
2393 AC_ARG_WITH(system-zxing,
2394     AS_HELP_STRING([--with-system-zxing],
2395         [Use libzxing already on system.]),,
2396     [with_system_zxing="$with_system_libs"])
2398 AC_ARG_WITH(system-box2d,
2399     AS_HELP_STRING([--with-system-box2d],
2400         [Use box2d already on system.]),,
2401     [with_system_box2d="$with_system_libs"])
2403 AC_ARG_WITH(system-mythes,
2404     AS_HELP_STRING([--with-system-mythes],
2405         [Use mythes already on system.]),,
2406     [with_system_mythes="$with_system_libs"])
2408 AC_ARG_WITH(system-altlinuxhyph,
2409     AS_HELP_STRING([--with-system-altlinuxhyph],
2410         [Use ALTLinuxhyph already on system.]),,
2411     [with_system_altlinuxhyph="$with_system_libs"])
2413 AC_ARG_WITH(system-lpsolve,
2414     AS_HELP_STRING([--with-system-lpsolve],
2415         [Use lpsolve already on system.]),,
2416     [with_system_lpsolve="$with_system_libs"])
2418 AC_ARG_WITH(system-coinmp,
2419     AS_HELP_STRING([--with-system-coinmp],
2420         [Use CoinMP already on system.]),,
2421     [with_system_coinmp="$with_system_libs"])
2423 AC_ARG_WITH(system-liblangtag,
2424     AS_HELP_STRING([--with-system-liblangtag],
2425         [Use liblangtag library already on system.]),,
2426     [with_system_liblangtag="$with_system_libs"])
2428 AC_ARG_WITH(webdav,
2429     AS_HELP_STRING([--with-webdav],
2430         [Specify which library to use for webdav implementation.
2431          Possible values: "neon", "serf", "curl", "no". The default value is "neon".
2432          Example: --with-webdav="serf"]))
2434 AC_ARG_WITH(linker-hash-style,
2435     AS_HELP_STRING([--with-linker-hash-style],
2436         [Use linker with --hash-style=<style> when linking shared objects.
2437          Possible values: "sysv", "gnu", "both". The default value is "gnu"
2438          if supported on the build system, and "sysv" otherwise.]))
2440 AC_ARG_WITH(jdk-home,
2441     AS_HELP_STRING([--with-jdk-home=<absolute path to JDK home>],
2442         [If you have installed JDK 9 or later on your system please supply the
2443          path here. Note that this is not the location of the java command but the
2444          location of the entire distribution. In case of cross-compiling, this
2445          is the JDK of the host os. Use --with-build-platform-configure-options
2446          to point to a different build platform JDK.]),
2449 AC_ARG_WITH(help,
2450     AS_HELP_STRING([--with-help],
2451         [Enable the build of help. There is a special parameter "common" that
2452          can be used to bundle only the common part, .e.g help-specific icons.
2453          This is useful when you build the helpcontent separately.])
2454     [
2455                           Usage:     --with-help    build the old local help
2456                                  --without-help     no local help (default)
2457                                  --with-help=html   build the new HTML local help
2458                                  --with-help=online build the new HTML online help
2459     ],
2462 AC_ARG_WITH(omindex,
2463    AS_HELP_STRING([--with-omindex],
2464         [Enable the support of xapian-omega index for online help.])
2465    [
2466                          Usage: --with-omindex=server prepare the pages for omindex
2467                                 but let xapian-omega be built in server.
2468                                 --with-omindex=noxap do not prepare online pages
2469                                 for xapian-omega
2470   ],
2473 libo_FUZZ_ARG_WITH(java,
2474     AS_HELP_STRING([--with-java=<java command>],
2475         [Specify the name of the Java interpreter command. Typically "java"
2476          which is the default.
2478          To build without support for Java components, applets, accessibility
2479          or the XML filters written in Java, use --without-java or --with-java=no.]),
2480     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ],
2481     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ]
2484 AC_ARG_WITH(jvm-path,
2485     AS_HELP_STRING([--with-jvm-path=<absolute path to parent of jvm home>],
2486         [Use a specific JVM search path at runtime.
2487          e.g. use --with-jvm-path=/usr/lib/ to find JRE/JDK in /usr/lib/jvm/]),
2490 AC_ARG_WITH(ant-home,
2491     AS_HELP_STRING([--with-ant-home=<absolute path to Ant home>],
2492         [If you have installed Apache Ant on your system, please supply the path here.
2493          Note that this is not the location of the Ant binary but the location
2494          of the entire distribution.]),
2497 AC_ARG_WITH(symbol-config,
2498     AS_HELP_STRING([--with-symbol-config],
2499         [Configuration for the crashreport symbol upload]),
2500         [],
2501         [with_symbol_config=no])
2503 AC_ARG_WITH(export-validation,
2504     AS_HELP_STRING([--without-export-validation],
2505         [Disable validating OOXML and ODF files as exported from in-tree tests.]),
2506 ,with_export_validation=auto)
2508 AC_ARG_WITH(bffvalidator,
2509     AS_HELP_STRING([--with-bffvalidator=<absolute path to BFFValidator>],
2510         [Enables export validation for Microsoft Binary formats (doc, xls, ppt).
2511          Requires installed Microsoft Office Binary File Format Validator.
2512          Note: export-validation (--with-export-validation) is required to be turned on.
2513          See https://www.microsoft.com/en-us/download/details.aspx?id=26794]),
2514 ,with_bffvalidator=no)
2516 libo_FUZZ_ARG_WITH(junit,
2517     AS_HELP_STRING([--with-junit=<absolute path to JUnit 4 jar>],
2518         [Specifies the JUnit 4 jar file to use for JUnit-based tests.
2519          --without-junit disables those tests. Not relevant in the --without-java case.]),
2520 ,with_junit=yes)
2522 AC_ARG_WITH(hamcrest,
2523     AS_HELP_STRING([--with-hamcrest=<absolute path to hamcrest jar>],
2524         [Specifies the hamcrest jar file to use for JUnit-based tests.
2525          --without-junit disables those tests. Not relevant in the --without-java case.]),
2526 ,with_hamcrest=yes)
2528 AC_ARG_WITH(perl-home,
2529     AS_HELP_STRING([--with-perl-home=<abs. path to Perl 5 home>],
2530         [If you have installed Perl 5 Distribution, on your system, please
2531          supply the path here. Note that this is not the location of the Perl
2532          binary but the location of the entire distribution.]),
2535 libo_FUZZ_ARG_WITH(doxygen,
2536     AS_HELP_STRING(
2537         [--with-doxygen=<absolute path to doxygen executable>],
2538         [Specifies the doxygen executable to use when generating ODK C/C++
2539          documentation. --without-doxygen disables generation of ODK C/C++
2540          documentation. Not relevant in the --disable-odk case.]),
2541 ,with_doxygen=yes)
2543 AC_ARG_WITH(visual-studio,
2544     AS_HELP_STRING([--with-visual-studio=<2019/2022>],
2545         [Specify which Visual Studio version to use in case several are
2546          installed. Currently 2019 (default) and 2022 are supported.]),
2549 AC_ARG_WITH(windows-sdk,
2550     AS_HELP_STRING([--with-windows-sdk=<8.0(A)/8.1(A)/10.0>],
2551         [Specify which Windows SDK, or "Windows Kit", version to use
2552          in case the one that came with the selected Visual Studio
2553          is not what you want for some reason. Note that not all compiler/SDK
2554          combinations are supported. The intent is that this option should not
2555          be needed.]),
2558 AC_ARG_WITH(lang,
2559     AS_HELP_STRING([--with-lang="es sw tu cs sk"],
2560         [Use this option to build LibreOffice with additional UI language support.
2561          English (US) is always included by default.
2562          Separate multiple languages with space.
2563          For all languages, use --with-lang=ALL.]),
2566 AC_ARG_WITH(locales,
2567     AS_HELP_STRING([--with-locales="en es pt fr zh kr ja"],
2568         [Use this option to limit the locale information built in.
2569          Separate multiple locales with space.
2570          Very experimental and might well break stuff.
2571          Just a desperate measure to shrink code and data size.
2572          By default all the locales available is included.
2573          This option is completely unrelated to --with-lang.])
2574     [
2575                           Affects also our character encoding conversion
2576                           tables for encodings mainly targeted for a
2577                           particular locale, like EUC-CN and EUC-TW for
2578                           zh, ISO-2022-JP for ja.
2580                           Affects also our add-on break iterator data for
2581                           some languages.
2583                           For the default, all locales, don't use this switch at all.
2584                           Specifying just the language part of a locale means all matching
2585                           locales will be included.
2586     ],
2589 # Kerberos and GSSAPI used only by PostgreSQL as of LibO 3.5
2590 libo_FUZZ_ARG_WITH(krb5,
2591     AS_HELP_STRING([--with-krb5],
2592         [Enable MIT Kerberos 5 support in modules that support it.
2593          By default automatically enabled on platforms
2594          where a good system Kerberos 5 is available.]),
2597 libo_FUZZ_ARG_WITH(gssapi,
2598     AS_HELP_STRING([--with-gssapi],
2599         [Enable GSSAPI support in modules that support it.
2600          By default automatically enabled on platforms
2601          where a good system GSSAPI is available.]),
2604 AC_ARG_WITH(iwyu,
2605     AS_HELP_STRING([--with-iwyu],
2606         [Use given IWYU binary path to check unneeded includes instead of building.
2607          Use only if you are hacking on it.]),
2610 libo_FUZZ_ARG_WITH(lxml,
2611     AS_HELP_STRING([--without-lxml],
2612         [gla11y will use python lxml when available, potentially building a local copy if necessary.
2613          --without-lxml tells it to not use python lxml at all, which means that gla11y will only
2614          report widget classes and ids.]),
2617 libo_FUZZ_ARG_WITH(latest-c++,
2618     AS_HELP_STRING([--with-latest-c++],
2619         [Try to enable the latest features of the C++ compiler, even if they are not yet part of a
2620          published standard.]),,
2621         [with_latest_c__=no])
2623 dnl ===================================================================
2624 dnl Branding
2625 dnl ===================================================================
2627 AC_ARG_WITH(branding,
2628     AS_HELP_STRING([--with-branding=/path/to/images],
2629         [Use given path to retrieve branding images set.])
2630     [
2631                           Search for intro.png about.svg and logo.svg.
2632                           If any is missing, default ones will be used instead.
2634                           Search also progress.conf for progress
2635                           settings on intro screen :
2637                           PROGRESSBARCOLOR="255,255,255" Set color of
2638                           progress bar. Comma separated RGB decimal values.
2639                           PROGRESSSIZE="407,6" Set size of progress bar.
2640                           Comma separated decimal values (width, height).
2641                           PROGRESSPOSITION="61,317" Set position of progress
2642                           bar from left,top. Comma separated decimal values.
2643                           PROGRESSFRAMECOLOR="20,136,3" Set color of progress
2644                           bar frame. Comma separated RGB decimal values.
2645                           PROGRESSTEXTCOLOR="0,0,0" Set color of progress
2646                           bar text. Comma separated RGB decimal values.
2647                           PROGRESSTEXTBASELINE="287" Set vertical position of
2648                           progress bar text from top. Decimal value.
2650                           Default values will be used if not found.
2651     ],
2655 AC_ARG_WITH(extra-buildid,
2656     AS_HELP_STRING([--with-extra-buildid="Tinderbox: Win-x86@6, Branch:master, Date:2012-11-26_00.29.34"],
2657         [Show addition build identification in about dialog.]),
2661 AC_ARG_WITH(vendor,
2662     AS_HELP_STRING([--with-vendor="John the Builder"],
2663         [Set vendor of the build.]),
2666 AC_ARG_WITH(privacy-policy-url,
2667     AS_HELP_STRING([--with-privacy-policy-url="https://yourdomain/privacy-policy"],
2668         [The URL to your privacy policy (needed when
2669          enabling online-update or crashreporting via breakpad)]),
2670         [if test "x$with_privacy_policy_url" = "xyes"; then
2671             AC_MSG_FAILURE([you need to specify an argument when using --with-privacy-policy-url])
2672          elif test "x$with_privacy_policy_url" = "xno"; then
2673             with_privacy_policy_url="undefined"
2674          fi]
2675 ,[with_privacy_policy_url="undefined"])
2677 AC_ARG_WITH(android-package-name,
2678     AS_HELP_STRING([--with-android-package-name="org.libreoffice"],
2679         [Set Android package name of the build.]),
2682 AC_ARG_WITH(compat-oowrappers,
2683     AS_HELP_STRING([--with-compat-oowrappers],
2684         [Install oo* wrappers in parallel with
2685          lo* ones to keep backward compatibility.
2686          Has effect only with make distro-pack-install]),
2689 AC_ARG_WITH(os-version,
2690     AS_HELP_STRING([--with-os-version=<OSVERSION>],
2691         [For FreeBSD users, use this option to override the detected OSVERSION.]),
2694 AC_ARG_WITH(idlc-cpp,
2695     AS_HELP_STRING([--with-idlc-cpp=<cpp/ucpp>],
2696         [Specify the C Preprocessor to use for idlc. Default is ucpp.]),
2699 AC_ARG_WITH(parallelism,
2700     AS_HELP_STRING([--with-parallelism],
2701         [Number of jobs to run simultaneously during build. Parallel builds can
2702         save a lot of time on multi-cpu machines. Defaults to the number of
2703         CPUs on the machine, unless you configure --enable-icecream - then to
2704         40.]),
2707 AC_ARG_WITH(all-tarballs,
2708     AS_HELP_STRING([--with-all-tarballs],
2709         [Download all external tarballs unconditionally]))
2711 AC_ARG_WITH(gdrive-client-id,
2712     AS_HELP_STRING([--with-gdrive-client-id],
2713         [Provides the client id of the application for OAuth2 authentication
2714         on Google Drive. If either this or --with-gdrive-client-secret is
2715         empty, the feature will be disabled]),
2718 AC_ARG_WITH(gdrive-client-secret,
2719     AS_HELP_STRING([--with-gdrive-client-secret],
2720         [Provides the client secret of the application for OAuth2
2721         authentication on Google Drive. If either this or
2722         --with-gdrive-client-id is empty, the feature will be disabled]),
2725 AC_ARG_WITH(alfresco-cloud-client-id,
2726     AS_HELP_STRING([--with-alfresco-cloud-client-id],
2727         [Provides the client id of the application for OAuth2 authentication
2728         on Alfresco Cloud. If either this or --with-alfresco-cloud-client-secret is
2729         empty, the feature will be disabled]),
2732 AC_ARG_WITH(alfresco-cloud-client-secret,
2733     AS_HELP_STRING([--with-alfresco-cloud-client-secret],
2734         [Provides the client secret of the application for OAuth2
2735         authentication on Alfresco Cloud. If either this or
2736         --with-alfresco-cloud-client-id is empty, the feature will be disabled]),
2739 AC_ARG_WITH(onedrive-client-id,
2740     AS_HELP_STRING([--with-onedrive-client-id],
2741         [Provides the client id of the application for OAuth2 authentication
2742         on OneDrive. If either this or --with-onedrive-client-secret is
2743         empty, the feature will be disabled]),
2746 AC_ARG_WITH(onedrive-client-secret,
2747     AS_HELP_STRING([--with-onedrive-client-secret],
2748         [Provides the client secret of the application for OAuth2
2749         authentication on OneDrive. If either this or
2750         --with-onedrive-client-id is empty, the feature will be disabled]),
2752 dnl ===================================================================
2753 dnl Do we want to use pre-build binary tarball for recompile
2754 dnl ===================================================================
2756 if test "$enable_library_bin_tar" = "yes" ; then
2757     USE_LIBRARY_BIN_TAR=TRUE
2758 else
2759     USE_LIBRARY_BIN_TAR=
2761 AC_SUBST(USE_LIBRARY_BIN_TAR)
2763 dnl ===================================================================
2764 dnl Test whether build target is Release Build
2765 dnl ===================================================================
2766 AC_MSG_CHECKING([whether build target is Release Build])
2767 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
2768     AC_MSG_RESULT([no])
2769     ENABLE_RELEASE_BUILD=
2770     GET_TASK_ALLOW_ENTITLEMENT='
2771         <!-- We want to be able to debug a hardened process when not building for release -->
2772         <key>com.apple.security.get-task-allow</key>
2773         <true/>'
2774 else
2775     AC_MSG_RESULT([yes])
2776     ENABLE_RELEASE_BUILD=TRUE
2777     GET_TASK_ALLOW_ENTITLEMENT=''
2779 AC_SUBST(ENABLE_RELEASE_BUILD)
2780 AC_SUBST(GET_TASK_ALLOW_ENTITLEMENT)
2782 AC_MSG_CHECKING([whether to build a Community flavor])
2783 if test -z "$enable_community_flavor" -o "$enable_community_flavor" = "yes"; then
2784     AC_DEFINE(HAVE_FEATURE_COMMUNITY_FLAVOR)
2785     AC_MSG_RESULT([yes])
2786 else
2787     AC_MSG_RESULT([no])
2790 dnl ===================================================================
2791 dnl Test whether to sign Windows Build
2792 dnl ===================================================================
2793 AC_MSG_CHECKING([whether to sign windows build])
2794 if test "$enable_windows_build_signing" = "yes" -a "$_os" = "WINNT"; then
2795     AC_MSG_RESULT([yes])
2796     WINDOWS_BUILD_SIGNING="TRUE"
2797 else
2798     AC_MSG_RESULT([no])
2799     WINDOWS_BUILD_SIGNING="FALSE"
2801 AC_SUBST(WINDOWS_BUILD_SIGNING)
2803 dnl ===================================================================
2804 dnl MacOSX build and runtime environment options
2805 dnl ===================================================================
2807 AC_ARG_WITH(macosx-version-min-required,
2808     AS_HELP_STRING([--with-macosx-version-min-required=<version>],
2809         [set the minimum OS version needed to run the built LibreOffice])
2810     [
2811                           e. g.: --with-macosx-version-min-required=10.12
2812     ],
2815 AC_ARG_WITH(macosx-version-max-allowed,
2816     AS_HELP_STRING([--with-macosx-version-max-allowed=<version>],
2817         [set the maximum allowed OS version the LibreOffice compilation can use APIs from])
2818     [
2819                           e. g.: --with-macosx-version-max-allowed=11.0
2820     ],
2824 dnl ===================================================================
2825 dnl options for stuff used during cross-compilation build
2826 dnl Not quite superseded by --with-build-platform-configure-options.
2827 dnl TODO: check, if the "force" option is still needed anywhere.
2828 dnl ===================================================================
2830 AC_ARG_WITH(system-icu-for-build,
2831     AS_HELP_STRING([--with-system-icu-for-build=yes/no/force],
2832         [Use icu already on system for build tools (cross-compilation only).]))
2835 dnl ===================================================================
2836 dnl Check for incompatible options set by fuzzing, and reset those
2837 dnl automatically to working combinations
2838 dnl ===================================================================
2840 if test "$libo_fuzzed_enable_dbus" = yes -a "$libo_fuzzed_enable_avahi" -a \
2841         "$enable_dbus" != "$enable_avahi"; then
2842     AC_MSG_NOTICE([Resetting --enable-avahi=$enable_dbus])
2843     enable_avahi=$enable_dbus
2846 add_lopath_after ()
2848     if ! echo "$LO_PATH" | $EGREP -q "(^|${P_SEP})$1($|${P_SEP})"; then
2849         LO_PATH="${LO_PATH:+$LO_PATH$P_SEP}$1"
2850     fi
2853 add_lopath_before ()
2855     local IFS=${P_SEP}
2856     local path_cleanup
2857     local dir
2858     for dir in $LO_PATH ; do
2859         if test "$dir" != "$1" ; then
2860             path_cleanup=${path_cleanup:+$path_cleanup$P_SEP}$dir
2861         fi
2862     done
2863     LO_PATH="$1${path_cleanup:+$P_SEP$path_cleanup}"
2866 dnl ===================================================================
2867 dnl check for required programs (grep, awk, sed, bash)
2868 dnl ===================================================================
2870 pathmunge ()
2872     local new_path
2873     if test -n "$1"; then
2874         if test "$build_os" = "cygwin"; then
2875             if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
2876                 PathFormat "$1"
2877                 new_path=`cygpath -sm "$formatted_path"`
2878             else
2879                 PathFormat "$1"
2880                 new_path=`cygpath -u "$formatted_path"`
2881             fi
2882         else
2883             new_path="$1"
2884         fi
2885         if test "$2" = "after"; then
2886             add_lopath_after "$new_path"
2887         else
2888             add_lopath_before "$new_path"
2889         fi
2890     fi
2893 AC_PROG_AWK
2894 AC_PATH_PROG( AWK, $AWK)
2895 if test -z "$AWK"; then
2896     AC_MSG_ERROR([install awk to run this script])
2899 AC_PATH_PROG(BASH, bash)
2900 if test -z "$BASH"; then
2901     AC_MSG_ERROR([bash not found in \$PATH])
2903 AC_SUBST(BASH)
2905 AC_MSG_CHECKING([for GNU or BSD tar])
2906 for a in $GNUTAR gtar gnutar bsdtar tar /usr/sfw/bin/gtar; do
2907     $a --version 2> /dev/null | egrep "GNU|bsdtar"  2>&1 > /dev/null
2908     if test $? -eq 0;  then
2909         GNUTAR=$a
2910         break
2911     fi
2912 done
2913 AC_MSG_RESULT($GNUTAR)
2914 if test -z "$GNUTAR"; then
2915     AC_MSG_ERROR([not found. install GNU or BSD tar.])
2917 AC_SUBST(GNUTAR)
2919 AC_MSG_CHECKING([for tar's option to strip components])
2920 $GNUTAR --help 2> /dev/null | egrep "bsdtar|strip-components" 2>&1 >/dev/null
2921 if test $? -eq 0; then
2922     STRIP_COMPONENTS="--strip-components"
2923 else
2924     $GNUTAR --help 2> /dev/null | egrep "strip-path" 2>&1 >/dev/null
2925     if test $? -eq 0; then
2926         STRIP_COMPONENTS="--strip-path"
2927     else
2928         STRIP_COMPONENTS="unsupported"
2929     fi
2931 AC_MSG_RESULT($STRIP_COMPONENTS)
2932 if test x$STRIP_COMPONENTS = xunsupported; then
2933     AC_MSG_ERROR([you need a tar that is able to strip components.])
2935 AC_SUBST(STRIP_COMPONENTS)
2937 dnl It is useful to have a BUILD_TYPE keyword to distinguish "normal"
2938 dnl desktop OSes from "mobile" ones.
2940 dnl We assume that a non-DESKTOP build type is also a non-NATIVE one.
2941 dnl In other words, that when building for an OS that is not a
2942 dnl "desktop" one but a "mobile" one, we are always cross-compiling.
2944 dnl Note the direction of the implication; there is no assumption that
2945 dnl cross-compiling would imply a non-desktop OS.
2947 if test $_os != iOS -a $_os != Android -a $_os != Emscripten -a "$enable_fuzzers" != "yes"; then
2948     BUILD_TYPE="$BUILD_TYPE DESKTOP"
2949     AC_DEFINE(HAVE_FEATURE_DESKTOP)
2950     AC_DEFINE(HAVE_FEATURE_MULTIUSER_ENVIRONMENT)
2953 # Whether to build "avmedia" functionality or not.
2955 if test -z "$enable_avmedia"; then
2956     enable_avmedia=yes
2959 BUILD_TYPE="$BUILD_TYPE AVMEDIA"
2960 if test "$enable_avmedia" = yes; then
2961     AC_DEFINE(HAVE_FEATURE_AVMEDIA)
2962 else
2963     USE_AVMEDIA_DUMMY='TRUE'
2965 AC_SUBST(USE_AVMEDIA_DUMMY)
2967 # Decide whether to build database connectivity stuff (including Base) or not.
2968 if test "$enable_database_connectivity" != no; then
2969     BUILD_TYPE="$BUILD_TYPE DBCONNECTIVITY"
2970     AC_DEFINE(HAVE_FEATURE_DBCONNECTIVITY)
2971 else
2972     if test "$_os" = iOS; then
2973         AC_MSG_ERROR([Presumly can't disable DB connectivity on iOS.])
2974     fi
2975     disable_database_connectivity_dependencies
2978 if test -z "$enable_extensions"; then
2979     # For iOS and Android Viewer, disable extensions unless specifically overridden with --enable-extensions.
2980     if test $_os != iOS && test $_os != Android -o "$ENABLE_ANDROID_LOK" = TRUE ; then
2981         enable_extensions=yes
2982     fi
2985 if test "$enable_extensions" = yes; then
2986     BUILD_TYPE="$BUILD_TYPE EXTENSIONS"
2987     AC_DEFINE(HAVE_FEATURE_EXTENSIONS)
2988 else
2989     enable_extension_integration=no
2990     enable_extension_update=no
2993 if test -z "$enable_scripting"; then
2994     # Disable scripting for iOS unless specifically overridden
2995     # with --enable-scripting.
2996     if test $_os != iOS -o $_os = Emscripten; then
2997         enable_scripting=yes
2998     fi
3001 DISABLE_SCRIPTING=''
3002 if test "$enable_scripting" = yes; then
3003     BUILD_TYPE="$BUILD_TYPE SCRIPTING"
3004     AC_DEFINE(HAVE_FEATURE_SCRIPTING)
3005 else
3006     DISABLE_SCRIPTING='TRUE'
3007     SCPDEFS="$SCPDEFS -DDISABLE_SCRIPTING"
3010 if test $_os = iOS -o $_os = Android -o $_os = Emscripten; then
3011     # Disable dynamic_loading always for iOS and Android
3012     enable_dynamic_loading=no
3013 elif test -z "$enable_dynamic_loading"; then
3014     # Otherwise enable it unless specifically disabled
3015     enable_dynamic_loading=yes
3018 DISABLE_DYNLOADING=''
3019 if test "$enable_dynamic_loading" = yes; then
3020     BUILD_TYPE="$BUILD_TYPE DYNLOADING"
3021 else
3022     DISABLE_DYNLOADING='TRUE'
3024 AC_SUBST(DISABLE_DYNLOADING)
3026 # remember SYSBASE value
3027 AC_SUBST(SYSBASE)
3029 dnl ===================================================================
3030 dnl  Sort out various gallery compilation options
3031 dnl ===================================================================
3032 WITH_GALLERY_BUILD=TRUE
3033 AC_MSG_CHECKING([how to build and package galleries])
3034 if test -n "${with_galleries}"; then
3035     if test "$with_galleries" = "build"; then
3036         if test "$enable_database_connectivity" = no; then
3037             AC_MSG_ERROR([DB connectivity is needed for gengal / svx])
3038         fi
3039         AC_MSG_RESULT([build from source images internally])
3040     elif test "$with_galleries" = "no"; then
3041         WITH_GALLERY_BUILD=
3042         AC_MSG_RESULT([disable non-internal gallery build])
3043     else
3044         AC_MSG_ERROR([unknown value --with-galleries=$with_galleries])
3045     fi
3046 else
3047     if test $_os != iOS -a $_os != Android; then
3048         AC_MSG_RESULT([internal src images for desktop])
3049     else
3050         WITH_GALLERY_BUILD=
3051         AC_MSG_RESULT([disable src image build])
3052     fi
3054 AC_SUBST(WITH_GALLERY_BUILD)
3056 dnl ===================================================================
3057 dnl  Checks if ccache is available
3058 dnl ===================================================================
3059 CCACHE_DEPEND_MODE=
3060 if test "$enable_ccache" = "no"; then
3061     CCACHE=""
3062 elif test -n "$enable_ccache" -o \( "$enable_ccache" = "" -a "$enable_icecream" != "yes" \); then
3063     case "%$CC%$CXX%" in
3064     # If $CC and/or $CXX already contain "ccache" (possibly suffixed with some version number etc),
3065     # assume that's good then
3066     *%ccache[[-_' ']]*|*/ccache[[-_' ']]*)
3067         AC_MSG_NOTICE([ccache seems to be included in a pre-defined CC and/or CXX])
3068         CCACHE_DEPEND_MODE=1
3069         ;;
3070     *)
3071         # try to use our own ccache if it is available and CCACHE was not already defined
3072         if test -z "$CCACHE"; then
3073             if test "$_os" = "WINNT"; then
3074                 ccache_ext=.exe # e.g. openssl build needs ccache.exe, not just ccache
3075             fi
3076             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/ccache$ccache_ext" ; then
3077                 CCACHE="$LODE_HOME/opt/bin/ccache$ccache_ext"
3078             elif test -x "/opt/lo/bin/ccache$ccache_ext"; then
3079                 CCACHE="/opt/lo/bin/ccache$ccache_ext"
3080             fi
3081         fi
3082         AC_PATH_PROG([CCACHE],[ccache],[not found])
3083         if test "$CCACHE" != "not found" -a "$_os" = "WINNT"; then
3084             CCACHE=`win_short_path_for_make "$CCACHE"`
3085             # check that it has MSVC support (it should recognize it in CCACHE_COMPILERTYPE)
3086             rm -f conftest.txt
3087             AC_MSG_CHECKING([whether $CCACHE has MSVC support])
3088             CCACHE_COMPILERTYPE=cl CCACHE_LOGFILE=conftest.txt $CCACHE echo >/dev/null 2>/dev/null
3089             if grep -q 'Config: (environment) compiler_type = cl' conftest.txt; then
3090                 AC_MSG_RESULT(yes)
3091             else
3092                 AC_MSG_RESULT(no)
3093                 CCACHE="not found"
3094             fi
3095             rm -f conftest.txt
3096         fi
3097         if test "$CCACHE" = "not found" -a "$_os" = "WINNT"; then
3098             # on windows/VC perhaps sccache is around?
3099             case "%$CC%$CXX%" in
3100             # If $CC and/or $CXX already contain "sccache" (possibly suffixed with some version number etc),
3101             # assume that's good then
3102             *%sccache[[-_' ']]*|*/sccache[[-_' ']]*)
3103                 AC_MSG_NOTICE([sccache seems to be included in a pre-defined CC and/or CXX])
3104                 CCACHE_DEPEND_MODE=1
3105                 SCCACHE=1
3106                 ;;
3107             *)
3108                 # for sharing code below, reuse CCACHE env var
3109                 AC_PATH_PROG([CCACHE],[sccache],[not found])
3110                 if test "$CCACHE" != "not found"; then
3111                     CCACHE=`win_short_path_for_make "$CCACHE"`
3112                     SCCACHE=1
3113                     CCACHE_DEPEND_MODE=1
3114                 fi
3115                 ;;
3116             esac
3117         fi
3118         if test "$CCACHE" = "not found"; then
3119             CCACHE=""
3120         fi
3121         if test -n "$CCACHE" -a -z "$SCCACHE"; then
3122             CCACHE_DEPEND_MODE=1
3123             # Need to check for ccache version: otherwise prevents
3124             # caching of the results (like "-x objective-c++" for Mac)
3125             if test $_os = Darwin -o $_os = iOS; then
3126                 # Check ccache version
3127                 AC_MSG_CHECKING([whether version of ccache is suitable])
3128                 CCACHE_VERSION=`"$CCACHE" -V | "$AWK" '/^ccache version/{print $3}'`
3129                 CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
3130                 if test "$CCACHE_VERSION" = "2.4_OOo" -o "$CCACHE_NUMVER" -ge "030100"; then
3131                     AC_MSG_RESULT([yes, $CCACHE_VERSION])
3132                 else
3133                     AC_MSG_RESULT([no, $CCACHE_VERSION])
3134                     CCACHE=""
3135                     CCACHE_DEPEND_MODE=
3136                 fi
3137             fi
3138         fi
3139         ;;
3140     esac
3141 else
3142     CCACHE=""
3144 if test "$enable_ccache" = "nodepend"; then
3145     CCACHE_DEPEND_MODE=""
3147 AC_SUBST(CCACHE_DEPEND_MODE)
3149 # sccache defaults are good enough
3150 if test "$CCACHE" != "" -a -z "$SCCACHE"; then
3151     # e.g. (/home/rene/.config/ccache/ccache.conf) max_size = 20.0G
3152     # -p works with both 4.2 and 4.4
3153     ccache_size_msg=$([ccache -p | $AWK /max_size/'{ print $4 }' | sed -e 's/\.[0-9]*//'])
3154     ccache_size=$(echo "$ccache_size_msg" | grep "G" | sed -e 's/G.*$//')
3155     if test "$ccache_size" = ""; then
3156         ccache_size=$(echo "$ccache_size_msg" | grep "M" | sed -e 's/\ M.*$//')
3157         if test "$ccache_size" = ""; then
3158             ccache_size=0
3159         fi
3160         # we could not determine the size or it was less than 1GB -> disable auto-ccache
3161         if test $ccache_size -lt 1024; then
3162             CCACHE=""
3163             AC_MSG_WARN([ccache's cache size is less than 1GB using it is counter-productive: Disabling auto-ccache detection])
3164             add_warning "ccache's cache size is less than 1GB using it is counter-productive: auto-ccache detection disabled"
3165         else
3166             # warn that ccache may be too small for debug build
3167             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3168             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3169         fi
3170     else
3171         if test $ccache_size -lt 5; then
3172             #warn that ccache may be too small for debug build
3173             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3174             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3175         fi
3176     fi
3179 ENABLE_Z7_DEBUG=
3180 if test "$enable_z7_debug" != no; then
3181     if test "$enable_z7_debug" = yes -o -n "$CCACHE"; then
3182         ENABLE_Z7_DEBUG=TRUE
3183     fi
3184 else
3185     AC_MSG_WARN([ccache will not work with --disable-z7-debug])
3186     add_warning "ccache will not work with --disable-z7-debug"
3188 AC_SUBST(ENABLE_Z7_DEBUG)
3190 dnl ===================================================================
3191 dnl  Checks for C compiler,
3192 dnl  The check for the C++ compiler is later on.
3193 dnl ===================================================================
3194 if test "$_os" != "WINNT"; then
3195     GCC_HOME_SET="true"
3196     AC_MSG_CHECKING([gcc home])
3197     if test -z "$with_gcc_home"; then
3198         if test "$enable_icecream" = "yes"; then
3199             if test -d "/usr/lib/icecc/bin"; then
3200                 GCC_HOME="/usr/lib/icecc/"
3201             elif test -d "/usr/libexec/icecc/bin"; then
3202                 GCC_HOME="/usr/libexec/icecc/"
3203             elif test -d "/opt/icecream/bin"; then
3204                 GCC_HOME="/opt/icecream/"
3205             else
3206                 AC_MSG_ERROR([Could not figure out the location of icecream GCC wrappers, manually use --with-gcc-home])
3208             fi
3209         else
3210             GCC_HOME=`which gcc | $SED -e s,/bin/gcc,,`
3211             GCC_HOME_SET="false"
3212         fi
3213     else
3214         GCC_HOME="$with_gcc_home"
3215     fi
3216     AC_MSG_RESULT($GCC_HOME)
3217     AC_SUBST(GCC_HOME)
3219     if test "$GCC_HOME_SET" = "true"; then
3220         if test -z "$CC"; then
3221             CC="$GCC_HOME/bin/gcc"
3222             CC_BASE="gcc"
3223         fi
3224         if test -z "$CXX"; then
3225             CXX="$GCC_HOME/bin/g++"
3226             CXX_BASE="g++"
3227         fi
3228     fi
3231 COMPATH=`dirname "$CC"`
3232 if test "$COMPATH" = "."; then
3233     AC_PATH_PROGS(COMPATH, $CC)
3234     dnl double square bracket to get single because of M4 quote...
3235     COMPATH=`echo $COMPATH | $SED "s@/[[^/:]]*\\\$@@"`
3237 COMPATH=`echo $COMPATH | $SED "s@/[[Bb]][[Ii]][[Nn]]\\\$@@"`
3239 dnl ===================================================================
3240 dnl Java support
3241 dnl ===================================================================
3242 AC_MSG_CHECKING([whether to build with Java support])
3243 if test "$with_java" != "no"; then
3244     if test "$DISABLE_SCRIPTING" = TRUE; then
3245         AC_MSG_RESULT([no, overridden by --disable-scripting])
3246         ENABLE_JAVA=""
3247         with_java=no
3248     else
3249         AC_MSG_RESULT([yes])
3250         ENABLE_JAVA="TRUE"
3251         AC_DEFINE(HAVE_FEATURE_JAVA)
3252     fi
3253 else
3254     AC_MSG_RESULT([no])
3255     ENABLE_JAVA=""
3258 AC_SUBST(ENABLE_JAVA)
3260 dnl ENABLE_JAVA="TRUE" if we want there to be *run-time* (and build-time) support for Java
3262 dnl ENABLE_JAVA="" indicate no Java support at all
3264 dnl ===================================================================
3265 dnl Check macOS SDK and compiler
3266 dnl ===================================================================
3268 if test $_os = Darwin; then
3270     # The SDK in the currently selected Xcode should be found.
3272     AC_MSG_CHECKING([what macOS SDK to use])
3273     for macosx_sdk in 12.1 12.0 11.3 11.1 11.0 10.15 10.14 10.13; do
3274         MACOSX_SDK_PATH=`xcrun --sdk macosx${macosx_sdk} --show-sdk-path 2> /dev/null`
3275         if test -d "$MACOSX_SDK_PATH"; then
3276             break
3277         else
3278             MACOSX_SDK_PATH="`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${macosx_sdk}.sdk"
3279             if test -d "$MACOSX_SDK_PATH"; then
3280                 break
3281             fi
3282         fi
3283     done
3284     if test ! -d "$MACOSX_SDK_PATH"; then
3285         AC_MSG_ERROR([Could not find an appropriate macOS SDK])
3286     fi
3288     AC_MSG_RESULT([macOS SDK $macosx_sdk at $MACOSX_SDK_PATH])
3290     case $macosx_sdk in
3291     10.13)
3292         MACOSX_SDK_VERSION=101300
3293         ;;
3294     10.14)
3295         MACOSX_SDK_VERSION=101400
3296         ;;
3297     10.15)
3298         MACOSX_SDK_VERSION=101500
3299         ;;
3300     11.0)
3301         MACOSX_SDK_VERSION=110000
3302         ;;
3303     11.1)
3304         MACOSX_SDK_VERSION=110100
3305         ;;
3306     11.3)
3307         MACOSX_SDK_VERSION=110300
3308         ;;
3309     12.0)
3310         MACOSX_SDK_VERSION=120000
3311         ;;
3312     12.1)
3313         MACOSX_SDK_VERSION=120100
3314         ;;
3315     *)
3316         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported])
3317         ;;
3318     esac
3320     if test "$host_cpu" = arm64 -a $MACOSX_SDK_VERSION -lt 110000; then
3321         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported for Apple Silicon])
3322     fi
3324     if test "$with_macosx_version_min_required" = "" ; then
3325         if test "$host_cpu" = x86_64; then
3326             with_macosx_version_min_required="10.12";
3327         else
3328             with_macosx_version_min_required="11.0";
3329         fi
3330     fi
3332     if test "$with_macosx_version_max_allowed" = "" ; then
3333         with_macosx_version_max_allowed="$macosx_sdk"
3334     fi
3336     # export this so that "xcrun" invocations later return matching values
3337     DEVELOPER_DIR="${MACOSX_SDK_PATH%/SDKs*}"
3338     DEVELOPER_DIR="${DEVELOPER_DIR%/Platforms*}"
3339     export DEVELOPER_DIR
3340     FRAMEWORKSHOME="$MACOSX_SDK_PATH/System/Library/Frameworks"
3341     MACOSX_DEPLOYMENT_TARGET="$with_macosx_version_min_required"
3343     AC_MSG_CHECKING([whether Xcode is new enough])
3344     my_xcode_ver1=$(xcrun xcodebuild -version | head -n 1)
3345     my_xcode_ver2=${my_xcode_ver1#Xcode }
3346     my_xcode_ver3=$(printf %s "$my_xcode_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
3347     if test "$my_xcode_ver3" -ge 1103; then
3348         AC_MSG_RESULT([yes ($my_xcode_ver2)])
3349     else
3350         AC_MSG_ERROR(["$my_xcode_ver1" is too old or unrecognized, must be at least Xcode 11.3])
3351     fi
3353     case "$with_macosx_version_min_required" in
3354     10.12)
3355         MAC_OS_X_VERSION_MIN_REQUIRED="101200"
3356         ;;
3357     10.13)
3358         MAC_OS_X_VERSION_MIN_REQUIRED="101300"
3359         ;;
3360     10.14)
3361         MAC_OS_X_VERSION_MIN_REQUIRED="101400"
3362         ;;
3363     10.15)
3364         MAC_OS_X_VERSION_MIN_REQUIRED="101500"
3365         ;;
3366     10.16)
3367         MAC_OS_X_VERSION_MIN_REQUIRED="101600"
3368         ;;
3369     11.0)
3370         MAC_OS_X_VERSION_MIN_REQUIRED="110000"
3371         ;;
3372     11.1)
3373         MAC_OS_X_VERSION_MIN_REQUIRED="110100"
3374         ;;
3375     11.3)
3376         MAC_OS_X_VERSION_MIN_REQUIRED="110300"
3377         ;;
3378     12.0)
3379         MAC_OS_X_VERSION_MIN_REQUIRED="120000"
3380         ;;
3381     12.1)
3382         MAC_OS_X_VERSION_MIN_REQUIRED="120100"
3383         ;;
3384     *)
3385         AC_MSG_ERROR([with-macosx-version-min-required $with_macosx_version_min_required is not a supported value, supported values are 10.12--12.1])
3386         ;;
3387     esac
3389     LIBTOOL=/usr/bin/libtool
3390     INSTALL_NAME_TOOL=install_name_tool
3391     if test -z "$save_CC"; then
3392         stdlib=-stdlib=libc++
3394         AC_MSG_CHECKING([what C compiler to use])
3395         CC="`xcrun -find clang`"
3396         CC_BASE=`first_arg_basename "$CC"`
3397         if test "$host_cpu" = x86_64; then
3398             CC+=" -target x86_64-apple-macos"
3399         else
3400             CC+=" -target arm64-apple-macos"
3401         fi
3402         CC+=" -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3403         AC_MSG_RESULT([$CC])
3405         AC_MSG_CHECKING([what C++ compiler to use])
3406         CXX="`xcrun -find clang++`"
3407         CXX_BASE=`first_arg_basename "$CXX"`
3408         if test "$host_cpu" = x86_64; then
3409             CXX+=" -target x86_64-apple-macos"
3410         else
3411             CXX+=" -target arm64-apple-macos"
3412         fi
3413         CXX+=" $stdlib -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3414         AC_MSG_RESULT([$CXX])
3416         INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3417         AR=`xcrun -find ar`
3418         NM=`xcrun -find nm`
3419         STRIP=`xcrun -find strip`
3420         LIBTOOL=`xcrun -find libtool`
3421         RANLIB=`xcrun -find ranlib`
3422     fi
3424     case "$with_macosx_version_max_allowed" in
3425     10.12)
3426         MAC_OS_X_VERSION_MAX_ALLOWED="101200"
3427         ;;
3428     10.13)
3429         MAC_OS_X_VERSION_MAX_ALLOWED="101300"
3430         ;;
3431     10.14)
3432         MAC_OS_X_VERSION_MAX_ALLOWED="101400"
3433         ;;
3434     10.15)
3435         MAC_OS_X_VERSION_MAX_ALLOWED="101500"
3436         ;;
3437     11.0)
3438         MAC_OS_X_VERSION_MAX_ALLOWED="110000"
3439         ;;
3440     11.1)
3441         MAC_OS_X_VERSION_MAX_ALLOWED="110100"
3442         ;;
3443     11.3)
3444         MAC_OS_X_VERSION_MAX_ALLOWED="110300"
3445         ;;
3446     12.0)
3447         MAC_OS_X_VERSION_MAX_ALLOWED="120000"
3448         ;;
3449     12.1)
3450         MAC_OS_X_VERSION_MAX_ALLOWED="120100"
3451         ;;
3452     *)
3453         AC_MSG_ERROR([with-macosx-version-max-allowed $with_macosx_version_max_allowed is not a supported value, supported values are 10.12--12.1])
3454         ;;
3455     esac
3457     AC_MSG_CHECKING([that macosx-version-min-required is coherent with macosx-version-max-allowed])
3458     if test $MAC_OS_X_VERSION_MIN_REQUIRED -gt $MAC_OS_X_VERSION_MAX_ALLOWED; then
3459         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])
3460     else
3461         AC_MSG_RESULT([ok])
3462     fi
3464     AC_MSG_CHECKING([that macosx-version-max-allowed is coherent with macos-with-sdk])
3465     if test $MAC_OS_X_VERSION_MAX_ALLOWED -gt $MACOSX_SDK_VERSION; then
3466         AC_MSG_ERROR([the version maximum allowed cannot be greater than the sdk level])
3467     else
3468         AC_MSG_RESULT([ok])
3469     fi
3470     AC_MSG_NOTICE([MAC_OS_X_VERSION_MIN_REQUIRED=$MAC_OS_X_VERSION_MIN_REQUIRED])
3471     AC_MSG_NOTICE([MAC_OS_X_VERSION_MAX_ALLOWED=$MAC_OS_X_VERSION_MAX_ALLOWED])
3473     AC_MSG_CHECKING([whether to do code signing])
3475     if test "$enable_macosx_code_signing" = yes; then
3476         # By default use the first suitable certificate (?).
3478         # http://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3479         # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3480         # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3481         # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3482         # "Developer ID Application" one.
3484         identity=`security find-identity -p codesigning -v 2>/dev/null | grep 'Developer ID Application:' | $AWK '{print $2}' |head -1`
3485         if test -n "$identity"; then
3486             MACOSX_CODESIGNING_IDENTITY=$identity
3487             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3488             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3489         else
3490             AC_MSG_ERROR([cannot determine identity to use])
3491         fi
3492     elif test -n "$enable_macosx_code_signing" -a "$enable_macosx_code_signing" != no ; then
3493         MACOSX_CODESIGNING_IDENTITY=$enable_macosx_code_signing
3494         pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3495         AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3496     else
3497         AC_MSG_RESULT([no])
3498     fi
3500     AC_MSG_CHECKING([whether to create a Mac App Store package])
3502     if test -z "$enable_macosx_package_signing" || test "$enable_macosx_package_signing" == no; then
3503         AC_MSG_RESULT([no])
3504     elif test -z "$MACOSX_CODESIGNING_IDENTITY"; then
3505         AC_MSG_ERROR([You forgot --enable-macosx-code-signing])
3506     elif test "$enable_macosx_package_signing" = yes; then
3507         # By default use the first suitable certificate.
3508         # It should be a "3rd Party Mac Developer Installer" one
3510         identity=`security find-identity -v 2>/dev/null | grep '3rd Party Mac Developer Installer:' | awk '{print $2}' |head -1`
3511         if test -n "$identity"; then
3512             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3513             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3514             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3515         else
3516             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3517         fi
3518     else
3519         MACOSX_PACKAGE_SIGNING_IDENTITY=$enable_macosx_package_signing
3520         pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3521         AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3522     fi
3524     if test -n "$MACOSX_CODESIGNING_IDENTITY" -a -n "$MACOSX_PACKAGE_SIGNING_IDENTITY" -a "$MACOSX_CODESIGNING_IDENTITY" = "$MACOSX_PACKAGE_SIGNING_IDENTITY"; then
3525         AC_MSG_ERROR([You should not use the same identity for code and package signing])
3526     fi
3528     AC_MSG_CHECKING([whether to sandbox the application])
3530     if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then
3531         AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java])
3532     elif test "$enable_macosx_sandbox" = yes; then
3533         ENABLE_MACOSX_SANDBOX=TRUE
3534         AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX)
3535         AC_MSG_RESULT([yes])
3536     else
3537         AC_MSG_RESULT([no])
3538     fi
3540     AC_MSG_CHECKING([what macOS app bundle identifier to use])
3541     MACOSX_BUNDLE_IDENTIFIER=$with_macosx_bundle_identifier
3542     AC_MSG_RESULT([$MACOSX_BUNDLE_IDENTIFIER])
3544 AC_SUBST(MACOSX_SDK_PATH)
3545 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3546 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3547 AC_SUBST(MAC_OS_X_VERSION_MAX_ALLOWED)
3548 AC_SUBST(INSTALL_NAME_TOOL)
3549 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3550 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3551 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3552 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3553 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3555 dnl ===================================================================
3556 dnl Check iOS SDK and compiler
3557 dnl ===================================================================
3559 if test $_os = iOS; then
3560     AC_MSG_CHECKING([what iOS SDK to use])
3561     current_sdk_ver=15.0
3562     older_sdk_vers="14.5"
3563     if test "$enable_ios_simulator" = "yes"; then
3564         platform=iPhoneSimulator
3565         versionmin=-mios-simulator-version-min=13.6
3566     else
3567         platform=iPhoneOS
3568         versionmin=-miphoneos-version-min=13.6
3569     fi
3570     xcode_developer=`xcode-select -print-path`
3572     for sdkver in $current_sdk_ver $older_sdk_vers; do
3573         t=$xcode_developer/Platforms/$platform.platform/Developer/SDKs/$platform$sdkver.sdk
3574         if test -d $t; then
3575             sysroot=$t
3576             break
3577         fi
3578     done
3580     if test -z "$sysroot"; then
3581         AC_MSG_ERROR([Could not find iOS SDK, expected something like $xcode_developer/Platforms/$platform.platform/Developer/SDKs/${platform}${current_sdk_ver}.sdk])
3582     fi
3584     AC_MSG_RESULT($sysroot)
3586     stdlib="-stdlib=libc++"
3588     AC_MSG_CHECKING([what C compiler to use])
3589     CC="`xcrun -find clang`"
3590     CC_BASE=`first_arg_basename "$CC"`
3591     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3592     AC_MSG_RESULT([$CC])
3594     AC_MSG_CHECKING([what C++ compiler to use])
3595     CXX="`xcrun -find clang++`"
3596     CXX_BASE=`first_arg_basename "$CXX"`
3597     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3598     AC_MSG_RESULT([$CXX])
3600     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3601     AR=`xcrun -find ar`
3602     NM=`xcrun -find nm`
3603     STRIP=`xcrun -find strip`
3604     LIBTOOL=`xcrun -find libtool`
3605     RANLIB=`xcrun -find ranlib`
3608 AC_MSG_CHECKING([whether to treat the installation as read-only])
3610 if test $_os = Darwin; then
3611     enable_readonly_installset=yes
3612 elif test "$enable_extensions" != yes; then
3613     enable_readonly_installset=yes
3615 if test "$enable_readonly_installset" = yes; then
3616     AC_MSG_RESULT([yes])
3617     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3618 else
3619     AC_MSG_RESULT([no])
3622 dnl ===================================================================
3623 dnl Structure of install set
3624 dnl ===================================================================
3626 if test $_os = Darwin; then
3627     LIBO_BIN_FOLDER=MacOS
3628     LIBO_ETC_FOLDER=Resources
3629     LIBO_LIBEXEC_FOLDER=MacOS
3630     LIBO_LIB_FOLDER=Frameworks
3631     LIBO_LIB_PYUNO_FOLDER=Resources
3632     LIBO_SHARE_FOLDER=Resources
3633     LIBO_SHARE_HELP_FOLDER=Resources/help
3634     LIBO_SHARE_JAVA_FOLDER=Resources/java
3635     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3636     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3637     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3638     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3639     LIBO_URE_BIN_FOLDER=MacOS
3640     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3641     LIBO_URE_LIB_FOLDER=Frameworks
3642     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3643     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3644 elif test $_os = WINNT; then
3645     LIBO_BIN_FOLDER=program
3646     LIBO_ETC_FOLDER=program
3647     LIBO_LIBEXEC_FOLDER=program
3648     LIBO_LIB_FOLDER=program
3649     LIBO_LIB_PYUNO_FOLDER=program
3650     LIBO_SHARE_FOLDER=share
3651     LIBO_SHARE_HELP_FOLDER=help
3652     LIBO_SHARE_JAVA_FOLDER=program/classes
3653     LIBO_SHARE_PRESETS_FOLDER=presets
3654     LIBO_SHARE_READMES_FOLDER=readmes
3655     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3656     LIBO_SHARE_SHELL_FOLDER=program/shell
3657     LIBO_URE_BIN_FOLDER=program
3658     LIBO_URE_ETC_FOLDER=program
3659     LIBO_URE_LIB_FOLDER=program
3660     LIBO_URE_MISC_FOLDER=program
3661     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3662 else
3663     LIBO_BIN_FOLDER=program
3664     LIBO_ETC_FOLDER=program
3665     LIBO_LIBEXEC_FOLDER=program
3666     LIBO_LIB_FOLDER=program
3667     LIBO_LIB_PYUNO_FOLDER=program
3668     LIBO_SHARE_FOLDER=share
3669     LIBO_SHARE_HELP_FOLDER=help
3670     LIBO_SHARE_JAVA_FOLDER=program/classes
3671     LIBO_SHARE_PRESETS_FOLDER=presets
3672     LIBO_SHARE_READMES_FOLDER=readmes
3673     if test "$enable_fuzzers" != yes; then
3674         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3675     else
3676         LIBO_SHARE_RESOURCE_FOLDER=resource
3677     fi
3678     LIBO_SHARE_SHELL_FOLDER=program/shell
3679     LIBO_URE_BIN_FOLDER=program
3680     LIBO_URE_ETC_FOLDER=program
3681     LIBO_URE_LIB_FOLDER=program
3682     LIBO_URE_MISC_FOLDER=program
3683     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3685 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3686 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3687 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3688 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3689 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3690 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3691 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3692 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3693 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3694 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3695 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3696 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3697 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3698 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3699 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3700 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3702 # Not all of them needed in config_host.mk, add more if need arises
3703 AC_SUBST(LIBO_BIN_FOLDER)
3704 AC_SUBST(LIBO_ETC_FOLDER)
3705 AC_SUBST(LIBO_LIB_FOLDER)
3706 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3707 AC_SUBST(LIBO_SHARE_FOLDER)
3708 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3709 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3710 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3711 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3712 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3713 AC_SUBST(LIBO_URE_BIN_FOLDER)
3714 AC_SUBST(LIBO_URE_ETC_FOLDER)
3715 AC_SUBST(LIBO_URE_LIB_FOLDER)
3716 AC_SUBST(LIBO_URE_MISC_FOLDER)
3717 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3719 dnl ===================================================================
3720 dnl Windows specific tests and stuff
3721 dnl ===================================================================
3723 reg_get_value()
3725     # Return value: $regvalue
3726     unset regvalue
3728     if test "$build_os" = "wsl"; then
3729         regvalue=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --read-registry $1 "$2" 2>/dev/null)
3730         return
3731     fi
3733     local _regentry="/proc/registry${1}/${2}"
3734     if test -f "$_regentry"; then
3735         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3736         # Registry keys read via /proc/registry* are always \0 terminated!
3737         local _regvalue=$(tr -d '\0' < "$_regentry")
3738         if test $? -eq 0; then
3739             regvalue=$_regvalue
3740         fi
3741     fi
3744 # Get a value from the 32-bit side of the Registry
3745 reg_get_value_32()
3747     reg_get_value "32" "$1"
3750 # Get a value from the 64-bit side of the Registry
3751 reg_get_value_64()
3753     reg_get_value "64" "$1"
3756 case "$host_os" in
3757 cygwin*|wsl*)
3758     COM=MSC
3759     OS=WNT
3760     RTL_OS=Windows
3761     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3762         P_SEP=";"
3763     else
3764         P_SEP=:
3765     fi
3766     case "$host_cpu" in
3767     x86_64)
3768         CPUNAME=X86_64
3769         RTL_ARCH=X86_64
3770         PLATFORMID=windows_x86_64
3771         WINDOWS_X64=1
3772         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
3773         WIN_HOST_ARCH="x64"
3774         WIN_MULTI_ARCH="x86"
3775         WIN_HOST_BITS=64
3776         ;;
3777     i*86)
3778         CPUNAME=INTEL
3779         RTL_ARCH=x86
3780         PLATFORMID=windows_x86
3781         WIN_HOST_ARCH="x86"
3782         WIN_HOST_BITS=32
3783         WIN_OTHER_ARCH="x64"
3784         ;;
3785     aarch64)
3786         CPUNAME=AARCH64
3787         RTL_ARCH=AARCH64
3788         PLATFORMID=windows_aarch64
3789         WINDOWS_X64=1
3790         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
3791         WIN_HOST_ARCH="arm64"
3792         WIN_HOST_BITS=64
3793         with_ucrt_dir=no
3794         ;;
3795     *)
3796         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
3797         ;;
3798     esac
3800     case "$build_cpu" in
3801     x86_64) WIN_BUILD_ARCH="x64" ;;
3802     i*86) WIN_BUILD_ARCH="x86" ;;
3803     aarch64) WIN_BUILD_ARCH="arm64" ;;
3804     *)
3805         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
3806         ;;
3807     esac
3809     SCPDEFS="$SCPDEFS -D_MSC_VER"
3810     ;;
3811 esac
3813 # multi-arch is an arch, which can execute on the host (x86 on x64), while
3814 # other-arch won't, but wouldn't break the build (x64 on x86).
3815 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
3816     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
3820 if test "$_os" = "iOS" -o "$build_cpu" != "$host_cpu"; then
3821     # To allow building Windows multi-arch releases without cross-tooling
3822     if test -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH"; then
3823         cross_compiling="yes"
3824     fi
3827 ENABLE_WASM_STRIP=''
3828 if test "$cross_compiling" = "yes"; then
3829     export CROSS_COMPILING=TRUE
3830     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
3831         ENABLE_WASM_STRIP=TRUE
3832     fi
3833 else
3834     CROSS_COMPILING=
3835     BUILD_TYPE="$BUILD_TYPE NATIVE"
3837 AC_SUBST(CROSS_COMPILING)
3838 AC_SUBST(ENABLE_WASM_STRIP)
3840 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
3841 # NOTE: must _not_ be used for bundled external libraries!
3842 ISYSTEM=
3843 if test "$GCC" = "yes"; then
3844     AC_MSG_CHECKING( for -isystem )
3845     save_CFLAGS=$CFLAGS
3846     CFLAGS="$CFLAGS -isystem /usr/include -Werror"
3847     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
3848     CFLAGS=$save_CFLAGS
3849     if test -n "$ISYSTEM"; then
3850         AC_MSG_RESULT(yes)
3851     else
3852         AC_MSG_RESULT(no)
3853     fi
3855 if test -z "$ISYSTEM"; then
3856     # fall back to using -I
3857     ISYSTEM=-I
3859 AC_SUBST(ISYSTEM)
3861 dnl ===================================================================
3862 dnl  Check which Visual Studio compiler is used
3863 dnl ===================================================================
3865 map_vs_year_to_version()
3867     # Return value: $vsversion
3869     unset vsversion
3871     case $1 in
3872     2019)
3873         vsversion=16;;
3874     2022)
3875         vsversion=17;;
3876     *)
3877         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
3878     esac
3881 vs_versions_to_check()
3883     # Args: $1 (optional) : versions to check, in the order of preference
3884     # Return value: $vsversions
3886     unset vsversions
3888     if test -n "$1"; then
3889         map_vs_year_to_version "$1"
3890         vsversions=$vsversion
3891     else
3892         # Default version is 2019
3893         vsversions="16"
3894     fi
3897 win_get_env_from_vsvars32bat()
3899     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
3900     # Also seems to be located in another directory under the same name: vsvars32.bat
3901     # https://github.com/bazelbuild/bazel/blob/master/src/main/native/build_windows_jni.sh#L56-L57
3902     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$(cygpath -w $VC_PRODUCT_DIR)" > $WRAPPERBATCHFILEPATH
3903     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
3904     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
3905     local result
3906     if test "$build_os" = "wsl"; then
3907         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
3908     else
3909         chmod +x $WRAPPERBATCHFILEPATH
3910         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
3911     fi
3912     rm -f $WRAPPERBATCHFILEPATH
3913     printf '%s' "$result"
3916 find_ucrt()
3918     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/InstallationFolder"
3919     if test -n "$regvalue"; then
3920         PathFormat "$regvalue"
3921         UCRTSDKDIR=$formatted_path_unix
3922         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion"
3923         UCRTVERSION=$regvalue
3924         # Rest if not exist
3925         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
3926           UCRTSDKDIR=
3927         fi
3928     fi
3929     if test -z "$UCRTSDKDIR"; then
3930         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
3931         ide_env_file="${ide_env_dir}VsDevCmd.bat"
3932         if test -f "$ide_env_file"; then
3933             PathFormat "$(win_get_env_from_vsvars32bat UniversalCRTSdkDir)"
3934             UCRTSDKDIR=$formatted_path
3935             UCRTVERSION=$(win_get_env_from_vsvars32bat UCRTVersion)
3936             dnl Hack needed at least by tml:
3937             if test "$UCRTVERSION" = 10.0.15063.0 \
3938                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
3939                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
3940             then
3941                 UCRTVERSION=10.0.14393.0
3942             fi
3943         else
3944           AC_MSG_ERROR([No UCRT found])
3945         fi
3946     fi
3949 find_msvc()
3951     # Find Visual C++
3952     # Args: $1 (optional) : The VS version year
3953     # Return values: $vctest, $vcyear, $vctoolset, $vcnumwithdot, $vcbuildnumber
3955     unset vctest vctoolset vcnumwithdot vcbuildnumber
3957     vs_versions_to_check "$1"
3958     if test "$build_os" = wsl; then
3959         vswhere="$PROGRAMFILESX86"
3960     else
3961         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
3962     fi
3963     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
3964     PathFormat "$vswhere"
3965     vswhere=$formatted_path_unix
3966     for ver in $vsversions; do
3967         vswhereoutput=`$vswhere -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3968         if test -z "$vswhereoutput"; then
3969             vswhereoutput=`$vswhere -prerelease -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3970         fi
3971         # Fall back to all MS products (this includes VC++ Build Tools)
3972         if ! test -n "$vswhereoutput"; then
3973             AC_MSG_CHECKING([VC++ Build Tools and similar])
3974             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3975         fi
3976         if test -n "$vswhereoutput"; then
3977             PathFormat "$vswhereoutput"
3978             vctest=$formatted_path_unix
3979             break
3980         fi
3981     done
3983     if test -n "$vctest"; then
3984         vcnumwithdot="$ver.0"
3985         case "$vcnumwithdot" in
3986         16.0)
3987             vcyear=2019
3988             vctoolset=v142
3989             ;;
3990         17.0)
3991             vcyear=2022
3992             vctoolset=v143
3993             ;;
3994         esac
3995         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
3997     fi
4000 test_cl_exe()
4002     AC_MSG_CHECKING([$1 compiler])
4004     CL_EXE_PATH="$2/cl.exe"
4006     if test ! -f "$CL_EXE_PATH"; then
4007         if test "$1" = "multi-arch"; then
4008             AC_MSG_WARN([no compiler (cl.exe) in $2])
4009             return 1
4010         else
4011             AC_MSG_ERROR([no compiler (cl.exe) in $2])
4012         fi
4013     fi
4015     dnl ===========================================================
4016     dnl  Check for the corresponding mspdb*.dll
4017     dnl ===========================================================
4019     # MSVC 15.0 has libraries from 14.0?
4020     mspdbnum="140"
4022     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
4023         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
4024     fi
4026     # The compiles has to find its shared libraries
4027     OLD_PATH="$PATH"
4028     TEMP_PATH=`cygpath -d "$2"`
4029     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
4031     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
4032         AC_MSG_ERROR([no compiler (cl.exe) in $2])
4033     fi
4035     PATH="$OLD_PATH"
4037     AC_MSG_RESULT([$CL_EXE_PATH])
4040 SOLARINC=
4041 MSBUILD_PATH=
4042 DEVENV=
4043 if test "$_os" = "WINNT"; then
4044     AC_MSG_CHECKING([Visual C++])
4045     find_msvc "$with_visual_studio"
4046     if test -z "$vctest"; then
4047         if test -n "$with_visual_studio"; then
4048             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
4049         else
4050             AC_MSG_ERROR([no Visual Studio installation found])
4051         fi
4052     fi
4053     AC_MSG_RESULT([])
4055     VC_PRODUCT_DIR="$vctest/VC"
4056     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
4058     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
4059     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
4060         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
4061         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
4062         if test $? -ne 0; then
4063             WIN_MULTI_ARCH=""
4064             WIN_OTHER_ARCH=""
4065         fi
4066     fi
4068     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
4069         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
4070         test_cl_exe "build" "$MSVC_BUILD_PATH"
4071     fi
4073     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
4074         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
4075         test_cl_exe "host" "$MSVC_HOST_PATH"
4076     else
4077         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
4078     fi
4080     AC_MSG_CHECKING([for short pathname of VC product directory])
4081     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
4082     AC_MSG_RESULT([$VC_PRODUCT_DIR])
4084     UCRTSDKDIR=
4085     UCRTVERSION=
4087     AC_MSG_CHECKING([for UCRT location])
4088     find_ucrt
4089     # find_ucrt errors out if it doesn't find it
4090     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
4091     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
4092     ucrtincpath_formatted=$formatted_path
4093     # SOLARINC is used for external modules and must be set too.
4094     # And no, it's not sufficient to set SOLARINC only, as configure
4095     # itself doesn't honour it.
4096     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
4097     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
4098     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
4099     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4101     AC_SUBST(UCRTSDKDIR)
4102     AC_SUBST(UCRTVERSION)
4104     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4105     # Find the proper version of MSBuild.exe to use based on the VS version
4106     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath
4107     if test -z "$regvalue" ; then
4108         if test "$WIN_BUILD_ARCH" != "x64"; then
4109             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4110         else
4111             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4112         fi
4113     fi
4114     if test -d "$regvalue" ; then
4115         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4116         AC_MSG_RESULT([$regvalue])
4117     else
4118         AC_MSG_ERROR([MSBuild.exe location not found])
4119     fi
4121     # Find the version of devenv.exe
4122     # MSVC 2017 devenv does not start properly from a DOS 8.3 path
4123     DEVENV=$(cygpath -lm "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe")
4124     DEVENV_unix=$(cygpath -u "$DEVENV")
4125     if test ! -e "$DEVENV_unix"; then
4126         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4127     fi
4129     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4130     dnl needed when building CLR code:
4131     if test -z "$MSVC_CXX"; then
4132         # This gives us a posix path with 8.3 filename restrictions
4133         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4134     fi
4136     if test -z "$CC"; then
4137         CC=$MSVC_CXX
4138         CC_BASE=`first_arg_basename "$CC"`
4139     fi
4140     if test -z "$CXX"; then
4141         CXX=$MSVC_CXX
4142         CXX_BASE=`first_arg_basename "$CXX"`
4143     fi
4145     if test -n "$CC"; then
4146         # Remove /cl.exe from CC case insensitive
4147         AC_MSG_NOTICE([found Visual C++ $vcyear])
4149         main_include_dir=`cygpath -d -m "$COMPATH/Include"`
4150         CPPFLAGS="$CPPFLAGS -I$main_include_dir"
4152         PathFormat "$COMPATH"
4153         COMPATH=`win_short_path_for_make "$formatted_path"`
4155         VCVER=$vcnumwithdot
4156         VCTOOLSET=$vctoolset
4158         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4159         # are always "better", we list them in reverse chronological order.
4161         case "$vcnumwithdot" in
4162         16.0 | 17.0)
4163             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4164             ;;
4165         esac
4167         # The expectation is that --with-windows-sdk should not need to be used
4168         if test -n "$with_windows_sdk"; then
4169             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4170             *" "$with_windows_sdk" "*)
4171                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4172                 ;;
4173             *)
4174                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4175                 ;;
4176             esac
4177         fi
4179         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4180         ac_objext=obj
4181         ac_exeext=exe
4183     else
4184         AC_MSG_ERROR([Visual C++ not found after all, huh])
4185     fi
4187     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4188     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4189         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4190         // between Visual Studio versions and _MSC_VER:
4191         #if _MSC_VER < 1925
4192         #error
4193         #endif
4194     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4196     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4197     # version of the Explorer extension (and maybe other small
4198     # bits, too) needed when installing a 32-bit LibreOffice on a
4199     # 64-bit OS. The 64-bit Explorer extension is a feature that
4200     # has been present since long in OOo. Don't confuse it with
4201     # building LibreOffice itself as 64-bit code.
4203     BUILD_X64=
4204     CXX_X64_BINARY=
4206     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4207         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4208         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4209              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4210         then
4211             BUILD_X64=TRUE
4212             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4213             AC_MSG_RESULT([found])
4214         else
4215             AC_MSG_RESULT([not found])
4216             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4217         fi
4218     elif test "$WIN_HOST_ARCH" = "x64"; then
4219         CXX_X64_BINARY=$CXX
4220     fi
4221     AC_SUBST(BUILD_X64)
4223     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4224     AC_SUBST(CXX_X64_BINARY)
4226     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4227     # needed to support TWAIN scan on both 32- and 64-bit systems
4229     case "$WIN_HOST_ARCH" in
4230     x64)
4231         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4232         if test -n "$CXX_X86_BINARY"; then
4233             BUILD_X86=TRUE
4234             AC_MSG_RESULT([preset])
4235         elif test -n "$WIN_MULTI_ARCH"; then
4236             BUILD_X86=TRUE
4237             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4238             CXX_X86_BINARY+=" /arch:SSE"
4239             AC_MSG_RESULT([found])
4240         else
4241             AC_MSG_RESULT([not found])
4242             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4243         fi
4244         ;;
4245     x86)
4246         BUILD_X86=TRUE
4247         CXX_X86_BINARY=$MSVC_CXX
4248         ;;
4249     esac
4250     AC_SUBST(BUILD_X86)
4251     AC_SUBST(CXX_X86_BINARY)
4253 AC_SUBST(VCVER)
4254 AC_SUBST(VCTOOLSET)
4255 AC_SUBST(DEVENV)
4256 AC_SUBST(MSVC_CXX)
4258 COM_IS_CLANG=
4259 AC_MSG_CHECKING([whether the compiler is actually Clang])
4260 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4261     #ifndef __clang__
4262     you lose
4263     #endif
4264     int foo=42;
4265     ]])],
4266     [AC_MSG_RESULT([yes])
4267      COM_IS_CLANG=TRUE],
4268     [AC_MSG_RESULT([no])])
4269 AC_SUBST(COM_IS_CLANG)
4271 CC_PLAIN=$CC
4272 CLANGVER=
4273 if test "$COM_IS_CLANG" = TRUE; then
4274     AC_MSG_CHECKING([whether Clang is new enough])
4275     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4276         #if !defined __apple_build_version__
4277         #error
4278         #endif
4279         ]])],
4280         [my_apple_clang=yes],[my_apple_clang=])
4281     if test "$my_apple_clang" = yes; then
4282         AC_MSG_RESULT([assumed yes (Apple Clang)])
4283     elif test "$_os" = Emscripten; then
4284         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4285     else
4286         if test "$_os" = WINNT; then
4287             dnl In which case, assume clang-cl:
4288             my_args="/EP /TC"
4289             dnl Filter out -FIIntrin.h, which needs to be explicitly stated for
4290             dnl clang-cl:
4291             CC_PLAIN=
4292             for i in $CC; do
4293                 case $i in
4294                 -FIIntrin.h)
4295                     ;;
4296                 *)
4297                     CC_PLAIN="$CC_PLAIN $i"
4298                     ;;
4299                 esac
4300             done
4301         else
4302             my_args="-E -P"
4303         fi
4304         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC_PLAIN $my_args - | sed 's/ //g'`
4305         CLANG_FULL_VERSION=`echo __clang_version__ | $CC_PLAIN $my_args -`
4306         CLANGVER=`echo $clang_version \
4307             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4308         if test "$CLANGVER" -ge 50002; then
4309             AC_MSG_RESULT([yes ($clang_version)])
4310         else
4311             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 5.0.2])
4312         fi
4313         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4314         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4315     fi
4318 SHOWINCLUDES_PREFIX=
4319 if test "$_os" = WINNT; then
4320     dnl We need to guess the prefix of the -showIncludes output, it can be
4321     dnl localized
4322     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4323     echo "#include <stdlib.h>" > conftest.c
4324     SHOWINCLUDES_PREFIX=`$CC_PLAIN $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4325         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4326     rm -f conftest.c conftest.obj
4327     if test -z "$SHOWINCLUDES_PREFIX"; then
4328         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4329     else
4330         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4331     fi
4333 AC_SUBST(SHOWINCLUDES_PREFIX)
4336 # prefix C with ccache if needed
4338 if test "$CCACHE" != ""; then
4339     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4341     AC_LANG_PUSH([C])
4342     save_CFLAGS=$CFLAGS
4343     CFLAGS="$CFLAGS --ccache-skip -O2"
4344     # msvc does not fail on unknown options, check stdout
4345     if test "$COM" = MSC; then
4346         CFLAGS="$CFLAGS -nologo"
4347     fi
4348     save_ac_c_werror_flag=$ac_c_werror_flag
4349     ac_c_werror_flag=yes
4350     dnl an empty program will do, we're checking the compiler flags
4351     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4352                       [use_ccache=yes], [use_ccache=no])
4353     CFLAGS=$save_CFLAGS
4354     ac_c_werror_flag=$save_ac_c_werror_flag
4355     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4356         AC_MSG_RESULT([yes])
4357     else
4358         CC="$CCACHE $CC"
4359         CC_BASE="ccache $CC_BASE"
4360         AC_MSG_RESULT([no])
4361     fi
4362     AC_LANG_POP([C])
4365 # ===================================================================
4366 # check various GCC options that Clang does not support now but maybe
4367 # will somewhen in the future, check them even for GCC, so that the
4368 # flags are set
4369 # ===================================================================
4371 HAVE_GCC_GGDB2=
4372 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4373     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4374     save_CFLAGS=$CFLAGS
4375     CFLAGS="$CFLAGS -Werror -ggdb2"
4376     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4377     CFLAGS=$save_CFLAGS
4378     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4379         AC_MSG_RESULT([yes])
4380     else
4381         AC_MSG_RESULT([no])
4382     fi
4384     if test "$host_cpu" = "m68k"; then
4385         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4386         save_CFLAGS=$CFLAGS
4387         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4388         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4389         CFLAGS=$save_CFLAGS
4390         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4391             AC_MSG_RESULT([yes])
4392         else
4393             AC_MSG_ERROR([no])
4394         fi
4395     fi
4397 AC_SUBST(HAVE_GCC_GGDB2)
4399 dnl ===================================================================
4400 dnl  Test the gcc version
4401 dnl ===================================================================
4402 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4403     AC_MSG_CHECKING([the GCC version])
4404     _gcc_version=`$CC -dumpfullversion`
4405     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4406         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4407     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4409     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4411     if test "$gcc_full_version" -lt 70000; then
4412         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 7.0.0])
4413     fi
4414 else
4415     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4416     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4417     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4418     # (which reports itself as GCC 4.2.1).
4419     GCC_VERSION=
4421 AC_SUBST(GCC_VERSION)
4423 dnl Set the ENABLE_DBGUTIL variable
4424 dnl ===================================================================
4425 AC_MSG_CHECKING([whether to build with additional debug utilities])
4426 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4427     ENABLE_DBGUTIL="TRUE"
4428     # this is an extra var so it can have different default on different MSVC
4429     # versions (in case there are version specific problems with it)
4430     MSVC_USE_DEBUG_RUNTIME="TRUE"
4432     AC_MSG_RESULT([yes])
4433     # cppunit and graphite expose STL in public headers
4434     if test "$with_system_cppunit" = "yes"; then
4435         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4436     else
4437         with_system_cppunit=no
4438     fi
4439     if test "$with_system_graphite" = "yes"; then
4440         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4441     else
4442         with_system_graphite=no
4443     fi
4444     if test "$with_system_orcus" = "yes"; then
4445         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4446     else
4447         with_system_orcus=no
4448     fi
4449     if test "$with_system_libcmis" = "yes"; then
4450         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4451     else
4452         with_system_libcmis=no
4453     fi
4454     if test "$with_system_hunspell" = "yes"; then
4455         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4456     else
4457         with_system_hunspell=no
4458     fi
4459     if test "$with_system_gpgmepp" = "yes"; then
4460         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4461     else
4462         with_system_gpgmepp=no
4463     fi
4464     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4465     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4466     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4467     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4468     # of those two is using the system variant:
4469     if test "$with_system_libnumbertext" = "yes"; then
4470         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4471     else
4472         with_system_libnumbertext=no
4473     fi
4474     if test "$with_system_libwps" = "yes"; then
4475         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4476     else
4477         with_system_libwps=no
4478     fi
4479 else
4480     ENABLE_DBGUTIL=""
4481     MSVC_USE_DEBUG_RUNTIME=""
4482     AC_MSG_RESULT([no])
4484 AC_SUBST(ENABLE_DBGUTIL)
4485 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4487 dnl Set the ENABLE_DEBUG variable.
4488 dnl ===================================================================
4489 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4490     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4492 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4493     if test -z "$libo_fuzzed_enable_debug"; then
4494         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4495     else
4496         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4497         enable_debug=yes
4498     fi
4501 AC_MSG_CHECKING([whether to do a debug build])
4502 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4503     ENABLE_DEBUG="TRUE"
4504     if test -n "$ENABLE_DBGUTIL" ; then
4505         AC_MSG_RESULT([yes (dbgutil)])
4506     else
4507         AC_MSG_RESULT([yes])
4508     fi
4509 else
4510     ENABLE_DEBUG=""
4511     AC_MSG_RESULT([no])
4513 AC_SUBST(ENABLE_DEBUG)
4515 dnl ===================================================================
4516 dnl Select the linker to use (gold/lld/ld.bfd).
4517 dnl This is done only after compiler checks (need to know if Clang is
4518 dnl used, for different defaults) and after checking if a debug build
4519 dnl is wanted (non-debug builds get the default linker if not explicitly
4520 dnl specified otherwise).
4521 dnl All checks for linker features/options should come after this.
4522 dnl ===================================================================
4523 check_use_ld()
4525     use_ld=-fuse-ld=${1%%:*}
4526     use_ld_path=${1#*:}
4527     if test "$use_ld_path" != "$1"; then
4528         use_ld="$use_ld --ld-path=$use_ld_path"
4529     fi
4530     use_ld_fail_if_error=$2
4531     use_ld_ok=
4532     AC_MSG_CHECKING([for $use_ld linker support])
4533     use_ld_ldflags_save="$LDFLAGS"
4534     LDFLAGS="$LDFLAGS $use_ld"
4535     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4536 #include <stdio.h>
4537         ],[
4538 printf ("hello world\n");
4539         ])], USE_LD=$use_ld, [])
4540     if test -n "$USE_LD"; then
4541         AC_MSG_RESULT( yes )
4542         use_ld_ok=yes
4543     else
4544         if test -n "$use_ld_fail_if_error"; then
4545             AC_MSG_ERROR( no )
4546         else
4547             AC_MSG_RESULT( no )
4548         fi
4549     fi
4550     if test -n "$use_ld_ok"; then
4551         dnl keep the value of LDFLAGS
4552         return 0
4553     fi
4554     LDFLAGS="$use_ld_ldflags_save"
4555     return 1
4557 USE_LD=
4558 if test "$enable_ld" != "no"; then
4559     if test "$GCC" = "yes"; then
4560         if test -n "$enable_ld"; then
4561             check_use_ld "$enable_ld" fail_if_error
4562         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4563             dnl non-debug builds default to the default linker
4564             true
4565         elif test -n "$COM_IS_CLANG"; then
4566             check_use_ld lld
4567             if test $? -ne 0; then
4568                 check_use_ld gold
4569             fi
4570         else
4571             # For gcc first try gold, new versions also support lld.
4572             check_use_ld gold
4573             if test $? -ne 0; then
4574                 check_use_ld lld
4575             fi
4576         fi
4577         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4578         rm conftest.out
4579         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD)')
4580         if test -z "$ld_used"; then
4581             ld_used="unknown"
4582         fi
4583         AC_MSG_CHECKING([for linker that is used])
4584         AC_MSG_RESULT([$ld_used])
4585         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4586             if echo "$ld_used" | grep -q "^GNU ld"; then
4587                 AC_MSG_WARN([The default GNU linker is slow, consider using the LLD or the GNU gold linker.])
4588                 add_warning "The default GNU linker is slow, consider using the LLD or the GNU gold linker."
4589             fi
4590         fi
4591     else
4592         if test "$enable_ld" = "yes"; then
4593             AC_MSG_ERROR([--enable-ld not supported])
4594         fi
4595     fi
4597 AC_SUBST(USE_LD)
4599 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4600 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4601     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4602     bsymbolic_functions_ldflags_save=$LDFLAGS
4603     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4604     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4605 #include <stdio.h>
4606         ],[
4607 printf ("hello world\n");
4608         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4609     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4610         AC_MSG_RESULT( found )
4611     else
4612         AC_MSG_RESULT( not found )
4613     fi
4614     LDFLAGS=$bsymbolic_functions_ldflags_save
4616 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4618 LD_GC_SECTIONS=
4619 if test "$GCC" = "yes"; then
4620     for flag in "--gc-sections" "-dead_strip"; do
4621         AC_MSG_CHECKING([for $flag linker support])
4622         ldflags_save=$LDFLAGS
4623         LDFLAGS="$LDFLAGS -Wl,$flag"
4624         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4625 #include <stdio.h>
4626             ],[
4627 printf ("hello world\n");
4628             ])],[
4629             LD_GC_SECTIONS="-Wl,$flag"
4630             AC_MSG_RESULT( found )
4631             ], [
4632             AC_MSG_RESULT( not found )
4633             ])
4634         LDFLAGS=$ldflags_save
4635         if test -n "$LD_GC_SECTIONS"; then
4636             break
4637         fi
4638     done
4640 AC_SUBST(LD_GC_SECTIONS)
4642 HAVE_GSPLIT_DWARF=
4643 if test "$enable_split_debug" != no; then
4644     use_split_debug=
4645     if test -n "$ENABLE_LTO"; then
4646         true # Inherently incompatible, since no debug info is created while compiling, GCC complains.
4647     elif test "$enable_split_debug" = yes; then
4648         use_split_debug=1
4649     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4650     elif test "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4651         use_split_debug=1
4652     fi
4653     if test -n "$use_split_debug"; then
4654         AC_MSG_CHECKING([whether $CC_BASE supports -gsplit-dwarf])
4655         save_CFLAGS=$CFLAGS
4656         CFLAGS="$CFLAGS -Werror -gsplit-dwarf"
4657         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_SPLIT_DWARF=TRUE ],[])
4658         CFLAGS=$save_CFLAGS
4659         if test "$HAVE_GCC_SPLIT_DWARF" = "TRUE"; then
4660             AC_MSG_RESULT([yes])
4661         else
4662             if test "$enable_split_debug" = yes; then
4663                 AC_MSG_ERROR([no])
4664             else
4665                 AC_MSG_RESULT([no])
4666             fi
4667         fi
4668     fi
4669     if test -z "$HAVE_GCC_SPLIT_DWARF" -a "$test_split_debug" = "yes" -a -n "$use_split_debug"; then
4670         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4671         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4672     fi
4674 AC_SUBST(HAVE_GCC_SPLIT_DWARF)
4676 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4677 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4678 save_CFLAGS=$CFLAGS
4679 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4680 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4681 CFLAGS=$save_CFLAGS
4682 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4683     AC_MSG_RESULT([yes])
4684 else
4685     AC_MSG_RESULT([no])
4687 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4689 ENABLE_GDB_INDEX=
4690 if test "$enable_gdb_index" != "no"; then
4691     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4692     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4693         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4694         save_CFLAGS=$CFLAGS
4695         CFLAGS="$CFLAGS -Werror -ggnu-pubnames"
4696         have_ggnu_pubnames=
4697         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4698         if test "$have_ggnu_pubnames" != "TRUE"; then
4699             if test "$enable_gdb_index" = "yes"; then
4700                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4701             else
4702                 AC_MSG_RESULT( no )
4703             fi
4704         else
4705             AC_MSG_RESULT( yes )
4706             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4707             ldflags_save=$LDFLAGS
4708             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4709             AC_LINK_IFELSE([AC_LANG_PROGRAM([
4710 #include <stdio.h>
4711                 ],[
4712 printf ("hello world\n");
4713                 ])], ENABLE_GDB_INDEX=TRUE, [])
4714             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
4715                 AC_MSG_RESULT( yes )
4716             else
4717                 if test "$enable_gdb_index" = "yes"; then
4718                     AC_MSG_ERROR( no )
4719                 else
4720                     AC_MSG_RESULT( no )
4721                 fi
4722             fi
4723             LDFLAGS=$ldflags_save
4724         fi
4725         CFLAGS=$save_CFLAGS
4726         fi
4727     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4728         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
4729         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
4730     fi
4732 AC_SUBST(ENABLE_GDB_INDEX)
4734 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
4735     enable_sal_log=yes
4737 if test "$enable_sal_log" = yes; then
4738     ENABLE_SAL_LOG=TRUE
4740 AC_SUBST(ENABLE_SAL_LOG)
4742 dnl Check for enable symbols option
4743 dnl ===================================================================
4744 AC_MSG_CHECKING([whether to generate debug information])
4745 if test -z "$enable_symbols"; then
4746     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4747         enable_symbols=yes
4748     else
4749         enable_symbols=no
4750     fi
4752 if test "$enable_symbols" = yes; then
4753     ENABLE_SYMBOLS_FOR=all
4754     AC_MSG_RESULT([yes])
4755 elif test "$enable_symbols" = no; then
4756     ENABLE_SYMBOLS_FOR=
4757     AC_MSG_RESULT([no])
4758 else
4759     # Selective debuginfo.
4760     ENABLE_SYMBOLS_FOR="$enable_symbols"
4761     AC_MSG_RESULT([for "$enable_symbols"])
4763 AC_SUBST(ENABLE_SYMBOLS_FOR)
4765 if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then
4766     # Building on Android with full symbols: without enough memory the linker never finishes currently.
4767     AC_MSG_CHECKING([whether enough memory is available for linking])
4768     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
4769     # Check for 15GB, as Linux reports a bit less than the physical memory size.
4770     if test -n "$mem_size" -a $mem_size -lt 15728640; then
4771         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
4772     else
4773         AC_MSG_RESULT([yes])
4774     fi
4777 ENABLE_OPTIMIZED=
4778 ENABLE_OPTIMIZED_DEBUG=
4779 AC_MSG_CHECKING([whether to compile with optimization flags])
4780 if test -z "$enable_optimized"; then
4781     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4782         enable_optimized=no
4783     else
4784         enable_optimized=yes
4785     fi
4787 if test "$enable_optimized" = yes; then
4788     ENABLE_OPTIMIZED=TRUE
4789     AC_MSG_RESULT([yes])
4790 elif test "$enable_optimized" = debug; then
4791     ENABLE_OPTIMIZED_DEBUG=TRUE
4792     AC_MSG_RESULT([yes (debug)])
4793     HAVE_GCC_OG=
4794     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4795         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
4796         save_CFLAGS=$CFLAGS
4797         CFLAGS="$CFLAGS -Werror -Og"
4798         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
4799         CFLAGS=$save_CFLAGS
4800         if test "$HAVE_GCC_OG" = "TRUE"; then
4801             AC_MSG_RESULT([yes])
4802         else
4803             AC_MSG_RESULT([no])
4804         fi
4805     fi
4806     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
4807         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
4808     fi
4809 else
4810     AC_MSG_RESULT([no])
4812 AC_SUBST(ENABLE_OPTIMIZED)
4813 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
4816 # determine CPUNAME, OS, ...
4818 case "$host_os" in
4820 aix*)
4821     COM=GCC
4822     CPUNAME=POWERPC
4823     OS=AIX
4824     RTL_OS=AIX
4825     RTL_ARCH=PowerPC
4826     PLATFORMID=aix_powerpc
4827     P_SEP=:
4828     ;;
4830 cygwin*|wsl*)
4831     # Already handled
4832     ;;
4834 darwin*|macos*)
4835     COM=GCC
4836     OS=MACOSX
4837     RTL_OS=MacOSX
4838     P_SEP=:
4840     case "$host_cpu" in
4841     aarch64|arm64)
4842         if test "$enable_ios_simulator" = "yes"; then
4843             OS=iOS
4844         else
4845             CPUNAME=AARCH64
4846             RTL_ARCH=AARCH64
4847             PLATFORMID=macosx_aarch64
4848         fi
4849         ;;
4850     x86_64)
4851         if test "$enable_ios_simulator" = "yes"; then
4852             OS=iOS
4853         fi
4854         CPUNAME=X86_64
4855         RTL_ARCH=X86_64
4856         PLATFORMID=macosx_x86_64
4857         ;;
4858     *)
4859         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4860         ;;
4861     esac
4862     ;;
4864 ios*)
4865     COM=GCC
4866     OS=iOS
4867     RTL_OS=iOS
4868     P_SEP=:
4870     case "$host_cpu" in
4871     aarch64|arm64)
4872         if test "$enable_ios_simulator" = "yes"; then
4873             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
4874         fi
4875         ;;
4876     *)
4877         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4878         ;;
4879     esac
4880     CPUNAME=AARCH64
4881     RTL_ARCH=AARCH64
4882     PLATFORMID=ios_arm64
4883     ;;
4885 dragonfly*)
4886     COM=GCC
4887     OS=DRAGONFLY
4888     RTL_OS=DragonFly
4889     P_SEP=:
4891     case "$host_cpu" in
4892     i*86)
4893         CPUNAME=INTEL
4894         RTL_ARCH=x86
4895         PLATFORMID=dragonfly_x86
4896         ;;
4897     x86_64)
4898         CPUNAME=X86_64
4899         RTL_ARCH=X86_64
4900         PLATFORMID=dragonfly_x86_64
4901         ;;
4902     *)
4903         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4904         ;;
4905     esac
4906     ;;
4908 freebsd*)
4909     COM=GCC
4910     RTL_OS=FreeBSD
4911     OS=FREEBSD
4912     P_SEP=:
4914     case "$host_cpu" in
4915     aarch64)
4916         CPUNAME=AARCH64
4917         PLATFORMID=freebsd_aarch64
4918         RTL_ARCH=AARCH64
4919         ;;
4920     i*86)
4921         CPUNAME=INTEL
4922         RTL_ARCH=x86
4923         PLATFORMID=freebsd_x86
4924         ;;
4925     x86_64|amd64)
4926         CPUNAME=X86_64
4927         RTL_ARCH=X86_64
4928         PLATFORMID=freebsd_x86_64
4929         ;;
4930     powerpc64)
4931         CPUNAME=POWERPC64
4932         RTL_ARCH=PowerPC_64
4933         PLATFORMID=freebsd_powerpc64
4934         ;;
4935     powerpc|powerpcspe)
4936         CPUNAME=POWERPC
4937         RTL_ARCH=PowerPC
4938         PLATFORMID=freebsd_powerpc
4939         ;;
4940     *)
4941         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4942         ;;
4943     esac
4944     ;;
4946 haiku*)
4947     COM=GCC
4948     GUIBASE=haiku
4949     RTL_OS=Haiku
4950     OS=HAIKU
4951     P_SEP=:
4953     case "$host_cpu" in
4954     i*86)
4955         CPUNAME=INTEL
4956         RTL_ARCH=x86
4957         PLATFORMID=haiku_x86
4958         ;;
4959     x86_64|amd64)
4960         CPUNAME=X86_64
4961         RTL_ARCH=X86_64
4962         PLATFORMID=haiku_x86_64
4963         ;;
4964     *)
4965         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4966         ;;
4967     esac
4968     ;;
4970 kfreebsd*)
4971     COM=GCC
4972     OS=LINUX
4973     RTL_OS=kFreeBSD
4974     P_SEP=:
4976     case "$host_cpu" in
4978     i*86)
4979         CPUNAME=INTEL
4980         RTL_ARCH=x86
4981         PLATFORMID=kfreebsd_x86
4982         ;;
4983     x86_64)
4984         CPUNAME=X86_64
4985         RTL_ARCH=X86_64
4986         PLATFORMID=kfreebsd_x86_64
4987         ;;
4988     *)
4989         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4990         ;;
4991     esac
4992     ;;
4994 linux-gnu*|linux-musl*)
4995     COM=GCC
4996     OS=LINUX
4997     RTL_OS=Linux
4998     P_SEP=:
5000     case "$host_cpu" in
5002     aarch64)
5003         CPUNAME=AARCH64
5004         PLATFORMID=linux_aarch64
5005         RTL_ARCH=AARCH64
5006         EPM_FLAGS="-a arm64"
5007         ;;
5008     alpha)
5009         CPUNAME=AXP
5010         RTL_ARCH=ALPHA
5011         PLATFORMID=linux_alpha
5012         ;;
5013     arm*)
5014         CPUNAME=ARM
5015         EPM_FLAGS="-a arm"
5016         RTL_ARCH=ARM_EABI
5017         PLATFORMID=linux_arm_eabi
5018         case "$host_cpu" in
5019         arm*-linux)
5020             RTL_ARCH=ARM_OABI
5021             PLATFORMID=linux_arm_oabi
5022             ;;
5023         esac
5024         ;;
5025     hppa)
5026         CPUNAME=HPPA
5027         RTL_ARCH=HPPA
5028         EPM_FLAGS="-a hppa"
5029         PLATFORMID=linux_hppa
5030         ;;
5031     i*86)
5032         CPUNAME=INTEL
5033         RTL_ARCH=x86
5034         PLATFORMID=linux_x86
5035         ;;
5036     ia64)
5037         CPUNAME=IA64
5038         RTL_ARCH=IA64
5039         PLATFORMID=linux_ia64
5040         ;;
5041     mips)
5042         CPUNAME=GODSON
5043         RTL_ARCH=MIPS_EB
5044         EPM_FLAGS="-a mips"
5045         PLATFORMID=linux_mips_eb
5046         ;;
5047     mips64)
5048         CPUNAME=GODSON64
5049         RTL_ARCH=MIPS64_EB
5050         EPM_FLAGS="-a mips64"
5051         PLATFORMID=linux_mips64_eb
5052         ;;
5053     mips64el)
5054         CPUNAME=GODSON64
5055         RTL_ARCH=MIPS64_EL
5056         EPM_FLAGS="-a mips64el"
5057         PLATFORMID=linux_mips64_el
5058         ;;
5059     mipsel)
5060         CPUNAME=GODSON
5061         RTL_ARCH=MIPS_EL
5062         EPM_FLAGS="-a mipsel"
5063         PLATFORMID=linux_mips_el
5064         ;;
5065     m68k)
5066         CPUNAME=M68K
5067         RTL_ARCH=M68K
5068         PLATFORMID=linux_m68k
5069         ;;
5070     powerpc)
5071         CPUNAME=POWERPC
5072         RTL_ARCH=PowerPC
5073         PLATFORMID=linux_powerpc
5074         ;;
5075     powerpc64)
5076         CPUNAME=POWERPC64
5077         RTL_ARCH=PowerPC_64
5078         PLATFORMID=linux_powerpc64
5079         ;;
5080     powerpc64le)
5081         CPUNAME=POWERPC64
5082         RTL_ARCH=PowerPC_64_LE
5083         PLATFORMID=linux_powerpc64_le
5084         ;;
5085     sparc)
5086         CPUNAME=SPARC
5087         RTL_ARCH=SPARC
5088         PLATFORMID=linux_sparc
5089         ;;
5090     sparc64)
5091         CPUNAME=SPARC64
5092         RTL_ARCH=SPARC64
5093         PLATFORMID=linux_sparc64
5094         ;;
5095     s390)
5096         CPUNAME=S390
5097         RTL_ARCH=S390
5098         PLATFORMID=linux_s390
5099         ;;
5100     s390x)
5101         CPUNAME=S390X
5102         RTL_ARCH=S390x
5103         PLATFORMID=linux_s390x
5104         ;;
5105     x86_64)
5106         CPUNAME=X86_64
5107         RTL_ARCH=X86_64
5108         PLATFORMID=linux_x86_64
5109         ;;
5110     *)
5111         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5112         ;;
5113     esac
5114     ;;
5116 linux-android*)
5117     COM=GCC
5118     OS=ANDROID
5119     RTL_OS=Android
5120     P_SEP=:
5122     case "$host_cpu" in
5124     arm|armel)
5125         CPUNAME=ARM
5126         RTL_ARCH=ARM_EABI
5127         PLATFORMID=android_arm_eabi
5128         ;;
5129     aarch64)
5130         CPUNAME=AARCH64
5131         RTL_ARCH=AARCH64
5132         PLATFORMID=android_aarch64
5133         ;;
5134     i*86)
5135         CPUNAME=INTEL
5136         RTL_ARCH=x86
5137         PLATFORMID=android_x86
5138         ;;
5139     x86_64)
5140         CPUNAME=X86_64
5141         RTL_ARCH=X86_64
5142         PLATFORMID=android_x86_64
5143         ;;
5144     *)
5145         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5146         ;;
5147     esac
5148     ;;
5150 *netbsd*)
5151     COM=GCC
5152     OS=NETBSD
5153     RTL_OS=NetBSD
5154     P_SEP=:
5156     case "$host_cpu" in
5157     i*86)
5158         CPUNAME=INTEL
5159         RTL_ARCH=x86
5160         PLATFORMID=netbsd_x86
5161         ;;
5162     powerpc)
5163         CPUNAME=POWERPC
5164         RTL_ARCH=PowerPC
5165         PLATFORMID=netbsd_powerpc
5166         ;;
5167     sparc)
5168         CPUNAME=SPARC
5169         RTL_ARCH=SPARC
5170         PLATFORMID=netbsd_sparc
5171         ;;
5172     x86_64)
5173         CPUNAME=X86_64
5174         RTL_ARCH=X86_64
5175         PLATFORMID=netbsd_x86_64
5176         ;;
5177     *)
5178         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5179         ;;
5180     esac
5181     ;;
5183 openbsd*)
5184     COM=GCC
5185     OS=OPENBSD
5186     RTL_OS=OpenBSD
5187     P_SEP=:
5189     case "$host_cpu" in
5190     i*86)
5191         CPUNAME=INTEL
5192         RTL_ARCH=x86
5193         PLATFORMID=openbsd_x86
5194         ;;
5195     x86_64)
5196         CPUNAME=X86_64
5197         RTL_ARCH=X86_64
5198         PLATFORMID=openbsd_x86_64
5199         ;;
5200     *)
5201         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5202         ;;
5203     esac
5204     SOLARINC="$SOLARINC -I/usr/local/include"
5205     ;;
5207 solaris*)
5208     COM=GCC
5209     OS=SOLARIS
5210     RTL_OS=Solaris
5211     P_SEP=:
5213     case "$host_cpu" in
5214     i*86)
5215         CPUNAME=INTEL
5216         RTL_ARCH=x86
5217         PLATFORMID=solaris_x86
5218         ;;
5219     sparc)
5220         CPUNAME=SPARC
5221         RTL_ARCH=SPARC
5222         PLATFORMID=solaris_sparc
5223         ;;
5224     sparc64)
5225         CPUNAME=SPARC64
5226         RTL_ARCH=SPARC64
5227         PLATFORMID=solaris_sparc64
5228         ;;
5229     *)
5230         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5231         ;;
5232     esac
5233     SOLARINC="$SOLARINC -I/usr/local/include"
5234     ;;
5236 emscripten*)
5237     COM=GCC
5238     OS=EMSCRIPTEN
5239     RTL_OS=Emscripten
5240     P_SEP=:
5242     case "$host_cpu" in
5243     wasm32|wasm64)
5244         ;;
5245     *)
5246         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5247         ;;
5248     esac
5249     CPUNAME=INTEL
5250     RTL_ARCH=x86
5251     PLATFORMID=linux_x86
5252     ;;
5255     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5256     ;;
5257 esac
5259 if test "$with_x" = "no"; then
5260     AC_MSG_ERROR([Use --disable-gui instead. How can we get rid of this option? No idea where it comes from.])
5263 DISABLE_GUI=""
5264 if test "$enable_gui" = "no"; then
5265     if test "$using_x11" != yes; then
5266         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5267     fi
5268     USING_X11=
5269     DISABLE_GUI=TRUE
5270 else
5271     AC_DEFINE(HAVE_FEATURE_UI)
5273 AC_SUBST(DISABLE_GUI)
5275 if test "$using_x11" = yes; then
5276     if test "$USING_X11" = TRUE; then
5277         AC_DEFINE(USING_X11)
5278     else
5279         disable_x11_tests
5280     fi
5281 else
5282     if test "$USING_X11" = TRUE; then
5283         AC_MSG_ERROR([Platform doesn't support X11 (\$using_x11), but \$USING_X11 is set!])
5284     fi
5287 WORKDIR="${BUILDDIR}/workdir"
5288 INSTDIR="${BUILDDIR}/instdir"
5289 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5290 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5291 SOLARINC="-I$SRC_ROOT/include $SOLARINC"
5292 AC_SUBST(COM)
5293 AC_SUBST(CPUNAME)
5294 AC_SUBST(RTL_OS)
5295 AC_SUBST(RTL_ARCH)
5296 AC_SUBST(EPM_FLAGS)
5297 AC_SUBST(USING_X11)
5298 AC_SUBST([INSTDIR])
5299 AC_SUBST([INSTROOT])
5300 AC_SUBST([INSTROOTBASE])
5301 AC_SUBST(OS)
5302 AC_SUBST(P_SEP)
5303 AC_SUBST(WORKDIR)
5304 AC_SUBST(PLATFORMID)
5305 AC_SUBST(WINDOWS_X64)
5306 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5308 if test "$OS" = WNT -a "$COM" = MSC; then
5309     case "$CPUNAME" in
5310     INTEL) CPPU_ENV=msci ;;
5311     X86_64) CPPU_ENV=mscx ;;
5312     AARCH64) CPPU_ENV=msca ;;
5313     *)
5314         AC_MSG_ERROR([Unknown \$CPUNAME '$CPUNAME' for $OS / $COM"])
5315         ;;
5316     esac
5317 else
5318     CPPU_ENV=gcc3
5320 AC_SUBST(CPPU_ENV)
5322 dnl ===================================================================
5323 dnl Test which package format to use
5324 dnl ===================================================================
5325 AC_MSG_CHECKING([which package format to use])
5326 if test -n "$with_package_format" -a "$with_package_format" != no; then
5327     for i in $with_package_format; do
5328         case "$i" in
5329         aix | bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5330             ;;
5331         *)
5332             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5333 aix - AIX software distribution
5334 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5335 deb - Debian software distribution
5336 pkg - Solaris software distribution
5337 rpm - RedHat software distribution
5339 LibreOffice additionally supports:
5340 archive - .tar.gz or .zip
5341 dmg - macOS .dmg
5342 installed - installation tree
5343 msi - Windows .msi
5344         ])
5345             ;;
5346         esac
5347     done
5348     # fakeroot is needed to ensure correct file ownerships/permissions
5349     # inside deb packages and tar archives created on Linux and Solaris.
5350     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5351         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5352         if test "$FAKEROOT" = "no"; then
5353             AC_MSG_ERROR(
5354                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5355         fi
5356     fi
5357     PKGFORMAT="$with_package_format"
5358     AC_MSG_RESULT([$PKGFORMAT])
5359 else
5360     PKGFORMAT=
5361     AC_MSG_RESULT([none])
5363 AC_SUBST(PKGFORMAT)
5365 dnl ===================================================================
5366 dnl handle help related options
5368 dnl If you change help related options, please update README.help
5369 dnl ===================================================================
5371 ENABLE_HTMLHELP=
5372 HELP_OMINDEX_PAGE=
5373 HELP_ONLINE=
5374 WITH_HELPPACKS=
5376 AC_MSG_CHECKING([which help to build])
5377 if test -n "$with_help" -a "$with_help" != "no"; then
5378     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5379     BUILD_TYPE="$BUILD_TYPE HELP"
5380     case "$with_help" in
5381     "html")
5382         ENABLE_HTMLHELP=TRUE
5383         WITH_HELPPACKS=TRUE
5384         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5385         AC_MSG_RESULT([HTML (local)])
5386         ;;
5387     "online")
5388         ENABLE_HTMLHELP=TRUE
5389         HELP_ONLINE=TRUE
5390         AC_MSG_RESULT([HTML (online)])
5391         ;;
5392     yes)
5393         WITH_HELPPACKS=TRUE
5394         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5395         AC_MSG_RESULT([XML (local)])
5396         ;;
5397     *)
5398         AC_MSG_ERROR([Unknown --with-help=$with_help])
5399         ;;
5400     esac
5401 else
5402     AC_MSG_RESULT([no])
5405 AC_MSG_CHECKING([if we need to build the help index tooling])
5406 if test "$with_help" = yes -o "$enable_extension_integration" != no; then
5407     BUILD_TYPE="$BUILD_TYPE HELPTOOLS"
5408     AC_MSG_RESULT([yes])
5409 else
5410     AC_MSG_RESULT([no])
5413 AC_MSG_CHECKING([whether to enable xapian-omega support for online help])
5414 if test -n "$with_omindex" -a "$with_omindex" != "no"; then
5415     if test "$HELP_ONLINE" != TRUE; then
5416         AC_MSG_ERROR([Can't build xapian-omega index without --help=online])
5417     fi
5418     case "$with_omindex" in
5419     "server")
5420         HELP_OMINDEX_PAGE=TRUE
5421         AC_MSG_RESULT([SERVER])
5422         ;;
5423     "noxap")
5424         AC_MSG_RESULT([NOXAP])
5425         ;;
5426     *)
5427         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5428         ;;
5429     esac
5430 else
5431     AC_MSG_RESULT([no])
5434 AC_MSG_CHECKING([whether to include the XML-help support])
5435 if test "$enable_xmlhelp" = yes; then
5436     BUILD_TYPE="$BUILD_TYPE XMLHELP"
5437     AC_DEFINE(HAVE_FEATURE_XMLHELP)
5438     AC_MSG_RESULT([yes])
5439 else
5440     if test "$with_help" = yes; then
5441         add_warning "Building the XML help, but LO with disabled xmlhelp support. Generated help can't be accessed from this LO build!"
5442     fi
5443     AC_MSG_RESULT([no])
5446 dnl Test whether to integrate helppacks into the product's installer
5447 AC_MSG_CHECKING([for helppack integration])
5448 if test -z "$WITH_HELPPACKS" -o "$with_helppack_integration" = no; then
5449     AC_MSG_RESULT([no integration])
5450 else
5451     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
5452     AC_MSG_RESULT([integration])
5455 AC_SUBST([ENABLE_HTMLHELP])
5456 AC_SUBST([HELP_OMINDEX_PAGE])
5457 AC_SUBST([HELP_ONLINE])
5458 # WITH_HELPPACKS is used only in configure
5460 dnl ===================================================================
5461 dnl Set up a different compiler to produce tools to run on the build
5462 dnl machine when doing cross-compilation
5463 dnl ===================================================================
5465 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5466 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5467 if test "$cross_compiling" = "yes"; then
5468     AC_MSG_CHECKING([for BUILD platform configuration])
5469     echo
5470     rm -rf CONF-FOR-BUILD config_build.mk
5471     mkdir CONF-FOR-BUILD
5472     # Here must be listed all files needed when running the configure script. In particular, also
5473     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5474     # keep them in the same order as there.
5475     (cd $SRC_ROOT && tar cf - \
5476         config.guess \
5477         bin/get_config_variables \
5478         solenv/bin/getcompver.awk \
5479         solenv/inc/langlist.mk \
5480         download.lst \
5481         config_host.mk.in \
5482         config_host_lang.mk.in \
5483         Makefile.in \
5484         bin/bffvalidator.sh.in \
5485         bin/odfvalidator.sh.in \
5486         bin/officeotron.sh.in \
5487         hardened_runtime.xcent.in \
5488         instsetoo_native/util/openoffice.lst.in \
5489         config_host/*.in \
5490         sysui/desktop/macosx/Info.plist.in \
5491         .vscode/vs-code-template.code-workspace.in \
5492         ) \
5493     | (cd CONF-FOR-BUILD && tar xf -)
5494     cp configure CONF-FOR-BUILD
5495     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5496     (
5497     unset COM USING_X11 OS CPUNAME
5498     unset CC CXX SYSBASE CFLAGS
5499     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5500     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5501     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5502     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5503     if test -n "$CC_FOR_BUILD"; then
5504         export CC="$CC_FOR_BUILD"
5505         CC_BASE=`first_arg_basename "$CC"`
5506     fi
5507     if test -n "$CXX_FOR_BUILD"; then
5508         export CXX="$CXX_FOR_BUILD"
5509         CXX_BASE=`first_arg_basename "$CXX"`
5510     fi
5511     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5512     cd CONF-FOR-BUILD
5514     # Handle host configuration, which affects the cross-toolset too
5515     sub_conf_opts=""
5516     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5517     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5518     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5519     if test -n "$ENABLE_JAVA"; then
5520         case "$_os" in
5521         iOS) sub_conf_opts="$sub_conf_opts --without-java" ;; # force it off, like it used to be
5522         Android)
5523             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5524             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5525             ;;
5526         *)
5527             if test -z "$with_jdk_home"; then
5528                 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.])
5529             fi
5530             ;;
5531         esac
5532     else
5533         sub_conf_opts="$sub_conf_opts --without-java"
5534     fi
5535     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5536     test "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" && sub_conf_opts="$sub_conf_opts --with-system-icu"
5537     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no --disable-database-connectivity"
5538     test -n "$with_help" -a "$with_help" != "no" && sub_conf_opts="$sub_conf_opts --with-help=$with_help"
5539     test "$enable_extensions" = yes || sub_conf_opts="$sub_conf_opts --disable-extensions"
5540     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5542     # Don't bother having configure look for stuff not needed for the build platform anyway
5543     sub_conf_defaults=" \
5544         --build="$build_alias" \
5545         --disable-cairo-canvas \
5546         --disable-cups \
5547         --disable-firebird-sdbc \
5548         --disable-gpgmepp \
5549         --disable-gstreamer-1-0 \
5550         --disable-gtk3 \
5551         --disable-gtk4 \
5552         --disable-mariadb-sdbc \
5553         --disable-nss \
5554         --disable-online-update \
5555         --disable-opencl \
5556         --disable-pdfimport \
5557         --disable-postgresql-sdbc \
5558         --disable-skia \
5559         --enable-icecream="$enable_icecream" \
5560         --without-doxygen \
5561         --without-webdav \
5562         --with-parallelism="$with_parallelism" \
5563         --with-theme="$with_theme" \
5564         --with-tls=openssl \
5566     echo "    Running CONF-FOR-BUILD/configure" $sub_conf_defaults $sub_conf_opts $with_build_platform_configure_options --srcdir=$srcdir
5567     ./configure \
5568         $sub_conf_defaults \
5569         $sub_conf_opts \
5570         $with_build_platform_configure_options \
5571         --srcdir=$srcdir \
5572         2>&1 | sed -e 's/^/    /'
5573     if test [${PIPESTATUS[0]}] -ne 0; then
5574         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5575     fi
5577     # filter permitted build targets
5578     PERMITTED_BUILD_TARGETS="
5579         AVMEDIA
5580         BOOST
5581         CAIRO
5582         CLUCENE
5583         CUCKOO
5584         CURL
5585         DBCONNECTIVITY
5586         DESKTOP
5587         DYNLOADING
5588         EPOXY
5589         EXPAT
5590         GLM
5591         GRAPHITE
5592         HARFBUZZ
5593         HELPTOOLS
5594         ICU
5595         LCMS2
5596         LIBJPEG_TURBO
5597         LIBLANGTAG
5598         LibO
5599         LIBFFI
5600         LIBPN
5601         LIBXML2
5602         LIBXSLT
5603         MDDS
5604         NATIVE
5605         OPENSSL
5606         ORCUS
5607         PYTHON
5608         SCRIPTING
5609         ZLIB
5611     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5612     # newlined lists, to use grep as a filter
5613     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5614     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5615     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5616     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5618     cp config_host.mk ../config_build.mk
5619     cp config_host_lang.mk ../config_build_lang.mk
5620     mv config.log ../config.Build.log
5621     mkdir -p ../config_build
5622     mv config_host/*.h ../config_build
5623     test -f "$WARNINGS_FILE" && mv "$WARNINGS_FILE" "../$WARNINGS_FILE_FOR_BUILD"
5625     # all these will get a _FOR_BUILD postfix
5626     DIRECT_FOR_BUILD_SETTINGS="
5627         CC
5628         CPPU_ENV
5629         CXX
5630         ILIB
5631         JAVA_HOME
5632         JAVAIFLAGS
5633         JDK
5634         LIBO_BIN_FOLDER
5635         LIBO_LIB_FOLDER
5636         LIBO_URE_LIB_FOLDER
5637         LIBO_URE_MISC_FOLDER
5638         OS
5639         SDKDIRNAME
5640         SYSTEM_LIBXML
5641         SYSTEM_LIBXSLT
5643     # these overwrite host config with build config
5644     OVERWRITING_SETTINGS="
5645         ANT
5646         ANT_HOME
5647         ANT_LIB
5648         HSQLDB_USE_JDBC_4_1
5649         JAVA_CLASSPATH_NOT_SET
5650         JAVA_SOURCE_VER
5651         JAVA_TARGET_VER
5652         JAVACFLAGS
5653         JAVACOMPILER
5654         JAVADOC
5655         JAVADOCISGJDOC
5657     # these need some special handling
5658     EXTRA_HANDLED_SETTINGS="
5659         INSTDIR
5660         INSTROOT
5661         PATH
5662         WORKDIR
5664     OLD_PATH=$PATH
5665     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
5666     BUILD_PATH=$PATH
5667     PATH=$OLD_PATH
5669     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
5670     echo "$line" >>build-config
5672     for V in $DIRECT_FOR_BUILD_SETTINGS; do
5673         VV='$'$V
5674         VV=`eval "echo $VV"`
5675         if test -n "$VV"; then
5676             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
5677             echo "$line" >>build-config
5678         fi
5679     done
5681     for V in $OVERWRITING_SETTINGS; do
5682         VV='$'$V
5683         VV=`eval "echo $VV"`
5684         if test -n "$VV"; then
5685             line=${V}='${'${V}:-$VV'}'
5686             echo "$line" >>build-config
5687         fi
5688     done
5690     for V in INSTDIR INSTROOT WORKDIR; do
5691         VV='$'$V
5692         VV=`eval "echo $VV"`
5693         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
5694         if test -n "$VV"; then
5695             line="${V}_FOR_BUILD='$VV'"
5696             echo "$line" >>build-config
5697         fi
5698     done
5700     )
5701     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
5702     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])
5703     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
5704              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
5706     eval `cat CONF-FOR-BUILD/build-config`
5708     AC_MSG_RESULT([checking for BUILD platform configuration... done])
5710     rm -rf CONF-FOR-BUILD
5711 else
5712     OS_FOR_BUILD="$OS"
5713     CC_FOR_BUILD="$CC"
5714     CPPU_ENV_FOR_BUILD="$CPPU_ENV"
5715     CXX_FOR_BUILD="$CXX"
5716     INSTDIR_FOR_BUILD="$INSTDIR"
5717     INSTROOT_FOR_BUILD="$INSTROOT"
5718     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
5719     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
5720     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
5721     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
5722     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
5723     WORKDIR_FOR_BUILD="$WORKDIR"
5725 AC_SUBST(OS_FOR_BUILD)
5726 AC_SUBST(INSTDIR_FOR_BUILD)
5727 AC_SUBST(INSTROOT_FOR_BUILD)
5728 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
5729 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
5730 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
5731 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
5732 AC_SUBST(SDKDIRNAME_FOR_BUILD)
5733 AC_SUBST(WORKDIR_FOR_BUILD)
5734 AC_SUBST(CC_FOR_BUILD)
5735 AC_SUBST(CXX_FOR_BUILD)
5736 AC_SUBST(CPPU_ENV_FOR_BUILD)
5738 dnl ===================================================================
5739 dnl Check for syslog header
5740 dnl ===================================================================
5741 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
5743 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
5744 dnl ===================================================================
5745 AC_MSG_CHECKING([whether to turn warnings to errors])
5746 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
5747     ENABLE_WERROR="TRUE"
5748     PYTHONWARNINGS="error"
5749     AC_MSG_RESULT([yes])
5750 else
5751     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
5752         ENABLE_WERROR="TRUE"
5753         PYTHONWARNINGS="error"
5754         AC_MSG_RESULT([yes])
5755     else
5756         AC_MSG_RESULT([no])
5757     fi
5759 AC_SUBST(ENABLE_WERROR)
5760 AC_SUBST(PYTHONWARNINGS)
5762 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
5763 dnl ===================================================================
5764 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
5765 if test -z "$enable_assert_always_abort"; then
5766    if test "$ENABLE_DEBUG" = TRUE; then
5767        enable_assert_always_abort=yes
5768    else
5769        enable_assert_always_abort=no
5770    fi
5772 if test "$enable_assert_always_abort" = "yes"; then
5773     ASSERT_ALWAYS_ABORT="TRUE"
5774     AC_MSG_RESULT([yes])
5775 else
5776     ASSERT_ALWAYS_ABORT="FALSE"
5777     AC_MSG_RESULT([no])
5779 AC_SUBST(ASSERT_ALWAYS_ABORT)
5781 # Determine whether to use ooenv for the instdir installation
5782 # ===================================================================
5783 if test $_os != "WINNT" -a $_os != "Darwin"; then
5784     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
5785     if test -z "$enable_ooenv"; then
5786         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5787             enable_ooenv=yes
5788         else
5789             enable_ooenv=no
5790         fi
5791     fi
5792     if test "$enable_ooenv" = "no"; then
5793         AC_MSG_RESULT([no])
5794     else
5795         ENABLE_OOENV="TRUE"
5796         AC_MSG_RESULT([yes])
5797     fi
5799 AC_SUBST(ENABLE_OOENV)
5801 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
5802     if test "$enable_qt5" = "no"; then
5803         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
5804     else
5805         enable_qt5=yes
5806     fi
5809 dnl ===================================================================
5810 dnl check for cups support
5811 dnl ===================================================================
5813 AC_MSG_CHECKING([whether to enable CUPS support])
5814 if test "$test_cups" = yes -a "$enable_cups" != no; then
5815     ENABLE_CUPS=TRUE
5816     AC_MSG_RESULT([yes])
5818     AC_MSG_CHECKING([whether cups support is present])
5819     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
5820     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
5821     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
5822         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
5823     fi
5824 else
5825     AC_MSG_RESULT([no])
5828 AC_SUBST(ENABLE_CUPS)
5830 # fontconfig checks
5831 if test "$using_freetype_fontconfig" = yes; then
5832     AC_MSG_CHECKING([which fontconfig to use])
5834 if test "$using_freetype_fontconfig" = yes -a "$test_system_fontconfig" != no; then
5835     AC_MSG_RESULT([external])
5836     PKG_CHECK_MODULES([FONTCONFIG], [fontconfig >= 2.4.1])
5837     SYSTEM_FONTCONFIG=TRUE
5838     FilterLibs "${FONTCONFIG_LIBS}"
5839     FONTCONFIG_LIBS="${filteredlibs}"
5840 elif test "$using_freetype_fontconfig" = yes; then
5841     AC_MSG_RESULT([internal])
5842     BUILD_TYPE="$BUILD_TYPE FONTCONFIG"
5844 AC_SUBST(FONTCONFIG_CFLAGS)
5845 AC_SUBST(FONTCONFIG_LIBS)
5846 AC_SUBST([SYSTEM_FONTCONFIG])
5848 dnl whether to find & fetch external tarballs?
5849 dnl ===================================================================
5850 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
5851    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
5852        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
5853    else
5854        TARFILE_LOCATION="$LODE_HOME/ext_tar"
5855    fi
5857 if test -z "$TARFILE_LOCATION"; then
5858     if test -d "$SRC_ROOT/src" ; then
5859         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
5860         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
5861     fi
5862     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
5863 else
5864     AbsolutePath "$TARFILE_LOCATION"
5865     PathFormat "${absolute_path}"
5866     TARFILE_LOCATION="${formatted_path}"
5868 AC_SUBST(TARFILE_LOCATION)
5870 AC_MSG_CHECKING([whether we want to fetch tarballs])
5871 if test "$enable_fetch_external" != "no"; then
5872     if test "$with_all_tarballs" = "yes"; then
5873         AC_MSG_RESULT([yes, all of them])
5874         DO_FETCH_TARBALLS="ALL"
5875     else
5876         AC_MSG_RESULT([yes, if we use them])
5877         DO_FETCH_TARBALLS="TRUE"
5878     fi
5879 else
5880     AC_MSG_RESULT([no])
5881     DO_FETCH_TARBALLS=
5883 AC_SUBST(DO_FETCH_TARBALLS)
5885 dnl Test whether to include MySpell dictionaries
5886 dnl ===================================================================
5887 AC_MSG_CHECKING([whether to include MySpell dictionaries])
5888 if test "$with_myspell_dicts" = "yes"; then
5889     AC_MSG_RESULT([yes])
5890     WITH_MYSPELL_DICTS=TRUE
5891     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
5892     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
5893 else
5894     AC_MSG_RESULT([no])
5895     WITH_MYSPELL_DICTS=
5897 AC_SUBST(WITH_MYSPELL_DICTS)
5899 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
5900 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
5901     if test "$with_system_dicts" = yes; then
5902         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
5903     fi
5904     with_system_dicts=no
5907 AC_MSG_CHECKING([whether to use dicts from external paths])
5908 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
5909     AC_MSG_RESULT([yes])
5910     SYSTEM_DICTS=TRUE
5911     AC_MSG_CHECKING([for spelling dictionary directory])
5912     if test -n "$with_external_dict_dir"; then
5913         DICT_SYSTEM_DIR=file://$with_external_dict_dir
5914     else
5915         DICT_SYSTEM_DIR=file:///usr/share/hunspell
5916         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
5917             DICT_SYSTEM_DIR=file:///usr/share/myspell
5918         fi
5919     fi
5920     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
5921     AC_MSG_CHECKING([for hyphenation patterns directory])
5922     if test -n "$with_external_hyph_dir"; then
5923         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
5924     else
5925         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
5926     fi
5927     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
5928     AC_MSG_CHECKING([for thesaurus directory])
5929     if test -n "$with_external_thes_dir"; then
5930         THES_SYSTEM_DIR=file://$with_external_thes_dir
5931     else
5932         THES_SYSTEM_DIR=file:///usr/share/mythes
5933     fi
5934     AC_MSG_RESULT([$THES_SYSTEM_DIR])
5935 else
5936     AC_MSG_RESULT([no])
5937     SYSTEM_DICTS=
5939 AC_SUBST(SYSTEM_DICTS)
5940 AC_SUBST(DICT_SYSTEM_DIR)
5941 AC_SUBST(HYPH_SYSTEM_DIR)
5942 AC_SUBST(THES_SYSTEM_DIR)
5944 dnl ===================================================================
5945 dnl Precompiled headers.
5946 ENABLE_PCH=""
5947 AC_MSG_CHECKING([whether to enable pch feature])
5948 if test -z "$enable_pch"; then
5949     if test "$_os" = "WINNT"; then
5950         # Enabled by default on Windows.
5951         enable_pch=yes
5952         # never use sccache on auto-enabled PCH builds, except if requested explicitely
5953         if test -z "$enable_ccache" -a "$SCCACHE"; then
5954             CCACHE=""
5955         fi
5956     else
5957         enable_pch=no
5958     fi
5960 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
5961     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
5963 if test "$enable_pch" = "system"; then
5964     ENABLE_PCH="1"
5965     AC_MSG_RESULT([yes (system headers)])
5966 elif test "$enable_pch" = "base"; then
5967     ENABLE_PCH="2"
5968     AC_MSG_RESULT([yes (system and base headers)])
5969 elif test "$enable_pch" = "normal"; then
5970     ENABLE_PCH="3"
5971     AC_MSG_RESULT([yes (normal)])
5972 elif test "$enable_pch" = "full"; then
5973     ENABLE_PCH="4"
5974     AC_MSG_RESULT([yes (full)])
5975 elif test "$enable_pch" = "yes"; then
5976     # Pick a suitable default.
5977     if test "$GCC" = "yes"; then
5978         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
5979         # while making the PCHs larger and rebuilds more likely.
5980         ENABLE_PCH="2"
5981         AC_MSG_RESULT([yes (system and base headers)])
5982     else
5983         # With MSVC the highest level makes a significant difference,
5984         # and it was the default when there used to be no PCH levels.
5985         ENABLE_PCH="4"
5986         AC_MSG_RESULT([yes (full)])
5987     fi
5988 elif test "$enable_pch" = "no"; then
5989     AC_MSG_RESULT([no])
5990 else
5991     AC_MSG_ERROR([Unknown value for --enable-pch])
5993 AC_SUBST(ENABLE_PCH)
5994 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
5995 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
5996     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
5997     if test "$CCACHE_BIN" != "not found"; then
5998         AC_MSG_CHECKING([ccache version])
5999         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
6000         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6001         AC_MSG_RESULT([$CCACHE_VERSION])
6002         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
6003         if test "$CCACHE_NUMVER" -gt "030701"; then
6004             AC_MSG_RESULT([yes])
6005         else
6006             AC_MSG_RESULT([no (not newer than 3.7.1)])
6007             CCACHE_DEPEND_MODE=
6008         fi
6009     fi
6012 PCH_INSTANTIATE_TEMPLATES=
6013 if test -n "$ENABLE_PCH"; then
6014     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
6015     save_CFLAGS=$CFLAGS
6016     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
6017     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
6018     CFLAGS=$save_CFLAGS
6019     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
6020         AC_MSG_RESULT(yes)
6021     else
6022         AC_MSG_RESULT(no)
6023     fi
6025 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
6027 BUILDING_PCH_WITH_OBJ=
6028 if test -n "$ENABLE_PCH"; then
6029     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
6030     save_CFLAGS=$CFLAGS
6031     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
6032     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
6033     CFLAGS=$save_CFLAGS
6034     if test -n "$BUILDING_PCH_WITH_OBJ"; then
6035         AC_MSG_RESULT(yes)
6036     else
6037         AC_MSG_RESULT(no)
6038     fi
6040 AC_SUBST(BUILDING_PCH_WITH_OBJ)
6042 PCH_CODEGEN=
6043 PCH_NO_CODEGEN=
6044 fpch_prefix=
6045 if test "$COM" = MSC; then
6046     fpch_prefix="-Xclang "
6048 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6049     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-codegen])
6050     save_CFLAGS=$CFLAGS
6051     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-codegen"
6052     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6053         [
6054         PCH_CODEGEN="${fpch_prefix}-fpch-codegen"
6055         PCH_NO_CODEGEN="${fpch_prefix}-fno-pch-codegen"
6056         ],[])
6057     CFLAGS=$save_CFLAGS
6058     if test -n "$PCH_CODEGEN"; then
6059         AC_MSG_RESULT(yes)
6060     else
6061         AC_MSG_RESULT(no)
6062     fi
6064 AC_SUBST(PCH_CODEGEN)
6065 AC_SUBST(PCH_NO_CODEGEN)
6066 PCH_DEBUGINFO=
6067 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6068     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-debuginfo])
6069     save_CFLAGS=$CFLAGS
6070     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-debuginfo"
6071     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="${fpch_prefix}-fpch-debuginfo" ],[])
6072     CFLAGS=$save_CFLAGS
6073     if test -n "$PCH_DEBUGINFO"; then
6074         AC_MSG_RESULT(yes)
6075     else
6076         AC_MSG_RESULT(no)
6077     fi
6079 AC_SUBST(PCH_DEBUGINFO)
6081 TAB=`printf '\t'`
6083 AC_MSG_CHECKING([the GNU Make version])
6084 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
6085 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6086 if test "$_make_longver" -ge "038200"; then
6087     AC_MSG_RESULT([$GNUMAKE $_make_version])
6089 elif test "$_make_longver" -ge "038100"; then
6090     if test "$build_os" = "cygwin"; then
6091         AC_MSG_ERROR([failed ($GNUMAKE version >= 3.82 needed])
6092     fi
6093     AC_MSG_RESULT([$GNUMAKE $_make_version])
6095     dnl ===================================================================
6096     dnl Search all the common names for sha1sum
6097     dnl ===================================================================
6098     AC_CHECK_PROGS(SHA1SUM, sha1sum sha1 shasum openssl)
6099     if test -z "$SHA1SUM"; then
6100         AC_MSG_ERROR([install the appropriate SHA-1 checksumming program for this OS])
6101     elif test "$SHA1SUM" = "openssl"; then
6102         SHA1SUM="openssl sha1"
6103     fi
6104     AC_MSG_CHECKING([for GNU Make bug 20033])
6105     TESTGMAKEBUG20033=`mktemp -d tmp.XXXXXX`
6106     $SED -e "s/<TAB>/$TAB/g" > $TESTGMAKEBUG20033/Makefile << EOF
6107 A := \$(wildcard *.a)
6109 .PHONY: all
6110 all: \$(A:.a=.b)
6111 <TAB>@echo survived bug20033.
6113 .PHONY: setup
6114 setup:
6115 <TAB>@touch 1.a 2.a 3.a 4.a 5.a 6.a
6117 define d1
6118 @echo lala \$(1)
6119 @sleep 1
6120 endef
6122 define d2
6123 @echo tyty \$(1)
6124 @sleep 1
6125 endef
6127 %.b : %.a
6128 <TAB>\$(eval CHECKSUM := \$(word 1,\$(shell cat \$^ | $SHA1SUM))) \$(if \$(wildcard \$(CACHEDIR)/\$(CHECKSUM)),\
6129 <TAB>\$(call d1,\$(CHECKSUM)),\
6130 <TAB>\$(call d2,\$(CHECKSUM)))
6132     if test -z "`(cd $TESTGMAKEBUG20033 && $GNUMAKE setup && $GNUMAKE -j)|grep survived`"; then
6133         no_parallelism_make="YES"
6134         AC_MSG_RESULT([yes, disable parallelism])
6135     else
6136         AC_MSG_RESULT([no, keep parallelism enabled])
6137     fi
6138     rm -rf $TESTGMAKEBUG20033
6139 else
6140     AC_MSG_ERROR([failed ($GNUMAKE version >= 3.81 needed])
6143 # find if gnumake support file function
6144 AC_MSG_CHECKING([whether GNU Make supports the 'file' function])
6145 TESTGMAKEFILEFUNC="`mktemp -d -t tst.XXXXXX`"
6146 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6147     TESTGMAKEFILEFUNC=`cygpath -m $TESTGMAKEFILEFUNC`
6149 $SED -e "s/<TAB>/$TAB/" > $TESTGMAKEFILEFUNC/Makefile << EOF
6150 \$(file >test.txt,Success )
6152 .PHONY: all
6153 all:
6154 <TAB>@cat test.txt
6157 $GNUMAKE -C $TESTGMAKEFILEFUNC 2>/dev/null 1>&2
6158 if test -f $TESTGMAKEFILEFUNC/test.txt; then
6159     HAVE_GNUMAKE_FILE_FUNC=TRUE
6160     AC_MSG_RESULT([yes])
6161 else
6162     AC_MSG_RESULT([no])
6164 rm -rf $TESTGMAKEFILEFUNC
6165 AC_SUBST(HAVE_GNUMAKE_FILE_FUNC)
6167 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6168 STALE_MAKE=
6169 if test "$_make_ver_check" = ""; then
6170    STALE_MAKE=TRUE
6173 HAVE_LD_HASH_STYLE=FALSE
6174 WITH_LINKER_HASH_STYLE=
6175 AC_MSG_CHECKING([for --hash-style gcc linker support])
6176 if test "$GCC" = "yes"; then
6177     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6178         hash_styles="gnu sysv"
6179     elif test "$with_linker_hash_style" = "no"; then
6180         hash_styles=
6181     else
6182         hash_styles="$with_linker_hash_style"
6183     fi
6185     for hash_style in $hash_styles; do
6186         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6187         hash_style_ldflags_save=$LDFLAGS
6188         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6190         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6191             [
6192 #include <stdio.h>
6193             ],[
6194 printf ("");
6195             ])],
6196             [
6197                   HAVE_LD_HASH_STYLE=TRUE
6198                   WITH_LINKER_HASH_STYLE=$hash_style
6199             ],
6200             [HAVE_LD_HASH_STYLE=FALSE],
6201             [HAVE_LD_HASH_STYLE=FALSE])
6202         LDFLAGS=$hash_style_ldflags_save
6203     done
6205     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6206         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6207     else
6208         AC_MSG_RESULT( no )
6209     fi
6210     LDFLAGS=$hash_style_ldflags_save
6211 else
6212     AC_MSG_RESULT( no )
6214 AC_SUBST(HAVE_LD_HASH_STYLE)
6215 AC_SUBST(WITH_LINKER_HASH_STYLE)
6217 dnl ===================================================================
6218 dnl Check whether there's a Perl version available.
6219 dnl ===================================================================
6220 if test -z "$with_perl_home"; then
6221     AC_PATH_PROG(PERL, perl)
6222 else
6223     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6224     _perl_path="$with_perl_home/bin/perl"
6225     if test -x "$_perl_path"; then
6226         PERL=$_perl_path
6227     else
6228         AC_MSG_ERROR([$_perl_path not found])
6229     fi
6232 dnl ===================================================================
6233 dnl Testing for Perl version 5 or greater.
6234 dnl $] is the Perl version variable, it is returned as an integer
6235 dnl ===================================================================
6236 if test "$PERL"; then
6237     AC_MSG_CHECKING([the Perl version])
6238     ${PERL} -e "exit($]);"
6239     _perl_version=$?
6240     if test "$_perl_version" -lt 5; then
6241         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6242     fi
6243     AC_MSG_RESULT([Perl $_perl_version])
6244 else
6245     AC_MSG_ERROR([Perl not found, install Perl 5])
6248 dnl ===================================================================
6249 dnl Testing for required Perl modules
6250 dnl ===================================================================
6252 AC_MSG_CHECKING([for required Perl modules])
6253 perl_use_string="use Cwd ; use Digest::MD5"
6254 if test "$_os" = "WINNT"; then
6255     if test -n "$PKGFORMAT"; then
6256         for i in $PKGFORMAT; do
6257             case "$i" in
6258             msi)
6259                 # for getting fonts versions to use in MSI
6260                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6261                 ;;
6262             esac
6263         done
6264     fi
6266 if test "$with_system_hsqldb" = "yes"; then
6267     perl_use_string="$perl_use_string ; use Archive::Zip"
6269 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6270     # OpenSSL needs that to build
6271     perl_use_string="$perl_use_string ; use FindBin"
6273 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6274     AC_MSG_RESULT([all modules found])
6275 else
6276     AC_MSG_RESULT([failed to find some modules])
6277     # Find out which modules are missing.
6278     for i in $perl_use_string; do
6279         if test "$i" != "use" -a "$i" != ";"; then
6280             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6281                 missing_perl_modules="$missing_perl_modules $i"
6282             fi
6283         fi
6284     done
6285     AC_MSG_ERROR([
6286     The missing Perl modules are: $missing_perl_modules
6287     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6290 dnl ===================================================================
6291 dnl Check for pkg-config
6292 dnl ===================================================================
6293 if test "$_os" != "WINNT"; then
6294     PKG_PROG_PKG_CONFIG
6297 if test "$_os" != "WINNT"; then
6299     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6300     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6301     # explicitly. Or put /path/to/compiler in PATH yourself.
6303     # Use wrappers for LTO
6304     if test "$ENABLE_LTO" = "TRUE" -a "$COM_IS_CLANG" != "TRUE"; then
6305         AC_CHECK_TOOL(AR,gcc-ar)
6306         AC_CHECK_TOOL(NM,gcc-nm)
6307         AC_CHECK_TOOL(RANLIB,gcc-ranlib)
6308     else
6309         AC_CHECK_TOOL(AR,ar)
6310         AC_CHECK_TOOL(NM,nm)
6311         AC_CHECK_TOOL(RANLIB,ranlib)
6312     fi
6313     AC_CHECK_TOOL(OBJDUMP,objdump)
6314     AC_CHECK_TOOL(READELF,readelf)
6315     AC_CHECK_TOOL(STRIP,strip)
6317 AC_SUBST(AR)
6318 AC_SUBST(LD)
6319 AC_SUBST(NM)
6320 AC_SUBST(OBJDUMP)
6321 AC_SUBST(PKG_CONFIG)
6322 AC_SUBST(PKG_CONFIG_PATH)
6323 AC_SUBST(PKG_CONFIG_LIBDIR)
6324 AC_SUBST(RANLIB)
6325 AC_SUBST(READELF)
6326 AC_SUBST(STRIP)
6328 dnl ===================================================================
6329 dnl pkg-config checks on macOS
6330 dnl ===================================================================
6332 if test $_os = Darwin; then
6333     AC_MSG_CHECKING([for bogus pkg-config])
6334     if test -n "$PKG_CONFIG"; then
6335         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6336             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6337         else
6338             if test "$enable_bogus_pkg_config" = "yes"; then
6339                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6340             else
6341                 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.])
6342             fi
6343         fi
6344     else
6345         AC_MSG_RESULT([no, good])
6346     fi
6349 find_csc()
6351     # Return value: $csctest
6353     unset csctest
6355     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client/InstallPath"
6356     if test -n "$regvalue"; then
6357         csctest=$regvalue
6358         return
6359     fi
6362 find_al()
6364     # Return value: $altest
6366     unset altest
6368     # We need this check to detect 4.6.1 or above.
6369     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6370         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools/InstallationFolder"
6371         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6372             altest=$regvalue
6373             return
6374         fi
6375     done
6377     for x in `ls /proc/registry32/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft\ SDKs/Windows`; do
6378         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools/InstallationFolder"
6379         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6380             altest=$regvalue
6381             return
6382         fi
6383     done
6386 find_dotnetsdk46()
6388     unset frametest
6390     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6; do
6391         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder"
6392         if test -n "$regvalue"; then
6393             frametest=$regvalue
6394             return
6395         fi
6396     done
6399 find_winsdk_version()
6401     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6402     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6404     unset winsdktest winsdkbinsubdir winsdklibsubdir
6406     case "$1" in
6407     8.0|8.0A)
6408         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
6409         if test -n "$regvalue"; then
6410             winsdktest=$regvalue
6411             winsdklibsubdir=win8
6412             return
6413         fi
6414         ;;
6415     8.1|8.1A)
6416         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot81"
6417         if test -n "$regvalue"; then
6418             winsdktest=$regvalue
6419             winsdklibsubdir=winv6.3
6420             return
6421         fi
6422         ;;
6423     10.0)
6424         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/InstallationFolder"
6425         if test -n "$regvalue"; then
6426             winsdktest=$regvalue
6427             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion"
6428             if test -n "$regvalue"; then
6429                 winsdkbinsubdir="$regvalue".0
6430                 winsdklibsubdir=$winsdkbinsubdir
6431                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6432                 local tmppath_unix=$(cygpath -u "$tmppath")
6433                 # test exist the SDK path
6434                 if test -d "$tmppath_unix"; then
6435                    # when path is convertible to a short path then path is okay
6436                    cygpath -d "$tmppath" >/dev/null 2>&1
6437                    if test $? -ne 0; then
6438                       AC_MSG_ERROR([Windows SDK doesn't have a 8.3 name, see NtfsDisable8dot3NameCreation])
6439                    fi
6440                 else
6441                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6442                 fi
6443             fi
6444             return
6445         fi
6446         ;;
6447     esac
6450 find_winsdk()
6452     # Return value: From find_winsdk_version
6454     unset winsdktest
6456     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6457         find_winsdk_version $ver
6458         if test -n "$winsdktest"; then
6459             return
6460         fi
6461     done
6464 find_msms()
6466     # Return value: $msmdir
6468     AC_MSG_CHECKING([for MSVC merge modules directory])
6469     local my_msm_files
6470     local my_msm_dir
6472     dnl Order my_msm_files in increasing order. Then check the directories returned
6473     dnl by ls in an inner loop; assuming they are also ordered in increasing order,
6474     dnl the result will be the highest MSM version found in the highest directory.
6476     case "$VCVER" in
6477         16.0 | 17.0)
6478         my_msm_files="Microsoft_VC141_CRT_x86.msm Microsoft_VC142_CRT_x86.msm ${my_msm_files}"
6479         ;;
6480     esac
6481     for f in $my_msm_files; do
6482         echo "$as_me:$LINENO: searching for $f" >&5
6483     done
6485     msmdir=
6486     case "$VCVER" in
6487     16.0 | 17.0)
6488         for f in ${my_msm_files}; do
6489             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6490                 my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6491                 echo "$as_me:$LINENO: looking for $my_msm_dir${f}])" >&5
6492                 if test -e "$my_msm_dir${f}"; then
6493                     msmdir=$my_msm_dir
6494                 fi
6495             done
6496         done
6497         ;;
6498     esac
6500     if test -n "$msmdir"; then
6501         msmdir=`cygpath -m "$msmdir"`
6502         AC_MSG_RESULT([$msmdir])
6503     else
6504         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6505             AC_MSG_FAILURE([not found])
6506         else
6507             AC_MSG_WARN([not found (check config.log)])
6508             add_warning "MSM none of ${my_msm_files} found"
6509         fi
6510     fi
6513 find_msvc_x64_dlls()
6515     # Return value: $msvcdllpath, $msvcdlls
6517     AC_MSG_CHECKING([for MSVC x64 DLL path])
6519     dnl Order crtver in increasing order. Then check the directories returned by
6520     dnl ls in an inner loop; assuming they are also ordered in increasing order,
6521     dnl the result will be the highest CRT version found in the highest directory.
6523     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6524     case "$VCVER" in
6525     16.0 | 17.0)
6526         for crtver in 141 142 143; do
6527             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6528                 echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT" >&5
6529                 if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"; then
6530                     msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"
6531                 fi
6532             done
6533         done
6534         ;;
6535     esac
6536     AC_MSG_RESULT([$msvcdllpath])
6537     AC_MSG_CHECKING([for MSVC x64 DLLs])
6538     msvcdlls="msvcp140.dll vcruntime140.dll"
6539     for dll in $msvcdlls; do
6540         if ! test -f "$msvcdllpath/$dll"; then
6541             AC_MSG_FAILURE([missing $dll])
6542         fi
6543     done
6544     AC_MSG_RESULT([found all ($msvcdlls)])
6547 dnl =========================================
6548 dnl Check for the Windows  SDK.
6549 dnl =========================================
6550 if test "$_os" = "WINNT"; then
6551     AC_MSG_CHECKING([for Windows SDK])
6552     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6553         find_winsdk
6554         WINDOWS_SDK_HOME=$winsdktest
6556         # normalize if found
6557         if test -n "$WINDOWS_SDK_HOME"; then
6558             WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
6559             WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
6560         fi
6562         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6563     fi
6565     if test -n "$WINDOWS_SDK_HOME"; then
6566         # Remove a possible trailing backslash
6567         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6569         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6570              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6571              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6572             have_windows_sdk_headers=yes
6573         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6574              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6575              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6576             have_windows_sdk_headers=yes
6577         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6578              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6579              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6580             have_windows_sdk_headers=yes
6581         else
6582             have_windows_sdk_headers=no
6583         fi
6585         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6586             have_windows_sdk_libs=yes
6587         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6588             have_windows_sdk_libs=yes
6589         else
6590             have_windows_sdk_libs=no
6591         fi
6593         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6594             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6595 the  Windows SDK are installed.])
6596         fi
6597     fi
6599     if test -z "$WINDOWS_SDK_HOME"; then
6600         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6601     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6602         WINDOWS_SDK_VERSION=80
6603         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6604     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6605         WINDOWS_SDK_VERSION=81
6606         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6607     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6608         WINDOWS_SDK_VERSION=10
6609         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6610     else
6611         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6612     fi
6613     PathFormat "$WINDOWS_SDK_HOME"
6614     WINDOWS_SDK_HOME="$formatted_path"
6615     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6616     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6617         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6618         if test -d "$WINDOWS_SDK_HOME/include/um"; then
6619             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6620         elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then
6621             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6622         fi
6623     fi
6625     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6626     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6627     dnl but not in v8.0), so allow this to be overridden with a
6628     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6629     dnl and configuration error if no WiLangId.vbs is found would arguably be
6630     dnl better, but I do not know under which conditions exactly it is needed by
6631     dnl msiglobal.pm:
6632     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6633         WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6634         WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6635         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6636             WINDOWS_SDK_WILANGID="${WINDOWS_SDK_HOME}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6637             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6638         fi
6639         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6640             WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6641             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6642         fi
6643         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6644             WINDOWS_SDK_WILANGID=$(cygpath -sm "C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs")
6645             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6646         fi
6647     fi
6648     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6649         if test -n "$with_package_format" -a "$with_package_format" != no; then
6650             for i in "$with_package_format"; do
6651                 if test "$i" = "msi"; then
6652                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6653                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6654                     fi
6655                 fi
6656             done
6657         fi
6658     fi
6660 AC_SUBST(WINDOWS_SDK_HOME)
6661 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6662 AC_SUBST(WINDOWS_SDK_VERSION)
6663 AC_SUBST(WINDOWS_SDK_WILANGID)
6665 if test "$build_os" = "cygwin"; then
6666     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6667     dnl dir, it also determines that dir's path w/o an arch segment if any,
6668     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6669     AC_MSG_CHECKING([for midl.exe])
6671     find_winsdk
6672     if test -n "$winsdkbinsubdir" \
6673         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6674     then
6675         MIDL_PATH=$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6676         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin/$winsdkbinsubdir
6677     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6678         MIDL_PATH=$winsdktest/Bin/$WIN_BUILD_ARCH
6679         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6680     elif test -f "$winsdktest/Bin/midl.exe"; then
6681         MIDL_PATH=$winsdktest/Bin
6682         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6683     fi
6684     if test ! -f "$MIDL_PATH/midl.exe"; then
6685         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6686     else
6687         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6688     fi
6690     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6691     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6693     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6694          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6695          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6696          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6697     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6698          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6699          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6700          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
6701     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
6702          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
6703          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6704          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
6705     else
6706         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
6707     fi
6709     dnl Check csc.exe
6710     AC_MSG_CHECKING([for csc.exe])
6711     find_csc
6712     if test -f "$csctest/csc.exe"; then
6713         CSC_PATH="$csctest"
6714     fi
6715     if test ! -f "$CSC_PATH/csc.exe"; then
6716         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
6717     else
6718         AC_MSG_RESULT([$CSC_PATH/csc.exe])
6719     fi
6721     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
6723     dnl Check al.exe
6724     AC_MSG_CHECKING([for al.exe])
6725     find_winsdk
6726     if test -n "$winsdkbinsubdir" \
6727         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
6728     then
6729         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
6730     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/al.exe"; then
6731         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
6732     elif test -f "$winsdktest/Bin/al.exe"; then
6733         AL_PATH="$winsdktest/Bin"
6734     fi
6736     if test -z "$AL_PATH"; then
6737         find_al
6738         if test -f "$altest/bin/al.exe"; then
6739             AL_PATH="$altest/bin"
6740         elif test -f "$altest/al.exe"; then
6741             AL_PATH="$altest"
6742         fi
6743     fi
6744     if test ! -f "$AL_PATH/al.exe"; then
6745         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
6746     else
6747         AC_MSG_RESULT([$AL_PATH/al.exe])
6748     fi
6750     AL_PATH=`win_short_path_for_make "$AL_PATH"`
6752     dnl Check mscoree.lib / .NET Framework dir
6753     AC_MSG_CHECKING(.NET Framework)
6754     find_dotnetsdk46
6755     PathFormat "$frametest"
6756     frametest="$formatted_path"
6757     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6758         DOTNET_FRAMEWORK_HOME="$frametest"
6759     else
6760         find_winsdk
6761         if test -f "$winsdktest/lib/mscoree.lib" -o -f "$winsdktest/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6762             DOTNET_FRAMEWORK_HOME="$winsdktest"
6763         fi
6764     fi
6765     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
6766         AC_MSG_ERROR([mscoree.lib not found])
6767     fi
6768     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
6770     PathFormat "$MIDL_PATH"
6771     MIDL_PATH="$formatted_path"
6773     PathFormat "$AL_PATH"
6774     AL_PATH="$formatted_path"
6776     PathFormat "$DOTNET_FRAMEWORK_HOME"
6777     DOTNET_FRAMEWORK_HOME="$formatted_path"
6779     PathFormat "$CSC_PATH"
6780     CSC_PATH="$formatted_path"
6783 dnl ===================================================================
6784 dnl Testing for C++ compiler and version...
6785 dnl ===================================================================
6787 if test "$_os" != "WINNT"; then
6788     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that
6789     save_CXXFLAGS=$CXXFLAGS
6790     AC_PROG_CXX
6791     CXXFLAGS=$save_CXXFLAGS
6792     if test -z "$CXX_BASE"; then
6793         CXX_BASE=`first_arg_basename "$CXX"`
6794     fi
6797 dnl check for GNU C++ compiler version
6798 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
6799     AC_MSG_CHECKING([the GNU C++ compiler version])
6801     _gpp_version=`$CXX -dumpversion`
6802     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
6804     if test "$_gpp_majmin" -lt "700"; then
6805         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
6806     else
6807         AC_MSG_RESULT([ok (g++ $_gpp_version)])
6808     fi
6810     dnl see https://code.google.com/p/android/issues/detail?id=41770
6811         glibcxx_threads=no
6812         AC_LANG_PUSH([C++])
6813         AC_REQUIRE_CPP
6814         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
6815         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
6816             #include <bits/c++config.h>]],[[
6817             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
6818             && !defined(_GLIBCXX__PTHREADS) \
6819             && !defined(_GLIBCXX_HAS_GTHREADS)
6820             choke me
6821             #endif
6822         ]])],[AC_MSG_RESULT([yes])
6823         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
6824         AC_LANG_POP([C++])
6825         if test $glibcxx_threads = yes; then
6826             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
6827         fi
6829 AC_SUBST(BOOST_CXXFLAGS)
6832 # prefx CXX with ccache if needed
6834 if test "$CCACHE" != ""; then
6835     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
6836     AC_LANG_PUSH([C++])
6837     save_CXXFLAGS=$CXXFLAGS
6838     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
6839     # msvc does not fail on unknown options, check stdout
6840     if test "$COM" = MSC; then
6841         CXXFLAGS="$CXXFLAGS -nologo"
6842     fi
6843     save_ac_cxx_werror_flag=$ac_cxx_werror_flag
6844     ac_cxx_werror_flag=yes
6845     dnl an empty program will do, we're checking the compiler flags
6846     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
6847                       [use_ccache=yes], [use_ccache=no])
6848     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
6849         AC_MSG_RESULT([yes])
6850     else
6851         CXX="$CCACHE $CXX"
6852         CXX_BASE="ccache $CXX_BASE"
6853         AC_MSG_RESULT([no])
6854     fi
6855     CXXFLAGS=$save_CXXFLAGS
6856     ac_cxx_werror_flag=$save_ac_cxx_werror_flag
6857     AC_LANG_POP([C++])
6860 dnl ===================================================================
6861 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
6862 dnl ===================================================================
6864 if test "$_os" != "WINNT"; then
6865     AC_PROG_CXXCPP
6867     dnl Check whether there's a C pre-processor.
6868     AC_PROG_CPP
6872 dnl ===================================================================
6873 dnl Find integral type sizes and alignments
6874 dnl ===================================================================
6876 if test "$_os" != "WINNT"; then
6878     AC_CHECK_SIZEOF(long)
6879     AC_CHECK_SIZEOF(short)
6880     AC_CHECK_SIZEOF(int)
6881     AC_CHECK_SIZEOF(long long)
6882     AC_CHECK_SIZEOF(double)
6883     AC_CHECK_SIZEOF(void*)
6884     AC_CHECK_SIZEOF(size_t)
6886     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
6887     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
6888     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
6889     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
6890     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
6891     SIZEOF_SIZE_T=$ac_cv_sizeof_size_t
6893     dnl Allow build without AC_CHECK_ALIGNOF, grrr
6894     m4_pattern_allow([AC_CHECK_ALIGNOF])
6895     m4_ifdef([AC_CHECK_ALIGNOF],
6896         [
6897             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
6898             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
6899             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
6900             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
6901         ],
6902         [
6903             case "$_os-$host_cpu" in
6904             Linux-i686)
6905                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6906                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6907                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
6908                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
6909                 ;;
6910             Linux-x86_64)
6911                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6912                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6913                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
6914                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
6915                 ;;
6916             *)
6917                 if test -z "$ac_cv_alignof_short" -o \
6918                         -z "$ac_cv_alignof_int" -o \
6919                         -z "$ac_cv_alignof_long" -o \
6920                         -z "$ac_cv_alignof_double"; then
6921                    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.])
6922                 fi
6923                 ;;
6924             esac
6925         ])
6927     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
6928     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
6929     if test $ac_cv_sizeof_long -eq 8; then
6930         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
6931     elif test $ac_cv_sizeof_double -eq 8; then
6932         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
6933     else
6934         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
6935     fi
6937     dnl Check for large file support
6938     AC_SYS_LARGEFILE
6939     if test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
6940         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
6941     fi
6942     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
6943         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
6944     fi
6945 else
6946     # Hardcode for MSVC
6947     SAL_TYPES_SIZEOFSHORT=2
6948     SAL_TYPES_SIZEOFINT=4
6949     SAL_TYPES_SIZEOFLONG=4
6950     SAL_TYPES_SIZEOFLONGLONG=8
6951     if test $WIN_HOST_BITS -eq 32; then
6952         SAL_TYPES_SIZEOFPOINTER=4
6953         SIZEOF_SIZE_T=4
6954     else
6955         SAL_TYPES_SIZEOFPOINTER=8
6956         SIZEOF_SIZE_T=8
6957     fi
6958     SAL_TYPES_ALIGNMENT2=2
6959     SAL_TYPES_ALIGNMENT4=4
6960     SAL_TYPES_ALIGNMENT8=8
6961     LFS_CFLAGS=''
6963 AC_SUBST(LFS_CFLAGS)
6964 AC_SUBST(SIZEOF_SIZE_T)
6966 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
6967 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
6968 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
6969 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
6970 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
6971 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
6972 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
6973 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
6975 dnl ===================================================================
6976 dnl Check whether to enable runtime optimizations
6977 dnl ===================================================================
6978 ENABLE_RUNTIME_OPTIMIZATIONS=
6979 AC_MSG_CHECKING([whether to enable runtime optimizations])
6980 if test -z "$enable_runtime_optimizations"; then
6981     for i in $CC; do
6982         case $i in
6983         -fsanitize=*)
6984             enable_runtime_optimizations=no
6985             break
6986             ;;
6987         esac
6988     done
6990 if test "$enable_runtime_optimizations" != no; then
6991     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
6992     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
6993     AC_MSG_RESULT([yes])
6994 else
6995     AC_MSG_RESULT([no])
6997 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
6999 dnl ===================================================================
7000 dnl Check if valgrind headers are available
7001 dnl ===================================================================
7002 ENABLE_VALGRIND=
7003 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
7004     prev_cppflags=$CPPFLAGS
7005     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
7006     # or where does it come from?
7007     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
7008     AC_CHECK_HEADER([valgrind/valgrind.h],
7009         [ENABLE_VALGRIND=TRUE])
7010     CPPFLAGS=$prev_cppflags
7012 AC_SUBST([ENABLE_VALGRIND])
7013 if test -z "$ENABLE_VALGRIND"; then
7014     if test "$with_valgrind" = yes; then
7015         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
7016     fi
7017     VALGRIND_CFLAGS=
7019 AC_SUBST([VALGRIND_CFLAGS])
7022 dnl ===================================================================
7023 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
7024 dnl ===================================================================
7026 # We need at least the sys/sdt.h include header.
7027 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
7028 if test "$SDT_H_FOUND" = "TRUE"; then
7029     # Found sys/sdt.h header, now make sure the c++ compiler works.
7030     # Old g++ versions had problems with probes in constructors/destructors.
7031     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
7032     AC_LANG_PUSH([C++])
7033     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
7034     #include <sys/sdt.h>
7035     class ProbeClass
7036     {
7037     private:
7038       int& ref;
7039       const char *name;
7041     public:
7042       ProbeClass(int& v, const char *n) : ref(v), name(n)
7043       {
7044         DTRACE_PROBE2(_test_, cons, name, ref);
7045       }
7047       void method(int min)
7048       {
7049         DTRACE_PROBE3(_test_, meth, name, ref, min);
7050         ref -= min;
7051       }
7053       ~ProbeClass()
7054       {
7055         DTRACE_PROBE2(_test_, dest, name, ref);
7056       }
7057     };
7058     ]],[[
7059     int i = 64;
7060     DTRACE_PROBE1(_test_, call, i);
7061     ProbeClass inst = ProbeClass(i, "call");
7062     inst.method(24);
7063     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
7064           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
7065     AC_LANG_POP([C++])
7067 AC_CONFIG_HEADERS([config_host/config_probes.h])
7069 dnl ===================================================================
7070 dnl GCC features
7071 dnl ===================================================================
7072 HAVE_GCC_STACK_CLASH_PROTECTION=
7073 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7074     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
7075     save_CFLAGS=$CFLAGS
7076     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
7077     AC_LINK_IFELSE(
7078         [AC_LANG_PROGRAM(, [[return 0;]])],
7079         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
7080         [AC_MSG_RESULT([no])])
7081     CFLAGS=$save_CFLAGS
7083     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
7084     save_CFLAGS=$CFLAGS
7085     CFLAGS="$CFLAGS -Werror -mno-avx"
7086     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
7087     CFLAGS=$save_CFLAGS
7088     if test "$HAVE_GCC_AVX" = "TRUE"; then
7089         AC_MSG_RESULT([yes])
7090     else
7091         AC_MSG_RESULT([no])
7092     fi
7094     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
7095     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7096     int v = 0;
7097     if (__sync_add_and_fetch(&v, 1) != 1 ||
7098         __sync_sub_and_fetch(&v, 1) != 0)
7099         return 1;
7100     __sync_synchronize();
7101     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
7102         v != 1)
7103         return 1;
7104     return 0;
7105 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
7106     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
7107         AC_MSG_RESULT([yes])
7108         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
7109     else
7110         AC_MSG_RESULT([no])
7111     fi
7113     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
7114     AC_LANG_PUSH([C++])
7115     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7116             #include <cstddef>
7117             #include <cxxabi.h>
7118             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
7119         ])], [
7120             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
7121             AC_MSG_RESULT([yes])
7122         ], [AC_MSG_RESULT([no])])
7123     AC_LANG_POP([C++])
7125     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
7126     AC_LANG_PUSH([C++])
7127     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7128             #include <cstddef>
7129             #include <cxxabi.h>
7130             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7131         ])], [
7132             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7133             AC_MSG_RESULT([yes])
7134         ], [AC_MSG_RESULT([no])])
7135     AC_LANG_POP([C++])
7137     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7138     AC_LANG_PUSH([C++])
7139     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7140             #include <cxxabi.h>
7141             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7142         ])], [
7143             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7144             AC_MSG_RESULT([yes])
7145         ], [AC_MSG_RESULT([no])])
7146     AC_LANG_POP([C++])
7148     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7149     AC_LANG_PUSH([C++])
7150     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7151             #include <cstddef>
7152             #include <cxxabi.h>
7153             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7154         ])], [
7155             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7156             AC_MSG_RESULT([yes])
7157         ], [AC_MSG_RESULT([no])])
7158     AC_LANG_POP([C++])
7160     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7161     AC_LANG_PUSH([C++])
7162     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7163             #include <cstddef>
7164             #include <cxxabi.h>
7165             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7166         ])], [
7167             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7168             AC_MSG_RESULT([yes])
7169         ], [AC_MSG_RESULT([no])])
7170     AC_LANG_POP([C++])
7172     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7173     AC_LANG_PUSH([C++])
7174     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7175             #include <cxxabi.h>
7176             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7177         ])], [
7178             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7179             AC_MSG_RESULT([yes])
7180         ], [AC_MSG_RESULT([no])])
7181     AC_LANG_POP([C++])
7183     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7184     AC_LANG_PUSH([C++])
7185     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7186             #include <cxxabi.h>
7187             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7188         ])], [
7189             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7190             AC_MSG_RESULT([yes])
7191         ], [AC_MSG_RESULT([no])])
7192     AC_LANG_POP([C++])
7194     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7195     AC_LANG_PUSH([C++])
7196     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7197             #include <cxxabi.h>
7198             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7199         ])], [
7200             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7201             AC_MSG_RESULT([yes])
7202         ], [AC_MSG_RESULT([no])])
7203     AC_LANG_POP([C++])
7205     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info in cxxabi.h])
7206     AC_LANG_PUSH([C++])
7207     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7208             #include <cstddef>
7209             #include <cxxabi.h>
7210             std::size_t f() { return sizeof(__cxxabiv1::__si_class_type_info); }
7211         ])], [
7212             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7213             AC_MSG_RESULT([yes])
7214         ], [AC_MSG_RESULT([no])])
7215     AC_LANG_POP([C++])
7217     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7218     AC_LANG_PUSH([C++])
7219     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7220             #include <cstddef>
7221             #include <cxxabi.h>
7222             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7223         ])], [
7224             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7225             AC_MSG_RESULT([yes])
7226         ], [AC_MSG_RESULT([no])])
7227     AC_LANG_POP([C++])
7230 AC_SUBST(HAVE_GCC_AVX)
7231 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7232 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7234 dnl ===================================================================
7235 dnl Identify the C++ library
7236 dnl ===================================================================
7238 AC_MSG_CHECKING([what the C++ library is])
7239 HAVE_LIBSTDCPP=
7240 AC_LANG_PUSH([C++])
7241 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7242 #include <utility>
7243 #ifndef __GLIBCXX__
7244 foo bar
7245 #endif
7246 ]])],
7247     [CPP_LIBRARY=GLIBCXX
7248      cpp_library_name="GNU libstdc++"
7249      HAVE_LIBSTDCPP=TRUE
7250     ],
7251     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7252 #include <utility>
7253 #ifndef _LIBCPP_VERSION
7254 foo bar
7255 #endif
7256 ]])],
7257     [CPP_LIBRARY=LIBCPP
7258      cpp_library_name="LLVM libc++"
7259      AC_DEFINE([HAVE_LIBCXX])
7260     ],
7261     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7262 #include <utility>
7263 #ifndef _MSC_VER
7264 foo bar
7265 #endif
7266 ]])],
7267     [CPP_LIBRARY=MSVCRT
7268      cpp_library_name="Microsoft"
7269     ],
7270     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7271 AC_MSG_RESULT([$cpp_library_name])
7272 AC_LANG_POP([C++])
7273 AC_SUBST([HAVE_LIBSTDCPP])
7275 dnl ===================================================================
7276 dnl Check for gperf
7277 dnl ===================================================================
7278 AC_PATH_PROG(GPERF, gperf)
7279 if test -z "$GPERF"; then
7280     AC_MSG_ERROR([gperf not found but needed. Install it.])
7282 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7283     GPERF=`cygpath -m $GPERF`
7285 AC_MSG_CHECKING([whether gperf is new enough])
7286 my_gperf_ver1=$($GPERF --version | head -n 1)
7287 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7288 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7289 if test "$my_gperf_ver3" -ge 301; then
7290     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7291 else
7292     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7294 AC_SUBST(GPERF)
7296 dnl ===================================================================
7297 dnl Check for system libcmis
7298 dnl ===================================================================
7299 # libcmis requires curl and we can't build curl for iOS
7300 if test "$test_cmis" = "yes" -a "$enable_cmis" = "yes"; then
7301     libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.5 >= 0.5.2])
7302     ENABLE_LIBCMIS=TRUE
7303 else
7304     ENABLE_LIBCMIS=
7306 AC_SUBST(ENABLE_LIBCMIS)
7308 dnl ===================================================================
7309 dnl C++11
7310 dnl ===================================================================
7312 AC_MSG_CHECKING([whether $CXX_BASE supports C++17])
7313 CXXFLAGS_CXX11=
7314 if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7315     if test "$with_latest_c__" = yes; then
7316         CXXFLAGS_CXX11=-std:c++latest
7317     else
7318         CXXFLAGS_CXX11=-std:c++17
7319     fi
7320     CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus"
7321 elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7322     my_flags='-std=c++17 -std=c++1z'
7323     if test "$with_latest_c__" = yes; then
7324         my_flags="-std=c++23 -std=c++2b -std=c++20 -std=c++2a $my_flags"
7325     fi
7326     for flag in $my_flags; do
7327         if test "$COM" = MSC; then
7328             flag="-Xclang $flag"
7329         fi
7330         save_CXXFLAGS=$CXXFLAGS
7331         CXXFLAGS="$CXXFLAGS $flag -Werror"
7332         if test "$SYSTEM_LIBCMIS" = TRUE; then
7333             CXXFLAGS="$CXXFLAGS -DSYSTEM_LIBCMIS $LIBCMIS_CFLAGS"
7334         fi
7335         AC_LANG_PUSH([C++])
7336         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7337             #include <algorithm>
7338             #include <functional>
7339             #include <vector>
7341             #if defined SYSTEM_LIBCMIS
7342             // See ucb/source/ucp/cmis/auth_provider.hxx:
7343             #if !defined __clang__
7344             #pragma GCC diagnostic push
7345             #pragma GCC diagnostic ignored "-Wdeprecated"
7346             #pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
7347             #endif
7348             #include <libcmis/libcmis.hxx>
7349             #if !defined __clang__
7350             #pragma GCC diagnostic pop
7351             #endif
7352             #endif
7354             void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7355                 std::sort(v.begin(), v.end(), fn);
7356             }
7357             ]])],[CXXFLAGS_CXX11=$flag])
7358         AC_LANG_POP([C++])
7359         CXXFLAGS=$save_CXXFLAGS
7360         if test -n "$CXXFLAGS_CXX11"; then
7361             break
7362         fi
7363     done
7365 if test -n "$CXXFLAGS_CXX11"; then
7366     AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7367 else
7368     AC_MSG_ERROR(no)
7370 AC_SUBST(CXXFLAGS_CXX11)
7372 if test "$GCC" = "yes"; then
7373     save_CXXFLAGS=$CXXFLAGS
7374     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7375     CHECK_L_ATOMIC
7376     CXXFLAGS=$save_CXXFLAGS
7377     AC_SUBST(ATOMIC_LIB)
7380 dnl Test for temporarily incompatible libstdc++ 4.7.{0,1}, where
7381 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=179528> introduced
7382 dnl an additional member _M_size into C++11 std::list towards 4.7.0 and
7383 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=189186> removed it
7384 dnl again towards 4.7.2:
7385 if test $CPP_LIBRARY = GLIBCXX; then
7386     AC_MSG_CHECKING([whether using C++11 causes libstdc++ 4.7.0/4.7.1 ABI breakage])
7387     AC_LANG_PUSH([C++])
7388     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7389 #include <list>
7390 #if !defined __GLIBCXX__ || (__GLIBCXX__ != 20120322 && __GLIBCXX__ != 20120614)
7391     // according to <https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html>:
7392     //   GCC 4.7.0: 20120322
7393     //   GCC 4.7.1: 20120614
7394     // and using a range check is not possible as the mapping between
7395     // __GLIBCXX__ values and GCC versions is not monotonic
7396 /* ok */
7397 #else
7398 abi broken
7399 #endif
7400         ]])], [AC_MSG_RESULT(no, ok)],
7401         [AC_MSG_ERROR(yes)])
7402     AC_LANG_POP([C++])
7405 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7406 save_CXXFLAGS=$CXXFLAGS
7407 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7408 AC_LANG_PUSH([C++])
7410 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7411 #include <stddef.h>
7413 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7415 namespace
7417         struct b
7418         {
7419                 int i;
7420                 int j;
7421         };
7423 ]], [[
7424 struct a
7426         int i;
7427         int j;
7429 a thinga[]={{0,0}, {1,1}};
7430 b thingb[]={{0,0}, {1,1}};
7431 size_t i = sizeof(sal_n_array_size(thinga));
7432 size_t j = sizeof(sal_n_array_size(thingb));
7433 return !(i != 0 && j != 0);
7435     ], [ AC_MSG_RESULT(yes) ],
7436     [ AC_MSG_ERROR(no)])
7437 AC_LANG_POP([C++])
7438 CXXFLAGS=$save_CXXFLAGS
7440 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7441 if test "$GCC" = yes; then
7442     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7443     AC_LANG_PUSH([C++])
7444     save_CXXFLAGS=$CXXFLAGS
7445     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7446     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7447     CXXFLAGS=$save_CXXFLAGS
7448     AC_LANG_POP([C++])
7449     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7450         AC_MSG_RESULT([yes])
7451     else
7452         AC_MSG_RESULT([no])
7453     fi
7455 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7457 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7458 AC_LANG_PUSH([C++])
7459 save_CXXFLAGS=$CXXFLAGS
7460 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7461 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7462         #include <algorithm>
7463         #include <initializer_list>
7464         #include <vector>
7465         template<typename T> class S {
7466         private:
7467             std::vector<T> v_;
7468         public:
7469             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7470         };
7471         constinit S<int> s{3, 2, 1};
7472     ])], [
7473         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7474         AC_MSG_RESULT([yes])
7475     ], [AC_MSG_RESULT([no])])
7476 CXXFLAGS=$save_CXXFLAGS
7477 AC_LANG_POP([C++])
7479 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a <span> with unsigned size_type])
7480 AC_LANG_PUSH([C++])
7481 save_CXXFLAGS=$CXXFLAGS
7482 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7483 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7484         #include <span>
7485         #include <type_traits>
7486         // Don't check size_type directly, as it was called index_type before P1872R0:
7487         void f(std::span<int> s) { static_assert(std::is_unsigned_v<decltype(s.size())>); };
7488     ])], [
7489         AC_DEFINE([HAVE_CPP_SPAN],[1])
7490         AC_MSG_RESULT([yes])
7491     ], [AC_MSG_RESULT([no])])
7492 CXXFLAGS=$save_CXXFLAGS
7493 AC_LANG_POP([C++])
7495 AC_MSG_CHECKING([whether $CXX_BASE implements C++ DR P1155R3])
7496 AC_LANG_PUSH([C++])
7497 save_CXXFLAGS=$CXXFLAGS
7498 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7499 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7500         struct S1 { S1(S1 &&); };
7501         struct S2: S1 {};
7502         S1 f(S2 s) { return s; }
7503     ])], [
7504         AC_DEFINE([HAVE_P1155R3],[1])
7505         AC_MSG_RESULT([yes])
7506     ], [AC_MSG_RESULT([no])])
7507 CXXFLAGS=$save_CXXFLAGS
7508 AC_LANG_POP([C++])
7510 AC_MSG_CHECKING([whether $CXX_BASE supports C++20 std::atomic_ref])
7511 HAVE_CXX20_ATOMIC_REF=
7512 AC_LANG_PUSH([C++])
7513 save_CXXFLAGS=$CXXFLAGS
7514 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7515 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7516         #include <atomic>
7517         int x;
7518         std::atomic_ref<int> y(x);
7519     ])], [
7520         HAVE_CXX20_ATOMIC_REF=TRUE
7521         AC_MSG_RESULT([yes])
7522     ], [AC_MSG_RESULT([no])])
7523 CXXFLAGS=$save_CXXFLAGS
7524 AC_LANG_POP([C++])
7525 AC_SUBST([HAVE_CXX20_ATOMIC_REF])
7527 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7528 dnl which is included in -Wextra anyway):
7529 HAVE_WDEPRECATED_COPY_DTOR=
7530 if test "$GCC" = yes; then
7531     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7532     AC_LANG_PUSH([C++])
7533     save_CXXFLAGS=$CXXFLAGS
7534     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7535     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7536             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7537             AC_MSG_RESULT([yes])
7538         ], [AC_MSG_RESULT([no])])
7539     CXXFLAGS=$save_CXXFLAGS
7540     AC_LANG_POP([C++])
7542 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7544 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7545 dnl uninitialized warning for code like
7547 dnl   OString f();
7548 dnl   boost::optional<OString> * g(bool b) {
7549 dnl       boost::optional<OString> o;
7550 dnl       if (b) o = f();
7551 dnl       return new boost::optional<OString>(o);
7552 dnl   }
7554 dnl (as is e.g. present, in a slightly more elaborate form, in
7555 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7556 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7557 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7558 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7559     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7560     AC_LANG_PUSH([C++])
7561     save_CXXFLAGS=$CXXFLAGS
7562     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7563     if test "$ENABLE_OPTIMIZED" = TRUE; then
7564         CXXFLAGS="$CXXFLAGS -O2"
7565     else
7566         CXXFLAGS="$CXXFLAGS -O0"
7567     fi
7568     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7569             #include <new>
7570             void f1(int);
7571             struct S1 {
7572                 ~S1() { f1(n); }
7573                 int n = 0;
7574             };
7575             struct S2 {
7576                 S2() {}
7577                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7578                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7579                 void set(S1 s) {
7580                     new (stg) S1(s);
7581                     init = true;
7582                 }
7583                 bool init = false;
7584                 char stg[sizeof (S1)];
7585             } ;
7586             S1 f2();
7587             S2 * f3(bool b) {
7588                 S2 o;
7589                 if (b) o.set(f2());
7590                 return new S2(o);
7591             }
7592         ]])], [AC_MSG_RESULT([no])], [
7593             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7594             AC_MSG_RESULT([yes])
7595         ])
7596     CXXFLAGS=$save_CXXFLAGS
7597     AC_LANG_POP([C++])
7599 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7601 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7602 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7603 dnl hits us e.g. with GCC 10 and --enable-optimized at
7605 dnl   In file included from include/rtl/string.hxx:49,
7606 dnl                    from include/rtl/ustring.hxx:43,
7607 dnl                    from include/osl/file.hxx:35,
7608 dnl                    from include/codemaker/global.hxx:28,
7609 dnl                    from include/codemaker/options.hxx:23,
7610 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7611 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7612 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,
7613 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,
7614 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,
7615 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7616 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7617 dnl      78 |         memcpy( buffer, data, length );
7618 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7619 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7620 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7621     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7622     AC_LANG_PUSH([C++])
7623     save_CXXFLAGS=$CXXFLAGS
7624     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7625     if test "$ENABLE_OPTIMIZED" = TRUE; then
7626         CXXFLAGS="$CXXFLAGS -O2"
7627     else
7628         CXXFLAGS="$CXXFLAGS -O0"
7629     fi
7630     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7631     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7632             void fill(char const * begin, char const * end, char c);
7633             struct q {
7634                 char ids[4];
7635                 char username[6];
7636             };
7637             void test(q & c) {
7638                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
7639                 __builtin_strncpy(c.username, "root", sizeof(c.username));
7640             }
7641         ]])], [AC_MSG_RESULT([no])], [
7642             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
7643             AC_MSG_RESULT([yes])
7644         ])
7645     CXXFLAGS=$save_CXXFLAGS
7646     AC_LANG_POP([C++])
7648 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
7650 HAVE_DLLEXPORTINLINES=
7651 dnl At least for Clang 14 trunk, -Zc:dllexportInlines- would cause lots of unresolved symbols when
7652 dnl linking e.g. Library_cppuhelper, for whatever reason:
7653 if test "$_os" = "WINNT" && test "$COM_IS_CLANG" != TRUE; then
7654     AC_MSG_CHECKING([whether $CXX_BASE supports -Zc:dllexportInlines-])
7655     AC_LANG_PUSH([C++])
7656     save_CXXFLAGS=$CXXFLAGS
7657     CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
7658     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7659             HAVE_DLLEXPORTINLINES=TRUE
7660             AC_MSG_RESULT([yes])
7661         ], [AC_MSG_RESULT([no])])
7662     CXXFLAGS=$save_CXXFLAGS
7663     AC_LANG_POP([C++])
7665 AC_SUBST([HAVE_DLLEXPORTINLINES])
7667 dnl ===================================================================
7668 dnl CPU Intrinsics support - SSE, AVX
7669 dnl ===================================================================
7671 CXXFLAGS_INTRINSICS_SSE2=
7672 CXXFLAGS_INTRINSICS_SSSE3=
7673 CXXFLAGS_INTRINSICS_SSE41=
7674 CXXFLAGS_INTRINSICS_SSE42=
7675 CXXFLAGS_INTRINSICS_AVX=
7676 CXXFLAGS_INTRINSICS_AVX2=
7677 CXXFLAGS_INTRINSICS_AVX512=
7678 CXXFLAGS_INTRINSICS_AVX512F=
7679 CXXFLAGS_INTRINSICS_F16C=
7680 CXXFLAGS_INTRINSICS_FMA=
7682 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7683     # GCC, Clang or Clang-cl (clang-cl + MSVC's -arch options don't work well together)
7684     flag_sse2=-msse2
7685     flag_ssse3=-mssse3
7686     flag_sse41=-msse4.1
7687     flag_sse42=-msse4.2
7688     flag_avx=-mavx
7689     flag_avx2=-mavx2
7690     flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
7691     flag_avx512f=-mavx512f
7692     flag_f16c=-mf16c
7693     flag_fma=-mfma
7694 else
7695     # With MSVC using -arch is in fact not necessary for being able
7696     # to use CPU intrinsics, code using AVX512F intrinsics will compile
7697     # even if compiled with -arch:AVX, the -arch option really only affects
7698     # instructions generated for C/C++ code.
7699     # So use the matching same (or lower) -arch options, but only in order
7700     # to generate the best matching instructions for the C++ code surrounding
7701     # the intrinsics.
7702     # SSE2 is the default for x86/x64, so no need to specify the option.
7703     flag_sse2=
7704     # No specific options for these, use the next lower.
7705     flag_ssse3="$flag_sse2"
7706     flag_sse41="$flag_sse2"
7707     flag_sse42="$flag_sse2"
7708     flag_avx=-arch:AVX
7709     flag_avx2=-arch:AVX2
7710     flag_avx512=-arch:AVX512
7711     # Using -arch:AVX512 would enable more than just AVX512F, so use only AVX2.
7712     flag_avx512f=-arch:AVX2
7713     # No MSVC options for these.
7714     flag_f16c="$flag_sse2"
7715     flag_fma="$flag_sse2"
7718 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
7719 AC_LANG_PUSH([C++])
7720 save_CXXFLAGS=$CXXFLAGS
7721 CXXFLAGS="$CXXFLAGS $flag_sse2"
7722 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7723     #include <emmintrin.h>
7724     int main () {
7725         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7726         c = _mm_xor_si128 (a, b);
7727         return 0;
7728     }
7729     ])],
7730     [can_compile_sse2=yes],
7731     [can_compile_sse2=no])
7732 AC_LANG_POP([C++])
7733 CXXFLAGS=$save_CXXFLAGS
7734 AC_MSG_RESULT([${can_compile_sse2}])
7735 if test "${can_compile_sse2}" = "yes" ; then
7736     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
7739 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
7740 AC_LANG_PUSH([C++])
7741 save_CXXFLAGS=$CXXFLAGS
7742 CXXFLAGS="$CXXFLAGS $flag_ssse3"
7743 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7744     #include <tmmintrin.h>
7745     int main () {
7746         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7747         c = _mm_maddubs_epi16 (a, b);
7748         return 0;
7749     }
7750     ])],
7751     [can_compile_ssse3=yes],
7752     [can_compile_ssse3=no])
7753 AC_LANG_POP([C++])
7754 CXXFLAGS=$save_CXXFLAGS
7755 AC_MSG_RESULT([${can_compile_ssse3}])
7756 if test "${can_compile_ssse3}" = "yes" ; then
7757     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
7760 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
7761 AC_LANG_PUSH([C++])
7762 save_CXXFLAGS=$CXXFLAGS
7763 CXXFLAGS="$CXXFLAGS $flag_sse41"
7764 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7765     #include <smmintrin.h>
7766     int main () {
7767         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7768         c = _mm_cmpeq_epi64 (a, b);
7769         return 0;
7770     }
7771     ])],
7772     [can_compile_sse41=yes],
7773     [can_compile_sse41=no])
7774 AC_LANG_POP([C++])
7775 CXXFLAGS=$save_CXXFLAGS
7776 AC_MSG_RESULT([${can_compile_sse41}])
7777 if test "${can_compile_sse41}" = "yes" ; then
7778     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
7781 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
7782 AC_LANG_PUSH([C++])
7783 save_CXXFLAGS=$CXXFLAGS
7784 CXXFLAGS="$CXXFLAGS $flag_sse42"
7785 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7786     #include <nmmintrin.h>
7787     int main () {
7788         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7789         c = _mm_cmpgt_epi64 (a, b);
7790         return 0;
7791     }
7792     ])],
7793     [can_compile_sse42=yes],
7794     [can_compile_sse42=no])
7795 AC_LANG_POP([C++])
7796 CXXFLAGS=$save_CXXFLAGS
7797 AC_MSG_RESULT([${can_compile_sse42}])
7798 if test "${can_compile_sse42}" = "yes" ; then
7799     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
7802 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
7803 AC_LANG_PUSH([C++])
7804 save_CXXFLAGS=$CXXFLAGS
7805 CXXFLAGS="$CXXFLAGS $flag_avx"
7806 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7807     #include <immintrin.h>
7808     int main () {
7809         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
7810         c = _mm256_xor_ps(a, b);
7811         return 0;
7812     }
7813     ])],
7814     [can_compile_avx=yes],
7815     [can_compile_avx=no])
7816 AC_LANG_POP([C++])
7817 CXXFLAGS=$save_CXXFLAGS
7818 AC_MSG_RESULT([${can_compile_avx}])
7819 if test "${can_compile_avx}" = "yes" ; then
7820     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
7823 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
7824 AC_LANG_PUSH([C++])
7825 save_CXXFLAGS=$CXXFLAGS
7826 CXXFLAGS="$CXXFLAGS $flag_avx2"
7827 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7828     #include <immintrin.h>
7829     int main () {
7830         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
7831         c = _mm256_maddubs_epi16(a, b);
7832         return 0;
7833     }
7834     ])],
7835     [can_compile_avx2=yes],
7836     [can_compile_avx2=no])
7837 AC_LANG_POP([C++])
7838 CXXFLAGS=$save_CXXFLAGS
7839 AC_MSG_RESULT([${can_compile_avx2}])
7840 if test "${can_compile_avx2}" = "yes" ; then
7841     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
7844 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
7845 AC_LANG_PUSH([C++])
7846 save_CXXFLAGS=$CXXFLAGS
7847 CXXFLAGS="$CXXFLAGS $flag_avx512"
7848 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7849     #include <immintrin.h>
7850     int main () {
7851         __m512i a = _mm512_loadu_si512(0);
7852         __m512d v1 = _mm512_load_pd(0);
7853         // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
7854         __m512d v2 = _mm512_abs_pd(v1);
7855         return 0;
7856     }
7857     ])],
7858     [can_compile_avx512=yes],
7859     [can_compile_avx512=no])
7860 AC_LANG_POP([C++])
7861 CXXFLAGS=$save_CXXFLAGS
7862 AC_MSG_RESULT([${can_compile_avx512}])
7863 if test "${can_compile_avx512}" = "yes" ; then
7864     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
7865     CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
7868 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
7869 AC_LANG_PUSH([C++])
7870 save_CXXFLAGS=$CXXFLAGS
7871 CXXFLAGS="$CXXFLAGS $flag_f16c"
7872 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7873     #include <immintrin.h>
7874     int main () {
7875         __m128i a = _mm_set1_epi32 (0);
7876         __m128 c;
7877         c = _mm_cvtph_ps(a);
7878         return 0;
7879     }
7880     ])],
7881     [can_compile_f16c=yes],
7882     [can_compile_f16c=no])
7883 AC_LANG_POP([C++])
7884 CXXFLAGS=$save_CXXFLAGS
7885 AC_MSG_RESULT([${can_compile_f16c}])
7886 if test "${can_compile_f16c}" = "yes" ; then
7887     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
7890 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
7891 AC_LANG_PUSH([C++])
7892 save_CXXFLAGS=$CXXFLAGS
7893 CXXFLAGS="$CXXFLAGS $flag_fma"
7894 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7895     #include <immintrin.h>
7896     int main () {
7897         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
7898         d = _mm256_fmadd_ps(a, b, c);
7899         return 0;
7900     }
7901     ])],
7902     [can_compile_fma=yes],
7903     [can_compile_fma=no])
7904 AC_LANG_POP([C++])
7905 CXXFLAGS=$save_CXXFLAGS
7906 AC_MSG_RESULT([${can_compile_fma}])
7907 if test "${can_compile_fma}" = "yes" ; then
7908     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
7911 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
7912 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
7913 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
7914 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
7915 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
7916 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
7917 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
7918 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512F])
7919 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
7920 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
7922 dnl ===================================================================
7923 dnl system stl sanity tests
7924 dnl ===================================================================
7925 if test "$_os" != "WINNT"; then
7927     AC_LANG_PUSH([C++])
7929     save_CPPFLAGS="$CPPFLAGS"
7930     if test -n "$MACOSX_SDK_PATH"; then
7931         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
7932     fi
7934     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
7935     # only.
7936     if test "$CPP_LIBRARY" = GLIBCXX; then
7937         dnl gcc#19664, gcc#22482, rhbz#162935
7938         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
7939         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
7940         AC_MSG_RESULT([$stlvisok])
7941         if test "$stlvisok" = "no"; then
7942             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
7943         fi
7944     fi
7946     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
7947     # when we don't make any dynamic libraries?
7948     if test "$DISABLE_DYNLOADING" = ""; then
7949         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
7950         cat > conftestlib1.cc <<_ACEOF
7951 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7952 struct S2: S1<int> { virtual ~S2(); };
7953 S2::~S2() {}
7954 _ACEOF
7955         cat > conftestlib2.cc <<_ACEOF
7956 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7957 struct S2: S1<int> { virtual ~S2(); };
7958 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
7959 _ACEOF
7960         gccvisinlineshiddenok=yes
7961         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
7962             gccvisinlineshiddenok=no
7963         else
7964             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
7965             dnl known to not work with -z defs (unsetting which makes the test
7966             dnl moot, though):
7967             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
7968             if test "$COM_IS_CLANG" = TRUE; then
7969                 for i in $CXX $CXXFLAGS; do
7970                     case $i in
7971                     -fsanitize=*)
7972                         my_linkflagsnoundefs=
7973                         break
7974                         ;;
7975                     esac
7976                 done
7977             fi
7978             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
7979                 gccvisinlineshiddenok=no
7980             fi
7981         fi
7983         rm -fr libconftest*
7984         AC_MSG_RESULT([$gccvisinlineshiddenok])
7985         if test "$gccvisinlineshiddenok" = "no"; then
7986             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
7987         fi
7988     fi
7990    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
7991     cat >visibility.cxx <<_ACEOF
7992 #pragma GCC visibility push(hidden)
7993 struct __attribute__ ((visibility ("default"))) TestStruct {
7994   static void Init();
7996 __attribute__ ((visibility ("default"))) void TestFunc() {
7997   TestStruct::Init();
7999 _ACEOF
8000     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
8001         gccvisbroken=yes
8002     else
8003         case "$host_cpu" in
8004         i?86|x86_64)
8005             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
8006                 gccvisbroken=no
8007             else
8008                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
8009                     gccvisbroken=no
8010                 else
8011                     gccvisbroken=yes
8012                 fi
8013             fi
8014             ;;
8015         *)
8016             gccvisbroken=no
8017             ;;
8018         esac
8019     fi
8020     rm -f visibility.s visibility.cxx
8022     AC_MSG_RESULT([$gccvisbroken])
8023     if test "$gccvisbroken" = "yes"; then
8024         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
8025     fi
8027     CPPFLAGS="$save_CPPFLAGS"
8029     AC_MSG_CHECKING([if CET endbranch is recognized])
8030 cat > endbr.s <<_ACEOF
8031 endbr32
8032 _ACEOF
8033     HAVE_ASM_END_BRANCH_INS_SUPPORT=
8034     if $CXX -c endbr.s -o endbr.o >/dev/null 2>&5; then
8035         AC_MSG_RESULT([yes])
8036         HAVE_ASM_END_BRANCH_INS_SUPPORT=TRUE
8037     else
8038         AC_MSG_RESULT([no])
8039     fi
8040     rm -f endbr.s endbr.o
8041     AC_SUBST(HAVE_ASM_END_BRANCH_INS_SUPPORT)
8043     AC_LANG_POP([C++])
8046 dnl ===================================================================
8047 dnl  Clang++ tests
8048 dnl ===================================================================
8050 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
8051 if test "$GCC" = "yes"; then
8052     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
8053     AC_LANG_PUSH([C++])
8054     save_CXXFLAGS=$CXXFLAGS
8055     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
8056     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
8057     CXXFLAGS=$save_CXXFLAGS
8058     AC_LANG_POP([C++])
8059     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
8060         AC_MSG_RESULT([yes])
8061     else
8062         AC_MSG_RESULT([no])
8063     fi
8065 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
8067 dnl ===================================================================
8068 dnl Compiler plugins
8069 dnl ===================================================================
8071 COMPILER_PLUGINS=
8072 # currently only Clang
8074 if test "$COM_IS_CLANG" != "TRUE"; then
8075     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
8076         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
8077         enable_compiler_plugins=no
8078     fi
8081 COMPILER_PLUGINS_COM_IS_CLANG=
8082 if test "$COM_IS_CLANG" = "TRUE"; then
8083     if test -n "$enable_compiler_plugins"; then
8084         compiler_plugins="$enable_compiler_plugins"
8085     elif test -n "$ENABLE_DBGUTIL"; then
8086         compiler_plugins=test
8087     else
8088         compiler_plugins=no
8089     fi
8090     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
8091         if test "$CLANGVER" -lt 50002; then
8092             if test "$compiler_plugins" = yes; then
8093                 AC_MSG_ERROR([Clang $CLANGVER is too old to build compiler plugins; need >= 5.0.2.])
8094             else
8095                 compiler_plugins=no
8096             fi
8097         fi
8098     fi
8099     if test "$compiler_plugins" != "no"; then
8100         dnl The prefix where Clang resides, override to where Clang resides if
8101         dnl using a source build:
8102         if test -z "$CLANGDIR"; then
8103             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
8104         fi
8105         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
8106         if test -z "$COMPILER_PLUGINS_CXX"; then
8107             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
8108         fi
8109         clangbindir=$CLANGDIR/bin
8110         if test "$build_os" = "cygwin"; then
8111             clangbindir=$(cygpath -u "$clangbindir")
8112         fi
8113         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
8114         if test -n "$LLVM_CONFIG"; then
8115             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
8116             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
8117             if test -z "$CLANGLIBDIR"; then
8118                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
8119             fi
8120             # Try if clang is built from source (in which case its includes are not together with llvm includes).
8121             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
8122             clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
8123             if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
8124                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
8125             fi
8126             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
8127             clangobjdir=$($LLVM_CONFIG --obj-root)
8128             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
8129                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
8130             fi
8131         fi
8132         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
8133         AC_LANG_PUSH([C++])
8134         save_CXX=$CXX
8135         save_CXXCPP=$CXXCPP
8136         save_CPPFLAGS=$CPPFLAGS
8137         save_CXXFLAGS=$CXXFLAGS
8138         save_LDFLAGS=$LDFLAGS
8139         save_LIBS=$LIBS
8140         CXX=$COMPILER_PLUGINS_CXX
8141         CXXCPP="$COMPILER_PLUGINS_CXX -E"
8142         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8143         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8144         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
8145             [COMPILER_PLUGINS=TRUE],
8146             [
8147             if test "$compiler_plugins" = "yes"; then
8148                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
8149             else
8150                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
8151                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
8152             fi
8153             ])
8154         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8155         dnl comment in compilerplugins/Makefile-clang.mk:
8156         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8157             LDFLAGS=""
8158             AC_MSG_CHECKING([for clang libraries to use])
8159             if test -z "$CLANGTOOLLIBS"; then
8160                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8161  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8162                 AC_LINK_IFELSE([
8163                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8164                         [[ clang::FullSourceLoc().dump(); ]])
8165                 ],[CLANGTOOLLIBS="$LIBS"],[])
8166             fi
8167             if test -z "$CLANGTOOLLIBS"; then
8168                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8169                 AC_LINK_IFELSE([
8170                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8171                         [[ clang::FullSourceLoc().dump(); ]])
8172                 ],[CLANGTOOLLIBS="$LIBS"],[])
8173             fi
8174             AC_MSG_RESULT([$CLANGTOOLLIBS])
8175             if test -z "$CLANGTOOLLIBS"; then
8176                 if test "$compiler_plugins" = "yes"; then
8177                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8178                 else
8179                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8180                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8181                 fi
8182                 COMPILER_PLUGINS=
8183             fi
8184             if test -n "$COMPILER_PLUGINS"; then
8185                 if test -z "$CLANGSYSINCLUDE"; then
8186                     if test -n "$LLVM_CONFIG"; then
8187                         # Path to the clang system headers (no idea if there's a better way to get it).
8188                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8189                     fi
8190                 fi
8191             fi
8192         fi
8193         CXX=$save_CXX
8194         CXXCPP=$save_CXXCPP
8195         CPPFLAGS=$save_CPPFLAGS
8196         CXXFLAGS=$save_CXXFLAGS
8197         LDFLAGS=$save_LDFLAGS
8198         LIBS="$save_LIBS"
8199         AC_LANG_POP([C++])
8201         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8202         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8203             #ifndef __clang__
8204             you lose
8205             #endif
8206             int foo=42;
8207             ]])],
8208             [AC_MSG_RESULT([yes])
8209              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8210             [AC_MSG_RESULT([no])])
8211         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8212     fi
8213 else
8214     if test "$enable_compiler_plugins" = "yes"; then
8215         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8216     fi
8218 COMPILER_PLUGINS_ANALYZER_PCH=
8219 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8220     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8222 AC_SUBST(COMPILER_PLUGINS)
8223 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8224 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8225 AC_SUBST(COMPILER_PLUGINS_CXX)
8226 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8227 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8228 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8229 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8230 AC_SUBST(CLANGDIR)
8231 AC_SUBST(CLANGLIBDIR)
8232 AC_SUBST(CLANGTOOLLIBS)
8233 AC_SUBST(CLANGSYSINCLUDE)
8235 # Plugin to help linker.
8236 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8237 # This makes --enable-lto build with clang work.
8238 AC_SUBST(LD_PLUGIN)
8240 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8241 AC_SUBST(HAVE_POSIX_FALLOCATE)
8243 JITC_PROCESSOR_TYPE=""
8244 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8245     # IBMs JDK needs this...
8246     JITC_PROCESSOR_TYPE=6
8247     export JITC_PROCESSOR_TYPE
8249 AC_SUBST([JITC_PROCESSOR_TYPE])
8251 # Misc Windows Stuff
8252 AC_ARG_WITH(ucrt-dir,
8253     AS_HELP_STRING([--with-ucrt-dir],
8254         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8255         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8256         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8257             Windows6.1-KB2999226-x64.msu
8258             Windows6.1-KB2999226-x86.msu
8259             Windows8.1-KB2999226-x64.msu
8260             Windows8.1-KB2999226-x86.msu
8261             Windows8-RT-KB2999226-x64.msu
8262             Windows8-RT-KB2999226-x86.msu
8263         A zip archive including those files is available from Microsoft site:
8264         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8267 UCRT_REDISTDIR="$with_ucrt_dir"
8268 if test $_os = "WINNT"; then
8269     find_msvc_x64_dlls
8270     for i in $PKGFORMAT; do
8271         if test "$i" = msi; then
8272             find_msms
8273             break
8274         fi
8275     done
8276     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8277     MSVC_DLLS="$msvcdlls"
8278     test -n "$msmdir" && MSM_PATH=`win_short_path_for_make "$msmdir"`
8279     # MSVC 15.3 changed it to VC141
8280     if echo "$msvcdllpath" | grep -q "VC143.CRT$"; then
8281         SCPDEFS="$SCPDEFS -DWITH_VC143_REDIST"
8282     elif echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8283         SCPDEFS="$SCPDEFS -DWITH_VC142_REDIST"
8284     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8285         SCPDEFS="$SCPDEFS -DWITH_VC141_REDIST"
8286     else
8287         SCPDEFS="$SCPDEFS -DWITH_VC${VCVER}_REDIST"
8288     fi
8290     if test "$UCRT_REDISTDIR" = "no"; then
8291         dnl explicitly disabled
8292         UCRT_REDISTDIR=""
8293     else
8294         if ! test -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x64.msu" -a \
8295                   -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x86.msu" -a \
8296                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x64.msu" -a \
8297                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x86.msu" -a \
8298                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x64.msu" -a \
8299                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x86.msu"; then
8300             UCRT_REDISTDIR=""
8301             if test -n "$PKGFORMAT"; then
8302                for i in $PKGFORMAT; do
8303                    case "$i" in
8304                    msi)
8305                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8306                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8307                        ;;
8308                    esac
8309                done
8310             fi
8311         fi
8312     fi
8315 AC_SUBST(UCRT_REDISTDIR)
8316 AC_SUBST(MSVC_DLL_PATH)
8317 AC_SUBST(MSVC_DLLS)
8318 AC_SUBST(MSM_PATH)
8321 dnl ===================================================================
8322 dnl Checks for Java
8323 dnl ===================================================================
8324 if test "$ENABLE_JAVA" != ""; then
8326     # Windows-specific tests
8327     if test "$build_os" = "cygwin"; then
8328         if test -z "$with_jdk_home"; then
8329             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8330             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8331             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/CurrentVersion"
8332             if test -n "$regvalue"; then
8333                 ver=$regvalue
8334                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver/JavaHome"
8335                 with_jdk_home=$regvalue
8336             fi
8337             howfound="found automatically"
8338         else
8339             with_jdk_home=`win_short_path_for_make "$with_jdk_home"`
8340             howfound="you passed"
8341         fi
8343         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8344             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])
8345         fi
8346     fi
8348     # 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.
8349     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8350     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8351         with_jdk_home=`/usr/libexec/java_home`
8352     fi
8354     JAVA_HOME=; export JAVA_HOME
8355     if test -z "$with_jdk_home"; then
8356         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8357     else
8358         _java_path="$with_jdk_home/bin/$with_java"
8359         dnl Check if there is a Java interpreter at all.
8360         if test -x "$_java_path"; then
8361             JAVAINTERPRETER=$_java_path
8362         else
8363             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8364         fi
8365     fi
8367     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8368     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8369     dnl loaded by java to run JunitTests:
8370     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8371         shortjdkhome=`cygpath -d "$with_jdk_home"`
8372         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
8373             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8374             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8375         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
8376             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8377             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8378         fi
8380         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8381             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8382         fi
8383         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8384     elif test "$cross_compiling" != "yes"; then
8385         case $CPUNAME in
8386             AARCH64|AXP|X86_64|HPPA|IA64|POWERPC64|S390X|SPARC64|GODSON64)
8387                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8388                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8389                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8390                 fi
8391                 ;;
8392             *) # assumption: everything else 32-bit
8393                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8394                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8395                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8396                 fi
8397                 ;;
8398         esac
8399     fi
8402 dnl ===================================================================
8403 dnl Checks for JDK.
8404 dnl ===================================================================
8406 # Whether all the complexity here actually is needed any more or not, no idea.
8408 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8409     _gij_longver=0
8410     AC_MSG_CHECKING([the installed JDK])
8411     if test -n "$JAVAINTERPRETER"; then
8412         dnl java -version sends output to stderr!
8413         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8414             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8415         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8416             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8417         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8418             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8419         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8420             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8421         else
8422             JDK=sun
8424             dnl Sun JDK specific tests
8425             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8426             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8428             if test "$_jdk_ver" -lt 10900; then
8429                 AC_MSG_ERROR([JDK is too old, you need at least 9 ($_jdk_ver < 10900)])
8430             fi
8431             if test "$_jdk_ver" -gt 10900; then
8432                 JAVA_CLASSPATH_NOT_SET=TRUE
8433             fi
8435             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8436             if test "$_os" = "WINNT"; then
8437                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8438             fi
8439             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8441             # set to limit VM usage for JunitTests
8442             JAVAIFLAGS=-Xmx64M
8443             # set to limit VM usage for javac
8444             JAVACFLAGS=-J-Xmx128M
8445         fi
8446     else
8447         AC_MSG_ERROR([Java not found. You need at least JDK 9])
8448     fi
8449 else
8450     if test -z "$ENABLE_JAVA"; then
8451         dnl Java disabled
8452         JAVA_HOME=
8453         export JAVA_HOME
8454     elif test "$cross_compiling" = "yes"; then
8455         # Just assume compatibility of build and host JDK
8456         JDK=$JDK_FOR_BUILD
8457         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8458     fi
8461 dnl ===================================================================
8462 dnl Checks for javac
8463 dnl ===================================================================
8464 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8465     javacompiler="javac"
8466     : ${JAVA_SOURCE_VER=8}
8467     : ${JAVA_TARGET_VER=8}
8468     if test -z "$with_jdk_home"; then
8469         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8470     else
8471         _javac_path="$with_jdk_home/bin/$javacompiler"
8472         dnl Check if there is a Java compiler at all.
8473         if test -x "$_javac_path"; then
8474             JAVACOMPILER=$_javac_path
8475         fi
8476     fi
8477     if test -z "$JAVACOMPILER"; then
8478         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8479     fi
8480     if test "$build_os" = "cygwin"; then
8481         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8482             JAVACOMPILER="${JAVACOMPILER}.exe"
8483         fi
8484         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8485     fi
8488 dnl ===================================================================
8489 dnl Checks for javadoc
8490 dnl ===================================================================
8491 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8492     if test -z "$with_jdk_home"; then
8493         AC_PATH_PROG(JAVADOC, javadoc)
8494     else
8495         _javadoc_path="$with_jdk_home/bin/javadoc"
8496         dnl Check if there is a javadoc at all.
8497         if test -x "$_javadoc_path"; then
8498             JAVADOC=$_javadoc_path
8499         else
8500             AC_PATH_PROG(JAVADOC, javadoc)
8501         fi
8502     fi
8503     if test -z "$JAVADOC"; then
8504         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8505     fi
8506     if test "$build_os" = "cygwin"; then
8507         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8508             JAVADOC="${JAVADOC}.exe"
8509         fi
8510         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8511     fi
8513     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8514     JAVADOCISGJDOC="yes"
8515     fi
8517 AC_SUBST(JAVADOC)
8518 AC_SUBST(JAVADOCISGJDOC)
8520 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8521     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8522     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8523         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8524            # try to recover first by looking whether we have an alternative
8525            # system as in Debian or newer SuSEs where following /usr/bin/javac
8526            # over /etc/alternatives/javac leads to the right bindir where we
8527            # just need to strip a bit away to get a valid JAVA_HOME
8528            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8529         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8530             # maybe only one level of symlink (e.g. on Mac)
8531             JAVA_HOME=$(readlink $JAVACOMPILER)
8532             if test "$(dirname $JAVA_HOME)" = "."; then
8533                 # we've got no path to trim back
8534                 JAVA_HOME=""
8535             fi
8536         else
8537             # else warn
8538             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8539             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8540             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8541             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8542         fi
8543         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8544         if test "$JAVA_HOME" != "/usr"; then
8545             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8546                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8547                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8548                 dnl Tiger already returns a JDK path...
8549                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8550             else
8551                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8552                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8553                 dnl that checks which version to run
8554                 if test -f "$JAVA_HOME"; then
8555                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8556                 fi
8557             fi
8558         fi
8559     fi
8560     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8562     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8563     if test -z "$JAVA_HOME"; then
8564         if test "x$with_jdk_home" = "x"; then
8565             cat > findhome.java <<_ACEOF
8566 [import java.io.File;
8568 class findhome
8570     public static void main(String args[])
8571     {
8572         String jrelocation = System.getProperty("java.home");
8573         File jre = new File(jrelocation);
8574         System.out.println(jre.getParent());
8575     }
8577 _ACEOF
8578             AC_MSG_CHECKING([if javac works])
8579             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8580             AC_TRY_EVAL(javac_cmd)
8581             if test $? = 0 -a -f ./findhome.class; then
8582                 AC_MSG_RESULT([javac works])
8583             else
8584                 echo "configure: javac test failed" >&5
8585                 cat findhome.java >&5
8586                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8587             fi
8588             AC_MSG_CHECKING([if gij knows its java.home])
8589             JAVA_HOME=`$JAVAINTERPRETER findhome`
8590             if test $? = 0 -a "$JAVA_HOME" != ""; then
8591                 AC_MSG_RESULT([$JAVA_HOME])
8592             else
8593                 echo "configure: java test failed" >&5
8594                 cat findhome.java >&5
8595                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8596             fi
8597             # clean-up after ourselves
8598             rm -f ./findhome.java ./findhome.class
8599         else
8600             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8601         fi
8602     fi
8604     # now check if $JAVA_HOME is really valid
8605     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8606         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8607             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8608             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8609             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
8610             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
8611             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
8612             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
8613         fi
8614     fi
8615     PathFormat "$JAVA_HOME"
8616     JAVA_HOME="$formatted_path"
8619 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
8620     "$_os" != Darwin
8621 then
8622     AC_MSG_CHECKING([for JAWT lib])
8623     if test "$_os" = WINNT; then
8624         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
8625         JAWTLIB=jawt.lib
8626     else
8627         case "$host_cpu" in
8628         arm*)
8629             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
8630             JAVA_ARCH=$my_java_arch
8631             ;;
8632         i*86)
8633             my_java_arch=i386
8634             ;;
8635         m68k)
8636             my_java_arch=m68k
8637             ;;
8638         powerpc)
8639             my_java_arch=ppc
8640             ;;
8641         powerpc64)
8642             my_java_arch=ppc64
8643             ;;
8644         powerpc64le)
8645             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
8646             JAVA_ARCH=$my_java_arch
8647             ;;
8648         sparc64)
8649             my_java_arch=sparcv9
8650             ;;
8651         x86_64)
8652             my_java_arch=amd64
8653             ;;
8654         *)
8655             my_java_arch=$host_cpu
8656             ;;
8657         esac
8658         # This is where JDK9 puts the library
8659         if test -e "$JAVA_HOME/lib/libjawt.so"; then
8660             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
8661         else
8662             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
8663         fi
8664         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
8665     fi
8666     AC_MSG_RESULT([$JAWTLIB])
8668 AC_SUBST(JAWTLIB)
8670 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
8671     case "$host_os" in
8673     aix*)
8674         JAVAINC="-I$JAVA_HOME/include"
8675         JAVAINC="$JAVAINC -I$JAVA_HOME/include/aix"
8676         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8677         ;;
8679     cygwin*|wsl*)
8680         JAVAINC="-I$JAVA_HOME/include/win32"
8681         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
8682         ;;
8684     darwin*|macos*)
8685         if test -d "$JAVA_HOME/include/darwin"; then
8686             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
8687         else
8688             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
8689         fi
8690         ;;
8692     dragonfly*)
8693         JAVAINC="-I$JAVA_HOME/include"
8694         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8695         ;;
8697     freebsd*)
8698         JAVAINC="-I$JAVA_HOME/include"
8699         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
8700         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
8701         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8702         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8703         ;;
8705     k*bsd*-gnu*)
8706         JAVAINC="-I$JAVA_HOME/include"
8707         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8708         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8709         ;;
8711     linux-gnu*)
8712         JAVAINC="-I$JAVA_HOME/include"
8713         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8714         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8715         ;;
8717     *netbsd*)
8718         JAVAINC="-I$JAVA_HOME/include"
8719         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
8720         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8721        ;;
8723     openbsd*)
8724         JAVAINC="-I$JAVA_HOME/include"
8725         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
8726         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8727         ;;
8729     solaris*)
8730         JAVAINC="-I$JAVA_HOME/include"
8731         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
8732         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8733         ;;
8734     esac
8736 SOLARINC="$SOLARINC $JAVAINC"
8738 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8739     JAVA_HOME_FOR_BUILD=$JAVA_HOME
8740     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
8741     JDK_FOR_BUILD=$JDK
8744 AC_SUBST(JAVACFLAGS)
8745 AC_SUBST(JAVACOMPILER)
8746 AC_SUBST(JAVAINTERPRETER)
8747 AC_SUBST(JAVAIFLAGS)
8748 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
8749 AC_SUBST(JAVA_CLASSPATH_NOT_SET)
8750 AC_SUBST(JAVA_HOME)
8751 AC_SUBST(JAVA_HOME_FOR_BUILD)
8752 AC_SUBST(JDK)
8753 AC_SUBST(JDK_FOR_BUILD)
8754 AC_SUBST(JAVA_SOURCE_VER)
8755 AC_SUBST(JAVA_TARGET_VER)
8758 dnl ===================================================================
8759 dnl Export file validation
8760 dnl ===================================================================
8761 AC_MSG_CHECKING([whether to enable export file validation])
8762 if test "$with_export_validation" != "no"; then
8763     if test -z "$ENABLE_JAVA"; then
8764         if test "$with_export_validation" = "yes"; then
8765             AC_MSG_ERROR([requested, but Java is disabled])
8766         else
8767             AC_MSG_RESULT([no, as Java is disabled])
8768         fi
8769     elif ! test -d "${SRC_ROOT}/schema"; then
8770         if test "$with_export_validation" = "yes"; then
8771             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
8772         else
8773             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
8774         fi
8775     else
8776         AC_MSG_RESULT([yes])
8777         AC_DEFINE(HAVE_EXPORT_VALIDATION)
8779         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
8780         if test -z "$ODFVALIDATOR"; then
8781             # remember to download the ODF toolkit with validator later
8782             AC_MSG_NOTICE([no odfvalidator found, will download it])
8783             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
8784             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
8786             # and fetch name of odfvalidator jar name from download.lst
8787             ODFVALIDATOR_JAR=`$SED -n -e "s/export *ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8788             AC_SUBST(ODFVALIDATOR_JAR)
8790             if test -z "$ODFVALIDATOR_JAR"; then
8791                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
8792             fi
8793         fi
8794         if test "$build_os" = "cygwin"; then
8795             # In case of Cygwin it will be executed from Windows,
8796             # so we need to run bash and absolute path to validator
8797             # so instead of "odfvalidator" it will be
8798             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8799             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
8800         else
8801             ODFVALIDATOR="sh $ODFVALIDATOR"
8802         fi
8803         AC_SUBST(ODFVALIDATOR)
8806         AC_PATH_PROGS(OFFICEOTRON, officeotron)
8807         if test -z "$OFFICEOTRON"; then
8808             # remember to download the officeotron with validator later
8809             AC_MSG_NOTICE([no officeotron found, will download it])
8810             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
8811             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
8813             # and fetch name of officeotron jar name from download.lst
8814             OFFICEOTRON_JAR=`$SED -n -e "s/export *OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8815             AC_SUBST(OFFICEOTRON_JAR)
8817             if test -z "$OFFICEOTRON_JAR"; then
8818                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
8819             fi
8820         else
8821             # check version of existing officeotron
8822             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
8823             if test 0"$OFFICEOTRON_VER" -lt 704; then
8824                 AC_MSG_ERROR([officeotron too old])
8825             fi
8826         fi
8827         if test "$build_os" = "cygwin"; then
8828             # In case of Cygwin it will be executed from Windows,
8829             # so we need to run bash and absolute path to validator
8830             # so instead of "odfvalidator" it will be
8831             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8832             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
8833         else
8834             OFFICEOTRON="sh $OFFICEOTRON"
8835         fi
8836     fi
8837     AC_SUBST(OFFICEOTRON)
8838 else
8839     AC_MSG_RESULT([no])
8842 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
8843 if test "$with_bffvalidator" != "no"; then
8844     AC_DEFINE(HAVE_BFFVALIDATOR)
8846     if test "$with_export_validation" = "no"; then
8847         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
8848     fi
8850     if test "$with_bffvalidator" = "yes"; then
8851         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
8852     else
8853         BFFVALIDATOR="$with_bffvalidator"
8854     fi
8856     if test "$build_os" = "cygwin"; then
8857         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
8858             AC_MSG_RESULT($BFFVALIDATOR)
8859         else
8860             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8861         fi
8862     elif test -n "$BFFVALIDATOR"; then
8863         # We are not in Cygwin but need to run Windows binary with wine
8864         AC_PATH_PROGS(WINE, wine)
8866         # so swap in a shell wrapper that converts paths transparently
8867         BFFVALIDATOR_EXE="$BFFVALIDATOR"
8868         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
8869         AC_SUBST(BFFVALIDATOR_EXE)
8870         AC_MSG_RESULT($BFFVALIDATOR)
8871     else
8872         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8873     fi
8874     AC_SUBST(BFFVALIDATOR)
8875 else
8876     AC_MSG_RESULT([no])
8879 dnl ===================================================================
8880 dnl Check for C preprocessor to use
8881 dnl ===================================================================
8882 AC_MSG_CHECKING([which C preprocessor to use in idlc])
8883 SYSTEM_UCPP_IS_GCC=
8884 if test -n "$with_idlc_cpp"; then
8885     AC_MSG_RESULT([$with_idlc_cpp])
8886     AC_PATH_PROG(SYSTEM_UCPP, $with_idlc_cpp)
8887     AC_MSG_CHECKING([if $with_idlc_cpp is GCC CPP])
8888     # ucpp will accept -v (to output version), warn about the others as unknown
8889     # and return 1 (due to -v)
8890     # gcc will accept -v (as verbose), --version (to output version) and -nostdinc
8891     # and return 0 (due to --version ) if all options are supported
8892     $SYSTEM_UCPP -v --version -nostdinc >/dev/null 2>/dev/null
8893     if test $? -eq 0;  then
8894         SYSTEM_UCPP_IS_GCC=TRUE
8895         AC_MSG_RESULT([yes])
8896     else
8897         AC_MSG_RESULT([no])
8898     fi
8899 else
8900     AC_MSG_RESULT([ucpp])
8901     AC_MSG_CHECKING([which ucpp to use])
8902     if test -n "$with_system_ucpp" -a "$with_system_ucpp" != "no"; then
8903         AC_MSG_RESULT([external])
8904         AC_PATH_PROG(SYSTEM_UCPP, ucpp)
8905     else
8906         AC_MSG_RESULT([internal])
8907         BUILD_TYPE="$BUILD_TYPE UCPP"
8908     fi
8910 AC_SUBST(SYSTEM_UCPP)
8911 AC_SUBST(SYSTEM_UCPP_IS_GCC)
8913 dnl ===================================================================
8914 dnl Check for epm (not needed for Windows)
8915 dnl ===================================================================
8916 AC_MSG_CHECKING([whether to enable EPM for packing])
8917 if test "$enable_epm" = "yes"; then
8918     AC_MSG_RESULT([yes])
8919     if test "$_os" != "WINNT"; then
8920         if test $_os = Darwin; then
8921             EPM=internal
8922         elif test -n "$with_epm"; then
8923             EPM=$with_epm
8924         else
8925             AC_PATH_PROG(EPM, epm, no)
8926         fi
8927         if test "$EPM" = "no" -o "$EPM" = "internal"; then
8928             AC_MSG_NOTICE([EPM will be built.])
8929             BUILD_TYPE="$BUILD_TYPE EPM"
8930             EPM=${WORKDIR}/UnpackedTarball/epm/epm
8931         else
8932             # Gentoo has some epm which is something different...
8933             AC_MSG_CHECKING([whether the found epm is the right epm])
8934             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
8935                 AC_MSG_RESULT([yes])
8936             else
8937                 AC_MSG_ERROR([no. Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8938             fi
8939             AC_MSG_CHECKING([epm version])
8940             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
8941             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
8942                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
8943                 AC_MSG_RESULT([OK, >= 3.7])
8944             else
8945                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
8946                 AC_MSG_ERROR([Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8947             fi
8948         fi
8949     fi
8951     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
8952         AC_MSG_CHECKING([for rpm])
8953         for a in "$RPM" rpmbuild rpm; do
8954             $a --usage >/dev/null 2> /dev/null
8955             if test $? -eq 0; then
8956                 RPM=$a
8957                 break
8958             else
8959                 $a --version >/dev/null 2> /dev/null
8960                 if test $? -eq 0; then
8961                     RPM=$a
8962                     break
8963                 fi
8964             fi
8965         done
8966         if test -z "$RPM"; then
8967             AC_MSG_ERROR([not found])
8968         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
8969             RPM_PATH=`which $RPM`
8970             AC_MSG_RESULT([$RPM_PATH])
8971             SCPDEFS="$SCPDEFS -DWITH_RPM"
8972         else
8973             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
8974         fi
8975     fi
8976     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
8977         AC_PATH_PROG(DPKG, dpkg, no)
8978         if test "$DPKG" = "no"; then
8979             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
8980         fi
8981     fi
8982     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
8983        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
8984         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
8985             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
8986                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
8987                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
8988                     AC_MSG_RESULT([yes])
8989                 else
8990                     AC_MSG_RESULT([no])
8991                     if echo "$PKGFORMAT" | $GREP -q rpm; then
8992                         _pt="rpm"
8993                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
8994                         add_warning "the rpms will need to be installed with --nodeps"
8995                     else
8996                         _pt="pkg"
8997                     fi
8998                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
8999                     add_warning "the ${_pt}s will not be relocatable"
9000                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
9001                                  relocation will work, you need to patch your epm with the
9002                                  patch in epm/epm-3.7.patch or build with
9003                                  --with-epm=internal which will build a suitable epm])
9004                 fi
9005             fi
9006         fi
9007     fi
9008     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9009         AC_PATH_PROG(PKGMK, pkgmk, no)
9010         if test "$PKGMK" = "no"; then
9011             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
9012         fi
9013     fi
9014     AC_SUBST(RPM)
9015     AC_SUBST(DPKG)
9016     AC_SUBST(PKGMK)
9017 else
9018     for i in $PKGFORMAT; do
9019         case "$i" in
9020         aix | bsd | deb | pkg | rpm | native | portable)
9021             AC_MSG_ERROR(
9022                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
9023             ;;
9024         esac
9025     done
9026     AC_MSG_RESULT([no])
9027     EPM=NO
9029 AC_SUBST(EPM)
9031 ENABLE_LWP=
9032 if test "$enable_lotuswordpro" = "yes"; then
9033     ENABLE_LWP="TRUE"
9035 AC_SUBST(ENABLE_LWP)
9037 dnl ===================================================================
9038 dnl Check for building ODK
9039 dnl ===================================================================
9040 if test "$enable_odk" != yes; then
9041     unset DOXYGEN
9042 else
9043     if test "$with_doxygen" = no; then
9044         AC_MSG_CHECKING([for doxygen])
9045         unset DOXYGEN
9046         AC_MSG_RESULT([no])
9047     else
9048         if test "$with_doxygen" = yes; then
9049             AC_PATH_PROG([DOXYGEN], [doxygen])
9050             if test -z "$DOXYGEN"; then
9051                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
9052             fi
9053             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
9054                 if ! dot -V 2>/dev/null; then
9055                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
9056                 fi
9057             fi
9058         else
9059             AC_MSG_CHECKING([for doxygen])
9060             DOXYGEN=$with_doxygen
9061             AC_MSG_RESULT([$DOXYGEN])
9062         fi
9063         if test -n "$DOXYGEN"; then
9064             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
9065             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
9066             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
9067                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
9068             fi
9069         fi
9070     fi
9072 AC_SUBST([DOXYGEN])
9074 AC_MSG_CHECKING([whether to build the ODK])
9075 if test "$enable_odk" = yes; then
9076     AC_MSG_RESULT([yes])
9077     BUILD_TYPE="$BUILD_TYPE ODK"
9078 else
9079     AC_MSG_RESULT([no])
9082 dnl ===================================================================
9083 dnl Check for system zlib
9084 dnl ===================================================================
9085 if test "$with_system_zlib" = "auto"; then
9086     case "$_os" in
9087     WINNT)
9088         with_system_zlib="$with_system_libs"
9089         ;;
9090     *)
9091         if test "$enable_fuzzers" != "yes"; then
9092             with_system_zlib=yes
9093         else
9094             with_system_zlib=no
9095         fi
9096         ;;
9097     esac
9100 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
9101 dnl and has no pkg-config for it at least on some tinderboxes,
9102 dnl so leaving that out for now
9103 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
9104 AC_MSG_CHECKING([which zlib to use])
9105 if test "$with_system_zlib" = "yes"; then
9106     AC_MSG_RESULT([external])
9107     SYSTEM_ZLIB=TRUE
9108     AC_CHECK_HEADER(zlib.h, [],
9109         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
9110     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
9111         [AC_MSG_ERROR(zlib not found or functional)], [])
9112 else
9113     AC_MSG_RESULT([internal])
9114     SYSTEM_ZLIB=
9115     BUILD_TYPE="$BUILD_TYPE ZLIB"
9116     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
9117     ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
9119 AC_SUBST(ZLIB_CFLAGS)
9120 AC_SUBST(ZLIB_LIBS)
9121 AC_SUBST(SYSTEM_ZLIB)
9123 dnl ===================================================================
9124 dnl Check for system jpeg
9125 dnl ===================================================================
9126 AC_MSG_CHECKING([which libjpeg to use])
9127 if test "$with_system_jpeg" = "yes"; then
9128     AC_MSG_RESULT([external])
9129     SYSTEM_LIBJPEG=TRUE
9130     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
9131         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
9132     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
9133         [AC_MSG_ERROR(jpeg library not found or functional)], [])
9134 else
9135     SYSTEM_LIBJPEG=
9136     AC_MSG_RESULT([internal, libjpeg-turbo])
9137     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
9139     case "$host_cpu" in
9140     x86_64 | amd64 | i*86 | x86 | ia32)
9141         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
9142         if test -z "$NASM" -a "$build_os" = "cygwin"; then
9143             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
9144                 NASM="$LODE_HOME/opt/bin/nasm"
9145             elif test -x "/opt/lo/bin/nasm"; then
9146                 NASM="/opt/lo/bin/nasm"
9147             fi
9148         fi
9150         if test -n "$NASM"; then
9151             AC_MSG_CHECKING([for object file format of host system])
9152             case "$host_os" in
9153               cygwin* | mingw* | pw32* | wsl*)
9154                 case "$host_cpu" in
9155                   x86_64)
9156                     objfmt='Win64-COFF'
9157                     ;;
9158                   *)
9159                     objfmt='Win32-COFF'
9160                     ;;
9161                 esac
9162               ;;
9163               msdosdjgpp* | go32*)
9164                 objfmt='COFF'
9165               ;;
9166               os2-emx*) # not tested
9167                 objfmt='MSOMF' # obj
9168               ;;
9169               linux*coff* | linux*oldld*)
9170                 objfmt='COFF' # ???
9171               ;;
9172               linux*aout*)
9173                 objfmt='a.out'
9174               ;;
9175               linux*)
9176                 case "$host_cpu" in
9177                   x86_64)
9178                     objfmt='ELF64'
9179                     ;;
9180                   *)
9181                     objfmt='ELF'
9182                     ;;
9183                 esac
9184               ;;
9185               kfreebsd* | freebsd* | netbsd* | openbsd*)
9186                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9187                   objfmt='BSD-a.out'
9188                 else
9189                   case "$host_cpu" in
9190                     x86_64 | amd64)
9191                       objfmt='ELF64'
9192                       ;;
9193                     *)
9194                       objfmt='ELF'
9195                       ;;
9196                   esac
9197                 fi
9198               ;;
9199               solaris* | sunos* | sysv* | sco*)
9200                 case "$host_cpu" in
9201                   x86_64)
9202                     objfmt='ELF64'
9203                     ;;
9204                   *)
9205                     objfmt='ELF'
9206                     ;;
9207                 esac
9208               ;;
9209               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9210                 case "$host_cpu" in
9211                   x86_64)
9212                     objfmt='Mach-O64'
9213                     ;;
9214                   *)
9215                     objfmt='Mach-O'
9216                     ;;
9217                 esac
9218               ;;
9219               *)
9220                 objfmt='ELF ?'
9221               ;;
9222             esac
9224             AC_MSG_RESULT([$objfmt])
9225             if test "$objfmt" = 'ELF ?'; then
9226               objfmt='ELF'
9227               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9228             fi
9230             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9231             case "$objfmt" in
9232               MSOMF)      NAFLAGS='-fobj -DOBJ32 -DPIC';;
9233               Win32-COFF) NAFLAGS='-fwin32 -DWIN32 -DPIC';;
9234               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__ -DPIC';;
9235               COFF)       NAFLAGS='-fcoff -DCOFF -DPIC';;
9236               a.out)      NAFLAGS='-faout -DAOUT -DPIC';;
9237               BSD-a.out)  NAFLAGS='-faoutb -DAOUT -DPIC';;
9238               ELF)        NAFLAGS='-felf -DELF -DPIC';;
9239               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__ -DPIC';;
9240               RDF)        NAFLAGS='-frdf -DRDF -DPIC';;
9241               Mach-O)     NAFLAGS='-fmacho -DMACHO -DPIC';;
9242               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__ -DPIC';;
9243             esac
9244             AC_MSG_RESULT([$NAFLAGS])
9246             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9247             cat > conftest.asm << EOF
9248             [%line __oline__ "configure"
9249                     section .text
9250                     global  _main,main
9251             _main:
9252             main:   xor     eax,eax
9253                     ret
9254             ]
9256             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9257             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9258               AC_MSG_RESULT(yes)
9259             else
9260               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9261               cat conftest.asm >&AS_MESSAGE_LOG_FD
9262               rm -rf conftest*
9263               AC_MSG_RESULT(no)
9264               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9265               NASM=""
9266             fi
9268         fi
9270         if test -z "$NASM"; then
9271 cat << _EOS
9272 ****************************************************************************
9273 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9274 To get one please:
9276 _EOS
9277             if test "$build_os" = "cygwin"; then
9278 cat << _EOS
9279 install a pre-compiled binary for Win32
9281 mkdir -p /opt/lo/bin
9282 cd /opt/lo/bin
9283 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9284 chmod +x nasm
9286 or get and install one from http://www.nasm.us/
9288 Then re-run autogen.sh
9290 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9291 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`which nasm\` finds it.
9293 _EOS
9294             else
9295 cat << _EOS
9296 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md
9298 _EOS
9299             fi
9300             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9301             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9302         fi
9303       ;;
9304     esac
9307 AC_SUBST(NASM)
9308 AC_SUBST(NAFLAGS)
9309 AC_SUBST(LIBJPEG_CFLAGS)
9310 AC_SUBST(LIBJPEG_LIBS)
9311 AC_SUBST(SYSTEM_LIBJPEG)
9313 dnl ===================================================================
9314 dnl Check for system clucene
9315 dnl ===================================================================
9316 dnl we should rather be using
9317 dnl libo_CHECK_SYSTEM_MODULE([clucence],[CLUCENE],[liblucence-core]) here
9318 dnl but the contribs-lib check seems tricky
9319 if test "$enable_xmlhelp" = yes -o "$enable_extension_integration" = yes; then
9320 AC_MSG_CHECKING([which clucene to use])
9321 if test "$with_system_clucene" = "yes"; then
9322     AC_MSG_RESULT([external])
9323     SYSTEM_CLUCENE=TRUE
9324     PKG_CHECK_MODULES(CLUCENE, libclucene-core)
9325     CLUCENE_CFLAGS=[$(printf '%s' "$CLUCENE_CFLAGS" | sed -e 's@-I[^ ]*/CLucene/ext@@' -e "s/-I/${ISYSTEM?}/g")]
9326     FilterLibs "${CLUCENE_LIBS}"
9327     CLUCENE_LIBS="${filteredlibs}"
9328     AC_LANG_PUSH([C++])
9329     save_CXXFLAGS=$CXXFLAGS
9330     save_CPPFLAGS=$CPPFLAGS
9331     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9332     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9333     dnl http://sourceforge.net/tracker/index.php?func=detail&aid=3392466&group_id=80013&atid=558446
9334     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9335     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9336                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9337     CXXFLAGS=$save_CXXFLAGS
9338     CPPFLAGS=$save_CPPFLAGS
9339     AC_LANG_POP([C++])
9341     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9342 else
9343     AC_MSG_RESULT([internal])
9344     SYSTEM_CLUCENE=
9345     BUILD_TYPE="$BUILD_TYPE CLUCENE"
9348 AC_SUBST(SYSTEM_CLUCENE)
9349 AC_SUBST(CLUCENE_CFLAGS)
9350 AC_SUBST(CLUCENE_LIBS)
9352 dnl ===================================================================
9353 dnl Check for system expat
9354 dnl ===================================================================
9355 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9357 dnl ===================================================================
9358 dnl Check for system xmlsec
9359 dnl ===================================================================
9360 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.28])
9362 AC_MSG_CHECKING([whether to enable Embedded OpenType support])
9363 if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_eot" = "yes"; then
9364     ENABLE_EOT="TRUE"
9365     AC_DEFINE([ENABLE_EOT])
9366     AC_MSG_RESULT([yes])
9368     libo_CHECK_SYSTEM_MODULE([libeot],[LIBEOT],[libeot >= 0.01])
9369 else
9370     ENABLE_EOT=
9371     AC_MSG_RESULT([no])
9373 AC_SUBST([ENABLE_EOT])
9375 dnl ===================================================================
9376 dnl Check for DLP libs
9377 dnl ===================================================================
9378 AS_IF([test "$COM" = "MSC"],
9379       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9380       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9382 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1],["-I${WORKDIR}/UnpackedTarball/librevenge/inc"],["-L${librevenge_libdir} -lrevenge-0.0"])
9384 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9386 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9388 AS_IF([test "$COM" = "MSC"],
9389       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9390       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9392 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10],["-I${WORKDIR}/UnpackedTarball/libwpd/inc"],["-L${libwpd_libdir} -lwpd-0.10"])
9394 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9396 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9397 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.12])
9399 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9401 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9403 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9405 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.1])
9406 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.21])
9408 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9409 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10])
9411 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9413 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9414 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9416 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9418 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9420 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9422 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9424 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9425 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9427 dnl ===================================================================
9428 dnl Check for system lcms2
9429 dnl ===================================================================
9430 if test "$with_system_lcms2" != "yes"; then
9431     SYSTEM_LCMS2=
9433 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2],["-I${WORKDIR}/UnpackedTarball/lcms2/include"],["-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"])
9434 if test "$GCC" = "yes"; then
9435     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9437 if test "$COM" = "MSC"; then # override the above
9438     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9441 dnl ===================================================================
9442 dnl Check for system cppunit
9443 dnl ===================================================================
9444 if test "$_os" != "Android" ; then
9445     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9448 dnl ===================================================================
9449 dnl Check whether freetype is available
9450 dnl ===================================================================
9451 if test "$using_freetype_fontconfig" = yes; then
9452     AC_MSG_CHECKING([which freetype to use])
9454 if test "$using_freetype_fontconfig" = yes -a "$test_system_freetype" != no; then
9455     AC_MSG_RESULT([external])
9456     # FreeType has 3 different kinds of versions
9457     # * release, like 2.4.10
9458     # * libtool, like 13.0.7 (this what pkg-config returns)
9459     # * soname
9460     # FreeType's docs/VERSION.DLL provides a table mapping between the three
9461     #
9462     # 9.9.3 is 2.2.0
9463     # When the minimal version is at least 2.8.1, remove Skia's check down below.
9464     PKG_CHECK_MODULES(FREETYPE, freetype2 >= 9.9.3)
9465     FREETYPE_CFLAGS=$(printf '%s' "$FREETYPE_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9466     FilterLibs "${FREETYPE_LIBS}"
9467     FREETYPE_LIBS="${filteredlibs}"
9468     SYSTEM_FREETYPE=TRUE
9469 elif test "$using_freetype_fontconfig" = yes; then
9470     AC_MSG_RESULT([internal])
9471     FREETYPE_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"
9472     if test "x$ac_config_site_64bit_host" = xYES; then
9473         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9474     else
9475         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9476     fi
9477     BUILD_TYPE="$BUILD_TYPE FREETYPE"
9479 AC_SUBST(FREETYPE_CFLAGS)
9480 AC_SUBST(FREETYPE_LIBS)
9481 AC_SUBST([SYSTEM_FREETYPE])
9483 # ===================================================================
9484 # Check for system libxslt
9485 # to prevent incompatibilities between internal libxml2 and external libxslt,
9486 # or vice versa, use with_system_libxml here
9487 # ===================================================================
9488 if test "$with_system_libxml" = "auto"; then
9489     case "$_os" in
9490     WINNT|iOS|Android)
9491         with_system_libxml="$with_system_libs"
9492         ;;
9493     Emscripten)
9494         with_system_libxml=no
9495         ;;
9496     *)
9497         if test "$enable_fuzzers" != "yes"; then
9498             with_system_libxml=yes
9499         else
9500             with_system_libxml=no
9501         fi
9502         ;;
9503     esac
9506 AC_MSG_CHECKING([which libxslt to use])
9507 if test "$with_system_libxml" = "yes"; then
9508     AC_MSG_RESULT([external])
9509     SYSTEM_LIBXSLT=TRUE
9510     if test "$_os" = "Darwin"; then
9511         dnl make sure to use SDK path
9512         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9513         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9514         dnl omit -L/usr/lib
9515         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9516         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9517     else
9518         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9519         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9520         FilterLibs "${LIBXSLT_LIBS}"
9521         LIBXSLT_LIBS="${filteredlibs}"
9522         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9523         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9524         FilterLibs "${LIBEXSLT_LIBS}"
9525         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9526     fi
9528     dnl Check for xsltproc
9529     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9530     if test "$XSLTPROC" = "no"; then
9531         AC_MSG_ERROR([xsltproc is required])
9532     fi
9533 else
9534     AC_MSG_RESULT([internal])
9535     SYSTEM_LIBXSLT=
9536     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9538 AC_SUBST(SYSTEM_LIBXSLT)
9539 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9540     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9542 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9544 AC_SUBST(LIBEXSLT_CFLAGS)
9545 AC_SUBST(LIBEXSLT_LIBS)
9546 AC_SUBST(LIBXSLT_CFLAGS)
9547 AC_SUBST(LIBXSLT_LIBS)
9548 AC_SUBST(XSLTPROC)
9550 # ===================================================================
9551 # Check for system libxml
9552 # ===================================================================
9553 AC_MSG_CHECKING([which libxml to use])
9554 if test "$with_system_libxml" = "yes"; then
9555     AC_MSG_RESULT([external])
9556     SYSTEM_LIBXML=TRUE
9557     if test "$_os" = "Darwin"; then
9558         dnl make sure to use SDK path
9559         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9560         dnl omit -L/usr/lib
9561         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9562     elif test $_os = iOS; then
9563         dnl make sure to use SDK path
9564         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9565         LIBXML_CFLAGS="-I$usr/include/libxml2"
9566         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9567     else
9568         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9569         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9570         FilterLibs "${LIBXML_LIBS}"
9571         LIBXML_LIBS="${filteredlibs}"
9572     fi
9574     dnl Check for xmllint
9575     AC_PATH_PROG(XMLLINT, xmllint, no)
9576     if test "$XMLLINT" = "no"; then
9577         AC_MSG_ERROR([xmllint is required])
9578     fi
9579 else
9580     AC_MSG_RESULT([internal])
9581     SYSTEM_LIBXML=
9582     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9583     if test "$COM" = "MSC"; then
9584         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9585     fi
9586     if test "$COM" = "MSC"; then
9587         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9588     else
9589         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9590         if test "$_os" = Android; then
9591             LIBXML_LIBS="$LIBXML_LIBS -lm"
9592         fi
9593     fi
9594     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9596 AC_SUBST(SYSTEM_LIBXML)
9597 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9598     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9600 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9601 AC_SUBST(LIBXML_CFLAGS)
9602 AC_SUBST(LIBXML_LIBS)
9603 AC_SUBST(XMLLINT)
9605 # =====================================================================
9606 # Checking for a Python interpreter with version >= 3.3.
9607 # Optionally user can pass an option to configure, i. e.
9608 # ./configure PYTHON=/usr/bin/python
9609 # =====================================================================
9610 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9611     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9612     # unless PYTHON is defined as above which allows 'system'
9613     enable_python=internal
9615 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9616     if test -n "$PYTHON"; then
9617         PYTHON_FOR_BUILD=$PYTHON
9618     else
9619         # This allows a lack of system python with no error, we use internal one in that case.
9620         AM_PATH_PYTHON([3.3],, [:])
9621         # Clean PYTHON_VERSION checked below if cross-compiling
9622         PYTHON_VERSION=""
9623         if test "$PYTHON" != ":"; then
9624             PYTHON_FOR_BUILD=$PYTHON
9625         fi
9626     fi
9628 AC_SUBST(PYTHON_FOR_BUILD)
9630 # Checks for Python to use for Pyuno
9631 AC_MSG_CHECKING([which Python to use for Pyuno])
9632 case "$enable_python" in
9633 no|disable)
9634     if test -z $PYTHON_FOR_BUILD; then
9635         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9636         # requirement from the choice whether to include Python stuff in the installer, but why
9637         # bother?
9638         if test "$cross_compiling" = yes; then
9639             enable_python=system
9640         else
9641             AC_MSG_ERROR([Python is required at build time.])
9642         fi
9643     fi
9644     enable_python=no
9645     AC_MSG_RESULT([none])
9646     ;;
9647 ""|yes|auto)
9648     if test "$DISABLE_SCRIPTING" = TRUE -a -n "$PYTHON_FOR_BUILD"; then
9649         AC_MSG_RESULT([no, overridden by --disable-scripting])
9650         enable_python=no
9651     elif test $build_os = cygwin; then
9652         dnl When building on Windows we don't attempt to use any installed
9653         dnl "system"  Python.
9654         AC_MSG_RESULT([fully internal])
9655         enable_python=internal
9656     elif test "$cross_compiling" = yes; then
9657         AC_MSG_RESULT([system])
9658         enable_python=system
9659     else
9660         # Unset variables set by the above AM_PATH_PYTHON so that
9661         # we actually do check anew.
9662         AC_MSG_RESULT([])
9663         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
9664         AM_PATH_PYTHON([3.3],, [:])
9665         AC_MSG_CHECKING([which Python to use for Pyuno])
9666         if test "$PYTHON" = ":"; then
9667             if test -z "$PYTHON_FOR_BUILD"; then
9668                 AC_MSG_RESULT([fully internal])
9669             else
9670                 AC_MSG_RESULT([internal])
9671             fi
9672             enable_python=internal
9673         else
9674             AC_MSG_RESULT([system])
9675             enable_python=system
9676         fi
9677     fi
9678     ;;
9679 internal)
9680     AC_MSG_RESULT([internal])
9681     ;;
9682 fully-internal)
9683     AC_MSG_RESULT([fully internal])
9684     enable_python=internal
9685     ;;
9686 system)
9687     AC_MSG_RESULT([system])
9688     if test "$_os" = Darwin -a -z "$PYTHON"; then
9689         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
9690     fi
9691     ;;
9693     AC_MSG_ERROR([Incorrect --enable-python option])
9694     ;;
9695 esac
9697 if test $enable_python != no; then
9698     BUILD_TYPE="$BUILD_TYPE PYUNO"
9701 if test $enable_python = system; then
9702     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
9703         # Fallback: Accept these in the environment, or as set above
9704         # for MacOSX.
9705         :
9706     elif test "$cross_compiling" != yes; then
9707         # Unset variables set by the above AM_PATH_PYTHON so that
9708         # we actually do check anew.
9709         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
9710         # This causes an error if no python command is found
9711         AM_PATH_PYTHON([3.3])
9712         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
9713         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
9714         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
9715         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
9716         if test -z "$PKG_CONFIG"; then
9717             PYTHON_CFLAGS="-I$python_include"
9718             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9719         elif $PKG_CONFIG --exists python-$python_version-embed; then
9720             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
9721             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
9722         elif $PKG_CONFIG --exists python-$python_version; then
9723             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
9724             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
9725         else
9726             PYTHON_CFLAGS="-I$python_include"
9727             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9728         fi
9729         FilterLibs "${PYTHON_LIBS}"
9730         PYTHON_LIBS="${filteredlibs}"
9731     else
9732         dnl How to find out the cross-compilation Python installation path?
9733         AC_MSG_CHECKING([for python version])
9734         AS_IF([test -n "$PYTHON_VERSION"],
9735               [AC_MSG_RESULT([$PYTHON_VERSION])],
9736               [AC_MSG_RESULT([not found])
9737                AC_MSG_ERROR([no usable python found])])
9738         test -n "$PYTHON_CFLAGS" && break
9739     fi
9741     dnl Check if the headers really work
9742     save_CPPFLAGS="$CPPFLAGS"
9743     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
9744     AC_CHECK_HEADER(Python.h)
9745     CPPFLAGS="$save_CPPFLAGS"
9747     # let the PYTHON_FOR_BUILD match the same python installation that
9748     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
9749     # better for PythonTests.
9750     PYTHON_FOR_BUILD=$PYTHON
9753 if test "$with_lxml" != no; then
9754     if test -z "$PYTHON_FOR_BUILD"; then
9755         case $build_os in
9756             cygwin)
9757                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
9758                 ;;
9759             *)
9760                 if test "$cross_compiling" != yes ; then
9761                     BUILD_TYPE="$BUILD_TYPE LXML"
9762                 fi
9763                 ;;
9764         esac
9765     else
9766         AC_MSG_CHECKING([for python lxml])
9767         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
9768             AC_MSG_RESULT([yes])
9769         else
9770             case $build_os in
9771                 cygwin)
9772                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
9773                     ;;
9774                 *)
9775                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
9776                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
9777                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
9778                         else
9779                             BUILD_TYPE="$BUILD_TYPE LXML"
9780                             AC_MSG_RESULT([no, using internal lxml])
9781                         fi
9782                     else
9783                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
9784                     fi
9785                     ;;
9786             esac
9787         fi
9788     fi
9791 dnl By now enable_python should be "system", "internal" or "no"
9792 case $enable_python in
9793 system)
9794     SYSTEM_PYTHON=TRUE
9796     if test "x$ac_cv_header_Python_h" != "xyes"; then
9797        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
9798     fi
9800     AC_LANG_PUSH(C)
9801     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
9802     AC_MSG_CHECKING([for correct python library version])
9803        AC_RUN_IFELSE([AC_LANG_SOURCE([[
9804 #include <Python.h>
9806 int main(int argc, char **argv) {
9807    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
9808    else return 1;
9810        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
9811     AC_LANG_POP(C)
9813     dnl FIXME Check if the Python library can be linked with, too?
9814     ;;
9816 internal)
9817     SYSTEM_PYTHON=
9818     PYTHON_VERSION_MAJOR=3
9819     PYTHON_VERSION_MINOR=8
9820     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.10
9821     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
9822         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
9823     fi
9824     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
9825     BUILD_TYPE="$BUILD_TYPE PYTHON"
9826     if test "$OS" = LINUX -o "$OS" = WNT ; then
9827         BUILD_TYPE="$BUILD_TYPE LIBFFI"
9828     fi
9829     # Embedded Python dies without Home set
9830     if test "$HOME" = ""; then
9831         export HOME=""
9832     fi
9833     ;;
9835     DISABLE_PYTHON=TRUE
9836     SYSTEM_PYTHON=
9837     ;;
9839     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
9840     ;;
9841 esac
9843 AC_SUBST(DISABLE_PYTHON)
9844 AC_SUBST(SYSTEM_PYTHON)
9845 AC_SUBST(PYTHON_CFLAGS)
9846 AC_SUBST(PYTHON_LIBS)
9847 AC_SUBST(PYTHON_VERSION)
9848 AC_SUBST(PYTHON_VERSION_MAJOR)
9849 AC_SUBST(PYTHON_VERSION_MINOR)
9851 AC_MSG_CHECKING([whether to build LibreLogo])
9852 case "$enable_python" in
9853 no|disable)
9854     AC_MSG_RESULT([no; Python disabled])
9855     ;;
9857     if test "${enable_librelogo}" = "no"; then
9858         AC_MSG_RESULT([no])
9859     else
9860         AC_MSG_RESULT([yes])
9861         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
9862         AC_DEFINE([ENABLE_LIBRELOGO],1)
9863     fi
9864     ;;
9865 esac
9866 AC_SUBST(ENABLE_LIBRELOGO)
9868 ENABLE_MARIADBC=
9869 MARIADBC_MAJOR=1
9870 MARIADBC_MINOR=0
9871 MARIADBC_MICRO=2
9872 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
9873 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
9874     ENABLE_MARIADBC=TRUE
9875     AC_MSG_RESULT([yes])
9876     BUILD_TYPE="$BUILD_TYPE MARIADBC"
9877 else
9878     AC_MSG_RESULT([no])
9880 AC_SUBST(ENABLE_MARIADBC)
9881 AC_SUBST(MARIADBC_MAJOR)
9882 AC_SUBST(MARIADBC_MINOR)
9883 AC_SUBST(MARIADBC_MICRO)
9885 if test "$ENABLE_MARIADBC" = "TRUE"; then
9886     dnl ===================================================================
9887     dnl Check for system MariaDB
9888     dnl ===================================================================
9889     AC_MSG_CHECKING([which MariaDB to use])
9890     if test "$with_system_mariadb" = "yes"; then
9891         AC_MSG_RESULT([external])
9892         SYSTEM_MARIADB_CONNECTOR_C=TRUE
9893         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
9894         if test -z "$MARIADBCONFIG"; then
9895             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
9896             if test -z "$MARIADBCONFIG"; then
9897                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
9898                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
9899             fi
9900         fi
9901         AC_MSG_CHECKING([MariaDB version])
9902         MARIADB_VERSION=`$MARIADBCONFIG --version`
9903         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
9904         if test "$MARIADB_MAJOR" -ge "5"; then
9905             AC_MSG_RESULT([OK])
9906         else
9907             AC_MSG_ERROR([too old, use 5.0.x or later])
9908         fi
9909         AC_MSG_CHECKING([for MariaDB Client library])
9910         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
9911         if test "$COM_IS_CLANG" = TRUE; then
9912             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
9913         fi
9914         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
9915         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
9916         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
9917         dnl linux32:
9918         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
9919             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
9920             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
9921                 | sed -e 's|/lib64/|/lib/|')
9922         fi
9923         FilterLibs "${MARIADB_LIBS}"
9924         MARIADB_LIBS="${filteredlibs}"
9925         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
9926         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
9927         if test "$enable_bundle_mariadb" = "yes"; then
9928             AC_MSG_RESULT([yes])
9929             BUNDLE_MARIADB_CONNECTOR_C=TRUE
9930             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
9932 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
9934 /g' | grep -E '(mysqlclient|mariadb)')
9935             if test "$_os" = "Darwin"; then
9936                 LIBMARIADB=${LIBMARIADB}.dylib
9937             elif test "$_os" = "WINNT"; then
9938                 LIBMARIADB=${LIBMARIADB}.dll
9939             else
9940                 LIBMARIADB=${LIBMARIADB}.so
9941             fi
9942             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
9943             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
9944             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
9945                 AC_MSG_RESULT([found.])
9946                 PathFormat "$LIBMARIADB_PATH"
9947                 LIBMARIADB_PATH="$formatted_path"
9948             else
9949                 AC_MSG_ERROR([not found.])
9950             fi
9951         else
9952             AC_MSG_RESULT([no])
9953             BUNDLE_MARIADB_CONNECTOR_C=
9954         fi
9955     else
9956         AC_MSG_RESULT([internal])
9957         SYSTEM_MARIADB_CONNECTOR_C=
9958         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
9959         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
9960         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
9961     fi
9963     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
9964     AC_SUBST(MARIADB_CFLAGS)
9965     AC_SUBST(MARIADB_LIBS)
9966     AC_SUBST(LIBMARIADB)
9967     AC_SUBST(LIBMARIADB_PATH)
9968     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
9971 dnl ===================================================================
9972 dnl Check for system hsqldb
9973 dnl ===================================================================
9974 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
9975     HSQLDB_USE_JDBC_4_1=
9976     AC_MSG_CHECKING([which hsqldb to use])
9977     if test "$with_system_hsqldb" = "yes"; then
9978         AC_MSG_RESULT([external])
9979         SYSTEM_HSQLDB=TRUE
9980         if test -z $HSQLDB_JAR; then
9981             HSQLDB_JAR=/usr/share/java/hsqldb.jar
9982         fi
9983         if ! test -f $HSQLDB_JAR; then
9984                AC_MSG_ERROR(hsqldb.jar not found.)
9985         fi
9986         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
9987         export HSQLDB_JAR
9988         if $PERL -e \
9989            'use Archive::Zip;
9990             my $file = "$ENV{'HSQLDB_JAR'}";
9991             my $zip = Archive::Zip->new( $file );
9992             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
9993             if ( $mf =~ m/Specification-Version: 1.8.*/ )
9994             {
9995                 push @l, split(/\n/, $mf);
9996                 foreach my $line (@l)
9997                 {
9998                     if ($line =~ m/Specification-Version:/)
9999                     {
10000                         ($t, $version) = split (/:/,$line);
10001                         $version =~ s/^\s//;
10002                         ($a, $b, $c, $d) = split (/\./,$version);
10003                         if ($c == "0" && $d > "8")
10004                         {
10005                             exit 0;
10006                         }
10007                         else
10008                         {
10009                             exit 1;
10010                         }
10011                     }
10012                 }
10013             }
10014             else
10015             {
10016                 exit 1;
10017             }'; then
10018             AC_MSG_RESULT([yes])
10019         else
10020             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
10021         fi
10022     else
10023         AC_MSG_RESULT([internal])
10024         SYSTEM_HSQLDB=
10025         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10026         NEED_ANT=TRUE
10027         AC_MSG_CHECKING([whether hsqldb should be built with JDBC 4.1])
10028         javanumver=`$JAVAINTERPRETER -version 2>&1 | $AWK -v num=true -f $SRC_ROOT/solenv/bin/getcompver.awk`
10029         if expr "$javanumver" '>=' 000100060000 > /dev/null; then
10030             AC_MSG_RESULT([yes])
10031             HSQLDB_USE_JDBC_4_1=TRUE
10032         else
10033             AC_MSG_RESULT([no])
10034         fi
10035     fi
10036 else
10037     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
10038         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10039     fi
10041 AC_SUBST(SYSTEM_HSQLDB)
10042 AC_SUBST(HSQLDB_JAR)
10043 AC_SUBST([HSQLDB_USE_JDBC_4_1])
10045 dnl ===================================================================
10046 dnl Check for PostgreSQL stuff
10047 dnl ===================================================================
10048 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
10049 if test "x$enable_postgresql_sdbc" != "xno"; then
10050     AC_MSG_RESULT([yes])
10051     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
10053     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
10054         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
10055     fi
10056     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
10057         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
10058     fi
10060     postgres_interface=""
10061     if test "$with_system_postgresql" = "yes"; then
10062         postgres_interface="external PostgreSQL"
10063         SYSTEM_POSTGRESQL=TRUE
10064         if test "$_os" = Darwin; then
10065             supp_path=''
10066             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
10067                 pg_supp_path="$P_SEP$d$pg_supp_path"
10068             done
10069         fi
10070         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
10071         if test -n "$PGCONFIG"; then
10072             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
10073             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
10074         else
10075             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
10076               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
10077               POSTGRESQL_LIB=$POSTGRESQL_LIBS
10078             ],[
10079               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
10080             ])
10081         fi
10082         FilterLibs "${POSTGRESQL_LIB}"
10083         POSTGRESQL_LIB="${filteredlibs}"
10084     else
10085         # if/when anything else than PostgreSQL uses Kerberos,
10086         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
10087         WITH_KRB5=
10088         WITH_GSSAPI=
10089         case "$_os" in
10090         Darwin)
10091             # macOS has system MIT Kerberos 5 since 10.4
10092             if test "$with_krb5" != "no"; then
10093                 WITH_KRB5=TRUE
10094                 save_LIBS=$LIBS
10095                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
10096                 # that the libraries where these functions are located on macOS will change, is it?
10097                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10098                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10099                 KRB5_LIBS=$LIBS
10100                 LIBS=$save_LIBS
10101                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10102                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10103                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10104                 LIBS=$save_LIBS
10105             fi
10106             if test "$with_gssapi" != "no"; then
10107                 WITH_GSSAPI=TRUE
10108                 save_LIBS=$LIBS
10109                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10110                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10111                 GSSAPI_LIBS=$LIBS
10112                 LIBS=$save_LIBS
10113             fi
10114             ;;
10115         WINNT)
10116             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
10117                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
10118             fi
10119             ;;
10120         Linux|GNU|*BSD|DragonFly)
10121             if test "$with_krb5" != "no"; then
10122                 WITH_KRB5=TRUE
10123                 save_LIBS=$LIBS
10124                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10125                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10126                 KRB5_LIBS=$LIBS
10127                 LIBS=$save_LIBS
10128                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10129                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10130                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10131                 LIBS=$save_LIBS
10132             fi
10133             if test "$with_gssapi" != "no"; then
10134                 WITH_GSSAPI=TRUE
10135                 save_LIBS=$LIBS
10136                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10137                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10138                 GSSAPI_LIBS=$LIBS
10139                 LIBS=$save_LIBS
10140             fi
10141             ;;
10142         *)
10143             if test "$with_krb5" = "yes"; then
10144                 WITH_KRB5=TRUE
10145                 save_LIBS=$LIBS
10146                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10147                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10148                 KRB5_LIBS=$LIBS
10149                 LIBS=$save_LIBS
10150                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10151                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10152                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10153                 LIBS=$save_LIBS
10154             fi
10155             if test "$with_gssapi" = "yes"; then
10156                 WITH_GSSAPI=TRUE
10157                 save_LIBS=$LIBS
10158                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10159                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10160                 LIBS=$save_LIBS
10161                 GSSAPI_LIBS=$LIBS
10162             fi
10163         esac
10165         if test -n "$with_libpq_path"; then
10166             SYSTEM_POSTGRESQL=TRUE
10167             postgres_interface="external libpq"
10168             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
10169             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
10170         else
10171             SYSTEM_POSTGRESQL=
10172             postgres_interface="internal"
10173             POSTGRESQL_LIB=""
10174             POSTGRESQL_INC="%OVERRIDE_ME%"
10175             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10176         fi
10177     fi
10179     AC_MSG_CHECKING([PostgreSQL C interface])
10180     AC_MSG_RESULT([$postgres_interface])
10182     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10183         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10184         save_CFLAGS=$CFLAGS
10185         save_CPPFLAGS=$CPPFLAGS
10186         save_LIBS=$LIBS
10187         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10188         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10189         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10190         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10191             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10192         CFLAGS=$save_CFLAGS
10193         CPPFLAGS=$save_CPPFLAGS
10194         LIBS=$save_LIBS
10195     fi
10196     BUILD_POSTGRESQL_SDBC=TRUE
10197 else
10198     AC_MSG_RESULT([no])
10200 AC_SUBST(WITH_KRB5)
10201 AC_SUBST(WITH_GSSAPI)
10202 AC_SUBST(GSSAPI_LIBS)
10203 AC_SUBST(KRB5_LIBS)
10204 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10205 AC_SUBST(SYSTEM_POSTGRESQL)
10206 AC_SUBST(POSTGRESQL_INC)
10207 AC_SUBST(POSTGRESQL_LIB)
10209 dnl ===================================================================
10210 dnl Check for Firebird stuff
10211 dnl ===================================================================
10212 ENABLE_FIREBIRD_SDBC=
10213 if test "$enable_firebird_sdbc" = "yes" ; then
10214     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10216     dnl ===================================================================
10217     dnl Check for system Firebird
10218     dnl ===================================================================
10219     AC_MSG_CHECKING([which Firebird to use])
10220     if test "$with_system_firebird" = "yes"; then
10221         AC_MSG_RESULT([external])
10222         SYSTEM_FIREBIRD=TRUE
10223         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10224         if test -z "$FIREBIRDCONFIG"; then
10225             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10226             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10227                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10228             ])
10229             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10230         else
10231             AC_MSG_NOTICE([fb_config found])
10232             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10233             AC_MSG_CHECKING([for Firebird Client library])
10234             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10235             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10236             FilterLibs "${FIREBIRD_LIBS}"
10237             FIREBIRD_LIBS="${filteredlibs}"
10238         fi
10239         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10240         AC_MSG_CHECKING([Firebird version])
10241         if test -n "${FIREBIRD_VERSION}"; then
10242             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10243             if test "$FIREBIRD_MAJOR" -ge "3"; then
10244                 AC_MSG_RESULT([OK])
10245             else
10246                 AC_MSG_ERROR([Ensure firebird >= 3 is installed])
10247             fi
10248         else
10249             save_CFLAGS="${CFLAGS}"
10250             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10251             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10252 #if defined(FB_API_VER) && FB_API_VER == 30
10253 int fb_api_is_30(void) { return 0; }
10254 #else
10255 #error "Wrong Firebird API version"
10256 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10257             CFLAGS="$save_CFLAGS"
10258         fi
10259         ENABLE_FIREBIRD_SDBC=TRUE
10260         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10261     elif test "$enable_database_connectivity" = no; then
10262         AC_MSG_RESULT([none])
10263     elif test "$cross_compiling" = "yes"; then
10264         AC_MSG_RESULT([none])
10265     else
10266         dnl Embedded Firebird has version 3.0
10267         dnl We need libatomic_ops for any non X86/X64 system
10268         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10269             dnl ===================================================================
10270             dnl Check for system libatomic_ops
10271             dnl ===================================================================
10272             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10273             if test "$with_system_libatomic_ops" = "yes"; then
10274                 SYSTEM_LIBATOMIC_OPS=TRUE
10275                 AC_CHECK_HEADERS(atomic_ops.h, [],
10276                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10277             else
10278                 SYSTEM_LIBATOMIC_OPS=
10279                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10280                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10281                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10282             fi
10283         fi
10285         AC_MSG_RESULT([internal])
10286         SYSTEM_FIREBIRD=
10287         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10288         FIREBIRD_LIBS="-lfbclient"
10290         if test "$with_system_libtommath" = "yes"; then
10291             SYSTEM_LIBTOMMATH=TRUE
10292             dnl check for tommath presence
10293             save_LIBS=$LIBS
10294             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10295             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10296             LIBS=$save_LIBS
10297         else
10298             SYSTEM_LIBTOMMATH=
10299             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10300             LIBTOMMATH_LIBS="-ltommath"
10301             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10302         fi
10304         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10305         ENABLE_FIREBIRD_SDBC=TRUE
10306         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10307     fi
10309 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10310 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10311 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10312 AC_SUBST(LIBATOMIC_OPS_LIBS)
10313 AC_SUBST(SYSTEM_FIREBIRD)
10314 AC_SUBST(FIREBIRD_CFLAGS)
10315 AC_SUBST(FIREBIRD_LIBS)
10316 AC_SUBST(SYSTEM_LIBTOMMATH)
10317 AC_SUBST(LIBTOMMATH_CFLAGS)
10318 AC_SUBST(LIBTOMMATH_LIBS)
10320 dnl ===================================================================
10321 dnl Check for system curl
10322 dnl ===================================================================
10323 AC_MSG_CHECKING([which libcurl to use])
10324 if test "$with_system_curl" = "auto"; then
10325     with_system_curl="$with_system_libs"
10328 if test "$enable_curl" = "yes" -a "$with_system_curl" = "yes"; then
10329     AC_MSG_RESULT([external])
10330     SYSTEM_CURL=TRUE
10332     PKG_CHECK_MODULES(CURL, libcurl >= 7.68.0)
10334     ENABLE_CURL=TRUE
10335 elif test "$enable_curl" = "no"; then
10336     AC_MSG_RESULT([none])
10337 else
10338     AC_MSG_RESULT([internal])
10339     SYSTEM_CURL=
10340     BUILD_TYPE="$BUILD_TYPE CURL"
10341     ENABLE_CURL=TRUE
10343 AC_SUBST(SYSTEM_CURL)
10344 AC_SUBST(CURL_CFLAGS)
10345 AC_SUBST(CURL_LIBS)
10346 AC_SUBST(ENABLE_CURL)
10348 dnl ===================================================================
10349 dnl Check for system boost
10350 dnl ===================================================================
10351 AC_MSG_CHECKING([which boost to use])
10352 if test "$with_system_boost" = "yes"; then
10353     AC_MSG_RESULT([external])
10354     SYSTEM_BOOST=TRUE
10355     AX_BOOST_BASE([1.66],,[AC_MSG_ERROR([no suitable Boost found])])
10356     AX_BOOST_DATE_TIME
10357     AX_BOOST_FILESYSTEM
10358     AX_BOOST_IOSTREAMS
10359     AX_BOOST_LOCALE
10360     AC_LANG_PUSH([C++])
10361     save_CXXFLAGS=$CXXFLAGS
10362     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10363     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10364        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10365     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10366        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10367     CXXFLAGS=$save_CXXFLAGS
10368     AC_LANG_POP([C++])
10369     # this is in m4/ax_boost_base.m4
10370     FilterLibs "${BOOST_LDFLAGS}"
10371     BOOST_LDFLAGS="${filteredlibs}"
10372 else
10373     AC_MSG_RESULT([internal])
10374     BUILD_TYPE="$BUILD_TYPE BOOST"
10375     SYSTEM_BOOST=
10376     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10377         # use warning-suppressing wrapper headers
10378         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10379     else
10380         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10381     fi
10383 AC_SUBST(SYSTEM_BOOST)
10385 dnl ===================================================================
10386 dnl Check for system mdds
10387 dnl ===================================================================
10388 libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-2.0 >= 2.0.0], ["-I${WORKDIR}/UnpackedTarball/mdds/include"])
10390 dnl ===================================================================
10391 dnl Check for system cuckoo
10392 dnl ===================================================================
10393 AC_MSG_CHECKING([which cuckoo to use])
10394 if test "$with_system_cuckoo" = "yes"; then
10395     AC_MSG_RESULT([external])
10396     SYSTEM_CUCKOO=TRUE
10397     AC_LANG_PUSH([C++])
10398     AC_CHECK_HEADER([libcuckoo/cuckoohash_map.hh], [],
10399        [AC_MSG_ERROR([libcuckoo/cuckoohash_map.hh not found. install cuckoo])], [])
10400     AC_LANG_POP([C++])
10401 else
10402     AC_MSG_RESULT([internal])
10403     BUILD_TYPE="$BUILD_TYPE CUCKOO"
10404     SYSTEM_CUCKOO=
10405     CUCKOO_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/cuckoo"
10407 AC_SUBST([CUCKOO_CFLAGS])
10408 AC_SUBST([SYSTEM_CUCKOO])
10410 dnl ===================================================================
10411 dnl Check for system glm
10412 dnl ===================================================================
10413 AC_MSG_CHECKING([which glm to use])
10414 if test "$with_system_glm" = "yes"; then
10415     AC_MSG_RESULT([external])
10416     SYSTEM_GLM=TRUE
10417     AC_LANG_PUSH([C++])
10418     AC_CHECK_HEADER([glm/glm.hpp], [],
10419        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10420     AC_LANG_POP([C++])
10421 else
10422     AC_MSG_RESULT([internal])
10423     BUILD_TYPE="$BUILD_TYPE GLM"
10424     SYSTEM_GLM=
10425     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10427 AC_SUBST([GLM_CFLAGS])
10428 AC_SUBST([SYSTEM_GLM])
10430 dnl ===================================================================
10431 dnl Check for system odbc
10432 dnl ===================================================================
10433 AC_MSG_CHECKING([which odbc headers to use])
10434 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
10435     AC_MSG_RESULT([external])
10436     SYSTEM_ODBC_HEADERS=TRUE
10438     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10439         save_CPPFLAGS=$CPPFLAGS
10440         find_winsdk
10441         PathFormat "$winsdktest"
10442         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"
10443         AC_CHECK_HEADER(sqlext.h, [],
10444             [AC_MSG_ERROR(odbc not found. install odbc)],
10445             [#include <windows.h>])
10446         CPPFLAGS=$save_CPPFLAGS
10447     else
10448         AC_CHECK_HEADER(sqlext.h, [],
10449             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10450     fi
10451 elif test "$enable_database_connectivity" = no; then
10452     AC_MSG_RESULT([none])
10453 else
10454     AC_MSG_RESULT([internal])
10455     SYSTEM_ODBC_HEADERS=
10457 AC_SUBST(SYSTEM_ODBC_HEADERS)
10459 dnl ===================================================================
10460 dnl Check for system NSS
10461 dnl ===================================================================
10462 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10463     libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8])
10464     AC_DEFINE(HAVE_FEATURE_NSS)
10465     ENABLE_NSS=TRUE
10466 elif test $_os != iOS ; then
10467     with_tls=openssl
10469 AC_SUBST(ENABLE_NSS)
10471 dnl ===================================================================
10472 dnl Enable LDAP support
10473 dnl ===================================================================
10475 if test "$test_openldap" = yes; then
10476     AC_MSG_CHECKING([whether to enable LDAP support])
10477     if test "$enable_ldap" = yes -a \( "$ENABLE_NSS" = TRUE -o "$with_system_openldap" = yes \); then
10478         AC_MSG_RESULT([yes])
10479         ENABLE_LDAP=TRUE
10480     else
10481         if test "$enable_ldap" != "yes"; then
10482             AC_MSG_RESULT([no])
10483         else
10484             AC_MSG_RESULT([no (needs NSS or system openldap)])
10485         fi
10486     fi
10488 dnl ===================================================================
10489 dnl Check for system openldap
10490 dnl ===================================================================
10492     if test "$ENABLE_LDAP" = TRUE; then
10493         AC_MSG_CHECKING([which openldap library to use])
10494         if test "$with_system_openldap" = yes; then
10495             AC_MSG_RESULT([external])
10496             SYSTEM_OPENLDAP=TRUE
10497             AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10498             AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10499             AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10500         else
10501             AC_MSG_RESULT([internal])
10502             BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10503         fi
10504     fi
10507 AC_SUBST(ENABLE_LDAP)
10508 AC_SUBST(SYSTEM_OPENLDAP)
10510 dnl ===================================================================
10511 dnl Check for TLS/SSL and cryptographic implementation to use
10512 dnl ===================================================================
10513 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10514 if test -n "$with_tls"; then
10515     case $with_tls in
10516     openssl)
10517         AC_DEFINE(USE_TLS_OPENSSL)
10518         TLS=OPENSSL
10519         AC_MSG_RESULT([$TLS])
10521         if test "$enable_openssl" != "yes"; then
10522             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10523         fi
10525         # warn that OpenSSL has been selected but not all TLS code has this option
10526         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS])
10527         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS"
10528         ;;
10529     nss)
10530         AC_DEFINE(USE_TLS_NSS)
10531         TLS=NSS
10532         AC_MSG_RESULT([$TLS])
10533         ;;
10534     no)
10535         AC_MSG_RESULT([none])
10536         AC_MSG_WARN([Skipping TLS/SSL])
10537         ;;
10538     *)
10539         AC_MSG_RESULT([])
10540         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10541 openssl - OpenSSL
10542 nss - Mozilla's Network Security Services (NSS)
10543     ])
10544         ;;
10545     esac
10546 else
10547     # default to using NSS, it results in smaller oox lib
10548     AC_DEFINE(USE_TLS_NSS)
10549     TLS=NSS
10550     AC_MSG_RESULT([$TLS])
10552 AC_SUBST(TLS)
10554 dnl ===================================================================
10555 dnl Check for system sane
10556 dnl ===================================================================
10557 AC_MSG_CHECKING([which sane header to use])
10558 if test "$with_system_sane" = "yes"; then
10559     AC_MSG_RESULT([external])
10560     AC_CHECK_HEADER(sane/sane.h, [],
10561       [AC_MSG_ERROR(sane not found. install sane)], [])
10562 else
10563     AC_MSG_RESULT([internal])
10564     BUILD_TYPE="$BUILD_TYPE SANE"
10567 dnl ===================================================================
10568 dnl Check for system icu
10569 dnl ===================================================================
10570 SYSTEM_GENBRK=
10571 SYSTEM_GENCCODE=
10572 SYSTEM_GENCMN=
10574 ICU_MAJOR=70
10575 ICU_MINOR=1
10576 ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10577 ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10578 ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10579 AC_MSG_CHECKING([which icu to use])
10580 if test "$with_system_icu" = "yes"; then
10581     AC_MSG_RESULT([external])
10582     SYSTEM_ICU=TRUE
10583     AC_LANG_PUSH([C++])
10584     AC_MSG_CHECKING([for unicode/rbbi.h])
10585     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10586     AC_LANG_POP([C++])
10588     if test "$cross_compiling" != "yes"; then
10589         PKG_CHECK_MODULES(ICU, icu-i18n >= 4.6)
10590         ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10591         ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10592         ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10593     fi
10595     if test "$cross_compiling" = "yes" -a \( "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" \); then
10596         ICU_VERSION_FOR_BUILD=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10597         ICU_MAJOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f1`
10598         ICU_MINOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f2`
10599         AC_MSG_CHECKING([if MinGW and system versions of ICU are compatible])
10600         if test "$ICU_MAJOR" -eq "$ICU_MAJOR_FOR_BUILD" -a "$ICU_MINOR" -eq "$ICU_MINOR_FOR_BUILD"; then
10601             AC_MSG_RESULT([yes])
10602         else
10603             AC_MSG_RESULT([no])
10604             if test "$with_system_icu_for_build" != "force"; then
10605                 AC_MSG_ERROR([System ICU is not version-compatible with MinGW ICU.
10606 You can use --with-system-icu-for-build=force to use it anyway.])
10607             fi
10608         fi
10609     fi
10611     if test "$cross_compiling" != "yes" -o "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force"; then
10612         # using the system icu tools can lead to version confusion, use the
10613         # ones from the build environment when cross-compiling
10614         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10615         if test -z "$SYSTEM_GENBRK"; then
10616             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10617         fi
10618         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10619         if test -z "$SYSTEM_GENCCODE"; then
10620             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10621         fi
10622         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10623         if test -z "$SYSTEM_GENCMN"; then
10624             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10625         fi
10626         if test "$ICU_MAJOR" -ge "49"; then
10627             ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10628             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10629             ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10630         else
10631             ICU_RECLASSIFIED_PREPEND_SET_EMPTY=
10632             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER=
10633             ICU_RECLASSIFIED_HEBREW_LETTER=
10634         fi
10635     fi
10637     if test "$cross_compiling" = "yes"; then
10638         if test "$ICU_MAJOR" -ge "50"; then
10639             AC_MSG_RESULT([Ignore ICU_MINOR as obviously the libraries don't include the minor version in their names any more])
10640             ICU_MINOR=""
10641         fi
10642     fi
10643 else
10644     AC_MSG_RESULT([internal])
10645     SYSTEM_ICU=
10646     BUILD_TYPE="$BUILD_TYPE ICU"
10647     # surprisingly set these only for "internal" (to be used by various other
10648     # external libs): the system icu-config is quite unhelpful and spits out
10649     # dozens of weird flags and also default path -I/usr/include
10650     ICU_CFLAGS="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10651     ICU_LIBS="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10653 if test "$ICU_MAJOR" -ge "59"; then
10654     # As of ICU 59 it defaults to typedef char16_t UChar; which is available
10655     # with -std=c++11 but not all external libraries can be built with that,
10656     # for those use a bit-compatible typedef uint16_t UChar; see
10657     # icu/source/common/unicode/umachine.h
10658     ICU_UCHAR_TYPE="-DUCHAR_TYPE=uint16_t"
10659 else
10660     ICU_UCHAR_TYPE=""
10662 AC_SUBST(SYSTEM_ICU)
10663 AC_SUBST(SYSTEM_GENBRK)
10664 AC_SUBST(SYSTEM_GENCCODE)
10665 AC_SUBST(SYSTEM_GENCMN)
10666 AC_SUBST(ICU_MAJOR)
10667 AC_SUBST(ICU_MINOR)
10668 AC_SUBST(ICU_RECLASSIFIED_PREPEND_SET_EMPTY)
10669 AC_SUBST(ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER)
10670 AC_SUBST(ICU_RECLASSIFIED_HEBREW_LETTER)
10671 AC_SUBST(ICU_CFLAGS)
10672 AC_SUBST(ICU_LIBS)
10673 AC_SUBST(ICU_UCHAR_TYPE)
10675 dnl ==================================================================
10676 dnl Breakpad
10677 dnl ==================================================================
10678 DEFAULT_CRASHDUMP_VALUE="true"
10679 AC_MSG_CHECKING([whether to enable breakpad])
10680 if test "$enable_breakpad" != yes; then
10681     AC_MSG_RESULT([no])
10682 else
10683     AC_MSG_RESULT([yes])
10684     ENABLE_BREAKPAD="TRUE"
10685     AC_DEFINE(ENABLE_BREAKPAD)
10686     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
10687     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
10689     AC_MSG_CHECKING([for disable crash dump])
10690     if test "$enable_crashdump" = no; then
10691         DEFAULT_CRASHDUMP_VALUE="false"
10692         AC_MSG_RESULT([yes])
10693     else
10694        AC_MSG_RESULT([no])
10695     fi
10697     AC_MSG_CHECKING([for crashreport config])
10698     if test "$with_symbol_config" = "no"; then
10699         BREAKPAD_SYMBOL_CONFIG="invalid"
10700         AC_MSG_RESULT([no])
10701     else
10702         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
10703         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
10704         AC_MSG_RESULT([yes])
10705     fi
10706     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
10708 AC_SUBST(ENABLE_BREAKPAD)
10709 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
10711 dnl ==================================================================
10712 dnl libfuzzer
10713 dnl ==================================================================
10714 AC_MSG_CHECKING([whether to enable fuzzers])
10715 if test "$enable_fuzzers" != yes; then
10716     AC_MSG_RESULT([no])
10717 else
10718     if test -z $LIB_FUZZING_ENGINE; then
10719       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
10720     fi
10721     AC_MSG_RESULT([yes])
10722     ENABLE_FUZZERS="TRUE"
10723     AC_DEFINE([ENABLE_FUZZERS],1)
10724     BUILD_TYPE="$BUILD_TYPE FUZZERS"
10726 AC_SUBST(LIB_FUZZING_ENGINE)
10727 AC_SUBST(ENABLE_FUZZERS)
10729 dnl ===================================================================
10730 dnl Orcus
10731 dnl ===================================================================
10732 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.17 >= 0.17.2])
10733 if test "$with_system_orcus" != "yes"; then
10734     if test "$SYSTEM_BOOST" = "TRUE"; then
10735         dnl Link with Boost.System
10736         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
10737         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
10738         dnl in documentation has no effect.
10739         AX_BOOST_SYSTEM
10740     fi
10742 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
10743 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
10744 AC_SUBST([BOOST_SYSTEM_LIB])
10745 AC_SUBST(SYSTEM_LIBORCUS)
10747 dnl ===================================================================
10748 dnl HarfBuzz
10749 dnl ===================================================================
10750 libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3],
10751                          ["-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"],
10752                          ["-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"])
10754 libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 0.9.42],
10755                          ["-I${WORKDIR}/UnpackedTarball/harfbuzz/src"],
10756                          ["-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"])
10758 if test "$COM" = "MSC"; then # override the above
10759     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
10760     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
10763 if test "$with_system_harfbuzz" = "yes"; then
10764     if test "$with_system_graphite" = "no"; then
10765         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
10766     fi
10767     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
10768     save_LIBS="$LIBS"
10769     save_CFLAGS="$CFLAGS"
10770     LIBS="$LIBS $HARFBUZZ_LIBS"
10771     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
10772     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
10773     LIBS="$save_LIBS"
10774     CFLAGS="$save_CFLAGS"
10775 else
10776     if test "$with_system_graphite" = "yes"; then
10777         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
10778     fi
10781 if test "$USING_X11" = TRUE; then
10782     AC_PATH_X
10783     AC_PATH_XTRA
10784     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
10786     if test -z "$x_includes"; then
10787         x_includes="default_x_includes"
10788     fi
10789     if test -z "$x_libraries"; then
10790         x_libraries="default_x_libraries"
10791     fi
10792     CFLAGS="$CFLAGS $X_CFLAGS"
10793     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
10794     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
10795 else
10796     x_includes="no_x_includes"
10797     x_libraries="no_x_libraries"
10800 if test "$USING_X11" = TRUE; then
10801     dnl ===================================================================
10802     dnl Check for extension headers
10803     dnl ===================================================================
10804     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
10805      [#include <X11/extensions/shape.h>])
10807     # vcl needs ICE and SM
10808     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
10809     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
10810         [AC_MSG_ERROR(ICE library not found)])
10811     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
10812     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
10813         [AC_MSG_ERROR(SM library not found)])
10816 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
10817     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
10818     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
10821 dnl ===================================================================
10822 dnl Check for system Xrender
10823 dnl ===================================================================
10824 AC_MSG_CHECKING([whether to use Xrender])
10825 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
10826     AC_MSG_RESULT([yes])
10827     PKG_CHECK_MODULES(XRENDER, xrender)
10828     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10829     FilterLibs "${XRENDER_LIBS}"
10830     XRENDER_LIBS="${filteredlibs}"
10831     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
10832       [AC_MSG_ERROR(libXrender not found or functional)], [])
10833     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
10834       [AC_MSG_ERROR(Xrender not found. install X)], [])
10835 else
10836     AC_MSG_RESULT([no])
10838 AC_SUBST(XRENDER_CFLAGS)
10839 AC_SUBST(XRENDER_LIBS)
10841 dnl ===================================================================
10842 dnl Check for XRandr
10843 dnl ===================================================================
10844 AC_MSG_CHECKING([whether to enable RandR support])
10845 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
10846     AC_MSG_RESULT([yes])
10847     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
10848     if test "$ENABLE_RANDR" != "TRUE"; then
10849         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
10850                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
10851         XRANDR_CFLAGS=" "
10852         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
10853           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
10854         XRANDR_LIBS="-lXrandr "
10855         ENABLE_RANDR="TRUE"
10856     fi
10857     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10858     FilterLibs "${XRANDR_LIBS}"
10859     XRANDR_LIBS="${filteredlibs}"
10860 else
10861     ENABLE_RANDR=""
10862     AC_MSG_RESULT([no])
10864 AC_SUBST(XRANDR_CFLAGS)
10865 AC_SUBST(XRANDR_LIBS)
10866 AC_SUBST(ENABLE_RANDR)
10868 if test "$test_webdav" = yes; then
10869     if test -z "$with_webdav"; then
10870         WITH_WEBDAV=curl
10871     else
10872         WITH_WEBDAV="$with_webdav"
10873     fi
10876 AC_MSG_CHECKING([for webdav library])
10877 case "$WITH_WEBDAV" in
10878 curl)
10879     AC_MSG_RESULT([curl])
10880     # curl is already mandatory (almost) and checked elsewhere
10881     if test "$enable_curl" = "no"; then
10882         AC_MSG_ERROR(["--with-webdav=curl conflicts with --disable-curl"])
10883     fi
10884     ;;
10885 serf)
10886     AC_MSG_RESULT([serf])
10887     # Check for system apr-util
10888     libo_CHECK_SYSTEM_MODULE([apr],[APR],[apr-util-1],
10889                              ["-I${WORKDIR}/UnpackedTarball/apr/include -I${WORKDIR}/UnpackedTarball/apr_util/include"],
10890                              ["-L${WORKDIR}/UnpackedTarball/apr/.libs -lapr-1 -L${WORKDIR}/UnpackedTarball/apr_util/.libs -laprutil-1"])
10891     if test "$COM" = "MSC"; then
10892         APR_LIB_DIR="LibR"
10893         test -n "${MSVC_USE_DEBUG_RUNTIME}" && APR_LIB_DIR="LibD"
10894         APR_LIBS="${WORKDIR}/UnpackedTarball/apr/${APR_LIB_DIR}/apr-1.lib ${WORKDIR}/UnpackedTarball/apr_util/${APR_LIB_DIR}/aprutil-1.lib"
10895     fi
10897     # Check for system serf
10898     libo_CHECK_SYSTEM_MODULE([serf],[SERF],[serf-1 >= 1.3.9])
10899     ;;
10900 neon)
10901     AC_MSG_RESULT([neon])
10902     # Check for system neon
10903     libo_CHECK_SYSTEM_MODULE([neon],[NEON],[neon >= 0.31.2])
10904     if test "$with_system_neon" = "yes"; then
10905         NEON_VERSION="`$PKG_CONFIG --modversion neon | $SED 's/\.//g'`"
10906     else
10907         NEON_VERSION=0312
10908     fi
10909     AC_SUBST(NEON_VERSION)
10910     ;;
10912     AC_MSG_RESULT([none, disabled])
10913     WITH_WEBDAV=""
10914     ;;
10915 esac
10916 AC_SUBST(WITH_WEBDAV)
10918 dnl ===================================================================
10919 dnl Check for disabling cve_tests
10920 dnl ===================================================================
10921 AC_MSG_CHECKING([whether to execute CVE tests])
10922 # If not explicitly enabled or disabled, default
10923 if test -z "$enable_cve_tests"; then
10924     case "$OS" in
10925     WNT)
10926         # Default cves off for Windows with its wild and wonderful
10927         # variety of AV software kicking in and panicking
10928         enable_cve_tests=no
10929         ;;
10930     *)
10931         # otherwise yes
10932         enable_cve_tests=yes
10933         ;;
10934     esac
10936 if test "$enable_cve_tests" = "no"; then
10937     AC_MSG_RESULT([no])
10938     DISABLE_CVE_TESTS=TRUE
10939     AC_SUBST(DISABLE_CVE_TESTS)
10940 else
10941     AC_MSG_RESULT([yes])
10944 dnl ===================================================================
10945 dnl Check for enabling chart XShape tests
10946 dnl ===================================================================
10947 AC_MSG_CHECKING([whether to execute chart XShape tests])
10948 if test "$enable_chart_tests" = "yes" -o '(' "$_os" = "WINNT" -a "$enable_chart_tests" != "no" ')'; then
10949     AC_MSG_RESULT([yes])
10950     ENABLE_CHART_TESTS=TRUE
10951     AC_SUBST(ENABLE_CHART_TESTS)
10952 else
10953     AC_MSG_RESULT([no])
10956 dnl ===================================================================
10957 dnl Check for system openssl
10958 dnl ===================================================================
10959 ENABLE_OPENSSL=
10960 AC_MSG_CHECKING([whether to disable OpenSSL usage])
10961 if test "$enable_openssl" = "yes"; then
10962     AC_MSG_RESULT([no])
10963     ENABLE_OPENSSL=TRUE
10964     if test "$_os" = Darwin ; then
10965         # OpenSSL is deprecated when building for 10.7 or later.
10966         #
10967         # http://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
10968         # http://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
10970         with_system_openssl=no
10971         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10972     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
10973             && test "$with_system_openssl" != "no"; then
10974         with_system_openssl=yes
10975         SYSTEM_OPENSSL=TRUE
10976         OPENSSL_CFLAGS=
10977         OPENSSL_LIBS="-lssl -lcrypto"
10978     else
10979         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10980     fi
10981     if test "$with_system_openssl" = "yes"; then
10982         AC_MSG_CHECKING([whether openssl supports SHA512])
10983         AC_LANG_PUSH([C])
10984         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
10985             SHA512_CTX context;
10986 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
10987         AC_LANG_POP(C)
10988     fi
10989 else
10990     AC_MSG_RESULT([yes])
10992     # warn that although OpenSSL is disabled, system libraries may depend on it
10993     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
10994     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
10997 AC_SUBST([ENABLE_OPENSSL])
10999 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
11000     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
11001         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
11002         enable_cipher_openssl_backend=no
11003     else
11004         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
11005     fi
11007 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
11008 ENABLE_CIPHER_OPENSSL_BACKEND=
11009 if test "$enable_cipher_openssl_backend" = yes; then
11010     AC_MSG_RESULT([yes])
11011     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
11012 else
11013     AC_MSG_RESULT([no])
11015 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
11017 dnl ===================================================================
11018 dnl Select the crypto backends used by LO
11019 dnl ===================================================================
11021 if test "$build_crypto" = yes; then
11022     if test "$OS" = WNT; then
11023         BUILD_TYPE="$BUILD_TYPE CRYPTO_MSCAPI"
11024         AC_DEFINE([USE_CRYPTO_MSCAPI])
11025     elif test "$ENABLE_NSS" = TRUE; then
11026         BUILD_TYPE="$BUILD_TYPE CRYPTO_NSS"
11027         AC_DEFINE([USE_CRYPTO_NSS])
11028     fi
11031 dnl ===================================================================
11032 dnl Check for building gnutls
11033 dnl ===================================================================
11034 AC_MSG_CHECKING([whether to use gnutls])
11035 if test "$WITH_WEBDAV" = "neon" -a "$with_system_neon" = no -a "$enable_openssl" = "no"; then
11036     AC_MSG_RESULT([yes])
11037     AM_PATH_LIBGCRYPT()
11038     PKG_CHECK_MODULES(GNUTLS, [gnutls],,
11039         AC_MSG_ERROR([[Disabling OpenSSL was requested, but GNUTLS is not
11040                       available in the system to use as replacement.]]))
11041     FilterLibs "${LIBGCRYPT_LIBS}"
11042     LIBGCRYPT_LIBS="${filteredlibs}"
11043 else
11044     AC_MSG_RESULT([no])
11047 AC_SUBST([LIBGCRYPT_CFLAGS])
11048 AC_SUBST([LIBGCRYPT_LIBS])
11050 dnl ===================================================================
11051 dnl Check for system redland
11052 dnl ===================================================================
11053 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
11054 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
11055 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
11056 if test "$with_system_redland" = "yes"; then
11057     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
11058             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
11059 else
11060     RAPTOR_MAJOR="0"
11061     RASQAL_MAJOR="3"
11062     REDLAND_MAJOR="0"
11064 AC_SUBST(RAPTOR_MAJOR)
11065 AC_SUBST(RASQAL_MAJOR)
11066 AC_SUBST(REDLAND_MAJOR)
11068 dnl ===================================================================
11069 dnl Check for system hunspell
11070 dnl ===================================================================
11071 AC_MSG_CHECKING([which libhunspell to use])
11072 if test "$with_system_hunspell" = "yes"; then
11073     AC_MSG_RESULT([external])
11074     SYSTEM_HUNSPELL=TRUE
11075     AC_LANG_PUSH([C++])
11076     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
11077     if test "$HUNSPELL_PC" != "TRUE"; then
11078         AC_CHECK_HEADER(hunspell.hxx, [],
11079             [
11080             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
11081             [AC_MSG_ERROR(hunspell headers not found.)], [])
11082             ], [])
11083         AC_CHECK_LIB([hunspell], [main], [:],
11084            [ AC_MSG_ERROR(hunspell library not found.) ], [])
11085         HUNSPELL_LIBS=-lhunspell
11086     fi
11087     AC_LANG_POP([C++])
11088     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11089     FilterLibs "${HUNSPELL_LIBS}"
11090     HUNSPELL_LIBS="${filteredlibs}"
11091 else
11092     AC_MSG_RESULT([internal])
11093     SYSTEM_HUNSPELL=
11094     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
11095     if test "$COM" = "MSC"; then
11096         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
11097     else
11098         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
11099     fi
11100     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
11102 AC_SUBST(SYSTEM_HUNSPELL)
11103 AC_SUBST(HUNSPELL_CFLAGS)
11104 AC_SUBST(HUNSPELL_LIBS)
11106 dnl ===================================================================
11107 dnl Check for system zxing
11108 dnl ===================================================================
11109 AC_MSG_CHECKING([whether to use zxing])
11110 if test "$enable_zxing" = "no"; then
11111     AC_MSG_RESULT([no])
11112     ENABLE_ZXING=
11113     SYSTEM_ZXING=
11114 else
11115     AC_MSG_RESULT([yes])
11116     ENABLE_ZXING=TRUE
11117     AC_MSG_CHECKING([which libzxing to use])
11118     if test "$with_system_zxing" = "yes"; then
11119         AC_MSG_RESULT([external])
11120         SYSTEM_ZXING=TRUE
11121         AC_LANG_PUSH([C++])
11122         AC_CHECK_HEADER(ZXing/MultiFormatWriter.h, [],
11123             [AC_MSG_ERROR(zxing headers not found.)], [#include <stdexcept>])
11124         ZXING_CFLAGS=-I/usr/include/ZXing
11125         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
11126             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
11127             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
11128         AC_LANG_POP([C++])
11129         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11130         FilterLibs "${ZXING_LIBS}"
11131         ZXING_LIBS="${filteredlibs}"
11132     else
11133         AC_MSG_RESULT([internal])
11134         SYSTEM_ZXING=
11135         BUILD_TYPE="$BUILD_TYPE ZXING"
11136     fi
11137     if test "$ENABLE_ZXING" = TRUE; then
11138         AC_DEFINE(ENABLE_ZXING)
11139     fi
11141 AC_SUBST(SYSTEM_ZXING)
11142 AC_SUBST(ENABLE_ZXING)
11143 AC_SUBST(ZXING_CFLAGS)
11144 AC_SUBST(ZXING_LIBS)
11146 dnl ===================================================================
11147 dnl Check for system box2d
11148 dnl ===================================================================
11149 AC_MSG_CHECKING([which box2d to use])
11150 if test "$with_system_box2d" = "yes"; then
11151     AC_MSG_RESULT([external])
11152     SYSTEM_BOX2D=TRUE
11153     AC_LANG_PUSH([C++])
11154     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
11155         [BOX2D_H_FOUND='FALSE'])
11156     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
11157         _BOX2D_LIB=box2d
11158         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
11159     else
11160         # fail this. there's no other alternative to check when we are here.
11161         AC_CHECK_HEADER([Box2D/Box2D.h], [],
11162             [AC_MSG_ERROR(box2d headers not found.)])
11163         _BOX2D_LIB=Box2D
11164         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11165     fi
11166     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11167         [ AC_MSG_ERROR(box2d library not found.) ], [])
11168     BOX2D_LIBS=-l$_BOX2D_LIB
11169     AC_LANG_POP([C++])
11170     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11171     FilterLibs "${BOX2D_LIBS}"
11172     BOX2D_LIBS="${filteredlibs}"
11173 else
11174     AC_MSG_RESULT([internal])
11175     SYSTEM_BOX2D=
11176     BUILD_TYPE="$BUILD_TYPE BOX2D"
11178 AC_SUBST(SYSTEM_BOX2D)
11179 AC_SUBST(BOX2D_CFLAGS)
11180 AC_SUBST(BOX2D_LIBS)
11182 dnl ===================================================================
11183 dnl Checking for altlinuxhyph
11184 dnl ===================================================================
11185 AC_MSG_CHECKING([which altlinuxhyph to use])
11186 if test "$with_system_altlinuxhyph" = "yes"; then
11187     AC_MSG_RESULT([external])
11188     SYSTEM_HYPH=TRUE
11189     AC_CHECK_HEADER(hyphen.h, [],
11190        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11191     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11192        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11193        [#include <hyphen.h>])
11194     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11195         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11196     if test -z "$HYPHEN_LIB"; then
11197         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11198            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11199     fi
11200     if test -z "$HYPHEN_LIB"; then
11201         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11202            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11203     fi
11204 else
11205     AC_MSG_RESULT([internal])
11206     SYSTEM_HYPH=
11207     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11208     if test "$COM" = "MSC"; then
11209         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11210     else
11211         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11212     fi
11214 AC_SUBST(SYSTEM_HYPH)
11215 AC_SUBST(HYPHEN_LIB)
11217 dnl ===================================================================
11218 dnl Checking for mythes
11219 dnl ===================================================================
11220 AC_MSG_CHECKING([which mythes to use])
11221 if test "$with_system_mythes" = "yes"; then
11222     AC_MSG_RESULT([external])
11223     SYSTEM_MYTHES=TRUE
11224     AC_LANG_PUSH([C++])
11225     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11226     if test "$MYTHES_PKGCONFIG" = "no"; then
11227         AC_CHECK_HEADER(mythes.hxx, [],
11228             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11229         AC_CHECK_LIB([mythes-1.2], [main], [:],
11230             [ MYTHES_FOUND=no], [])
11231     if test "$MYTHES_FOUND" = "no"; then
11232         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11233                 [ MYTHES_FOUND=no], [])
11234     fi
11235     if test "$MYTHES_FOUND" = "no"; then
11236         AC_MSG_ERROR([mythes library not found!.])
11237     fi
11238     fi
11239     AC_LANG_POP([C++])
11240     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11241     FilterLibs "${MYTHES_LIBS}"
11242     MYTHES_LIBS="${filteredlibs}"
11243 else
11244     AC_MSG_RESULT([internal])
11245     SYSTEM_MYTHES=
11246     BUILD_TYPE="$BUILD_TYPE MYTHES"
11247     if test "$COM" = "MSC"; then
11248         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11249     else
11250         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11251     fi
11253 AC_SUBST(SYSTEM_MYTHES)
11254 AC_SUBST(MYTHES_CFLAGS)
11255 AC_SUBST(MYTHES_LIBS)
11257 dnl ===================================================================
11258 dnl How should we build the linear programming solver ?
11259 dnl ===================================================================
11261 ENABLE_COINMP=
11262 AC_MSG_CHECKING([whether to build with CoinMP])
11263 if test "$enable_coinmp" != "no"; then
11264     ENABLE_COINMP=TRUE
11265     AC_MSG_RESULT([yes])
11266     if test "$with_system_coinmp" = "yes"; then
11267         SYSTEM_COINMP=TRUE
11268         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11269         FilterLibs "${COINMP_LIBS}"
11270         COINMP_LIBS="${filteredlibs}"
11271     else
11272         BUILD_TYPE="$BUILD_TYPE COINMP"
11273     fi
11274 else
11275     AC_MSG_RESULT([no])
11277 AC_SUBST(ENABLE_COINMP)
11278 AC_SUBST(SYSTEM_COINMP)
11279 AC_SUBST(COINMP_CFLAGS)
11280 AC_SUBST(COINMP_LIBS)
11282 ENABLE_LPSOLVE=
11283 AC_MSG_CHECKING([whether to build with lpsolve])
11284 if test "$enable_lpsolve" != "no"; then
11285     ENABLE_LPSOLVE=TRUE
11286     AC_MSG_RESULT([yes])
11287 else
11288     AC_MSG_RESULT([no])
11290 AC_SUBST(ENABLE_LPSOLVE)
11292 if test "$ENABLE_LPSOLVE" = TRUE; then
11293     AC_MSG_CHECKING([which lpsolve to use])
11294     if test "$with_system_lpsolve" = "yes"; then
11295         AC_MSG_RESULT([external])
11296         SYSTEM_LPSOLVE=TRUE
11297         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11298            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11299         save_LIBS=$LIBS
11300         # some systems need this. Like Ubuntu...
11301         AC_CHECK_LIB(m, floor)
11302         AC_CHECK_LIB(dl, dlopen)
11303         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11304             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11305         LIBS=$save_LIBS
11306     else
11307         AC_MSG_RESULT([internal])
11308         SYSTEM_LPSOLVE=
11309         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11310     fi
11312 AC_SUBST(SYSTEM_LPSOLVE)
11314 dnl ===================================================================
11315 dnl Checking for libexttextcat
11316 dnl ===================================================================
11317 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11318 if test "$with_system_libexttextcat" = "yes"; then
11319     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11321 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11323 dnl ===================================================================
11324 dnl Checking for libnumbertext
11325 dnl ===================================================================
11326 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11327 if test "$with_system_libnumbertext" = "yes"; then
11328     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11329     SYSTEM_LIBNUMBERTEXT=YES
11330 else
11331     SYSTEM_LIBNUMBERTEXT=
11332     AC_LANG_PUSH([C++])
11333     save_CPPFLAGS=$CPPFLAGS
11334     CPPFLAGS="$CPPFLAGS $CXXFLAGS_CXX11"
11335     AC_CHECK_HEADERS([codecvt regex])
11336     AS_IF([test "x$ac_cv_header_codecvt" != xyes -o "x$ac_cv_header_regex" != xyes],
11337             [ LIBNUMBERTEXT_CFLAGS=''
11338               AC_MSG_WARN([No system-provided libnumbertext or codecvt/regex C++11 headers (min. libstdc++ 4.9).
11339                            Enable libnumbertext fallback (missing number to number name conversion).])
11340             ])
11341     CPPFLAGS=$save_CPPFLAGS
11342     AC_LANG_POP([C++])
11344 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11345 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11346 AC_SUBST(LIBNUMBERTEXT_CFLAGS)
11348 dnl ***************************************
11349 dnl testing libc version for Linux...
11350 dnl ***************************************
11351 if test "$_os" = "Linux"; then
11352     AC_MSG_CHECKING([whether the libc is recent enough])
11353     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
11354     #include <features.h>
11355     #if defined(__GNU_LIBRARY__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1))
11356     #error glibc >= 2.1 is required
11357     #endif
11358     ]])],, [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([no, upgrade libc])])
11361 dnl =========================================
11362 dnl Check for uuidgen
11363 dnl =========================================
11364 if test "$_os" = "WINNT"; then
11365     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11366     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11367     UUIDGEN=uuidgen.exe
11368     AC_SUBST(UUIDGEN)
11369 else
11370     AC_PATH_PROG([UUIDGEN], [uuidgen])
11371     if test -z "$UUIDGEN"; then
11372         AC_MSG_WARN([uuid is needed for building installation sets])
11373     fi
11376 dnl ***************************************
11377 dnl Checking for bison and flex
11378 dnl ***************************************
11379 AC_PATH_PROG(BISON, bison)
11380 if test -z "$BISON"; then
11381     AC_MSG_ERROR([no bison found in \$PATH, install it])
11382 else
11383     AC_MSG_CHECKING([the bison version])
11384     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11385     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11386     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11387     dnl cause
11388     dnl
11389     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]
11390     dnl   typedef union YYSTYPE
11391     dnl           ~~~~~~^~~~~~~
11392     dnl
11393     dnl while at least 3.4.1 is know to be good:
11394     if test "$COMPILER_PLUGINS" = TRUE; then
11395         if test "$_bison_longver" -lt 2004; then
11396             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11397         fi
11398     else
11399         if test "$_bison_longver" -lt 2000; then
11400             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11401         fi
11402     fi
11404 AC_SUBST([BISON])
11406 AC_PATH_PROG(FLEX, flex)
11407 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11408     FLEX=`cygpath -m $FLEX`
11410 if test -z "$FLEX"; then
11411     AC_MSG_ERROR([no flex found in \$PATH, install it])
11412 else
11413     AC_MSG_CHECKING([the flex version])
11414     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11415     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11416         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11417     fi
11419 AC_SUBST([FLEX])
11420 dnl ***************************************
11421 dnl Checking for patch
11422 dnl ***************************************
11423 AC_PATH_PROG(PATCH, patch)
11424 if test -z "$PATCH"; then
11425     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11428 dnl On Solaris or macOS, check if --with-gnu-patch was used
11429 if test "$_os" = "SunOS" -o "$_os" = "Darwin"; then
11430     if test -z "$with_gnu_patch"; then
11431         GNUPATCH=$PATCH
11432     else
11433         if test -x "$with_gnu_patch"; then
11434             GNUPATCH=$with_gnu_patch
11435         else
11436             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11437         fi
11438     fi
11440     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11441     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11442         AC_MSG_RESULT([yes])
11443     else
11444         AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11445     fi
11446 else
11447     GNUPATCH=$PATCH
11450 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11451     GNUPATCH=`cygpath -m $GNUPATCH`
11454 dnl We also need to check for --with-gnu-cp
11456 if test -z "$with_gnu_cp"; then
11457     # check the place where the good stuff is hidden on Solaris...
11458     if test -x /usr/gnu/bin/cp; then
11459         GNUCP=/usr/gnu/bin/cp
11460     else
11461         AC_PATH_PROGS(GNUCP, gnucp cp)
11462     fi
11463     if test -z $GNUCP; then
11464         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11465     fi
11466 else
11467     if test -x "$with_gnu_cp"; then
11468         GNUCP=$with_gnu_cp
11469     else
11470         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11471     fi
11474 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11475     GNUCP=`cygpath -m $GNUCP`
11478 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11479 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11480     AC_MSG_RESULT([yes])
11481 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11482     AC_MSG_RESULT([yes])
11483 else
11484     case "$build_os" in
11485     darwin*|macos*|netbsd*|openbsd*|freebsd*|dragonfly*|aix*)
11486         x_GNUCP=[\#]
11487         GNUCP=''
11488         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11489         ;;
11490     *)
11491         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11492         ;;
11493     esac
11496 AC_SUBST(GNUPATCH)
11497 AC_SUBST(GNUCP)
11498 AC_SUBST(x_GNUCP)
11500 dnl ***************************************
11501 dnl testing assembler path
11502 dnl ***************************************
11503 ML_EXE=""
11504 if test "$_os" = "WINNT"; then
11505     case "$WIN_HOST_ARCH" in
11506     x86) assembler=ml.exe ;;
11507     x64) assembler=ml64.exe ;;
11508     arm64) assembler=armasm64.exe ;;
11509     esac
11511     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11512     if test -f "$MSVC_HOST_PATH/$assembler"; then
11513         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11514         AC_MSG_RESULT([$ML_EXE])
11515     else
11516         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11517     fi
11520 AC_SUBST(ML_EXE)
11522 dnl ===================================================================
11523 dnl We need zip and unzip
11524 dnl ===================================================================
11525 AC_PATH_PROG(ZIP, zip)
11526 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11527 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11528     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],,)
11531 AC_PATH_PROG(UNZIP, unzip)
11532 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11534 dnl ===================================================================
11535 dnl Zip must be a specific type for different build types.
11536 dnl ===================================================================
11537 if test $build_os = cygwin; then
11538     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11539         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11540     fi
11543 dnl ===================================================================
11544 dnl We need touch with -h option support.
11545 dnl ===================================================================
11546 AC_PATH_PROG(TOUCH, touch)
11547 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11548 touch "$WARNINGS_FILE"
11549 if ! "$TOUCH" -h "$WARNINGS_FILE" 2>/dev/null > /dev/null; then
11550     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],,)
11553 dnl ===================================================================
11554 dnl Check for system epoxy
11555 dnl ===================================================================
11556 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2], ["-I${WORKDIR}/UnpackedTarball/epoxy/include"])
11558 dnl ===================================================================
11559 dnl Set vcl option: coordinate device in double or sal_Int32
11560 dnl ===================================================================
11562 dnl disabled for now, we don't want subtle differences between OSs
11563 dnl AC_MSG_CHECKING([Type to use for Device Pixel coordinates])
11564 dnl if test "$_os" = "Darwin" -o  $_os = iOS ; then
11565 dnl     AC_DEFINE(VCL_FLOAT_DEVICE_PIXEL)
11566 dnl     AC_MSG_RESULT([double])
11567 dnl else
11568 dnl     AC_MSG_RESULT([sal_Int32])
11569 dnl fi
11571 dnl ===================================================================
11572 dnl Show which vclplugs will be built.
11573 dnl ===================================================================
11574 R=""
11575 if test "$USING_X11" != TRUE; then
11576     enable_gtk3=no
11579 ENABLE_GTK3=""
11580 if test "x$enable_gtk3" = "xyes"; then
11581     ENABLE_GTK3="TRUE"
11582     AC_DEFINE(ENABLE_GTK3)
11583     R="$R gtk3"
11585 AC_SUBST(ENABLE_GTK3)
11587 ENABLE_GTK3_KDE5=""
11588 if test "x$enable_gtk3_kde5" = "xyes"; then
11589     ENABLE_GTK3_KDE5="TRUE"
11590     AC_DEFINE(ENABLE_GTK3_KDE5)
11591     R="$R gtk3_kde5"
11593 AC_SUBST(ENABLE_GTK3_KDE5)
11595 ENABLE_GTK4=""
11596 if test "x$enable_gtk4" = "xyes"; then
11597     ENABLE_GTK4="TRUE"
11598     AC_DEFINE(ENABLE_GTK4)
11599     R="$R gtk4"
11601 AC_SUBST(ENABLE_GTK4)
11603 ENABLE_QT5=""
11604 if test "x$enable_qt5" = "xyes"; then
11605     ENABLE_QT5="TRUE"
11606     AC_DEFINE(ENABLE_QT5)
11607     R="$R qt5"
11609 AC_SUBST(ENABLE_QT5)
11611 ENABLE_QT6=""
11612 if test "x$enable_qt6" = "xyes"; then
11613     ENABLE_QT6="TRUE"
11614     AC_DEFINE(ENABLE_QT6)
11615     R="$R qt6"
11617 AC_SUBST(ENABLE_QT6)
11620 ENABLE_KF5=""
11621 if test "x$enable_kf5" = "xyes"; then
11622     ENABLE_KF5="TRUE"
11623     AC_DEFINE(ENABLE_KF5)
11624     R="$R kf5"
11626 AC_SUBST(ENABLE_KF5)
11628 if test "x$USING_X11" = "xyes"; then
11629     R="$R gen"
11632 if test "$_os" = "WINNT"; then
11633     R="$R win"
11634 elif test "$_os" = "Darwin"; then
11635     R="$R osx"
11636 elif test "$_os" = "iOS"; then
11637     R="ios"
11638 elif test "$_os" = Android; then
11639     R="android"
11642 build_vcl_plugins="$R"
11643 if test -z "$build_vcl_plugins"; then
11644     build_vcl_plugins=" none"
11646 AC_MSG_NOTICE([VCLplugs to be built:${build_vcl_plugins}])
11647 VCL_PLUGIN_INFO=$R
11648 AC_SUBST([VCL_PLUGIN_INFO])
11650 dnl ===================================================================
11651 dnl Check for GTK libraries
11652 dnl ===================================================================
11654 GTK3_CFLAGS=""
11655 GTK3_LIBS=""
11656 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11657     if test "$with_system_cairo" = no; then
11658         add_warning 'Non-system cairo combined with gtk3 is assumed to cause trouble; proceed at your own risk.'
11659     fi
11660     : ${with_system_cairo:=yes}
11661     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)
11662     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11663     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11664     FilterLibs "${GTK3_LIBS}"
11665     GTK3_LIBS="${filteredlibs}"
11667     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11668     if test "$with_system_epoxy" != "yes"; then
11669         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11670         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11671                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11672     fi
11674 AC_SUBST(GTK3_LIBS)
11675 AC_SUBST(GTK3_CFLAGS)
11677 GTK4_CFLAGS=""
11678 GTK4_LIBS=""
11679 if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then
11680     if test "$with_system_cairo" = no; then
11681         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11682     fi
11683     : ${with_system_cairo:=yes}
11684     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11685     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11686     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11687     FilterLibs "${GTK4_LIBS}"
11688     GTK4_LIBS="${filteredlibs}"
11690     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11691     if test "$with_system_epoxy" != "yes"; then
11692         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11693         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11694                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11695     fi
11697 AC_SUBST(GTK4_LIBS)
11698 AC_SUBST(GTK4_CFLAGS)
11700 if test "$enable_introspection" = yes; then
11701     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11702         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11703     else
11704         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
11705     fi
11708 dnl ===================================================================
11709 dnl check for dbus support
11710 dnl ===================================================================
11711 ENABLE_DBUS=""
11712 DBUS_CFLAGS=""
11713 DBUS_LIBS=""
11714 DBUS_GLIB_CFLAGS=""
11715 DBUS_GLIB_LIBS=""
11716 DBUS_HAVE_GLIB=""
11718 if test "$enable_dbus" = "no"; then
11719     test_dbus=no
11722 AC_MSG_CHECKING([whether to enable DBUS support])
11723 if test "$test_dbus" = "yes"; then
11724     ENABLE_DBUS="TRUE"
11725     AC_MSG_RESULT([yes])
11726     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
11727     AC_DEFINE(ENABLE_DBUS)
11728     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11729     FilterLibs "${DBUS_LIBS}"
11730     DBUS_LIBS="${filteredlibs}"
11732     # Glib is needed for BluetoothServer
11733     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
11734     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
11735         [
11736             DBUS_HAVE_GLIB="TRUE"
11737             AC_DEFINE(DBUS_HAVE_GLIB,1)
11738         ],
11739         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
11740     )
11741 else
11742     AC_MSG_RESULT([no])
11745 AC_SUBST(ENABLE_DBUS)
11746 AC_SUBST(DBUS_CFLAGS)
11747 AC_SUBST(DBUS_LIBS)
11748 AC_SUBST(DBUS_GLIB_CFLAGS)
11749 AC_SUBST(DBUS_GLIB_LIBS)
11750 AC_SUBST(DBUS_HAVE_GLIB)
11752 AC_MSG_CHECKING([whether to enable Impress remote control])
11753 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
11754     AC_MSG_RESULT([yes])
11755     ENABLE_SDREMOTE=TRUE
11756     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
11758     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
11759         # The Bluetooth code doesn't compile with macOS SDK 10.15
11760         if test "$enable_sdremote_bluetooth" = yes; then
11761             AC_MSG_ERROR([macOS SDK $macosx_sdk does not currently support --enable-sdremote-bluetooth])
11762         fi
11763         enable_sdremote_bluetooth=no
11764     fi
11765     # If not explicitly enabled or disabled, default
11766     if test -z "$enable_sdremote_bluetooth"; then
11767         case "$OS" in
11768         LINUX|MACOSX|WNT)
11769             # Default to yes for these
11770             enable_sdremote_bluetooth=yes
11771             ;;
11772         *)
11773             # otherwise no
11774             enable_sdremote_bluetooth=no
11775             ;;
11776         esac
11777     fi
11778     # $enable_sdremote_bluetooth is guaranteed non-empty now
11780     if test "$enable_sdremote_bluetooth" != "no"; then
11781         if test "$OS" = "LINUX"; then
11782             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
11783                 AC_MSG_RESULT([yes])
11784                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
11785                 dnl ===================================================================
11786                 dnl Check for system bluez
11787                 dnl ===================================================================
11788                 AC_MSG_CHECKING([which Bluetooth header to use])
11789                 if test "$with_system_bluez" = "yes"; then
11790                     AC_MSG_RESULT([external])
11791                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
11792                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
11793                     SYSTEM_BLUEZ=TRUE
11794                 else
11795                     AC_MSG_RESULT([internal])
11796                     SYSTEM_BLUEZ=
11797                 fi
11798             else
11799                 AC_MSG_RESULT([no, dbus disabled])
11800                 ENABLE_SDREMOTE_BLUETOOTH=
11801                 SYSTEM_BLUEZ=
11802             fi
11803         else
11804             AC_MSG_RESULT([yes])
11805             ENABLE_SDREMOTE_BLUETOOTH=TRUE
11806             SYSTEM_BLUEZ=
11807         fi
11808     else
11809         AC_MSG_RESULT([no])
11810         ENABLE_SDREMOTE_BLUETOOTH=
11811         SYSTEM_BLUEZ=
11812     fi
11813 else
11814     ENABLE_SDREMOTE=
11815     SYSTEM_BLUEZ=
11816     AC_MSG_RESULT([no])
11818 AC_SUBST(ENABLE_SDREMOTE)
11819 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
11820 AC_SUBST(SYSTEM_BLUEZ)
11822 dnl ===================================================================
11823 dnl Check whether to enable GIO support
11824 dnl ===================================================================
11825 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11826     AC_MSG_CHECKING([whether to enable GIO support])
11827     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
11828         dnl Need at least 2.26 for the dbus support.
11829         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
11830                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
11831         if test "$ENABLE_GIO" = "TRUE"; then
11832             AC_DEFINE(ENABLE_GIO)
11833             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11834             FilterLibs "${GIO_LIBS}"
11835             GIO_LIBS="${filteredlibs}"
11836         fi
11837     else
11838         AC_MSG_RESULT([no])
11839     fi
11841 AC_SUBST(ENABLE_GIO)
11842 AC_SUBST(GIO_CFLAGS)
11843 AC_SUBST(GIO_LIBS)
11846 dnl ===================================================================
11848 SPLIT_APP_MODULES=""
11849 if test "$enable_split_app_modules" = "yes"; then
11850     SPLIT_APP_MODULES="TRUE"
11852 AC_SUBST(SPLIT_APP_MODULES)
11854 SPLIT_OPT_FEATURES=""
11855 if test "$enable_split_opt_features" = "yes"; then
11856     SPLIT_OPT_FEATURES="TRUE"
11858 AC_SUBST(SPLIT_OPT_FEATURES)
11860 dnl ===================================================================
11861 dnl Check whether the GStreamer libraries are available.
11862 dnl ===================================================================
11864 ENABLE_GSTREAMER_1_0=""
11866 if test "$test_gstreamer_1_0" = yes; then
11868     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
11869     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
11870         ENABLE_GSTREAMER_1_0="TRUE"
11871         AC_MSG_RESULT([yes])
11872         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
11873         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11874         FilterLibs "${GSTREAMER_1_0_LIBS}"
11875         GSTREAMER_1_0_LIBS="${filteredlibs}"
11876         AC_DEFINE(ENABLE_GSTREAMER_1_0)
11877     else
11878         AC_MSG_RESULT([no])
11879     fi
11881 AC_SUBST(GSTREAMER_1_0_CFLAGS)
11882 AC_SUBST(GSTREAMER_1_0_LIBS)
11883 AC_SUBST(ENABLE_GSTREAMER_1_0)
11885 ENABLE_OPENGL_TRANSITIONS=
11886 ENABLE_OPENGL_CANVAS=
11887 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
11888    : # disable
11889 elif test "$_os" = "Darwin"; then
11890     # We use frameworks on macOS, no need for detail checks
11891     ENABLE_OPENGL_TRANSITIONS=TRUE
11892     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11893     ENABLE_OPENGL_CANVAS=TRUE
11894 elif test $_os = WINNT; then
11895     ENABLE_OPENGL_TRANSITIONS=TRUE
11896     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11897     ENABLE_OPENGL_CANVAS=TRUE
11898 else
11899     if test "$USING_X11" = TRUE; then
11900         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
11901         ENABLE_OPENGL_TRANSITIONS=TRUE
11902         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11903         ENABLE_OPENGL_CANVAS=TRUE
11904     fi
11907 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
11908 AC_SUBST(ENABLE_OPENGL_CANVAS)
11910 dnl =================================================
11911 dnl Check whether to build with OpenCL support.
11912 dnl =================================================
11914 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
11915     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
11916     # platform (optional at run-time, used through clew).
11917     BUILD_TYPE="$BUILD_TYPE OPENCL"
11918     AC_DEFINE(HAVE_FEATURE_OPENCL)
11921 dnl =================================================
11922 dnl Check whether to build with dconf support.
11923 dnl =================================================
11925 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
11926     PKG_CHECK_MODULES([DCONF], [dconf >= 0.15.2], [], [
11927         if test "$enable_dconf" = yes; then
11928             AC_MSG_ERROR([dconf not found])
11929         else
11930             enable_dconf=no
11931         fi])
11933 AC_MSG_CHECKING([whether to enable dconf])
11934 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
11935     DCONF_CFLAGS=
11936     DCONF_LIBS=
11937     ENABLE_DCONF=
11938     AC_MSG_RESULT([no])
11939 else
11940     ENABLE_DCONF=TRUE
11941     AC_DEFINE(ENABLE_DCONF)
11942     AC_MSG_RESULT([yes])
11944 AC_SUBST([DCONF_CFLAGS])
11945 AC_SUBST([DCONF_LIBS])
11946 AC_SUBST([ENABLE_DCONF])
11948 # pdf import?
11949 AC_MSG_CHECKING([whether to build the PDF import feature])
11950 ENABLE_PDFIMPORT=
11951 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
11952     AC_MSG_RESULT([yes])
11953     ENABLE_PDFIMPORT=TRUE
11954     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
11955 else
11956     AC_MSG_RESULT([no])
11959 # Pdfium?
11960 AC_MSG_CHECKING([whether to build PDFium])
11961 ENABLE_PDFIUM=
11962 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
11963     AC_MSG_RESULT([yes])
11964     ENABLE_PDFIUM=TRUE
11965     BUILD_TYPE="$BUILD_TYPE PDFIUM"
11966 else
11967     AC_MSG_RESULT([no])
11969 AC_SUBST(ENABLE_PDFIUM)
11971 if test "$ENABLE_PDFIUM" = "TRUE"; then
11972         AC_MSG_CHECKING([which OpenJPEG library to use])
11973         if test "$with_system_openjpeg" = "yes"; then
11974                 SYSTEM_OPENJPEG2=TRUE
11975                 AC_MSG_RESULT([external])
11976                 PKG_CHECK_MODULES( OPENJPEG2, libopenjp2 )
11977                 OPENJPEG2_CFLAGS=$(printf '%s' "$OPENJPEG2_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11978                 FilterLibs "${OPENJPEG2_LIBS}"
11979                 OPENJPEG2_LIBS="${filteredlibs}"
11980         else
11981                 SYSTEM_OPENJPEG2=FALSE
11982                 AC_MSG_RESULT([internal])
11983         fi
11984         AC_MSG_CHECKING([which Abseil library to use])
11985         if test "$with_system_abseil" = "yes"; then
11986                 AC_MSG_RESULT([external])
11987                 SYSTEM_ABSEIL=TRUE
11988                 AC_LANG_PUSH([C++])
11989                 AC_CHECK_HEADER(absl/types/bad_optional_access.h, [],
11990                         [AC_MSG_ERROR(abseil headers not found.)], [])
11991                 #ABSEIL_CFLAGS=-I/usr/include
11992                 AC_CHECK_LIB([absl_bad_optional_access], [main], [ABSEIL_LIBS=-labsl_bad_optional_access],
11993                         [ AC_MSG_ERROR([libabsl_bad_optional_access library not found.]) ])
11994                 AC_LANG_POP([C++])
11995                 ABSEIL_CFLAGS=$(printf '%s' "$ABSEIL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11996                 FilterLibs "${ABSEIL_LIBS}"
11997                 ABSEIL_LIBS="${filteredlibs}"
11998         else
11999                 AC_MSG_RESULT([internal])
12000         fi
12002 AC_SUBST(SYSTEM_OPENJPEG2)
12003 AC_SUBST(SYSTEM_ABSEIL)
12004 AC_SUBST(ABSEIL_CFLAGS)
12005 AC_SUBST(ABSEIL_LIBS)
12007 dnl ===================================================================
12008 dnl Check for poppler
12009 dnl ===================================================================
12010 ENABLE_POPPLER=
12011 AC_MSG_CHECKING([whether to build Poppler])
12012 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
12013     AC_MSG_RESULT([yes])
12014     ENABLE_POPPLER=TRUE
12015     AC_DEFINE(HAVE_FEATURE_POPPLER)
12016 else
12017     AC_MSG_RESULT([no])
12019 AC_SUBST(ENABLE_POPPLER)
12021 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
12022     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
12025 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
12026     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
12029 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
12030     dnl ===================================================================
12031     dnl Check for system poppler
12032     dnl ===================================================================
12033     AC_MSG_CHECKING([which PDF import poppler to use])
12034     if test "$with_system_poppler" = "yes"; then
12035         AC_MSG_RESULT([external])
12036         SYSTEM_POPPLER=TRUE
12037         PKG_CHECK_MODULES(POPPLER,[poppler >= 0.14 poppler-cpp])
12038         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12039         FilterLibs "${POPPLER_LIBS}"
12040         POPPLER_LIBS="${filteredlibs}"
12041     else
12042         AC_MSG_RESULT([internal])
12043         SYSTEM_POPPLER=
12044         BUILD_TYPE="$BUILD_TYPE POPPLER"
12045     fi
12046     AC_DEFINE([ENABLE_PDFIMPORT],1)
12048 AC_SUBST(ENABLE_PDFIMPORT)
12049 AC_SUBST(SYSTEM_POPPLER)
12050 AC_SUBST(POPPLER_CFLAGS)
12051 AC_SUBST(POPPLER_LIBS)
12053 # Skia?
12054 ENABLE_SKIA=
12055 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
12056     # Skia now requires at least freetype2 >= 2.8.1, which is less that what LO requires as system freetype.
12057     if test "$SYSTEM_FREETYPE" = TRUE; then
12058         PKG_CHECK_EXISTS(freetype2 >= 21.0.15, # 21.0.15 = 2.8.1
12059             [skia_freetype_ok=yes],
12060             [skia_freetype_ok=no])
12061     else # internal is ok
12062         skia_freetype_ok=yes
12063     fi
12064     AC_MSG_CHECKING([whether to build Skia])
12065     if test "$skia_freetype_ok" = "yes"; then
12066         if test "$enable_skia" = "debug"; then
12067             AC_MSG_RESULT([yes (debug)])
12068             ENABLE_SKIA_DEBUG=TRUE
12069         else
12070             AC_MSG_RESULT([yes])
12071             ENABLE_SKIA_DEBUG=
12072         fi
12073         ENABLE_SKIA=TRUE
12074         AC_DEFINE(HAVE_FEATURE_SKIA)
12075         BUILD_TYPE="$BUILD_TYPE SKIA"
12077         if test "$OS" = "MACOSX"; then
12078             AC_DEFINE(SK_SUPPORT_GPU,1)
12079             AC_DEFINE(SK_METAL,1)
12080             SKIA_GPU=METAL
12081             AC_SUBST(SKIA_GPU)
12082         else
12083             AC_DEFINE(SK_SUPPORT_GPU,1)
12084             AC_DEFINE(SK_VULKAN,1)
12085             SKIA_GPU=VULKAN
12086             AC_SUBST(SKIA_GPU)
12087         fi
12089         if test -n "$MAC_OS_X_VERSION_MIN_REQUIRED" && test "$MAC_OS_X_VERSION_MIN_REQUIRED" -lt "101200"; then
12090             SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX=1
12091             AC_SUBST(SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX)
12092         fi
12093     else
12094         AC_MSG_RESULT([no (freetype too old)])
12095         add_warning "freetype version is too old for Skia library, at least 2.8.1 required, Skia support disabled"
12096     fi
12098 else
12099     AC_MSG_CHECKING([whether to build Skia])
12100     AC_MSG_RESULT([no])
12102 AC_SUBST(ENABLE_SKIA)
12103 AC_SUBST(ENABLE_SKIA_DEBUG)
12105 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
12106 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
12107 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
12108 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
12109 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
12110 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
12111 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
12112 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F=
12113 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
12114 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
12115 HAVE_LO_CLANG_DLLEXPORTINLINES=
12117 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE; then
12118     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12119         AC_MSG_CHECKING([for Clang])
12120         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
12121     else
12122         if test "$_os" = "WINNT"; then
12123             AC_MSG_CHECKING([for clang-cl])
12124             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
12125                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
12126                 dnl explicitly set -m32/-m64
12127                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
12128                 LO_CLANG_CXX="$LO_CLANG_CC"
12129                 AC_MSG_RESULT([$LO_CLANG_CC])
12130             else
12131                 AC_MSG_RESULT([no])
12132             fi
12133         else
12134             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
12135             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
12136         fi
12137     fi
12138     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12139         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
12140         clang2_ver=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
12141         if test "$clang2_ver" -lt 50002; then
12142             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
12143             LO_CLANG_CC=
12144             LO_CLANG_CXX=
12145         fi
12146     fi
12147     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX" -a "$_os" = "WINNT"; then
12148         save_CXX="$CXX"
12149         CXX="$LO_CLANG_CXX"
12150         AC_MSG_CHECKING([whether $CXX supports -Zc:dllexportInlines-])
12151         AC_LANG_PUSH([C++])
12152         save_CXXFLAGS=$CXXFLAGS
12153         CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
12154         AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
12155                 HAVE_LO_CLANG_DLLEXPORTINLINES=TRUE
12156                 AC_MSG_RESULT([yes])
12157             ], [AC_MSG_RESULT([no])])
12158         CXXFLAGS=$save_CXXFLAGS
12159         AC_LANG_POP([C++])
12160         CXX="$save_CXX"
12161         if test -z "$HAVE_LO_CLANG_DLLEXPORTINLINES"; then
12162             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.])
12163         fi
12164     fi
12165     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
12166         # Skia is the default on Windows and Mac, so hard-require Clang.
12167         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
12168         if test "$_os" = "WINNT" -o "$_os" = "Darwin"; then
12169             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang, or use --disable-skia.])
12170         else
12171             AC_MSG_WARN([Clang compiler not found.])
12172         fi
12173     else
12175         save_CXX="$CXX"
12176         CXX="$LO_CLANG_CXX"
12177         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
12178         flag_sse2=-msse2
12179         flag_ssse3=-mssse3
12180         flag_sse41=-msse4.1
12181         flag_sse42=-msse4.2
12182         flag_avx=-mavx
12183         flag_avx2=-mavx2
12184         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
12185         flag_avx512f=-mavx512f
12186         flag_f16c=-mf16c
12187         flag_fma=-mfma
12189         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
12190         AC_LANG_PUSH([C++])
12191         save_CXXFLAGS=$CXXFLAGS
12192         CXXFLAGS="$CXXFLAGS $flag_sse2"
12193         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12194             #include <emmintrin.h>
12195             int main () {
12196                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12197                 c = _mm_xor_si128 (a, b);
12198                 return 0;
12199             }
12200             ])],
12201             [can_compile_sse2=yes],
12202             [can_compile_sse2=no])
12203         AC_LANG_POP([C++])
12204         CXXFLAGS=$save_CXXFLAGS
12205         AC_MSG_RESULT([${can_compile_sse2}])
12206         if test "${can_compile_sse2}" = "yes" ; then
12207             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
12208         fi
12210         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
12211         AC_LANG_PUSH([C++])
12212         save_CXXFLAGS=$CXXFLAGS
12213         CXXFLAGS="$CXXFLAGS $flag_ssse3"
12214         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12215             #include <tmmintrin.h>
12216             int main () {
12217                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12218                 c = _mm_maddubs_epi16 (a, b);
12219                 return 0;
12220             }
12221             ])],
12222             [can_compile_ssse3=yes],
12223             [can_compile_ssse3=no])
12224         AC_LANG_POP([C++])
12225         CXXFLAGS=$save_CXXFLAGS
12226         AC_MSG_RESULT([${can_compile_ssse3}])
12227         if test "${can_compile_ssse3}" = "yes" ; then
12228             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
12229         fi
12231         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
12232         AC_LANG_PUSH([C++])
12233         save_CXXFLAGS=$CXXFLAGS
12234         CXXFLAGS="$CXXFLAGS $flag_sse41"
12235         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12236             #include <smmintrin.h>
12237             int main () {
12238                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12239                 c = _mm_cmpeq_epi64 (a, b);
12240                 return 0;
12241             }
12242             ])],
12243             [can_compile_sse41=yes],
12244             [can_compile_sse41=no])
12245         AC_LANG_POP([C++])
12246         CXXFLAGS=$save_CXXFLAGS
12247         AC_MSG_RESULT([${can_compile_sse41}])
12248         if test "${can_compile_sse41}" = "yes" ; then
12249             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12250         fi
12252         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12253         AC_LANG_PUSH([C++])
12254         save_CXXFLAGS=$CXXFLAGS
12255         CXXFLAGS="$CXXFLAGS $flag_sse42"
12256         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12257             #include <nmmintrin.h>
12258             int main () {
12259                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12260                 c = _mm_cmpgt_epi64 (a, b);
12261                 return 0;
12262             }
12263             ])],
12264             [can_compile_sse42=yes],
12265             [can_compile_sse42=no])
12266         AC_LANG_POP([C++])
12267         CXXFLAGS=$save_CXXFLAGS
12268         AC_MSG_RESULT([${can_compile_sse42}])
12269         if test "${can_compile_sse42}" = "yes" ; then
12270             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12271         fi
12273         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12274         AC_LANG_PUSH([C++])
12275         save_CXXFLAGS=$CXXFLAGS
12276         CXXFLAGS="$CXXFLAGS $flag_avx"
12277         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12278             #include <immintrin.h>
12279             int main () {
12280                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12281                 c = _mm256_xor_ps(a, b);
12282                 return 0;
12283             }
12284             ])],
12285             [can_compile_avx=yes],
12286             [can_compile_avx=no])
12287         AC_LANG_POP([C++])
12288         CXXFLAGS=$save_CXXFLAGS
12289         AC_MSG_RESULT([${can_compile_avx}])
12290         if test "${can_compile_avx}" = "yes" ; then
12291             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12292         fi
12294         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12295         AC_LANG_PUSH([C++])
12296         save_CXXFLAGS=$CXXFLAGS
12297         CXXFLAGS="$CXXFLAGS $flag_avx2"
12298         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12299             #include <immintrin.h>
12300             int main () {
12301                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12302                 c = _mm256_maddubs_epi16(a, b);
12303                 return 0;
12304             }
12305             ])],
12306             [can_compile_avx2=yes],
12307             [can_compile_avx2=no])
12308         AC_LANG_POP([C++])
12309         CXXFLAGS=$save_CXXFLAGS
12310         AC_MSG_RESULT([${can_compile_avx2}])
12311         if test "${can_compile_avx2}" = "yes" ; then
12312             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12313         fi
12315         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12316         AC_LANG_PUSH([C++])
12317         save_CXXFLAGS=$CXXFLAGS
12318         CXXFLAGS="$CXXFLAGS $flag_avx512"
12319         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12320             #include <immintrin.h>
12321             int main () {
12322                 __m512i a = _mm512_loadu_si512(0);
12323                 __m512d v1 = _mm512_load_pd(0);
12324                 // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
12325                 __m512d v2 = _mm512_abs_pd(v1);
12326                 return 0;
12327             }
12328             ])],
12329             [can_compile_avx512=yes],
12330             [can_compile_avx512=no])
12331         AC_LANG_POP([C++])
12332         CXXFLAGS=$save_CXXFLAGS
12333         AC_MSG_RESULT([${can_compile_avx512}])
12334         if test "${can_compile_avx512}" = "yes" ; then
12335             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12336             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
12337         fi
12339         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12340         AC_LANG_PUSH([C++])
12341         save_CXXFLAGS=$CXXFLAGS
12342         CXXFLAGS="$CXXFLAGS $flag_f16c"
12343         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12344             #include <immintrin.h>
12345             int main () {
12346                 __m128i a = _mm_set1_epi32 (0);
12347                 __m128 c;
12348                 c = _mm_cvtph_ps(a);
12349                 return 0;
12350             }
12351             ])],
12352             [can_compile_f16c=yes],
12353             [can_compile_f16c=no])
12354         AC_LANG_POP([C++])
12355         CXXFLAGS=$save_CXXFLAGS
12356         AC_MSG_RESULT([${can_compile_f16c}])
12357         if test "${can_compile_f16c}" = "yes" ; then
12358             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12359         fi
12361         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12362         AC_LANG_PUSH([C++])
12363         save_CXXFLAGS=$CXXFLAGS
12364         CXXFLAGS="$CXXFLAGS $flag_fma"
12365         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12366             #include <immintrin.h>
12367             int main () {
12368                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12369                 d = _mm256_fmadd_ps(a, b, c);
12370                 return 0;
12371             }
12372             ])],
12373             [can_compile_fma=yes],
12374             [can_compile_fma=no])
12375         AC_LANG_POP([C++])
12376         CXXFLAGS=$save_CXXFLAGS
12377         AC_MSG_RESULT([${can_compile_fma}])
12378         if test "${can_compile_fma}" = "yes" ; then
12379             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12380         fi
12382         CXX="$save_CXX"
12383     fi
12386 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12388 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12389     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12390     AC_LANG_PUSH([C])
12391     save_CC="$CC"
12392     CC="$LO_CLANG_CC"
12393     save_CFLAGS=$CFLAGS
12394     CFLAGS="$CFLAGS --ccache-skip -O2 -Werror"
12395     dnl an empty program will do, we're checking the compiler flags
12396     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12397                       [use_ccache=yes], [use_ccache=no])
12398     CFLAGS=$save_CFLAGS
12399     CC=$save_CC
12400     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12401         AC_MSG_RESULT([yes])
12402     else
12403         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12404         AC_MSG_RESULT([no])
12405     fi
12406     AC_LANG_POP([C])
12408     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12409     AC_LANG_PUSH([C++])
12410     save_CXX="$CXX"
12411     CXX="$LO_CLANG_CXX"
12412     save_CXXFLAGS=$CXXFLAGS
12413     CXXFLAGS="$CXXFLAGS --ccache-skip -O2 -Werror"
12414     dnl an empty program will do, we're checking the compiler flags
12415     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12416                       [use_ccache=yes], [use_ccache=no])
12417     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12418         AC_MSG_RESULT([yes])
12419     else
12420         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12421         AC_MSG_RESULT([no])
12422     fi
12423     CXXFLAGS=$save_CXXFLAGS
12424     CXX=$save_CXX
12425     AC_LANG_POP([C++])
12428 AC_SUBST(LO_CLANG_CC)
12429 AC_SUBST(LO_CLANG_CXX)
12430 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12431 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12432 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12433 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12434 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12435 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12436 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12437 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F)
12438 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12439 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12440 AC_SUBST(CLANG_USE_LD)
12441 AC_SUBST([HAVE_LO_CLANG_DLLEXPORTINLINES])
12443 SYSTEM_GPGMEPP=
12445 if test "$enable_gpgmepp" = no; then
12446     AC_MSG_CHECKING([whether to enable gpgmepp])
12447     AC_MSG_RESULT([no])
12448 elif test "$enable_mpl_subset" = "yes"; then
12449     AC_MSG_CHECKING([whether gpgmepp should be disabled due to building just MPL])
12450     AC_MSG_RESULT([yes])
12451 elif test "$enable_fuzzers" = "yes"; then
12452     AC_MSG_CHECKING([whether gpgmepp should be disabled due to oss-fuzz])
12453     AC_MSG_RESULT([yes])
12454 elif test "$_os" = "Linux" -o "$_os" = "Darwin" -o "$_os" = "WINNT" ; then
12455     dnl ===================================================================
12456     dnl Check for system gpgme
12457     dnl ===================================================================
12458     AC_MSG_CHECKING([which gpgmepp to use])
12459     if test "$with_system_gpgmepp" = "yes"; then
12460         AC_MSG_RESULT([external])
12461         SYSTEM_GPGMEPP=TRUE
12463         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12464         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12465             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp >= 1.14 development package])], [])
12466         # progress_callback is the only func with plain C linkage
12467         # checking for it also filters out older, KDE-dependent libgpgmepp versions
12468         AC_CHECK_LIB(gpgmepp, progress_callback, [ GPGMEPP_LIBS=-lgpgmepp ],
12469             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12470         AC_CHECK_HEADER(gpgme.h, [],
12471             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12472     else
12473         AC_MSG_RESULT([internal])
12474         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12476         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12477         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12478         if test "$_os" != "WINNT"; then
12479             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12480             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12481         fi
12482     fi
12483     ENABLE_GPGMEPP=TRUE
12484     AC_DEFINE([HAVE_FEATURE_GPGME])
12485     AC_PATH_PROG(GPG, gpg)
12486     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12487     # so let's exclude that manually for the moment
12488     if test -n "$GPG" -a "$_os" != "WINNT"; then
12489         # make sure we not only have a working gpgme, but a full working
12490         # gpg installation to run OpenPGP signature verification
12491         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12492     fi
12493     if test "$_os" = "Linux"; then
12494       uid=`id -u`
12495       AC_MSG_CHECKING([for /run/user/$uid])
12496       if test -d /run/user/$uid; then
12497         AC_MSG_RESULT([yes])
12498         AC_PATH_PROG(GPGCONF, gpgconf)
12500         # Older versions of gpgconf are not working as expected, since
12501         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12502         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12503         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12504         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12505         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12506         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12507         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12508           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12509           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12510           if $GPGCONF --dump-options > /dev/null ; then
12511             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12512               AC_MSG_RESULT([yes])
12513               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12514               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12515             else
12516               AC_MSG_RESULT([no])
12517             fi
12518           else
12519             AC_MSG_RESULT([no. missing or broken gpgconf?])
12520           fi
12521         else
12522           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12523         fi
12524       else
12525         AC_MSG_RESULT([no])
12526      fi
12527    fi
12529 AC_SUBST(ENABLE_GPGMEPP)
12530 AC_SUBST(SYSTEM_GPGMEPP)
12531 AC_SUBST(GPG_ERROR_CFLAGS)
12532 AC_SUBST(GPG_ERROR_LIBS)
12533 AC_SUBST(LIBASSUAN_CFLAGS)
12534 AC_SUBST(LIBASSUAN_LIBS)
12535 AC_SUBST(GPGMEPP_CFLAGS)
12536 AC_SUBST(GPGMEPP_LIBS)
12538 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12539 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12540     AC_MSG_RESULT([yes])
12541     ENABLE_MEDIAWIKI=TRUE
12542     BUILD_TYPE="$BUILD_TYPE XSLTML"
12543     if test  "x$with_java" = "xno"; then
12544         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12545     fi
12546 else
12547     AC_MSG_RESULT([no])
12548     ENABLE_MEDIAWIKI=
12549     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12551 AC_SUBST(ENABLE_MEDIAWIKI)
12553 AC_MSG_CHECKING([whether to build the Report Builder])
12554 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12555     AC_MSG_RESULT([yes])
12556     ENABLE_REPORTBUILDER=TRUE
12557     AC_MSG_CHECKING([which jfreereport libs to use])
12558     if test "$with_system_jfreereport" = "yes"; then
12559         SYSTEM_JFREEREPORT=TRUE
12560         AC_MSG_RESULT([external])
12561         if test -z $SAC_JAR; then
12562             SAC_JAR=/usr/share/java/sac.jar
12563         fi
12564         if ! test -f $SAC_JAR; then
12565              AC_MSG_ERROR(sac.jar not found.)
12566         fi
12568         if test -z $LIBXML_JAR; then
12569             if test -f /usr/share/java/libxml-1.0.0.jar; then
12570                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12571             elif test -f /usr/share/java/libxml.jar; then
12572                 LIBXML_JAR=/usr/share/java/libxml.jar
12573             else
12574                 AC_MSG_ERROR(libxml.jar replacement not found.)
12575             fi
12576         elif ! test -f $LIBXML_JAR; then
12577             AC_MSG_ERROR(libxml.jar not found.)
12578         fi
12580         if test -z $FLUTE_JAR; then
12581             if test -f /usr/share/java/flute-1.3.0.jar; then
12582                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12583             elif test -f /usr/share/java/flute.jar; then
12584                 FLUTE_JAR=/usr/share/java/flute.jar
12585             else
12586                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12587             fi
12588         elif ! test -f $FLUTE_JAR; then
12589             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12590         fi
12592         if test -z $JFREEREPORT_JAR; then
12593             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12594                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12595             elif test -f /usr/share/java/flow-engine.jar; then
12596                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12597             else
12598                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12599             fi
12600         elif ! test -f  $JFREEREPORT_JAR; then
12601                 AC_MSG_ERROR(jfreereport.jar not found.)
12602         fi
12604         if test -z $LIBLAYOUT_JAR; then
12605             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12606                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12607             elif test -f /usr/share/java/liblayout.jar; then
12608                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12609             else
12610                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12611             fi
12612         elif ! test -f $LIBLAYOUT_JAR; then
12613                 AC_MSG_ERROR(liblayout.jar not found.)
12614         fi
12616         if test -z $LIBLOADER_JAR; then
12617             if test -f /usr/share/java/libloader-1.0.0.jar; then
12618                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
12619             elif test -f /usr/share/java/libloader.jar; then
12620                 LIBLOADER_JAR=/usr/share/java/libloader.jar
12621             else
12622                 AC_MSG_ERROR(libloader.jar replacement not found.)
12623             fi
12624         elif ! test -f  $LIBLOADER_JAR; then
12625             AC_MSG_ERROR(libloader.jar not found.)
12626         fi
12628         if test -z $LIBFORMULA_JAR; then
12629             if test -f /usr/share/java/libformula-0.2.0.jar; then
12630                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
12631             elif test -f /usr/share/java/libformula.jar; then
12632                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
12633             else
12634                 AC_MSG_ERROR(libformula.jar replacement not found.)
12635             fi
12636         elif ! test -f $LIBFORMULA_JAR; then
12637                 AC_MSG_ERROR(libformula.jar not found.)
12638         fi
12640         if test -z $LIBREPOSITORY_JAR; then
12641             if test -f /usr/share/java/librepository-1.0.0.jar; then
12642                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
12643             elif test -f /usr/share/java/librepository.jar; then
12644                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
12645             else
12646                 AC_MSG_ERROR(librepository.jar replacement not found.)
12647             fi
12648         elif ! test -f $LIBREPOSITORY_JAR; then
12649             AC_MSG_ERROR(librepository.jar not found.)
12650         fi
12652         if test -z $LIBFONTS_JAR; then
12653             if test -f /usr/share/java/libfonts-1.0.0.jar; then
12654                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
12655             elif test -f /usr/share/java/libfonts.jar; then
12656                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
12657             else
12658                 AC_MSG_ERROR(libfonts.jar replacement not found.)
12659             fi
12660         elif ! test -f $LIBFONTS_JAR; then
12661                 AC_MSG_ERROR(libfonts.jar not found.)
12662         fi
12664         if test -z $LIBSERIALIZER_JAR; then
12665             if test -f /usr/share/java/libserializer-1.0.0.jar; then
12666                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
12667             elif test -f /usr/share/java/libserializer.jar; then
12668                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
12669             else
12670                 AC_MSG_ERROR(libserializer.jar replacement not found.)
12671             fi
12672         elif ! test -f $LIBSERIALIZER_JAR; then
12673                 AC_MSG_ERROR(libserializer.jar not found.)
12674         fi
12676         if test -z $LIBBASE_JAR; then
12677             if test -f /usr/share/java/libbase-1.0.0.jar; then
12678                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
12679             elif test -f /usr/share/java/libbase.jar; then
12680                 LIBBASE_JAR=/usr/share/java/libbase.jar
12681             else
12682                 AC_MSG_ERROR(libbase.jar replacement not found.)
12683             fi
12684         elif ! test -f $LIBBASE_JAR; then
12685             AC_MSG_ERROR(libbase.jar not found.)
12686         fi
12688     else
12689         AC_MSG_RESULT([internal])
12690         SYSTEM_JFREEREPORT=
12691         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
12692         NEED_ANT=TRUE
12693     fi
12694 else
12695     AC_MSG_RESULT([no])
12696     ENABLE_REPORTBUILDER=
12697     SYSTEM_JFREEREPORT=
12699 AC_SUBST(ENABLE_REPORTBUILDER)
12700 AC_SUBST(SYSTEM_JFREEREPORT)
12701 AC_SUBST(SAC_JAR)
12702 AC_SUBST(LIBXML_JAR)
12703 AC_SUBST(FLUTE_JAR)
12704 AC_SUBST(JFREEREPORT_JAR)
12705 AC_SUBST(LIBBASE_JAR)
12706 AC_SUBST(LIBLAYOUT_JAR)
12707 AC_SUBST(LIBLOADER_JAR)
12708 AC_SUBST(LIBFORMULA_JAR)
12709 AC_SUBST(LIBREPOSITORY_JAR)
12710 AC_SUBST(LIBFONTS_JAR)
12711 AC_SUBST(LIBSERIALIZER_JAR)
12713 # scripting provider for BeanShell?
12714 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
12715 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
12716     AC_MSG_RESULT([yes])
12717     ENABLE_SCRIPTING_BEANSHELL=TRUE
12719     dnl ===================================================================
12720     dnl Check for system beanshell
12721     dnl ===================================================================
12722     AC_MSG_CHECKING([which beanshell to use])
12723     if test "$with_system_beanshell" = "yes"; then
12724         AC_MSG_RESULT([external])
12725         SYSTEM_BSH=TRUE
12726         if test -z $BSH_JAR; then
12727             BSH_JAR=/usr/share/java/bsh.jar
12728         fi
12729         if ! test -f $BSH_JAR; then
12730             AC_MSG_ERROR(bsh.jar not found.)
12731         fi
12732     else
12733         AC_MSG_RESULT([internal])
12734         SYSTEM_BSH=
12735         BUILD_TYPE="$BUILD_TYPE BSH"
12736     fi
12737 else
12738     AC_MSG_RESULT([no])
12739     ENABLE_SCRIPTING_BEANSHELL=
12740     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
12742 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
12743 AC_SUBST(SYSTEM_BSH)
12744 AC_SUBST(BSH_JAR)
12746 # scripting provider for JavaScript?
12747 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
12748 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
12749     AC_MSG_RESULT([yes])
12750     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
12752     dnl ===================================================================
12753     dnl Check for system rhino
12754     dnl ===================================================================
12755     AC_MSG_CHECKING([which rhino to use])
12756     if test "$with_system_rhino" = "yes"; then
12757         AC_MSG_RESULT([external])
12758         SYSTEM_RHINO=TRUE
12759         if test -z $RHINO_JAR; then
12760             RHINO_JAR=/usr/share/java/js.jar
12761         fi
12762         if ! test -f $RHINO_JAR; then
12763             AC_MSG_ERROR(js.jar not found.)
12764         fi
12765     else
12766         AC_MSG_RESULT([internal])
12767         SYSTEM_RHINO=
12768         BUILD_TYPE="$BUILD_TYPE RHINO"
12769         NEED_ANT=TRUE
12770     fi
12771 else
12772     AC_MSG_RESULT([no])
12773     ENABLE_SCRIPTING_JAVASCRIPT=
12774     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
12776 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
12777 AC_SUBST(SYSTEM_RHINO)
12778 AC_SUBST(RHINO_JAR)
12780 # This is only used in Qt5/Qt6/KF5 checks to determine if /usr/lib64
12781 # paths should be added to library search path. So lets put all 64-bit
12782 # platforms there.
12783 supports_multilib=
12784 case "$host_cpu" in
12785 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el)
12786     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
12787         supports_multilib="yes"
12788     fi
12789     ;;
12791     ;;
12792 esac
12794 dnl ===================================================================
12795 dnl QT5 Integration
12796 dnl ===================================================================
12798 QT5_CFLAGS=""
12799 QT5_LIBS=""
12800 QMAKE5="qmake"
12801 MOC5="moc"
12802 QT5_GOBJECT_CFLAGS=""
12803 QT5_GOBJECT_LIBS=""
12804 QT5_HAVE_GOBJECT=""
12805 QT5_PLATFORMS_SRCDIR=""
12806 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12807         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
12808         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12809 then
12810     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
12811     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
12813     if test -n "$supports_multilib"; then
12814         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
12815     fi
12817     qt5_test_include="QtWidgets/qapplication.h"
12818     if test "$_os" = "Emscripten"; then
12819         qt5_test_library="libQt5Widgets.a"
12820     else
12821         qt5_test_library="libQt5Widgets.so"
12822     fi
12824     dnl Check for qmake5
12825     if test -n "$QT5DIR"; then
12826         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
12827     else
12828         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
12829     fi
12830     if test "$QMAKE5" = "no"; then
12831         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12832     else
12833         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
12834         if test -z "$qmake5_test_ver"; then
12835             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12836         fi
12837         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
12838         qt5_minimal_minor="6"
12839         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
12840             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
12841         else
12842             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
12843         fi
12844     fi
12846     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
12847     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
12848     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
12849     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
12851     AC_MSG_CHECKING([for Qt5 headers])
12852     qt5_incdir="no"
12853     for inc_dir in $qt5_incdirs; do
12854         if test -r "$inc_dir/$qt5_test_include"; then
12855             qt5_incdir="$inc_dir"
12856             break
12857         fi
12858     done
12859     AC_MSG_RESULT([$qt5_incdir])
12860     if test "x$qt5_incdir" = "xno"; then
12861         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12862     fi
12863     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
12864     AC_LANG_PUSH([C++])
12865     save_CPPFLAGS=$CPPFLAGS
12866     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
12867     AC_CHECK_HEADER(QtCore/qconfig.h, [],
12868         [AC_MSG_ERROR(qconfig.h header not found.)], [])
12869     CPPFLAGS=$save_CPPFLAGS
12870     AC_LANG_POP([C++])
12872     AC_MSG_CHECKING([for Qt5 libraries])
12873     qt5_libdir="no"
12874     for lib_dir in $qt5_libdirs; do
12875         if test -r "$lib_dir/$qt5_test_library"; then
12876             qt5_libdir="$lib_dir"
12877             break
12878         fi
12879     done
12880     AC_MSG_RESULT([$qt5_libdir])
12881     if test "x$qt5_libdir" = "xno"; then
12882         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12883     fi
12885     if test "$_os" = "Emscripten"; then
12886         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
12887             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
12888         fi
12889         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
12890             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
12891         fi
12892     fi
12894     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
12895     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12896     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
12897     if test "$_os" = "Emscripten"; then
12898         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
12899     fi
12901     if test "$USING_X11" = TRUE; then
12902         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
12903         PKG_CHECK_MODULES(QT5_XCB_ICCCM,[xcb-icccm],[
12904             QT5_HAVE_XCB_ICCCM=1
12905             AC_DEFINE(QT5_HAVE_XCB_ICCCM)
12906         ],[
12907             AC_MSG_WARN([XCB ICCCM not found, which is needed for old Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)])
12908             add_warning "XCB ICCCM not found, which is needed for Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)"
12909         ])
12910         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
12911         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
12912         QT5_USING_X11=1
12913         AC_DEFINE(QT5_USING_X11)
12914     fi
12916     dnl Check for Meta Object Compiler
12918     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
12919     if test "$MOC5" = "no"; then
12920         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
12921 the root of your Qt installation by exporting QT5DIR before running "configure".])
12922     fi
12924     if test "$test_gstreamer_1_0" = yes; then
12925         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
12926                 QT5_HAVE_GOBJECT=1
12927                 AC_DEFINE(QT5_HAVE_GOBJECT)
12928             ],
12929             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
12930         )
12931     fi
12933 AC_SUBST(QT5_CFLAGS)
12934 AC_SUBST(QT5_LIBS)
12935 AC_SUBST(MOC5)
12936 AC_SUBST(QT5_GOBJECT_CFLAGS)
12937 AC_SUBST(QT5_GOBJECT_LIBS)
12938 AC_SUBST(QT5_HAVE_GOBJECT)
12939 AC_SUBST(QT5_PLATFORMS_SRCDIR)
12941 dnl ===================================================================
12942 dnl QT6 Integration
12943 dnl ===================================================================
12945 QT6_CFLAGS=""
12946 QT6_LIBS=""
12947 QMAKE6="qmake"
12948 MOC6="moc"
12949 QT6_PLATFORMS_SRCDIR=""
12950 if test \( "$test_qt6" = "yes" -a "$ENABLE_QT6" = "TRUE" \)
12951 then
12952     qt6_incdirs="$QT6INC /usr/include/qt6 /usr/include $x_includes"
12953     qt6_libdirs="$QT6LIB /usr/lib/qt6 /usr/lib $x_libraries"
12955     if test -n "$supports_multilib"; then
12956         qt6_libdirs="$qt6_libdirs /usr/lib64/qt6 /usr/lib64/qt /usr/lib64"
12957     fi
12959     qt6_test_include="QtWidgets/qapplication.h"
12960     if test "$_os" = "Emscripten"; then
12961         qt6_test_library="libQt6Widgets.a"
12962     else
12963         qt6_test_library="libQt6Widgets.so"
12964     fi
12966     dnl Check for qmake6
12967     if test -n "$QT6DIR"; then
12968         AC_PATH_PROG(QMAKE6, [qmake], no, [$QT6DIR/bin])
12969     else
12970         AC_PATH_PROGS(QMAKE6, [qmake-qt6 qmake], no)
12971     fi
12972     if test "$QMAKE6" = "no"; then
12973         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
12974     else
12975         qmake6_test_ver="`$QMAKE6 -v 2>&1 | $SED -n -e 's/^Using Qt version \(6\.[[0-9.]]\+\).*$/\1/p'`"
12976         if test -z "$qmake6_test_ver"; then
12977             AC_MSG_ERROR([Wrong qmake for Qt6 found. Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
12978         fi
12979         AC_MSG_NOTICE([Detected Qt6 version: $qmake6_test_ver])
12980     fi
12982     qt6_incdirs="`$QMAKE6 -query QT_INSTALL_HEADERS` $qt6_incdirs"
12983     qt6_libdirs="`$QMAKE6 -query QT_INSTALL_LIBS` $qt6_libdirs"
12984     qt6_platformsdir="`$QMAKE6 -query QT_INSTALL_PLUGINS`/platforms"
12985     QT6_PLATFORMS_SRCDIR="$qt6_platformsdir"
12987     AC_MSG_CHECKING([for Qt6 headers])
12988     qt6_incdir="no"
12989     for inc_dir in $qt6_incdirs; do
12990         if test -r "$inc_dir/$qt6_test_include"; then
12991             qt6_incdir="$inc_dir"
12992             break
12993         fi
12994     done
12995     AC_MSG_RESULT([$qt6_incdir])
12996     if test "x$qt6_incdir" = "xno"; then
12997         AC_MSG_ERROR([Qt6 headers not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
12998     fi
12999     # check for scenario: qt6-qtbase-devel-*.86_64 installed but host is i686
13000     AC_LANG_PUSH([C++])
13001     save_CPPFLAGS=$CPPFLAGS
13002     CPPFLAGS="${CPPFLAGS} -I${qt6_incdir}"
13003     AC_CHECK_HEADER(QtCore/qconfig.h, [],
13004         [AC_MSG_ERROR(qconfig.h header not found.)], [])
13005     CPPFLAGS=$save_CPPFLAGS
13006     AC_LANG_POP([C++])
13008     AC_MSG_CHECKING([for Qt6 libraries])
13009     qt6_libdir="no"
13010     for lib_dir in $qt6_libdirs; do
13011         if test -r "$lib_dir/$qt6_test_library"; then
13012             qt6_libdir="$lib_dir"
13013             break
13014         fi
13015     done
13016     AC_MSG_RESULT([$qt6_libdir])
13017     if test "x$qt6_libdir" = "xno"; then
13018         AC_MSG_ERROR([Qt6 libraries not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13019     fi
13021     if test "$_os" = "Emscripten"; then
13022         if test ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html ; then
13023             QT6_PLATFORMS_SRCDIR="${QT6_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
13024         fi
13025         if test ! -f "${qt6_platformsdir}"/libqwasm.a -o ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html; then
13026             AC_MSG_ERROR([No Qt6 WASM QPA plugin found in ${qt6_platformsdir} or ${QT6_PLATFORMS_SRCDIR}])
13027         fi
13028     fi
13030     QT6_CFLAGS="-I$qt6_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13031     QT6_CFLAGS=$(printf '%s' "$QT6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13032     QT6_LIBS="-L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
13033     if test "$_os" = "Emscripten"; then
13034         QT6_LIBS="$QT6_LIBS -lqtpcre2 -lQt6EventDispatcherSupport -lQt6FontDatabaseSupport -L${qt6_platformsdir} -lqwasm"
13035     fi
13037     if test "$USING_X11" = TRUE; then
13038         PKG_CHECK_MODULES(QT6_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for key modifier handling in X11.])])
13039         QT6_CFLAGS="$QT6_CFLAGS $QT6_XCB_CFLAGS"
13040         QT6_LIBS="$QT6_LIBS $QT6_XCB_LIBS"
13041         QT6_USING_X11=1
13042         AC_DEFINE(QT6_USING_X11)
13043     fi
13045     dnl Check for Meta Object Compiler
13047     AC_PATH_PROGS( MOC6, [moc-qt6 moc], no, [`dirname $qt6_libdir`/libexec:$QT6DIR/libexec:$PATH])
13048     if test "$MOC6" = "no"; then
13049         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13050 the root of your Qt installation by exporting QT6DIR before running "configure".])
13051     fi
13053 AC_SUBST(QT6_CFLAGS)
13054 AC_SUBST(QT6_LIBS)
13055 AC_SUBST(MOC6)
13056 AC_SUBST(QT6_PLATFORMS_SRCDIR)
13058 dnl ===================================================================
13059 dnl KF5 Integration
13060 dnl ===================================================================
13062 KF5_CFLAGS=""
13063 KF5_LIBS=""
13064 KF5_CONFIG="kf5-config"
13065 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13066         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13067 then
13068     if test "$OS" = "HAIKU"; then
13069         haiku_arch="`echo $RTL_ARCH | tr X x`"
13070         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13071         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13072     fi
13074     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
13075     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
13076     if test -n "$supports_multilib"; then
13077         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
13078     fi
13080     kf5_test_include="KF5/KIOFileWidgets/KFileWidget"
13081     kf5_test_library="libKF5KIOFileWidgets.so"
13082     kf5_libdirs="$qt5_libdir $kf5_libdirs"
13084     dnl kf5 KDE4 support compatibility installed
13085     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
13086     if test "$KF5_CONFIG" != "no"; then
13087         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
13088         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
13089     fi
13091     dnl Check for KF5 headers
13092     AC_MSG_CHECKING([for KF5 headers])
13093     kf5_incdir="no"
13094     for kf5_check in $kf5_incdirs; do
13095         if test -r "$kf5_check/$kf5_test_include"; then
13096             kf5_incdir="$kf5_check/KF5"
13097             break
13098         fi
13099     done
13100     AC_MSG_RESULT([$kf5_incdir])
13101     if test "x$kf5_incdir" = "xno"; then
13102         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13103     fi
13105     dnl Check for KF5 libraries
13106     AC_MSG_CHECKING([for KF5 libraries])
13107     kf5_libdir="no"
13108     for kf5_check in $kf5_libdirs; do
13109         if test -r "$kf5_check/$kf5_test_library"; then
13110             kf5_libdir="$kf5_check"
13111             break
13112         fi
13113     done
13115     AC_MSG_RESULT([$kf5_libdir])
13116     if test "x$kf5_libdir" = "xno"; then
13117         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13118     fi
13120     KF5_CFLAGS="-I$kf5_incdir -I$kf5_incdir/KCoreAddons -I$kf5_incdir/KI18n -I$kf5_incdir/KConfigCore -I$kf5_incdir/KWindowSystem -I$kf5_incdir/KIOCore -I$kf5_incdir/KIOWidgets -I$kf5_incdir/KIOFileWidgets -I$qt5_incdir -I$qt5_incdir/QtCore -I$qt5_incdir/QtGui -I$qt5_incdir/QtWidgets -I$qt5_incdir/QtNetwork -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13121     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13122     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13124     if test "$USING_X11" = TRUE; then
13125         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
13126     fi
13128     AC_LANG_PUSH([C++])
13129     save_CXXFLAGS=$CXXFLAGS
13130     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
13131     AC_MSG_CHECKING([whether KDE is >= 5.0])
13132        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13133 #include <kcoreaddons_version.h>
13135 int main(int argc, char **argv) {
13136        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
13137        else return 1;
13139        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13140     CXXFLAGS=$save_CXXFLAGS
13141     AC_LANG_POP([C++])
13143 AC_SUBST(KF5_CFLAGS)
13144 AC_SUBST(KF5_LIBS)
13146 dnl ===================================================================
13147 dnl Test whether to include Evolution 2 support
13148 dnl ===================================================================
13149 AC_MSG_CHECKING([whether to enable evolution 2 support])
13150 if test "$enable_evolution2" = yes; then
13151     AC_MSG_RESULT([yes])
13152     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
13153     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13154     FilterLibs "${GOBJECT_LIBS}"
13155     GOBJECT_LIBS="${filteredlibs}"
13156     ENABLE_EVOAB2="TRUE"
13157 else
13158     AC_MSG_RESULT([no])
13160 AC_SUBST(ENABLE_EVOAB2)
13161 AC_SUBST(GOBJECT_CFLAGS)
13162 AC_SUBST(GOBJECT_LIBS)
13164 dnl ===================================================================
13165 dnl Test which themes to include
13166 dnl ===================================================================
13167 AC_MSG_CHECKING([which themes to include])
13168 # if none given use default subset of available themes
13169 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
13170     with_theme="breeze breeze_dark breeze_dark_svg breeze_svg colibre colibre_svg elementary elementary_svg karasa_jaga karasa_jaga_svg sifr sifr_svg sifr_dark sifr_dark_svg sukapura sukapura_svg"
13173 WITH_THEMES=""
13174 if test "x$with_theme" != "xno"; then
13175     for theme in $with_theme; do
13176         case $theme in
13177         breeze|breeze_dark|breeze_dark_svg|breeze_svg|colibre|colibre_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg|sifr|sifr_svg|sifr_dark|sifr_dark_svg|sukapura|sukapura_svg) real_theme="$theme" ;;
13178         default) real_theme=colibre ;;
13179         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
13180         esac
13181         WITH_THEMES=`echo "$WITH_THEMES $real_theme"|tr '\ ' '\n'|sort|uniq|tr '\n' '\ '`
13182     done
13184 AC_MSG_RESULT([$WITH_THEMES])
13185 AC_SUBST([WITH_THEMES])
13186 # FIXME: remove this, and the convenience default->colibre remapping after a grace period
13187 for theme in $with_theme; do
13188     case $theme in
13189     default) AC_MSG_WARN([--with-theme=default is deprecated and will be removed, use --with-theme=colibre]) ;;
13190     *) ;;
13191     esac
13192 done
13194 ###############################################################################
13195 # Extensions checking
13196 ###############################################################################
13197 AC_MSG_CHECKING([for extensions integration])
13198 if test "x$enable_extension_integration" != "xno"; then
13199     WITH_EXTENSION_INTEGRATION=TRUE
13200     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
13201     AC_MSG_RESULT([yes, use integration])
13202 else
13203     WITH_EXTENSION_INTEGRATION=
13204     AC_MSG_RESULT([no, do not integrate])
13206 AC_SUBST(WITH_EXTENSION_INTEGRATION)
13208 dnl Should any extra extensions be included?
13209 dnl There are standalone tests for each of these below.
13210 WITH_EXTRA_EXTENSIONS=
13211 AC_SUBST([WITH_EXTRA_EXTENSIONS])
13213 libo_CHECK_EXTENSION([ConvertTextToNumber],[CT2N],[ct2n],[ct2n],[])
13214 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
13215 if test "x$with_java" != "xno"; then
13216     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
13217     libo_CHECK_EXTENSION([LanguageTool],[LANGUAGETOOL],[languagetool],[languagetool],[])
13220 AC_MSG_CHECKING([whether to build opens___.ttf])
13221 if test "$enable_build_opensymbol" = "yes"; then
13222     AC_MSG_RESULT([yes])
13223     AC_PATH_PROG(FONTFORGE, fontforge)
13224     if test -z "$FONTFORGE"; then
13225         AC_MSG_ERROR([fontforge not installed])
13226     fi
13227 else
13228     AC_MSG_RESULT([no])
13229     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
13231 AC_SUBST(FONTFORGE)
13233 dnl ===================================================================
13234 dnl Test whether to include fonts
13235 dnl ===================================================================
13236 AC_MSG_CHECKING([whether to include third-party fonts])
13237 if test "$with_fonts" != "no"; then
13238     AC_MSG_RESULT([yes])
13239     WITH_FONTS=TRUE
13240     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
13241     AC_DEFINE(HAVE_MORE_FONTS)
13242 else
13243     AC_MSG_RESULT([no])
13244     WITH_FONTS=
13245     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
13247 AC_SUBST(WITH_FONTS)
13250 dnl ===================================================================
13251 dnl Test whether to enable online update service
13252 dnl ===================================================================
13253 AC_MSG_CHECKING([whether to enable online update])
13254 ENABLE_ONLINE_UPDATE=
13255 ENABLE_ONLINE_UPDATE_MAR=
13256 UPDATE_CONFIG=
13257 if test "$enable_online_update" = ""; then
13258     AC_MSG_RESULT([no])
13259 else
13260     if test "$enable_online_update" = "mar"; then
13261         AC_MSG_RESULT([yes - MAR-based online update])
13262         ENABLE_ONLINE_UPDATE_MAR="TRUE"
13263         if test "$with_update_config" = ""; then
13264             AC_MSG_ERROR([mar based online updater needs an update config specified with "with-update-config])
13265         fi
13266         UPDATE_CONFIG="$with_update_config"
13267         AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
13268     elif test "$enable_online_update" = "yes"; then
13269         AC_MSG_RESULT([yes])
13270         ENABLE_ONLINE_UPDATE="TRUE"
13271     else
13272         AC_MSG_RESULT([no])
13273     fi
13275 AC_SUBST(ENABLE_ONLINE_UPDATE)
13276 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
13277 AC_SUBST(UPDATE_CONFIG)
13280 PRIVACY_POLICY_URL="$with_privacy_policy_url"
13281 if test "$ENABLE_ONLINE_UPDATE" = TRUE -o "$ENABLE_BREAKPAD" = "TRUE"; then
13282     if test "x$with_privacy_policy_url" = "xundefined"; then
13283         AC_MSG_FAILURE([online update or breakpad/crashreporting are enabled, but no --with-privacy-policy-url=... was provided])
13284     fi
13286 AC_SUBST(PRIVACY_POLICY_URL)
13287 dnl ===================================================================
13288 dnl Test whether we need bzip2
13289 dnl ===================================================================
13290 SYSTEM_BZIP2=
13291 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE"; then
13292     AC_MSG_CHECKING([whether to use system bzip2])
13293     if test "$with_system_bzip2" = yes; then
13294         SYSTEM_BZIP2=TRUE
13295         AC_MSG_RESULT([yes])
13296         PKG_CHECK_MODULES(BZIP2, bzip2)
13297         FilterLibs "${BZIP2_LIBS}"
13298         BZIP2_LIBS="${filteredlibs}"
13299     else
13300         AC_MSG_RESULT([no])
13301         BUILD_TYPE="$BUILD_TYPE BZIP2"
13302     fi
13304 AC_SUBST(SYSTEM_BZIP2)
13305 AC_SUBST(BZIP2_CFLAGS)
13306 AC_SUBST(BZIP2_LIBS)
13308 dnl ===================================================================
13309 dnl Test whether to enable extension update
13310 dnl ===================================================================
13311 AC_MSG_CHECKING([whether to enable extension update])
13312 ENABLE_EXTENSION_UPDATE=
13313 if test "x$enable_extension_update" = "xno"; then
13314     AC_MSG_RESULT([no])
13315 else
13316     AC_MSG_RESULT([yes])
13317     ENABLE_EXTENSION_UPDATE="TRUE"
13318     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
13319     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
13321 AC_SUBST(ENABLE_EXTENSION_UPDATE)
13324 dnl ===================================================================
13325 dnl Test whether to create MSI with LIMITUI=1 (silent install)
13326 dnl ===================================================================
13327 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
13328 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
13329     AC_MSG_RESULT([no])
13330     ENABLE_SILENT_MSI=
13331 else
13332     AC_MSG_RESULT([yes])
13333     ENABLE_SILENT_MSI=TRUE
13334     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
13336 AC_SUBST(ENABLE_SILENT_MSI)
13338 AC_MSG_CHECKING([whether and how to use Xinerama])
13339 if test "$_os" = "Linux" -o "$_os" = "FreeBSD"; then
13340     if test "$x_libraries" = "default_x_libraries"; then
13341         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
13342         if test "x$XINERAMALIB" = x; then
13343            XINERAMALIB="/usr/lib"
13344         fi
13345     else
13346         XINERAMALIB="$x_libraries"
13347     fi
13348     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13349         # we have both versions, let the user decide but use the dynamic one
13350         # per default
13351         USE_XINERAMA=TRUE
13352         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13353             XINERAMA_LINK=dynamic
13354         else
13355             XINERAMA_LINK=static
13356         fi
13357     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13358         # we have only the dynamic version
13359         USE_XINERAMA=TRUE
13360         XINERAMA_LINK=dynamic
13361     elif test -e "$XINERAMALIB/libXinerama.a"; then
13362         # static version
13363         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13364             USE_XINERAMA=TRUE
13365             XINERAMA_LINK=static
13366         else
13367             USE_XINERAMA=
13368             XINERAMA_LINK=none
13369         fi
13370     else
13371         # no Xinerama
13372         USE_XINERAMA=
13373         XINERAMA_LINK=none
13374     fi
13375     if test "$USE_XINERAMA" = "TRUE"; then
13376         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13377         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13378             [AC_MSG_ERROR(Xinerama header not found.)], [])
13379         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13380         if test "x$XEXTLIB" = x; then
13381            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13382         fi
13383         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13384         if test "$_os" = "FreeBSD"; then
13385             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13386         fi
13387         if test "$_os" = "Linux"; then
13388             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13389         fi
13390         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13391             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13392     else
13393         AC_MSG_RESULT([no, libXinerama not found or wrong architecture.])
13394     fi
13395 else
13396     USE_XINERAMA=
13397     XINERAMA_LINK=none
13398     AC_MSG_RESULT([no])
13400 AC_SUBST(USE_XINERAMA)
13401 AC_SUBST(XINERAMA_LINK)
13403 dnl ===================================================================
13404 dnl Test whether to build cairo or rely on the system version
13405 dnl ===================================================================
13407 if test "$test_cairo" = "yes"; then
13408     AC_MSG_CHECKING([whether to use the system cairo])
13410     : ${with_system_cairo:=$with_system_libs}
13411     if test "$with_system_cairo" = "yes"; then
13412         SYSTEM_CAIRO=TRUE
13413         AC_MSG_RESULT([yes])
13415         PKG_CHECK_MODULES( CAIRO, cairo >= 1.8.0 )
13416         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13417         FilterLibs "${CAIRO_LIBS}"
13418         CAIRO_LIBS="${filteredlibs}"
13420         if test "$test_xrender" = "yes"; then
13421             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13422             AC_LANG_PUSH([C])
13423             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13424 #ifdef PictStandardA8
13425 #else
13426       return fail;
13427 #endif
13428 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13430             AC_LANG_POP([C])
13431         fi
13432     else
13433         AC_MSG_RESULT([no])
13434         BUILD_TYPE="$BUILD_TYPE CAIRO"
13435     fi
13437     if test "$enable_cairo_canvas" != no; then
13438         AC_DEFINE(ENABLE_CAIRO_CANVAS)
13439         ENABLE_CAIRO_CANVAS=TRUE
13440     fi
13443 AC_SUBST(CAIRO_CFLAGS)
13444 AC_SUBST(CAIRO_LIBS)
13445 AC_SUBST(ENABLE_CAIRO_CANVAS)
13446 AC_SUBST(SYSTEM_CAIRO)
13448 dnl ===================================================================
13449 dnl Test whether to use avahi
13450 dnl ===================================================================
13451 if test "$_os" = "WINNT"; then
13452     # Windows uses bundled mDNSResponder
13453     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13454 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13455     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13456                       [ENABLE_AVAHI="TRUE"])
13457     AC_DEFINE(HAVE_FEATURE_AVAHI)
13458     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13459     FilterLibs "${AVAHI_LIBS}"
13460     AVAHI_LIBS="${filteredlibs}"
13463 AC_SUBST(ENABLE_AVAHI)
13464 AC_SUBST(AVAHI_CFLAGS)
13465 AC_SUBST(AVAHI_LIBS)
13467 dnl ===================================================================
13468 dnl Test whether to use liblangtag
13469 dnl ===================================================================
13470 SYSTEM_LIBLANGTAG=
13471 AC_MSG_CHECKING([whether to use system liblangtag])
13472 if test "$with_system_liblangtag" = yes; then
13473     SYSTEM_LIBLANGTAG=TRUE
13474     AC_MSG_RESULT([yes])
13475     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
13476     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
13477     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
13478     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13479     FilterLibs "${LIBLANGTAG_LIBS}"
13480     LIBLANGTAG_LIBS="${filteredlibs}"
13481 else
13482     SYSTEM_LIBLANGTAG=
13483     AC_MSG_RESULT([no])
13484     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
13485     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
13486     if test "$COM" = "MSC"; then
13487         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
13488     else
13489         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
13490     fi
13492 AC_SUBST(SYSTEM_LIBLANGTAG)
13493 AC_SUBST(LIBLANGTAG_CFLAGS)
13494 AC_SUBST(LIBLANGTAG_LIBS)
13496 dnl ===================================================================
13497 dnl Test whether to build libpng or rely on the system version
13498 dnl ===================================================================
13500 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng],["-I${WORKDIR}/UnpackedTarball/libpng"],["-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"])
13502 dnl ===================================================================
13503 dnl Check for runtime JVM search path
13504 dnl ===================================================================
13505 if test "$ENABLE_JAVA" != ""; then
13506     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
13507     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
13508         AC_MSG_RESULT([yes])
13509         if ! test -d "$with_jvm_path"; then
13510             AC_MSG_ERROR(["$with_jvm_path" not a directory])
13511         fi
13512         if ! test -d "$with_jvm_path"jvm; then
13513             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
13514         fi
13515         JVM_ONE_PATH_CHECK="$with_jvm_path"
13516         AC_SUBST(JVM_ONE_PATH_CHECK)
13517     else
13518         AC_MSG_RESULT([no])
13519     fi
13522 dnl ===================================================================
13523 dnl Test for the presence of Ant and that it works
13524 dnl ===================================================================
13526 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
13527     ANT_HOME=; export ANT_HOME
13528     WITH_ANT_HOME=; export WITH_ANT_HOME
13529     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
13530         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
13531             if test "$_os" = "WINNT"; then
13532                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
13533             else
13534                 with_ant_home="$LODE_HOME/opt/ant"
13535             fi
13536         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
13537             with_ant_home="$LODE_HOME/opt/ant"
13538         fi
13539     fi
13540     if test -z "$with_ant_home"; then
13541         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
13542     else
13543         if test "$_os" = "WINNT"; then
13544             # AC_PATH_PROGS needs unix path
13545             with_ant_home=`cygpath -u "$with_ant_home"`
13546         fi
13547         AbsolutePath "$with_ant_home"
13548         with_ant_home=$absolute_path
13549         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
13550         WITH_ANT_HOME=$with_ant_home
13551         ANT_HOME=$with_ant_home
13552     fi
13554     if test -z "$ANT"; then
13555         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
13556     else
13557         # resolve relative or absolute symlink
13558         while test -h "$ANT"; do
13559             a_cwd=`pwd`
13560             a_basename=`basename "$ANT"`
13561             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
13562             cd "`dirname "$ANT"`"
13563             cd "`dirname "$a_script"`"
13564             ANT="`pwd`"/"`basename "$a_script"`"
13565             cd "$a_cwd"
13566         done
13568         AC_MSG_CHECKING([if $ANT works])
13569         mkdir -p conftest.dir
13570         a_cwd=$(pwd)
13571         cd conftest.dir
13572         cat > conftest.java << EOF
13573         public class conftest {
13574             int testmethod(int a, int b) {
13575                     return a + b;
13576             }
13577         }
13580         cat > conftest.xml << EOF
13581         <project name="conftest" default="conftest">
13582         <target name="conftest">
13583             <javac srcdir="." includes="conftest.java">
13584             </javac>
13585         </target>
13586         </project>
13589         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
13590         if test $? = 0 -a -f ./conftest.class; then
13591             AC_MSG_RESULT([Ant works])
13592             if test -z "$WITH_ANT_HOME"; then
13593                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
13594                 if test -z "$ANT_HOME"; then
13595                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
13596                 fi
13597             else
13598                 ANT_HOME="$WITH_ANT_HOME"
13599             fi
13600         else
13601             echo "configure: Ant test failed" >&5
13602             cat conftest.java >&5
13603             cat conftest.xml >&5
13604             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
13605         fi
13606         cd "$a_cwd"
13607         rm -fr conftest.dir
13608     fi
13609     if test -z "$ANT_HOME"; then
13610         ANT_HOME="NO_ANT_HOME"
13611     else
13612         PathFormat "$ANT_HOME"
13613         ANT_HOME="$formatted_path"
13614         PathFormat "$ANT"
13615         ANT="$formatted_path"
13616     fi
13618     dnl Checking for ant.jar
13619     if test "$ANT_HOME" != "NO_ANT_HOME"; then
13620         AC_MSG_CHECKING([Ant lib directory])
13621         if test -f $ANT_HOME/lib/ant.jar; then
13622             ANT_LIB="$ANT_HOME/lib"
13623         else
13624             if test -f $ANT_HOME/ant.jar; then
13625                 ANT_LIB="$ANT_HOME"
13626             else
13627                 if test -f /usr/share/java/ant.jar; then
13628                     ANT_LIB=/usr/share/java
13629                 else
13630                     if test -f /usr/share/ant-core/lib/ant.jar; then
13631                         ANT_LIB=/usr/share/ant-core/lib
13632                     else
13633                         if test -f $ANT_HOME/lib/ant/ant.jar; then
13634                             ANT_LIB="$ANT_HOME/lib/ant"
13635                         else
13636                             if test -f /usr/share/lib/ant/ant.jar; then
13637                                 ANT_LIB=/usr/share/lib/ant
13638                             else
13639                                 AC_MSG_ERROR([Ant libraries not found!])
13640                             fi
13641                         fi
13642                     fi
13643                 fi
13644             fi
13645         fi
13646         PathFormat "$ANT_LIB"
13647         ANT_LIB="$formatted_path"
13648         AC_MSG_RESULT([Ant lib directory found.])
13649     fi
13651     ant_minver=1.6.0
13652     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
13654     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
13655     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
13656     ant_version_major=`echo $ant_version | cut -d. -f1`
13657     ant_version_minor=`echo $ant_version | cut -d. -f2`
13658     echo "configure: ant_version $ant_version " >&5
13659     echo "configure: ant_version_major $ant_version_major " >&5
13660     echo "configure: ant_version_minor $ant_version_minor " >&5
13661     if test "$ant_version_major" -ge "2"; then
13662         AC_MSG_RESULT([yes, $ant_version])
13663     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
13664         AC_MSG_RESULT([yes, $ant_version])
13665     else
13666         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
13667     fi
13669     rm -f conftest* core core.* *.core
13671 AC_SUBST(ANT)
13672 AC_SUBST(ANT_HOME)
13673 AC_SUBST(ANT_LIB)
13675 OOO_JUNIT_JAR=
13676 HAMCREST_JAR=
13677 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
13678     AC_MSG_CHECKING([for JUnit 4])
13679     if test "$with_junit" = "yes"; then
13680         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
13681             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
13682         elif test -e /usr/share/java/junit4.jar; then
13683             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
13684         else
13685            if test -e /usr/share/lib/java/junit.jar; then
13686               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
13687            else
13688               OOO_JUNIT_JAR=/usr/share/java/junit.jar
13689            fi
13690         fi
13691     else
13692         OOO_JUNIT_JAR=$with_junit
13693     fi
13694     if test "$_os" = "WINNT"; then
13695         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
13696     fi
13697     printf 'import org.junit.Before;' > conftest.java
13698     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13699         AC_MSG_RESULT([$OOO_JUNIT_JAR])
13700     else
13701         AC_MSG_ERROR(
13702 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
13703  specify its pathname via --with-junit=..., or disable it via --without-junit])
13704     fi
13705     rm -f conftest.class conftest.java
13706     if test $OOO_JUNIT_JAR != ""; then
13707         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
13708     fi
13710     AC_MSG_CHECKING([for included Hamcrest])
13711     printf 'import org.hamcrest.BaseDescription;' > conftest.java
13712     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13713         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
13714     else
13715         AC_MSG_RESULT([Not included])
13716         AC_MSG_CHECKING([for standalone hamcrest jar.])
13717         if test "$with_hamcrest" = "yes"; then
13718             if test -e /usr/share/lib/java/hamcrest.jar; then
13719                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
13720             elif test -e /usr/share/java/hamcrest/core.jar; then
13721                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
13722             elif test -e /usr/share/java/hamcrest/hamcrest.jar; then
13723                 HAMCREST_JAR=/usr/share/java/hamcrest/hamcrest.jar
13724             else
13725                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
13726             fi
13727         else
13728             HAMCREST_JAR=$with_hamcrest
13729         fi
13730         if test "$_os" = "WINNT"; then
13731             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
13732         fi
13733         if "$JAVACOMPILER" -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
13734             AC_MSG_RESULT([$HAMCREST_JAR])
13735         else
13736             AC_MSG_ERROR([junit does not contain hamcrest; please use a junit jar that includes hamcrest, install a hamcrest jar in the default location (/usr/share/java),
13737                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
13738         fi
13739     fi
13740     rm -f conftest.class conftest.java
13742 AC_SUBST(OOO_JUNIT_JAR)
13743 AC_SUBST(HAMCREST_JAR)
13746 AC_SUBST(SCPDEFS)
13749 # check for wget and curl
13751 WGET=
13752 CURL=
13754 if test "$enable_fetch_external" != "no"; then
13756 CURL=`which curl 2>/dev/null`
13758 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
13759     # wget new enough?
13760     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
13761     if test $? -eq 0; then
13762         WGET=$i
13763         break
13764     fi
13765 done
13767 if test -z "$WGET" -a -z "$CURL"; then
13768     AC_MSG_ERROR([neither wget nor curl found!])
13773 AC_SUBST(WGET)
13774 AC_SUBST(CURL)
13777 # check for sha256sum
13779 SHA256SUM=
13781 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
13782     eval "$i -a 256 --version" > /dev/null 2>&1
13783     ret=$?
13784     if test $ret -eq 0; then
13785         SHA256SUM="$i -a 256"
13786         break
13787     fi
13788 done
13790 if test -z "$SHA256SUM"; then
13791     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
13792         eval "$i --version" > /dev/null 2>&1
13793         ret=$?
13794         if test $ret -eq 0; then
13795             SHA256SUM=$i
13796             break
13797         fi
13798     done
13801 if test -z "$SHA256SUM"; then
13802     AC_MSG_ERROR([no sha256sum found!])
13805 AC_SUBST(SHA256SUM)
13807 dnl ===================================================================
13808 dnl Dealing with l10n options
13809 dnl ===================================================================
13810 AC_MSG_CHECKING([which languages to be built])
13811 # get list of all languages
13812 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
13813 # the sed command does the following:
13814 #   + if a line ends with a backslash, append the next line to it
13815 #   + adds " on the beginning of the value (after =)
13816 #   + adds " at the end of the value
13817 #   + removes en-US; we want to put it on the beginning
13818 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
13819 [eval $(sed -e :a -e '/\\$/N; s/\\\n//; ta' -n -e 's/=/="/;s/\([^\\]\)$/\1"/;s/en-US//;/^completelangiso/p' $SRC_ROOT/solenv/inc/langlist.mk)]
13820 ALL_LANGS="en-US $completelangiso"
13821 # check the configured localizations
13822 WITH_LANG="$with_lang"
13824 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
13825 # (Norwegian is "nb" and "nn".)
13826 if test "$WITH_LANG" = "no"; then
13827     WITH_LANG=
13830 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
13831     AC_MSG_RESULT([en-US])
13832 else
13833     AC_MSG_RESULT([$WITH_LANG])
13834     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
13835     if test -z "$MSGFMT"; then
13836         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
13837             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
13838         elif test -x "/opt/lo/bin/msgfmt"; then
13839             MSGFMT="/opt/lo/bin/msgfmt"
13840         else
13841             AC_CHECK_PROGS(MSGFMT, [msgfmt])
13842             if test -z "$MSGFMT"; then
13843                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
13844             fi
13845         fi
13846     fi
13847     if test -z "$MSGUNIQ"; then
13848         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
13849             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
13850         elif test -x "/opt/lo/bin/msguniq"; then
13851             MSGUNIQ="/opt/lo/bin/msguniq"
13852         else
13853             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
13854             if test -z "$MSGUNIQ"; then
13855                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
13856             fi
13857         fi
13858     fi
13860 AC_SUBST(MSGFMT)
13861 AC_SUBST(MSGUNIQ)
13862 # check that the list is valid
13863 for lang in $WITH_LANG; do
13864     test "$lang" = "ALL" && continue
13865     # need to check for the exact string, so add space before and after the list of all languages
13866     for vl in $ALL_LANGS; do
13867         if test "$vl" = "$lang"; then
13868            break
13869         fi
13870     done
13871     if test "$vl" != "$lang"; then
13872         # if you're reading this - you prolly quoted your languages remove the quotes ...
13873         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
13874     fi
13875 done
13876 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
13877     echo $WITH_LANG | grep -q en-US
13878     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
13880 # list with substituted ALL
13881 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
13882 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
13883 test "$WITH_LANG" = "en-US" && WITH_LANG=
13884 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
13885     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
13886     ALL_LANGS=`echo $ALL_LANGS qtz`
13888 AC_SUBST(ALL_LANGS)
13889 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
13890 AC_SUBST(WITH_LANG)
13891 AC_SUBST(WITH_LANG_LIST)
13892 AC_SUBST(GIT_NEEDED_SUBMODULES)
13894 WITH_POOR_HELP_LOCALIZATIONS=
13895 if test -d "$SRC_ROOT/translations/source"; then
13896     for l in `ls -1 $SRC_ROOT/translations/source`; do
13897         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
13898             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
13899         fi
13900     done
13902 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
13904 if test -n "$with_locales"; then
13905     WITH_LOCALES="$with_locales"
13907     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
13908     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
13909     # config_host/config_locales.h.in
13910     for locale in $WITH_LOCALES; do
13911         lang=${locale%_*}
13913         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
13915         case $lang in
13916         hi|mr*ne)
13917             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
13918             ;;
13919         bg|ru)
13920             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
13921             ;;
13922         esac
13923     done
13924 else
13925     AC_DEFINE(WITH_LOCALE_ALL)
13927 AC_SUBST(WITH_LOCALES)
13929 dnl git submodule update --reference
13930 dnl ===================================================================
13931 if test -n "${GIT_REFERENCE_SRC}"; then
13932     for repo in ${GIT_NEEDED_SUBMODULES}; do
13933         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
13934             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
13935         fi
13936     done
13938 AC_SUBST(GIT_REFERENCE_SRC)
13940 dnl git submodules linked dirs
13941 dnl ===================================================================
13942 if test -n "${GIT_LINK_SRC}"; then
13943     for repo in ${GIT_NEEDED_SUBMODULES}; do
13944         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
13945             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
13946         fi
13947     done
13949 AC_SUBST(GIT_LINK_SRC)
13951 dnl branding
13952 dnl ===================================================================
13953 AC_MSG_CHECKING([for alternative branding images directory])
13954 # initialize mapped arrays
13955 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
13956 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
13958 if test -z "$with_branding" -o "$with_branding" = "no"; then
13959     AC_MSG_RESULT([none])
13960     DEFAULT_BRAND_IMAGES="$brand_files"
13961 else
13962     if ! test -d $with_branding ; then
13963         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
13964     else
13965         AC_MSG_RESULT([$with_branding])
13966         CUSTOM_BRAND_DIR="$with_branding"
13967         for lfile in $brand_files
13968         do
13969             if ! test -f $with_branding/$lfile ; then
13970                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
13971                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
13972             else
13973                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
13974             fi
13975         done
13976         check_for_progress="yes"
13977     fi
13979 AC_SUBST([BRAND_INTRO_IMAGES])
13980 AC_SUBST([CUSTOM_BRAND_DIR])
13981 AC_SUBST([CUSTOM_BRAND_IMAGES])
13982 AC_SUBST([DEFAULT_BRAND_IMAGES])
13985 AC_MSG_CHECKING([for 'intro' progress settings])
13986 PROGRESSBARCOLOR=
13987 PROGRESSSIZE=
13988 PROGRESSPOSITION=
13989 PROGRESSFRAMECOLOR=
13990 PROGRESSTEXTCOLOR=
13991 PROGRESSTEXTBASELINE=
13993 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
13994     source "$with_branding/progress.conf"
13995     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
13996 else
13997     AC_MSG_RESULT([none])
14000 AC_SUBST(PROGRESSBARCOLOR)
14001 AC_SUBST(PROGRESSSIZE)
14002 AC_SUBST(PROGRESSPOSITION)
14003 AC_SUBST(PROGRESSFRAMECOLOR)
14004 AC_SUBST(PROGRESSTEXTCOLOR)
14005 AC_SUBST(PROGRESSTEXTBASELINE)
14008 dnl ===================================================================
14009 dnl Custom build version
14010 dnl ===================================================================
14011 AC_MSG_CHECKING([for extra build ID])
14012 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
14013     EXTRA_BUILDID="$with_extra_buildid"
14015 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
14016 if test -n "$EXTRA_BUILDID" ; then
14017     AC_MSG_RESULT([$EXTRA_BUILDID])
14018 else
14019     AC_MSG_RESULT([not set])
14021 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
14023 OOO_VENDOR=
14024 AC_MSG_CHECKING([for vendor])
14025 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
14026     OOO_VENDOR="$USERNAME"
14028     if test -z "$OOO_VENDOR"; then
14029         OOO_VENDOR="$USER"
14030     fi
14032     if test -z "$OOO_VENDOR"; then
14033         OOO_VENDOR="`id -u -n`"
14034     fi
14036     AC_MSG_RESULT([not set, using $OOO_VENDOR])
14037 else
14038     OOO_VENDOR="$with_vendor"
14039     AC_MSG_RESULT([$OOO_VENDOR])
14041 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
14042 AC_SUBST(OOO_VENDOR)
14044 if test "$_os" = "Android" ; then
14045     ANDROID_PACKAGE_NAME=
14046     AC_MSG_CHECKING([for Android package name])
14047     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
14048         if test -n "$ENABLE_DEBUG"; then
14049             # Default to the package name that makes ndk-gdb happy.
14050             ANDROID_PACKAGE_NAME="org.libreoffice"
14051         else
14052             ANDROID_PACKAGE_NAME="org.example.libreoffice"
14053         fi
14055         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
14056     else
14057         ANDROID_PACKAGE_NAME="$with_android_package_name"
14058         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
14059     fi
14060     AC_SUBST(ANDROID_PACKAGE_NAME)
14063 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
14064 if test "$with_compat_oowrappers" = "yes"; then
14065     WITH_COMPAT_OOWRAPPERS=TRUE
14066     AC_MSG_RESULT(yes)
14067 else
14068     WITH_COMPAT_OOWRAPPERS=
14069     AC_MSG_RESULT(no)
14071 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
14073 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{print tolower($0)}'`
14074 AC_MSG_CHECKING([for install dirname])
14075 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
14076     INSTALLDIRNAME="$with_install_dirname"
14078 AC_MSG_RESULT([$INSTALLDIRNAME])
14079 AC_SUBST(INSTALLDIRNAME)
14081 AC_MSG_CHECKING([for prefix])
14082 test "x$prefix" = xNONE && prefix=$ac_default_prefix
14083 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
14084 PREFIXDIR="$prefix"
14085 AC_MSG_RESULT([$PREFIXDIR])
14086 AC_SUBST(PREFIXDIR)
14088 LIBDIR=[$(eval echo $(eval echo $libdir))]
14089 AC_SUBST(LIBDIR)
14091 DATADIR=[$(eval echo $(eval echo $datadir))]
14092 AC_SUBST(DATADIR)
14094 MANDIR=[$(eval echo $(eval echo $mandir))]
14095 AC_SUBST(MANDIR)
14097 DOCDIR=[$(eval echo $(eval echo $docdir))]
14098 AC_SUBST(DOCDIR)
14100 BINDIR=[$(eval echo $(eval echo $bindir))]
14101 AC_SUBST(BINDIR)
14103 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
14104 AC_SUBST(INSTALLDIR)
14106 TESTINSTALLDIR="${BUILDDIR}/test-install"
14107 AC_SUBST(TESTINSTALLDIR)
14110 # ===================================================================
14111 # OAuth2 id and secrets
14112 # ===================================================================
14114 AC_MSG_CHECKING([for Google Drive client id and secret])
14115 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
14116     AC_MSG_RESULT([not set])
14117     GDRIVE_CLIENT_ID="\"\""
14118     GDRIVE_CLIENT_SECRET="\"\""
14119 else
14120     AC_MSG_RESULT([set])
14121     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
14122     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
14124 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
14125 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
14127 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
14128 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
14129     AC_MSG_RESULT([not set])
14130     ALFRESCO_CLOUD_CLIENT_ID="\"\""
14131     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
14132 else
14133     AC_MSG_RESULT([set])
14134     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
14135     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
14137 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
14138 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
14140 AC_MSG_CHECKING([for OneDrive client id and secret])
14141 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
14142     AC_MSG_RESULT([not set])
14143     ONEDRIVE_CLIENT_ID="\"\""
14144     ONEDRIVE_CLIENT_SECRET="\"\""
14145 else
14146     AC_MSG_RESULT([set])
14147     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
14148     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
14150 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
14151 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
14154 dnl ===================================================================
14155 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
14156 dnl --enable-dependency-tracking configure option
14157 dnl ===================================================================
14158 AC_MSG_CHECKING([whether to enable dependency tracking])
14159 if test "$enable_dependency_tracking" = "no"; then
14160     nodep=TRUE
14161     AC_MSG_RESULT([no])
14162 else
14163     AC_MSG_RESULT([yes])
14165 AC_SUBST(nodep)
14167 dnl ===================================================================
14168 dnl Number of CPUs to use during the build
14169 dnl ===================================================================
14170 AC_MSG_CHECKING([for number of processors to use])
14171 # plain --with-parallelism is just the default
14172 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
14173     if test "$with_parallelism" = "no"; then
14174         PARALLELISM=0
14175     else
14176         PARALLELISM=$with_parallelism
14177     fi
14178 else
14179     if test "$enable_icecream" = "yes"; then
14180         PARALLELISM="40"
14181     else
14182         case `uname -s` in
14184         Darwin|FreeBSD|NetBSD|OpenBSD)
14185             PARALLELISM=`sysctl -n hw.ncpu`
14186             ;;
14188         Linux)
14189             PARALLELISM=`getconf _NPROCESSORS_ONLN`
14190         ;;
14191         # what else than above does profit here *and* has /proc?
14192         *)
14193             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
14194             ;;
14195         esac
14197         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
14198         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
14199     fi
14202 if test "$no_parallelism_make" = "YES" && test $PARALLELISM -gt 1; then
14203     if test -z "$with_parallelism"; then
14204             AC_MSG_WARN([gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this.])
14205             add_warning "gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this."
14206             PARALLELISM="1"
14207     else
14208         add_warning "make 3.81 is prone to crashes with parallelism > 1. Since --with-parallelism was explicitly given, it is honored, but do not complain when make segfaults on you."
14209     fi
14212 if test $PARALLELISM -eq 0; then
14213     AC_MSG_RESULT([explicit make -j option needed])
14214 else
14215     AC_MSG_RESULT([$PARALLELISM])
14217 AC_SUBST(PARALLELISM)
14219 IWYU_PATH="$with_iwyu"
14220 AC_SUBST(IWYU_PATH)
14221 if test ! -z "$IWYU_PATH"; then
14222     if test ! -f "$IWYU_PATH"; then
14223         AC_MSG_ERROR([cannot find include-what-you-use binary specified by --with-iwyu])
14224     fi
14228 # Set up ILIB for MSVC build
14230 ILIB1=
14231 if test "$build_os" = "cygwin"; then
14232     ILIB="."
14233     if test -n "$JAVA_HOME"; then
14234         ILIB="$ILIB;$JAVA_HOME/lib"
14235     fi
14236     ILIB1=-link
14237     ILIB="$ILIB;$COMPATH/lib/$WIN_HOST_ARCH"
14238     ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/$WIN_HOST_ARCH"
14239     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14240     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14241     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
14242         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14243         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14244     fi
14245     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
14246     ucrtlibpath_formatted=$formatted_path
14247     ILIB="$ILIB;$ucrtlibpath_formatted"
14248     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
14249     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
14250         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/lib"
14251     else
14252         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
14253     fi
14255     if test "$cross_compiling" != "yes"; then
14256         ILIB_FOR_BUILD="$ILIB"
14257     fi
14259 AC_SUBST(ILIB)
14260 AC_SUBST(ILIB_FOR_BUILD)
14262 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
14263 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
14264 dnl from consteval constructor initializing const variable",
14265 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
14266 dnl expression' with consteval constructor", <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
14267 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
14268 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'", or
14269 dnl <https://developercommunity.visualstudio.com/t/1581879> "Bogus error C7595 with consteval
14270 dnl constructor in ternary expression (/std:c++latest)":
14271 AC_LANG_PUSH([C++])
14272 save_CXX=$CXX
14273 if test "$COM" = MSC && test "$COM_IS_CLANG" != TRUE; then
14274     CXX="env LIB=$ILIB $CXX"
14276 save_CXXFLAGS=$CXXFLAGS
14277 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
14278 AC_RUN_IFELSE([AC_LANG_PROGRAM([
14279         struct S {
14280             consteval S() { i = 1; }
14281             int i = 0;
14282         };
14283         S const s;
14285         struct S1 { consteval S1(int) {} };
14286         struct S2 {
14287             S1 x;
14288             S2(): x(0) {}
14289         };
14291         struct S3 {
14292             consteval S3() {}
14293             union {
14294                 int a;
14295                 unsigned b = 0;
14296             };
14297         };
14298         void f() { S3(); }
14300         struct S4 { consteval S4() = default; };
14301         void f4(bool b) { b ? S4() : S4(); }
14302     ], [
14303         return (s.i == 1) ? 0 : 1;
14304     ])], [
14305         AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
14306         AC_MSG_RESULT([yes])
14307     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
14308 CXX=$save_CXX
14309 CXXFLAGS=$save_CXXFLAGS
14310 AC_LANG_POP([C++])
14312 # ===================================================================
14313 # Creating bigger shared library to link against
14314 # ===================================================================
14315 AC_MSG_CHECKING([whether to create huge library])
14316 MERGELIBS=
14318 if test $_os = iOS -o $_os = Android; then
14319     # Never any point in mergelibs for these as we build just static
14320     # libraries anyway...
14321     enable_mergelibs=no
14324 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
14325     if test $_os != Linux -a $_os != WINNT; then
14326         add_warning "--enable-mergelibs is not tested for this platform"
14327     fi
14328     MERGELIBS="TRUE"
14329     AC_MSG_RESULT([yes])
14330     AC_DEFINE(ENABLE_MERGELIBS)
14331 else
14332     AC_MSG_RESULT([no])
14334 AC_SUBST([MERGELIBS])
14336 dnl ===================================================================
14337 dnl icerun is a wrapper that stops us spawning tens of processes
14338 dnl locally - for tools that can't be executed on the compile cluster
14339 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
14340 dnl ===================================================================
14341 AC_MSG_CHECKING([whether to use icerun wrapper])
14342 ICECREAM_RUN=
14343 if test "$enable_icecream" = "yes" && which icerun >/dev/null 2>&1 ; then
14344     ICECREAM_RUN=icerun
14345     AC_MSG_RESULT([yes])
14346 else
14347     AC_MSG_RESULT([no])
14349 AC_SUBST(ICECREAM_RUN)
14351 dnl ===================================================================
14352 dnl Setup the ICECC_VERSION for the build the same way it was set for
14353 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
14354 dnl ===================================================================
14355 x_ICECC_VERSION=[\#]
14356 if test -n "$ICECC_VERSION" ; then
14357     x_ICECC_VERSION=
14359 AC_SUBST(x_ICECC_VERSION)
14360 AC_SUBST(ICECC_VERSION)
14362 dnl ===================================================================
14364 AC_MSG_CHECKING([MPL subset])
14365 MPL_SUBSET=
14367 if test "$enable_mpl_subset" = "yes"; then
14368     warn_report=false
14369     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
14370         warn_report=true
14371     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
14372         warn_report=true
14373     fi
14374     if test "$warn_report" = "true"; then
14375         AC_MSG_ERROR([need to --disable-report-builder - extended database report builder.])
14376     fi
14377     if test "x$enable_postgresql_sdbc" != "xno"; then
14378         AC_MSG_ERROR([need to --disable-postgresql-sdbc - the PostgreSQL database backend.])
14379     fi
14380     if test "$enable_lotuswordpro" = "yes"; then
14381         AC_MSG_ERROR([need to --disable-lotuswordpro - a Lotus Word Pro file format import filter.])
14382     fi
14383     if test "$WITH_WEBDAV" = "neon"; then
14384         AC_MSG_ERROR([need --with-webdav=serf or --without-webdav - webdav support.])
14385     fi
14386     if test -n "$ENABLE_POPPLER"; then
14387         if test "x$SYSTEM_POPPLER" = "x"; then
14388             AC_MSG_ERROR([need to disable PDF import via poppler or use system library])
14389         fi
14390     fi
14391     # cf. m4/libo_check_extension.m4
14392     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
14393         AC_MSG_ERROR([need to disable extra extensions '$WITH_EXTRA_EXTENSIONS'])
14394     fi
14395     for theme in $WITH_THEMES; do
14396         case $theme in
14397         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
14398             AC_MSG_ERROR([need to disable icon themes from '$WITH_THEMES': $theme present, use --with-theme=colibre]) ;;
14399         *) : ;;
14400         esac
14401     done
14403     ENABLE_OPENGL_TRANSITIONS=
14405     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
14406         AC_MSG_ERROR([need to --disable-lpsolve - calc linear programming solver.])
14407     fi
14409     MPL_SUBSET="TRUE"
14410     AC_DEFINE(MPL_HAVE_SUBSET)
14411     AC_MSG_RESULT([only])
14412 else
14413     AC_MSG_RESULT([no restrictions])
14415 AC_SUBST(MPL_SUBSET)
14417 dnl ===================================================================
14419 AC_MSG_CHECKING([formula logger])
14420 ENABLE_FORMULA_LOGGER=
14422 if test "x$enable_formula_logger" = "xyes"; then
14423     AC_MSG_RESULT([yes])
14424     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14425     ENABLE_FORMULA_LOGGER=TRUE
14426 elif test -n "$ENABLE_DBGUTIL" ; then
14427     AC_MSG_RESULT([yes])
14428     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14429     ENABLE_FORMULA_LOGGER=TRUE
14430 else
14431     AC_MSG_RESULT([no])
14434 AC_SUBST(ENABLE_FORMULA_LOGGER)
14436 dnl ===================================================================
14437 dnl Checking for active Antivirus software.
14438 dnl ===================================================================
14440 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
14441     AC_MSG_CHECKING([for active Antivirus software])
14442     ANTIVIRUS_LIST=`cscript.exe //Nologo $SRC_ROOT/antivirusDetection.vbs`
14443     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
14444         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
14445             AC_MSG_RESULT([found])
14446             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
14447             echo $EICAR_STRING > $SRC_ROOT/eicar
14448             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
14449             rm $SRC_ROOT/eicar
14450             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14451                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14452             fi
14453             echo $EICAR_STRING > $BUILDDIR/eicar
14454             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
14455             rm $BUILDDIR/eicar
14456             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14457                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14458             fi
14459             add_warning "To speed up builds and avoid failures in unit tests, it is highly recommended that you exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST"
14460         else
14461             AC_MSG_RESULT([not found])
14462         fi
14463     else
14464         AC_MSG_RESULT([n/a])
14465     fi
14468 dnl ===================================================================
14469 dnl Setting up the environment.
14470 dnl ===================================================================
14471 AC_MSG_NOTICE([setting up the build environment variables...])
14473 AC_SUBST(COMPATH)
14475 if test "$build_os" = "cygwin"; then
14476     if test -d "$COMPATH/atlmfc/lib/spectre"; then
14477         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
14478         ATL_INCLUDE="$COMPATH/atlmfc/include"
14479     elif test -d "$COMPATH/atlmfc/lib"; then
14480         ATL_LIB="$COMPATH/atlmfc/lib"
14481         ATL_INCLUDE="$COMPATH/atlmfc/include"
14482     else
14483         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
14484         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
14485     fi
14486     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
14487     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
14488     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
14490     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
14491     PathFormat "/usr/bin/find.exe"
14492     FIND="$formatted_path"
14493     PathFormat "/usr/bin/sort.exe"
14494     SORT="$formatted_path"
14495     PathFormat "/usr/bin/grep.exe"
14496     WIN_GREP="$formatted_path"
14497     PathFormat "/usr/bin/ls.exe"
14498     WIN_LS="$formatted_path"
14499     PathFormat "/usr/bin/touch.exe"
14500     WIN_TOUCH="$formatted_path"
14501 else
14502     FIND=find
14503     SORT=sort
14506 AC_SUBST(ATL_INCLUDE)
14507 AC_SUBST(ATL_LIB)
14508 AC_SUBST(FIND)
14509 AC_SUBST(SORT)
14510 AC_SUBST(WIN_GREP)
14511 AC_SUBST(WIN_LS)
14512 AC_SUBST(WIN_TOUCH)
14514 AC_SUBST(BUILD_TYPE)
14516 AC_SUBST(SOLARINC)
14518 PathFormat "$PERL"
14519 PERL="$formatted_path"
14520 AC_SUBST(PERL)
14522 if test -n "$TMPDIR"; then
14523     TEMP_DIRECTORY="$TMPDIR"
14524 else
14525     TEMP_DIRECTORY="/tmp"
14527 if test "$build_os" = "cygwin"; then
14528     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
14530 AC_SUBST(TEMP_DIRECTORY)
14532 # setup the PATH for the environment
14533 if test -n "$LO_PATH_FOR_BUILD"; then
14534     LO_PATH="$LO_PATH_FOR_BUILD"
14535     case "$host_os" in
14536     cygwin*|wsl*)
14537         pathmunge "$MSVC_HOST_PATH" "before"
14538         ;;
14539     esac
14540 else
14541     LO_PATH="$PATH"
14543     case "$host_os" in
14545     aix*|dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
14546         if test "$ENABLE_JAVA" != ""; then
14547             pathmunge "$JAVA_HOME/bin" "after"
14548         fi
14549         ;;
14551     cygwin*|wsl*)
14552         # Win32 make needs native paths
14553         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
14554             LO_PATH=`cygpath -p -m "$PATH"`
14555         fi
14556         if test "$WIN_BUILD_ARCH" = "x64"; then
14557             # needed for msi packaging
14558             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
14559         fi
14560         # .NET 4.6 and higher don't have bin directory
14561         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
14562             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
14563         fi
14564         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
14565         pathmunge "$CSC_PATH" "before"
14566         pathmunge "$MIDL_PATH" "before"
14567         pathmunge "$AL_PATH" "before"
14568         pathmunge "$MSVC_MULTI_PATH" "before"
14569         pathmunge "$MSVC_BUILD_PATH" "before"
14570         if test -n "$MSBUILD_PATH" ; then
14571             pathmunge "$MSBUILD_PATH" "before"
14572         fi
14573         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
14574         if test "$ENABLE_JAVA" != ""; then
14575             if test -d "$JAVA_HOME/jre/bin/client"; then
14576                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
14577             fi
14578             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
14579                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
14580             fi
14581             pathmunge "$JAVA_HOME/bin" "before"
14582         fi
14583         pathmunge "$MSVC_HOST_PATH" "before"
14584         ;;
14586     solaris*)
14587         pathmunge "/usr/css/bin" "before"
14588         if test "$ENABLE_JAVA" != ""; then
14589             pathmunge "$JAVA_HOME/bin" "after"
14590         fi
14591         ;;
14592     esac
14595 AC_SUBST(LO_PATH)
14597 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
14598 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
14599     x_LO_ELFCHECK_ALLOWLIST=
14600 else
14601     x_LO_ELFCHECK_ALLOWLIST=[\#]
14603 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
14604 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
14606 libo_FUZZ_SUMMARY
14608 # Generate a configuration sha256 we can use for deps
14609 if test -f config_host.mk; then
14610     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
14612 if test -f config_host_lang.mk; then
14613     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
14616 CFLAGS=$my_original_CFLAGS
14617 CXXFLAGS=$my_original_CXXFLAGS
14618 CPPFLAGS=$my_original_CPPFLAGS
14620 AC_CONFIG_LINKS([include:include])
14622 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
14623 # BUILD platform configuration] - otherwise breaks cross building
14624 AC_CONFIG_FILES([config_host.mk
14625                  config_host_lang.mk
14626                  Makefile
14627                  bin/bffvalidator.sh
14628                  bin/odfvalidator.sh
14629                  bin/officeotron.sh
14630                  hardened_runtime.xcent
14631                  instsetoo_native/util/openoffice.lst
14632                  sysui/desktop/macosx/Info.plist
14633                  vs-code-template.code-workspace:.vscode/vs-code-template.code-workspace.in])
14634 AC_CONFIG_HEADERS([config_host/config_buildid.h])
14635 AC_CONFIG_HEADERS([config_host/config_box2d.h])
14636 AC_CONFIG_HEADERS([config_host/config_clang.h])
14637 AC_CONFIG_HEADERS([config_host/config_crypto.h])
14638 AC_CONFIG_HEADERS([config_host/config_dconf.h])
14639 AC_CONFIG_HEADERS([config_host/config_eot.h])
14640 AC_CONFIG_HEADERS([config_host/config_extensions.h])
14641 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
14642 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
14643 AC_CONFIG_HEADERS([config_host/config_dbus.h])
14644 AC_CONFIG_HEADERS([config_host/config_features.h])
14645 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
14646 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
14647 AC_CONFIG_HEADERS([config_host/config_firebird.h])
14648 AC_CONFIG_HEADERS([config_host/config_folders.h])
14649 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
14650 AC_CONFIG_HEADERS([config_host/config_gio.h])
14651 AC_CONFIG_HEADERS([config_host/config_global.h])
14652 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
14653 AC_CONFIG_HEADERS([config_host/config_java.h])
14654 AC_CONFIG_HEADERS([config_host/config_langs.h])
14655 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
14656 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
14657 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
14658 AC_CONFIG_HEADERS([config_host/config_locales.h])
14659 AC_CONFIG_HEADERS([config_host/config_mpl.h])
14660 AC_CONFIG_HEADERS([config_host/config_oox.h])
14661 AC_CONFIG_HEADERS([config_host/config_options.h])
14662 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
14663 AC_CONFIG_HEADERS([config_host/config_zxing.h])
14664 AC_CONFIG_HEADERS([config_host/config_skia.h])
14665 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
14666 AC_CONFIG_HEADERS([config_host/config_vendor.h])
14667 AC_CONFIG_HEADERS([config_host/config_vcl.h])
14668 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
14669 AC_CONFIG_HEADERS([config_host/config_version.h])
14670 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
14671 AC_CONFIG_HEADERS([config_host/config_poppler.h])
14672 AC_CONFIG_HEADERS([config_host/config_python.h])
14673 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
14674 AC_OUTPUT
14676 if test "$CROSS_COMPILING" = TRUE; then
14677     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
14680 # touch the config timestamp file
14681 if test ! -f config_host.mk.stamp; then
14682     echo > config_host.mk.stamp
14683 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
14684     echo "Host Configuration unchanged - avoiding scp2 stamp update"
14685 else
14686     echo > config_host.mk.stamp
14689 # touch the config lang timestamp file
14690 if test ! -f config_host_lang.mk.stamp; then
14691     echo > config_host_lang.mk.stamp
14692 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
14693     echo "Language Configuration unchanged - avoiding scp2 stamp update"
14694 else
14695     echo > config_host_lang.mk.stamp
14699 if test \( "$STALE_MAKE" = "TRUE" -o "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE" \) \
14700         -a "$build_os" = "cygwin"; then
14702 cat << _EOS
14703 ****************************************************************************
14704 WARNING:
14705 Your make version is known to be horribly slow, and hard to debug
14706 problems with. To get a reasonably functional make please do:
14708 to install a pre-compiled binary make for Win32
14710  mkdir -p /opt/lo/bin
14711  cd /opt/lo/bin
14712  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
14713  cp make-4.2.1-msvc.exe make
14714  chmod +x make
14716 to install from source:
14717 place yourself in a working directory of you choice.
14719  git clone git://git.savannah.gnu.org/make.git
14721  [go to Start menu, open "Visual Studio 2019" or "Visual Studio 2022", and then click "x86 Native Tools Command Prompt" or "x64 Native Tools Command Prompt"]
14722  set PATH=%PATH%;C:\Cygwin\bin
14723  [or Cygwin64, if that is what you have]
14724  cd path-to-make-repo-you-cloned-above
14725  build_w32.bat --without-guile
14727 should result in a WinRel/gnumake.exe.
14728 Copy it to the Cygwin /opt/lo/bin directory as make.exe
14730 Then re-run autogen.sh
14732 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
14733 Alternatively, you can install the 'new' make where ever you want and make sure that `which make` finds it.
14735 _EOS
14736 if test "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE"; then
14737     AC_MSG_ERROR([no file function found; the build will fail without it; use GNU make 4.0 or later])
14742 cat << _EOF
14743 ****************************************************************************
14745 To build, run:
14746 $GNUMAKE
14748 To view some help, run:
14749 $GNUMAKE help
14751 _EOF
14753 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
14754     cat << _EOF
14755 After the build has finished successfully, you can immediately run what you built using the command:
14756 _EOF
14758     if test $_os = Darwin; then
14759         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
14760     else
14761         echo instdir/program/soffice
14762     fi
14763     cat << _EOF
14765 If you want to run the smoketest, run:
14766 $GNUMAKE check
14768 _EOF
14771 if test -s "$WARNINGS_FILE_FOR_BUILD"; then
14772     echo "BUILD / cross-toolset config, repeated ($WARNINGS_FILE_FOR_BUILD)"
14773     cat "$WARNINGS_FILE_FOR_BUILD"
14774     echo
14777 if test -s "$WARNINGS_FILE"; then
14778     echo "HOST config ($WARNINGS_FILE)"
14779     cat "$WARNINGS_FILE"
14782 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: