prelim tdf#136472: remove implementation specific unit tests
[LibreOffice.git] / configure.ac
blob2c7ed9fb3aec54bd43282a3929bf0556b8aedd92
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.0.0.alpha1+],[],[],[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 dnl ===================================================================
1338 dnl Sanity checks for Emscripten SDK setup
1339 dnl ===================================================================
1341 if test "$_os" = "Emscripten"; then
1342     EMSCRIPTEN_ERROR=0
1343     if ! which emconfigure >/dev/null 2>&1; then
1344         AC_MSG_WARN([emconfigure must be in your \$PATH])
1345         EMSCRIPTEN_ERROR=1
1346     fi
1347     if test -z "$EMMAKEN_JUST_CONFIGURE"; then
1348         AC_MSG_WARN(["\$EMMAKEN_JUST_CONFIGURE wasn't set by emconfigure. Prefix configure or use autogen.sh])
1349         EMSCRIPTEN_ERROR=1
1350     fi
1351     if test $EMSCRIPTEN_ERROR -ne 0; then
1352         AC_MSG_ERROR(["Please fix your EMSDK setup to build with Emscripten!"])
1353     fi
1356 ###############################################################################
1357 # Extensions switches --enable/--disable
1358 ###############################################################################
1359 # By default these should be enabled unless having extra dependencies.
1360 # If there is extra dependency over configure options then the enable should
1361 # be automagic based on whether the requiring feature is enabled or not.
1362 # All this options change anything only with --enable-extension-integration.
1364 # The name of this option and its help string makes it sound as if
1365 # extensions are built anyway, just not integrated in the installer,
1366 # if you use --disable-extension-integration. Is that really the
1367 # case?
1369 AC_ARG_ENABLE(ios-simulator,
1370     AS_HELP_STRING([--enable-ios-simulator],
1371         [build for iOS simulator])
1374 libo_FUZZ_ARG_ENABLE(extension-integration,
1375     AS_HELP_STRING([--disable-extension-integration],
1376         [Disable integration of the built extensions in the installer of the
1377          product. Use this switch to disable the integration.])
1380 AC_ARG_ENABLE(avmedia,
1381     AS_HELP_STRING([--disable-avmedia],
1382         [Disable displaying and inserting AV media in documents. Work in progress, use only if you are hacking on it.])
1385 AC_ARG_ENABLE(database-connectivity,
1386     AS_HELP_STRING([--disable-database-connectivity],
1387         [Disable various database connectivity. Work in progress, use only if you are hacking on it.])
1390 # This doesn't mean not building (or "integrating") extensions
1391 # (although it probably should; i.e. it should imply
1392 # --disable-extension-integration I guess), it means not supporting
1393 # any extension mechanism at all
1394 libo_FUZZ_ARG_ENABLE(extensions,
1395     AS_HELP_STRING([--disable-extensions],
1396         [Disable all add-on extension functionality. Work in progress, use only if you are hacking on it.])
1399 AC_ARG_ENABLE(scripting,
1400     AS_HELP_STRING([--disable-scripting],
1401         [Disable BASIC, Java and Python. Work in progress, use only if you are hacking on it.])
1404 # This is mainly for Android and iOS, but could potentially be used in some
1405 # special case otherwise, too, so factored out as a separate setting
1407 AC_ARG_ENABLE(dynamic-loading,
1408     AS_HELP_STRING([--disable-dynamic-loading],
1409         [Disable any use of dynamic loading of code. Work in progress, use only if you are hacking on it.])
1412 libo_FUZZ_ARG_ENABLE(report-builder,
1413     AS_HELP_STRING([--disable-report-builder],
1414         [Disable the Report Builder.])
1417 libo_FUZZ_ARG_ENABLE(ext-wiki-publisher,
1418     AS_HELP_STRING([--enable-ext-wiki-publisher],
1419         [Enable the Wiki Publisher extension.])
1422 libo_FUZZ_ARG_ENABLE(lpsolve,
1423     AS_HELP_STRING([--disable-lpsolve],
1424         [Disable compilation of the lp solve solver ])
1426 libo_FUZZ_ARG_ENABLE(coinmp,
1427     AS_HELP_STRING([--disable-coinmp],
1428         [Disable compilation of the CoinMP solver ])
1431 libo_FUZZ_ARG_ENABLE(pdfimport,
1432     AS_HELP_STRING([--disable-pdfimport],
1433         [Disable building the PDF import feature.])
1436 libo_FUZZ_ARG_ENABLE(pdfium,
1437     AS_HELP_STRING([--disable-pdfium],
1438         [Disable building PDFium. Results in unsecure PDF signature verification.])
1441 libo_FUZZ_ARG_ENABLE(skia,
1442     AS_HELP_STRING([--disable-skia],
1443         [Disable building Skia. Use --enable-skia=debug to build without optimizations.])
1446 ###############################################################################
1448 dnl ---------- *** ----------
1450 libo_FUZZ_ARG_ENABLE(mergelibs,
1451     AS_HELP_STRING([--enable-mergelibs],
1452         [Merge several of the smaller libraries into one big, "merged", one.])
1455 libo_FUZZ_ARG_ENABLE(breakpad,
1456     AS_HELP_STRING([--enable-breakpad],
1457         [Enables breakpad for crash reporting.])
1460 libo_FUZZ_ARG_ENABLE(crashdump,
1461     AS_HELP_STRING([--disable-crashdump],
1462         [Disable dump.ini and dump-file, when --enable-breakpad])
1465 AC_ARG_ENABLE(fetch-external,
1466     AS_HELP_STRING([--disable-fetch-external],
1467         [Disables fetching external tarballs from web sources.])
1470 AC_ARG_ENABLE(fuzzers,
1471     AS_HELP_STRING([--enable-fuzzers],
1472         [Enables building libfuzzer targets for fuzz testing.])
1475 libo_FUZZ_ARG_ENABLE(pch,
1476     AS_HELP_STRING([--enable-pch=<yes/no/system/base/normal/full>],
1477         [Enables precompiled header support for C++. Forced default on Windows/VC build.
1478          Using 'system' will include only external headers, 'base' will add also headers
1479          from base modules, 'normal' will also add all headers except from the module built,
1480          'full' will use all suitable headers even from a module itself.])
1483 libo_FUZZ_ARG_ENABLE(epm,
1484     AS_HELP_STRING([--enable-epm],
1485         [LibreOffice includes self-packaging code, that requires epm, however epm is
1486          useless for large scale package building.])
1489 libo_FUZZ_ARG_ENABLE(odk,
1490     AS_HELP_STRING([--enable-odk],
1491         [Enable building the Office Development Kit, the part that extensions need to build against])
1494 AC_ARG_ENABLE(mpl-subset,
1495     AS_HELP_STRING([--enable-mpl-subset],
1496         [Don't compile any pieces which are not MPL or more liberally licensed])
1499 libo_FUZZ_ARG_ENABLE(evolution2,
1500     AS_HELP_STRING([--enable-evolution2],
1501         [Allows the built-in evolution 2 addressbook connectivity build to be
1502          enabled.])
1505 AC_ARG_ENABLE(avahi,
1506     AS_HELP_STRING([--enable-avahi],
1507         [Determines whether to use Avahi to advertise Impress to remote controls.])
1510 libo_FUZZ_ARG_ENABLE(werror,
1511     AS_HELP_STRING([--enable-werror],
1512         [Turn warnings to errors. (Has no effect in modules where the treating
1513          of warnings as errors is disabled explicitly.)]),
1516 libo_FUZZ_ARG_ENABLE(assert-always-abort,
1517     AS_HELP_STRING([--enable-assert-always-abort],
1518         [make assert() failures abort even when building without --enable-debug or --enable-dbgutil.]),
1521 libo_FUZZ_ARG_ENABLE(dbgutil,
1522     AS_HELP_STRING([--enable-dbgutil],
1523         [Provide debugging support from --enable-debug and include additional debugging
1524          utilities such as object counting or more expensive checks.
1525          This is the recommended option for developers.
1526          Note that this makes the build ABI incompatible, it is not possible to mix object
1527          files or libraries from a --enable-dbgutil and a --disable-dbgutil build.]))
1529 libo_FUZZ_ARG_ENABLE(debug,
1530     AS_HELP_STRING([--enable-debug],
1531         [Include debugging information, disable compiler optimization and inlining plus
1532          extra debugging code like assertions. Extra large build! (enables -g compiler flag).]))
1534 libo_FUZZ_ARG_ENABLE(split-debug,
1535     AS_HELP_STRING([--disable-split-debug],
1536         [Disable using split debug information (-gsplit-dwarf compile flag). Split debug information
1537          saves disk space and build time, but requires tools that support it (both build tools and debuggers).]))
1539 libo_FUZZ_ARG_ENABLE(gdb-index,
1540     AS_HELP_STRING([--disable-gdb-index],
1541         [Disables creating debug information in the gdb index format, which makes gdb start faster.
1542          The feature requires the gold or lld linker.]))
1544 libo_FUZZ_ARG_ENABLE(sal-log,
1545     AS_HELP_STRING([--enable-sal-log],
1546         [Make SAL_INFO and SAL_WARN calls do something even in a non-debug build.]))
1548 libo_FUZZ_ARG_ENABLE(symbols,
1549     AS_HELP_STRING([--enable-symbols],
1550         [Generate debug information.
1551          By default, enabled for --enable-debug and --enable-dbgutil, disabled
1552          otherwise. It is possible to explicitly specify gbuild build targets
1553          (where 'all' means everything, '-' prepended means to not enable, '/' appended means
1554          everything in the directory; there is no ordering, more specific overrides
1555          more general, and disabling takes precedence).
1556          Example: --enable-symbols="all -sw/ -Library_sc".]))
1558 libo_FUZZ_ARG_ENABLE(optimized,
1559     AS_HELP_STRING([--enable-optimized=<yes/no/debug>],
1560         [Whether to compile with optimization flags.
1561          By default, disabled for --enable-debug and --enable-dbgutil, enabled
1562          otherwise. Using 'debug' will try to use only optimizations that should
1563          not interfere with debugging. For Emscripten we default to optimized (-O1)
1564          debug build, as otherwise binaries become too large.]))
1566 libo_FUZZ_ARG_ENABLE(runtime-optimizations,
1567     AS_HELP_STRING([--disable-runtime-optimizations],
1568         [Statically disable certain runtime optimizations (like rtl/alloc.h or
1569          JVM JIT) that are known to interact badly with certain dynamic analysis
1570          tools (like -fsanitize=address or Valgrind).  By default, disabled iff
1571          CC contains "-fsanitize=*".  (For Valgrind, those runtime optimizations
1572          are typically disabled dynamically via RUNNING_ON_VALGRIND.)]))
1574 AC_ARG_WITH(valgrind,
1575     AS_HELP_STRING([--with-valgrind],
1576         [Make availability of Valgrind headers a hard requirement.]))
1578 libo_FUZZ_ARG_ENABLE(compiler-plugins,
1579     AS_HELP_STRING([--enable-compiler-plugins],
1580         [Enable compiler plugins that will perform additional checks during
1581          building. Enabled automatically by --enable-dbgutil.
1582          Use --enable-compiler-plugins=debug to also enable debug code in the plugins.]))
1583 COMPILER_PLUGINS_DEBUG=
1584 if test "$enable_compiler_plugins" = debug; then
1585     enable_compiler_plugins=yes
1586     COMPILER_PLUGINS_DEBUG=TRUE
1589 libo_FUZZ_ARG_ENABLE(compiler-plugins-analyzer-pch,
1590     AS_HELP_STRING([--disable-compiler-plugins-analyzer-pch],
1591         [Disable use of precompiled headers when running the Clang compiler plugin analyzer.  Not
1592          relevant in the --disable-compiler-plugins case.]))
1594 libo_FUZZ_ARG_ENABLE(ooenv,
1595     AS_HELP_STRING([--enable-ooenv],
1596         [Enable ooenv for the instdir installation.]))
1598 AC_ARG_ENABLE(lto,
1599     AS_HELP_STRING([--enable-lto],
1600         [Enable link-time optimization. Suitable for (optimised) product builds. Building might take
1601          longer but libraries and executables are optimized for speed. For GCC, best to use the 'gold'
1602          linker.)]))
1604 AC_ARG_ENABLE(python,
1605     AS_HELP_STRING([--enable-python=<no/auto/system/internal/fully-internal>],
1606         [Enables or disables Python support at run-time.
1607          Also specifies what Python to use at build-time.
1608          'fully-internal' even forces the internal version for uses of Python
1609          during the build.
1610          On macOS the only choices are
1611          'internal' (default) or 'fully-internal'. Otherwise the default is 'auto'.
1612          ]))
1614 libo_FUZZ_ARG_ENABLE(gtk3,
1615     AS_HELP_STRING([--disable-gtk3],
1616         [Determines whether to use Gtk+ 3.0 vclplug on platforms where Gtk+ 3.0 is available.]),
1617 ,test "${enable_gtk3+set}" = set || enable_gtk3=yes)
1619 AC_ARG_ENABLE(gtk4,
1620     AS_HELP_STRING([--enable-gtk4],
1621         [Determines whether to use Gtk+ 4.0 vclplug on platforms where Gtk+ 4.0 is available.]))
1623 AC_ARG_ENABLE(introspection,
1624     AS_HELP_STRING([--enable-introspection],
1625         [Generate files for GObject introspection.  Requires --enable-gtk3.  (Typically used by
1626          Linux distributions.)]))
1628 AC_ARG_ENABLE(split-app-modules,
1629     AS_HELP_STRING([--enable-split-app-modules],
1630         [Split file lists for app modules, e.g. base, calc.
1631          Has effect only with make distro-pack-install]),
1634 AC_ARG_ENABLE(split-opt-features,
1635     AS_HELP_STRING([--enable-split-opt-features],
1636         [Split file lists for some optional features, e.g. pyuno, testtool.
1637          Has effect only with make distro-pack-install]),
1640 libo_FUZZ_ARG_ENABLE(cairo-canvas,
1641     AS_HELP_STRING([--disable-cairo-canvas],
1642         [Determines whether to build the Cairo canvas on platforms where Cairo is available.]),
1645 libo_FUZZ_ARG_ENABLE(dbus,
1646     AS_HELP_STRING([--disable-dbus],
1647         [Determines whether to enable features that depend on dbus.
1648          e.g. Presentation mode screensaver control, bluetooth presentation control, automatic font install]),
1649 ,test "${enable_dbus+set}" = set || enable_dbus=yes)
1651 libo_FUZZ_ARG_ENABLE(sdremote,
1652     AS_HELP_STRING([--disable-sdremote],
1653         [Determines whether to enable Impress remote control (i.e. the server component).]),
1654 ,test "${enable_sdremote+set}" = set || enable_sdremote=yes)
1656 libo_FUZZ_ARG_ENABLE(sdremote-bluetooth,
1657     AS_HELP_STRING([--disable-sdremote-bluetooth],
1658         [Determines whether to build sdremote with bluetooth support.
1659          Requires dbus on Linux.]))
1661 libo_FUZZ_ARG_ENABLE(gio,
1662     AS_HELP_STRING([--disable-gio],
1663         [Determines whether to use the GIO support.]),
1664 ,test "${enable_gio+set}" = set || enable_gio=yes)
1666 AC_ARG_ENABLE(qt5,
1667     AS_HELP_STRING([--enable-qt5],
1668         [Determines whether to use Qt5 vclplug on platforms where Qt5 is
1669          available.]),
1672 AC_ARG_ENABLE(qt6,
1673     AS_HELP_STRING([--enable-qt6],
1674         [Determines whether to use Qt6 vclplug on platforms where Qt6 is
1675          available.]),
1678 AC_ARG_ENABLE(kf5,
1679     AS_HELP_STRING([--enable-kf5],
1680         [Determines whether to use Qt5/KF5 vclplug on platforms where Qt5 and
1681          KF5 are available.]),
1684 AC_ARG_ENABLE(gtk3_kde5,
1685     AS_HELP_STRING([--enable-gtk3-kde5],
1686         [Determines whether to use Gtk3 vclplug with KF5 file dialogs on
1687          platforms where Gtk3, Qt5 and Plasma is available.]),
1690 AC_ARG_ENABLE(gui,
1691     AS_HELP_STRING([--disable-gui],
1692         [Disable use of X11 or Wayland to reduce dependencies (e.g. for building LibreOfficeKit).]),
1693 ,enable_gui=yes)
1695 libo_FUZZ_ARG_ENABLE(randr,
1696     AS_HELP_STRING([--disable-randr],
1697         [Disable RandR support in the vcl project.]),
1698 ,test "${enable_randr+set}" = set || enable_randr=yes)
1700 libo_FUZZ_ARG_ENABLE(gstreamer-1-0,
1701     AS_HELP_STRING([--disable-gstreamer-1-0],
1702         [Disable building with the gstreamer 1.0 avmedia backend.]),
1703 ,test "${enable_gstreamer_1_0+set}" = set || enable_gstreamer_1_0=yes)
1705 libo_FUZZ_ARG_ENABLE([eot],
1706     [AS_HELP_STRING([--enable-eot],
1707         [Enable support for Embedded OpenType fonts.])],
1708 ,test "${enable_eot+set}" = set || enable_eot=no)
1710 libo_FUZZ_ARG_ENABLE(cve-tests,
1711     AS_HELP_STRING([--disable-cve-tests],
1712         [Prevent CVE tests to be executed]),
1715 libo_FUZZ_ARG_ENABLE(chart-tests,
1716     AS_HELP_STRING([--enable-chart-tests],
1717         [Executes chart XShape tests. In a perfect world these tests would be
1718          stable and everyone could run them, in reality it is best to run them
1719          only on a few machines that are known to work and maintained by people
1720          who can judge if a test failure is a regression or not.]),
1723 AC_ARG_ENABLE(build-opensymbol,
1724     AS_HELP_STRING([--enable-build-opensymbol],
1725         [Do not use the prebuilt opens___.ttf. Build it instead. This needs
1726          fontforge installed.]),
1729 AC_ARG_ENABLE(dependency-tracking,
1730     AS_HELP_STRING([--enable-dependency-tracking],
1731         [Do not reject slow dependency extractors.])[
1732   --disable-dependency-tracking
1733                           Disables generation of dependency information.
1734                           Speed up one-time builds.],
1737 AC_ARG_ENABLE(icecream,
1738     AS_HELP_STRING([--enable-icecream],
1739         [Use the 'icecream' distributed compiling tool to speedup the compilation.
1740          It defaults to /opt/icecream for the location of the icecream gcc/g++
1741          wrappers, you can override that using --with-gcc-home=/the/path switch.]),
1744 AC_ARG_ENABLE(ld,
1745     AS_HELP_STRING([--enable-ld=<linker>],
1746         [Use the specified linker. Both 'gold' and 'lld' linkers generally use less memory and link faster.
1747          By default tries to use the best linker possible, use --disable-ld to use the default linker.
1748          If <linker> contains any ':', the part before the first ':' is used as the value of
1749          -fuse-ld, while the part after the first ':' is used as the value of --ld-path (which is
1750          needed for Clang 12).]),
1753 libo_FUZZ_ARG_ENABLE(cups,
1754     AS_HELP_STRING([--disable-cups],
1755         [Do not build cups support.])
1758 AC_ARG_ENABLE(ccache,
1759     AS_HELP_STRING([--disable-ccache],
1760         [Do not try to use ccache automatically.
1761          By default, unless on Windows, we will try to detect if ccache is available; in that case if
1762          CC/CXX are not yet set, and --enable-icecream is not given, we
1763          attempt to use ccache. --disable-ccache disables ccache completely.
1764          Additionally ccache's depend mode is enabled if possible,
1765          use --enable-ccache=nodepend to enable ccache without depend mode.
1769 libo_FUZZ_ARG_ENABLE(online-update,
1770     AS_HELP_STRING([--enable-online-update],
1771         [Enable the online update service that will check for new versions of
1772          LibreOffice. Disabled by default. Requires --with-privacy-policy-url to be set.
1773          If the value is "mar", the experimental Mozilla-like update will be
1774          enabled instead of the traditional update mechanism.]),
1777 AC_ARG_WITH(update-config,
1778     AS_HELP_STRING([--with-update-config=/tmp/update.ini],
1779                    [Path to the update config ini file]))
1781 libo_FUZZ_ARG_ENABLE(extension-update,
1782     AS_HELP_STRING([--disable-extension-update],
1783         [Disable possibility to update installed extensions.]),
1786 libo_FUZZ_ARG_ENABLE(release-build,
1787     AS_HELP_STRING([--enable-release-build],
1788         [Enable release build. Note that the "release build" choice is orthogonal to
1789          whether symbols are present, debug info is generated, or optimization
1790          is done.
1791          See http://wiki.documentfoundation.org/Development/DevBuild]),
1794 AC_ARG_ENABLE(windows-build-signing,
1795     AS_HELP_STRING([--enable-windows-build-signing],
1796         [Enable signing of windows binaries (*.exe, *.dll)]),
1799 AC_ARG_ENABLE(silent-msi,
1800     AS_HELP_STRING([--enable-silent-msi],
1801         [Enable MSI with LIMITUI=1 (silent install).]),
1804 AC_ARG_ENABLE(macosx-code-signing,
1805     AS_HELP_STRING([--enable-macosx-code-signing=<identity>],
1806         [Sign executables, dylibs, frameworks and the app bundle. If you
1807          don't provide an identity the first suitable certificate
1808          in your keychain is used.]),
1811 AC_ARG_ENABLE(macosx-package-signing,
1812     AS_HELP_STRING([--enable-macosx-package-signing=<identity>],
1813         [Create a .pkg suitable for uploading to the Mac App Store and sign
1814          it. If you don't provide an identity the first suitable certificate
1815          in your keychain is used.]),
1818 AC_ARG_ENABLE(macosx-sandbox,
1819     AS_HELP_STRING([--enable-macosx-sandbox],
1820         [Make the app bundle run in a sandbox. Requires code signing.
1821          Is required by apps distributed in the Mac App Store, and implies
1822          adherence to App Store rules.]),
1825 AC_ARG_WITH(macosx-bundle-identifier,
1826     AS_HELP_STRING([--with-macosx-bundle-identifier=tld.mumble.orifice.TheOffice],
1827         [Define the macOS bundle identifier. Default is the somewhat weird
1828          org.libreoffice.script ("script", huh?).]),
1829 ,with_macosx_bundle_identifier=org.libreoffice.script)
1831 AC_ARG_WITH(product-name,
1832     AS_HELP_STRING([--with-product-name='My Own Office Suite'],
1833         [Define the product name. Default is AC_PACKAGE_NAME.]),
1834 ,with_product_name=$PRODUCTNAME)
1836 libo_FUZZ_ARG_ENABLE(community-flavor,
1837     AS_HELP_STRING([--disable-community-flavor],
1838         [Disable the Community branding.]),
1841 AC_ARG_WITH(package-version,
1842     AS_HELP_STRING([--with-package-version='3.1.4.5'],
1843         [Define the package version. Default is AC_PACKAGE_VERSION. Use only if you distribute an own build for macOS.]),
1846 libo_FUZZ_ARG_ENABLE(readonly-installset,
1847     AS_HELP_STRING([--enable-readonly-installset],
1848         [Prevents any attempts by LibreOffice to write into its installation. That means
1849          at least that no "system-wide" extensions can be added. Partly experimental work in
1850          progress, probably not fully implemented. Always enabled for macOS.]),
1853 libo_FUZZ_ARG_ENABLE(mariadb-sdbc,
1854     AS_HELP_STRING([--disable-mariadb-sdbc],
1855         [Disable the build of the MariaDB/MySQL-SDBC driver.])
1858 libo_FUZZ_ARG_ENABLE(postgresql-sdbc,
1859     AS_HELP_STRING([--disable-postgresql-sdbc],
1860         [Disable the build of the PostgreSQL-SDBC driver.])
1863 libo_FUZZ_ARG_ENABLE(lotuswordpro,
1864     AS_HELP_STRING([--disable-lotuswordpro],
1865         [Disable the build of the Lotus Word Pro filter.]),
1866 ,test "${enable_lotuswordpro+set}" = set || enable_lotuswordpro=yes)
1868 libo_FUZZ_ARG_ENABLE(firebird-sdbc,
1869     AS_HELP_STRING([--disable-firebird-sdbc],
1870         [Disable the build of the Firebird-SDBC driver if it doesn't compile for you.]),
1871 ,test "${enable_firebird_sdbc+set}" = set || enable_firebird_sdbc=yes)
1873 AC_ARG_ENABLE(bogus-pkg-config,
1874     AS_HELP_STRING([--enable-bogus-pkg-config],
1875         [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.]),
1878 AC_ARG_ENABLE(openssl,
1879     AS_HELP_STRING([--disable-openssl],
1880         [Disable using libssl/libcrypto from OpenSSL. If disabled,
1881          components will either use GNUTLS or NSS. Work in progress,
1882          use only if you are hacking on it.]),
1883 ,enable_openssl=yes)
1885 libo_FUZZ_ARG_ENABLE(cipher-openssl-backend,
1886     AS_HELP_STRING([--enable-cipher-openssl-backend],
1887         [Enable using OpenSSL as the actual implementation of the rtl/cipher.h functionality.
1888          Requires --enable-openssl.]))
1890 AC_ARG_ENABLE(nss,
1891     AS_HELP_STRING([--disable-nss],
1892         [Disable using NSS. If disabled,
1893          components will either use GNUTLS or openssl. Work in progress,
1894          use only if you are hacking on it.]),
1895 ,enable_nss=yes)
1897 AC_ARG_ENABLE(library-bin-tar,
1898     AS_HELP_STRING([--enable-library-bin-tar],
1899         [Enable the building and reused of tarball of binary build for some 'external' libraries.
1900         Some libraries can save their build result in a tarball
1901         stored in TARFILE_LOCATION. That binary tarball is
1902         uniquely identified by the source tarball,
1903         the content of the config_host.mk file and the content
1904         of the top-level directory in core for that library
1905         If this option is enabled, then if such a tarfile exist, it will be untarred
1906         instead of the source tarfile, and the build step will be skipped for that
1907         library.
1908         If a proper tarfile does not exist, then the normal source-based
1909         build is done for that library and a proper binary tarfile is created
1910         for the next time.]),
1913 AC_ARG_ENABLE(dconf,
1914     AS_HELP_STRING([--disable-dconf],
1915         [Disable the dconf configuration backend (enabled by default where
1916          available).]))
1918 libo_FUZZ_ARG_ENABLE(formula-logger,
1919     AS_HELP_STRING(
1920         [--enable-formula-logger],
1921         [Enable formula logger for logging formula calculation flow in Calc.]
1922     )
1925 AC_ARG_ENABLE(ldap,
1926     AS_HELP_STRING([--disable-ldap],
1927         [Disable LDAP support.]),
1928 ,enable_ldap=yes)
1930 AC_ARG_ENABLE(opencl,
1931     AS_HELP_STRING([--disable-opencl],
1932         [Disable OpenCL support.]),
1933 ,enable_opencl=yes)
1935 libo_FUZZ_ARG_ENABLE(librelogo,
1936     AS_HELP_STRING([--disable-librelogo],
1937         [Do not build LibreLogo.]),
1938 ,enable_librelogo=yes)
1940 AC_ARG_ENABLE(cmis,
1941     AS_HELP_STRING([--disable-cmis],
1942         [Disable CMIS support.]),
1943 ,enable_cmis=yes)
1945 AC_ARG_ENABLE(curl,
1946     AS_HELP_STRING([--disable-curl],
1947         [Disable CURL support.]),
1948 ,enable_curl=yes)
1950 AC_ARG_ENABLE(wasm-strip,
1951     AS_HELP_STRING([--enable-wasm-strip],
1952         [Strip the static build like for WASM/emscripten platform.]),
1953 ,enable_wasm_strip=yes)
1955 AC_ARG_ENABLE(xmlhelp,
1956     AS_HELP_STRING([--disable-xmlhelp],
1957         [Disable XML help support]),
1958 ,enable_xmlhelp=yes)
1961 dnl ===================================================================
1962 dnl Optional Packages (--with/without-)
1963 dnl ===================================================================
1965 AC_ARG_WITH(gcc-home,
1966     AS_HELP_STRING([--with-gcc-home],
1967         [Specify the location of gcc/g++ manually. This can be used in conjunction
1968          with --enable-icecream when icecream gcc/g++ wrappers are installed in a
1969          non-default path.]),
1972 AC_ARG_WITH(gnu-patch,
1973     AS_HELP_STRING([--with-gnu-patch],
1974         [Specify location of GNU patch on Solaris or FreeBSD.]),
1977 AC_ARG_WITH(build-platform-configure-options,
1978     AS_HELP_STRING([--with-build-platform-configure-options],
1979         [Specify options for the configure script run for the *build* platform in a cross-compilation]),
1982 AC_ARG_WITH(gnu-cp,
1983     AS_HELP_STRING([--with-gnu-cp],
1984         [Specify location of GNU cp on Solaris or FreeBSD.]),
1987 AC_ARG_WITH(external-tar,
1988     AS_HELP_STRING([--with-external-tar=<TARFILE_PATH>],
1989         [Specify an absolute path of where to find (and store) tarfiles.]),
1990     TARFILE_LOCATION=$withval ,
1993 AC_ARG_WITH(referenced-git,
1994     AS_HELP_STRING([--with-referenced-git=<OTHER_CHECKOUT_DIR>],
1995         [Specify another checkout directory to reference. This makes use of
1996                  git submodule update --reference, and saves a lot of diskspace
1997                  when having multiple trees side-by-side.]),
1998     GIT_REFERENCE_SRC=$withval ,
2001 AC_ARG_WITH(linked-git,
2002     AS_HELP_STRING([--with-linked-git=<submodules repo basedir>],
2003         [Specify a directory where the repositories of submodules are located.
2004          This uses a method similar to git-new-workdir to get submodules.]),
2005     GIT_LINK_SRC=$withval ,
2008 AC_ARG_WITH(galleries,
2009     AS_HELP_STRING([--with-galleries],
2010         [Specify how galleries should be built. It is possible either to
2011          build these internally from source ("build"),
2012          or to disable them ("no")]),
2015 AC_ARG_WITH(theme,
2016     AS_HELP_STRING([--with-theme="theme1 theme2..."],
2017         [Choose which themes to include. By default those themes with an '*' are included.
2018          Possible choices: *breeze, *breeze_dark, *breeze_dark_svg, *breeze_svg, *colibre, *colibre_svg, *elementary,
2019          *elementary_svg, *karasa_jaga, *karasa_jaga_svg, *sifr, *sifr_dark, *sifr_dark_svg, *sifr_svg, *sukapura, *sukapura_svg.]),
2022 libo_FUZZ_ARG_WITH(helppack-integration,
2023     AS_HELP_STRING([--without-helppack-integration],
2024         [It will not integrate the helppacks to the installer
2025          of the product. Please use this switch to use the online help
2026          or separate help packages.]),
2029 libo_FUZZ_ARG_WITH(fonts,
2030     AS_HELP_STRING([--without-fonts],
2031         [LibreOffice includes some third-party fonts to provide a reliable basis for
2032          help content, templates, samples, etc. When these fonts are already
2033          known to be available on the system then you should use this option.]),
2036 AC_ARG_WITH(epm,
2037     AS_HELP_STRING([--with-epm],
2038         [Decides which epm to use. Default is to use the one from the system if
2039          one is built. When either this is not there or you say =internal epm
2040          will be built.]),
2043 AC_ARG_WITH(package-format,
2044     AS_HELP_STRING([--with-package-format],
2045         [Specify package format(s) for LibreOffice installation sets. The
2046          implicit --without-package-format leads to no installation sets being
2047          generated. Possible values: aix, archive, bsd, deb, dmg,
2048          installed, msi, pkg, and rpm.
2049          Example: --with-package-format='deb rpm']),
2052 AC_ARG_WITH(tls,
2053     AS_HELP_STRING([--with-tls],
2054         [Decides which TLS/SSL and cryptographic implementations to use for
2055          LibreOffice's code. Notice that this doesn't apply for depending
2056          libraries like "neon", for example. Default is to use NSS
2057          although OpenSSL is also possible. Notice that selecting NSS restricts
2058          the usage of OpenSSL in LO's code but selecting OpenSSL doesn't
2059          restrict by now the usage of NSS in LO's code. Possible values:
2060          openssl, nss. Example: --with-tls="nss"]),
2063 AC_ARG_WITH(system-libs,
2064     AS_HELP_STRING([--with-system-libs],
2065         [Use libraries already on system -- enables all --with-system-* flags.]),
2068 AC_ARG_WITH(system-bzip2,
2069     AS_HELP_STRING([--with-system-bzip2],
2070         [Use bzip2 already on system. Used only when --enable-online-update=mar]),,
2071     [with_system_bzip2="$with_system_libs"])
2073 AC_ARG_WITH(system-headers,
2074     AS_HELP_STRING([--with-system-headers],
2075         [Use headers already on system -- enables all --with-system-* flags for
2076          external packages whose headers are the only entities used i.e.
2077          boost/odbc/sane-header(s).]),,
2078     [with_system_headers="$with_system_libs"])
2080 AC_ARG_WITH(system-jars,
2081     AS_HELP_STRING([--without-system-jars],
2082         [When building with --with-system-libs, also the needed jars are expected
2083          on the system. Use this to disable that]),,
2084     [with_system_jars="$with_system_libs"])
2086 AC_ARG_WITH(system-cairo,
2087     AS_HELP_STRING([--with-system-cairo],
2088         [Use cairo libraries already on system.  Happens automatically for
2089          (implicit) --enable-gtk3.]))
2091 AC_ARG_WITH(system-epoxy,
2092     AS_HELP_STRING([--with-system-epoxy],
2093         [Use epoxy libraries already on system.  Happens automatically for
2094          (implicit) --enable-gtk3.]),,
2095        [with_system_epoxy="$with_system_libs"])
2097 AC_ARG_WITH(myspell-dicts,
2098     AS_HELP_STRING([--with-myspell-dicts],
2099         [Adds myspell dictionaries to the LibreOffice installation set]),
2102 AC_ARG_WITH(system-dicts,
2103     AS_HELP_STRING([--without-system-dicts],
2104         [Do not use dictionaries from system paths.]),
2107 AC_ARG_WITH(external-dict-dir,
2108     AS_HELP_STRING([--with-external-dict-dir],
2109         [Specify external dictionary dir.]),
2112 AC_ARG_WITH(external-hyph-dir,
2113     AS_HELP_STRING([--with-external-hyph-dir],
2114         [Specify external hyphenation pattern dir.]),
2117 AC_ARG_WITH(external-thes-dir,
2118     AS_HELP_STRING([--with-external-thes-dir],
2119         [Specify external thesaurus dir.]),
2122 AC_ARG_WITH(system-zlib,
2123     AS_HELP_STRING([--with-system-zlib],
2124         [Use zlib already on system.]),,
2125     [with_system_zlib=auto])
2127 AC_ARG_WITH(system-jpeg,
2128     AS_HELP_STRING([--with-system-jpeg],
2129         [Use jpeg already on system.]),,
2130     [with_system_jpeg="$with_system_libs"])
2132 AC_ARG_WITH(system-clucene,
2133     AS_HELP_STRING([--with-system-clucene],
2134         [Use clucene already on system.]),,
2135     [with_system_clucene="$with_system_libs"])
2137 AC_ARG_WITH(system-expat,
2138     AS_HELP_STRING([--with-system-expat],
2139         [Use expat already on system.]),,
2140     [with_system_expat="$with_system_libs"])
2142 AC_ARG_WITH(system-libxml,
2143     AS_HELP_STRING([--with-system-libxml],
2144         [Use libxml/libxslt already on system.]),,
2145     [with_system_libxml=auto])
2147 AC_ARG_WITH(system-icu,
2148     AS_HELP_STRING([--with-system-icu],
2149         [Use icu already on system.]),,
2150     [with_system_icu="$with_system_libs"])
2152 AC_ARG_WITH(system-ucpp,
2153     AS_HELP_STRING([--with-system-ucpp],
2154         [Use ucpp already on system.]),,
2155     [])
2157 AC_ARG_WITH(system-openldap,
2158     AS_HELP_STRING([--with-system-openldap],
2159         [Use the OpenLDAP LDAP SDK already on system.]),,
2160     [with_system_openldap="$with_system_libs"])
2162 libo_FUZZ_ARG_ENABLE(poppler,
2163     AS_HELP_STRING([--disable-poppler],
2164         [Disable building Poppler.])
2167 AC_ARG_WITH(system-poppler,
2168     AS_HELP_STRING([--with-system-poppler],
2169         [Use system poppler (only needed for PDF import).]),,
2170     [with_system_poppler="$with_system_libs"])
2172 libo_FUZZ_ARG_ENABLE(gpgmepp,
2173     AS_HELP_STRING([--disable-gpgmepp],
2174         [Disable building gpgmepp. Do not use in normal cases unless you want to fix potential problems it causes.])
2177 AC_ARG_WITH(system-gpgmepp,
2178     AS_HELP_STRING([--with-system-gpgmepp],
2179         [Use gpgmepp already on system]),,
2180     [with_system_gpgmepp="$with_system_libs"])
2182 AC_ARG_WITH(system-mariadb,
2183     AS_HELP_STRING([--with-system-mariadb],
2184         [Use MariaDB/MySQL libraries already on system.]),,
2185     [with_system_mariadb="$with_system_libs"])
2187 AC_ARG_ENABLE(bundle-mariadb,
2188     AS_HELP_STRING([--enable-bundle-mariadb],
2189         [When using MariaDB/MySQL libraries already on system, bundle them with the MariaDB Connector/LibreOffice.])
2192 AC_ARG_WITH(system-postgresql,
2193     AS_HELP_STRING([--with-system-postgresql],
2194         [Use PostgreSQL libraries already on system, for building the PostgreSQL-SDBC
2195          driver. If pg_config is not in PATH, use PGCONFIG to point to it.]),,
2196     [with_system_postgresql="$with_system_libs"])
2198 AC_ARG_WITH(libpq-path,
2199     AS_HELP_STRING([--with-libpq-path=<absolute path to your libpq installation>],
2200         [Use this PostgreSQL C interface (libpq) installation for building
2201          the PostgreSQL-SDBC extension.]),
2204 AC_ARG_WITH(system-firebird,
2205     AS_HELP_STRING([--with-system-firebird],
2206         [Use Firebird libraries already on system, for building the Firebird-SDBC
2207          driver. If fb_config is not in PATH, use FBCONFIG to point to it.]),,
2208     [with_system_firebird="$with_system_libs"])
2210 AC_ARG_WITH(system-libtommath,
2211             AS_HELP_STRING([--with-system-libtommath],
2212                            [Use libtommath already on system]),,
2213             [with_system_libtommath="$with_system_libs"])
2215 AC_ARG_WITH(system-hsqldb,
2216     AS_HELP_STRING([--with-system-hsqldb],
2217         [Use hsqldb already on system.]))
2219 AC_ARG_WITH(hsqldb-jar,
2220     AS_HELP_STRING([--with-hsqldb-jar=JARFILE],
2221         [Specify path to jarfile manually.]),
2222     HSQLDB_JAR=$withval)
2224 libo_FUZZ_ARG_ENABLE(scripting-beanshell,
2225     AS_HELP_STRING([--disable-scripting-beanshell],
2226         [Disable support for scripts in BeanShell.]),
2230 AC_ARG_WITH(system-beanshell,
2231     AS_HELP_STRING([--with-system-beanshell],
2232         [Use beanshell already on system.]),,
2233     [with_system_beanshell="$with_system_jars"])
2235 AC_ARG_WITH(beanshell-jar,
2236     AS_HELP_STRING([--with-beanshell-jar=JARFILE],
2237         [Specify path to jarfile manually.]),
2238     BSH_JAR=$withval)
2240 libo_FUZZ_ARG_ENABLE(scripting-javascript,
2241     AS_HELP_STRING([--disable-scripting-javascript],
2242         [Disable support for scripts in JavaScript.]),
2246 AC_ARG_WITH(system-rhino,
2247     AS_HELP_STRING([--with-system-rhino],
2248         [Use rhino already on system.]),,)
2249 #    [with_system_rhino="$with_system_jars"])
2250 # Above is not used as we have different debug interface
2251 # patched into internal rhino. This code needs to be fixed
2252 # before we can enable it by default.
2254 AC_ARG_WITH(rhino-jar,
2255     AS_HELP_STRING([--with-rhino-jar=JARFILE],
2256         [Specify path to jarfile manually.]),
2257     RHINO_JAR=$withval)
2259 AC_ARG_WITH(system-jfreereport,
2260     AS_HELP_STRING([--with-system-jfreereport],
2261         [Use JFreeReport already on system.]),,
2262     [with_system_jfreereport="$with_system_jars"])
2264 AC_ARG_WITH(sac-jar,
2265     AS_HELP_STRING([--with-sac-jar=JARFILE],
2266         [Specify path to jarfile manually.]),
2267     SAC_JAR=$withval)
2269 AC_ARG_WITH(libxml-jar,
2270     AS_HELP_STRING([--with-libxml-jar=JARFILE],
2271         [Specify path to jarfile manually.]),
2272     LIBXML_JAR=$withval)
2274 AC_ARG_WITH(flute-jar,
2275     AS_HELP_STRING([--with-flute-jar=JARFILE],
2276         [Specify path to jarfile manually.]),
2277     FLUTE_JAR=$withval)
2279 AC_ARG_WITH(jfreereport-jar,
2280     AS_HELP_STRING([--with-jfreereport-jar=JARFILE],
2281         [Specify path to jarfile manually.]),
2282     JFREEREPORT_JAR=$withval)
2284 AC_ARG_WITH(liblayout-jar,
2285     AS_HELP_STRING([--with-liblayout-jar=JARFILE],
2286         [Specify path to jarfile manually.]),
2287     LIBLAYOUT_JAR=$withval)
2289 AC_ARG_WITH(libloader-jar,
2290     AS_HELP_STRING([--with-libloader-jar=JARFILE],
2291         [Specify path to jarfile manually.]),
2292     LIBLOADER_JAR=$withval)
2294 AC_ARG_WITH(libformula-jar,
2295     AS_HELP_STRING([--with-libformula-jar=JARFILE],
2296         [Specify path to jarfile manually.]),
2297     LIBFORMULA_JAR=$withval)
2299 AC_ARG_WITH(librepository-jar,
2300     AS_HELP_STRING([--with-librepository-jar=JARFILE],
2301         [Specify path to jarfile manually.]),
2302     LIBREPOSITORY_JAR=$withval)
2304 AC_ARG_WITH(libfonts-jar,
2305     AS_HELP_STRING([--with-libfonts-jar=JARFILE],
2306         [Specify path to jarfile manually.]),
2307     LIBFONTS_JAR=$withval)
2309 AC_ARG_WITH(libserializer-jar,
2310     AS_HELP_STRING([--with-libserializer-jar=JARFILE],
2311         [Specify path to jarfile manually.]),
2312     LIBSERIALIZER_JAR=$withval)
2314 AC_ARG_WITH(libbase-jar,
2315     AS_HELP_STRING([--with-libbase-jar=JARFILE],
2316         [Specify path to jarfile manually.]),
2317     LIBBASE_JAR=$withval)
2319 AC_ARG_WITH(system-odbc,
2320     AS_HELP_STRING([--with-system-odbc],
2321         [Use the odbc headers already on system.]),,
2322     [with_system_odbc="auto"])
2324 AC_ARG_WITH(system-sane,
2325     AS_HELP_STRING([--with-system-sane],
2326         [Use sane.h already on system.]),,
2327     [with_system_sane="$with_system_headers"])
2329 AC_ARG_WITH(system-bluez,
2330     AS_HELP_STRING([--with-system-bluez],
2331         [Use bluetooth.h already on system.]),,
2332     [with_system_bluez="$with_system_headers"])
2334 AC_ARG_WITH(system-curl,
2335     AS_HELP_STRING([--with-system-curl],
2336         [Use curl already on system.]),,
2337     [with_system_curl=auto])
2339 AC_ARG_WITH(system-boost,
2340     AS_HELP_STRING([--with-system-boost],
2341         [Use boost already on system.]),,
2342     [with_system_boost="$with_system_headers"])
2344 AC_ARG_WITH(system-cuckoo,
2345     AS_HELP_STRING([--with-system-cuckoo],
2346         [Use libcuckoo already on system.]),,
2347     [with_system_cuckoo="$with_system_headers"])
2349 AC_ARG_WITH(system-glm,
2350     AS_HELP_STRING([--with-system-glm],
2351         [Use glm already on system.]),,
2352     [with_system_glm="$with_system_headers"])
2354 AC_ARG_WITH(system-hunspell,
2355     AS_HELP_STRING([--with-system-hunspell],
2356         [Use libhunspell already on system.]),,
2357     [with_system_hunspell="$with_system_libs"])
2359 libo_FUZZ_ARG_ENABLE(zxing,
2360     AS_HELP_STRING([--disable-zxing],
2361        [Disable use of zxing external library.]))
2363 AC_ARG_WITH(system-zxing,
2364     AS_HELP_STRING([--with-system-zxing],
2365         [Use libzxing already on system.]),,
2366     [with_system_zxing="$with_system_libs"])
2368 AC_ARG_WITH(system-box2d,
2369     AS_HELP_STRING([--with-system-box2d],
2370         [Use box2d already on system.]),,
2371     [with_system_box2d="$with_system_libs"])
2373 AC_ARG_WITH(system-mythes,
2374     AS_HELP_STRING([--with-system-mythes],
2375         [Use mythes already on system.]),,
2376     [with_system_mythes="$with_system_libs"])
2378 AC_ARG_WITH(system-altlinuxhyph,
2379     AS_HELP_STRING([--with-system-altlinuxhyph],
2380         [Use ALTLinuxhyph already on system.]),,
2381     [with_system_altlinuxhyph="$with_system_libs"])
2383 AC_ARG_WITH(system-lpsolve,
2384     AS_HELP_STRING([--with-system-lpsolve],
2385         [Use lpsolve already on system.]),,
2386     [with_system_lpsolve="$with_system_libs"])
2388 AC_ARG_WITH(system-coinmp,
2389     AS_HELP_STRING([--with-system-coinmp],
2390         [Use CoinMP already on system.]),,
2391     [with_system_coinmp="$with_system_libs"])
2393 AC_ARG_WITH(system-liblangtag,
2394     AS_HELP_STRING([--with-system-liblangtag],
2395         [Use liblangtag library already on system.]),,
2396     [with_system_liblangtag="$with_system_libs"])
2398 AC_ARG_WITH(webdav,
2399     AS_HELP_STRING([--with-webdav],
2400         [Specify which library to use for webdav implementation.
2401          Possible values: "neon", "serf", "curl", "no". The default value is "neon".
2402          Example: --with-webdav="serf"]))
2404 AC_ARG_WITH(linker-hash-style,
2405     AS_HELP_STRING([--with-linker-hash-style],
2406         [Use linker with --hash-style=<style> when linking shared objects.
2407          Possible values: "sysv", "gnu", "both". The default value is "gnu"
2408          if supported on the build system, and "sysv" otherwise.]))
2410 AC_ARG_WITH(jdk-home,
2411     AS_HELP_STRING([--with-jdk-home=<absolute path to JDK home>],
2412         [If you have installed JDK 9 or later on your system please supply the
2413          path here. Note that this is not the location of the java command but the
2414          location of the entire distribution. In case of cross-compiling, this
2415          is the JDK of the host os. Use --with-build-platform-configure-options
2416          to point to a different build platform JDK.]),
2419 AC_ARG_WITH(help,
2420     AS_HELP_STRING([--with-help],
2421         [Enable the build of help. There is a special parameter "common" that
2422          can be used to bundle only the common part, .e.g help-specific icons.
2423          This is useful when you build the helpcontent separately.])
2424     [
2425                           Usage:     --with-help    build the old local help
2426                                  --without-help     no local help (default)
2427                                  --with-help=html   build the new HTML local help
2428                                  --with-help=online build the new HTML online help
2429     ],
2432 AC_ARG_WITH(omindex,
2433    AS_HELP_STRING([--with-omindex],
2434         [Enable the support of xapian-omega index for online help.])
2435    [
2436                          Usage: --with-omindex=server prepare the pages for omindex
2437                                 but let xapian-omega be built in server.
2438                                 --with-omindex=noxap do not prepare online pages
2439                                 for xapian-omega
2440   ],
2443 libo_FUZZ_ARG_WITH(java,
2444     AS_HELP_STRING([--with-java=<java command>],
2445         [Specify the name of the Java interpreter command. Typically "java"
2446          which is the default.
2448          To build without support for Java components, applets, accessibility
2449          or the XML filters written in Java, use --without-java or --with-java=no.]),
2450     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ],
2451     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ]
2454 AC_ARG_WITH(jvm-path,
2455     AS_HELP_STRING([--with-jvm-path=<absolute path to parent of jvm home>],
2456         [Use a specific JVM search path at runtime.
2457          e.g. use --with-jvm-path=/usr/lib/ to find JRE/JDK in /usr/lib/jvm/]),
2460 AC_ARG_WITH(ant-home,
2461     AS_HELP_STRING([--with-ant-home=<absolute path to Ant home>],
2462         [If you have installed Apache Ant on your system, please supply the path here.
2463          Note that this is not the location of the Ant binary but the location
2464          of the entire distribution.]),
2467 AC_ARG_WITH(symbol-config,
2468     AS_HELP_STRING([--with-symbol-config],
2469         [Configuration for the crashreport symbol upload]),
2470         [],
2471         [with_symbol_config=no])
2473 AC_ARG_WITH(export-validation,
2474     AS_HELP_STRING([--without-export-validation],
2475         [Disable validating OOXML and ODF files as exported from in-tree tests.]),
2476 ,with_export_validation=auto)
2478 AC_ARG_WITH(bffvalidator,
2479     AS_HELP_STRING([--with-bffvalidator=<absolute path to BFFValidator>],
2480         [Enables export validation for Microsoft Binary formats (doc, xls, ppt).
2481          Requires installed Microsoft Office Binary File Format Validator.
2482          Note: export-validation (--with-export-validation) is required to be turned on.
2483          See https://www.microsoft.com/en-us/download/details.aspx?id=26794]),
2484 ,with_bffvalidator=no)
2486 libo_FUZZ_ARG_WITH(junit,
2487     AS_HELP_STRING([--with-junit=<absolute path to JUnit 4 jar>],
2488         [Specifies the JUnit 4 jar file to use for JUnit-based tests.
2489          --without-junit disables those tests. Not relevant in the --without-java case.]),
2490 ,with_junit=yes)
2492 AC_ARG_WITH(hamcrest,
2493     AS_HELP_STRING([--with-hamcrest=<absolute path to hamcrest jar>],
2494         [Specifies the hamcrest jar file to use for JUnit-based tests.
2495          --without-junit disables those tests. Not relevant in the --without-java case.]),
2496 ,with_hamcrest=yes)
2498 AC_ARG_WITH(perl-home,
2499     AS_HELP_STRING([--with-perl-home=<abs. path to Perl 5 home>],
2500         [If you have installed Perl 5 Distribution, on your system, please
2501          supply the path here. Note that this is not the location of the Perl
2502          binary but the location of the entire distribution.]),
2505 libo_FUZZ_ARG_WITH(doxygen,
2506     AS_HELP_STRING(
2507         [--with-doxygen=<absolute path to doxygen executable>],
2508         [Specifies the doxygen executable to use when generating ODK C/C++
2509          documentation. --without-doxygen disables generation of ODK C/C++
2510          documentation. Not relevant in the --disable-odk case.]),
2511 ,with_doxygen=yes)
2513 AC_ARG_WITH(visual-studio,
2514     AS_HELP_STRING([--with-visual-studio=<2019/2022>],
2515         [Specify which Visual Studio version to use in case several are
2516          installed. Currently 2019 (default) and 2022 are supported.]),
2519 AC_ARG_WITH(windows-sdk,
2520     AS_HELP_STRING([--with-windows-sdk=<8.0(A)/8.1(A)/10.0>],
2521         [Specify which Windows SDK, or "Windows Kit", version to use
2522          in case the one that came with the selected Visual Studio
2523          is not what you want for some reason. Note that not all compiler/SDK
2524          combinations are supported. The intent is that this option should not
2525          be needed.]),
2528 AC_ARG_WITH(lang,
2529     AS_HELP_STRING([--with-lang="es sw tu cs sk"],
2530         [Use this option to build LibreOffice with additional UI language support.
2531          English (US) is always included by default.
2532          Separate multiple languages with space.
2533          For all languages, use --with-lang=ALL.]),
2536 AC_ARG_WITH(locales,
2537     AS_HELP_STRING([--with-locales="en es pt fr zh kr ja"],
2538         [Use this option to limit the locale information built in.
2539          Separate multiple locales with space.
2540          Very experimental and might well break stuff.
2541          Just a desperate measure to shrink code and data size.
2542          By default all the locales available is included.
2543          This option is completely unrelated to --with-lang.])
2544     [
2545                           Affects also our character encoding conversion
2546                           tables for encodings mainly targeted for a
2547                           particular locale, like EUC-CN and EUC-TW for
2548                           zh, ISO-2022-JP for ja.
2550                           Affects also our add-on break iterator data for
2551                           some languages.
2553                           For the default, all locales, don't use this switch at all.
2554                           Specifying just the language part of a locale means all matching
2555                           locales will be included.
2556     ],
2559 # Kerberos and GSSAPI used only by PostgreSQL as of LibO 3.5
2560 libo_FUZZ_ARG_WITH(krb5,
2561     AS_HELP_STRING([--with-krb5],
2562         [Enable MIT Kerberos 5 support in modules that support it.
2563          By default automatically enabled on platforms
2564          where a good system Kerberos 5 is available.]),
2567 libo_FUZZ_ARG_WITH(gssapi,
2568     AS_HELP_STRING([--with-gssapi],
2569         [Enable GSSAPI support in modules that support it.
2570          By default automatically enabled on platforms
2571          where a good system GSSAPI is available.]),
2574 AC_ARG_WITH(iwyu,
2575     AS_HELP_STRING([--with-iwyu],
2576         [Use given IWYU binary path to check unneeded includes instead of building.
2577          Use only if you are hacking on it.]),
2580 libo_FUZZ_ARG_WITH(lxml,
2581     AS_HELP_STRING([--without-lxml],
2582         [gla11y will use python lxml when available, potentially building a local copy if necessary.
2583          --without-lxml tells it to not use python lxml at all, which means that gla11y will only
2584          report widget classes and ids.]),
2587 libo_FUZZ_ARG_WITH(latest-c++,
2588     AS_HELP_STRING([--with-latest-c++],
2589         [Try to enable the latest features of the C++ compiler, even if they are not yet part of a
2590          published standard.]),,
2591         [with_latest_c__=no])
2593 dnl ===================================================================
2594 dnl Branding
2595 dnl ===================================================================
2597 AC_ARG_WITH(branding,
2598     AS_HELP_STRING([--with-branding=/path/to/images],
2599         [Use given path to retrieve branding images set.])
2600     [
2601                           Search for intro.png about.svg and logo.svg.
2602                           If any is missing, default ones will be used instead.
2604                           Search also progress.conf for progress
2605                           settings on intro screen :
2607                           PROGRESSBARCOLOR="255,255,255" Set color of
2608                           progress bar. Comma separated RGB decimal values.
2609                           PROGRESSSIZE="407,6" Set size of progress bar.
2610                           Comma separated decimal values (width, height).
2611                           PROGRESSPOSITION="61,317" Set position of progress
2612                           bar from left,top. Comma separated decimal values.
2613                           PROGRESSFRAMECOLOR="20,136,3" Set color of progress
2614                           bar frame. Comma separated RGB decimal values.
2615                           PROGRESSTEXTCOLOR="0,0,0" Set color of progress
2616                           bar text. Comma separated RGB decimal values.
2617                           PROGRESSTEXTBASELINE="287" Set vertical position of
2618                           progress bar text from top. Decimal value.
2620                           Default values will be used if not found.
2621     ],
2625 AC_ARG_WITH(extra-buildid,
2626     AS_HELP_STRING([--with-extra-buildid="Tinderbox: Win-x86@6, Branch:master, Date:2012-11-26_00.29.34"],
2627         [Show addition build identification in about dialog.]),
2631 AC_ARG_WITH(vendor,
2632     AS_HELP_STRING([--with-vendor="John the Builder"],
2633         [Set vendor of the build.]),
2636 AC_ARG_WITH(privacy-policy-url,
2637     AS_HELP_STRING([--with-privacy-policy-url="https://yourdomain/privacy-policy"],
2638         [The URL to your privacy policy (needed when
2639          enabling online-update or crashreporting via breakpad)]),
2640         [if test "x$with_privacy_policy_url" = "xyes"; then
2641             AC_MSG_FAILURE([you need to specify an argument when using --with-privacy-policy-url])
2642          elif test "x$with_privacy_policy_url" = "xno"; then
2643             with_privacy_policy_url="undefined"
2644          fi]
2645 ,[with_privacy_policy_url="undefined"])
2647 AC_ARG_WITH(android-package-name,
2648     AS_HELP_STRING([--with-android-package-name="org.libreoffice"],
2649         [Set Android package name of the build.]),
2652 AC_ARG_WITH(compat-oowrappers,
2653     AS_HELP_STRING([--with-compat-oowrappers],
2654         [Install oo* wrappers in parallel with
2655          lo* ones to keep backward compatibility.
2656          Has effect only with make distro-pack-install]),
2659 AC_ARG_WITH(os-version,
2660     AS_HELP_STRING([--with-os-version=<OSVERSION>],
2661         [For FreeBSD users, use this option to override the detected OSVERSION.]),
2664 AC_ARG_WITH(idlc-cpp,
2665     AS_HELP_STRING([--with-idlc-cpp=<cpp/ucpp>],
2666         [Specify the C Preprocessor to use for idlc. Default is ucpp.]),
2669 AC_ARG_WITH(parallelism,
2670     AS_HELP_STRING([--with-parallelism],
2671         [Number of jobs to run simultaneously during build. Parallel builds can
2672         save a lot of time on multi-cpu machines. Defaults to the number of
2673         CPUs on the machine, unless you configure --enable-icecream - then to
2674         40.]),
2677 AC_ARG_WITH(all-tarballs,
2678     AS_HELP_STRING([--with-all-tarballs],
2679         [Download all external tarballs unconditionally]))
2681 AC_ARG_WITH(gdrive-client-id,
2682     AS_HELP_STRING([--with-gdrive-client-id],
2683         [Provides the client id of the application for OAuth2 authentication
2684         on Google Drive. If either this or --with-gdrive-client-secret is
2685         empty, the feature will be disabled]),
2688 AC_ARG_WITH(gdrive-client-secret,
2689     AS_HELP_STRING([--with-gdrive-client-secret],
2690         [Provides the client secret of the application for OAuth2
2691         authentication on Google Drive. If either this or
2692         --with-gdrive-client-id is empty, the feature will be disabled]),
2695 AC_ARG_WITH(alfresco-cloud-client-id,
2696     AS_HELP_STRING([--with-alfresco-cloud-client-id],
2697         [Provides the client id of the application for OAuth2 authentication
2698         on Alfresco Cloud. If either this or --with-alfresco-cloud-client-secret is
2699         empty, the feature will be disabled]),
2702 AC_ARG_WITH(alfresco-cloud-client-secret,
2703     AS_HELP_STRING([--with-alfresco-cloud-client-secret],
2704         [Provides the client secret of the application for OAuth2
2705         authentication on Alfresco Cloud. If either this or
2706         --with-alfresco-cloud-client-id is empty, the feature will be disabled]),
2709 AC_ARG_WITH(onedrive-client-id,
2710     AS_HELP_STRING([--with-onedrive-client-id],
2711         [Provides the client id of the application for OAuth2 authentication
2712         on OneDrive. If either this or --with-onedrive-client-secret is
2713         empty, the feature will be disabled]),
2716 AC_ARG_WITH(onedrive-client-secret,
2717     AS_HELP_STRING([--with-onedrive-client-secret],
2718         [Provides the client secret of the application for OAuth2
2719         authentication on OneDrive. If either this or
2720         --with-onedrive-client-id is empty, the feature will be disabled]),
2722 dnl ===================================================================
2723 dnl Do we want to use pre-build binary tarball for recompile
2724 dnl ===================================================================
2726 if test "$enable_library_bin_tar" = "yes" ; then
2727     USE_LIBRARY_BIN_TAR=TRUE
2728 else
2729     USE_LIBRARY_BIN_TAR=
2731 AC_SUBST(USE_LIBRARY_BIN_TAR)
2733 dnl ===================================================================
2734 dnl Test whether build target is Release Build
2735 dnl ===================================================================
2736 AC_MSG_CHECKING([whether build target is Release Build])
2737 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
2738     AC_MSG_RESULT([no])
2739     ENABLE_RELEASE_BUILD=
2740     GET_TASK_ALLOW_ENTITLEMENT='
2741         <!-- We want to be able to debug a hardened process when not building for release -->
2742         <key>com.apple.security.get-task-allow</key>
2743         <true/>'
2744 else
2745     AC_MSG_RESULT([yes])
2746     ENABLE_RELEASE_BUILD=TRUE
2747     GET_TASK_ALLOW_ENTITLEMENT=''
2749 AC_SUBST(ENABLE_RELEASE_BUILD)
2750 AC_SUBST(GET_TASK_ALLOW_ENTITLEMENT)
2752 AC_MSG_CHECKING([whether to build a Community flavor])
2753 if test -z "$enable_community_flavor" -o "$enable_community_flavor" = "yes"; then
2754     AC_DEFINE(HAVE_FEATURE_COMMUNITY_FLAVOR)
2755     AC_MSG_RESULT([yes])
2756 else
2757     AC_MSG_RESULT([no])
2760 dnl ===================================================================
2761 dnl Test whether to sign Windows Build
2762 dnl ===================================================================
2763 AC_MSG_CHECKING([whether to sign windows build])
2764 if test "$enable_windows_build_signing" = "yes" -a "$_os" = "WINNT"; then
2765     AC_MSG_RESULT([yes])
2766     WINDOWS_BUILD_SIGNING="TRUE"
2767 else
2768     AC_MSG_RESULT([no])
2769     WINDOWS_BUILD_SIGNING="FALSE"
2771 AC_SUBST(WINDOWS_BUILD_SIGNING)
2773 dnl ===================================================================
2774 dnl MacOSX build and runtime environment options
2775 dnl ===================================================================
2777 AC_ARG_WITH(macosx-sdk,
2778     AS_HELP_STRING([--with-macosx-sdk=<version>],
2779         [Prefer a specific SDK for building.])
2780     [
2781                           If the requested SDK is not available, a search for the oldest one will be done.
2782                           With current Xcode versions, only the latest SDK is included, so this option is
2783                           not terribly useful. It works fine to build with a new SDK and run the result
2784                           on an older OS.
2786                           e. g.: --with-macosx-sdk=10.10
2788                           there are 3 options to control the MacOSX build:
2789                           --with-macosx-sdk (referred as 'sdk' below)
2790                           --with-macosx-version-min-required (referred as 'min' below)
2791                           --with-macosx-version-max-allowed (referred as 'max' below)
2793                           the connection between these value and the default they take is as follow:
2794                           ( ? means not specified on the command line, s means the SDK version found,
2795                           constraint: 8 <= x <= y <= z)
2797                           ==========================================
2798                            command line      || config result
2799                           ==========================================
2800                           min  | max  | sdk  || min   | max  | sdk  |
2801                           ?    | ?    | ?    || 10.10 | 10.s | 10.s |
2802                           ?    | ?    | 10.x || 10.10 | 10.x | 10.x |
2803                           ?    | 10.x | ?    || 10.10 | 10.s | 10.s |
2804                           ?    | 10.x | 10.y || 10.10 | 10.x | 10.y |
2805                           10.x | ?    | ?    || 10.x  | 10.s | 10.s |
2806                           10.x | ?    | 10.y || 10.x  | 10.y | 10.y |
2807                           10.x | 10.y | ?    || 10.x  | 10.y | 10.y |
2808                           10.x | 10.y | 10.z || 10.x  | 10.y | 10.z |
2811                           see: http://developer.apple.com/library/mac/#technotes/tn2064/_index.html
2812                           for a detailed technical explanation of these variables
2814                           Note: MACOSX_DEPLOYMENT_TARGET will be set to the value of 'min'.
2815     ],
2818 AC_ARG_WITH(macosx-version-min-required,
2819     AS_HELP_STRING([--with-macosx-version-min-required=<version>],
2820         [set the minimum OS version needed to run the built LibreOffice])
2821     [
2822                           e. g.: --with-macosx-version-min-required=10.10
2823                           see --with-macosx-sdk for more info
2824     ],
2827 AC_ARG_WITH(macosx-version-max-allowed,
2828     AS_HELP_STRING([--with-macosx-version-max-allowed=<version>],
2829         [set the maximum allowed OS version the LibreOffice compilation can use APIs from])
2830     [
2831                           e. g.: --with-macosx-version-max-allowed=10.10
2832                           see --with-macosx-sdk for more info
2833     ],
2837 dnl ===================================================================
2838 dnl options for stuff used during cross-compilation build
2839 dnl Not quite superseded by --with-build-platform-configure-options.
2840 dnl TODO: check, if the "force" option is still needed anywhere.
2841 dnl ===================================================================
2843 AC_ARG_WITH(system-icu-for-build,
2844     AS_HELP_STRING([--with-system-icu-for-build=yes/no/force],
2845         [Use icu already on system for build tools (cross-compilation only).]))
2848 dnl ===================================================================
2849 dnl Check for incompatible options set by fuzzing, and reset those
2850 dnl automatically to working combinations
2851 dnl ===================================================================
2853 if test "$libo_fuzzed_enable_dbus" = yes -a "$libo_fuzzed_enable_avahi" -a \
2854         "$enable_dbus" != "$enable_avahi"; then
2855     AC_MSG_NOTICE([Resetting --enable-avahi=$enable_dbus])
2856     enable_avahi=$enable_dbus
2859 add_lopath_after ()
2861     if ! echo "$LO_PATH" | $EGREP -q "(^|${P_SEP})$1($|${P_SEP})"; then
2862         LO_PATH="${LO_PATH:+$LO_PATH$P_SEP}$1"
2863     fi
2866 add_lopath_before ()
2868     local IFS=${P_SEP}
2869     local path_cleanup
2870     local dir
2871     for dir in $LO_PATH ; do
2872         if test "$dir" != "$1" ; then
2873             path_cleanup=${path_cleanup:+$path_cleanup$P_SEP}$dir
2874         fi
2875     done
2876     LO_PATH="$1${path_cleanup:+$P_SEP$path_cleanup}"
2879 dnl ===================================================================
2880 dnl check for required programs (grep, awk, sed, bash)
2881 dnl ===================================================================
2883 pathmunge ()
2885     local new_path
2886     if test -n "$1"; then
2887         if test "$build_os" = "cygwin"; then
2888             if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
2889                 PathFormat "$1"
2890                 new_path=`cygpath -sm "$formatted_path"`
2891             else
2892                 PathFormat "$1"
2893                 new_path=`cygpath -u "$formatted_path"`
2894             fi
2895         else
2896             new_path="$1"
2897         fi
2898         if test "$2" = "after"; then
2899             add_lopath_after "$new_path"
2900         else
2901             add_lopath_before "$new_path"
2902         fi
2903     fi
2906 AC_PROG_AWK
2907 AC_PATH_PROG( AWK, $AWK)
2908 if test -z "$AWK"; then
2909     AC_MSG_ERROR([install awk to run this script])
2912 AC_PATH_PROG(BASH, bash)
2913 if test -z "$BASH"; then
2914     AC_MSG_ERROR([bash not found in \$PATH])
2916 AC_SUBST(BASH)
2918 AC_MSG_CHECKING([for GNU or BSD tar])
2919 for a in $GNUTAR gtar gnutar bsdtar tar /usr/sfw/bin/gtar; do
2920     $a --version 2> /dev/null | egrep "GNU|bsdtar"  2>&1 > /dev/null
2921     if test $? -eq 0;  then
2922         GNUTAR=$a
2923         break
2924     fi
2925 done
2926 AC_MSG_RESULT($GNUTAR)
2927 if test -z "$GNUTAR"; then
2928     AC_MSG_ERROR([not found. install GNU or BSD tar.])
2930 AC_SUBST(GNUTAR)
2932 AC_MSG_CHECKING([for tar's option to strip components])
2933 $GNUTAR --help 2> /dev/null | egrep "bsdtar|strip-components" 2>&1 >/dev/null
2934 if test $? -eq 0; then
2935     STRIP_COMPONENTS="--strip-components"
2936 else
2937     $GNUTAR --help 2> /dev/null | egrep "strip-path" 2>&1 >/dev/null
2938     if test $? -eq 0; then
2939         STRIP_COMPONENTS="--strip-path"
2940     else
2941         STRIP_COMPONENTS="unsupported"
2942     fi
2944 AC_MSG_RESULT($STRIP_COMPONENTS)
2945 if test x$STRIP_COMPONENTS = xunsupported; then
2946     AC_MSG_ERROR([you need a tar that is able to strip components.])
2948 AC_SUBST(STRIP_COMPONENTS)
2950 dnl It is useful to have a BUILD_TYPE keyword to distinguish "normal"
2951 dnl desktop OSes from "mobile" ones.
2953 dnl We assume that a non-DESKTOP build type is also a non-NATIVE one.
2954 dnl In other words, that when building for an OS that is not a
2955 dnl "desktop" one but a "mobile" one, we are always cross-compiling.
2957 dnl Note the direction of the implication; there is no assumption that
2958 dnl cross-compiling would imply a non-desktop OS.
2960 if test $_os != iOS -a $_os != Android -a $_os != Emscripten -a "$enable_fuzzers" != "yes"; then
2961     BUILD_TYPE="$BUILD_TYPE DESKTOP"
2962     AC_DEFINE(HAVE_FEATURE_DESKTOP)
2963     AC_DEFINE(HAVE_FEATURE_MULTIUSER_ENVIRONMENT)
2966 # Whether to build "avmedia" functionality or not.
2968 if test -z "$enable_avmedia"; then
2969     enable_avmedia=yes
2972 BUILD_TYPE="$BUILD_TYPE AVMEDIA"
2973 if test "$enable_avmedia" = yes; then
2974     AC_DEFINE(HAVE_FEATURE_AVMEDIA)
2975 else
2976     USE_AVMEDIA_DUMMY='TRUE'
2978 AC_SUBST(USE_AVMEDIA_DUMMY)
2980 # Decide whether to build database connectivity stuff (including Base) or not.
2981 if test "$enable_database_connectivity" != no; then
2982     BUILD_TYPE="$BUILD_TYPE DBCONNECTIVITY"
2983     AC_DEFINE(HAVE_FEATURE_DBCONNECTIVITY)
2984 else
2985     if test "$_os" = iOS; then
2986         AC_MSG_ERROR([Presumly can't disable DB connectivity on iOS.])
2987     fi
2988     disable_database_connectivity_dependencies
2991 if test -z "$enable_extensions"; then
2992     # For iOS and Android Viewer, disable extensions unless specifically overridden with --enable-extensions.
2993     if test $_os != iOS && test $_os != Android -o "$ENABLE_ANDROID_LOK" = TRUE ; then
2994         enable_extensions=yes
2995     fi
2998 if test "$enable_extensions" = yes; then
2999     BUILD_TYPE="$BUILD_TYPE EXTENSIONS"
3000     AC_DEFINE(HAVE_FEATURE_EXTENSIONS)
3001 else
3002     enable_extension_integration=no
3003     enable_extension_update=no
3006 if test -z "$enable_scripting"; then
3007     # Disable scripting for iOS unless specifically overridden
3008     # with --enable-scripting.
3009     if test $_os != iOS -o $_os = Emscripten; then
3010         enable_scripting=yes
3011     fi
3014 DISABLE_SCRIPTING=''
3015 if test "$enable_scripting" = yes; then
3016     BUILD_TYPE="$BUILD_TYPE SCRIPTING"
3017     AC_DEFINE(HAVE_FEATURE_SCRIPTING)
3018 else
3019     DISABLE_SCRIPTING='TRUE'
3020     SCPDEFS="$SCPDEFS -DDISABLE_SCRIPTING"
3023 if test $_os = iOS -o $_os = Android -o $_os = Emscripten; then
3024     # Disable dynamic_loading always for iOS and Android
3025     enable_dynamic_loading=no
3026 elif test -z "$enable_dynamic_loading"; then
3027     # Otherwise enable it unless specifically disabled
3028     enable_dynamic_loading=yes
3031 DISABLE_DYNLOADING=''
3032 if test "$enable_dynamic_loading" = yes; then
3033     BUILD_TYPE="$BUILD_TYPE DYNLOADING"
3034 else
3035     DISABLE_DYNLOADING='TRUE'
3037 AC_SUBST(DISABLE_DYNLOADING)
3039 # remember SYSBASE value
3040 AC_SUBST(SYSBASE)
3042 dnl ===================================================================
3043 dnl  Sort out various gallery compilation options
3044 dnl ===================================================================
3045 WITH_GALLERY_BUILD=TRUE
3046 AC_MSG_CHECKING([how to build and package galleries])
3047 if test -n "${with_galleries}"; then
3048     if test "$with_galleries" = "build"; then
3049         if test "$enable_database_connectivity" = no; then
3050             AC_MSG_ERROR([DB connectivity is needed for gengal / svx])
3051         fi
3052         AC_MSG_RESULT([build from source images internally])
3053     elif test "$with_galleries" = "no"; then
3054         WITH_GALLERY_BUILD=
3055         AC_MSG_RESULT([disable non-internal gallery build])
3056     else
3057         AC_MSG_ERROR([unknown value --with-galleries=$with_galleries])
3058     fi
3059 else
3060     if test $_os != iOS -a $_os != Android; then
3061         AC_MSG_RESULT([internal src images for desktop])
3062     else
3063         WITH_GALLERY_BUILD=
3064         AC_MSG_RESULT([disable src image build])
3065     fi
3067 AC_SUBST(WITH_GALLERY_BUILD)
3069 dnl ===================================================================
3070 dnl  Checks if ccache is available
3071 dnl ===================================================================
3072 CCACHE_DEPEND_MODE=
3073 if test "$enable_ccache" = "no"; then
3074     CCACHE=""
3075 elif test "$_os" = "WINNT"; then
3076     # on windows/VC build do not use ccache - but perhaps sccache is around?
3077     case "%$CC%$CXX%" in
3078     # If $CC and/or $CXX already contain "sccache" (possibly suffixed with some version number etc),
3079     # assume that's good then
3080     *%sccache[[-_' ']]*|*/sccache[[-_' ']]*)
3081         AC_MSG_NOTICE([sccache seems to be included in a pre-defined CC and/or CXX])
3082         CCACHE_DEPEND_MODE=1
3083         ;;
3084     *)
3085         # for sharing code below, reuse CCACHE env var
3086         AC_PATH_PROG([CCACHE],[sccache],[not found])
3087         if test "$CCACHE" = "not found"; then
3088             CCACHE=""
3089         else
3090             CCACHE=`win_short_path_for_make "$CCACHE"`
3091             CCACHE_DEPEND_MODE=1
3092         fi
3093         ;;
3094     esac
3095 elif test -n "$enable_ccache" -o \( "$enable_ccache" = "" -a "$enable_icecream" != "yes" \); then
3096     case "%$CC%$CXX%" in
3097     # If $CC and/or $CXX already contain "ccache" (possibly suffixed with some version number etc),
3098     # assume that's good then
3099     *%ccache[[-_' ']]*|*/ccache[[-_' ']]*)
3100         AC_MSG_NOTICE([ccache seems to be included in a pre-defined CC and/or CXX])
3101         CCACHE_DEPEND_MODE=1
3102         ;;
3103     *)
3104         AC_PATH_PROG([CCACHE],[ccache],[not found])
3105         if test "$CCACHE" = "not found"; then
3106             CCACHE=""
3107         else
3108             CCACHE_DEPEND_MODE=1
3109             # Need to check for ccache version: otherwise prevents
3110             # caching of the results (like "-x objective-c++" for Mac)
3111             if test $_os = Darwin -o $_os = iOS; then
3112                 # Check ccache version
3113                 AC_MSG_CHECKING([whether version of ccache is suitable])
3114                 CCACHE_VERSION=`"$CCACHE" -V | "$AWK" '/^ccache version/{print $3}'`
3115                 CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
3116                 if test "$CCACHE_VERSION" = "2.4_OOo" -o "$CCACHE_NUMVER" -ge "030100"; then
3117                     AC_MSG_RESULT([yes, $CCACHE_VERSION])
3118                 else
3119                     AC_MSG_RESULT([no, $CCACHE_VERSION])
3120                     CCACHE=""
3121                     CCACHE_DEPEND_MODE=
3122                 fi
3123             fi
3124         fi
3125         ;;
3126     esac
3127 else
3128     CCACHE=""
3130 if test "$enable_ccache" = "nodepend"; then
3131     CCACHE_DEPEND_MODE=""
3133 AC_SUBST(CCACHE_DEPEND_MODE)
3135 # skip on windows - sccache defaults are good enough
3136 if test "$CCACHE" != "" -a "$_os" != "WINNT"; then
3137     # e.g. (/home/rene/.config/ccache/ccache.conf) max_size = 20.0G
3138     # -p works with both 4.2 and 4.4
3139     ccache_size_msg=$([ccache -p | $AWK /max_size/'{ print $4 }' | sed -e 's/\.[0-9]*//'])
3140     ccache_size=$(echo "$ccache_size_msg" | grep "G" | sed -e 's/G.*$//')
3141     if test "$ccache_size" = ""; then
3142         ccache_size=$(echo "$ccache_size_msg" | grep "M" | sed -e 's/\ M.*$//')
3143         if test "$ccache_size" = ""; then
3144             ccache_size=0
3145         fi
3146         # we could not determine the size or it was less than 1GB -> disable auto-ccache
3147         if test $ccache_size -lt 1024; then
3148             CCACHE=""
3149             AC_MSG_WARN([ccache's cache size is less than 1GB using it is counter-productive: Disabling auto-ccache detection])
3150             add_warning "ccache's cache size is less than 1GB using it is counter-productive: auto-ccache detection disabled"
3151         else
3152             # warn that ccache may be too small for debug build
3153             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3154             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3155         fi
3156     else
3157         if test $ccache_size -lt 5; then
3158             #warn that ccache may be too small for debug build
3159             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3160             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3161         fi
3162     fi
3165 dnl ===================================================================
3166 dnl  Checks for C compiler,
3167 dnl  The check for the C++ compiler is later on.
3168 dnl ===================================================================
3169 if test "$_os" != "WINNT"; then
3170     GCC_HOME_SET="true"
3171     AC_MSG_CHECKING([gcc home])
3172     if test -z "$with_gcc_home"; then
3173         if test "$enable_icecream" = "yes"; then
3174             if test -d "/usr/lib/icecc/bin"; then
3175                 GCC_HOME="/usr/lib/icecc/"
3176             elif test -d "/usr/libexec/icecc/bin"; then
3177                 GCC_HOME="/usr/libexec/icecc/"
3178             elif test -d "/opt/icecream/bin"; then
3179                 GCC_HOME="/opt/icecream/"
3180             else
3181                 AC_MSG_ERROR([Could not figure out the location of icecream GCC wrappers, manually use --with-gcc-home])
3183             fi
3184         else
3185             GCC_HOME=`which gcc | $SED -e s,/bin/gcc,,`
3186             GCC_HOME_SET="false"
3187         fi
3188     else
3189         GCC_HOME="$with_gcc_home"
3190     fi
3191     AC_MSG_RESULT($GCC_HOME)
3192     AC_SUBST(GCC_HOME)
3194     if test "$GCC_HOME_SET" = "true"; then
3195         if test -z "$CC"; then
3196             CC="$GCC_HOME/bin/gcc"
3197             CC_BASE="gcc"
3198         fi
3199         if test -z "$CXX"; then
3200             CXX="$GCC_HOME/bin/g++"
3201             CXX_BASE="g++"
3202         fi
3203     fi
3206 COMPATH=`dirname "$CC"`
3207 if test "$COMPATH" = "."; then
3208     AC_PATH_PROGS(COMPATH, $CC)
3209     dnl double square bracket to get single because of M4 quote...
3210     COMPATH=`echo $COMPATH | $SED "s@/[[^/:]]*\\\$@@"`
3212 COMPATH=`echo $COMPATH | $SED "s@/[[Bb]][[Ii]][[Nn]]\\\$@@"`
3214 dnl ===================================================================
3215 dnl Java support
3216 dnl ===================================================================
3217 AC_MSG_CHECKING([whether to build with Java support])
3218 if test "$with_java" != "no"; then
3219     if test "$DISABLE_SCRIPTING" = TRUE; then
3220         AC_MSG_RESULT([no, overridden by --disable-scripting])
3221         ENABLE_JAVA=""
3222         with_java=no
3223     else
3224         AC_MSG_RESULT([yes])
3225         ENABLE_JAVA="TRUE"
3226         AC_DEFINE(HAVE_FEATURE_JAVA)
3227     fi
3228 else
3229     AC_MSG_RESULT([no])
3230     ENABLE_JAVA=""
3233 AC_SUBST(ENABLE_JAVA)
3235 dnl ENABLE_JAVA="TRUE" if we want there to be *run-time* (and build-time) support for Java
3237 dnl ENABLE_JAVA="" indicate no Java support at all
3239 dnl ===================================================================
3240 dnl Check macOS SDK and compiler
3241 dnl ===================================================================
3243 if test $_os = Darwin; then
3245     # If no --with-macosx-sdk option is given, look for one
3247     # The intent is that for "most" Mac-based developers, a suitable
3248     # SDK will be found automatically without any configure options.
3250     # For developers with a current Xcode, the lowest-numbered SDK
3251     # higher than or equal to the minimum required should be found.
3253     AC_MSG_CHECKING([what macOS SDK to use])
3254     for _macosx_sdk in ${with_macosx_sdk-12.0 11.3 11.1 11.0 10.15 10.14 10.13}; do
3255         MACOSX_SDK_PATH=`xcrun --sdk macosx${_macosx_sdk} --show-sdk-path 2> /dev/null`
3256         if test -d "$MACOSX_SDK_PATH"; then
3257             with_macosx_sdk="${_macosx_sdk}"
3258             break
3259         else
3260             MACOSX_SDK_PATH="`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${_macosx_sdk}.sdk"
3261             if test -d "$MACOSX_SDK_PATH"; then
3262                 with_macosx_sdk="${_macosx_sdk}"
3263                 break
3264             fi
3265         fi
3266     done
3267     if test ! -d "$MACOSX_SDK_PATH"; then
3268         AC_MSG_ERROR([Could not find an appropriate macOS SDK])
3269     fi
3271     AC_MSG_RESULT([SDK $with_macosx_sdk at $MACOSX_SDK_PATH])
3273     case $with_macosx_sdk in
3274     10.13)
3275         MACOSX_SDK_VERSION=101300
3276         ;;
3277     10.14)
3278         MACOSX_SDK_VERSION=101400
3279         ;;
3280     10.15)
3281         MACOSX_SDK_VERSION=101500
3282         ;;
3283     11.0)
3284         MACOSX_SDK_VERSION=110000
3285         ;;
3286     11.1)
3287         MACOSX_SDK_VERSION=110100
3288         ;;
3289     11.3)
3290         MACOSX_SDK_VERSION=110300
3291         ;;
3292     12.0)
3293         MACOSX_SDK_VERSION=120000
3294         ;;
3295     *)
3296         AC_MSG_ERROR([with-macosx-sdk $with_macosx_sdk is not a supported value, supported values are 10.13--12.0])
3297         ;;
3298     esac
3300     if test "$host_cpu" = arm64 -a $MACOSX_SDK_VERSION -lt 110000; then
3301         AC_MSG_ERROR([with-macosx-sdk $with_macosx_sdk is not a supported value for Apple Silicon])
3302     fi
3304     if test "$with_macosx_version_min_required" = "" ; then
3305         if test "$host_cpu" = x86_64; then
3306             with_macosx_version_min_required="10.10";
3307         else
3308             with_macosx_version_min_required="11.0";
3309         fi
3310     fi
3312     if test "$with_macosx_version_max_allowed" = "" ; then
3313         with_macosx_version_max_allowed="$with_macosx_sdk"
3314     fi
3316     # export this so that "xcrun" invocations later return matching values
3317     DEVELOPER_DIR="${MACOSX_SDK_PATH%/SDKs*}"
3318     DEVELOPER_DIR="${DEVELOPER_DIR%/Platforms*}"
3319     export DEVELOPER_DIR
3320     FRAMEWORKSHOME="$MACOSX_SDK_PATH/System/Library/Frameworks"
3321     MACOSX_DEPLOYMENT_TARGET="$with_macosx_version_min_required"
3323     AC_MSG_CHECKING([whether Xcode is new enough])
3324     my_xcode_ver1=$(xcrun xcodebuild -version | head -n 1)
3325     my_xcode_ver2=${my_xcode_ver1#Xcode }
3326     my_xcode_ver3=$(printf %s "$my_xcode_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
3327     if test "$my_xcode_ver3" -ge 1103; then
3328         AC_MSG_RESULT([yes ($my_xcode_ver2)])
3329     else
3330         AC_MSG_ERROR(["$my_xcode_ver1" is too old or unrecognized, must be at least Xcode 11.3])
3331     fi
3333     case "$with_macosx_version_min_required" in
3334     10.10)
3335         MAC_OS_X_VERSION_MIN_REQUIRED="101000"
3336         ;;
3337     10.11)
3338         MAC_OS_X_VERSION_MIN_REQUIRED="101100"
3339         ;;
3340     10.12)
3341         MAC_OS_X_VERSION_MIN_REQUIRED="101200"
3342         ;;
3343     10.13)
3344         MAC_OS_X_VERSION_MIN_REQUIRED="101300"
3345         ;;
3346     10.14)
3347         MAC_OS_X_VERSION_MIN_REQUIRED="101400"
3348         ;;
3349     10.15)
3350         MAC_OS_X_VERSION_MIN_REQUIRED="101500"
3351         ;;
3352     10.16)
3353         MAC_OS_X_VERSION_MIN_REQUIRED="101600"
3354         ;;
3355     11.0)
3356         MAC_OS_X_VERSION_MIN_REQUIRED="110000"
3357         ;;
3358     11.1)
3359         MAC_OS_X_VERSION_MIN_REQUIRED="110100"
3360         ;;
3361     11.3)
3362         MAC_OS_X_VERSION_MIN_REQUIRED="110300"
3363         ;;
3364     12.0)
3365         MAC_OS_X_VERSION_MIN_REQUIRED="120000"
3366         ;;
3367     *)
3368         AC_MSG_ERROR([with-macosx-version-min-required $with_macosx_version_min_required is not a supported value, supported values are 10.10--12.0])
3369         ;;
3370     esac
3372     LIBTOOL=/usr/bin/libtool
3373     INSTALL_NAME_TOOL=install_name_tool
3374     if test -z "$save_CC"; then
3375         stdlib=-stdlib=libc++
3377         AC_MSG_CHECKING([what C compiler to use])
3378         CC="`xcrun -find clang`"
3379         CC_BASE=`first_arg_basename "$CC"`
3380         if test "$host_cpu" = x86_64; then
3381             CC+=" -target x86_64-apple-macos"
3382         else
3383             CC+=" -target arm64-apple-macos"
3384         fi
3385         CC+=" -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3386         AC_MSG_RESULT([$CC])
3388         AC_MSG_CHECKING([what C++ compiler to use])
3389         CXX="`xcrun -find clang++`"
3390         CXX_BASE=`first_arg_basename "$CXX"`
3391         if test "$host_cpu" = x86_64; then
3392             CXX+=" -target x86_64-apple-macos"
3393         else
3394             CXX+=" -target arm64-apple-macos"
3395         fi
3396         CXX+=" $stdlib -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3397         AC_MSG_RESULT([$CXX])
3399         INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3400         AR=`xcrun -find ar`
3401         NM=`xcrun -find nm`
3402         STRIP=`xcrun -find strip`
3403         LIBTOOL=`xcrun -find libtool`
3404         RANLIB=`xcrun -find ranlib`
3405     fi
3407     case "$with_macosx_version_max_allowed" in
3408     10.10)
3409         MAC_OS_X_VERSION_MAX_ALLOWED="101000"
3410         ;;
3411     10.11)
3412         MAC_OS_X_VERSION_MAX_ALLOWED="101100"
3413         ;;
3414     10.12)
3415         MAC_OS_X_VERSION_MAX_ALLOWED="101200"
3416         ;;
3417     10.13)
3418         MAC_OS_X_VERSION_MAX_ALLOWED="101300"
3419         ;;
3420     10.14)
3421         MAC_OS_X_VERSION_MAX_ALLOWED="101400"
3422         ;;
3423     10.15)
3424         MAC_OS_X_VERSION_MAX_ALLOWED="101500"
3425         ;;
3426     11.0)
3427         MAC_OS_X_VERSION_MAX_ALLOWED="110000"
3428         ;;
3429     11.1)
3430         MAC_OS_X_VERSION_MAX_ALLOWED="110100"
3431         ;;
3432     11.3)
3433         MAC_OS_X_VERSION_MAX_ALLOWED="110300"
3434         ;;
3435     12.0)
3436         MAC_OS_X_VERSION_MAX_ALLOWED="120000"
3437         ;;
3438     *)
3439         AC_MSG_ERROR([with-macosx-version-max-allowed $with_macosx_version_max_allowed is not a supported value, supported values are 10.10--12.0])
3440         ;;
3441     esac
3443     AC_MSG_CHECKING([that macosx-version-min-required is coherent with macosx-version-max-allowed])
3444     if test $MAC_OS_X_VERSION_MIN_REQUIRED -gt $MAC_OS_X_VERSION_MAX_ALLOWED; then
3445         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])
3446     else
3447         AC_MSG_RESULT([ok])
3448     fi
3450     AC_MSG_CHECKING([that macosx-version-max-allowed is coherent with macos-with-sdk])
3451     if test $MAC_OS_X_VERSION_MAX_ALLOWED -gt $MACOSX_SDK_VERSION; then
3452         AC_MSG_ERROR([the version maximum allowed cannot be greater than the sdk level])
3453     else
3454         AC_MSG_RESULT([ok])
3455     fi
3456     AC_MSG_NOTICE([MAC_OS_X_VERSION_MIN_REQUIRED=$MAC_OS_X_VERSION_MIN_REQUIRED])
3457     AC_MSG_NOTICE([MAC_OS_X_VERSION_MAX_ALLOWED=$MAC_OS_X_VERSION_MAX_ALLOWED])
3459     AC_MSG_CHECKING([whether to do code signing])
3461     if test "$enable_macosx_code_signing" = yes; then
3462         # By default use the first suitable certificate (?).
3464         # http://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3465         # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3466         # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3467         # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3468         # "Developer ID Application" one.
3470         identity=`security find-identity -p codesigning -v 2>/dev/null | grep 'Developer ID Application:' | $AWK '{print $2}' |head -1`
3471         if test -n "$identity"; then
3472             MACOSX_CODESIGNING_IDENTITY=$identity
3473             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3474             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3475         else
3476             AC_MSG_ERROR([cannot determine identity to use])
3477         fi
3478     elif test -n "$enable_macosx_code_signing" -a "$enable_macosx_code_signing" != no ; then
3479         MACOSX_CODESIGNING_IDENTITY=$enable_macosx_code_signing
3480         pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3481         AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3482     else
3483         AC_MSG_RESULT([no])
3484     fi
3486     AC_MSG_CHECKING([whether to create a Mac App Store package])
3488     if test -z "$enable_macosx_package_signing" || test "$enable_macosx_package_signing" == no; then
3489         AC_MSG_RESULT([no])
3490     elif test -z "$MACOSX_CODESIGNING_IDENTITY"; then
3491         AC_MSG_ERROR([You forgot --enable-macosx-code-signing])
3492     elif test "$enable_macosx_package_signing" = yes; then
3493         # By default use the first suitable certificate.
3494         # It should be a "3rd Party Mac Developer Installer" one
3496         identity=`security find-identity -v 2>/dev/null | grep '3rd Party Mac Developer Installer:' | awk '{print $2}' |head -1`
3497         if test -n "$identity"; then
3498             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3499             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3500             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3501         else
3502             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3503         fi
3504     else
3505         MACOSX_PACKAGE_SIGNING_IDENTITY=$enable_macosx_package_signing
3506         pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3507         AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3508     fi
3510     if test -n "$MACOSX_CODESIGNING_IDENTITY" -a -n "$MACOSX_PACKAGE_SIGNING_IDENTITY" -a "$MACOSX_CODESIGNING_IDENTITY" = "$MACOSX_PACKAGE_SIGNING_IDENTITY"; then
3511         AC_MSG_ERROR([You should not use the same identity for code and package signing])
3512     fi
3514     AC_MSG_CHECKING([whether to sandbox the application])
3516     if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then
3517         AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java])
3518     elif test "$enable_macosx_sandbox" = yes; then
3519         ENABLE_MACOSX_SANDBOX=TRUE
3520         AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX)
3521         AC_MSG_RESULT([yes])
3522     else
3523         AC_MSG_RESULT([no])
3524     fi
3526     AC_MSG_CHECKING([what macOS app bundle identifier to use])
3527     MACOSX_BUNDLE_IDENTIFIER=$with_macosx_bundle_identifier
3528     AC_MSG_RESULT([$MACOSX_BUNDLE_IDENTIFIER])
3530 AC_SUBST(MACOSX_SDK_PATH)
3531 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3532 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3533 AC_SUBST(MAC_OS_X_VERSION_MAX_ALLOWED)
3534 AC_SUBST(INSTALL_NAME_TOOL)
3535 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3536 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3537 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3538 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3539 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3541 dnl ===================================================================
3542 dnl Check iOS SDK and compiler
3543 dnl ===================================================================
3545 if test $_os = iOS; then
3546     AC_MSG_CHECKING([what iOS SDK to use])
3547     current_sdk_ver=15.0
3548     older_sdk_vers="14.5"
3549     if test "$enable_ios_simulator" = "yes"; then
3550         platform=iPhoneSimulator
3551         versionmin=-mios-simulator-version-min=13.6
3552     else
3553         platform=iPhoneOS
3554         versionmin=-miphoneos-version-min=13.6
3555     fi
3556     xcode_developer=`xcode-select -print-path`
3558     for sdkver in $current_sdk_ver $older_sdk_vers; do
3559         t=$xcode_developer/Platforms/$platform.platform/Developer/SDKs/$platform$sdkver.sdk
3560         if test -d $t; then
3561             sysroot=$t
3562             break
3563         fi
3564     done
3566     if test -z "$sysroot"; then
3567         AC_MSG_ERROR([Could not find iOS SDK, expected something like $xcode_developer/Platforms/$platform.platform/Developer/SDKs/${platform}${current_sdk_ver}.sdk])
3568     fi
3570     AC_MSG_RESULT($sysroot)
3572     stdlib="-stdlib=libc++"
3574     AC_MSG_CHECKING([what C compiler to use])
3575     CC="`xcrun -find clang`"
3576     CC_BASE=`first_arg_basename "$CC"`
3577     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3578     AC_MSG_RESULT([$CC])
3580     AC_MSG_CHECKING([what C++ compiler to use])
3581     CXX="`xcrun -find clang++`"
3582     CXX_BASE=`first_arg_basename "$CXX"`
3583     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3584     AC_MSG_RESULT([$CXX])
3586     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3587     AR=`xcrun -find ar`
3588     NM=`xcrun -find nm`
3589     STRIP=`xcrun -find strip`
3590     LIBTOOL=`xcrun -find libtool`
3591     RANLIB=`xcrun -find ranlib`
3594 AC_MSG_CHECKING([whether to treat the installation as read-only])
3596 if test $_os = Darwin; then
3597     enable_readonly_installset=yes
3598 elif test "$enable_extensions" != yes; then
3599     enable_readonly_installset=yes
3601 if test "$enable_readonly_installset" = yes; then
3602     AC_MSG_RESULT([yes])
3603     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3604 else
3605     AC_MSG_RESULT([no])
3608 dnl ===================================================================
3609 dnl Structure of install set
3610 dnl ===================================================================
3612 if test $_os = Darwin; then
3613     LIBO_BIN_FOLDER=MacOS
3614     LIBO_ETC_FOLDER=Resources
3615     LIBO_LIBEXEC_FOLDER=MacOS
3616     LIBO_LIB_FOLDER=Frameworks
3617     LIBO_LIB_PYUNO_FOLDER=Resources
3618     LIBO_SHARE_FOLDER=Resources
3619     LIBO_SHARE_HELP_FOLDER=Resources/help
3620     LIBO_SHARE_JAVA_FOLDER=Resources/java
3621     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3622     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3623     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3624     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3625     LIBO_URE_BIN_FOLDER=MacOS
3626     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3627     LIBO_URE_LIB_FOLDER=Frameworks
3628     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3629     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3630 elif test $_os = WINNT; then
3631     LIBO_BIN_FOLDER=program
3632     LIBO_ETC_FOLDER=program
3633     LIBO_LIBEXEC_FOLDER=program
3634     LIBO_LIB_FOLDER=program
3635     LIBO_LIB_PYUNO_FOLDER=program
3636     LIBO_SHARE_FOLDER=share
3637     LIBO_SHARE_HELP_FOLDER=help
3638     LIBO_SHARE_JAVA_FOLDER=program/classes
3639     LIBO_SHARE_PRESETS_FOLDER=presets
3640     LIBO_SHARE_READMES_FOLDER=readmes
3641     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3642     LIBO_SHARE_SHELL_FOLDER=program/shell
3643     LIBO_URE_BIN_FOLDER=program
3644     LIBO_URE_ETC_FOLDER=program
3645     LIBO_URE_LIB_FOLDER=program
3646     LIBO_URE_MISC_FOLDER=program
3647     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3648 else
3649     LIBO_BIN_FOLDER=program
3650     LIBO_ETC_FOLDER=program
3651     LIBO_LIBEXEC_FOLDER=program
3652     LIBO_LIB_FOLDER=program
3653     LIBO_LIB_PYUNO_FOLDER=program
3654     LIBO_SHARE_FOLDER=share
3655     LIBO_SHARE_HELP_FOLDER=help
3656     LIBO_SHARE_JAVA_FOLDER=program/classes
3657     LIBO_SHARE_PRESETS_FOLDER=presets
3658     LIBO_SHARE_READMES_FOLDER=readmes
3659     if test "$enable_fuzzers" != yes; then
3660         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3661     else
3662         LIBO_SHARE_RESOURCE_FOLDER=resource
3663     fi
3664     LIBO_SHARE_SHELL_FOLDER=program/shell
3665     LIBO_URE_BIN_FOLDER=program
3666     LIBO_URE_ETC_FOLDER=program
3667     LIBO_URE_LIB_FOLDER=program
3668     LIBO_URE_MISC_FOLDER=program
3669     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3671 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3672 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3673 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3674 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3675 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3676 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3677 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3678 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3679 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3680 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3681 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3682 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3683 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3684 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3685 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3686 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3688 # Not all of them needed in config_host.mk, add more if need arises
3689 AC_SUBST(LIBO_BIN_FOLDER)
3690 AC_SUBST(LIBO_ETC_FOLDER)
3691 AC_SUBST(LIBO_LIB_FOLDER)
3692 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3693 AC_SUBST(LIBO_SHARE_FOLDER)
3694 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3695 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3696 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3697 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3698 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3699 AC_SUBST(LIBO_URE_BIN_FOLDER)
3700 AC_SUBST(LIBO_URE_ETC_FOLDER)
3701 AC_SUBST(LIBO_URE_LIB_FOLDER)
3702 AC_SUBST(LIBO_URE_MISC_FOLDER)
3703 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3705 dnl ===================================================================
3706 dnl Windows specific tests and stuff
3707 dnl ===================================================================
3709 reg_get_value()
3711     # Return value: $regvalue
3712     unset regvalue
3714     if test "$build_os" = "wsl"; then
3715         regvalue=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --read-registry $1 "$2" 2>/dev/null)
3716         return
3717     fi
3719     local _regentry="/proc/registry${1}/${2}"
3720     if test -f "$_regentry"; then
3721         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3722         # Registry keys read via /proc/registry* are always \0 terminated!
3723         local _regvalue=$(tr -d '\0' < "$_regentry")
3724         if test $? -eq 0; then
3725             regvalue=$_regvalue
3726         fi
3727     fi
3730 # Get a value from the 32-bit side of the Registry
3731 reg_get_value_32()
3733     reg_get_value "32" "$1"
3736 # Get a value from the 64-bit side of the Registry
3737 reg_get_value_64()
3739     reg_get_value "64" "$1"
3742 case "$host_os" in
3743 cygwin*|wsl*)
3744     COM=MSC
3745     OS=WNT
3746     RTL_OS=Windows
3747     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3748         P_SEP=";"
3749     else
3750         P_SEP=:
3751     fi
3752     case "$host_cpu" in
3753     x86_64)
3754         CPUNAME=X86_64
3755         RTL_ARCH=X86_64
3756         PLATFORMID=windows_x86_64
3757         WINDOWS_X64=1
3758         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
3759         WIN_HOST_ARCH="x64"
3760         WIN_MULTI_ARCH="x86"
3761         WIN_HOST_BITS=64
3762         ;;
3763     i*86)
3764         CPUNAME=INTEL
3765         RTL_ARCH=x86
3766         PLATFORMID=windows_x86
3767         WIN_HOST_ARCH="x86"
3768         WIN_HOST_BITS=32
3769         WIN_OTHER_ARCH="x64"
3770         ;;
3771     aarch64)
3772         CPUNAME=AARCH64
3773         RTL_ARCH=AARCH64
3774         PLATFORMID=windows_aarch64
3775         WINDOWS_X64=1
3776         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
3777         WIN_HOST_ARCH="arm64"
3778         WIN_HOST_BITS=64
3779         with_ucrt_dir=no
3780         ;;
3781     *)
3782         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
3783         ;;
3784     esac
3786     case "$build_cpu" in
3787     x86_64) WIN_BUILD_ARCH="x64" ;;
3788     i*86) WIN_BUILD_ARCH="x86" ;;
3789     aarch64) WIN_BUILD_ARCH="arm64" ;;
3790     *)
3791         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
3792         ;;
3793     esac
3795     SCPDEFS="$SCPDEFS -D_MSC_VER"
3796     ;;
3797 esac
3799 # multi-arch is an arch, which can execute on the host (x86 on x64), while
3800 # other-arch won't, but wouldn't break the build (x64 on x86).
3801 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
3802     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
3806 if test "$_os" = "iOS" -o "$build_cpu" != "$host_cpu"; then
3807     # To allow building Windows multi-arch releases without cross-tooling
3808     if test -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH"; then
3809         cross_compiling="yes"
3810     fi
3813 ENABLE_WASM_STRIP=''
3814 if test "$cross_compiling" = "yes"; then
3815     export CROSS_COMPILING=TRUE
3816     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
3817         ENABLE_WASM_STRIP=TRUE
3818     fi
3819 else
3820     CROSS_COMPILING=
3821     BUILD_TYPE="$BUILD_TYPE NATIVE"
3823 AC_SUBST(CROSS_COMPILING)
3824 AC_SUBST(ENABLE_WASM_STRIP)
3826 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
3827 # NOTE: must _not_ be used for bundled external libraries!
3828 ISYSTEM=
3829 if test "$GCC" = "yes"; then
3830     AC_MSG_CHECKING( for -isystem )
3831     save_CFLAGS=$CFLAGS
3832     CFLAGS="$CFLAGS -Werror"
3833     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
3834     CFLAGS=$save_CFLAGS
3835     if test -n "$ISYSTEM"; then
3836         AC_MSG_RESULT(yes)
3837     else
3838         AC_MSG_RESULT(no)
3839     fi
3841 if test -z "$ISYSTEM"; then
3842     # fall back to using -I
3843     ISYSTEM=-I
3845 AC_SUBST(ISYSTEM)
3847 dnl ===================================================================
3848 dnl  Check which Visual Studio compiler is used
3849 dnl ===================================================================
3851 map_vs_year_to_version()
3853     # Return value: $vsversion
3855     unset vsversion
3857     case $1 in
3858     2019)
3859         vsversion=16;;
3860     2022)
3861         vsversion=17;;
3862     *)
3863         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
3864     esac
3867 vs_versions_to_check()
3869     # Args: $1 (optional) : versions to check, in the order of preference
3870     # Return value: $vsversions
3872     unset vsversions
3874     if test -n "$1"; then
3875         map_vs_year_to_version "$1"
3876         vsversions=$vsversion
3877     else
3878         # Default version is 2019
3879         vsversions="16"
3880     fi
3883 win_get_env_from_vsvars32bat()
3885     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
3886     # Also seems to be located in another directory under the same name: vsvars32.bat
3887     # https://github.com/bazelbuild/bazel/blob/master/src/main/native/build_windows_jni.sh#L56-L57
3888     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$(cygpath -w $VC_PRODUCT_DIR)" > $WRAPPERBATCHFILEPATH
3889     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
3890     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
3891     local result
3892     if test "$build_os" = "wsl"; then
3893         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
3894     else
3895         chmod +x $WRAPPERBATCHFILEPATH
3896         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
3897     fi
3898     rm -f $WRAPPERBATCHFILEPATH
3899     printf '%s' "$result"
3902 find_ucrt()
3904     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/InstallationFolder"
3905     if test -n "$regvalue"; then
3906         PathFormat "$regvalue"
3907         UCRTSDKDIR=$formatted_path_unix
3908         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion"
3909         UCRTVERSION=$regvalue
3910         # Rest if not exist
3911         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
3912           UCRTSDKDIR=
3913         fi
3914     fi
3915     if test -z "$UCRTSDKDIR"; then
3916         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
3917         ide_env_file="${ide_env_dir}VsDevCmd.bat"
3918         if test -f "$ide_env_file"; then
3919             PathFormat "$(win_get_env_from_vsvars32bat UniversalCRTSdkDir)"
3920             UCRTSDKDIR=$formatted_path
3921             UCRTVERSION=$(win_get_env_from_vsvars32bat UCRTVersion)
3922             dnl Hack needed at least by tml:
3923             if test "$UCRTVERSION" = 10.0.15063.0 \
3924                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
3925                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
3926             then
3927                 UCRTVERSION=10.0.14393.0
3928             fi
3929         else
3930           AC_MSG_ERROR([No UCRT found])
3931         fi
3932     fi
3935 find_msvc()
3937     # Find Visual C++
3938     # Args: $1 (optional) : The VS version year
3939     # Return values: $vctest, $vcyear, $vctoolset, $vcnumwithdot, $vcbuildnumber
3941     unset vctest vctoolset vcnumwithdot vcbuildnumber
3943     vs_versions_to_check "$1"
3944     if test "$build_os" = wsl; then
3945         vswhere="$PROGRAMFILESX86"
3946     else
3947         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
3948     fi
3949     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
3950     PathFormat "$vswhere"
3951     vswhere=$formatted_path_unix
3952     for ver in $vsversions; do
3953         vswhereoutput=`$vswhere -prerelease -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3954         # Fall back to all MS products (this includes VC++ Build Tools)
3955         if ! test -n "$vswhereoutput"; then
3956             AC_MSG_CHECKING([VC++ Build Tools and similar])
3957             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3958         fi
3959         if test -n "$vswhereoutput"; then
3960             PathFormat "$vswhereoutput"
3961             vctest=$formatted_path_unix
3962             break
3963         fi
3964     done
3966     if test -n "$vctest"; then
3967         vcnumwithdot="$ver.0"
3968         case "$vcnumwithdot" in
3969         16.0)
3970             vcyear=2019
3971             vctoolset=v142
3972             ;;
3973         17.0)
3974             vcyear=2022
3975             vctoolset=v143
3976             ;;
3977         esac
3978         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
3980     fi
3983 test_cl_exe()
3985     AC_MSG_CHECKING([$1 compiler])
3987     CL_EXE_PATH="$2/cl.exe"
3989     if test ! -f "$CL_EXE_PATH"; then
3990         if test "$1" = "multi-arch"; then
3991             AC_MSG_WARN([no compiler (cl.exe) in $2])
3992             return 1
3993         else
3994             AC_MSG_ERROR([no compiler (cl.exe) in $2])
3995         fi
3996     fi
3998     dnl ===========================================================
3999     dnl  Check for the corresponding mspdb*.dll
4000     dnl ===========================================================
4002     # MSVC 15.0 has libraries from 14.0?
4003     mspdbnum="140"
4005     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
4006         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
4007     fi
4009     # The compiles has to find its shared libraries
4010     OLD_PATH="$PATH"
4011     TEMP_PATH=`cygpath -d "$2"`
4012     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
4014     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
4015         AC_MSG_ERROR([no compiler (cl.exe) in $2])
4016     fi
4018     PATH="$OLD_PATH"
4020     AC_MSG_RESULT([$CL_EXE_PATH])
4023 SOLARINC=
4024 MSBUILD_PATH=
4025 DEVENV=
4026 if test "$_os" = "WINNT"; then
4027     AC_MSG_CHECKING([Visual C++])
4028     find_msvc "$with_visual_studio"
4029     if test -z "$vctest"; then
4030         if test -n "$with_visual_studio"; then
4031             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
4032         else
4033             AC_MSG_ERROR([no Visual Studio installation found])
4034         fi
4035     fi
4036     AC_MSG_RESULT([])
4038     VC_PRODUCT_DIR="$vctest/VC"
4039     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
4041     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
4042     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
4043         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
4044         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
4045         if test $? -ne 0; then
4046             WIN_MULTI_ARCH=""
4047             WIN_OTHER_ARCH=""
4048         fi
4049     fi
4051     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
4052         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
4053         test_cl_exe "build" "$MSVC_BUILD_PATH"
4054     fi
4056     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
4057         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
4058         test_cl_exe "host" "$MSVC_HOST_PATH"
4059     else
4060         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
4061     fi
4063     AC_MSG_CHECKING([for short pathname of VC product directory])
4064     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
4065     AC_MSG_RESULT([$VC_PRODUCT_DIR])
4067     UCRTSDKDIR=
4068     UCRTVERSION=
4070     AC_MSG_CHECKING([for UCRT location])
4071     find_ucrt
4072     # find_ucrt errors out if it doesn't find it
4073     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
4074     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
4075     ucrtincpath_formatted=$formatted_path
4076     # SOLARINC is used for external modules and must be set too.
4077     # And no, it's not sufficient to set SOLARINC only, as configure
4078     # itself doesn't honour it.
4079     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
4080     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
4081     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
4082     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4084     AC_SUBST(UCRTSDKDIR)
4085     AC_SUBST(UCRTVERSION)
4087     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4088     # Find the proper version of MSBuild.exe to use based on the VS version
4089     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath
4090     if test -z "$regvalue" ; then
4091         if test "$WIN_BUILD_ARCH" != "x64"; then
4092             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4093         else
4094             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4095         fi
4096     fi
4097     if test -d "$regvalue" ; then
4098         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4099         AC_MSG_RESULT([$regvalue])
4100     else
4101         AC_MSG_ERROR([MSBuild.exe location not found])
4102     fi
4104     # Find the version of devenv.exe
4105     # MSVC 2017 devenv does not start properly from a DOS 8.3 path
4106     DEVENV=$(cygpath -lm "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe")
4107     DEVENV_unix=$(cygpath -u "$DEVENV")
4108     if test ! -e "$DEVENV_unix"; then
4109         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4110     fi
4112     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4113     dnl needed when building CLR code:
4114     if test -z "$MSVC_CXX"; then
4115         # This gives us a posix path with 8.3 filename restrictions
4116         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4117     fi
4119     if test -z "$CC"; then
4120         CC=$MSVC_CXX
4121         CC_BASE=`first_arg_basename "$CC"`
4122     fi
4123     if test -z "$CXX"; then
4124         CXX=$MSVC_CXX
4125         CXX_BASE=`first_arg_basename "$CXX"`
4126     fi
4128     if test -n "$CC"; then
4129         # Remove /cl.exe from CC case insensitive
4130         AC_MSG_NOTICE([found Visual C++ $vcyear])
4132         main_include_dir=`cygpath -d -m "$COMPATH/Include"`
4133         CPPFLAGS="$CPPFLAGS -I$main_include_dir"
4135         PathFormat "$COMPATH"
4136         COMPATH=`win_short_path_for_make "$formatted_path"`
4138         VCVER=$vcnumwithdot
4139         VCTOOLSET=$vctoolset
4141         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4142         # are always "better", we list them in reverse chronological order.
4144         case "$vcnumwithdot" in
4145         16.0 | 17.0)
4146             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4147             ;;
4148         esac
4150         # The expectation is that --with-windows-sdk should not need to be used
4151         if test -n "$with_windows_sdk"; then
4152             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4153             *" "$with_windows_sdk" "*)
4154                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4155                 ;;
4156             *)
4157                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4158                 ;;
4159             esac
4160         fi
4162         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4163         ac_objext=obj
4164         ac_exeext=exe
4166     else
4167         AC_MSG_ERROR([Visual C++ not found after all, huh])
4168     fi
4170     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4171     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4172         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4173         // between Visual Studio versions and _MSC_VER:
4174         #if _MSC_VER < 1925
4175         #error
4176         #endif
4177     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4179     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4180     # version of the Explorer extension (and maybe other small
4181     # bits, too) needed when installing a 32-bit LibreOffice on a
4182     # 64-bit OS. The 64-bit Explorer extension is a feature that
4183     # has been present since long in OOo. Don't confuse it with
4184     # building LibreOffice itself as 64-bit code.
4186     BUILD_X64=
4187     CXX_X64_BINARY=
4189     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4190         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4191         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4192              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4193         then
4194             BUILD_X64=TRUE
4195             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4196             AC_MSG_RESULT([found])
4197         else
4198             AC_MSG_RESULT([not found])
4199             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4200         fi
4201     elif test "$WIN_HOST_ARCH" = "x64"; then
4202         CXX_X64_BINARY=$CXX
4203     fi
4204     AC_SUBST(BUILD_X64)
4206     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4207     AC_SUBST(CXX_X64_BINARY)
4209     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4210     # needed to support TWAIN scan on both 32- and 64-bit systems
4212     case "$WIN_HOST_ARCH" in
4213     x64)
4214         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4215         if test -n "$CXX_X86_BINARY"; then
4216             BUILD_X86=TRUE
4217             AC_MSG_RESULT([preset])
4218         elif test -n "$WIN_MULTI_ARCH"; then
4219             BUILD_X86=TRUE
4220             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4221             CXX_X86_BINARY+=" /arch:SSE"
4222             AC_MSG_RESULT([found])
4223         else
4224             AC_MSG_RESULT([not found])
4225             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4226         fi
4227         ;;
4228     x86)
4229         BUILD_X86=TRUE
4230         CXX_X86_BINARY=$MSVC_CXX
4231         ;;
4232     esac
4233     AC_SUBST(BUILD_X86)
4234     AC_SUBST(CXX_X86_BINARY)
4236 AC_SUBST(VCVER)
4237 AC_SUBST(VCTOOLSET)
4238 AC_SUBST(DEVENV)
4239 AC_SUBST(MSVC_CXX)
4241 COM_IS_CLANG=
4242 AC_MSG_CHECKING([whether the compiler is actually Clang])
4243 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4244     #ifndef __clang__
4245     you lose
4246     #endif
4247     int foo=42;
4248     ]])],
4249     [AC_MSG_RESULT([yes])
4250      COM_IS_CLANG=TRUE],
4251     [AC_MSG_RESULT([no])])
4252 AC_SUBST(COM_IS_CLANG)
4254 CC_PLAIN=$CC
4255 CLANGVER=
4256 if test "$COM_IS_CLANG" = TRUE; then
4257     AC_MSG_CHECKING([whether Clang is new enough])
4258     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4259         #if !defined __apple_build_version__
4260         #error
4261         #endif
4262         ]])],
4263         [my_apple_clang=yes],[my_apple_clang=])
4264     if test "$my_apple_clang" = yes; then
4265         AC_MSG_RESULT([assumed yes (Apple Clang)])
4266     elif test "$_os" = Emscripten; then
4267         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4268     else
4269         if test "$_os" = WINNT; then
4270             dnl In which case, assume clang-cl:
4271             my_args="/EP /TC"
4272             dnl Filter out -FIIntrin.h, which needs to be explicitly stated for
4273             dnl clang-cl:
4274             CC_PLAIN=
4275             for i in $CC; do
4276                 case $i in
4277                 -FIIntrin.h)
4278                     ;;
4279                 *)
4280                     CC_PLAIN="$CC_PLAIN $i"
4281                     ;;
4282                 esac
4283             done
4284         else
4285             my_args="-E -P"
4286         fi
4287         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC_PLAIN $my_args - | sed 's/ //g'`
4288         CLANG_FULL_VERSION=`echo __clang_version__ | $CC_PLAIN $my_args -`
4289         CLANGVER=`echo $clang_version \
4290             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4291         if test "$CLANGVER" -ge 50002; then
4292             AC_MSG_RESULT([yes ($clang_version)])
4293         else
4294             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 5.0.2])
4295         fi
4296         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4297         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4298     fi
4301 SHOWINCLUDES_PREFIX=
4302 if test "$_os" = WINNT; then
4303     dnl We need to guess the prefix of the -showIncludes output, it can be
4304     dnl localized
4305     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4306     echo "#include <stdlib.h>" > conftest.c
4307     SHOWINCLUDES_PREFIX=`$CC_PLAIN $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4308         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4309     rm -f conftest.c conftest.obj
4310     if test -z "$SHOWINCLUDES_PREFIX"; then
4311         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4312     else
4313         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4314     fi
4316 AC_SUBST(SHOWINCLUDES_PREFIX)
4319 # prefix C with ccache if needed
4321 UNCACHED_CC="$CC"
4322 if test "$CCACHE" != ""; then
4323     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4325     AC_LANG_PUSH([C])
4326     save_CFLAGS=$CFLAGS
4327     CFLAGS="$CFLAGS --ccache-skip -O2"
4328     dnl an empty program will do, we're checking the compiler flags
4329     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4330                       [use_ccache=yes], [use_ccache=no])
4331     CFLAGS=$save_CFLAGS
4332     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4333         AC_MSG_RESULT([yes])
4334     else
4335         CC="$CCACHE $CC"
4336         CC_BASE="ccache $CC_BASE"
4337         AC_MSG_RESULT([no])
4338     fi
4339     AC_LANG_POP([C])
4342 # ===================================================================
4343 # check various GCC options that Clang does not support now but maybe
4344 # will somewhen in the future, check them even for GCC, so that the
4345 # flags are set
4346 # ===================================================================
4348 HAVE_GCC_GGDB2=
4349 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4350     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4351     save_CFLAGS=$CFLAGS
4352     CFLAGS="$CFLAGS -Werror -ggdb2"
4353     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4354     CFLAGS=$save_CFLAGS
4355     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4356         AC_MSG_RESULT([yes])
4357     else
4358         AC_MSG_RESULT([no])
4359     fi
4361     if test "$host_cpu" = "m68k"; then
4362         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4363         save_CFLAGS=$CFLAGS
4364         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4365         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4366         CFLAGS=$save_CFLAGS
4367         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4368             AC_MSG_RESULT([yes])
4369         else
4370             AC_MSG_ERROR([no])
4371         fi
4372     fi
4374 AC_SUBST(HAVE_GCC_GGDB2)
4376 dnl ===================================================================
4377 dnl  Test the gcc version
4378 dnl ===================================================================
4379 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4380     AC_MSG_CHECKING([the GCC version])
4381     _gcc_version=`$CC -dumpfullversion`
4382     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4383         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4384     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4386     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4388     if test "$gcc_full_version" -lt 70000; then
4389         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 7.0.0])
4390     fi
4391 else
4392     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4393     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4394     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4395     # (which reports itself as GCC 4.2.1).
4396     GCC_VERSION=
4398 AC_SUBST(GCC_VERSION)
4400 dnl Set the ENABLE_DBGUTIL variable
4401 dnl ===================================================================
4402 AC_MSG_CHECKING([whether to build with additional debug utilities])
4403 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4404     ENABLE_DBGUTIL="TRUE"
4405     # this is an extra var so it can have different default on different MSVC
4406     # versions (in case there are version specific problems with it)
4407     MSVC_USE_DEBUG_RUNTIME="TRUE"
4409     AC_MSG_RESULT([yes])
4410     # cppunit and graphite expose STL in public headers
4411     if test "$with_system_cppunit" = "yes"; then
4412         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4413     else
4414         with_system_cppunit=no
4415     fi
4416     if test "$with_system_graphite" = "yes"; then
4417         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4418     else
4419         with_system_graphite=no
4420     fi
4421     if test "$with_system_orcus" = "yes"; then
4422         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4423     else
4424         with_system_orcus=no
4425     fi
4426     if test "$with_system_libcmis" = "yes"; then
4427         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4428     else
4429         with_system_libcmis=no
4430     fi
4431     if test "$with_system_hunspell" = "yes"; then
4432         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4433     else
4434         with_system_hunspell=no
4435     fi
4436     if test "$with_system_gpgmepp" = "yes"; then
4437         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4438     else
4439         with_system_gpgmepp=no
4440     fi
4441     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4442     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4443     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4444     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4445     # of those two is using the system variant:
4446     if test "$with_system_libnumbertext" = "yes"; then
4447         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4448     else
4449         with_system_libnumbertext=no
4450     fi
4451     if test "$with_system_libwps" = "yes"; then
4452         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4453     else
4454         with_system_libwps=no
4455     fi
4456 else
4457     ENABLE_DBGUTIL=""
4458     MSVC_USE_DEBUG_RUNTIME=""
4459     AC_MSG_RESULT([no])
4461 AC_SUBST(ENABLE_DBGUTIL)
4462 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4464 dnl Set the ENABLE_DEBUG variable.
4465 dnl ===================================================================
4466 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4467     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4469 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4470     if test -z "$libo_fuzzed_enable_debug"; then
4471         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4472     else
4473         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4474         enable_debug=yes
4475     fi
4478 AC_MSG_CHECKING([whether to do a debug build])
4479 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4480     ENABLE_DEBUG="TRUE"
4481     if test -n "$ENABLE_DBGUTIL" ; then
4482         AC_MSG_RESULT([yes (dbgutil)])
4483     else
4484         AC_MSG_RESULT([yes])
4485     fi
4486 else
4487     ENABLE_DEBUG=""
4488     AC_MSG_RESULT([no])
4490 AC_SUBST(ENABLE_DEBUG)
4492 dnl ===================================================================
4493 dnl Select the linker to use (gold/lld/ld.bfd).
4494 dnl This is done only after compiler checks (need to know if Clang is
4495 dnl used, for different defaults) and after checking if a debug build
4496 dnl is wanted (non-debug builds get the default linker if not explicitly
4497 dnl specified otherwise).
4498 dnl All checks for linker features/options should come after this.
4499 dnl ===================================================================
4500 check_use_ld()
4502     use_ld=-fuse-ld=${1%%:*}
4503     use_ld_path=${1#*:}
4504     if test "$use_ld_path" != "$1"; then
4505         use_ld="$use_ld --ld-path=$use_ld_path"
4506     fi
4507     use_ld_fail_if_error=$2
4508     use_ld_ok=
4509     AC_MSG_CHECKING([for $use_ld linker support])
4510     use_ld_ldflags_save="$LDFLAGS"
4511     LDFLAGS="$LDFLAGS $use_ld"
4512     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4513 #include <stdio.h>
4514         ],[
4515 printf ("hello world\n");
4516         ])], USE_LD=$use_ld, [])
4517     if test -n "$USE_LD"; then
4518         AC_MSG_RESULT( yes )
4519         use_ld_ok=yes
4520     else
4521         if test -n "$use_ld_fail_if_error"; then
4522             AC_MSG_ERROR( no )
4523         else
4524             AC_MSG_RESULT( no )
4525         fi
4526     fi
4527     if test -n "$use_ld_ok"; then
4528         dnl keep the value of LDFLAGS
4529         return 0
4530     fi
4531     LDFLAGS="$use_ld_ldflags_save"
4532     return 1
4534 USE_LD=
4535 if test "$enable_ld" != "no"; then
4536     if test "$GCC" = "yes"; then
4537         if test -n "$enable_ld"; then
4538             check_use_ld "$enable_ld" fail_if_error
4539         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4540             dnl non-debug builds default to the default linker
4541             true
4542         elif test -n "$COM_IS_CLANG"; then
4543             check_use_ld lld
4544             if test $? -ne 0; then
4545                 check_use_ld gold
4546             fi
4547         else
4548             # For gcc first try gold, new versions also support lld.
4549             check_use_ld gold
4550             if test $? -ne 0; then
4551                 check_use_ld lld
4552             fi
4553         fi
4554         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4555         rm conftest.out
4556         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD)')
4557         if test -z "$ld_used"; then
4558             ld_used="unknown"
4559         fi
4560         AC_MSG_CHECKING([for linker that is used])
4561         AC_MSG_RESULT([$ld_used])
4562         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4563             if echo "$ld_used" | grep -q "^GNU ld"; then
4564                 AC_MSG_WARN([The default GNU linker is slow, consider using the LLD or the GNU gold linker.])
4565                 add_warning "The default GNU linker is slow, consider using the LLD or the GNU gold linker."
4566             fi
4567         fi
4568     else
4569         if test "$enable_ld" = "yes"; then
4570             AC_MSG_ERROR([--enable-ld not supported])
4571         fi
4572     fi
4574 AC_SUBST(USE_LD)
4576 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4577 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4578     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4579     bsymbolic_functions_ldflags_save=$LDFLAGS
4580     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4581     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4582 #include <stdio.h>
4583         ],[
4584 printf ("hello world\n");
4585         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4586     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4587         AC_MSG_RESULT( found )
4588     else
4589         AC_MSG_RESULT( not found )
4590     fi
4591     LDFLAGS=$bsymbolic_functions_ldflags_save
4593 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4595 LD_GC_SECTIONS=
4596 if test "$GCC" = "yes"; then
4597     for flag in "--gc-sections" "-dead_strip"; do
4598         AC_MSG_CHECKING([for $flag linker support])
4599         ldflags_save=$LDFLAGS
4600         LDFLAGS="$LDFLAGS -Wl,$flag"
4601         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4602 #include <stdio.h>
4603             ],[
4604 printf ("hello world\n");
4605             ])],[
4606             LD_GC_SECTIONS="-Wl,$flag"
4607             AC_MSG_RESULT( found )
4608             ], [
4609             AC_MSG_RESULT( not found )
4610             ])
4611         LDFLAGS=$ldflags_save
4612         if test -n "$LD_GC_SECTIONS"; then
4613             break
4614         fi
4615     done
4617 AC_SUBST(LD_GC_SECTIONS)
4619 HAVE_GSPLIT_DWARF=
4620 if test "$enable_split_debug" != no; then
4621     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4622     if test "$enable_split_debug" = yes -o \( "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4623         AC_MSG_CHECKING([whether $CC_BASE supports -gsplit-dwarf])
4624         save_CFLAGS=$CFLAGS
4625         CFLAGS="$CFLAGS -Werror -gsplit-dwarf"
4626         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_SPLIT_DWARF=TRUE ],[])
4627         CFLAGS=$save_CFLAGS
4628         if test "$HAVE_GCC_SPLIT_DWARF" = "TRUE"; then
4629             AC_MSG_RESULT([yes])
4630         else
4631             if test "$enable_split_debug" = yes; then
4632                 AC_MSG_ERROR([no])
4633             else
4634                 AC_MSG_RESULT([no])
4635             fi
4636         fi
4637     fi
4638     if test -z "$HAVE_GCC_SPLIT_DWARF" -a "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4639         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4640         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4641     fi
4643 AC_SUBST(HAVE_GCC_SPLIT_DWARF)
4645 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4646 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4647 save_CFLAGS=$CFLAGS
4648 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4649 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4650 CFLAGS=$save_CFLAGS
4651 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4652     AC_MSG_RESULT([yes])
4653 else
4654     AC_MSG_RESULT([no])
4656 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4658 ENABLE_GDB_INDEX=
4659 if test "$enable_gdb_index" != "no"; then
4660     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4661     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4662         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4663         save_CFLAGS=$CFLAGS
4664         CFLAGS="$CFLAGS -Werror -ggnu-pubnames"
4665         have_ggnu_pubnames=
4666         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4667         if test "$have_ggnu_pubnames" != "TRUE"; then
4668             if test "$enable_gdb_index" = "yes"; then
4669                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4670             else
4671                 AC_MSG_RESULT( no )
4672             fi
4673         else
4674             AC_MSG_RESULT( yes )
4675             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4676             ldflags_save=$LDFLAGS
4677             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4678             AC_LINK_IFELSE([AC_LANG_PROGRAM([
4679 #include <stdio.h>
4680                 ],[
4681 printf ("hello world\n");
4682                 ])], ENABLE_GDB_INDEX=TRUE, [])
4683             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
4684                 AC_MSG_RESULT( yes )
4685             else
4686                 if test "$enable_gdb_index" = "yes"; then
4687                     AC_MSG_ERROR( no )
4688                 else
4689                     AC_MSG_RESULT( no )
4690                 fi
4691             fi
4692             LDFLAGS=$ldflags_save
4693         fi
4694         CFLAGS=$save_CFLAGS
4695         fi
4696     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4697         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
4698         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
4699     fi
4701 AC_SUBST(ENABLE_GDB_INDEX)
4703 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
4704     enable_sal_log=yes
4706 if test "$enable_sal_log" = yes; then
4707     ENABLE_SAL_LOG=TRUE
4709 AC_SUBST(ENABLE_SAL_LOG)
4711 dnl Check for enable symbols option
4712 dnl ===================================================================
4713 AC_MSG_CHECKING([whether to generate debug information])
4714 if test -z "$enable_symbols"; then
4715     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4716         enable_symbols=yes
4717     else
4718         enable_symbols=no
4719     fi
4721 if test "$enable_symbols" = yes; then
4722     ENABLE_SYMBOLS_FOR=all
4723     AC_MSG_RESULT([yes])
4724 elif test "$enable_symbols" = no; then
4725     ENABLE_SYMBOLS_FOR=
4726     AC_MSG_RESULT([no])
4727 else
4728     # Selective debuginfo.
4729     ENABLE_SYMBOLS_FOR="$enable_symbols"
4730     AC_MSG_RESULT([for "$enable_symbols"])
4732 AC_SUBST(ENABLE_SYMBOLS_FOR)
4734 if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then
4735     # Building on Android with full symbols: without enough memory the linker never finishes currently.
4736     AC_MSG_CHECKING([whether enough memory is available for linking])
4737     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
4738     # Check for 15GB, as Linux reports a bit less than the physical memory size.
4739     if test -n "$mem_size" -a $mem_size -lt 15728640; then
4740         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
4741     else
4742         AC_MSG_RESULT([yes])
4743     fi
4746 ENABLE_OPTIMIZED=
4747 ENABLE_OPTIMIZED_DEBUG=
4748 AC_MSG_CHECKING([whether to compile with optimization flags])
4749 if test -z "$enable_optimized"; then
4750     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4751         enable_optimized=no
4752     else
4753         enable_optimized=yes
4754     fi
4756 if test "$enable_optimized" = yes; then
4757     ENABLE_OPTIMIZED=TRUE
4758     AC_MSG_RESULT([yes])
4759 elif test "$enable_optimized" = debug; then
4760     ENABLE_OPTIMIZED_DEBUG=TRUE
4761     AC_MSG_RESULT([yes (debug)])
4762     HAVE_GCC_OG=
4763     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4764         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
4765         save_CFLAGS=$CFLAGS
4766         CFLAGS="$CFLAGS -Werror -Og"
4767         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
4768         CFLAGS=$save_CFLAGS
4769         if test "$HAVE_GCC_OG" = "TRUE"; then
4770             AC_MSG_RESULT([yes])
4771         else
4772             AC_MSG_RESULT([no])
4773         fi
4774     fi
4775     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
4776         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
4777     fi
4778 else
4779     AC_MSG_RESULT([no])
4781 AC_SUBST(ENABLE_OPTIMIZED)
4782 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
4785 # determine CPUNAME, OS, ...
4787 case "$host_os" in
4789 aix*)
4790     COM=GCC
4791     CPUNAME=POWERPC
4792     OS=AIX
4793     RTL_OS=AIX
4794     RTL_ARCH=PowerPC
4795     PLATFORMID=aix_powerpc
4796     P_SEP=:
4797     ;;
4799 cygwin*|wsl*)
4800     # Already handled
4801     ;;
4803 darwin*|macos*)
4804     COM=GCC
4805     OS=MACOSX
4806     RTL_OS=MacOSX
4807     P_SEP=:
4809     case "$host_cpu" in
4810     aarch64|arm64)
4811         if test "$enable_ios_simulator" = "yes"; then
4812             OS=iOS
4813         else
4814             CPUNAME=AARCH64
4815             RTL_ARCH=AARCH64
4816             PLATFORMID=macosx_aarch64
4817         fi
4818         ;;
4819     x86_64)
4820         if test "$enable_ios_simulator" = "yes"; then
4821             OS=iOS
4822         fi
4823         CPUNAME=X86_64
4824         RTL_ARCH=X86_64
4825         PLATFORMID=macosx_x86_64
4826         ;;
4827     *)
4828         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4829         ;;
4830     esac
4831     ;;
4833 ios*)
4834     COM=GCC
4835     OS=iOS
4836     RTL_OS=iOS
4837     P_SEP=:
4839     case "$host_cpu" in
4840     aarch64|arm64)
4841         if test "$enable_ios_simulator" = "yes"; then
4842             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
4843         fi
4844         ;;
4845     *)
4846         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4847         ;;
4848     esac
4849     CPUNAME=AARCH64
4850     RTL_ARCH=AARCH64
4851     PLATFORMID=ios_arm64
4852     ;;
4854 dragonfly*)
4855     COM=GCC
4856     OS=DRAGONFLY
4857     RTL_OS=DragonFly
4858     P_SEP=:
4860     case "$host_cpu" in
4861     i*86)
4862         CPUNAME=INTEL
4863         RTL_ARCH=x86
4864         PLATFORMID=dragonfly_x86
4865         ;;
4866     x86_64)
4867         CPUNAME=X86_64
4868         RTL_ARCH=X86_64
4869         PLATFORMID=dragonfly_x86_64
4870         ;;
4871     *)
4872         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4873         ;;
4874     esac
4875     ;;
4877 freebsd*)
4878     COM=GCC
4879     RTL_OS=FreeBSD
4880     OS=FREEBSD
4881     P_SEP=:
4883     case "$host_cpu" in
4884     aarch64)
4885         CPUNAME=AARCH64
4886         PLATFORMID=freebsd_aarch64
4887         RTL_ARCH=AARCH64
4888         ;;
4889     i*86)
4890         CPUNAME=INTEL
4891         RTL_ARCH=x86
4892         PLATFORMID=freebsd_x86
4893         ;;
4894     x86_64|amd64)
4895         CPUNAME=X86_64
4896         RTL_ARCH=X86_64
4897         PLATFORMID=freebsd_x86_64
4898         ;;
4899     powerpc64)
4900         CPUNAME=POWERPC64
4901         RTL_ARCH=PowerPC_64
4902         PLATFORMID=freebsd_powerpc64
4903         ;;
4904     powerpc|powerpcspe)
4905         CPUNAME=POWERPC
4906         RTL_ARCH=PowerPC
4907         PLATFORMID=freebsd_powerpc
4908         ;;
4909     *)
4910         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4911         ;;
4912     esac
4913     ;;
4915 haiku*)
4916     COM=GCC
4917     GUIBASE=haiku
4918     RTL_OS=Haiku
4919     OS=HAIKU
4920     P_SEP=:
4922     case "$host_cpu" in
4923     i*86)
4924         CPUNAME=INTEL
4925         RTL_ARCH=x86
4926         PLATFORMID=haiku_x86
4927         ;;
4928     x86_64|amd64)
4929         CPUNAME=X86_64
4930         RTL_ARCH=X86_64
4931         PLATFORMID=haiku_x86_64
4932         ;;
4933     *)
4934         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4935         ;;
4936     esac
4937     ;;
4939 kfreebsd*)
4940     COM=GCC
4941     OS=LINUX
4942     RTL_OS=kFreeBSD
4943     P_SEP=:
4945     case "$host_cpu" in
4947     i*86)
4948         CPUNAME=INTEL
4949         RTL_ARCH=x86
4950         PLATFORMID=kfreebsd_x86
4951         ;;
4952     x86_64)
4953         CPUNAME=X86_64
4954         RTL_ARCH=X86_64
4955         PLATFORMID=kfreebsd_x86_64
4956         ;;
4957     *)
4958         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4959         ;;
4960     esac
4961     ;;
4963 linux-gnu*|linux-musl*)
4964     COM=GCC
4965     OS=LINUX
4966     RTL_OS=Linux
4967     P_SEP=:
4969     case "$host_cpu" in
4971     aarch64)
4972         CPUNAME=AARCH64
4973         PLATFORMID=linux_aarch64
4974         RTL_ARCH=AARCH64
4975         EPM_FLAGS="-a arm64"
4976         ;;
4977     alpha)
4978         CPUNAME=AXP
4979         RTL_ARCH=ALPHA
4980         PLATFORMID=linux_alpha
4981         ;;
4982     arm*)
4983         CPUNAME=ARM
4984         EPM_FLAGS="-a arm"
4985         RTL_ARCH=ARM_EABI
4986         PLATFORMID=linux_arm_eabi
4987         case "$host_cpu" in
4988         arm*-linux)
4989             RTL_ARCH=ARM_OABI
4990             PLATFORMID=linux_arm_oabi
4991             ;;
4992         esac
4993         ;;
4994     hppa)
4995         CPUNAME=HPPA
4996         RTL_ARCH=HPPA
4997         EPM_FLAGS="-a hppa"
4998         PLATFORMID=linux_hppa
4999         ;;
5000     i*86)
5001         CPUNAME=INTEL
5002         RTL_ARCH=x86
5003         PLATFORMID=linux_x86
5004         ;;
5005     ia64)
5006         CPUNAME=IA64
5007         RTL_ARCH=IA64
5008         PLATFORMID=linux_ia64
5009         ;;
5010     mips)
5011         CPUNAME=GODSON
5012         RTL_ARCH=MIPS_EB
5013         EPM_FLAGS="-a mips"
5014         PLATFORMID=linux_mips_eb
5015         ;;
5016     mips64)
5017         CPUNAME=GODSON64
5018         RTL_ARCH=MIPS64_EB
5019         EPM_FLAGS="-a mips64"
5020         PLATFORMID=linux_mips64_eb
5021         ;;
5022     mips64el)
5023         CPUNAME=GODSON64
5024         RTL_ARCH=MIPS64_EL
5025         EPM_FLAGS="-a mips64el"
5026         PLATFORMID=linux_mips64_el
5027         ;;
5028     mipsel)
5029         CPUNAME=GODSON
5030         RTL_ARCH=MIPS_EL
5031         EPM_FLAGS="-a mipsel"
5032         PLATFORMID=linux_mips_el
5033         ;;
5034     m68k)
5035         CPUNAME=M68K
5036         RTL_ARCH=M68K
5037         PLATFORMID=linux_m68k
5038         ;;
5039     powerpc)
5040         CPUNAME=POWERPC
5041         RTL_ARCH=PowerPC
5042         PLATFORMID=linux_powerpc
5043         ;;
5044     powerpc64)
5045         CPUNAME=POWERPC64
5046         RTL_ARCH=PowerPC_64
5047         PLATFORMID=linux_powerpc64
5048         ;;
5049     powerpc64le)
5050         CPUNAME=POWERPC64
5051         RTL_ARCH=PowerPC_64_LE
5052         PLATFORMID=linux_powerpc64_le
5053         ;;
5054     sparc)
5055         CPUNAME=SPARC
5056         RTL_ARCH=SPARC
5057         PLATFORMID=linux_sparc
5058         ;;
5059     sparc64)
5060         CPUNAME=SPARC64
5061         RTL_ARCH=SPARC64
5062         PLATFORMID=linux_sparc64
5063         ;;
5064     s390)
5065         CPUNAME=S390
5066         RTL_ARCH=S390
5067         PLATFORMID=linux_s390
5068         ;;
5069     s390x)
5070         CPUNAME=S390X
5071         RTL_ARCH=S390x
5072         PLATFORMID=linux_s390x
5073         ;;
5074     x86_64)
5075         CPUNAME=X86_64
5076         RTL_ARCH=X86_64
5077         PLATFORMID=linux_x86_64
5078         ;;
5079     *)
5080         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5081         ;;
5082     esac
5083     ;;
5085 linux-android*)
5086     COM=GCC
5087     OS=ANDROID
5088     RTL_OS=Android
5089     P_SEP=:
5091     case "$host_cpu" in
5093     arm|armel)
5094         CPUNAME=ARM
5095         RTL_ARCH=ARM_EABI
5096         PLATFORMID=android_arm_eabi
5097         ;;
5098     aarch64)
5099         CPUNAME=AARCH64
5100         RTL_ARCH=AARCH64
5101         PLATFORMID=android_aarch64
5102         ;;
5103     i*86)
5104         CPUNAME=INTEL
5105         RTL_ARCH=x86
5106         PLATFORMID=android_x86
5107         ;;
5108     x86_64)
5109         CPUNAME=X86_64
5110         RTL_ARCH=X86_64
5111         PLATFORMID=android_x86_64
5112         ;;
5113     *)
5114         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5115         ;;
5116     esac
5117     ;;
5119 *netbsd*)
5120     COM=GCC
5121     OS=NETBSD
5122     RTL_OS=NetBSD
5123     P_SEP=:
5125     case "$host_cpu" in
5126     i*86)
5127         CPUNAME=INTEL
5128         RTL_ARCH=x86
5129         PLATFORMID=netbsd_x86
5130         ;;
5131     powerpc)
5132         CPUNAME=POWERPC
5133         RTL_ARCH=PowerPC
5134         PLATFORMID=netbsd_powerpc
5135         ;;
5136     sparc)
5137         CPUNAME=SPARC
5138         RTL_ARCH=SPARC
5139         PLATFORMID=netbsd_sparc
5140         ;;
5141     x86_64)
5142         CPUNAME=X86_64
5143         RTL_ARCH=X86_64
5144         PLATFORMID=netbsd_x86_64
5145         ;;
5146     *)
5147         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5148         ;;
5149     esac
5150     ;;
5152 openbsd*)
5153     COM=GCC
5154     OS=OPENBSD
5155     RTL_OS=OpenBSD
5156     P_SEP=:
5158     case "$host_cpu" in
5159     i*86)
5160         CPUNAME=INTEL
5161         RTL_ARCH=x86
5162         PLATFORMID=openbsd_x86
5163         ;;
5164     x86_64)
5165         CPUNAME=X86_64
5166         RTL_ARCH=X86_64
5167         PLATFORMID=openbsd_x86_64
5168         ;;
5169     *)
5170         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5171         ;;
5172     esac
5173     SOLARINC="$SOLARINC -I/usr/local/include"
5174     ;;
5176 solaris*)
5177     COM=GCC
5178     OS=SOLARIS
5179     RTL_OS=Solaris
5180     P_SEP=:
5182     case "$host_cpu" in
5183     i*86)
5184         CPUNAME=INTEL
5185         RTL_ARCH=x86
5186         PLATFORMID=solaris_x86
5187         ;;
5188     sparc)
5189         CPUNAME=SPARC
5190         RTL_ARCH=SPARC
5191         PLATFORMID=solaris_sparc
5192         ;;
5193     sparc64)
5194         CPUNAME=SPARC64
5195         RTL_ARCH=SPARC64
5196         PLATFORMID=solaris_sparc64
5197         ;;
5198     *)
5199         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5200         ;;
5201     esac
5202     SOLARINC="$SOLARINC -I/usr/local/include"
5203     ;;
5205 emscripten*)
5206     COM=GCC
5207     OS=EMSCRIPTEN
5208     RTL_OS=Emscripten
5209     P_SEP=:
5211     case "$host_cpu" in
5212     wasm32|wasm64)
5213         ;;
5214     *)
5215         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5216         ;;
5217     esac
5218     CPUNAME=INTEL
5219     RTL_ARCH=x86
5220     PLATFORMID=linux_x86
5221     ;;
5224     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5225     ;;
5226 esac
5228 if test "$with_x" = "no"; then
5229     AC_MSG_ERROR([Use --disable-gui instead. How can we get rid of this option? No idea where it comes from.])
5232 DISABLE_GUI=""
5233 if test "$enable_gui" = "no"; then
5234     if test "$using_x11" != yes; then
5235         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5236     fi
5237     USING_X11=
5238     DISABLE_GUI=TRUE
5239 else
5240     AC_DEFINE(HAVE_FEATURE_UI)
5242 AC_SUBST(DISABLE_GUI)
5244 if test "$using_x11" = yes; then
5245     if test "$USING_X11" = TRUE; then
5246         AC_DEFINE(USING_X11)
5247     else
5248         disable_x11_tests
5249     fi
5250 else
5251     if test "$USING_X11" = TRUE; then
5252         AC_MSG_ERROR([Platform doesn't support X11 (\$using_x11), but \$USING_X11 is set!])
5253     fi
5256 WORKDIR="${BUILDDIR}/workdir"
5257 INSTDIR="${BUILDDIR}/instdir"
5258 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5259 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5260 SOLARINC="-I$SRC_ROOT/include $SOLARINC"
5261 AC_SUBST(COM)
5262 AC_SUBST(CPUNAME)
5263 AC_SUBST(RTL_OS)
5264 AC_SUBST(RTL_ARCH)
5265 AC_SUBST(EPM_FLAGS)
5266 AC_SUBST(USING_X11)
5267 AC_SUBST([INSTDIR])
5268 AC_SUBST([INSTROOT])
5269 AC_SUBST([INSTROOTBASE])
5270 AC_SUBST(OS)
5271 AC_SUBST(P_SEP)
5272 AC_SUBST(WORKDIR)
5273 AC_SUBST(PLATFORMID)
5274 AC_SUBST(WINDOWS_X64)
5275 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5277 if test "$OS" = WNT -a "$COM" = MSC; then
5278     case "$CPUNAME" in
5279     INTEL) CPPU_ENV=msci ;;
5280     X86_64) CPPU_ENV=mscx ;;
5281     AARCH64) CPPU_ENV=msca ;;
5282     *)
5283         AC_MSG_ERROR([Unknown \$CPUNAME '$CPUNAME' for $OS / $COM"])
5284         ;;
5285     esac
5286 else
5287     CPPU_ENV=gcc3
5289 AC_SUBST(CPPU_ENV)
5291 dnl ===================================================================
5292 dnl Test which package format to use
5293 dnl ===================================================================
5294 AC_MSG_CHECKING([which package format to use])
5295 if test -n "$with_package_format" -a "$with_package_format" != no; then
5296     for i in $with_package_format; do
5297         case "$i" in
5298         aix | bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5299             ;;
5300         *)
5301             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5302 aix - AIX software distribution
5303 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5304 deb - Debian software distribution
5305 pkg - Solaris software distribution
5306 rpm - RedHat software distribution
5308 LibreOffice additionally supports:
5309 archive - .tar.gz or .zip
5310 dmg - macOS .dmg
5311 installed - installation tree
5312 msi - Windows .msi
5313         ])
5314             ;;
5315         esac
5316     done
5317     # fakeroot is needed to ensure correct file ownerships/permissions
5318     # inside deb packages and tar archives created on Linux and Solaris.
5319     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5320         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5321         if test "$FAKEROOT" = "no"; then
5322             AC_MSG_ERROR(
5323                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5324         fi
5325     fi
5326     PKGFORMAT="$with_package_format"
5327     AC_MSG_RESULT([$PKGFORMAT])
5328 else
5329     PKGFORMAT=
5330     AC_MSG_RESULT([none])
5332 AC_SUBST(PKGFORMAT)
5334 dnl ===================================================================
5335 dnl handle help related options
5337 dnl If you change help related options, please update README.help
5338 dnl ===================================================================
5340 ENABLE_HTMLHELP=
5341 HELP_OMINDEX_PAGE=
5342 HELP_ONLINE=
5343 WITH_HELPPACKS=
5345 AC_MSG_CHECKING([which help to build])
5346 if test -n "$with_help" -a "$with_help" != "no"; then
5347     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5348     BUILD_TYPE="$BUILD_TYPE HELP"
5349     case "$with_help" in
5350     "html")
5351         ENABLE_HTMLHELP=TRUE
5352         WITH_HELPPACKS=TRUE
5353         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5354         AC_MSG_RESULT([HTML (local)])
5355         ;;
5356     "online")
5357         ENABLE_HTMLHELP=TRUE
5358         HELP_ONLINE=TRUE
5359         AC_MSG_RESULT([HTML (online)])
5360         ;;
5361     yes)
5362         WITH_HELPPACKS=TRUE
5363         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5364         AC_MSG_RESULT([XML (local)])
5365         ;;
5366     *)
5367         AC_MSG_ERROR([Unknown --with-help=$with_help])
5368         ;;
5369     esac
5370 else
5371     AC_MSG_RESULT([no])
5374 AC_MSG_CHECKING([if we need to build the help index tooling])
5375 if test "$with_help" = yes -o "$enable_extension_integration" != no; then
5376     BUILD_TYPE="$BUILD_TYPE HELPTOOLS"
5377     AC_MSG_RESULT([yes])
5378 else
5379     AC_MSG_RESULT([no])
5382 AC_MSG_CHECKING([whether to enable xapian-omega support for online help])
5383 if test -n "$with_omindex" -a "$with_omindex" != "no"; then
5384     if test "$HELP_ONLINE" != TRUE; then
5385         AC_MSG_ERROR([Can't build xapian-omega index without --help=online])
5386     fi
5387     case "$with_omindex" in
5388     "server")
5389         HELP_OMINDEX_PAGE=TRUE
5390         AC_MSG_RESULT([SERVER])
5391         ;;
5392     "noxap")
5393         AC_MSG_RESULT([NOXAP])
5394         ;;
5395     *)
5396         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5397         ;;
5398     esac
5399 else
5400     AC_MSG_RESULT([no])
5403 AC_MSG_CHECKING([whether to include the XML-help support])
5404 if test "$enable_xmlhelp" = yes; then
5405     BUILD_TYPE="$BUILD_TYPE XMLHELP"
5406     AC_DEFINE(HAVE_FEATURE_XMLHELP)
5407     AC_MSG_RESULT([yes])
5408 else
5409     if test "$with_help" = yes; then
5410         add_warning "Building the XML help, but LO with disabled xmlhelp support. Generated help can't be accessed from this LO build!"
5411     fi
5412     AC_MSG_RESULT([no])
5415 dnl Test whether to integrate helppacks into the product's installer
5416 AC_MSG_CHECKING([for helppack integration])
5417 if test -z "$WITH_HELPPACKS" -o "$with_helppack_integration" = no; then
5418     AC_MSG_RESULT([no integration])
5419 else
5420     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
5421     AC_MSG_RESULT([integration])
5424 AC_SUBST([ENABLE_HTMLHELP])
5425 AC_SUBST([HELP_OMINDEX_PAGE])
5426 AC_SUBST([HELP_ONLINE])
5427 # WITH_HELPPACKS is used only in configure
5429 dnl ===================================================================
5430 dnl Set up a different compiler to produce tools to run on the build
5431 dnl machine when doing cross-compilation
5432 dnl ===================================================================
5434 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5435 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5436 if test "$cross_compiling" = "yes"; then
5437     AC_MSG_CHECKING([for BUILD platform configuration])
5438     echo
5439     rm -rf CONF-FOR-BUILD config_build.mk
5440     mkdir CONF-FOR-BUILD
5441     # Here must be listed all files needed when running the configure script. In particular, also
5442     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5443     # keep them in the same order as there.
5444     (cd $SRC_ROOT && tar cf - \
5445         config.guess \
5446         bin/get_config_variables \
5447         solenv/bin/getcompver.awk \
5448         solenv/inc/langlist.mk \
5449         download.lst \
5450         config_host.mk.in \
5451         config_host_lang.mk.in \
5452         Makefile.in \
5453         bin/bffvalidator.sh.in \
5454         bin/odfvalidator.sh.in \
5455         bin/officeotron.sh.in \
5456         hardened_runtime.xcent.in \
5457         instsetoo_native/util/openoffice.lst.in \
5458         config_host/*.in \
5459         sysui/desktop/macosx/Info.plist.in \
5460         .vscode/vs-code-template.code-workspace.in \
5461         ) \
5462     | (cd CONF-FOR-BUILD && tar xf -)
5463     cp configure CONF-FOR-BUILD
5464     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5465     (
5466     unset COM USING_X11 OS CPUNAME
5467     unset CC CXX SYSBASE CFLAGS
5468     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5469     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5470     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5471     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5472     if test -n "$CC_FOR_BUILD"; then
5473         export CC="$CC_FOR_BUILD"
5474         CC_BASE=`first_arg_basename "$CC"`
5475     fi
5476     if test -n "$CXX_FOR_BUILD"; then
5477         export CXX="$CXX_FOR_BUILD"
5478         CXX_BASE=`first_arg_basename "$CXX"`
5479     fi
5480     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5481     cd CONF-FOR-BUILD
5483     # Handle host configuration, which affects the cross-toolset too
5484     sub_conf_opts=""
5485     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5486     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5487     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5488     if test -n "$ENABLE_JAVA"; then
5489         case "$_os" in
5490         iOS) sub_conf_opts="$sub_conf_opts --without-java" ;; # force it off, like it used to be
5491         Android)
5492             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5493             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5494             ;;
5495         *)
5496             if test -z "$with_jdk_home"; then
5497                 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.])
5498             fi
5499             ;;
5500         esac
5501     else
5502         sub_conf_opts="$sub_conf_opts --without-java"
5503     fi
5504     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5505     test "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" && sub_conf_opts="$sub_conf_opts --with-system-icu"
5506     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no --disable-database-connectivity"
5507     test -n "$with_help" -a "$with_help" != "no" && sub_conf_opts="$sub_conf_opts --with-help=$with_help"
5508     test "$enable_extensions" = yes || sub_conf_opts="$sub_conf_opts --disable-extensions"
5509     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5511     # Don't bother having configure look for stuff not needed for the build platform anyway
5512     sub_conf_defaults=" \
5513         --build="$build_alias" \
5514         --disable-cairo-canvas \
5515         --disable-cups \
5516         --disable-firebird-sdbc \
5517         --disable-gpgmepp \
5518         --disable-gstreamer-1-0 \
5519         --disable-gtk3 \
5520         --disable-gtk4 \
5521         --disable-mariadb-sdbc \
5522         --disable-nss \
5523         --disable-online-update \
5524         --disable-opencl \
5525         --disable-pdfimport \
5526         --disable-postgresql-sdbc \
5527         --disable-skia \
5528         --enable-icecream="$enable_icecream" \
5529         --without-doxygen \
5530         --without-webdav \
5531         --with-parallelism="$with_parallelism" \
5532         --with-theme="$with_theme" \
5533         --with-tls=openssl \
5535     echo "    Running CONF-FOR-BUILD/configure" $sub_conf_defaults $sub_conf_opts $with_build_platform_configure_options --srcdir=$srcdir
5536     ./configure \
5537         $sub_conf_defaults \
5538         $sub_conf_opts \
5539         $with_build_platform_configure_options \
5540         --srcdir=$srcdir \
5541         2>&1 | sed -e 's/^/    /'
5542     if test [${PIPESTATUS[0]}] -ne 0; then
5543         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5544     fi
5546     # filter permitted build targets
5547     PERMITTED_BUILD_TARGETS="
5548         AVMEDIA
5549         BOOST
5550         CAIRO
5551         CLUCENE
5552         CUCKOO
5553         CURL
5554         DBCONNECTIVITY
5555         DESKTOP
5556         DYNLOADING
5557         EPOXY
5558         EXPAT
5559         GLM
5560         GRAPHITE
5561         HARFBUZZ
5562         HELPTOOLS
5563         ICU
5564         LCMS2
5565         LIBJPEG_TURBO
5566         LIBLANGTAG
5567         LibO
5568         LIBFFI
5569         LIBPN
5570         LIBXML2
5571         LIBXSLT
5572         MDDS
5573         NATIVE
5574         OPENSSL
5575         ORCUS
5576         PYTHON
5577         SCRIPTING
5578         ZLIB
5580     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5581     # newlined lists, to use grep as a filter
5582     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5583     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5584     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5585     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5587     cp config_host.mk ../config_build.mk
5588     cp config_host_lang.mk ../config_build_lang.mk
5589     mv config.log ../config.Build.log
5590     mkdir -p ../config_build
5591     mv config_host/*.h ../config_build
5592     test -f "$WARNINGS_FILE" && mv "$WARNINGS_FILE" "../$WARNINGS_FILE_FOR_BUILD"
5594     # all these will get a _FOR_BUILD postfix
5595     DIRECT_FOR_BUILD_SETTINGS="
5596         CC
5597         CPPU_ENV
5598         CXX
5599         ILIB
5600         JAVA_HOME
5601         JAVAIFLAGS
5602         JDK
5603         LIBO_BIN_FOLDER
5604         LIBO_LIB_FOLDER
5605         LIBO_URE_LIB_FOLDER
5606         LIBO_URE_MISC_FOLDER
5607         OS
5608         SDKDIRNAME
5609         SYSTEM_LIBXML
5610         SYSTEM_LIBXSLT
5612     # these overwrite host config with build config
5613     OVERWRITING_SETTINGS="
5614         ANT
5615         ANT_HOME
5616         ANT_LIB
5617         HSQLDB_USE_JDBC_4_1
5618         JAVA_CLASSPATH_NOT_SET
5619         JAVA_SOURCE_VER
5620         JAVA_TARGET_VER
5621         JAVACFLAGS
5622         JAVACOMPILER
5623         JAVADOC
5624         JAVADOCISGJDOC
5626     # these need some special handling
5627     EXTRA_HANDLED_SETTINGS="
5628         INSTDIR
5629         INSTROOT
5630         PATH
5631         WORKDIR
5633     OLD_PATH=$PATH
5634     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
5635     BUILD_PATH=$PATH
5636     PATH=$OLD_PATH
5638     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
5639     echo "$line" >>build-config
5641     for V in $DIRECT_FOR_BUILD_SETTINGS; do
5642         VV='$'$V
5643         VV=`eval "echo $VV"`
5644         if test -n "$VV"; then
5645             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
5646             echo "$line" >>build-config
5647         fi
5648     done
5650     for V in $OVERWRITING_SETTINGS; do
5651         VV='$'$V
5652         VV=`eval "echo $VV"`
5653         if test -n "$VV"; then
5654             line=${V}='${'${V}:-$VV'}'
5655             echo "$line" >>build-config
5656         fi
5657     done
5659     for V in INSTDIR INSTROOT WORKDIR; do
5660         VV='$'$V
5661         VV=`eval "echo $VV"`
5662         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
5663         if test -n "$VV"; then
5664             line="${V}_FOR_BUILD='$VV'"
5665             echo "$line" >>build-config
5666         fi
5667     done
5669     )
5670     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
5671     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])
5672     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
5673              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
5675     eval `cat CONF-FOR-BUILD/build-config`
5677     AC_MSG_RESULT([checking for BUILD platform configuration... done])
5679     rm -rf CONF-FOR-BUILD
5680 else
5681     OS_FOR_BUILD="$OS"
5682     CC_FOR_BUILD="$CC"
5683     CPPU_ENV_FOR_BUILD="$CPPU_ENV"
5684     CXX_FOR_BUILD="$CXX"
5685     INSTDIR_FOR_BUILD="$INSTDIR"
5686     INSTROOT_FOR_BUILD="$INSTROOT"
5687     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
5688     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
5689     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
5690     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
5691     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
5692     WORKDIR_FOR_BUILD="$WORKDIR"
5694 AC_SUBST(OS_FOR_BUILD)
5695 AC_SUBST(INSTDIR_FOR_BUILD)
5696 AC_SUBST(INSTROOT_FOR_BUILD)
5697 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
5698 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
5699 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
5700 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
5701 AC_SUBST(SDKDIRNAME_FOR_BUILD)
5702 AC_SUBST(WORKDIR_FOR_BUILD)
5703 AC_SUBST(CC_FOR_BUILD)
5704 AC_SUBST(CXX_FOR_BUILD)
5705 AC_SUBST(CPPU_ENV_FOR_BUILD)
5707 dnl ===================================================================
5708 dnl Check for syslog header
5709 dnl ===================================================================
5710 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
5712 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
5713 dnl ===================================================================
5714 AC_MSG_CHECKING([whether to turn warnings to errors])
5715 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
5716     ENABLE_WERROR="TRUE"
5717     PYTHONWARNINGS="error"
5718     AC_MSG_RESULT([yes])
5719 else
5720     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
5721         ENABLE_WERROR="TRUE"
5722         PYTHONWARNINGS="error"
5723         AC_MSG_RESULT([yes])
5724     else
5725         AC_MSG_RESULT([no])
5726     fi
5728 AC_SUBST(ENABLE_WERROR)
5729 AC_SUBST(PYTHONWARNINGS)
5731 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
5732 dnl ===================================================================
5733 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
5734 if test -z "$enable_assert_always_abort"; then
5735    if test "$ENABLE_DEBUG" = TRUE; then
5736        enable_assert_always_abort=yes
5737    else
5738        enable_assert_always_abort=no
5739    fi
5741 if test "$enable_assert_always_abort" = "yes"; then
5742     ASSERT_ALWAYS_ABORT="TRUE"
5743     AC_MSG_RESULT([yes])
5744 else
5745     ASSERT_ALWAYS_ABORT="FALSE"
5746     AC_MSG_RESULT([no])
5748 AC_SUBST(ASSERT_ALWAYS_ABORT)
5750 # Determine whether to use ooenv for the instdir installation
5751 # ===================================================================
5752 if test $_os != "WINNT" -a $_os != "Darwin"; then
5753     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
5754     if test -z "$enable_ooenv"; then
5755         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5756             enable_ooenv=yes
5757         else
5758             enable_ooenv=no
5759         fi
5760     fi
5761     if test "$enable_ooenv" = "no"; then
5762         AC_MSG_RESULT([no])
5763     else
5764         ENABLE_OOENV="TRUE"
5765         AC_MSG_RESULT([yes])
5766     fi
5768 AC_SUBST(ENABLE_OOENV)
5770 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
5771     if test "$enable_qt5" = "no"; then
5772         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
5773     else
5774         enable_qt5=yes
5775     fi
5778 dnl ===================================================================
5779 dnl check for cups support
5780 dnl ===================================================================
5782 AC_MSG_CHECKING([whether to enable CUPS support])
5783 if test "$test_cups" = yes -a "$enable_cups" != no; then
5784     ENABLE_CUPS=TRUE
5785     AC_MSG_RESULT([yes])
5787     AC_MSG_CHECKING([whether cups support is present])
5788     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
5789     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
5790     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
5791         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
5792     fi
5793 else
5794     AC_MSG_RESULT([no])
5797 AC_SUBST(ENABLE_CUPS)
5799 # fontconfig checks
5800 if test "$using_freetype_fontconfig" = yes; then
5801     AC_MSG_CHECKING([which fontconfig to use])
5803 if test "$using_freetype_fontconfig" = yes -a "$test_system_fontconfig" != no; then
5804     AC_MSG_RESULT([external])
5805     PKG_CHECK_MODULES([FONTCONFIG], [fontconfig >= 2.4.1])
5806     SYSTEM_FONTCONFIG=TRUE
5807     FilterLibs "${FONTCONFIG_LIBS}"
5808     FONTCONFIG_LIBS="${filteredlibs}"
5809 elif test "$using_freetype_fontconfig" = yes; then
5810     AC_MSG_RESULT([internal])
5811     BUILD_TYPE="$BUILD_TYPE FONTCONFIG"
5813 AC_SUBST(FONTCONFIG_CFLAGS)
5814 AC_SUBST(FONTCONFIG_LIBS)
5815 AC_SUBST([SYSTEM_FONTCONFIG])
5817 dnl whether to find & fetch external tarballs?
5818 dnl ===================================================================
5819 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
5820    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
5821        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
5822    else
5823        TARFILE_LOCATION="$LODE_HOME/ext_tar"
5824    fi
5826 if test -z "$TARFILE_LOCATION"; then
5827     if test -d "$SRC_ROOT/src" ; then
5828         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
5829         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
5830     fi
5831     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
5832 else
5833     AbsolutePath "$TARFILE_LOCATION"
5834     PathFormat "${absolute_path}"
5835     TARFILE_LOCATION="${formatted_path}"
5837 AC_SUBST(TARFILE_LOCATION)
5839 AC_MSG_CHECKING([whether we want to fetch tarballs])
5840 if test "$enable_fetch_external" != "no"; then
5841     if test "$with_all_tarballs" = "yes"; then
5842         AC_MSG_RESULT([yes, all of them])
5843         DO_FETCH_TARBALLS="ALL"
5844     else
5845         AC_MSG_RESULT([yes, if we use them])
5846         DO_FETCH_TARBALLS="TRUE"
5847     fi
5848 else
5849     AC_MSG_RESULT([no])
5850     DO_FETCH_TARBALLS=
5852 AC_SUBST(DO_FETCH_TARBALLS)
5854 dnl Test whether to include MySpell dictionaries
5855 dnl ===================================================================
5856 AC_MSG_CHECKING([whether to include MySpell dictionaries])
5857 if test "$with_myspell_dicts" = "yes"; then
5858     AC_MSG_RESULT([yes])
5859     WITH_MYSPELL_DICTS=TRUE
5860     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
5861     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
5862 else
5863     AC_MSG_RESULT([no])
5864     WITH_MYSPELL_DICTS=
5866 AC_SUBST(WITH_MYSPELL_DICTS)
5868 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
5869 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
5870     if test "$with_system_dicts" = yes; then
5871         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
5872     fi
5873     with_system_dicts=no
5876 AC_MSG_CHECKING([whether to use dicts from external paths])
5877 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
5878     AC_MSG_RESULT([yes])
5879     SYSTEM_DICTS=TRUE
5880     AC_MSG_CHECKING([for spelling dictionary directory])
5881     if test -n "$with_external_dict_dir"; then
5882         DICT_SYSTEM_DIR=file://$with_external_dict_dir
5883     else
5884         DICT_SYSTEM_DIR=file:///usr/share/hunspell
5885         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
5886             DICT_SYSTEM_DIR=file:///usr/share/myspell
5887         fi
5888     fi
5889     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
5890     AC_MSG_CHECKING([for hyphenation patterns directory])
5891     if test -n "$with_external_hyph_dir"; then
5892         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
5893     else
5894         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
5895     fi
5896     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
5897     AC_MSG_CHECKING([for thesaurus directory])
5898     if test -n "$with_external_thes_dir"; then
5899         THES_SYSTEM_DIR=file://$with_external_thes_dir
5900     else
5901         THES_SYSTEM_DIR=file:///usr/share/mythes
5902     fi
5903     AC_MSG_RESULT([$THES_SYSTEM_DIR])
5904 else
5905     AC_MSG_RESULT([no])
5906     SYSTEM_DICTS=
5908 AC_SUBST(SYSTEM_DICTS)
5909 AC_SUBST(DICT_SYSTEM_DIR)
5910 AC_SUBST(HYPH_SYSTEM_DIR)
5911 AC_SUBST(THES_SYSTEM_DIR)
5913 dnl ===================================================================
5914 dnl Precompiled headers.
5915 ENABLE_PCH=""
5916 AC_MSG_CHECKING([whether to enable pch feature])
5917 if test -z "$enable_pch"; then
5918     if test "$_os" = "WINNT"; then
5919         # Enabled by default on Windows.
5920         enable_pch=yes
5921     else
5922         enable_pch=no
5923     fi
5925 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
5926     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
5928 if test "$enable_pch" = "system"; then
5929     ENABLE_PCH="1"
5930     AC_MSG_RESULT([yes (system headers)])
5931 elif test "$enable_pch" = "base"; then
5932     ENABLE_PCH="2"
5933     AC_MSG_RESULT([yes (system and base headers)])
5934 elif test "$enable_pch" = "normal"; then
5935     ENABLE_PCH="3"
5936     AC_MSG_RESULT([yes (normal)])
5937 elif test "$enable_pch" = "full"; then
5938     ENABLE_PCH="4"
5939     AC_MSG_RESULT([yes (full)])
5940 elif test "$enable_pch" = "yes"; then
5941     # Pick a suitable default.
5942     if test "$GCC" = "yes"; then
5943         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
5944         # while making the PCHs larger and rebuilds more likely.
5945         ENABLE_PCH="2"
5946         AC_MSG_RESULT([yes (system and base headers)])
5947     else
5948         # With MSVC the highest level makes a significant difference,
5949         # and it was the default when there used to be no PCH levels.
5950         ENABLE_PCH="4"
5951         AC_MSG_RESULT([yes (full)])
5952     fi
5953 elif test "$enable_pch" = "no"; then
5954     AC_MSG_RESULT([no])
5955 else
5956     AC_MSG_ERROR([Unknown value for --enable-pch])
5958 AC_SUBST(ENABLE_PCH)
5959 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
5960 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
5961     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
5962     if test "$CCACHE_BIN" != "not found"; then
5963         AC_MSG_CHECKING([ccache version])
5964         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
5965         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
5966         AC_MSG_RESULT([$CCACHE_VERSION])
5967         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
5968         if test "$CCACHE_NUMVER" -gt "030701"; then
5969             AC_MSG_RESULT([yes])
5970         else
5971             AC_MSG_RESULT([no (not newer than 3.7.1)])
5972             CCACHE_DEPEND_MODE=
5973         fi
5974     fi
5977 PCH_INSTANTIATE_TEMPLATES=
5978 if test -n "$ENABLE_PCH"; then
5979     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
5980     save_CFLAGS=$CFLAGS
5981     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
5982     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
5983     CFLAGS=$save_CFLAGS
5984     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
5985         AC_MSG_RESULT(yes)
5986     else
5987         AC_MSG_RESULT(no)
5988     fi
5990 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
5992 BUILDING_PCH_WITH_OBJ=
5993 if test -n "$ENABLE_PCH"; then
5994     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
5995     save_CFLAGS=$CFLAGS
5996     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
5997     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
5998     CFLAGS=$save_CFLAGS
5999     if test -n "$BUILDING_PCH_WITH_OBJ"; then
6000         AC_MSG_RESULT(yes)
6001     else
6002         AC_MSG_RESULT(no)
6003     fi
6005 AC_SUBST(BUILDING_PCH_WITH_OBJ)
6007 PCH_CODEGEN=
6008 PCH_NO_CODEGEN=
6009 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6010     AC_MSG_CHECKING([whether $CC supports -fpch-codegen])
6011     save_CFLAGS=$CFLAGS
6012     CFLAGS="$CFLAGS -Werror -fpch-codegen"
6013     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6014         [
6015         PCH_CODEGEN="-fpch-codegen"
6016         PCH_NO_CODEGEN="-fno-pch-codegen"
6017         ],[])
6018     CFLAGS=$save_CFLAGS
6019     if test -n "$PCH_CODEGEN"; then
6020         AC_MSG_RESULT(yes)
6021     else
6022         AC_MSG_RESULT(no)
6023     fi
6025 AC_SUBST(PCH_CODEGEN)
6026 AC_SUBST(PCH_NO_CODEGEN)
6027 PCH_DEBUGINFO=
6028 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6029     AC_MSG_CHECKING([whether $CC supports -fpch-debuginfo])
6030     save_CFLAGS=$CFLAGS
6031     CFLAGS="$CFLAGS -Werror -fpch-debuginfo"
6032     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="-fpch-debuginfo" ],[])
6033     CFLAGS=$save_CFLAGS
6034     if test -n "$PCH_DEBUGINFO"; then
6035         AC_MSG_RESULT(yes)
6036     else
6037         AC_MSG_RESULT(no)
6038     fi
6040 AC_SUBST(PCH_DEBUGINFO)
6042 TAB=`printf '\t'`
6044 AC_MSG_CHECKING([the GNU Make version])
6045 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
6046 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6047 if test "$_make_longver" -ge "038200"; then
6048     AC_MSG_RESULT([$GNUMAKE $_make_version])
6050 elif test "$_make_longver" -ge "038100"; then
6051     if test "$build_os" = "cygwin"; then
6052         AC_MSG_ERROR([failed ($GNUMAKE version >= 3.82 needed])
6053     fi
6054     AC_MSG_RESULT([$GNUMAKE $_make_version])
6056     dnl ===================================================================
6057     dnl Search all the common names for sha1sum
6058     dnl ===================================================================
6059     AC_CHECK_PROGS(SHA1SUM, sha1sum sha1 shasum openssl)
6060     if test -z "$SHA1SUM"; then
6061         AC_MSG_ERROR([install the appropriate SHA-1 checksumming program for this OS])
6062     elif test "$SHA1SUM" = "openssl"; then
6063         SHA1SUM="openssl sha1"
6064     fi
6065     AC_MSG_CHECKING([for GNU Make bug 20033])
6066     TESTGMAKEBUG20033=`mktemp -d tmp.XXXXXX`
6067     $SED -e "s/<TAB>/$TAB/g" > $TESTGMAKEBUG20033/Makefile << EOF
6068 A := \$(wildcard *.a)
6070 .PHONY: all
6071 all: \$(A:.a=.b)
6072 <TAB>@echo survived bug20033.
6074 .PHONY: setup
6075 setup:
6076 <TAB>@touch 1.a 2.a 3.a 4.a 5.a 6.a
6078 define d1
6079 @echo lala \$(1)
6080 @sleep 1
6081 endef
6083 define d2
6084 @echo tyty \$(1)
6085 @sleep 1
6086 endef
6088 %.b : %.a
6089 <TAB>\$(eval CHECKSUM := \$(word 1,\$(shell cat \$^ | $SHA1SUM))) \$(if \$(wildcard \$(CACHEDIR)/\$(CHECKSUM)),\
6090 <TAB>\$(call d1,\$(CHECKSUM)),\
6091 <TAB>\$(call d2,\$(CHECKSUM)))
6093     if test -z "`(cd $TESTGMAKEBUG20033 && $GNUMAKE setup && $GNUMAKE -j)|grep survived`"; then
6094         no_parallelism_make="YES"
6095         AC_MSG_RESULT([yes, disable parallelism])
6096     else
6097         AC_MSG_RESULT([no, keep parallelism enabled])
6098     fi
6099     rm -rf $TESTGMAKEBUG20033
6100 else
6101     AC_MSG_ERROR([failed ($GNUMAKE version >= 3.81 needed])
6104 # find if gnumake support file function
6105 AC_MSG_CHECKING([whether GNU Make supports the 'file' function])
6106 TESTGMAKEFILEFUNC="`mktemp -d -t tst.XXXXXX`"
6107 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6108     TESTGMAKEFILEFUNC=`cygpath -m $TESTGMAKEFILEFUNC`
6110 $SED -e "s/<TAB>/$TAB/" > $TESTGMAKEFILEFUNC/Makefile << EOF
6111 \$(file >test.txt,Success )
6113 .PHONY: all
6114 all:
6115 <TAB>@cat test.txt
6118 $GNUMAKE -C $TESTGMAKEFILEFUNC 2>/dev/null 1>&2
6119 if test -f $TESTGMAKEFILEFUNC/test.txt; then
6120     HAVE_GNUMAKE_FILE_FUNC=TRUE
6121     AC_MSG_RESULT([yes])
6122 else
6123     AC_MSG_RESULT([no])
6125 rm -rf $TESTGMAKEFILEFUNC
6126 AC_SUBST(HAVE_GNUMAKE_FILE_FUNC)
6128 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6129 STALE_MAKE=
6130 if test "$_make_ver_check" = ""; then
6131    STALE_MAKE=TRUE
6134 HAVE_LD_HASH_STYLE=FALSE
6135 WITH_LINKER_HASH_STYLE=
6136 AC_MSG_CHECKING([for --hash-style gcc linker support])
6137 if test "$GCC" = "yes"; then
6138     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6139         hash_styles="gnu sysv"
6140     elif test "$with_linker_hash_style" = "no"; then
6141         hash_styles=
6142     else
6143         hash_styles="$with_linker_hash_style"
6144     fi
6146     for hash_style in $hash_styles; do
6147         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6148         hash_style_ldflags_save=$LDFLAGS
6149         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6151         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6152             [
6153 #include <stdio.h>
6154             ],[
6155 printf ("");
6156             ])],
6157             [
6158                   HAVE_LD_HASH_STYLE=TRUE
6159                   WITH_LINKER_HASH_STYLE=$hash_style
6160             ],
6161             [HAVE_LD_HASH_STYLE=FALSE],
6162             [HAVE_LD_HASH_STYLE=FALSE])
6163         LDFLAGS=$hash_style_ldflags_save
6164     done
6166     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6167         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6168     else
6169         AC_MSG_RESULT( no )
6170     fi
6171     LDFLAGS=$hash_style_ldflags_save
6172 else
6173     AC_MSG_RESULT( no )
6175 AC_SUBST(HAVE_LD_HASH_STYLE)
6176 AC_SUBST(WITH_LINKER_HASH_STYLE)
6178 dnl ===================================================================
6179 dnl Check whether there's a Perl version available.
6180 dnl ===================================================================
6181 if test -z "$with_perl_home"; then
6182     AC_PATH_PROG(PERL, perl)
6183 else
6184     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6185     _perl_path="$with_perl_home/bin/perl"
6186     if test -x "$_perl_path"; then
6187         PERL=$_perl_path
6188     else
6189         AC_MSG_ERROR([$_perl_path not found])
6190     fi
6193 dnl ===================================================================
6194 dnl Testing for Perl version 5 or greater.
6195 dnl $] is the Perl version variable, it is returned as an integer
6196 dnl ===================================================================
6197 if test "$PERL"; then
6198     AC_MSG_CHECKING([the Perl version])
6199     ${PERL} -e "exit($]);"
6200     _perl_version=$?
6201     if test "$_perl_version" -lt 5; then
6202         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6203     fi
6204     AC_MSG_RESULT([Perl $_perl_version])
6205 else
6206     AC_MSG_ERROR([Perl not found, install Perl 5])
6209 dnl ===================================================================
6210 dnl Testing for required Perl modules
6211 dnl ===================================================================
6213 AC_MSG_CHECKING([for required Perl modules])
6214 perl_use_string="use Cwd ; use Digest::MD5"
6215 if test "$_os" = "WINNT"; then
6216     if test -n "$PKGFORMAT"; then
6217         for i in $PKGFORMAT; do
6218             case "$i" in
6219             msi)
6220                 # for getting fonts versions to use in MSI
6221                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6222                 ;;
6223             esac
6224         done
6225     fi
6227 if test "$with_system_hsqldb" = "yes"; then
6228     perl_use_string="$perl_use_string ; use Archive::Zip"
6230 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6231     # OpenSSL needs that to build
6232     perl_use_string="$perl_use_string ; use FindBin"
6234 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6235     AC_MSG_RESULT([all modules found])
6236 else
6237     AC_MSG_RESULT([failed to find some modules])
6238     # Find out which modules are missing.
6239     for i in $perl_use_string; do
6240         if test "$i" != "use" -a "$i" != ";"; then
6241             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6242                 missing_perl_modules="$missing_perl_modules $i"
6243             fi
6244         fi
6245     done
6246     AC_MSG_ERROR([
6247     The missing Perl modules are: $missing_perl_modules
6248     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6251 dnl ===================================================================
6252 dnl Check for pkg-config
6253 dnl ===================================================================
6254 if test "$_os" != "WINNT"; then
6255     PKG_PROG_PKG_CONFIG
6258 if test "$_os" != "WINNT"; then
6260     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6261     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6262     # explicitly. Or put /path/to/compiler in PATH yourself.
6264     # Use wrappers for LTO
6265     if test "$ENABLE_LTO" = "TRUE" -a "$COM_IS_CLANG" != "TRUE"; then
6266         AC_CHECK_TOOL(AR,gcc-ar)
6267         AC_CHECK_TOOL(NM,gcc-nm)
6268         AC_CHECK_TOOL(RANLIB,gcc-ranlib)
6269     else
6270         AC_CHECK_TOOL(AR,ar)
6271         AC_CHECK_TOOL(NM,nm)
6272         AC_CHECK_TOOL(RANLIB,ranlib)
6273     fi
6274     AC_CHECK_TOOL(OBJDUMP,objdump)
6275     AC_CHECK_TOOL(READELF,readelf)
6276     AC_CHECK_TOOL(STRIP,strip)
6278 AC_SUBST(AR)
6279 AC_SUBST(LD)
6280 AC_SUBST(NM)
6281 AC_SUBST(OBJDUMP)
6282 AC_SUBST(PKG_CONFIG)
6283 AC_SUBST(PKG_CONFIG_PATH)
6284 AC_SUBST(PKG_CONFIG_LIBDIR)
6285 AC_SUBST(RANLIB)
6286 AC_SUBST(READELF)
6287 AC_SUBST(STRIP)
6289 dnl ===================================================================
6290 dnl pkg-config checks on macOS
6291 dnl ===================================================================
6293 if test $_os = Darwin; then
6294     AC_MSG_CHECKING([for bogus pkg-config])
6295     if test -n "$PKG_CONFIG"; then
6296         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6297             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6298         else
6299             if test "$enable_bogus_pkg_config" = "yes"; then
6300                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6301             else
6302                 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.])
6303             fi
6304         fi
6305     else
6306         AC_MSG_RESULT([no, good])
6307     fi
6310 find_csc()
6312     # Return value: $csctest
6314     unset csctest
6316     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client/InstallPath"
6317     if test -n "$regvalue"; then
6318         csctest=$regvalue
6319         return
6320     fi
6323 find_al()
6325     # Return value: $altest
6327     unset altest
6329     # We need this check to detect 4.6.1 or above.
6330     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6331         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools/InstallationFolder"
6332         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6333             altest=$regvalue
6334             return
6335         fi
6336     done
6338     for x in `ls /proc/registry32/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft\ SDKs/Windows`; do
6339         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools/InstallationFolder"
6340         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6341             altest=$regvalue
6342             return
6343         fi
6344     done
6347 find_dotnetsdk46()
6349     unset frametest
6351     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6; do
6352         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder"
6353         if test -n "$regvalue"; then
6354             frametest=$regvalue
6355             return
6356         fi
6357     done
6360 find_winsdk_version()
6362     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6363     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6365     unset winsdktest winsdkbinsubdir winsdklibsubdir
6367     case "$1" in
6368     8.0|8.0A)
6369         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
6370         if test -n "$regvalue"; then
6371             winsdktest=$regvalue
6372             winsdklibsubdir=win8
6373             return
6374         fi
6375         ;;
6376     8.1|8.1A)
6377         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot81"
6378         if test -n "$regvalue"; then
6379             winsdktest=$regvalue
6380             winsdklibsubdir=winv6.3
6381             return
6382         fi
6383         ;;
6384     10.0)
6385         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/InstallationFolder"
6386         if test -n "$regvalue"; then
6387             winsdktest=$regvalue
6388             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion"
6389             if test -n "$regvalue"; then
6390                 winsdkbinsubdir="$regvalue".0
6391                 winsdklibsubdir=$winsdkbinsubdir
6392                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6393                 local tmppath_unix=$(cygpath -u "$tmppath")
6394                 # test exist the SDK path
6395                 if test -d "$tmppath_unix"; then
6396                    # when path is convertible to a short path then path is okay
6397                    cygpath -d "$tmppath" >/dev/null 2>&1
6398                    if test $? -ne 0; then
6399                       AC_MSG_ERROR([Windows SDK doesn't have a 8.3 name, see NtfsDisable8dot3NameCreation])
6400                    fi
6401                 else
6402                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6403                 fi
6404             fi
6405             return
6406         fi
6407         ;;
6408     esac
6411 find_winsdk()
6413     # Return value: From find_winsdk_version
6415     unset winsdktest
6417     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6418         find_winsdk_version $ver
6419         if test -n "$winsdktest"; then
6420             return
6421         fi
6422     done
6425 find_msms()
6427     # Return value: $msmdir
6429     AC_MSG_CHECKING([for MSVC merge modules directory])
6430     local my_msm_files
6431     local my_msm_dir
6433     dnl Order my_msm_files in increasing order. Then check the directories returned
6434     dnl by ls in an inner loop; assuming they are also ordered in increasing order,
6435     dnl the result will be the highest MSM version found in the highest directory.
6437     case "$VCVER" in
6438         16.0 | 17.0)
6439         my_msm_files="Microsoft_VC141_CRT_x86.msm Microsoft_VC142_CRT_x86.msm ${my_msm_files}"
6440         ;;
6441     esac
6442     for f in $my_msm_files; do
6443         echo "$as_me:$LINENO: searching for $f" >&5
6444     done
6446     msmdir=
6447     case "$VCVER" in
6448     16.0 | 17.0)
6449         for f in ${my_msm_files}; do
6450             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6451                 my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6452                 echo "$as_me:$LINENO: looking for $my_msm_dir${f}])" >&5
6453                 if test -e "$my_msm_dir${f}"; then
6454                     msmdir=$my_msm_dir
6455                 fi
6456             done
6457         done
6458         ;;
6459     esac
6461     if test -n "$msmdir"; then
6462         msmdir=`cygpath -m "$msmdir"`
6463         AC_MSG_RESULT([$msmdir])
6464     else
6465         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6466             AC_MSG_FAILURE([not found])
6467         else
6468             AC_MSG_WARN([not found (check config.log)])
6469             add_warning "MSM none of ${my_msm_files} found"
6470         fi
6471     fi
6474 find_msvc_x64_dlls()
6476     # Return value: $msvcdllpath, $msvcdlls
6478     AC_MSG_CHECKING([for MSVC x64 DLL path])
6480     dnl Order crtver in increasing order. Then check the directories returned by
6481     dnl ls in an inner loop; assuming they are also ordered in increasing order,
6482     dnl the result will be the highest CRT version found in the highest directory.
6484     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6485     case "$VCVER" in
6486     16.0 | 17.0)
6487         for crtver in 141 142 143; do
6488             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6489                 echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT" >&5
6490                 if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"; then
6491                     msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"
6492                 fi
6493             done
6494         done
6495         ;;
6496     esac
6497     AC_MSG_RESULT([$msvcdllpath])
6498     AC_MSG_CHECKING([for MSVC x64 DLLs])
6499     msvcdlls="msvcp140.dll vcruntime140.dll"
6500     for dll in $msvcdlls; do
6501         if ! test -f "$msvcdllpath/$dll"; then
6502             AC_MSG_FAILURE([missing $dll])
6503         fi
6504     done
6505     AC_MSG_RESULT([found all ($msvcdlls)])
6508 dnl =========================================
6509 dnl Check for the Windows  SDK.
6510 dnl =========================================
6511 if test "$_os" = "WINNT"; then
6512     AC_MSG_CHECKING([for Windows SDK])
6513     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6514         find_winsdk
6515         WINDOWS_SDK_HOME=$winsdktest
6517         # normalize if found
6518         if test -n "$WINDOWS_SDK_HOME"; then
6519             WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
6520             WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
6521         fi
6523         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6524     fi
6526     if test -n "$WINDOWS_SDK_HOME"; then
6527         # Remove a possible trailing backslash
6528         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6530         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6531              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6532              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6533             have_windows_sdk_headers=yes
6534         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6535              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6536              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6537             have_windows_sdk_headers=yes
6538         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6539              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6540              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6541             have_windows_sdk_headers=yes
6542         else
6543             have_windows_sdk_headers=no
6544         fi
6546         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6547             have_windows_sdk_libs=yes
6548         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6549             have_windows_sdk_libs=yes
6550         else
6551             have_windows_sdk_libs=no
6552         fi
6554         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6555             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6556 the  Windows SDK are installed.])
6557         fi
6558     fi
6560     if test -z "$WINDOWS_SDK_HOME"; then
6561         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6562     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6563         WINDOWS_SDK_VERSION=80
6564         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6565     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6566         WINDOWS_SDK_VERSION=81
6567         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6568     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6569         WINDOWS_SDK_VERSION=10
6570         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6571     else
6572         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6573     fi
6574     PathFormat "$WINDOWS_SDK_HOME"
6575     WINDOWS_SDK_HOME="$formatted_path"
6576     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6577     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6578         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6579         if test -d "$WINDOWS_SDK_HOME/include/um"; then
6580             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6581         elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then
6582             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6583         fi
6584     fi
6586     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6587     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6588     dnl but not in v8.0), so allow this to be overridden with a
6589     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6590     dnl and configuration error if no WiLangId.vbs is found would arguably be
6591     dnl better, but I do not know under which conditions exactly it is needed by
6592     dnl msiglobal.pm:
6593     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6594         WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6595         WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6596         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6597             WINDOWS_SDK_WILANGID="${WINDOWS_SDK_HOME}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6598             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6599         fi
6600         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6601             WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6602             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6603         fi
6604         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6605             WINDOWS_SDK_WILANGID=$(cygpath -sm "C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs")
6606             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6607         fi
6608     fi
6609     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6610         if test -n "$with_package_format" -a "$with_package_format" != no; then
6611             for i in "$with_package_format"; do
6612                 if test "$i" = "msi"; then
6613                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6614                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6615                     fi
6616                 fi
6617             done
6618         fi
6619     fi
6621 AC_SUBST(WINDOWS_SDK_HOME)
6622 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6623 AC_SUBST(WINDOWS_SDK_VERSION)
6624 AC_SUBST(WINDOWS_SDK_WILANGID)
6626 if test "$build_os" = "cygwin"; then
6627     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6628     dnl dir, it also determines that dir's path w/o an arch segment if any,
6629     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6630     AC_MSG_CHECKING([for midl.exe])
6632     find_winsdk
6633     if test -n "$winsdkbinsubdir" \
6634         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6635     then
6636         MIDL_PATH=$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6637         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin/$winsdkbinsubdir
6638     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6639         MIDL_PATH=$winsdktest/Bin/$WIN_BUILD_ARCH
6640         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6641     elif test -f "$winsdktest/Bin/midl.exe"; then
6642         MIDL_PATH=$winsdktest/Bin
6643         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6644     fi
6645     if test ! -f "$MIDL_PATH/midl.exe"; then
6646         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6647     else
6648         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6649     fi
6651     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6652     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6654     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6655          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6656          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6657          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6658     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6659          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6660          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6661          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
6662     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
6663          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
6664          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6665          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
6666     else
6667         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
6668     fi
6670     dnl Check csc.exe
6671     AC_MSG_CHECKING([for csc.exe])
6672     find_csc
6673     if test -f "$csctest/csc.exe"; then
6674         CSC_PATH="$csctest"
6675     fi
6676     if test ! -f "$CSC_PATH/csc.exe"; then
6677         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
6678     else
6679         AC_MSG_RESULT([$CSC_PATH/csc.exe])
6680     fi
6682     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
6684     dnl Check al.exe
6685     AC_MSG_CHECKING([for al.exe])
6686     find_winsdk
6687     if test -n "$winsdkbinsubdir" \
6688         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
6689     then
6690         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
6691     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/al.exe"; then
6692         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
6693     elif test -f "$winsdktest/Bin/al.exe"; then
6694         AL_PATH="$winsdktest/Bin"
6695     fi
6697     if test -z "$AL_PATH"; then
6698         find_al
6699         if test -f "$altest/bin/al.exe"; then
6700             AL_PATH="$altest/bin"
6701         elif test -f "$altest/al.exe"; then
6702             AL_PATH="$altest"
6703         fi
6704     fi
6705     if test ! -f "$AL_PATH/al.exe"; then
6706         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
6707     else
6708         AC_MSG_RESULT([$AL_PATH/al.exe])
6709     fi
6711     AL_PATH=`win_short_path_for_make "$AL_PATH"`
6713     dnl Check mscoree.lib / .NET Framework dir
6714     AC_MSG_CHECKING(.NET Framework)
6715     find_dotnetsdk46
6716     PathFormat "$frametest"
6717     frametest="$formatted_path"
6718     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6719         DOTNET_FRAMEWORK_HOME="$frametest"
6720     else
6721         find_winsdk
6722         if test -f "$winsdktest/lib/mscoree.lib" -o -f "$winsdktest/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6723             DOTNET_FRAMEWORK_HOME="$winsdktest"
6724         fi
6725     fi
6726     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
6727         AC_MSG_ERROR([mscoree.lib not found])
6728     fi
6729     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
6731     PathFormat "$MIDL_PATH"
6732     MIDL_PATH="$formatted_path"
6734     PathFormat "$AL_PATH"
6735     AL_PATH="$formatted_path"
6737     PathFormat "$DOTNET_FRAMEWORK_HOME"
6738     DOTNET_FRAMEWORK_HOME="$formatted_path"
6740     PathFormat "$CSC_PATH"
6741     CSC_PATH="$formatted_path"
6744 dnl ===================================================================
6745 dnl Testing for C++ compiler and version...
6746 dnl ===================================================================
6748 if test "$_os" != "WINNT"; then
6749     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that
6750     save_CXXFLAGS=$CXXFLAGS
6751     AC_PROG_CXX
6752     CXXFLAGS=$save_CXXFLAGS
6753     if test -z "$CXX_BASE"; then
6754         CXX_BASE=`first_arg_basename "$CXX"`
6755     fi
6758 dnl check for GNU C++ compiler version
6759 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
6760     AC_MSG_CHECKING([the GNU C++ compiler version])
6762     _gpp_version=`$CXX -dumpversion`
6763     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
6765     if test "$_gpp_majmin" -lt "700"; then
6766         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
6767     else
6768         AC_MSG_RESULT([ok (g++ $_gpp_version)])
6769     fi
6771     dnl see https://code.google.com/p/android/issues/detail?id=41770
6772         glibcxx_threads=no
6773         AC_LANG_PUSH([C++])
6774         AC_REQUIRE_CPP
6775         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
6776         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
6777             #include <bits/c++config.h>]],[[
6778             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
6779             && !defined(_GLIBCXX__PTHREADS) \
6780             && !defined(_GLIBCXX_HAS_GTHREADS)
6781             choke me
6782             #endif
6783         ]])],[AC_MSG_RESULT([yes])
6784         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
6785         AC_LANG_POP([C++])
6786         if test $glibcxx_threads = yes; then
6787             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
6788         fi
6790 AC_SUBST(BOOST_CXXFLAGS)
6793 # prefx CXX with ccache if needed
6795 UNCACHED_CXX="$CXX"
6796 if test "$CCACHE" != ""; then
6797     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
6798     AC_LANG_PUSH([C++])
6799     save_CXXFLAGS=$CXXFLAGS
6800     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
6801     dnl an empty program will do, we're checking the compiler flags
6802     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
6803                       [use_ccache=yes], [use_ccache=no])
6804     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
6805         AC_MSG_RESULT([yes])
6806     else
6807         CXX="$CCACHE $CXX"
6808         CXX_BASE="ccache $CXX_BASE"
6809         AC_MSG_RESULT([no])
6810     fi
6811     CXXFLAGS=$save_CXXFLAGS
6812     AC_LANG_POP([C++])
6815 dnl ===================================================================
6816 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
6817 dnl ===================================================================
6819 if test "$_os" != "WINNT"; then
6820     AC_PROG_CXXCPP
6822     dnl Check whether there's a C pre-processor.
6823     AC_PROG_CPP
6827 dnl ===================================================================
6828 dnl Find integral type sizes and alignments
6829 dnl ===================================================================
6831 if test "$_os" != "WINNT"; then
6833     AC_CHECK_SIZEOF(long)
6834     AC_CHECK_SIZEOF(short)
6835     AC_CHECK_SIZEOF(int)
6836     AC_CHECK_SIZEOF(long long)
6837     AC_CHECK_SIZEOF(double)
6838     AC_CHECK_SIZEOF(void*)
6839     AC_CHECK_SIZEOF(size_t)
6841     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
6842     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
6843     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
6844     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
6845     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
6846     SIZEOF_SIZE_T=$ac_cv_sizeof_size_t
6848     dnl Allow build without AC_CHECK_ALIGNOF, grrr
6849     m4_pattern_allow([AC_CHECK_ALIGNOF])
6850     m4_ifdef([AC_CHECK_ALIGNOF],
6851         [
6852             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
6853             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
6854             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
6855             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
6856         ],
6857         [
6858             case "$_os-$host_cpu" in
6859             Linux-i686)
6860                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6861                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6862                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
6863                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
6864                 ;;
6865             Linux-x86_64)
6866                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6867                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6868                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
6869                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
6870                 ;;
6871             *)
6872                 if test -z "$ac_cv_alignof_short" -o \
6873                         -z "$ac_cv_alignof_int" -o \
6874                         -z "$ac_cv_alignof_long" -o \
6875                         -z "$ac_cv_alignof_double"; then
6876                    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.])
6877                 fi
6878                 ;;
6879             esac
6880         ])
6882     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
6883     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
6884     if test $ac_cv_sizeof_long -eq 8; then
6885         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
6886     elif test $ac_cv_sizeof_double -eq 8; then
6887         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
6888     else
6889         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
6890     fi
6892     dnl Check for large file support
6893     AC_SYS_LARGEFILE
6894     if test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
6895         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
6896     fi
6897     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
6898         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
6899     fi
6900 else
6901     # Hardcode for MSVC
6902     SAL_TYPES_SIZEOFSHORT=2
6903     SAL_TYPES_SIZEOFINT=4
6904     SAL_TYPES_SIZEOFLONG=4
6905     SAL_TYPES_SIZEOFLONGLONG=8
6906     if test $WIN_HOST_BITS -eq 32; then
6907         SAL_TYPES_SIZEOFPOINTER=4
6908         SIZEOF_SIZE_T=4
6909     else
6910         SAL_TYPES_SIZEOFPOINTER=8
6911         SIZEOF_SIZE_T=8
6912     fi
6913     SAL_TYPES_ALIGNMENT2=2
6914     SAL_TYPES_ALIGNMENT4=4
6915     SAL_TYPES_ALIGNMENT8=8
6916     LFS_CFLAGS=''
6918 AC_SUBST(LFS_CFLAGS)
6919 AC_SUBST(SIZEOF_SIZE_T)
6921 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
6922 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
6923 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
6924 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
6925 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
6926 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
6927 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
6928 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
6930 dnl ===================================================================
6931 dnl Check whether to enable runtime optimizations
6932 dnl ===================================================================
6933 ENABLE_RUNTIME_OPTIMIZATIONS=
6934 AC_MSG_CHECKING([whether to enable runtime optimizations])
6935 if test -z "$enable_runtime_optimizations"; then
6936     for i in $CC; do
6937         case $i in
6938         -fsanitize=*)
6939             enable_runtime_optimizations=no
6940             break
6941             ;;
6942         esac
6943     done
6945 if test "$enable_runtime_optimizations" != no; then
6946     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
6947     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
6948     AC_MSG_RESULT([yes])
6949 else
6950     AC_MSG_RESULT([no])
6952 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
6954 dnl ===================================================================
6955 dnl Check if valgrind headers are available
6956 dnl ===================================================================
6957 ENABLE_VALGRIND=
6958 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
6959     prev_cppflags=$CPPFLAGS
6960     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
6961     # or where does it come from?
6962     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
6963     AC_CHECK_HEADER([valgrind/valgrind.h],
6964         [ENABLE_VALGRIND=TRUE])
6965     CPPFLAGS=$prev_cppflags
6967 AC_SUBST([ENABLE_VALGRIND])
6968 if test -z "$ENABLE_VALGRIND"; then
6969     if test "$with_valgrind" = yes; then
6970         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
6971     fi
6972     VALGRIND_CFLAGS=
6974 AC_SUBST([VALGRIND_CFLAGS])
6977 dnl ===================================================================
6978 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
6979 dnl ===================================================================
6981 # We need at least the sys/sdt.h include header.
6982 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
6983 if test "$SDT_H_FOUND" = "TRUE"; then
6984     # Found sys/sdt.h header, now make sure the c++ compiler works.
6985     # Old g++ versions had problems with probes in constructors/destructors.
6986     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
6987     AC_LANG_PUSH([C++])
6988     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
6989     #include <sys/sdt.h>
6990     class ProbeClass
6991     {
6992     private:
6993       int& ref;
6994       const char *name;
6996     public:
6997       ProbeClass(int& v, const char *n) : ref(v), name(n)
6998       {
6999         DTRACE_PROBE2(_test_, cons, name, ref);
7000       }
7002       void method(int min)
7003       {
7004         DTRACE_PROBE3(_test_, meth, name, ref, min);
7005         ref -= min;
7006       }
7008       ~ProbeClass()
7009       {
7010         DTRACE_PROBE2(_test_, dest, name, ref);
7011       }
7012     };
7013     ]],[[
7014     int i = 64;
7015     DTRACE_PROBE1(_test_, call, i);
7016     ProbeClass inst = ProbeClass(i, "call");
7017     inst.method(24);
7018     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
7019           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
7020     AC_LANG_POP([C++])
7022 AC_CONFIG_HEADERS([config_host/config_probes.h])
7024 dnl ===================================================================
7025 dnl GCC features
7026 dnl ===================================================================
7027 HAVE_GCC_STACK_CLASH_PROTECTION=
7028 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7029     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
7030     save_CFLAGS=$CFLAGS
7031     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
7032     AC_LINK_IFELSE(
7033         [AC_LANG_PROGRAM(, [[return 0;]])],
7034         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
7035         [AC_MSG_RESULT([no])])
7036     CFLAGS=$save_CFLAGS
7038     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
7039     save_CFLAGS=$CFLAGS
7040     CFLAGS="$CFLAGS -Werror -mno-avx"
7041     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
7042     CFLAGS=$save_CFLAGS
7043     if test "$HAVE_GCC_AVX" = "TRUE"; then
7044         AC_MSG_RESULT([yes])
7045     else
7046         AC_MSG_RESULT([no])
7047     fi
7049     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
7050     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7051     int v = 0;
7052     if (__sync_add_and_fetch(&v, 1) != 1 ||
7053         __sync_sub_and_fetch(&v, 1) != 0)
7054         return 1;
7055     __sync_synchronize();
7056     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
7057         v != 1)
7058         return 1;
7059     return 0;
7060 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
7061     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
7062         AC_MSG_RESULT([yes])
7063         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
7064     else
7065         AC_MSG_RESULT([no])
7066     fi
7068     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
7069     AC_LANG_PUSH([C++])
7070     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7071             #include <cstddef>
7072             #include <cxxabi.h>
7073             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
7074         ])], [
7075             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
7076             AC_MSG_RESULT([yes])
7077         ], [AC_MSG_RESULT([no])])
7078     AC_LANG_POP([C++])
7080     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
7081     AC_LANG_PUSH([C++])
7082     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7083             #include <cstddef>
7084             #include <cxxabi.h>
7085             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7086         ])], [
7087             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7088             AC_MSG_RESULT([yes])
7089         ], [AC_MSG_RESULT([no])])
7090     AC_LANG_POP([C++])
7092     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7093     AC_LANG_PUSH([C++])
7094     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7095             #include <cxxabi.h>
7096             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7097         ])], [
7098             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7099             AC_MSG_RESULT([yes])
7100         ], [AC_MSG_RESULT([no])])
7101     AC_LANG_POP([C++])
7103     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7104     AC_LANG_PUSH([C++])
7105     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7106             #include <cstddef>
7107             #include <cxxabi.h>
7108             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7109         ])], [
7110             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7111             AC_MSG_RESULT([yes])
7112         ], [AC_MSG_RESULT([no])])
7113     AC_LANG_POP([C++])
7115     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7116     AC_LANG_PUSH([C++])
7117     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7118             #include <cstddef>
7119             #include <cxxabi.h>
7120             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7121         ])], [
7122             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7123             AC_MSG_RESULT([yes])
7124         ], [AC_MSG_RESULT([no])])
7125     AC_LANG_POP([C++])
7127     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7128     AC_LANG_PUSH([C++])
7129     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7130             #include <cxxabi.h>
7131             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7132         ])], [
7133             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7134             AC_MSG_RESULT([yes])
7135         ], [AC_MSG_RESULT([no])])
7136     AC_LANG_POP([C++])
7138     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7139     AC_LANG_PUSH([C++])
7140     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7141             #include <cxxabi.h>
7142             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7143         ])], [
7144             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7145             AC_MSG_RESULT([yes])
7146         ], [AC_MSG_RESULT([no])])
7147     AC_LANG_POP([C++])
7149     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7150     AC_LANG_PUSH([C++])
7151     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7152             #include <cxxabi.h>
7153             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7154         ])], [
7155             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7156             AC_MSG_RESULT([yes])
7157         ], [AC_MSG_RESULT([no])])
7158     AC_LANG_POP([C++])
7160     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info 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::__si_class_type_info); }
7166         ])], [
7167             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7168             AC_MSG_RESULT([yes])
7169         ], [AC_MSG_RESULT([no])])
7170     AC_LANG_POP([C++])
7172     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7173     AC_LANG_PUSH([C++])
7174     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7175             #include <cstddef>
7176             #include <cxxabi.h>
7177             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7178         ])], [
7179             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7180             AC_MSG_RESULT([yes])
7181         ], [AC_MSG_RESULT([no])])
7182     AC_LANG_POP([C++])
7185 AC_SUBST(HAVE_GCC_AVX)
7186 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7187 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7189 dnl ===================================================================
7190 dnl Identify the C++ library
7191 dnl ===================================================================
7193 AC_MSG_CHECKING([what the C++ library is])
7194 AC_LANG_PUSH([C++])
7195 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7196 #include <utility>
7197 #ifndef __GLIBCXX__
7198 foo bar
7199 #endif
7200 ]])],
7201     [CPP_LIBRARY=GLIBCXX
7202      cpp_library_name="GNU libstdc++"
7203     ],
7204     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7205 #include <utility>
7206 #ifndef _LIBCPP_VERSION
7207 foo bar
7208 #endif
7209 ]])],
7210     [CPP_LIBRARY=LIBCPP
7211      cpp_library_name="LLVM libc++"
7212      AC_DEFINE([HAVE_LIBCXX])
7213     ],
7214     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7215 #include <utility>
7216 #ifndef _MSC_VER
7217 foo bar
7218 #endif
7219 ]])],
7220     [CPP_LIBRARY=MSVCRT
7221      cpp_library_name="Microsoft"
7222     ],
7223     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7224 AC_MSG_RESULT([$cpp_library_name])
7225 AC_LANG_POP([C++])
7227 dnl ===================================================================
7228 dnl Check for gperf
7229 dnl ===================================================================
7230 AC_PATH_PROG(GPERF, gperf)
7231 if test -z "$GPERF"; then
7232     AC_MSG_ERROR([gperf not found but needed. Install it.])
7234 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7235     GPERF=`cygpath -m $GPERF`
7237 AC_MSG_CHECKING([whether gperf is new enough])
7238 my_gperf_ver1=$($GPERF --version | head -n 1)
7239 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7240 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7241 if test "$my_gperf_ver3" -ge 301; then
7242     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7243 else
7244     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7246 AC_SUBST(GPERF)
7248 dnl ===================================================================
7249 dnl Check for system libcmis
7250 dnl ===================================================================
7251 # libcmis requires curl and we can't build curl for iOS
7252 if test "$test_cmis" = "yes" -a "$enable_cmis" = "yes"; then
7253     libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.5 >= 0.5.2])
7254     ENABLE_LIBCMIS=TRUE
7255 else
7256     ENABLE_LIBCMIS=
7258 AC_SUBST(ENABLE_LIBCMIS)
7260 dnl ===================================================================
7261 dnl C++11
7262 dnl ===================================================================
7264 AC_MSG_CHECKING([whether $CXX_BASE supports C++17])
7265 CXXFLAGS_CXX11=
7266 if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7267     if test "$with_latest_c__" = yes; then
7268         CXXFLAGS_CXX11=-std:c++latest
7269     else
7270         CXXFLAGS_CXX11=-std:c++17
7271     fi
7272     CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus"
7273 elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7274     my_flags='-std=c++17 -std=c++1z'
7275     if test "$with_latest_c__" = yes; then
7276         my_flags="-std=c++23 -std=c++2b -std=c++20 -std=c++2a $my_flags"
7277     fi
7278     for flag in $my_flags; do
7279         if test "$COM" = MSC; then
7280             flag="-Xclang $flag"
7281         fi
7282         save_CXXFLAGS=$CXXFLAGS
7283         CXXFLAGS="$CXXFLAGS $flag -Werror"
7284         if test "$SYSTEM_LIBCMIS" = TRUE; then
7285             CXXFLAGS="$CXXFLAGS -DSYSTEM_LIBCMIS $LIBCMIS_CFLAGS"
7286         fi
7287         AC_LANG_PUSH([C++])
7288         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7289             #include <algorithm>
7290             #include <functional>
7291             #include <vector>
7293             #if defined SYSTEM_LIBCMIS
7294             // See ucb/source/ucp/cmis/auth_provider.hxx:
7295             #if !defined __clang__
7296             #pragma GCC diagnostic push
7297             #pragma GCC diagnostic ignored "-Wdeprecated"
7298             #pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
7299             #endif
7300             #include <libcmis/libcmis.hxx>
7301             #if !defined __clang__
7302             #pragma GCC diagnostic pop
7303             #endif
7304             #endif
7306             void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7307                 std::sort(v.begin(), v.end(), fn);
7308             }
7309             ]])],[CXXFLAGS_CXX11=$flag])
7310         AC_LANG_POP([C++])
7311         CXXFLAGS=$save_CXXFLAGS
7312         if test -n "$CXXFLAGS_CXX11"; then
7313             break
7314         fi
7315     done
7317 if test -n "$CXXFLAGS_CXX11"; then
7318     AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7319 else
7320     AC_MSG_ERROR(no)
7322 AC_SUBST(CXXFLAGS_CXX11)
7324 if test "$GCC" = "yes"; then
7325     save_CXXFLAGS=$CXXFLAGS
7326     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7327     CHECK_L_ATOMIC
7328     CXXFLAGS=$save_CXXFLAGS
7329     AC_SUBST(ATOMIC_LIB)
7332 dnl Test for temporarily incompatible libstdc++ 4.7.{0,1}, where
7333 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=179528> introduced
7334 dnl an additional member _M_size into C++11 std::list towards 4.7.0 and
7335 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=189186> removed it
7336 dnl again towards 4.7.2:
7337 if test $CPP_LIBRARY = GLIBCXX; then
7338     AC_MSG_CHECKING([whether using C++11 causes libstdc++ 4.7.0/4.7.1 ABI breakage])
7339     AC_LANG_PUSH([C++])
7340     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7341 #include <list>
7342 #if !defined __GLIBCXX__ || (__GLIBCXX__ != 20120322 && __GLIBCXX__ != 20120614)
7343     // according to <https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html>:
7344     //   GCC 4.7.0: 20120322
7345     //   GCC 4.7.1: 20120614
7346     // and using a range check is not possible as the mapping between
7347     // __GLIBCXX__ values and GCC versions is not monotonic
7348 /* ok */
7349 #else
7350 abi broken
7351 #endif
7352         ]])], [AC_MSG_RESULT(no, ok)],
7353         [AC_MSG_ERROR(yes)])
7354     AC_LANG_POP([C++])
7357 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7358 save_CXXFLAGS=$CXXFLAGS
7359 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7360 AC_LANG_PUSH([C++])
7362 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7363 #include <stddef.h>
7365 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7367 namespace
7369         struct b
7370         {
7371                 int i;
7372                 int j;
7373         };
7375 ]], [[
7376 struct a
7378         int i;
7379         int j;
7381 a thinga[]={{0,0}, {1,1}};
7382 b thingb[]={{0,0}, {1,1}};
7383 size_t i = sizeof(sal_n_array_size(thinga));
7384 size_t j = sizeof(sal_n_array_size(thingb));
7385 return !(i != 0 && j != 0);
7387     ], [ AC_MSG_RESULT(yes) ],
7388     [ AC_MSG_ERROR(no)])
7389 AC_LANG_POP([C++])
7390 CXXFLAGS=$save_CXXFLAGS
7392 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7393 if test "$GCC" = yes; then
7394     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7395     AC_LANG_PUSH([C++])
7396     save_CXXFLAGS=$CXXFLAGS
7397     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7398     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7399     CXXFLAGS=$save_CXXFLAGS
7400     AC_LANG_POP([C++])
7401     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7402         AC_MSG_RESULT([yes])
7403     else
7404         AC_MSG_RESULT([no])
7405     fi
7407 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7409 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
7410 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
7411 dnl from consteval constructor initializing const variable",
7412 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
7413 dnl expression' with consteval constructor", or <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
7414 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
7415 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'":
7416 AC_LANG_PUSH([C++])
7417 save_CXXFLAGS=$CXXFLAGS
7418 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7419 AC_RUN_IFELSE([AC_LANG_PROGRAM([
7420         struct S {
7421             consteval S() { i = 1; }
7422             int i = 0;
7423         };
7424         S const s;
7426         struct S1 { consteval S1(int) {} };
7427         struct S2 {
7428             S1 x;
7429             S2(): x(0) {}
7430         };
7432         struct S3 {
7433             consteval S3() {}
7434             union {
7435                 int a;
7436                 unsigned b = 0;
7437             };
7438         };
7439         void f() { S3(); }
7440     ], [
7441         return (s.i == 1) ? 0 : 1;
7442     ])], [
7443         AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
7444         AC_MSG_RESULT([yes])
7445     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
7446 CXXFLAGS=$save_CXXFLAGS
7447 AC_LANG_POP([C++])
7449 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7450 AC_LANG_PUSH([C++])
7451 save_CXXFLAGS=$CXXFLAGS
7452 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7453 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7454         #include <algorithm>
7455         #include <initializer_list>
7456         #include <vector>
7457         template<typename T> class S {
7458         private:
7459             std::vector<T> v_;
7460         public:
7461             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7462         };
7463         constinit S<int> s{3, 2, 1};
7464     ])], [
7465         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7466         AC_MSG_RESULT([yes])
7467     ], [AC_MSG_RESULT([no])])
7468 CXXFLAGS=$save_CXXFLAGS
7469 AC_LANG_POP([C++])
7471 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a <span> with unsigned size_type])
7472 AC_LANG_PUSH([C++])
7473 save_CXXFLAGS=$CXXFLAGS
7474 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7475 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7476         #include <span>
7477         #include <type_traits>
7478         // Don't check size_type directly, as it was called index_type before P1872R0:
7479         void f(std::span<int> s) { static_assert(std::is_unsigned_v<decltype(s.size())>); };
7480     ])], [
7481         AC_DEFINE([HAVE_CPP_SPAN],[1])
7482         AC_MSG_RESULT([yes])
7483     ], [AC_MSG_RESULT([no])])
7484 CXXFLAGS=$save_CXXFLAGS
7485 AC_LANG_POP([C++])
7487 AC_MSG_CHECKING([whether $CXX_BASE implements C++ DR P1155R3])
7488 AC_LANG_PUSH([C++])
7489 save_CXXFLAGS=$CXXFLAGS
7490 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7491 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7492         struct S1 { S1(S1 &&); };
7493         struct S2: S1 {};
7494         S1 f(S2 s) { return s; }
7495     ])], [
7496         AC_DEFINE([HAVE_P1155R3],[1])
7497         AC_MSG_RESULT([yes])
7498     ], [AC_MSG_RESULT([no])])
7499 CXXFLAGS=$save_CXXFLAGS
7500 AC_LANG_POP([C++])
7502 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7503 dnl which is included in -Wextra anyway):
7504 HAVE_WDEPRECATED_COPY_DTOR=
7505 if test "$GCC" = yes; then
7506     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7507     AC_LANG_PUSH([C++])
7508     save_CXXFLAGS=$CXXFLAGS
7509     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7510     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7511             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7512             AC_MSG_RESULT([yes])
7513         ], [AC_MSG_RESULT([no])])
7514     CXXFLAGS=$save_CXXFLAGS
7515     AC_LANG_POP([C++])
7517 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7519 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7520 dnl uninitialized warning for code like
7522 dnl   OString f();
7523 dnl   boost::optional<OString> * g(bool b) {
7524 dnl       boost::optional<OString> o;
7525 dnl       if (b) o = f();
7526 dnl       return new boost::optional<OString>(o);
7527 dnl   }
7529 dnl (as is e.g. present, in a slightly more elaborate form, in
7530 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7531 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7532 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7533 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7534     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7535     AC_LANG_PUSH([C++])
7536     save_CXXFLAGS=$CXXFLAGS
7537     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7538     if test "$ENABLE_OPTIMIZED" = TRUE; then
7539         CXXFLAGS="$CXXFLAGS -O2"
7540     else
7541         CXXFLAGS="$CXXFLAGS -O0"
7542     fi
7543     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7544             #include <new>
7545             void f1(int);
7546             struct S1 {
7547                 ~S1() { f1(n); }
7548                 int n = 0;
7549             };
7550             struct S2 {
7551                 S2() {}
7552                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7553                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7554                 void set(S1 s) {
7555                     new (stg) S1(s);
7556                     init = true;
7557                 }
7558                 bool init = false;
7559                 char stg[sizeof (S1)];
7560             } ;
7561             S1 f2();
7562             S2 * f3(bool b) {
7563                 S2 o;
7564                 if (b) o.set(f2());
7565                 return new S2(o);
7566             }
7567         ]])], [AC_MSG_RESULT([no])], [
7568             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7569             AC_MSG_RESULT([yes])
7570         ])
7571     CXXFLAGS=$save_CXXFLAGS
7572     AC_LANG_POP([C++])
7574 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7576 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7577 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7578 dnl hits us e.g. with GCC 10 and --enable-optimized at
7580 dnl   In file included from include/rtl/string.hxx:49,
7581 dnl                    from include/rtl/ustring.hxx:43,
7582 dnl                    from include/osl/file.hxx:35,
7583 dnl                    from include/codemaker/global.hxx:28,
7584 dnl                    from include/codemaker/options.hxx:23,
7585 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7586 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7587 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,
7588 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,
7589 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,
7590 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7591 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7592 dnl      78 |         memcpy( buffer, data, length );
7593 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7594 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7595 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7596     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7597     AC_LANG_PUSH([C++])
7598     save_CXXFLAGS=$CXXFLAGS
7599     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7600     if test "$ENABLE_OPTIMIZED" = TRUE; then
7601         CXXFLAGS="$CXXFLAGS -O2"
7602     else
7603         CXXFLAGS="$CXXFLAGS -O0"
7604     fi
7605     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7606     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7607             void fill(char const * begin, char const * end, char c);
7608             struct q {
7609                 char ids[4];
7610                 char username[6];
7611             };
7612             void test(q & c) {
7613                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
7614                 __builtin_strncpy(c.username, "root", sizeof(c.username));
7615             }
7616         ]])], [AC_MSG_RESULT([no])], [
7617             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
7618             AC_MSG_RESULT([yes])
7619         ])
7620     CXXFLAGS=$save_CXXFLAGS
7621     AC_LANG_POP([C++])
7623 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
7625 HAVE_DLLEXPORTINLINES=
7626 if test "$_os" = "WINNT"; then
7627     AC_MSG_CHECKING([whether $CXX_BASE supports -Zc:dllexportInlines-])
7628     AC_LANG_PUSH([C++])
7629     save_CXXFLAGS=$CXXFLAGS
7630     CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
7631     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7632             HAVE_DLLEXPORTINLINES=TRUE
7633             AC_MSG_RESULT([yes])
7634         ], [AC_MSG_RESULT([no])])
7635     CXXFLAGS=$save_CXXFLAGS
7636     AC_LANG_POP([C++])
7638 AC_SUBST([HAVE_DLLEXPORTINLINES])
7640 dnl ===================================================================
7641 dnl CPU Intrinsics support - SSE, AVX
7642 dnl ===================================================================
7644 CXXFLAGS_INTRINSICS_SSE2=
7645 CXXFLAGS_INTRINSICS_SSSE3=
7646 CXXFLAGS_INTRINSICS_SSE41=
7647 CXXFLAGS_INTRINSICS_SSE42=
7648 CXXFLAGS_INTRINSICS_AVX=
7649 CXXFLAGS_INTRINSICS_AVX2=
7650 CXXFLAGS_INTRINSICS_AVX512=
7651 CXXFLAGS_INTRINSICS_AVX512F=
7652 CXXFLAGS_INTRINSICS_F16C=
7653 CXXFLAGS_INTRINSICS_FMA=
7655 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7656     # GCC, Clang or Clang-cl (clang-cl + MSVC's -arch options don't work well together)
7657     flag_sse2=-msse2
7658     flag_ssse3=-mssse3
7659     flag_sse41=-msse4.1
7660     flag_sse42=-msse4.2
7661     flag_avx=-mavx
7662     flag_avx2=-mavx2
7663     flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
7664     flag_avx512f=-mavx512f
7665     flag_f16c=-mf16c
7666     flag_fma=-mfma
7667 else
7668     # https://docs.microsoft.com/en-us/cpp/build/reference/arch-x86
7669     # MSVC seems to differentiate only between SSE and SSE2, where in fact
7670     # SSE2 seems to be SSE2+.
7671     # Even if -arch:SSE2 is the default, set it explicitly, so that the variable
7672     # is not empty (and can be tested in gbuild).
7673     flag_sse2=-arch:SSE2
7674     flag_ssse3=-arch:SSE2
7675     flag_sse41=-arch:SSE2
7676     flag_sse42=-arch:SSE2
7677     flag_avx=-arch:AVX
7678     flag_avx2=-arch:AVX2
7679     flag_avx512=-arch:AVX512
7680     flag_avx512f=-arch:AVX512
7681     # These are part of -arch:AVX2
7682     flag_f16c=-arch:AVX2
7683     flag_fma=-arch:AVX2
7686 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
7687 AC_LANG_PUSH([C++])
7688 save_CXXFLAGS=$CXXFLAGS
7689 CXXFLAGS="$CXXFLAGS $flag_sse2"
7690 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7691     #include <emmintrin.h>
7692     int main () {
7693         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7694         c = _mm_xor_si128 (a, b);
7695         return 0;
7696     }
7697     ])],
7698     [can_compile_sse2=yes],
7699     [can_compile_sse2=no])
7700 AC_LANG_POP([C++])
7701 CXXFLAGS=$save_CXXFLAGS
7702 AC_MSG_RESULT([${can_compile_sse2}])
7703 if test "${can_compile_sse2}" = "yes" ; then
7704     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
7707 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
7708 AC_LANG_PUSH([C++])
7709 save_CXXFLAGS=$CXXFLAGS
7710 CXXFLAGS="$CXXFLAGS $flag_ssse3"
7711 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7712     #include <tmmintrin.h>
7713     int main () {
7714         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7715         c = _mm_maddubs_epi16 (a, b);
7716         return 0;
7717     }
7718     ])],
7719     [can_compile_ssse3=yes],
7720     [can_compile_ssse3=no])
7721 AC_LANG_POP([C++])
7722 CXXFLAGS=$save_CXXFLAGS
7723 AC_MSG_RESULT([${can_compile_ssse3}])
7724 if test "${can_compile_ssse3}" = "yes" ; then
7725     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
7728 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
7729 AC_LANG_PUSH([C++])
7730 save_CXXFLAGS=$CXXFLAGS
7731 CXXFLAGS="$CXXFLAGS $flag_sse41"
7732 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7733     #include <smmintrin.h>
7734     int main () {
7735         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7736         c = _mm_cmpeq_epi64 (a, b);
7737         return 0;
7738     }
7739     ])],
7740     [can_compile_sse41=yes],
7741     [can_compile_sse41=no])
7742 AC_LANG_POP([C++])
7743 CXXFLAGS=$save_CXXFLAGS
7744 AC_MSG_RESULT([${can_compile_sse41}])
7745 if test "${can_compile_sse41}" = "yes" ; then
7746     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
7749 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
7750 AC_LANG_PUSH([C++])
7751 save_CXXFLAGS=$CXXFLAGS
7752 CXXFLAGS="$CXXFLAGS $flag_sse42"
7753 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7754     #include <nmmintrin.h>
7755     int main () {
7756         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7757         c = _mm_cmpgt_epi64 (a, b);
7758         return 0;
7759     }
7760     ])],
7761     [can_compile_sse42=yes],
7762     [can_compile_sse42=no])
7763 AC_LANG_POP([C++])
7764 CXXFLAGS=$save_CXXFLAGS
7765 AC_MSG_RESULT([${can_compile_sse42}])
7766 if test "${can_compile_sse42}" = "yes" ; then
7767     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
7770 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
7771 AC_LANG_PUSH([C++])
7772 save_CXXFLAGS=$CXXFLAGS
7773 CXXFLAGS="$CXXFLAGS $flag_avx"
7774 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7775     #include <immintrin.h>
7776     int main () {
7777         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
7778         c = _mm256_xor_ps(a, b);
7779         return 0;
7780     }
7781     ])],
7782     [can_compile_avx=yes],
7783     [can_compile_avx=no])
7784 AC_LANG_POP([C++])
7785 CXXFLAGS=$save_CXXFLAGS
7786 AC_MSG_RESULT([${can_compile_avx}])
7787 if test "${can_compile_avx}" = "yes" ; then
7788     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
7791 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
7792 AC_LANG_PUSH([C++])
7793 save_CXXFLAGS=$CXXFLAGS
7794 CXXFLAGS="$CXXFLAGS $flag_avx2"
7795 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7796     #include <immintrin.h>
7797     int main () {
7798         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
7799         c = _mm256_maddubs_epi16(a, b);
7800         return 0;
7801     }
7802     ])],
7803     [can_compile_avx2=yes],
7804     [can_compile_avx2=no])
7805 AC_LANG_POP([C++])
7806 CXXFLAGS=$save_CXXFLAGS
7807 AC_MSG_RESULT([${can_compile_avx2}])
7808 if test "${can_compile_avx2}" = "yes" ; then
7809     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
7812 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
7813 AC_LANG_PUSH([C++])
7814 save_CXXFLAGS=$CXXFLAGS
7815 CXXFLAGS="$CXXFLAGS $flag_avx512"
7816 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7817     #include <immintrin.h>
7818     int main () {
7819         __m512i a = _mm512_loadu_si512(0);
7820         __m512d v1 = _mm512_load_pd(0);
7821         // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
7822         __m512d v2 = _mm512_abs_pd(v1);
7823         return 0;
7824     }
7825     ])],
7826     [can_compile_avx512=yes],
7827     [can_compile_avx512=no])
7828 AC_LANG_POP([C++])
7829 CXXFLAGS=$save_CXXFLAGS
7830 AC_MSG_RESULT([${can_compile_avx512}])
7831 if test "${can_compile_avx512}" = "yes" ; then
7832     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
7833     CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
7836 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
7837 AC_LANG_PUSH([C++])
7838 save_CXXFLAGS=$CXXFLAGS
7839 CXXFLAGS="$CXXFLAGS $flag_f16c"
7840 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7841     #include <immintrin.h>
7842     int main () {
7843         __m128i a = _mm_set1_epi32 (0);
7844         __m128 c;
7845         c = _mm_cvtph_ps(a);
7846         return 0;
7847     }
7848     ])],
7849     [can_compile_f16c=yes],
7850     [can_compile_f16c=no])
7851 AC_LANG_POP([C++])
7852 CXXFLAGS=$save_CXXFLAGS
7853 AC_MSG_RESULT([${can_compile_f16c}])
7854 if test "${can_compile_f16c}" = "yes" ; then
7855     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
7858 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
7859 AC_LANG_PUSH([C++])
7860 save_CXXFLAGS=$CXXFLAGS
7861 CXXFLAGS="$CXXFLAGS $flag_fma"
7862 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7863     #include <immintrin.h>
7864     int main () {
7865         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
7866         d = _mm256_fmadd_ps(a, b, c);
7867         return 0;
7868     }
7869     ])],
7870     [can_compile_fma=yes],
7871     [can_compile_fma=no])
7872 AC_LANG_POP([C++])
7873 CXXFLAGS=$save_CXXFLAGS
7874 AC_MSG_RESULT([${can_compile_fma}])
7875 if test "${can_compile_fma}" = "yes" ; then
7876     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
7879 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
7880 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
7881 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
7882 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
7883 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
7884 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
7885 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
7886 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512F])
7887 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
7888 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
7890 dnl ===================================================================
7891 dnl system stl sanity tests
7892 dnl ===================================================================
7893 if test "$_os" != "WINNT"; then
7895     AC_LANG_PUSH([C++])
7897     save_CPPFLAGS="$CPPFLAGS"
7898     if test -n "$MACOSX_SDK_PATH"; then
7899         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
7900     fi
7902     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
7903     # only.
7904     if test "$CPP_LIBRARY" = GLIBCXX; then
7905         dnl gcc#19664, gcc#22482, rhbz#162935
7906         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
7907         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
7908         AC_MSG_RESULT([$stlvisok])
7909         if test "$stlvisok" = "no"; then
7910             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
7911         fi
7912     fi
7914     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
7915     # when we don't make any dynamic libraries?
7916     if test "$DISABLE_DYNLOADING" = ""; then
7917         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
7918         cat > conftestlib1.cc <<_ACEOF
7919 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7920 struct S2: S1<int> { virtual ~S2(); };
7921 S2::~S2() {}
7922 _ACEOF
7923         cat > conftestlib2.cc <<_ACEOF
7924 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7925 struct S2: S1<int> { virtual ~S2(); };
7926 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
7927 _ACEOF
7928         gccvisinlineshiddenok=yes
7929         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
7930             gccvisinlineshiddenok=no
7931         else
7932             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
7933             dnl known to not work with -z defs (unsetting which makes the test
7934             dnl moot, though):
7935             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
7936             if test "$COM_IS_CLANG" = TRUE; then
7937                 for i in $CXX $CXXFLAGS; do
7938                     case $i in
7939                     -fsanitize=*)
7940                         my_linkflagsnoundefs=
7941                         break
7942                         ;;
7943                     esac
7944                 done
7945             fi
7946             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
7947                 gccvisinlineshiddenok=no
7948             fi
7949         fi
7951         rm -fr libconftest*
7952         AC_MSG_RESULT([$gccvisinlineshiddenok])
7953         if test "$gccvisinlineshiddenok" = "no"; then
7954             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
7955         fi
7956     fi
7958    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
7959     cat >visibility.cxx <<_ACEOF
7960 #pragma GCC visibility push(hidden)
7961 struct __attribute__ ((visibility ("default"))) TestStruct {
7962   static void Init();
7964 __attribute__ ((visibility ("default"))) void TestFunc() {
7965   TestStruct::Init();
7967 _ACEOF
7968     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
7969         gccvisbroken=yes
7970     else
7971         case "$host_cpu" in
7972         i?86|x86_64)
7973             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
7974                 gccvisbroken=no
7975             else
7976                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
7977                     gccvisbroken=no
7978                 else
7979                     gccvisbroken=yes
7980                 fi
7981             fi
7982             ;;
7983         *)
7984             gccvisbroken=no
7985             ;;
7986         esac
7987     fi
7988     rm -f visibility.s visibility.cxx
7990     AC_MSG_RESULT([$gccvisbroken])
7991     if test "$gccvisbroken" = "yes"; then
7992         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
7993     fi
7995     CPPFLAGS="$save_CPPFLAGS"
7997     AC_LANG_POP([C++])
8000 dnl ===================================================================
8001 dnl  Clang++ tests
8002 dnl ===================================================================
8004 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
8005 if test "$GCC" = "yes"; then
8006     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
8007     AC_LANG_PUSH([C++])
8008     save_CXXFLAGS=$CXXFLAGS
8009     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
8010     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
8011     CXXFLAGS=$save_CXXFLAGS
8012     AC_LANG_POP([C++])
8013     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
8014         AC_MSG_RESULT([yes])
8015     else
8016         AC_MSG_RESULT([no])
8017     fi
8019 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
8021 dnl ===================================================================
8022 dnl Compiler plugins
8023 dnl ===================================================================
8025 COMPILER_PLUGINS=
8026 # currently only Clang
8028 if test "$COM_IS_CLANG" != "TRUE"; then
8029     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
8030         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
8031         enable_compiler_plugins=no
8032     fi
8035 COMPILER_PLUGINS_COM_IS_CLANG=
8036 if test "$COM_IS_CLANG" = "TRUE"; then
8037     if test -n "$enable_compiler_plugins"; then
8038         compiler_plugins="$enable_compiler_plugins"
8039     elif test -n "$ENABLE_DBGUTIL"; then
8040         compiler_plugins=test
8041     else
8042         compiler_plugins=no
8043     fi
8044     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
8045         if test "$CLANGVER" -lt 50002; then
8046             if test "$compiler_plugins" = yes; then
8047                 AC_MSG_ERROR([Clang $CLANGVER is too old to build compiler plugins; need >= 5.0.2.])
8048             else
8049                 compiler_plugins=no
8050             fi
8051         fi
8052     fi
8053     if test "$compiler_plugins" != "no"; then
8054         dnl The prefix where Clang resides, override to where Clang resides if
8055         dnl using a source build:
8056         if test -z "$CLANGDIR"; then
8057             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
8058         fi
8059         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
8060         if test -z "$COMPILER_PLUGINS_CXX"; then
8061             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
8062         fi
8063         clangbindir=$CLANGDIR/bin
8064         if test "$build_os" = "cygwin"; then
8065             clangbindir=$(cygpath -u "$clangbindir")
8066         fi
8067         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
8068         if test -n "$LLVM_CONFIG"; then
8069             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
8070             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
8071             if test -z "$CLANGLIBDIR"; then
8072                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
8073             fi
8074             # Try if clang is built from source (in which case its includes are not together with llvm includes).
8075             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
8076             clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
8077             if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
8078                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
8079             fi
8080             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
8081             clangobjdir=$($LLVM_CONFIG --obj-root)
8082             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
8083                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
8084             fi
8085         fi
8086         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
8087         AC_LANG_PUSH([C++])
8088         save_CXX=$CXX
8089         save_CXXCPP=$CXXCPP
8090         save_CPPFLAGS=$CPPFLAGS
8091         save_CXXFLAGS=$CXXFLAGS
8092         save_LDFLAGS=$LDFLAGS
8093         save_LIBS=$LIBS
8094         CXX=$COMPILER_PLUGINS_CXX
8095         CXXCPP="$COMPILER_PLUGINS_CXX -E"
8096         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8097         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8098         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
8099             [COMPILER_PLUGINS=TRUE],
8100             [
8101             if test "$compiler_plugins" = "yes"; then
8102                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
8103             else
8104                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
8105                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
8106             fi
8107             ])
8108         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8109         dnl comment in compilerplugins/Makefile-clang.mk:
8110         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8111             LDFLAGS=""
8112             AC_MSG_CHECKING([for clang libraries to use])
8113             if test -z "$CLANGTOOLLIBS"; then
8114                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8115  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8116                 AC_LINK_IFELSE([
8117                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8118                         [[ clang::FullSourceLoc().dump(); ]])
8119                 ],[CLANGTOOLLIBS="$LIBS"],[])
8120             fi
8121             if test -z "$CLANGTOOLLIBS"; then
8122                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8123                 AC_LINK_IFELSE([
8124                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8125                         [[ clang::FullSourceLoc().dump(); ]])
8126                 ],[CLANGTOOLLIBS="$LIBS"],[])
8127             fi
8128             AC_MSG_RESULT([$CLANGTOOLLIBS])
8129             if test -z "$CLANGTOOLLIBS"; then
8130                 if test "$compiler_plugins" = "yes"; then
8131                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8132                 else
8133                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8134                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8135                 fi
8136                 COMPILER_PLUGINS=
8137             fi
8138             if test -n "$COMPILER_PLUGINS"; then
8139                 if test -z "$CLANGSYSINCLUDE"; then
8140                     if test -n "$LLVM_CONFIG"; then
8141                         # Path to the clang system headers (no idea if there's a better way to get it).
8142                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8143                     fi
8144                 fi
8145             fi
8146         fi
8147         CXX=$save_CXX
8148         CXXCPP=$save_CXXCPP
8149         CPPFLAGS=$save_CPPFLAGS
8150         CXXFLAGS=$save_CXXFLAGS
8151         LDFLAGS=$save_LDFLAGS
8152         LIBS="$save_LIBS"
8153         AC_LANG_POP([C++])
8155         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8156         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8157             #ifndef __clang__
8158             you lose
8159             #endif
8160             int foo=42;
8161             ]])],
8162             [AC_MSG_RESULT([yes])
8163              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8164             [AC_MSG_RESULT([no])])
8165         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8166     fi
8167 else
8168     if test "$enable_compiler_plugins" = "yes"; then
8169         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8170     fi
8172 COMPILER_PLUGINS_ANALYZER_PCH=
8173 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8174     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8176 AC_SUBST(COMPILER_PLUGINS)
8177 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8178 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8179 AC_SUBST(COMPILER_PLUGINS_CXX)
8180 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8181 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8182 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8183 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8184 AC_SUBST(CLANGDIR)
8185 AC_SUBST(CLANGLIBDIR)
8186 AC_SUBST(CLANGTOOLLIBS)
8187 AC_SUBST(CLANGSYSINCLUDE)
8189 # Plugin to help linker.
8190 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8191 # This makes --enable-lto build with clang work.
8192 AC_SUBST(LD_PLUGIN)
8194 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8195 AC_SUBST(HAVE_POSIX_FALLOCATE)
8197 JITC_PROCESSOR_TYPE=""
8198 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8199     # IBMs JDK needs this...
8200     JITC_PROCESSOR_TYPE=6
8201     export JITC_PROCESSOR_TYPE
8203 AC_SUBST([JITC_PROCESSOR_TYPE])
8205 # Misc Windows Stuff
8206 AC_ARG_WITH(ucrt-dir,
8207     AS_HELP_STRING([--with-ucrt-dir],
8208         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8209         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8210         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8211             Windows6.1-KB2999226-x64.msu
8212             Windows6.1-KB2999226-x86.msu
8213             Windows8.1-KB2999226-x64.msu
8214             Windows8.1-KB2999226-x86.msu
8215             Windows8-RT-KB2999226-x64.msu
8216             Windows8-RT-KB2999226-x86.msu
8217         A zip archive including those files is available from Microsoft site:
8218         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8221 UCRT_REDISTDIR="$with_ucrt_dir"
8222 if test $_os = "WINNT"; then
8223     find_msvc_x64_dlls
8224     for i in $PKGFORMAT; do
8225         if test "$i" = msi; then
8226             find_msms
8227             break
8228         fi
8229     done
8230     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8231     MSVC_DLLS="$msvcdlls"
8232     test -n "$msmdir" && MSM_PATH=`win_short_path_for_make "$msmdir"`
8233     # MSVC 15.3 changed it to VC141
8234     if echo "$msvcdllpath" | grep -q "VC143.CRT$"; then
8235         SCPDEFS="$SCPDEFS -DWITH_VC143_REDIST"
8236     elif echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8237         SCPDEFS="$SCPDEFS -DWITH_VC142_REDIST"
8238     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8239         SCPDEFS="$SCPDEFS -DWITH_VC141_REDIST"
8240     else
8241         SCPDEFS="$SCPDEFS -DWITH_VC${VCVER}_REDIST"
8242     fi
8244     if test "$UCRT_REDISTDIR" = "no"; then
8245         dnl explicitly disabled
8246         UCRT_REDISTDIR=""
8247     else
8248         if ! test -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x64.msu" -a \
8249                   -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x86.msu" -a \
8250                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x64.msu" -a \
8251                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x86.msu" -a \
8252                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x64.msu" -a \
8253                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x86.msu"; then
8254             UCRT_REDISTDIR=""
8255             if test -n "$PKGFORMAT"; then
8256                for i in $PKGFORMAT; do
8257                    case "$i" in
8258                    msi)
8259                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8260                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8261                        ;;
8262                    esac
8263                done
8264             fi
8265         fi
8266     fi
8269 AC_SUBST(UCRT_REDISTDIR)
8270 AC_SUBST(MSVC_DLL_PATH)
8271 AC_SUBST(MSVC_DLLS)
8272 AC_SUBST(MSM_PATH)
8275 dnl ===================================================================
8276 dnl Checks for Java
8277 dnl ===================================================================
8278 if test "$ENABLE_JAVA" != ""; then
8280     # Windows-specific tests
8281     if test "$build_os" = "cygwin"; then
8282         if test -z "$with_jdk_home"; then
8283             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8284             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8285             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/CurrentVersion"
8286             if test -n "$regvalue"; then
8287                 ver=$regvalue
8288                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver/JavaHome"
8289                 with_jdk_home=$regvalue
8290             fi
8291             howfound="found automatically"
8292         else
8293             with_jdk_home=`win_short_path_for_make "$with_jdk_home"`
8294             howfound="you passed"
8295         fi
8297         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8298             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])
8299         fi
8300     fi
8302     # 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.
8303     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8304     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8305         with_jdk_home=`/usr/libexec/java_home`
8306     fi
8308     JAVA_HOME=; export JAVA_HOME
8309     if test -z "$with_jdk_home"; then
8310         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8311     else
8312         _java_path="$with_jdk_home/bin/$with_java"
8313         dnl Check if there is a Java interpreter at all.
8314         if test -x "$_java_path"; then
8315             JAVAINTERPRETER=$_java_path
8316         else
8317             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8318         fi
8319     fi
8321     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8322     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8323     dnl loaded by java to run JunitTests:
8324     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8325         shortjdkhome=`cygpath -d "$with_jdk_home"`
8326         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
8327             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8328             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8329         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
8330             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8331             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8332         fi
8334         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8335             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8336         fi
8337         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8338     elif test "$cross_compiling" != "yes"; then
8339         case $CPUNAME in
8340             AARCH64|AXP|X86_64|HPPA|IA64|POWERPC64|S390X|SPARC64|GODSON64)
8341                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8342                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8343                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8344                 fi
8345                 ;;
8346             *) # assumption: everything else 32-bit
8347                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8348                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8349                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8350                 fi
8351                 ;;
8352         esac
8353     fi
8356 dnl ===================================================================
8357 dnl Checks for JDK.
8358 dnl ===================================================================
8360 # Whether all the complexity here actually is needed any more or not, no idea.
8362 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8363     _gij_longver=0
8364     AC_MSG_CHECKING([the installed JDK])
8365     if test -n "$JAVAINTERPRETER"; then
8366         dnl java -version sends output to stderr!
8367         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8368             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8369         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8370             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8371         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8372             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8373         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8374             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8375         else
8376             JDK=sun
8378             dnl Sun JDK specific tests
8379             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8380             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8382             if test "$_jdk_ver" -lt 10900; then
8383                 AC_MSG_ERROR([JDK is too old, you need at least 9 ($_jdk_ver < 10900)])
8384             fi
8385             if test "$_jdk_ver" -gt 10900; then
8386                 JAVA_CLASSPATH_NOT_SET=TRUE
8387             fi
8389             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8390             if test "$_os" = "WINNT"; then
8391                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8392             fi
8393             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8395             # set to limit VM usage for JunitTests
8396             JAVAIFLAGS=-Xmx64M
8397             # set to limit VM usage for javac
8398             JAVACFLAGS=-J-Xmx128M
8399         fi
8400     else
8401         AC_MSG_ERROR([Java not found. You need at least JDK 9])
8402     fi
8403 else
8404     if test -z "$ENABLE_JAVA"; then
8405         dnl Java disabled
8406         JAVA_HOME=
8407         export JAVA_HOME
8408     elif test "$cross_compiling" = "yes"; then
8409         # Just assume compatibility of build and host JDK
8410         JDK=$JDK_FOR_BUILD
8411         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8412     fi
8415 dnl ===================================================================
8416 dnl Checks for javac
8417 dnl ===================================================================
8418 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8419     javacompiler="javac"
8420     : ${JAVA_SOURCE_VER=8}
8421     : ${JAVA_TARGET_VER=8}
8422     if test -z "$with_jdk_home"; then
8423         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8424     else
8425         _javac_path="$with_jdk_home/bin/$javacompiler"
8426         dnl Check if there is a Java compiler at all.
8427         if test -x "$_javac_path"; then
8428             JAVACOMPILER=$_javac_path
8429         fi
8430     fi
8431     if test -z "$JAVACOMPILER"; then
8432         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8433     fi
8434     if test "$build_os" = "cygwin"; then
8435         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8436             JAVACOMPILER="${JAVACOMPILER}.exe"
8437         fi
8438         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8439     fi
8442 dnl ===================================================================
8443 dnl Checks for javadoc
8444 dnl ===================================================================
8445 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8446     if test -z "$with_jdk_home"; then
8447         AC_PATH_PROG(JAVADOC, javadoc)
8448     else
8449         _javadoc_path="$with_jdk_home/bin/javadoc"
8450         dnl Check if there is a javadoc at all.
8451         if test -x "$_javadoc_path"; then
8452             JAVADOC=$_javadoc_path
8453         else
8454             AC_PATH_PROG(JAVADOC, javadoc)
8455         fi
8456     fi
8457     if test -z "$JAVADOC"; then
8458         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8459     fi
8460     if test "$build_os" = "cygwin"; then
8461         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8462             JAVADOC="${JAVADOC}.exe"
8463         fi
8464         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8465     fi
8467     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8468     JAVADOCISGJDOC="yes"
8469     fi
8471 AC_SUBST(JAVADOC)
8472 AC_SUBST(JAVADOCISGJDOC)
8474 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8475     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8476     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8477         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8478            # try to recover first by looking whether we have an alternative
8479            # system as in Debian or newer SuSEs where following /usr/bin/javac
8480            # over /etc/alternatives/javac leads to the right bindir where we
8481            # just need to strip a bit away to get a valid JAVA_HOME
8482            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8483         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8484             # maybe only one level of symlink (e.g. on Mac)
8485             JAVA_HOME=$(readlink $JAVACOMPILER)
8486             if test "$(dirname $JAVA_HOME)" = "."; then
8487                 # we've got no path to trim back
8488                 JAVA_HOME=""
8489             fi
8490         else
8491             # else warn
8492             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8493             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8494             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8495             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8496         fi
8497         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8498         if test "$JAVA_HOME" != "/usr"; then
8499             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8500                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8501                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8502                 dnl Tiger already returns a JDK path...
8503                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8504             else
8505                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8506                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8507                 dnl that checks which version to run
8508                 if test -f "$JAVA_HOME"; then
8509                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8510                 fi
8511             fi
8512         fi
8513     fi
8514     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8516     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8517     if test -z "$JAVA_HOME"; then
8518         if test "x$with_jdk_home" = "x"; then
8519             cat > findhome.java <<_ACEOF
8520 [import java.io.File;
8522 class findhome
8524     public static void main(String args[])
8525     {
8526         String jrelocation = System.getProperty("java.home");
8527         File jre = new File(jrelocation);
8528         System.out.println(jre.getParent());
8529     }
8531 _ACEOF
8532             AC_MSG_CHECKING([if javac works])
8533             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8534             AC_TRY_EVAL(javac_cmd)
8535             if test $? = 0 -a -f ./findhome.class; then
8536                 AC_MSG_RESULT([javac works])
8537             else
8538                 echo "configure: javac test failed" >&5
8539                 cat findhome.java >&5
8540                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8541             fi
8542             AC_MSG_CHECKING([if gij knows its java.home])
8543             JAVA_HOME=`$JAVAINTERPRETER findhome`
8544             if test $? = 0 -a "$JAVA_HOME" != ""; then
8545                 AC_MSG_RESULT([$JAVA_HOME])
8546             else
8547                 echo "configure: java test failed" >&5
8548                 cat findhome.java >&5
8549                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8550             fi
8551             # clean-up after ourselves
8552             rm -f ./findhome.java ./findhome.class
8553         else
8554             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8555         fi
8556     fi
8558     # now check if $JAVA_HOME is really valid
8559     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8560         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8561             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8562             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8563             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
8564             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
8565             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
8566             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
8567         fi
8568     fi
8569     PathFormat "$JAVA_HOME"
8570     JAVA_HOME="$formatted_path"
8573 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
8574     "$_os" != Darwin
8575 then
8576     AC_MSG_CHECKING([for JAWT lib])
8577     if test "$_os" = WINNT; then
8578         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
8579         JAWTLIB=jawt.lib
8580     else
8581         case "$host_cpu" in
8582         arm*)
8583             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
8584             JAVA_ARCH=$my_java_arch
8585             ;;
8586         i*86)
8587             my_java_arch=i386
8588             ;;
8589         m68k)
8590             my_java_arch=m68k
8591             ;;
8592         powerpc)
8593             my_java_arch=ppc
8594             ;;
8595         powerpc64)
8596             my_java_arch=ppc64
8597             ;;
8598         powerpc64le)
8599             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
8600             JAVA_ARCH=$my_java_arch
8601             ;;
8602         sparc64)
8603             my_java_arch=sparcv9
8604             ;;
8605         x86_64)
8606             my_java_arch=amd64
8607             ;;
8608         *)
8609             my_java_arch=$host_cpu
8610             ;;
8611         esac
8612         # This is where JDK9 puts the library
8613         if test -e "$JAVA_HOME/lib/libjawt.so"; then
8614             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
8615         else
8616             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
8617         fi
8618         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
8619     fi
8620     AC_MSG_RESULT([$JAWTLIB])
8622 AC_SUBST(JAWTLIB)
8624 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
8625     case "$host_os" in
8627     aix*)
8628         JAVAINC="-I$JAVA_HOME/include"
8629         JAVAINC="$JAVAINC -I$JAVA_HOME/include/aix"
8630         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8631         ;;
8633     cygwin*|wsl*)
8634         JAVAINC="-I$JAVA_HOME/include/win32"
8635         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
8636         ;;
8638     darwin*|macos*)
8639         if test -d "$JAVA_HOME/include/darwin"; then
8640             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
8641         else
8642             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
8643         fi
8644         ;;
8646     dragonfly*)
8647         JAVAINC="-I$JAVA_HOME/include"
8648         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8649         ;;
8651     freebsd*)
8652         JAVAINC="-I$JAVA_HOME/include"
8653         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
8654         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
8655         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8656         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8657         ;;
8659     k*bsd*-gnu*)
8660         JAVAINC="-I$JAVA_HOME/include"
8661         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8662         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8663         ;;
8665     linux-gnu*)
8666         JAVAINC="-I$JAVA_HOME/include"
8667         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8668         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8669         ;;
8671     *netbsd*)
8672         JAVAINC="-I$JAVA_HOME/include"
8673         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
8674         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8675        ;;
8677     openbsd*)
8678         JAVAINC="-I$JAVA_HOME/include"
8679         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
8680         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8681         ;;
8683     solaris*)
8684         JAVAINC="-I$JAVA_HOME/include"
8685         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
8686         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8687         ;;
8688     esac
8690 SOLARINC="$SOLARINC $JAVAINC"
8692 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8693     JAVA_HOME_FOR_BUILD=$JAVA_HOME
8694     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
8695     JDK_FOR_BUILD=$JDK
8698 AC_SUBST(JAVACFLAGS)
8699 AC_SUBST(JAVACOMPILER)
8700 AC_SUBST(JAVAINTERPRETER)
8701 AC_SUBST(JAVAIFLAGS)
8702 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
8703 AC_SUBST(JAVA_CLASSPATH_NOT_SET)
8704 AC_SUBST(JAVA_HOME)
8705 AC_SUBST(JAVA_HOME_FOR_BUILD)
8706 AC_SUBST(JDK)
8707 AC_SUBST(JDK_FOR_BUILD)
8708 AC_SUBST(JAVA_SOURCE_VER)
8709 AC_SUBST(JAVA_TARGET_VER)
8712 dnl ===================================================================
8713 dnl Export file validation
8714 dnl ===================================================================
8715 AC_MSG_CHECKING([whether to enable export file validation])
8716 if test "$with_export_validation" != "no"; then
8717     if test -z "$ENABLE_JAVA"; then
8718         if test "$with_export_validation" = "yes"; then
8719             AC_MSG_ERROR([requested, but Java is disabled])
8720         else
8721             AC_MSG_RESULT([no, as Java is disabled])
8722         fi
8723     elif ! test -d "${SRC_ROOT}/schema"; then
8724         if test "$with_export_validation" = "yes"; then
8725             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
8726         else
8727             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
8728         fi
8729     else
8730         AC_MSG_RESULT([yes])
8731         AC_DEFINE(HAVE_EXPORT_VALIDATION)
8733         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
8734         if test -z "$ODFVALIDATOR"; then
8735             # remember to download the ODF toolkit with validator later
8736             AC_MSG_NOTICE([no odfvalidator found, will download it])
8737             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
8738             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
8740             # and fetch name of odfvalidator jar name from download.lst
8741             ODFVALIDATOR_JAR=`$SED -n -e "s/export *ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8742             AC_SUBST(ODFVALIDATOR_JAR)
8744             if test -z "$ODFVALIDATOR_JAR"; then
8745                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
8746             fi
8747         fi
8748         if test "$build_os" = "cygwin"; then
8749             # In case of Cygwin it will be executed from Windows,
8750             # so we need to run bash and absolute path to validator
8751             # so instead of "odfvalidator" it will be
8752             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8753             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
8754         else
8755             ODFVALIDATOR="sh $ODFVALIDATOR"
8756         fi
8757         AC_SUBST(ODFVALIDATOR)
8760         AC_PATH_PROGS(OFFICEOTRON, officeotron)
8761         if test -z "$OFFICEOTRON"; then
8762             # remember to download the officeotron with validator later
8763             AC_MSG_NOTICE([no officeotron found, will download it])
8764             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
8765             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
8767             # and fetch name of officeotron jar name from download.lst
8768             OFFICEOTRON_JAR=`$SED -n -e "s/export *OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8769             AC_SUBST(OFFICEOTRON_JAR)
8771             if test -z "$OFFICEOTRON_JAR"; then
8772                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
8773             fi
8774         else
8775             # check version of existing officeotron
8776             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
8777             if test 0"$OFFICEOTRON_VER" -lt 704; then
8778                 AC_MSG_ERROR([officeotron too old])
8779             fi
8780         fi
8781         if test "$build_os" = "cygwin"; then
8782             # In case of Cygwin it will be executed from Windows,
8783             # so we need to run bash and absolute path to validator
8784             # so instead of "odfvalidator" it will be
8785             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8786             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
8787         else
8788             OFFICEOTRON="sh $OFFICEOTRON"
8789         fi
8790     fi
8791     AC_SUBST(OFFICEOTRON)
8792 else
8793     AC_MSG_RESULT([no])
8796 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
8797 if test "$with_bffvalidator" != "no"; then
8798     AC_DEFINE(HAVE_BFFVALIDATOR)
8800     if test "$with_export_validation" = "no"; then
8801         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
8802     fi
8804     if test "$with_bffvalidator" = "yes"; then
8805         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
8806     else
8807         BFFVALIDATOR="$with_bffvalidator"
8808     fi
8810     if test "$build_os" = "cygwin"; then
8811         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
8812             AC_MSG_RESULT($BFFVALIDATOR)
8813         else
8814             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8815         fi
8816     elif test -n "$BFFVALIDATOR"; then
8817         # We are not in Cygwin but need to run Windows binary with wine
8818         AC_PATH_PROGS(WINE, wine)
8820         # so swap in a shell wrapper that converts paths transparently
8821         BFFVALIDATOR_EXE="$BFFVALIDATOR"
8822         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
8823         AC_SUBST(BFFVALIDATOR_EXE)
8824         AC_MSG_RESULT($BFFVALIDATOR)
8825     else
8826         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8827     fi
8828     AC_SUBST(BFFVALIDATOR)
8829 else
8830     AC_MSG_RESULT([no])
8833 dnl ===================================================================
8834 dnl Check for C preprocessor to use
8835 dnl ===================================================================
8836 AC_MSG_CHECKING([which C preprocessor to use in idlc])
8837 SYSTEM_UCPP_IS_GCC=
8838 if test -n "$with_idlc_cpp"; then
8839     AC_MSG_RESULT([$with_idlc_cpp])
8840     AC_PATH_PROG(SYSTEM_UCPP, $with_idlc_cpp)
8841     AC_MSG_CHECKING([if $with_idlc_cpp is GCC CPP])
8842     # ucpp will accept -v (to output version), warn about the others as unknown
8843     # and return 1 (due to -v)
8844     # gcc will accept -v (as verbose), --version (to output version) and -nostdinc
8845     # and return 0 (due to --version ) if all options are supported
8846     $SYSTEM_UCPP -v --version -nostdinc >/dev/null 2>/dev/null
8847     if test $? -eq 0;  then
8848         SYSTEM_UCPP_IS_GCC=TRUE
8849         AC_MSG_RESULT([yes])
8850     else
8851         AC_MSG_RESULT([no])
8852     fi
8853 else
8854     AC_MSG_RESULT([ucpp])
8855     AC_MSG_CHECKING([which ucpp to use])
8856     if test -n "$with_system_ucpp" -a "$with_system_ucpp" != "no"; then
8857         AC_MSG_RESULT([external])
8858         AC_PATH_PROG(SYSTEM_UCPP, ucpp)
8859     else
8860         AC_MSG_RESULT([internal])
8861         BUILD_TYPE="$BUILD_TYPE UCPP"
8862     fi
8864 AC_SUBST(SYSTEM_UCPP)
8865 AC_SUBST(SYSTEM_UCPP_IS_GCC)
8867 dnl ===================================================================
8868 dnl Check for epm (not needed for Windows)
8869 dnl ===================================================================
8870 AC_MSG_CHECKING([whether to enable EPM for packing])
8871 if test "$enable_epm" = "yes"; then
8872     AC_MSG_RESULT([yes])
8873     if test "$_os" != "WINNT"; then
8874         if test $_os = Darwin; then
8875             EPM=internal
8876         elif test -n "$with_epm"; then
8877             EPM=$with_epm
8878         else
8879             AC_PATH_PROG(EPM, epm, no)
8880         fi
8881         if test "$EPM" = "no" -o "$EPM" = "internal"; then
8882             AC_MSG_NOTICE([EPM will be built.])
8883             BUILD_TYPE="$BUILD_TYPE EPM"
8884             EPM=${WORKDIR}/UnpackedTarball/epm/epm
8885         else
8886             # Gentoo has some epm which is something different...
8887             AC_MSG_CHECKING([whether the found epm is the right epm])
8888             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
8889                 AC_MSG_RESULT([yes])
8890             else
8891                 AC_MSG_ERROR([no. Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8892             fi
8893             AC_MSG_CHECKING([epm version])
8894             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
8895             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
8896                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
8897                 AC_MSG_RESULT([OK, >= 3.7])
8898             else
8899                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
8900                 AC_MSG_ERROR([Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8901             fi
8902         fi
8903     fi
8905     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
8906         AC_MSG_CHECKING([for rpm])
8907         for a in "$RPM" rpmbuild rpm; do
8908             $a --usage >/dev/null 2> /dev/null
8909             if test $? -eq 0; then
8910                 RPM=$a
8911                 break
8912             else
8913                 $a --version >/dev/null 2> /dev/null
8914                 if test $? -eq 0; then
8915                     RPM=$a
8916                     break
8917                 fi
8918             fi
8919         done
8920         if test -z "$RPM"; then
8921             AC_MSG_ERROR([not found])
8922         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
8923             RPM_PATH=`which $RPM`
8924             AC_MSG_RESULT([$RPM_PATH])
8925             SCPDEFS="$SCPDEFS -DWITH_RPM"
8926         else
8927             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
8928         fi
8929     fi
8930     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
8931         AC_PATH_PROG(DPKG, dpkg, no)
8932         if test "$DPKG" = "no"; then
8933             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
8934         fi
8935     fi
8936     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
8937        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
8938         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
8939             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
8940                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
8941                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
8942                     AC_MSG_RESULT([yes])
8943                 else
8944                     AC_MSG_RESULT([no])
8945                     if echo "$PKGFORMAT" | $GREP -q rpm; then
8946                         _pt="rpm"
8947                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
8948                         add_warning "the rpms will need to be installed with --nodeps"
8949                     else
8950                         _pt="pkg"
8951                     fi
8952                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
8953                     add_warning "the ${_pt}s will not be relocatable"
8954                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
8955                                  relocation will work, you need to patch your epm with the
8956                                  patch in epm/epm-3.7.patch or build with
8957                                  --with-epm=internal which will build a suitable epm])
8958                 fi
8959             fi
8960         fi
8961     fi
8962     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
8963         AC_PATH_PROG(PKGMK, pkgmk, no)
8964         if test "$PKGMK" = "no"; then
8965             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
8966         fi
8967     fi
8968     AC_SUBST(RPM)
8969     AC_SUBST(DPKG)
8970     AC_SUBST(PKGMK)
8971 else
8972     for i in $PKGFORMAT; do
8973         case "$i" in
8974         aix | bsd | deb | pkg | rpm | native | portable)
8975             AC_MSG_ERROR(
8976                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
8977             ;;
8978         esac
8979     done
8980     AC_MSG_RESULT([no])
8981     EPM=NO
8983 AC_SUBST(EPM)
8985 ENABLE_LWP=
8986 if test "$enable_lotuswordpro" = "yes"; then
8987     ENABLE_LWP="TRUE"
8989 AC_SUBST(ENABLE_LWP)
8991 dnl ===================================================================
8992 dnl Check for building ODK
8993 dnl ===================================================================
8994 if test "$enable_odk" != yes; then
8995     unset DOXYGEN
8996 else
8997     if test "$with_doxygen" = no; then
8998         AC_MSG_CHECKING([for doxygen])
8999         unset DOXYGEN
9000         AC_MSG_RESULT([no])
9001     else
9002         if test "$with_doxygen" = yes; then
9003             AC_PATH_PROG([DOXYGEN], [doxygen])
9004             if test -z "$DOXYGEN"; then
9005                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
9006             fi
9007             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
9008                 if ! dot -V 2>/dev/null; then
9009                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
9010                 fi
9011             fi
9012         else
9013             AC_MSG_CHECKING([for doxygen])
9014             DOXYGEN=$with_doxygen
9015             AC_MSG_RESULT([$DOXYGEN])
9016         fi
9017         if test -n "$DOXYGEN"; then
9018             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
9019             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
9020             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
9021                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
9022             fi
9023         fi
9024     fi
9026 AC_SUBST([DOXYGEN])
9028 AC_MSG_CHECKING([whether to build the ODK])
9029 if test "$enable_odk" = yes; then
9030     AC_MSG_RESULT([yes])
9031     BUILD_TYPE="$BUILD_TYPE ODK"
9032 else
9033     AC_MSG_RESULT([no])
9036 dnl ===================================================================
9037 dnl Check for system zlib
9038 dnl ===================================================================
9039 if test "$with_system_zlib" = "auto"; then
9040     case "$_os" in
9041     WINNT)
9042         with_system_zlib="$with_system_libs"
9043         ;;
9044     *)
9045         if test "$enable_fuzzers" != "yes"; then
9046             with_system_zlib=yes
9047         else
9048             with_system_zlib=no
9049         fi
9050         ;;
9051     esac
9054 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
9055 dnl and has no pkg-config for it at least on some tinderboxes,
9056 dnl so leaving that out for now
9057 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
9058 AC_MSG_CHECKING([which zlib to use])
9059 if test "$with_system_zlib" = "yes"; then
9060     AC_MSG_RESULT([external])
9061     SYSTEM_ZLIB=TRUE
9062     AC_CHECK_HEADER(zlib.h, [],
9063         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
9064     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
9065         [AC_MSG_ERROR(zlib not found or functional)], [])
9066 else
9067     AC_MSG_RESULT([internal])
9068     SYSTEM_ZLIB=
9069     BUILD_TYPE="$BUILD_TYPE ZLIB"
9070     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
9071     ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
9073 AC_SUBST(ZLIB_CFLAGS)
9074 AC_SUBST(ZLIB_LIBS)
9075 AC_SUBST(SYSTEM_ZLIB)
9077 dnl ===================================================================
9078 dnl Check for system jpeg
9079 dnl ===================================================================
9080 AC_MSG_CHECKING([which libjpeg to use])
9081 if test "$with_system_jpeg" = "yes"; then
9082     AC_MSG_RESULT([external])
9083     SYSTEM_LIBJPEG=TRUE
9084     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
9085         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
9086     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
9087         [AC_MSG_ERROR(jpeg library not found or functional)], [])
9088 else
9089     SYSTEM_LIBJPEG=
9090     AC_MSG_RESULT([internal, libjpeg-turbo])
9091     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
9093     case "$host_cpu" in
9094     x86_64 | amd64 | i*86 | x86 | ia32)
9095         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
9096         if test -z "$NASM" -a "$build_os" = "cygwin"; then
9097             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
9098                 NASM="$LODE_HOME/opt/bin/nasm"
9099             elif test -x "/opt/lo/bin/nasm"; then
9100                 NASM="/opt/lo/bin/nasm"
9101             fi
9102         fi
9104         if test -n "$NASM"; then
9105             AC_MSG_CHECKING([for object file format of host system])
9106             case "$host_os" in
9107               cygwin* | mingw* | pw32* | wsl*)
9108                 case "$host_cpu" in
9109                   x86_64)
9110                     objfmt='Win64-COFF'
9111                     ;;
9112                   *)
9113                     objfmt='Win32-COFF'
9114                     ;;
9115                 esac
9116               ;;
9117               msdosdjgpp* | go32*)
9118                 objfmt='COFF'
9119               ;;
9120               os2-emx*) # not tested
9121                 objfmt='MSOMF' # obj
9122               ;;
9123               linux*coff* | linux*oldld*)
9124                 objfmt='COFF' # ???
9125               ;;
9126               linux*aout*)
9127                 objfmt='a.out'
9128               ;;
9129               linux*)
9130                 case "$host_cpu" in
9131                   x86_64)
9132                     objfmt='ELF64'
9133                     ;;
9134                   *)
9135                     objfmt='ELF'
9136                     ;;
9137                 esac
9138               ;;
9139               kfreebsd* | freebsd* | netbsd* | openbsd*)
9140                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9141                   objfmt='BSD-a.out'
9142                 else
9143                   case "$host_cpu" in
9144                     x86_64 | amd64)
9145                       objfmt='ELF64'
9146                       ;;
9147                     *)
9148                       objfmt='ELF'
9149                       ;;
9150                   esac
9151                 fi
9152               ;;
9153               solaris* | sunos* | sysv* | sco*)
9154                 case "$host_cpu" in
9155                   x86_64)
9156                     objfmt='ELF64'
9157                     ;;
9158                   *)
9159                     objfmt='ELF'
9160                     ;;
9161                 esac
9162               ;;
9163               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9164                 case "$host_cpu" in
9165                   x86_64)
9166                     objfmt='Mach-O64'
9167                     ;;
9168                   *)
9169                     objfmt='Mach-O'
9170                     ;;
9171                 esac
9172               ;;
9173               *)
9174                 objfmt='ELF ?'
9175               ;;
9176             esac
9178             AC_MSG_RESULT([$objfmt])
9179             if test "$objfmt" = 'ELF ?'; then
9180               objfmt='ELF'
9181               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9182             fi
9184             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9185             case "$objfmt" in
9186               MSOMF)      NAFLAGS='-fobj -DOBJ32 -DPIC';;
9187               Win32-COFF) NAFLAGS='-fwin32 -DWIN32 -DPIC';;
9188               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__ -DPIC';;
9189               COFF)       NAFLAGS='-fcoff -DCOFF -DPIC';;
9190               a.out)      NAFLAGS='-faout -DAOUT -DPIC';;
9191               BSD-a.out)  NAFLAGS='-faoutb -DAOUT -DPIC';;
9192               ELF)        NAFLAGS='-felf -DELF -DPIC';;
9193               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__ -DPIC';;
9194               RDF)        NAFLAGS='-frdf -DRDF -DPIC';;
9195               Mach-O)     NAFLAGS='-fmacho -DMACHO -DPIC';;
9196               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__ -DPIC';;
9197             esac
9198             AC_MSG_RESULT([$NAFLAGS])
9200             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9201             cat > conftest.asm << EOF
9202             [%line __oline__ "configure"
9203                     section .text
9204                     global  _main,main
9205             _main:
9206             main:   xor     eax,eax
9207                     ret
9208             ]
9210             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9211             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9212               AC_MSG_RESULT(yes)
9213             else
9214               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9215               cat conftest.asm >&AS_MESSAGE_LOG_FD
9216               rm -rf conftest*
9217               AC_MSG_RESULT(no)
9218               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9219               NASM=""
9220             fi
9222         fi
9224         if test -z "$NASM"; then
9225 cat << _EOS
9226 ****************************************************************************
9227 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9228 To get one please:
9230 _EOS
9231             if test "$build_os" = "cygwin"; then
9232 cat << _EOS
9233 install a pre-compiled binary for Win32
9235 mkdir -p /opt/lo/bin
9236 cd /opt/lo/bin
9237 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9238 chmod +x nasm
9240 or get and install one from http://www.nasm.us/
9242 Then re-run autogen.sh
9244 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9245 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`which nasm\` finds it.
9247 _EOS
9248             else
9249 cat << _EOS
9250 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md
9252 _EOS
9253             fi
9254             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9255             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9256         fi
9257       ;;
9258     esac
9261 AC_SUBST(NASM)
9262 AC_SUBST(NAFLAGS)
9263 AC_SUBST(LIBJPEG_CFLAGS)
9264 AC_SUBST(LIBJPEG_LIBS)
9265 AC_SUBST(SYSTEM_LIBJPEG)
9267 dnl ===================================================================
9268 dnl Check for system clucene
9269 dnl ===================================================================
9270 dnl we should rather be using
9271 dnl libo_CHECK_SYSTEM_MODULE([clucence],[CLUCENE],[liblucence-core]) here
9272 dnl but the contribs-lib check seems tricky
9273 if test "$enable_xmlhelp" = yes -o "$enable_extension_integration" = yes; then
9274 AC_MSG_CHECKING([which clucene to use])
9275 if test "$with_system_clucene" = "yes"; then
9276     AC_MSG_RESULT([external])
9277     SYSTEM_CLUCENE=TRUE
9278     PKG_CHECK_MODULES(CLUCENE, libclucene-core)
9279     CLUCENE_CFLAGS=[$(printf '%s' "$CLUCENE_CFLAGS" | sed -e 's@-I[^ ]*/CLucene/ext@@' -e "s/-I/${ISYSTEM?}/g")]
9280     FilterLibs "${CLUCENE_LIBS}"
9281     CLUCENE_LIBS="${filteredlibs}"
9282     AC_LANG_PUSH([C++])
9283     save_CXXFLAGS=$CXXFLAGS
9284     save_CPPFLAGS=$CPPFLAGS
9285     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9286     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9287     dnl http://sourceforge.net/tracker/index.php?func=detail&aid=3392466&group_id=80013&atid=558446
9288     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9289     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9290                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9291     CXXFLAGS=$save_CXXFLAGS
9292     CPPFLAGS=$save_CPPFLAGS
9293     AC_LANG_POP([C++])
9295     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9296 else
9297     AC_MSG_RESULT([internal])
9298     SYSTEM_CLUCENE=
9299     BUILD_TYPE="$BUILD_TYPE CLUCENE"
9302 AC_SUBST(SYSTEM_CLUCENE)
9303 AC_SUBST(CLUCENE_CFLAGS)
9304 AC_SUBST(CLUCENE_LIBS)
9306 dnl ===================================================================
9307 dnl Check for system expat
9308 dnl ===================================================================
9309 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9311 dnl ===================================================================
9312 dnl Check for system xmlsec
9313 dnl ===================================================================
9314 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.28])
9316 AC_MSG_CHECKING([whether to enable Embedded OpenType support])
9317 if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_eot" = "yes"; then
9318     ENABLE_EOT="TRUE"
9319     AC_DEFINE([ENABLE_EOT])
9320     AC_MSG_RESULT([yes])
9322     libo_CHECK_SYSTEM_MODULE([libeot],[LIBEOT],[libeot >= 0.01])
9323 else
9324     ENABLE_EOT=
9325     AC_MSG_RESULT([no])
9327 AC_SUBST([ENABLE_EOT])
9329 dnl ===================================================================
9330 dnl Check for DLP libs
9331 dnl ===================================================================
9332 AS_IF([test "$COM" = "MSC"],
9333       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9334       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9336 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1],["-I${WORKDIR}/UnpackedTarball/librevenge/inc"],["-L${librevenge_libdir} -lrevenge-0.0"])
9338 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9340 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9342 AS_IF([test "$COM" = "MSC"],
9343       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9344       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9346 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10],["-I${WORKDIR}/UnpackedTarball/libwpd/inc"],["-L${libwpd_libdir} -lwpd-0.10"])
9348 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9350 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9351 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.12])
9353 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9355 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9357 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9359 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.1])
9360 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.20])
9362 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9363 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10])
9365 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9367 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9368 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9370 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9372 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9374 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9376 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9378 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9379 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9381 dnl ===================================================================
9382 dnl Check for system lcms2
9383 dnl ===================================================================
9384 if test "$with_system_lcms2" != "yes"; then
9385     SYSTEM_LCMS2=
9387 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2],["-I${WORKDIR}/UnpackedTarball/lcms2/include"],["-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"])
9388 if test "$GCC" = "yes"; then
9389     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9391 if test "$COM" = "MSC"; then # override the above
9392     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9395 dnl ===================================================================
9396 dnl Check for system cppunit
9397 dnl ===================================================================
9398 if test "$_os" != "Android" ; then
9399     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9402 dnl ===================================================================
9403 dnl Check whether freetype is available
9404 dnl ===================================================================
9405 if test "$using_freetype_fontconfig" = yes; then
9406     AC_MSG_CHECKING([which freetype to use])
9408 if test "$using_freetype_fontconfig" = yes -a "$test_system_freetype" != no; then
9409     AC_MSG_RESULT([external])
9410     # FreeType has 3 different kinds of versions
9411     # * release, like 2.4.10
9412     # * libtool, like 13.0.7 (this what pkg-config returns)
9413     # * soname
9414     # FreeType's docs/VERSION.DLL provides a table mapping between the three
9415     #
9416     # 9.9.3 is 2.2.0
9417     # When the minimal version is at least 2.8.1, remove Skia's check down below.
9418     PKG_CHECK_MODULES(FREETYPE, freetype2 >= 9.9.3)
9419     FREETYPE_CFLAGS=$(printf '%s' "$FREETYPE_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9420     FilterLibs "${FREETYPE_LIBS}"
9421     FREETYPE_LIBS="${filteredlibs}"
9422     SYSTEM_FREETYPE=TRUE
9423 elif test "$using_freetype_fontconfig" = yes; then
9424     AC_MSG_RESULT([internal])
9425     FREETYPE_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"
9426     if test "x$ac_config_site_64bit_host" = xYES; then
9427         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9428     else
9429         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9430     fi
9431     BUILD_TYPE="$BUILD_TYPE FREETYPE"
9433 AC_SUBST(FREETYPE_CFLAGS)
9434 AC_SUBST(FREETYPE_LIBS)
9435 AC_SUBST([SYSTEM_FREETYPE])
9437 # ===================================================================
9438 # Check for system libxslt
9439 # to prevent incompatibilities between internal libxml2 and external libxslt,
9440 # or vice versa, use with_system_libxml here
9441 # ===================================================================
9442 if test "$with_system_libxml" = "auto"; then
9443     case "$_os" in
9444     WINNT|iOS|Android)
9445         with_system_libxml="$with_system_libs"
9446         ;;
9447     Emscripten)
9448         with_system_libxml=no
9449         ;;
9450     *)
9451         if test "$enable_fuzzers" != "yes"; then
9452             with_system_libxml=yes
9453         else
9454             with_system_libxml=no
9455         fi
9456         ;;
9457     esac
9460 AC_MSG_CHECKING([which libxslt to use])
9461 if test "$with_system_libxml" = "yes"; then
9462     AC_MSG_RESULT([external])
9463     SYSTEM_LIBXSLT=TRUE
9464     if test "$_os" = "Darwin"; then
9465         dnl make sure to use SDK path
9466         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9467         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9468         dnl omit -L/usr/lib
9469         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9470         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9471     else
9472         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9473         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9474         FilterLibs "${LIBXSLT_LIBS}"
9475         LIBXSLT_LIBS="${filteredlibs}"
9476         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9477         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9478         FilterLibs "${LIBEXSLT_LIBS}"
9479         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9480     fi
9482     dnl Check for xsltproc
9483     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9484     if test "$XSLTPROC" = "no"; then
9485         AC_MSG_ERROR([xsltproc is required])
9486     fi
9487 else
9488     AC_MSG_RESULT([internal])
9489     SYSTEM_LIBXSLT=
9490     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9492 AC_SUBST(SYSTEM_LIBXSLT)
9493 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9494     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9496 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9498 AC_SUBST(LIBEXSLT_CFLAGS)
9499 AC_SUBST(LIBEXSLT_LIBS)
9500 AC_SUBST(LIBXSLT_CFLAGS)
9501 AC_SUBST(LIBXSLT_LIBS)
9502 AC_SUBST(XSLTPROC)
9504 # ===================================================================
9505 # Check for system libxml
9506 # ===================================================================
9507 AC_MSG_CHECKING([which libxml to use])
9508 if test "$with_system_libxml" = "yes"; then
9509     AC_MSG_RESULT([external])
9510     SYSTEM_LIBXML=TRUE
9511     if test "$_os" = "Darwin"; then
9512         dnl make sure to use SDK path
9513         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9514         dnl omit -L/usr/lib
9515         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9516     elif test $_os = iOS; then
9517         dnl make sure to use SDK path
9518         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9519         LIBXML_CFLAGS="-I$usr/include/libxml2"
9520         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9521     else
9522         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9523         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9524         FilterLibs "${LIBXML_LIBS}"
9525         LIBXML_LIBS="${filteredlibs}"
9526     fi
9528     dnl Check for xmllint
9529     AC_PATH_PROG(XMLLINT, xmllint, no)
9530     if test "$XMLLINT" = "no"; then
9531         AC_MSG_ERROR([xmllint is required])
9532     fi
9533 else
9534     AC_MSG_RESULT([internal])
9535     SYSTEM_LIBXML=
9536     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9537     if test "$COM" = "MSC"; then
9538         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9539     fi
9540     if test "$COM" = "MSC"; then
9541         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9542     else
9543         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9544         if test "$_os" = Android; then
9545             LIBXML_LIBS="$LIBXML_LIBS -lm"
9546         fi
9547     fi
9548     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9550 AC_SUBST(SYSTEM_LIBXML)
9551 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9552     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9554 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9555 AC_SUBST(LIBXML_CFLAGS)
9556 AC_SUBST(LIBXML_LIBS)
9557 AC_SUBST(XMLLINT)
9559 # =====================================================================
9560 # Checking for a Python interpreter with version >= 3.3.
9561 # Optionally user can pass an option to configure, i. e.
9562 # ./configure PYTHON=/usr/bin/python
9563 # =====================================================================
9564 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9565     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9566     # unless PYTHON is defined as above which allows 'system'
9567     enable_python=internal
9569 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9570     if test -n "$PYTHON"; then
9571         PYTHON_FOR_BUILD=$PYTHON
9572     else
9573         # This allows a lack of system python with no error, we use internal one in that case.
9574         AM_PATH_PYTHON([3.3],, [:])
9575         # Clean PYTHON_VERSION checked below if cross-compiling
9576         PYTHON_VERSION=""
9577         if test "$PYTHON" != ":"; then
9578             PYTHON_FOR_BUILD=$PYTHON
9579         fi
9580     fi
9582 AC_SUBST(PYTHON_FOR_BUILD)
9584 # Checks for Python to use for Pyuno
9585 AC_MSG_CHECKING([which Python to use for Pyuno])
9586 case "$enable_python" in
9587 no|disable)
9588     if test -z $PYTHON_FOR_BUILD; then
9589         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9590         # requirement from the choice whether to include Python stuff in the installer, but why
9591         # bother?
9592         if test "$cross_compiling" = yes; then
9593             enable_python=system
9594         else
9595             AC_MSG_ERROR([Python is required at build time.])
9596         fi
9597     fi
9598     enable_python=no
9599     AC_MSG_RESULT([none])
9600     ;;
9601 ""|yes|auto)
9602     if test "$DISABLE_SCRIPTING" = TRUE -a -n "$PYTHON_FOR_BUILD"; then
9603         AC_MSG_RESULT([no, overridden by --disable-scripting])
9604         enable_python=no
9605     elif test $build_os = cygwin; then
9606         dnl When building on Windows we don't attempt to use any installed
9607         dnl "system"  Python.
9608         AC_MSG_RESULT([fully internal])
9609         enable_python=internal
9610     elif test "$cross_compiling" = yes; then
9611         AC_MSG_RESULT([system])
9612         enable_python=system
9613     else
9614         # Unset variables set by the above AM_PATH_PYTHON so that
9615         # we actually do check anew.
9616         AC_MSG_RESULT([])
9617         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
9618         AM_PATH_PYTHON([3.3],, [:])
9619         AC_MSG_CHECKING([which Python to use for Pyuno])
9620         if test "$PYTHON" = ":"; then
9621             if test -z "$PYTHON_FOR_BUILD"; then
9622                 AC_MSG_RESULT([fully internal])
9623             else
9624                 AC_MSG_RESULT([internal])
9625             fi
9626             enable_python=internal
9627         else
9628             AC_MSG_RESULT([system])
9629             enable_python=system
9630         fi
9631     fi
9632     ;;
9633 internal)
9634     AC_MSG_RESULT([internal])
9635     ;;
9636 fully-internal)
9637     AC_MSG_RESULT([fully internal])
9638     enable_python=internal
9639     ;;
9640 system)
9641     AC_MSG_RESULT([system])
9642     if test "$_os" = Darwin -a -z "$PYTHON"; then
9643         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
9644     fi
9645     ;;
9647     AC_MSG_ERROR([Incorrect --enable-python option])
9648     ;;
9649 esac
9651 if test $enable_python != no; then
9652     BUILD_TYPE="$BUILD_TYPE PYUNO"
9655 if test $enable_python = system; then
9656     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
9657         # Fallback: Accept these in the environment, or as set above
9658         # for MacOSX.
9659         :
9660     elif test "$cross_compiling" != yes; then
9661         # Unset variables set by the above AM_PATH_PYTHON so that
9662         # we actually do check anew.
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         # This causes an error if no python command is found
9665         AM_PATH_PYTHON([3.3])
9666         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
9667         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
9668         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
9669         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
9670         if test -z "$PKG_CONFIG"; then
9671             PYTHON_CFLAGS="-I$python_include"
9672             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9673         elif $PKG_CONFIG --exists python-$python_version-embed; then
9674             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
9675             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
9676         elif $PKG_CONFIG --exists python-$python_version; then
9677             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
9678             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
9679         else
9680             PYTHON_CFLAGS="-I$python_include"
9681             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9682         fi
9683         FilterLibs "${PYTHON_LIBS}"
9684         PYTHON_LIBS="${filteredlibs}"
9685     else
9686         dnl How to find out the cross-compilation Python installation path?
9687         AC_MSG_CHECKING([for python version])
9688         AS_IF([test -n "$PYTHON_VERSION"],
9689               [AC_MSG_RESULT([$PYTHON_VERSION])],
9690               [AC_MSG_RESULT([not found])
9691                AC_MSG_ERROR([no usable python found])])
9692         test -n "$PYTHON_CFLAGS" && break
9693     fi
9695     dnl Check if the headers really work
9696     save_CPPFLAGS="$CPPFLAGS"
9697     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
9698     AC_CHECK_HEADER(Python.h)
9699     CPPFLAGS="$save_CPPFLAGS"
9701     # let the PYTHON_FOR_BUILD match the same python installation that
9702     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
9703     # better for PythonTests.
9704     PYTHON_FOR_BUILD=$PYTHON
9707 if test "$with_lxml" != no; then
9708     if test -z "$PYTHON_FOR_BUILD"; then
9709         case $build_os in
9710             cygwin)
9711                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
9712                 ;;
9713             *)
9714                 if test "$cross_compiling" != yes ; then
9715                     BUILD_TYPE="$BUILD_TYPE LXML"
9716                 fi
9717                 ;;
9718         esac
9719     else
9720         AC_MSG_CHECKING([for python lxml])
9721         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
9722             AC_MSG_RESULT([yes])
9723         else
9724             case $build_os in
9725                 cygwin)
9726                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
9727                     ;;
9728                 *)
9729                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
9730                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
9731                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
9732                         else
9733                             BUILD_TYPE="$BUILD_TYPE LXML"
9734                             AC_MSG_RESULT([no, using internal lxml])
9735                         fi
9736                     else
9737                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
9738                     fi
9739                     ;;
9740             esac
9741         fi
9742     fi
9745 dnl By now enable_python should be "system", "internal" or "no"
9746 case $enable_python in
9747 system)
9748     SYSTEM_PYTHON=TRUE
9750     if test "x$ac_cv_header_Python_h" != "xyes"; then
9751        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
9752     fi
9754     AC_LANG_PUSH(C)
9755     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
9756     AC_MSG_CHECKING([for correct python library version])
9757        AC_RUN_IFELSE([AC_LANG_SOURCE([[
9758 #include <Python.h>
9760 int main(int argc, char **argv) {
9761    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
9762    else return 1;
9764        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
9765     AC_LANG_POP(C)
9767     dnl FIXME Check if the Python library can be linked with, too?
9768     ;;
9770 internal)
9771     SYSTEM_PYTHON=
9772     PYTHON_VERSION_MAJOR=3
9773     PYTHON_VERSION_MINOR=8
9774     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.10
9775     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
9776         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
9777     fi
9778     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
9779     BUILD_TYPE="$BUILD_TYPE PYTHON"
9780     if test "$OS" = LINUX -o "$OS" = WNT ; then
9781         BUILD_TYPE="$BUILD_TYPE LIBFFI"
9782     fi
9783     # Embedded Python dies without Home set
9784     if test "$HOME" = ""; then
9785         export HOME=""
9786     fi
9787     ;;
9789     DISABLE_PYTHON=TRUE
9790     SYSTEM_PYTHON=
9791     ;;
9793     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
9794     ;;
9795 esac
9797 AC_SUBST(DISABLE_PYTHON)
9798 AC_SUBST(SYSTEM_PYTHON)
9799 AC_SUBST(PYTHON_CFLAGS)
9800 AC_SUBST(PYTHON_LIBS)
9801 AC_SUBST(PYTHON_VERSION)
9802 AC_SUBST(PYTHON_VERSION_MAJOR)
9803 AC_SUBST(PYTHON_VERSION_MINOR)
9805 AC_MSG_CHECKING([whether to build LibreLogo])
9806 case "$enable_python" in
9807 no|disable)
9808     AC_MSG_RESULT([no; Python disabled])
9809     ;;
9811     if test "${enable_librelogo}" = "no"; then
9812         AC_MSG_RESULT([no])
9813     else
9814         AC_MSG_RESULT([yes])
9815         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
9816         AC_DEFINE([ENABLE_LIBRELOGO],1)
9817     fi
9818     ;;
9819 esac
9820 AC_SUBST(ENABLE_LIBRELOGO)
9822 ENABLE_MARIADBC=
9823 MARIADBC_MAJOR=1
9824 MARIADBC_MINOR=0
9825 MARIADBC_MICRO=2
9826 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
9827 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
9828     ENABLE_MARIADBC=TRUE
9829     AC_MSG_RESULT([yes])
9830     BUILD_TYPE="$BUILD_TYPE MARIADBC"
9831 else
9832     AC_MSG_RESULT([no])
9834 AC_SUBST(ENABLE_MARIADBC)
9835 AC_SUBST(MARIADBC_MAJOR)
9836 AC_SUBST(MARIADBC_MINOR)
9837 AC_SUBST(MARIADBC_MICRO)
9839 if test "$ENABLE_MARIADBC" = "TRUE"; then
9840     dnl ===================================================================
9841     dnl Check for system MariaDB
9842     dnl ===================================================================
9843     AC_MSG_CHECKING([which MariaDB to use])
9844     if test "$with_system_mariadb" = "yes"; then
9845         AC_MSG_RESULT([external])
9846         SYSTEM_MARIADB_CONNECTOR_C=TRUE
9847         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
9848         if test -z "$MARIADBCONFIG"; then
9849             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
9850             if test -z "$MARIADBCONFIG"; then
9851                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
9852                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
9853             fi
9854         fi
9855         AC_MSG_CHECKING([MariaDB version])
9856         MARIADB_VERSION=`$MARIADBCONFIG --version`
9857         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
9858         if test "$MARIADB_MAJOR" -ge "5"; then
9859             AC_MSG_RESULT([OK])
9860         else
9861             AC_MSG_ERROR([too old, use 5.0.x or later])
9862         fi
9863         AC_MSG_CHECKING([for MariaDB Client library])
9864         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
9865         if test "$COM_IS_CLANG" = TRUE; then
9866             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
9867         fi
9868         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
9869         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
9870         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
9871         dnl linux32:
9872         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
9873             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
9874             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
9875                 | sed -e 's|/lib64/|/lib/|')
9876         fi
9877         FilterLibs "${MARIADB_LIBS}"
9878         MARIADB_LIBS="${filteredlibs}"
9879         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
9880         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
9881         if test "$enable_bundle_mariadb" = "yes"; then
9882             AC_MSG_RESULT([yes])
9883             BUNDLE_MARIADB_CONNECTOR_C=TRUE
9884             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
9886 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
9888 /g' | grep -E '(mysqlclient|mariadb)')
9889             if test "$_os" = "Darwin"; then
9890                 LIBMARIADB=${LIBMARIADB}.dylib
9891             elif test "$_os" = "WINNT"; then
9892                 LIBMARIADB=${LIBMARIADB}.dll
9893             else
9894                 LIBMARIADB=${LIBMARIADB}.so
9895             fi
9896             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
9897             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
9898             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
9899                 AC_MSG_RESULT([found.])
9900                 PathFormat "$LIBMARIADB_PATH"
9901                 LIBMARIADB_PATH="$formatted_path"
9902             else
9903                 AC_MSG_ERROR([not found.])
9904             fi
9905         else
9906             AC_MSG_RESULT([no])
9907             BUNDLE_MARIADB_CONNECTOR_C=
9908         fi
9909     else
9910         AC_MSG_RESULT([internal])
9911         SYSTEM_MARIADB_CONNECTOR_C=
9912         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
9913         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
9914         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
9915     fi
9917     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
9918     AC_SUBST(MARIADB_CFLAGS)
9919     AC_SUBST(MARIADB_LIBS)
9920     AC_SUBST(LIBMARIADB)
9921     AC_SUBST(LIBMARIADB_PATH)
9922     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
9925 dnl ===================================================================
9926 dnl Check for system hsqldb
9927 dnl ===================================================================
9928 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
9929     HSQLDB_USE_JDBC_4_1=
9930     AC_MSG_CHECKING([which hsqldb to use])
9931     if test "$with_system_hsqldb" = "yes"; then
9932         AC_MSG_RESULT([external])
9933         SYSTEM_HSQLDB=TRUE
9934         if test -z $HSQLDB_JAR; then
9935             HSQLDB_JAR=/usr/share/java/hsqldb.jar
9936         fi
9937         if ! test -f $HSQLDB_JAR; then
9938                AC_MSG_ERROR(hsqldb.jar not found.)
9939         fi
9940         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
9941         export HSQLDB_JAR
9942         if $PERL -e \
9943            'use Archive::Zip;
9944             my $file = "$ENV{'HSQLDB_JAR'}";
9945             my $zip = Archive::Zip->new( $file );
9946             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
9947             if ( $mf =~ m/Specification-Version: 1.8.*/ )
9948             {
9949                 push @l, split(/\n/, $mf);
9950                 foreach my $line (@l)
9951                 {
9952                     if ($line =~ m/Specification-Version:/)
9953                     {
9954                         ($t, $version) = split (/:/,$line);
9955                         $version =~ s/^\s//;
9956                         ($a, $b, $c, $d) = split (/\./,$version);
9957                         if ($c == "0" && $d > "8")
9958                         {
9959                             exit 0;
9960                         }
9961                         else
9962                         {
9963                             exit 1;
9964                         }
9965                     }
9966                 }
9967             }
9968             else
9969             {
9970                 exit 1;
9971             }'; then
9972             AC_MSG_RESULT([yes])
9973         else
9974             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
9975         fi
9976     else
9977         AC_MSG_RESULT([internal])
9978         SYSTEM_HSQLDB=
9979         BUILD_TYPE="$BUILD_TYPE HSQLDB"
9980         NEED_ANT=TRUE
9981         AC_MSG_CHECKING([whether hsqldb should be built with JDBC 4.1])
9982         javanumver=`$JAVAINTERPRETER -version 2>&1 | $AWK -v num=true -f $SRC_ROOT/solenv/bin/getcompver.awk`
9983         if expr "$javanumver" '>=' 000100060000 > /dev/null; then
9984             AC_MSG_RESULT([yes])
9985             HSQLDB_USE_JDBC_4_1=TRUE
9986         else
9987             AC_MSG_RESULT([no])
9988         fi
9989     fi
9990 else
9991     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
9992         BUILD_TYPE="$BUILD_TYPE HSQLDB"
9993     fi
9995 AC_SUBST(SYSTEM_HSQLDB)
9996 AC_SUBST(HSQLDB_JAR)
9997 AC_SUBST([HSQLDB_USE_JDBC_4_1])
9999 dnl ===================================================================
10000 dnl Check for PostgreSQL stuff
10001 dnl ===================================================================
10002 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
10003 if test "x$enable_postgresql_sdbc" != "xno"; then
10004     AC_MSG_RESULT([yes])
10005     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
10007     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
10008         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
10009     fi
10010     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
10011         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
10012     fi
10014     postgres_interface=""
10015     if test "$with_system_postgresql" = "yes"; then
10016         postgres_interface="external PostgreSQL"
10017         SYSTEM_POSTGRESQL=TRUE
10018         if test "$_os" = Darwin; then
10019             supp_path=''
10020             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
10021                 pg_supp_path="$P_SEP$d$pg_supp_path"
10022             done
10023         fi
10024         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
10025         if test -n "$PGCONFIG"; then
10026             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
10027             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
10028         else
10029             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
10030               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
10031               POSTGRESQL_LIB=$POSTGRESQL_LIBS
10032             ],[
10033               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
10034             ])
10035         fi
10036         FilterLibs "${POSTGRESQL_LIB}"
10037         POSTGRESQL_LIB="${filteredlibs}"
10038     else
10039         # if/when anything else than PostgreSQL uses Kerberos,
10040         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
10041         WITH_KRB5=
10042         WITH_GSSAPI=
10043         case "$_os" in
10044         Darwin)
10045             # macOS has system MIT Kerberos 5 since 10.4
10046             if test "$with_krb5" != "no"; then
10047                 WITH_KRB5=TRUE
10048                 save_LIBS=$LIBS
10049                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
10050                 # that the libraries where these functions are located on macOS will change, is it?
10051                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10052                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10053                 KRB5_LIBS=$LIBS
10054                 LIBS=$save_LIBS
10055                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10056                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10057                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10058                 LIBS=$save_LIBS
10059             fi
10060             if test "$with_gssapi" != "no"; then
10061                 WITH_GSSAPI=TRUE
10062                 save_LIBS=$LIBS
10063                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10064                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10065                 GSSAPI_LIBS=$LIBS
10066                 LIBS=$save_LIBS
10067             fi
10068             ;;
10069         WINNT)
10070             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
10071                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
10072             fi
10073             ;;
10074         Linux|GNU|*BSD|DragonFly)
10075             if test "$with_krb5" != "no"; then
10076                 WITH_KRB5=TRUE
10077                 save_LIBS=$LIBS
10078                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10079                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10080                 KRB5_LIBS=$LIBS
10081                 LIBS=$save_LIBS
10082                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10083                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10084                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10085                 LIBS=$save_LIBS
10086             fi
10087             if test "$with_gssapi" != "no"; then
10088                 WITH_GSSAPI=TRUE
10089                 save_LIBS=$LIBS
10090                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10091                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10092                 GSSAPI_LIBS=$LIBS
10093                 LIBS=$save_LIBS
10094             fi
10095             ;;
10096         *)
10097             if test "$with_krb5" = "yes"; then
10098                 WITH_KRB5=TRUE
10099                 save_LIBS=$LIBS
10100                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10101                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10102                 KRB5_LIBS=$LIBS
10103                 LIBS=$save_LIBS
10104                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10105                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10106                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10107                 LIBS=$save_LIBS
10108             fi
10109             if test "$with_gssapi" = "yes"; then
10110                 WITH_GSSAPI=TRUE
10111                 save_LIBS=$LIBS
10112                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10113                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10114                 LIBS=$save_LIBS
10115                 GSSAPI_LIBS=$LIBS
10116             fi
10117         esac
10119         if test -n "$with_libpq_path"; then
10120             SYSTEM_POSTGRESQL=TRUE
10121             postgres_interface="external libpq"
10122             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
10123             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
10124         else
10125             SYSTEM_POSTGRESQL=
10126             postgres_interface="internal"
10127             POSTGRESQL_LIB=""
10128             POSTGRESQL_INC="%OVERRIDE_ME%"
10129             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10130         fi
10131     fi
10133     AC_MSG_CHECKING([PostgreSQL C interface])
10134     AC_MSG_RESULT([$postgres_interface])
10136     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10137         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10138         save_CFLAGS=$CFLAGS
10139         save_CPPFLAGS=$CPPFLAGS
10140         save_LIBS=$LIBS
10141         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10142         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10143         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10144         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10145             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10146         CFLAGS=$save_CFLAGS
10147         CPPFLAGS=$save_CPPFLAGS
10148         LIBS=$save_LIBS
10149     fi
10150     BUILD_POSTGRESQL_SDBC=TRUE
10151 else
10152     AC_MSG_RESULT([no])
10154 AC_SUBST(WITH_KRB5)
10155 AC_SUBST(WITH_GSSAPI)
10156 AC_SUBST(GSSAPI_LIBS)
10157 AC_SUBST(KRB5_LIBS)
10158 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10159 AC_SUBST(SYSTEM_POSTGRESQL)
10160 AC_SUBST(POSTGRESQL_INC)
10161 AC_SUBST(POSTGRESQL_LIB)
10163 dnl ===================================================================
10164 dnl Check for Firebird stuff
10165 dnl ===================================================================
10166 ENABLE_FIREBIRD_SDBC=
10167 if test "$enable_firebird_sdbc" = "yes" ; then
10168     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10170     dnl ===================================================================
10171     dnl Check for system Firebird
10172     dnl ===================================================================
10173     AC_MSG_CHECKING([which Firebird to use])
10174     if test "$with_system_firebird" = "yes"; then
10175         AC_MSG_RESULT([external])
10176         SYSTEM_FIREBIRD=TRUE
10177         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10178         if test -z "$FIREBIRDCONFIG"; then
10179             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10180             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10181                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10182             ])
10183             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10184         else
10185             AC_MSG_NOTICE([fb_config found])
10186             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10187             AC_MSG_CHECKING([for Firebird Client library])
10188             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10189             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10190             FilterLibs "${FIREBIRD_LIBS}"
10191             FIREBIRD_LIBS="${filteredlibs}"
10192         fi
10193         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10194         AC_MSG_CHECKING([Firebird version])
10195         if test -n "${FIREBIRD_VERSION}"; then
10196             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10197             if test "$FIREBIRD_MAJOR" -ge "3"; then
10198                 AC_MSG_RESULT([OK])
10199             else
10200                 AC_MSG_ERROR([Ensure firebird >= 3 is installed])
10201             fi
10202         else
10203             save_CFLAGS="${CFLAGS}"
10204             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10205             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10206 #if defined(FB_API_VER) && FB_API_VER == 30
10207 int fb_api_is_30(void) { return 0; }
10208 #else
10209 #error "Wrong Firebird API version"
10210 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10211             CFLAGS="$save_CFLAGS"
10212         fi
10213         ENABLE_FIREBIRD_SDBC=TRUE
10214         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10215     elif test "$enable_database_connectivity" = no; then
10216         AC_MSG_RESULT([none])
10217     elif test "$cross_compiling" = "yes"; then
10218         AC_MSG_RESULT([none])
10219     else
10220         dnl Embedded Firebird has version 3.0
10221         dnl We need libatomic_ops for any non X86/X64 system
10222         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10223             dnl ===================================================================
10224             dnl Check for system libatomic_ops
10225             dnl ===================================================================
10226             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10227             if test "$with_system_libatomic_ops" = "yes"; then
10228                 SYSTEM_LIBATOMIC_OPS=TRUE
10229                 AC_CHECK_HEADERS(atomic_ops.h, [],
10230                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10231             else
10232                 SYSTEM_LIBATOMIC_OPS=
10233                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10234                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10235                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10236             fi
10237         fi
10239         AC_MSG_RESULT([internal])
10240         SYSTEM_FIREBIRD=
10241         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10242         FIREBIRD_LIBS="-lfbclient"
10244         if test "$with_system_libtommath" = "yes"; then
10245             SYSTEM_LIBTOMMATH=TRUE
10246             dnl check for tommath presence
10247             save_LIBS=$LIBS
10248             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10249             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10250             LIBS=$save_LIBS
10251         else
10252             SYSTEM_LIBTOMMATH=
10253             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10254             LIBTOMMATH_LIBS="-ltommath"
10255             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10256         fi
10258         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10259         ENABLE_FIREBIRD_SDBC=TRUE
10260         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10261     fi
10263 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10264 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10265 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10266 AC_SUBST(LIBATOMIC_OPS_LIBS)
10267 AC_SUBST(SYSTEM_FIREBIRD)
10268 AC_SUBST(FIREBIRD_CFLAGS)
10269 AC_SUBST(FIREBIRD_LIBS)
10270 AC_SUBST(SYSTEM_LIBTOMMATH)
10271 AC_SUBST(LIBTOMMATH_CFLAGS)
10272 AC_SUBST(LIBTOMMATH_LIBS)
10274 dnl ===================================================================
10275 dnl Check for system curl
10276 dnl ===================================================================
10277 AC_MSG_CHECKING([which libcurl to use])
10278 if test "$with_system_curl" = "auto"; then
10279     with_system_curl="$with_system_libs"
10282 if test "$enable_curl" = "yes" -a "$with_system_curl" = "yes"; then
10283     AC_MSG_RESULT([external])
10284     SYSTEM_CURL=TRUE
10286     # First try PKGCONFIG and then fall back
10287     PKG_CHECK_MODULES(CURL, libcurl >= 7.63.0,, [:])
10289     if test -n "$CURL_PKG_ERRORS"; then
10290         AC_PATH_PROG(CURLCONFIG, curl-config)
10291         if test -z "$CURLCONFIG"; then
10292             AC_MSG_ERROR([curl development files not found])
10293         fi
10294         CURL_LIBS=`$CURLCONFIG --libs`
10295         FilterLibs "${CURL_LIBS}"
10296         CURL_LIBS="${filteredlibs}"
10297         CURL_CFLAGS=$("$CURLCONFIG" --cflags | sed -e "s/-I/${ISYSTEM?}/g")
10298         curl_version=`$CURLCONFIG --version | $SED -e 's/^libcurl //'`
10300         AC_MSG_CHECKING([whether libcurl is >= 7.19.4])
10301         case $curl_version in
10302         dnl brackets doubled below because Autoconf uses them as m4 quote characters,
10303         dnl so they need to be doubled to end up in the configure script
10304         7.19.4|7.19.[[5-9]]|7.[[2-9]]?.*|7.???.*|[[8-9]].*|[[1-9]][[0-9]].*)
10305             AC_MSG_RESULT([yes])
10306             ;;
10307         *)
10308             AC_MSG_ERROR([no, you have $curl_version])
10309             ;;
10310         esac
10311     fi
10313     ENABLE_CURL=TRUE
10314 elif test "$enable_curl" = "no"; then
10315     AC_MSG_RESULT([none])
10316 else
10317     AC_MSG_RESULT([internal])
10318     SYSTEM_CURL=
10319     BUILD_TYPE="$BUILD_TYPE CURL"
10320     ENABLE_CURL=TRUE
10322 AC_SUBST(SYSTEM_CURL)
10323 AC_SUBST(CURL_CFLAGS)
10324 AC_SUBST(CURL_LIBS)
10325 AC_SUBST(ENABLE_CURL)
10327 dnl ===================================================================
10328 dnl Check for system boost
10329 dnl ===================================================================
10330 AC_MSG_CHECKING([which boost to use])
10331 if test "$with_system_boost" = "yes"; then
10332     AC_MSG_RESULT([external])
10333     SYSTEM_BOOST=TRUE
10334     AX_BOOST_BASE([1.66],,[AC_MSG_ERROR([no suitable Boost found])])
10335     AX_BOOST_DATE_TIME
10336     AX_BOOST_FILESYSTEM
10337     AX_BOOST_IOSTREAMS
10338     AX_BOOST_LOCALE
10339     AC_LANG_PUSH([C++])
10340     save_CXXFLAGS=$CXXFLAGS
10341     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10342     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10343        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10344     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10345        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10346     CXXFLAGS=$save_CXXFLAGS
10347     AC_LANG_POP([C++])
10348     # this is in m4/ax_boost_base.m4
10349     FilterLibs "${BOOST_LDFLAGS}"
10350     BOOST_LDFLAGS="${filteredlibs}"
10351 else
10352     AC_MSG_RESULT([internal])
10353     BUILD_TYPE="$BUILD_TYPE BOOST"
10354     SYSTEM_BOOST=
10355     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10356         # use warning-suppressing wrapper headers
10357         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10358     else
10359         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10360     fi
10362 AC_SUBST(SYSTEM_BOOST)
10364 dnl ===================================================================
10365 dnl Check for system mdds
10366 dnl ===================================================================
10367 libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-1.5 >= 1.5.0], ["-I${WORKDIR}/UnpackedTarball/mdds/include"])
10369 dnl ===================================================================
10370 dnl Check for system cuckoo
10371 dnl ===================================================================
10372 AC_MSG_CHECKING([which cuckoo to use])
10373 if test "$with_system_cuckoo" = "yes"; then
10374     AC_MSG_RESULT([external])
10375     SYSTEM_CUCKOO=TRUE
10376     AC_LANG_PUSH([C++])
10377     AC_CHECK_HEADER([libcuckoo/cuckoohash_map.hh], [],
10378        [AC_MSG_ERROR([libcuckoo/cuckoohash_map.hh not found. install cuckoo])], [])
10379     AC_LANG_POP([C++])
10380 else
10381     AC_MSG_RESULT([internal])
10382     BUILD_TYPE="$BUILD_TYPE CUCKOO"
10383     SYSTEM_CUCKOO=
10384     CUCKOO_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/cuckoo"
10386 AC_SUBST([CUCKOO_CFLAGS])
10387 AC_SUBST([SYSTEM_CUCKOO])
10389 dnl ===================================================================
10390 dnl Check for system glm
10391 dnl ===================================================================
10392 AC_MSG_CHECKING([which glm to use])
10393 if test "$with_system_glm" = "yes"; then
10394     AC_MSG_RESULT([external])
10395     SYSTEM_GLM=TRUE
10396     AC_LANG_PUSH([C++])
10397     AC_CHECK_HEADER([glm/glm.hpp], [],
10398        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10399     AC_LANG_POP([C++])
10400 else
10401     AC_MSG_RESULT([internal])
10402     BUILD_TYPE="$BUILD_TYPE GLM"
10403     SYSTEM_GLM=
10404     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10406 AC_SUBST([GLM_CFLAGS])
10407 AC_SUBST([SYSTEM_GLM])
10409 dnl ===================================================================
10410 dnl Check for system odbc
10411 dnl ===================================================================
10412 AC_MSG_CHECKING([which odbc headers to use])
10413 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
10414     AC_MSG_RESULT([external])
10415     SYSTEM_ODBC_HEADERS=TRUE
10417     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10418         save_CPPFLAGS=$CPPFLAGS
10419         find_winsdk
10420         PathFormat "$winsdktest"
10421         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"
10422         AC_CHECK_HEADER(sqlext.h, [],
10423             [AC_MSG_ERROR(odbc not found. install odbc)],
10424             [#include <windows.h>])
10425         CPPFLAGS=$save_CPPFLAGS
10426     else
10427         AC_CHECK_HEADER(sqlext.h, [],
10428             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10429     fi
10430 elif test "$enable_database_connectivity" = no; then
10431     AC_MSG_RESULT([none])
10432 else
10433     AC_MSG_RESULT([internal])
10434     SYSTEM_ODBC_HEADERS=
10436 AC_SUBST(SYSTEM_ODBC_HEADERS)
10438 dnl ===================================================================
10439 dnl Check for system NSS
10440 dnl ===================================================================
10441 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10442     libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8])
10443     AC_DEFINE(HAVE_FEATURE_NSS)
10444     ENABLE_NSS=TRUE
10445 elif test $_os != iOS ; then
10446     with_tls=openssl
10448 AC_SUBST(ENABLE_NSS)
10450 dnl ===================================================================
10451 dnl Enable LDAP support
10452 dnl ===================================================================
10454 if test "$test_openldap" = yes; then
10455     AC_MSG_CHECKING([whether to enable LDAP support])
10456     if test "$enable_ldap" = yes -a \( "$ENABLE_NSS" = TRUE -o "$with_system_openldap" = yes \); then
10457         AC_MSG_RESULT([yes])
10458         ENABLE_LDAP=TRUE
10459     else
10460         if test "$enable_ldap" != "yes"; then
10461             AC_MSG_RESULT([no])
10462         else
10463             AC_MSG_RESULT([no (needs NSS or system openldap)])
10464         fi
10465     fi
10467 dnl ===================================================================
10468 dnl Check for system openldap
10469 dnl ===================================================================
10471     if test "$ENABLE_LDAP" = TRUE; then
10472         AC_MSG_CHECKING([which openldap library to use])
10473         if test "$with_system_openldap" = yes; then
10474             AC_MSG_RESULT([external])
10475             SYSTEM_OPENLDAP=TRUE
10476             AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10477             AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10478             AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10479         else
10480             AC_MSG_RESULT([internal])
10481             BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10482         fi
10483     fi
10486 AC_SUBST(ENABLE_LDAP)
10487 AC_SUBST(SYSTEM_OPENLDAP)
10489 dnl ===================================================================
10490 dnl Check for TLS/SSL and cryptographic implementation to use
10491 dnl ===================================================================
10492 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10493 if test -n "$with_tls"; then
10494     case $with_tls in
10495     openssl)
10496         AC_DEFINE(USE_TLS_OPENSSL)
10497         TLS=OPENSSL
10498         AC_MSG_RESULT([$TLS])
10500         if test "$enable_openssl" != "yes"; then
10501             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10502         fi
10504         # warn that OpenSSL has been selected but not all TLS code has this option
10505         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS])
10506         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS"
10507         ;;
10508     nss)
10509         AC_DEFINE(USE_TLS_NSS)
10510         TLS=NSS
10511         AC_MSG_RESULT([$TLS])
10512         ;;
10513     no)
10514         AC_MSG_RESULT([none])
10515         AC_MSG_WARN([Skipping TLS/SSL])
10516         ;;
10517     *)
10518         AC_MSG_RESULT([])
10519         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10520 openssl - OpenSSL
10521 nss - Mozilla's Network Security Services (NSS)
10522     ])
10523         ;;
10524     esac
10525 else
10526     # default to using NSS, it results in smaller oox lib
10527     AC_DEFINE(USE_TLS_NSS)
10528     TLS=NSS
10529     AC_MSG_RESULT([$TLS])
10531 AC_SUBST(TLS)
10533 dnl ===================================================================
10534 dnl Check for system sane
10535 dnl ===================================================================
10536 AC_MSG_CHECKING([which sane header to use])
10537 if test "$with_system_sane" = "yes"; then
10538     AC_MSG_RESULT([external])
10539     AC_CHECK_HEADER(sane/sane.h, [],
10540       [AC_MSG_ERROR(sane not found. install sane)], [])
10541 else
10542     AC_MSG_RESULT([internal])
10543     BUILD_TYPE="$BUILD_TYPE SANE"
10546 dnl ===================================================================
10547 dnl Check for system icu
10548 dnl ===================================================================
10549 SYSTEM_GENBRK=
10550 SYSTEM_GENCCODE=
10551 SYSTEM_GENCMN=
10553 ICU_MAJOR=69
10554 ICU_MINOR=1
10555 ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10556 ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10557 ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10558 AC_MSG_CHECKING([which icu to use])
10559 if test "$with_system_icu" = "yes"; then
10560     AC_MSG_RESULT([external])
10561     SYSTEM_ICU=TRUE
10562     AC_LANG_PUSH([C++])
10563     AC_MSG_CHECKING([for unicode/rbbi.h])
10564     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10565     AC_LANG_POP([C++])
10567     if test "$cross_compiling" != "yes"; then
10568         PKG_CHECK_MODULES(ICU, icu-i18n >= 4.6)
10569         ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10570         ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10571         ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10572     fi
10574     if test "$cross_compiling" = "yes" -a \( "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" \); then
10575         ICU_VERSION_FOR_BUILD=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10576         ICU_MAJOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f1`
10577         ICU_MINOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f2`
10578         AC_MSG_CHECKING([if MinGW and system versions of ICU are compatible])
10579         if test "$ICU_MAJOR" -eq "$ICU_MAJOR_FOR_BUILD" -a "$ICU_MINOR" -eq "$ICU_MINOR_FOR_BUILD"; then
10580             AC_MSG_RESULT([yes])
10581         else
10582             AC_MSG_RESULT([no])
10583             if test "$with_system_icu_for_build" != "force"; then
10584                 AC_MSG_ERROR([System ICU is not version-compatible with MinGW ICU.
10585 You can use --with-system-icu-for-build=force to use it anyway.])
10586             fi
10587         fi
10588     fi
10590     if test "$cross_compiling" != "yes" -o "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force"; then
10591         # using the system icu tools can lead to version confusion, use the
10592         # ones from the build environment when cross-compiling
10593         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10594         if test -z "$SYSTEM_GENBRK"; then
10595             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10596         fi
10597         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10598         if test -z "$SYSTEM_GENCCODE"; then
10599             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10600         fi
10601         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10602         if test -z "$SYSTEM_GENCMN"; then
10603             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10604         fi
10605         if test "$ICU_MAJOR" -ge "49"; then
10606             ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10607             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10608             ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10609         else
10610             ICU_RECLASSIFIED_PREPEND_SET_EMPTY=
10611             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER=
10612             ICU_RECLASSIFIED_HEBREW_LETTER=
10613         fi
10614     fi
10616     if test "$cross_compiling" = "yes"; then
10617         if test "$ICU_MAJOR" -ge "50"; then
10618             AC_MSG_RESULT([Ignore ICU_MINOR as obviously the libraries don't include the minor version in their names any more])
10619             ICU_MINOR=""
10620         fi
10621     fi
10622 else
10623     AC_MSG_RESULT([internal])
10624     SYSTEM_ICU=
10625     BUILD_TYPE="$BUILD_TYPE ICU"
10626     # surprisingly set these only for "internal" (to be used by various other
10627     # external libs): the system icu-config is quite unhelpful and spits out
10628     # dozens of weird flags and also default path -I/usr/include
10629     ICU_CFLAGS="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10630     ICU_LIBS="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10632 if test "$ICU_MAJOR" -ge "59"; then
10633     # As of ICU 59 it defaults to typedef char16_t UChar; which is available
10634     # with -std=c++11 but not all external libraries can be built with that,
10635     # for those use a bit-compatible typedef uint16_t UChar; see
10636     # icu/source/common/unicode/umachine.h
10637     ICU_UCHAR_TYPE="-DUCHAR_TYPE=uint16_t"
10638 else
10639     ICU_UCHAR_TYPE=""
10641 AC_SUBST(SYSTEM_ICU)
10642 AC_SUBST(SYSTEM_GENBRK)
10643 AC_SUBST(SYSTEM_GENCCODE)
10644 AC_SUBST(SYSTEM_GENCMN)
10645 AC_SUBST(ICU_MAJOR)
10646 AC_SUBST(ICU_MINOR)
10647 AC_SUBST(ICU_RECLASSIFIED_PREPEND_SET_EMPTY)
10648 AC_SUBST(ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER)
10649 AC_SUBST(ICU_RECLASSIFIED_HEBREW_LETTER)
10650 AC_SUBST(ICU_CFLAGS)
10651 AC_SUBST(ICU_LIBS)
10652 AC_SUBST(ICU_UCHAR_TYPE)
10654 dnl ==================================================================
10655 dnl Breakpad
10656 dnl ==================================================================
10657 DEFAULT_CRASHDUMP_VALUE="true"
10658 AC_MSG_CHECKING([whether to enable breakpad])
10659 if test "$enable_breakpad" != yes; then
10660     AC_MSG_RESULT([no])
10661 else
10662     AC_MSG_RESULT([yes])
10663     ENABLE_BREAKPAD="TRUE"
10664     AC_DEFINE(ENABLE_BREAKPAD)
10665     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
10666     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
10668     AC_MSG_CHECKING([for disable crash dump])
10669     if test "$enable_crashdump" = no; then
10670         DEFAULT_CRASHDUMP_VALUE="false"
10671         AC_MSG_RESULT([yes])
10672     else
10673        AC_MSG_RESULT([no])
10674     fi
10676     AC_MSG_CHECKING([for crashreport config])
10677     if test "$with_symbol_config" = "no"; then
10678         BREAKPAD_SYMBOL_CONFIG="invalid"
10679         AC_MSG_RESULT([no])
10680     else
10681         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
10682         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
10683         AC_MSG_RESULT([yes])
10684     fi
10685     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
10687 AC_SUBST(ENABLE_BREAKPAD)
10688 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
10690 dnl ==================================================================
10691 dnl libfuzzer
10692 dnl ==================================================================
10693 AC_MSG_CHECKING([whether to enable fuzzers])
10694 if test "$enable_fuzzers" != yes; then
10695     AC_MSG_RESULT([no])
10696 else
10697     if test -z $LIB_FUZZING_ENGINE; then
10698       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
10699     fi
10700     AC_MSG_RESULT([yes])
10701     ENABLE_FUZZERS="TRUE"
10702     AC_DEFINE([ENABLE_FUZZERS],1)
10703     BUILD_TYPE="$BUILD_TYPE FUZZERS"
10705 AC_SUBST(LIB_FUZZING_ENGINE)
10706 AC_SUBST(ENABLE_FUZZERS)
10708 dnl ===================================================================
10709 dnl Orcus
10710 dnl ===================================================================
10711 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.16 >= 0.16.0])
10712 if test "$with_system_orcus" != "yes"; then
10713     if test "$SYSTEM_BOOST" = "TRUE"; then
10714         # ===========================================================
10715         # Determine if we are going to need to link with Boost.System
10716         # ===========================================================
10717         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
10718         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
10719         dnl in documentation has no effect.
10720         AC_MSG_CHECKING([if we need to link with Boost.System])
10721         AC_LANG_PUSH([C++])
10722         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
10723                 @%:@include <boost/version.hpp>
10724             ]],[[
10725                 #if BOOST_VERSION >= 105000
10726                 #   error yes, we need to link with Boost.System
10727                 #endif
10728             ]])],[
10729                 AC_MSG_RESULT([no])
10730             ],[
10731                 AC_MSG_RESULT([yes])
10732                 AX_BOOST_SYSTEM
10733         ])
10734         AC_LANG_POP([C++])
10735     fi
10737 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
10738 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
10739 AC_SUBST([BOOST_SYSTEM_LIB])
10740 AC_SUBST(SYSTEM_LIBORCUS)
10742 dnl ===================================================================
10743 dnl HarfBuzz
10744 dnl ===================================================================
10745 libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3],
10746                          ["-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"],
10747                          ["-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"])
10749 libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 0.9.42],
10750                          ["-I${WORKDIR}/UnpackedTarball/harfbuzz/src"],
10751                          ["-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"])
10753 if test "$COM" = "MSC"; then # override the above
10754     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
10755     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
10758 if test "$with_system_harfbuzz" = "yes"; then
10759     if test "$with_system_graphite" = "no"; then
10760         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
10761     fi
10762     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
10763     save_LIBS="$LIBS"
10764     save_CFLAGS="$CFLAGS"
10765     LIBS="$LIBS $HARFBUZZ_LIBS"
10766     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
10767     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
10768     LIBS="$save_LIBS"
10769     CFLAGS="$save_CFLAGS"
10770 else
10771     if test "$with_system_graphite" = "yes"; then
10772         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
10773     fi
10776 if test "$USING_X11" = TRUE; then
10777     AC_PATH_X
10778     AC_PATH_XTRA
10779     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
10781     if test -z "$x_includes"; then
10782         x_includes="default_x_includes"
10783     fi
10784     if test -z "$x_libraries"; then
10785         x_libraries="default_x_libraries"
10786     fi
10787     CFLAGS="$CFLAGS $X_CFLAGS"
10788     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
10789     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
10790 else
10791     x_includes="no_x_includes"
10792     x_libraries="no_x_libraries"
10795 if test "$USING_X11" = TRUE; then
10796     dnl ===================================================================
10797     dnl Check for extension headers
10798     dnl ===================================================================
10799     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
10800      [#include <X11/extensions/shape.h>])
10802     # vcl needs ICE and SM
10803     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
10804     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
10805         [AC_MSG_ERROR(ICE library not found)])
10806     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
10807     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
10808         [AC_MSG_ERROR(SM library not found)])
10811 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
10812     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
10813     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
10816 dnl ===================================================================
10817 dnl Check for system Xrender
10818 dnl ===================================================================
10819 AC_MSG_CHECKING([whether to use Xrender])
10820 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
10821     AC_MSG_RESULT([yes])
10822     PKG_CHECK_MODULES(XRENDER, xrender)
10823     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10824     FilterLibs "${XRENDER_LIBS}"
10825     XRENDER_LIBS="${filteredlibs}"
10826     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
10827       [AC_MSG_ERROR(libXrender not found or functional)], [])
10828     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
10829       [AC_MSG_ERROR(Xrender not found. install X)], [])
10830 else
10831     AC_MSG_RESULT([no])
10833 AC_SUBST(XRENDER_CFLAGS)
10834 AC_SUBST(XRENDER_LIBS)
10836 dnl ===================================================================
10837 dnl Check for XRandr
10838 dnl ===================================================================
10839 AC_MSG_CHECKING([whether to enable RandR support])
10840 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
10841     AC_MSG_RESULT([yes])
10842     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
10843     if test "$ENABLE_RANDR" != "TRUE"; then
10844         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
10845                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
10846         XRANDR_CFLAGS=" "
10847         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
10848           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
10849         XRANDR_LIBS="-lXrandr "
10850         ENABLE_RANDR="TRUE"
10851     fi
10852     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10853     FilterLibs "${XRANDR_LIBS}"
10854     XRANDR_LIBS="${filteredlibs}"
10855 else
10856     ENABLE_RANDR=""
10857     AC_MSG_RESULT([no])
10859 AC_SUBST(XRANDR_CFLAGS)
10860 AC_SUBST(XRANDR_LIBS)
10861 AC_SUBST(ENABLE_RANDR)
10863 if test "$test_webdav" = yes; then
10864     if test -z "$with_webdav"; then
10865         WITH_WEBDAV=neon
10866         if test "$enable_mpl_subset" = yes; then
10867             WITH_WEBDAV=serf
10868         fi
10869     else
10870         WITH_WEBDAV="$with_webdav"
10871     fi
10874 AC_MSG_CHECKING([for webdav library])
10875 case "$WITH_WEBDAV" in
10876 curl)
10877     AC_MSG_RESULT([curl])
10878     # curl is already mandatory (almost) and checked elsewhere
10879     if test "$enable_curl" = "no"; then
10880         AC_MSG_ERROR(["--with-webdav=curl conflicts with --disable-curl"])
10881     fi
10882     ;;
10883 serf)
10884     AC_MSG_RESULT([serf])
10885     # Check for system apr-util
10886     libo_CHECK_SYSTEM_MODULE([apr],[APR],[apr-util-1],
10887                              ["-I${WORKDIR}/UnpackedTarball/apr/include -I${WORKDIR}/UnpackedTarball/apr_util/include"],
10888                              ["-L${WORKDIR}/UnpackedTarball/apr/.libs -lapr-1 -L${WORKDIR}/UnpackedTarball/apr_util/.libs -laprutil-1"])
10889     if test "$COM" = "MSC"; then
10890         APR_LIB_DIR="LibR"
10891         test -n "${MSVC_USE_DEBUG_RUNTIME}" && APR_LIB_DIR="LibD"
10892         APR_LIBS="${WORKDIR}/UnpackedTarball/apr/${APR_LIB_DIR}/apr-1.lib ${WORKDIR}/UnpackedTarball/apr_util/${APR_LIB_DIR}/aprutil-1.lib"
10893     fi
10895     # Check for system serf
10896     libo_CHECK_SYSTEM_MODULE([serf],[SERF],[serf-1 >= 1.3.9])
10897     ;;
10898 neon)
10899     AC_MSG_RESULT([neon])
10900     # Check for system neon
10901     libo_CHECK_SYSTEM_MODULE([neon],[NEON],[neon >= 0.31.2])
10902     if test "$with_system_neon" = "yes"; then
10903         NEON_VERSION="`$PKG_CONFIG --modversion neon | $SED 's/\.//g'`"
10904     else
10905         NEON_VERSION=0312
10906     fi
10907     AC_SUBST(NEON_VERSION)
10908     ;;
10910     AC_MSG_RESULT([none, disabled])
10911     WITH_WEBDAV=""
10912     ;;
10913 esac
10914 AC_SUBST(WITH_WEBDAV)
10916 dnl ===================================================================
10917 dnl Check for disabling cve_tests
10918 dnl ===================================================================
10919 AC_MSG_CHECKING([whether to execute CVE tests])
10920 # If not explicitly enabled or disabled, default
10921 if test -z "$enable_cve_tests"; then
10922     case "$OS" in
10923     WNT)
10924         # Default cves off for Windows with its wild and wonderful
10925         # variety of AV software kicking in and panicking
10926         enable_cve_tests=no
10927         ;;
10928     *)
10929         # otherwise yes
10930         enable_cve_tests=yes
10931         ;;
10932     esac
10934 if test "$enable_cve_tests" = "no"; then
10935     AC_MSG_RESULT([no])
10936     DISABLE_CVE_TESTS=TRUE
10937     AC_SUBST(DISABLE_CVE_TESTS)
10938 else
10939     AC_MSG_RESULT([yes])
10942 dnl ===================================================================
10943 dnl Check for enabling chart XShape tests
10944 dnl ===================================================================
10945 AC_MSG_CHECKING([whether to execute chart XShape tests])
10946 if test "$enable_chart_tests" = "yes" -o '(' "$_os" = "WINNT" -a "$enable_chart_tests" != "no" ')'; then
10947     AC_MSG_RESULT([yes])
10948     ENABLE_CHART_TESTS=TRUE
10949     AC_SUBST(ENABLE_CHART_TESTS)
10950 else
10951     AC_MSG_RESULT([no])
10954 dnl ===================================================================
10955 dnl Check for system openssl
10956 dnl ===================================================================
10957 ENABLE_OPENSSL=
10958 AC_MSG_CHECKING([whether to disable OpenSSL usage])
10959 if test "$enable_openssl" = "yes"; then
10960     AC_MSG_RESULT([no])
10961     ENABLE_OPENSSL=TRUE
10962     if test "$_os" = Darwin ; then
10963         # OpenSSL is deprecated when building for 10.7 or later.
10964         #
10965         # http://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
10966         # http://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
10968         with_system_openssl=no
10969         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10970     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
10971             && test "$with_system_openssl" != "no"; then
10972         with_system_openssl=yes
10973         SYSTEM_OPENSSL=TRUE
10974         OPENSSL_CFLAGS=
10975         OPENSSL_LIBS="-lssl -lcrypto"
10976     else
10977         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10978     fi
10979     if test "$with_system_openssl" = "yes"; then
10980         AC_MSG_CHECKING([whether openssl supports SHA512])
10981         AC_LANG_PUSH([C])
10982         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
10983             SHA512_CTX context;
10984 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
10985         AC_LANG_POP(C)
10986     fi
10987 else
10988     AC_MSG_RESULT([yes])
10990     # warn that although OpenSSL is disabled, system libraries may depend on it
10991     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
10992     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
10995 AC_SUBST([ENABLE_OPENSSL])
10997 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
10998     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
10999         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
11000         enable_cipher_openssl_backend=no
11001     else
11002         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
11003     fi
11005 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
11006 ENABLE_CIPHER_OPENSSL_BACKEND=
11007 if test "$enable_cipher_openssl_backend" = yes; then
11008     AC_MSG_RESULT([yes])
11009     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
11010 else
11011     AC_MSG_RESULT([no])
11013 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
11015 dnl ===================================================================
11016 dnl Select the crypto backends used by LO
11017 dnl ===================================================================
11019 if test "$build_crypto" = yes; then
11020     if test "$OS" = WNT; then
11021         BUILD_TYPE="$BUILD_TYPE CRYPTO_MSCAPI"
11022         AC_DEFINE([USE_CRYPTO_MSCAPI])
11023     elif test "$ENABLE_NSS" = TRUE; then
11024         BUILD_TYPE="$BUILD_TYPE CRYPTO_NSS"
11025         AC_DEFINE([USE_CRYPTO_NSS])
11026     fi
11029 dnl ===================================================================
11030 dnl Check for building gnutls
11031 dnl ===================================================================
11032 AC_MSG_CHECKING([whether to use gnutls])
11033 if test "$WITH_WEBDAV" = "neon" -a "$with_system_neon" = no -a "$enable_openssl" = "no"; then
11034     AC_MSG_RESULT([yes])
11035     AM_PATH_LIBGCRYPT()
11036     PKG_CHECK_MODULES(GNUTLS, [gnutls],,
11037         AC_MSG_ERROR([[Disabling OpenSSL was requested, but GNUTLS is not
11038                       available in the system to use as replacement.]]))
11039     FilterLibs "${LIBGCRYPT_LIBS}"
11040     LIBGCRYPT_LIBS="${filteredlibs}"
11041 else
11042     AC_MSG_RESULT([no])
11045 AC_SUBST([LIBGCRYPT_CFLAGS])
11046 AC_SUBST([LIBGCRYPT_LIBS])
11048 dnl ===================================================================
11049 dnl Check for system redland
11050 dnl ===================================================================
11051 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
11052 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
11053 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
11054 if test "$with_system_redland" = "yes"; then
11055     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
11056             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
11057 else
11058     RAPTOR_MAJOR="0"
11059     RASQAL_MAJOR="3"
11060     REDLAND_MAJOR="0"
11062 AC_SUBST(RAPTOR_MAJOR)
11063 AC_SUBST(RASQAL_MAJOR)
11064 AC_SUBST(REDLAND_MAJOR)
11066 dnl ===================================================================
11067 dnl Check for system hunspell
11068 dnl ===================================================================
11069 AC_MSG_CHECKING([which libhunspell to use])
11070 if test "$with_system_hunspell" = "yes"; then
11071     AC_MSG_RESULT([external])
11072     SYSTEM_HUNSPELL=TRUE
11073     AC_LANG_PUSH([C++])
11074     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
11075     if test "$HUNSPELL_PC" != "TRUE"; then
11076         AC_CHECK_HEADER(hunspell.hxx, [],
11077             [
11078             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
11079             [AC_MSG_ERROR(hunspell headers not found.)], [])
11080             ], [])
11081         AC_CHECK_LIB([hunspell], [main], [:],
11082            [ AC_MSG_ERROR(hunspell library not found.) ], [])
11083         HUNSPELL_LIBS=-lhunspell
11084     fi
11085     AC_LANG_POP([C++])
11086     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11087     FilterLibs "${HUNSPELL_LIBS}"
11088     HUNSPELL_LIBS="${filteredlibs}"
11089 else
11090     AC_MSG_RESULT([internal])
11091     SYSTEM_HUNSPELL=
11092     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
11093     if test "$COM" = "MSC"; then
11094         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
11095     else
11096         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
11097     fi
11098     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
11100 AC_SUBST(SYSTEM_HUNSPELL)
11101 AC_SUBST(HUNSPELL_CFLAGS)
11102 AC_SUBST(HUNSPELL_LIBS)
11104 dnl ===================================================================
11105 dnl Check for system zxing
11106 dnl ===================================================================
11107 AC_MSG_CHECKING([whether to use zxing])
11108 if test "$enable_zxing" = "no"; then
11109     AC_MSG_RESULT([no])
11110     ENABLE_ZXING=
11111     SYSTEM_ZXING=
11112 else
11113     AC_MSG_RESULT([yes])
11114     ENABLE_ZXING=TRUE
11115     AC_MSG_CHECKING([which libzxing to use])
11116     if test "$with_system_zxing" = "yes"; then
11117         AC_MSG_RESULT([external])
11118         SYSTEM_ZXING=TRUE
11119         AC_LANG_PUSH([C++])
11120         AC_CHECK_HEADER(ZXing/MultiFormatWriter.h, [],
11121             [AC_MSG_ERROR(zxing headers not found.)], [#include <stdexcept>])
11122         ZXING_CFLAGS=-I/usr/include/ZXing
11123         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
11124             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
11125             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
11126         AC_LANG_POP([C++])
11127         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11128         FilterLibs "${ZXING_LIBS}"
11129         ZXING_LIBS="${filteredlibs}"
11130     else
11131         AC_MSG_RESULT([internal])
11132         SYSTEM_ZXING=
11133         BUILD_TYPE="$BUILD_TYPE ZXING"
11134     fi
11135     if test "$ENABLE_ZXING" = TRUE; then
11136         AC_DEFINE(ENABLE_ZXING)
11137     fi
11139 AC_SUBST(SYSTEM_ZXING)
11140 AC_SUBST(ENABLE_ZXING)
11141 AC_SUBST(ZXING_CFLAGS)
11142 AC_SUBST(ZXING_LIBS)
11144 dnl ===================================================================
11145 dnl Check for system box2d
11146 dnl ===================================================================
11147 AC_MSG_CHECKING([which box2d to use])
11148 if test "$with_system_box2d" = "yes"; then
11149     AC_MSG_RESULT([external])
11150     SYSTEM_BOX2D=TRUE
11151     AC_LANG_PUSH([C++])
11152     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
11153         [BOX2D_H_FOUND='FALSE'])
11154     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
11155         _BOX2D_LIB=box2d
11156         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
11157     else
11158         # fail this. there's no other alternative to check when we are here.
11159         AC_CHECK_HEADER([Box2D/Box2D.h], [],
11160             [AC_MSG_ERROR(box2d headers not found.)])
11161         _BOX2D_LIB=Box2D
11162         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11163     fi
11164     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11165         [ AC_MSG_ERROR(box2d library not found.) ], [])
11166     BOX2D_LIBS=-l$_BOX2D_LIB
11167     AC_LANG_POP([C++])
11168     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11169     FilterLibs "${BOX2D_LIBS}"
11170     BOX2D_LIBS="${filteredlibs}"
11171 else
11172     AC_MSG_RESULT([internal])
11173     SYSTEM_BOX2D=
11174     BUILD_TYPE="$BUILD_TYPE BOX2D"
11176 AC_SUBST(SYSTEM_BOX2D)
11177 AC_SUBST(BOX2D_CFLAGS)
11178 AC_SUBST(BOX2D_LIBS)
11180 dnl ===================================================================
11181 dnl Checking for altlinuxhyph
11182 dnl ===================================================================
11183 AC_MSG_CHECKING([which altlinuxhyph to use])
11184 if test "$with_system_altlinuxhyph" = "yes"; then
11185     AC_MSG_RESULT([external])
11186     SYSTEM_HYPH=TRUE
11187     AC_CHECK_HEADER(hyphen.h, [],
11188        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11189     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11190        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11191        [#include <hyphen.h>])
11192     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11193         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11194     if test -z "$HYPHEN_LIB"; then
11195         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11196            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11197     fi
11198     if test -z "$HYPHEN_LIB"; then
11199         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11200            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11201     fi
11202 else
11203     AC_MSG_RESULT([internal])
11204     SYSTEM_HYPH=
11205     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11206     if test "$COM" = "MSC"; then
11207         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11208     else
11209         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11210     fi
11212 AC_SUBST(SYSTEM_HYPH)
11213 AC_SUBST(HYPHEN_LIB)
11215 dnl ===================================================================
11216 dnl Checking for mythes
11217 dnl ===================================================================
11218 AC_MSG_CHECKING([which mythes to use])
11219 if test "$with_system_mythes" = "yes"; then
11220     AC_MSG_RESULT([external])
11221     SYSTEM_MYTHES=TRUE
11222     AC_LANG_PUSH([C++])
11223     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11224     if test "$MYTHES_PKGCONFIG" = "no"; then
11225         AC_CHECK_HEADER(mythes.hxx, [],
11226             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11227         AC_CHECK_LIB([mythes-1.2], [main], [:],
11228             [ MYTHES_FOUND=no], [])
11229     if test "$MYTHES_FOUND" = "no"; then
11230         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11231                 [ MYTHES_FOUND=no], [])
11232     fi
11233     if test "$MYTHES_FOUND" = "no"; then
11234         AC_MSG_ERROR([mythes library not found!.])
11235     fi
11236     fi
11237     AC_LANG_POP([C++])
11238     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11239     FilterLibs "${MYTHES_LIBS}"
11240     MYTHES_LIBS="${filteredlibs}"
11241 else
11242     AC_MSG_RESULT([internal])
11243     SYSTEM_MYTHES=
11244     BUILD_TYPE="$BUILD_TYPE MYTHES"
11245     if test "$COM" = "MSC"; then
11246         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11247     else
11248         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11249     fi
11251 AC_SUBST(SYSTEM_MYTHES)
11252 AC_SUBST(MYTHES_CFLAGS)
11253 AC_SUBST(MYTHES_LIBS)
11255 dnl ===================================================================
11256 dnl How should we build the linear programming solver ?
11257 dnl ===================================================================
11259 ENABLE_COINMP=
11260 AC_MSG_CHECKING([whether to build with CoinMP])
11261 if test "$enable_coinmp" != "no"; then
11262     ENABLE_COINMP=TRUE
11263     AC_MSG_RESULT([yes])
11264     if test "$with_system_coinmp" = "yes"; then
11265         SYSTEM_COINMP=TRUE
11266         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11267         FilterLibs "${COINMP_LIBS}"
11268         COINMP_LIBS="${filteredlibs}"
11269     else
11270         BUILD_TYPE="$BUILD_TYPE COINMP"
11271     fi
11272 else
11273     AC_MSG_RESULT([no])
11275 AC_SUBST(ENABLE_COINMP)
11276 AC_SUBST(SYSTEM_COINMP)
11277 AC_SUBST(COINMP_CFLAGS)
11278 AC_SUBST(COINMP_LIBS)
11280 ENABLE_LPSOLVE=
11281 AC_MSG_CHECKING([whether to build with lpsolve])
11282 if test "$enable_lpsolve" != "no"; then
11283     ENABLE_LPSOLVE=TRUE
11284     AC_MSG_RESULT([yes])
11285 else
11286     AC_MSG_RESULT([no])
11288 AC_SUBST(ENABLE_LPSOLVE)
11290 if test "$ENABLE_LPSOLVE" = TRUE; then
11291     AC_MSG_CHECKING([which lpsolve to use])
11292     if test "$with_system_lpsolve" = "yes"; then
11293         AC_MSG_RESULT([external])
11294         SYSTEM_LPSOLVE=TRUE
11295         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11296            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11297         save_LIBS=$LIBS
11298         # some systems need this. Like Ubuntu...
11299         AC_CHECK_LIB(m, floor)
11300         AC_CHECK_LIB(dl, dlopen)
11301         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11302             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11303         LIBS=$save_LIBS
11304     else
11305         AC_MSG_RESULT([internal])
11306         SYSTEM_LPSOLVE=
11307         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11308     fi
11310 AC_SUBST(SYSTEM_LPSOLVE)
11312 dnl ===================================================================
11313 dnl Checking for libexttextcat
11314 dnl ===================================================================
11315 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11316 if test "$with_system_libexttextcat" = "yes"; then
11317     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11319 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11321 dnl ===================================================================
11322 dnl Checking for libnumbertext
11323 dnl ===================================================================
11324 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11325 if test "$with_system_libnumbertext" = "yes"; then
11326     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11327     SYSTEM_LIBNUMBERTEXT=YES
11328 else
11329     SYSTEM_LIBNUMBERTEXT=
11330     AC_LANG_PUSH([C++])
11331     save_CPPFLAGS=$CPPFLAGS
11332     CPPFLAGS="$CPPFLAGS $CXXFLAGS_CXX11"
11333     AC_CHECK_HEADERS([codecvt regex])
11334     AS_IF([test "x$ac_cv_header_codecvt" != xyes -o "x$ac_cv_header_regex" != xyes],
11335             [ LIBNUMBERTEXT_CFLAGS=''
11336               AC_MSG_WARN([No system-provided libnumbertext or codecvt/regex C++11 headers (min. libstdc++ 4.9).
11337                            Enable libnumbertext fallback (missing number to number name conversion).])
11338             ])
11339     CPPFLAGS=$save_CPPFLAGS
11340     AC_LANG_POP([C++])
11342 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11343 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11344 AC_SUBST(LIBNUMBERTEXT_CFLAGS)
11346 dnl ***************************************
11347 dnl testing libc version for Linux...
11348 dnl ***************************************
11349 if test "$_os" = "Linux"; then
11350     AC_MSG_CHECKING([whether the libc is recent enough])
11351     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
11352     #include <features.h>
11353     #if defined(__GNU_LIBRARY__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1))
11354     #error glibc >= 2.1 is required
11355     #endif
11356     ]])],, [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([no, upgrade libc])])
11359 dnl =========================================
11360 dnl Check for uuidgen
11361 dnl =========================================
11362 if test "$_os" = "WINNT"; then
11363     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11364     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11365     UUIDGEN=uuidgen.exe
11366     AC_SUBST(UUIDGEN)
11367 else
11368     AC_PATH_PROG([UUIDGEN], [uuidgen])
11369     if test -z "$UUIDGEN"; then
11370         AC_MSG_WARN([uuid is needed for building installation sets])
11371     fi
11374 dnl ***************************************
11375 dnl Checking for bison and flex
11376 dnl ***************************************
11377 AC_PATH_PROG(BISON, bison)
11378 if test -z "$BISON"; then
11379     AC_MSG_ERROR([no bison found in \$PATH, install it])
11380 else
11381     AC_MSG_CHECKING([the bison version])
11382     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11383     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11384     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11385     dnl cause
11386     dnl
11387     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]
11388     dnl   typedef union YYSTYPE
11389     dnl           ~~~~~~^~~~~~~
11390     dnl
11391     dnl while at least 3.4.1 is know to be good:
11392     if test "$COMPILER_PLUGINS" = TRUE; then
11393         if test "$_bison_longver" -lt 2004; then
11394             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11395         fi
11396     else
11397         if test "$_bison_longver" -lt 2000; then
11398             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11399         fi
11400     fi
11402 AC_SUBST([BISON])
11404 AC_PATH_PROG(FLEX, flex)
11405 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11406     FLEX=`cygpath -m $FLEX`
11408 if test -z "$FLEX"; then
11409     AC_MSG_ERROR([no flex found in \$PATH, install it])
11410 else
11411     AC_MSG_CHECKING([the flex version])
11412     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11413     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11414         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11415     fi
11417 AC_SUBST([FLEX])
11418 dnl ***************************************
11419 dnl Checking for patch
11420 dnl ***************************************
11421 AC_PATH_PROG(PATCH, patch)
11422 if test -z "$PATCH"; then
11423     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11426 dnl On Solaris or macOS, check if --with-gnu-patch was used
11427 if test "$_os" = "SunOS" -o "$_os" = "Darwin"; then
11428     if test -z "$with_gnu_patch"; then
11429         GNUPATCH=$PATCH
11430     else
11431         if test -x "$with_gnu_patch"; then
11432             GNUPATCH=$with_gnu_patch
11433         else
11434             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11435         fi
11436     fi
11438     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11439     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11440         AC_MSG_RESULT([yes])
11441     else
11442         AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11443     fi
11444 else
11445     GNUPATCH=$PATCH
11448 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11449     GNUPATCH=`cygpath -m $GNUPATCH`
11452 dnl We also need to check for --with-gnu-cp
11454 if test -z "$with_gnu_cp"; then
11455     # check the place where the good stuff is hidden on Solaris...
11456     if test -x /usr/gnu/bin/cp; then
11457         GNUCP=/usr/gnu/bin/cp
11458     else
11459         AC_PATH_PROGS(GNUCP, gnucp cp)
11460     fi
11461     if test -z $GNUCP; then
11462         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11463     fi
11464 else
11465     if test -x "$with_gnu_cp"; then
11466         GNUCP=$with_gnu_cp
11467     else
11468         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11469     fi
11472 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11473     GNUCP=`cygpath -m $GNUCP`
11476 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11477 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11478     AC_MSG_RESULT([yes])
11479 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11480     AC_MSG_RESULT([yes])
11481 else
11482     case "$build_os" in
11483     darwin*|macos*|netbsd*|openbsd*|freebsd*|dragonfly*|aix*)
11484         x_GNUCP=[\#]
11485         GNUCP=''
11486         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11487         ;;
11488     *)
11489         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11490         ;;
11491     esac
11494 AC_SUBST(GNUPATCH)
11495 AC_SUBST(GNUCP)
11496 AC_SUBST(x_GNUCP)
11498 dnl ***************************************
11499 dnl testing assembler path
11500 dnl ***************************************
11501 ML_EXE=""
11502 if test "$_os" = "WINNT"; then
11503     case "$WIN_HOST_ARCH" in
11504     x86) assembler=ml.exe ;;
11505     x64) assembler=ml64.exe ;;
11506     arm64) assembler=armasm64.exe ;;
11507     esac
11509     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11510     if test -f "$MSVC_HOST_PATH/$assembler"; then
11511         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11512         AC_MSG_RESULT([$ML_EXE])
11513     else
11514         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11515     fi
11518 AC_SUBST(ML_EXE)
11520 dnl ===================================================================
11521 dnl We need zip and unzip
11522 dnl ===================================================================
11523 AC_PATH_PROG(ZIP, zip)
11524 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11525 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11526     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],,)
11529 AC_PATH_PROG(UNZIP, unzip)
11530 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11532 dnl ===================================================================
11533 dnl Zip must be a specific type for different build types.
11534 dnl ===================================================================
11535 if test $build_os = cygwin; then
11536     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11537         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11538     fi
11541 dnl ===================================================================
11542 dnl We need touch with -h option support.
11543 dnl ===================================================================
11544 AC_PATH_PROG(TOUCH, touch)
11545 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11546 touch "$WARNINGS_FILE"
11547 if ! "$TOUCH" -h "$WARNINGS_FILE" 2>/dev/null > /dev/null; then
11548     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],,)
11551 dnl ===================================================================
11552 dnl Check for system epoxy
11553 dnl ===================================================================
11554 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2], ["-I${WORKDIR}/UnpackedTarball/epoxy/include"])
11556 dnl ===================================================================
11557 dnl Set vcl option: coordinate device in double or sal_Int32
11558 dnl ===================================================================
11560 dnl disabled for now, we don't want subtle differences between OSs
11561 dnl AC_MSG_CHECKING([Type to use for Device Pixel coordinates])
11562 dnl if test "$_os" = "Darwin" -o  $_os = iOS ; then
11563 dnl     AC_DEFINE(VCL_FLOAT_DEVICE_PIXEL)
11564 dnl     AC_MSG_RESULT([double])
11565 dnl else
11566 dnl     AC_MSG_RESULT([sal_Int32])
11567 dnl fi
11569 dnl ===================================================================
11570 dnl Show which vclplugs will be built.
11571 dnl ===================================================================
11572 R=""
11573 if test "$USING_X11" != TRUE; then
11574     enable_gtk3=no
11577 ENABLE_GTK3=""
11578 if test "x$enable_gtk3" = "xyes"; then
11579     ENABLE_GTK3="TRUE"
11580     AC_DEFINE(ENABLE_GTK3)
11581     R="$R gtk3"
11583 AC_SUBST(ENABLE_GTK3)
11585 ENABLE_GTK3_KDE5=""
11586 if test "x$enable_gtk3_kde5" = "xyes"; then
11587     ENABLE_GTK3_KDE5="TRUE"
11588     AC_DEFINE(ENABLE_GTK3_KDE5)
11589     R="$R gtk3_kde5"
11591 AC_SUBST(ENABLE_GTK3_KDE5)
11593 ENABLE_GTK4=""
11594 if test "x$enable_gtk4" = "xyes"; then
11595     ENABLE_GTK4="TRUE"
11596     AC_DEFINE(ENABLE_GTK4)
11597     R="$R gtk4"
11599 AC_SUBST(ENABLE_GTK4)
11601 ENABLE_QT5=""
11602 if test "x$enable_qt5" = "xyes"; then
11603     ENABLE_QT5="TRUE"
11604     AC_DEFINE(ENABLE_QT5)
11605     R="$R qt5"
11607 AC_SUBST(ENABLE_QT5)
11609 ENABLE_QT6=""
11610 if test "x$enable_qt6" = "xyes"; then
11611     ENABLE_QT6="TRUE"
11612     AC_DEFINE(ENABLE_QT6)
11613     R="$R qt6"
11615 AC_SUBST(ENABLE_QT6)
11618 ENABLE_KF5=""
11619 if test "x$enable_kf5" = "xyes"; then
11620     ENABLE_KF5="TRUE"
11621     AC_DEFINE(ENABLE_KF5)
11622     R="$R kf5"
11624 AC_SUBST(ENABLE_KF5)
11626 if test "x$USING_X11" = "xyes"; then
11627     R="$R gen"
11630 if test "$_os" = "WINNT"; then
11631     R="$R win"
11632 elif test "$_os" = "Darwin"; then
11633     R="$R osx"
11634 elif test "$_os" = "iOS"; then
11635     R="ios"
11636 elif test "$_os" = Android; then
11637     R="android"
11640 build_vcl_plugins="$R"
11641 if test -z "$build_vcl_plugins"; then
11642     build_vcl_plugins=" none"
11644 AC_MSG_NOTICE([VCLplugs to be built:${build_vcl_plugins}])
11645 VCL_PLUGIN_INFO=$R
11646 AC_SUBST([VCL_PLUGIN_INFO])
11648 dnl ===================================================================
11649 dnl Check for GTK libraries
11650 dnl ===================================================================
11652 GTK3_CFLAGS=""
11653 GTK3_LIBS=""
11654 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11655     if test "$with_system_cairo" = no; then
11656         add_warning 'Non-system cairo combined with gtk3 is assumed to cause trouble; proceed at your own risk.'
11657     fi
11658     : ${with_system_cairo:=yes}
11659     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)
11660     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11661     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11662     FilterLibs "${GTK3_LIBS}"
11663     GTK3_LIBS="${filteredlibs}"
11665     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11666     if test "$with_system_epoxy" != "yes"; then
11667         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11668         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11669                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11670     fi
11672 AC_SUBST(GTK3_LIBS)
11673 AC_SUBST(GTK3_CFLAGS)
11675 GTK4_CFLAGS=""
11676 GTK4_LIBS=""
11677 if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then
11678     if test "$with_system_cairo" = no; then
11679         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11680     fi
11681     : ${with_system_cairo:=yes}
11682     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11683     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11684     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11685     FilterLibs "${GTK4_LIBS}"
11686     GTK4_LIBS="${filteredlibs}"
11688     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11689     if test "$with_system_epoxy" != "yes"; then
11690         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11691         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11692                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11693     fi
11695 AC_SUBST(GTK4_LIBS)
11696 AC_SUBST(GTK4_CFLAGS)
11698 if test "$enable_introspection" = yes; then
11699     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11700         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11701     else
11702         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
11703     fi
11706 dnl ===================================================================
11707 dnl check for dbus support
11708 dnl ===================================================================
11709 ENABLE_DBUS=""
11710 DBUS_CFLAGS=""
11711 DBUS_LIBS=""
11712 DBUS_GLIB_CFLAGS=""
11713 DBUS_GLIB_LIBS=""
11714 DBUS_HAVE_GLIB=""
11716 if test "$enable_dbus" = "no"; then
11717     test_dbus=no
11720 AC_MSG_CHECKING([whether to enable DBUS support])
11721 if test "$test_dbus" = "yes"; then
11722     ENABLE_DBUS="TRUE"
11723     AC_MSG_RESULT([yes])
11724     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
11725     AC_DEFINE(ENABLE_DBUS)
11726     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11727     FilterLibs "${DBUS_LIBS}"
11728     DBUS_LIBS="${filteredlibs}"
11730     # Glib is needed for BluetoothServer
11731     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
11732     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
11733         [
11734             DBUS_HAVE_GLIB="TRUE"
11735             AC_DEFINE(DBUS_HAVE_GLIB,1)
11736         ],
11737         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
11738     )
11739 else
11740     AC_MSG_RESULT([no])
11743 AC_SUBST(ENABLE_DBUS)
11744 AC_SUBST(DBUS_CFLAGS)
11745 AC_SUBST(DBUS_LIBS)
11746 AC_SUBST(DBUS_GLIB_CFLAGS)
11747 AC_SUBST(DBUS_GLIB_LIBS)
11748 AC_SUBST(DBUS_HAVE_GLIB)
11750 AC_MSG_CHECKING([whether to enable Impress remote control])
11751 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
11752     AC_MSG_RESULT([yes])
11753     ENABLE_SDREMOTE=TRUE
11754     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
11756     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
11757         # The Bluetooth code doesn't compile with macOS SDK 10.15
11758         if test "$enable_sdremote_bluetooth" = yes; then
11759             AC_MSG_ERROR([macOS SDK $with_macosx_sdk does not currently support --enable-sdremote-bluetooth])
11760         fi
11761         enable_sdremote_bluetooth=no
11762     fi
11763     # If not explicitly enabled or disabled, default
11764     if test -z "$enable_sdremote_bluetooth"; then
11765         case "$OS" in
11766         LINUX|MACOSX|WNT)
11767             # Default to yes for these
11768             enable_sdremote_bluetooth=yes
11769             ;;
11770         *)
11771             # otherwise no
11772             enable_sdremote_bluetooth=no
11773             ;;
11774         esac
11775     fi
11776     # $enable_sdremote_bluetooth is guaranteed non-empty now
11778     if test "$enable_sdremote_bluetooth" != "no"; then
11779         if test "$OS" = "LINUX"; then
11780             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
11781                 AC_MSG_RESULT([yes])
11782                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
11783                 dnl ===================================================================
11784                 dnl Check for system bluez
11785                 dnl ===================================================================
11786                 AC_MSG_CHECKING([which Bluetooth header to use])
11787                 if test "$with_system_bluez" = "yes"; then
11788                     AC_MSG_RESULT([external])
11789                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
11790                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
11791                     SYSTEM_BLUEZ=TRUE
11792                 else
11793                     AC_MSG_RESULT([internal])
11794                     SYSTEM_BLUEZ=
11795                 fi
11796             else
11797                 AC_MSG_RESULT([no, dbus disabled])
11798                 ENABLE_SDREMOTE_BLUETOOTH=
11799                 SYSTEM_BLUEZ=
11800             fi
11801         else
11802             AC_MSG_RESULT([yes])
11803             ENABLE_SDREMOTE_BLUETOOTH=TRUE
11804             SYSTEM_BLUEZ=
11805         fi
11806     else
11807         AC_MSG_RESULT([no])
11808         ENABLE_SDREMOTE_BLUETOOTH=
11809         SYSTEM_BLUEZ=
11810     fi
11811 else
11812     ENABLE_SDREMOTE=
11813     SYSTEM_BLUEZ=
11814     AC_MSG_RESULT([no])
11816 AC_SUBST(ENABLE_SDREMOTE)
11817 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
11818 AC_SUBST(SYSTEM_BLUEZ)
11820 dnl ===================================================================
11821 dnl Check whether to enable GIO support
11822 dnl ===================================================================
11823 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11824     AC_MSG_CHECKING([whether to enable GIO support])
11825     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
11826         dnl Need at least 2.26 for the dbus support.
11827         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
11828                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
11829         if test "$ENABLE_GIO" = "TRUE"; then
11830             AC_DEFINE(ENABLE_GIO)
11831             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11832             FilterLibs "${GIO_LIBS}"
11833             GIO_LIBS="${filteredlibs}"
11834         fi
11835     else
11836         AC_MSG_RESULT([no])
11837     fi
11839 AC_SUBST(ENABLE_GIO)
11840 AC_SUBST(GIO_CFLAGS)
11841 AC_SUBST(GIO_LIBS)
11844 dnl ===================================================================
11846 SPLIT_APP_MODULES=""
11847 if test "$enable_split_app_modules" = "yes"; then
11848     SPLIT_APP_MODULES="TRUE"
11850 AC_SUBST(SPLIT_APP_MODULES)
11852 SPLIT_OPT_FEATURES=""
11853 if test "$enable_split_opt_features" = "yes"; then
11854     SPLIT_OPT_FEATURES="TRUE"
11856 AC_SUBST(SPLIT_OPT_FEATURES)
11858 dnl ===================================================================
11859 dnl Check whether the GStreamer libraries are available.
11860 dnl ===================================================================
11862 ENABLE_GSTREAMER_1_0=""
11864 if test "$test_gstreamer_1_0" = yes; then
11866     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
11867     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
11868         ENABLE_GSTREAMER_1_0="TRUE"
11869         AC_MSG_RESULT([yes])
11870         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
11871         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11872         FilterLibs "${GSTREAMER_1_0_LIBS}"
11873         GSTREAMER_1_0_LIBS="${filteredlibs}"
11874         AC_DEFINE(ENABLE_GSTREAMER_1_0)
11875     else
11876         AC_MSG_RESULT([no])
11877     fi
11879 AC_SUBST(GSTREAMER_1_0_CFLAGS)
11880 AC_SUBST(GSTREAMER_1_0_LIBS)
11881 AC_SUBST(ENABLE_GSTREAMER_1_0)
11883 ENABLE_OPENGL_TRANSITIONS=
11884 ENABLE_OPENGL_CANVAS=
11885 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
11886    : # disable
11887 elif test "$_os" = "Darwin"; then
11888     # We use frameworks on macOS, no need for detail checks
11889     ENABLE_OPENGL_TRANSITIONS=TRUE
11890     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11891     ENABLE_OPENGL_CANVAS=TRUE
11892 elif test $_os = WINNT; then
11893     ENABLE_OPENGL_TRANSITIONS=TRUE
11894     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11895     ENABLE_OPENGL_CANVAS=TRUE
11896 else
11897     if test "$USING_X11" = TRUE; then
11898         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
11899         ENABLE_OPENGL_TRANSITIONS=TRUE
11900         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11901         ENABLE_OPENGL_CANVAS=TRUE
11902     fi
11905 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
11906 AC_SUBST(ENABLE_OPENGL_CANVAS)
11908 dnl =================================================
11909 dnl Check whether to build with OpenCL support.
11910 dnl =================================================
11912 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
11913     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
11914     # platform (optional at run-time, used through clew).
11915     BUILD_TYPE="$BUILD_TYPE OPENCL"
11916     AC_DEFINE(HAVE_FEATURE_OPENCL)
11919 dnl =================================================
11920 dnl Check whether to build with dconf support.
11921 dnl =================================================
11923 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
11924     PKG_CHECK_MODULES([DCONF], [dconf >= 0.15.2], [], [
11925         if test "$enable_dconf" = yes; then
11926             AC_MSG_ERROR([dconf not found])
11927         else
11928             enable_dconf=no
11929         fi])
11931 AC_MSG_CHECKING([whether to enable dconf])
11932 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
11933     DCONF_CFLAGS=
11934     DCONF_LIBS=
11935     ENABLE_DCONF=
11936     AC_MSG_RESULT([no])
11937 else
11938     ENABLE_DCONF=TRUE
11939     AC_DEFINE(ENABLE_DCONF)
11940     AC_MSG_RESULT([yes])
11942 AC_SUBST([DCONF_CFLAGS])
11943 AC_SUBST([DCONF_LIBS])
11944 AC_SUBST([ENABLE_DCONF])
11946 # pdf import?
11947 AC_MSG_CHECKING([whether to build the PDF import feature])
11948 ENABLE_PDFIMPORT=
11949 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
11950     AC_MSG_RESULT([yes])
11951     ENABLE_PDFIMPORT=TRUE
11952     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
11953 else
11954     AC_MSG_RESULT([no])
11957 # Pdfium?
11958 AC_MSG_CHECKING([whether to build PDFium])
11959 ENABLE_PDFIUM=
11960 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
11961     AC_MSG_RESULT([yes])
11962     ENABLE_PDFIUM=TRUE
11963     BUILD_TYPE="$BUILD_TYPE PDFIUM"
11964 else
11965     AC_MSG_RESULT([no])
11967 AC_SUBST(ENABLE_PDFIUM)
11969 dnl ===================================================================
11970 dnl Check for poppler
11971 dnl ===================================================================
11972 ENABLE_POPPLER=
11973 AC_MSG_CHECKING([whether to build Poppler])
11974 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
11975     AC_MSG_RESULT([yes])
11976     ENABLE_POPPLER=TRUE
11977     AC_DEFINE(HAVE_FEATURE_POPPLER)
11978 else
11979     AC_MSG_RESULT([no])
11981 AC_SUBST(ENABLE_POPPLER)
11983 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
11984     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
11987 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
11988     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
11991 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
11992     dnl ===================================================================
11993     dnl Check for system poppler
11994     dnl ===================================================================
11995     AC_MSG_CHECKING([which PDF import poppler to use])
11996     if test "$with_system_poppler" = "yes"; then
11997         AC_MSG_RESULT([external])
11998         SYSTEM_POPPLER=TRUE
11999         PKG_CHECK_MODULES( POPPLER, poppler >= 0.12.0 )
12000         AC_LANG_PUSH([C++])
12001         save_CXXFLAGS=$CXXFLAGS
12002         save_CPPFLAGS=$CPPFLAGS
12003         CXXFLAGS="$CXXFLAGS $POPPLER_CFLAGS"
12004         CPPFLAGS="$CPPFLAGS $POPPLER_CFLAGS"
12005         AC_CHECK_HEADER([cpp/poppler-version.h],
12006             [AC_DEFINE([HAVE_POPPLER_VERSION_H], 1)],
12007             [])
12008         CXXFLAGS=$save_CXXFLAGS
12009         CPPFLAGS=$save_CPPFLAGS
12010         AC_LANG_POP([C++])
12011         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12013         FilterLibs "${POPPLER_LIBS}"
12014         POPPLER_LIBS="${filteredlibs}"
12015     else
12016         AC_MSG_RESULT([internal])
12017         SYSTEM_POPPLER=
12018         BUILD_TYPE="$BUILD_TYPE POPPLER"
12019         AC_DEFINE([HAVE_POPPLER_VERSION_H], 1)
12020     fi
12021     AC_DEFINE([ENABLE_PDFIMPORT],1)
12023 AC_SUBST(ENABLE_PDFIMPORT)
12024 AC_SUBST(SYSTEM_POPPLER)
12025 AC_SUBST(POPPLER_CFLAGS)
12026 AC_SUBST(POPPLER_LIBS)
12028 # Skia?
12029 ENABLE_SKIA=
12030 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
12031     # Skia now requires at least freetype2 >= 2.8.1, which is less that what LO requires as system freetype.
12032     if test "$SYSTEM_FREETYPE" = TRUE; then
12033         PKG_CHECK_EXISTS(freetype2 >= 21.0.15, # 21.0.15 = 2.8.1
12034             [skia_freetype_ok=yes],
12035             [skia_freetype_ok=no])
12036     else # internal is ok
12037         skia_freetype_ok=yes
12038     fi
12039     AC_MSG_CHECKING([whether to build Skia])
12040     if test "$skia_freetype_ok" = "yes"; then
12041         if test "$enable_skia" = "debug"; then
12042             AC_MSG_RESULT([yes (debug)])
12043             ENABLE_SKIA_DEBUG=TRUE
12044         else
12045             AC_MSG_RESULT([yes])
12046             ENABLE_SKIA_DEBUG=
12047         fi
12048         ENABLE_SKIA=TRUE
12049         AC_DEFINE(HAVE_FEATURE_SKIA)
12050         BUILD_TYPE="$BUILD_TYPE SKIA"
12052         if test "$OS" = "MACOSX"; then
12053             AC_DEFINE(SK_SUPPORT_GPU,1)
12054             AC_DEFINE(SK_METAL,1)
12055             SKIA_GPU=METAL
12056             AC_SUBST(SKIA_GPU)
12057         else
12058             AC_DEFINE(SK_SUPPORT_GPU,1)
12059             AC_DEFINE(SK_VULKAN,1)
12060             SKIA_GPU=VULKAN
12061             AC_SUBST(SKIA_GPU)
12062         fi
12064         if test -n "$MAC_OS_X_VERSION_MIN_REQUIRED" && test "$MAC_OS_X_VERSION_MIN_REQUIRED" -lt "101200"; then
12065             SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX=1
12066             AC_SUBST(SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX)
12067         fi
12068     else
12069         AC_MSG_RESULT([no (freetype too old)])
12070         add_warning "freetype version is too old for Skia library, at least 2.8.1 required, Skia support disabled"
12071     fi
12073 else
12074     AC_MSG_CHECKING([whether to build Skia])
12075     AC_MSG_RESULT([no])
12077 AC_SUBST(ENABLE_SKIA)
12078 AC_SUBST(ENABLE_SKIA_DEBUG)
12080 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
12081 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
12082 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
12083 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
12084 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
12085 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
12086 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
12087 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F=
12088 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
12089 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
12090 HAVE_LO_CLANG_DLLEXPORTINLINES=
12092 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE; then
12093     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12094         AC_MSG_CHECKING([for Clang])
12095         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
12096     else
12097         if test "$_os" = "WINNT"; then
12098             AC_MSG_CHECKING([for clang-cl])
12099             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
12100                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
12101                 dnl explicitly set -m32/-m64
12102                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
12103                 LO_CLANG_CXX="$LO_CLANG_CC"
12104                 AC_MSG_RESULT([$LO_CLANG_CC])
12105             else
12106                 AC_MSG_RESULT([no])
12107             fi
12108         else
12109             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
12110             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
12111         fi
12112     fi
12113     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12114         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
12115         clang2_ver=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
12116         if test "$clang2_ver" -lt 50002; then
12117             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
12118             LO_CLANG_CC=
12119             LO_CLANG_CXX=
12120         fi
12121     fi
12122     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX" -a "$_os" = "WINNT"; then
12123         save_CXX="$CXX"
12124         CXX="$LO_CLANG_CXX"
12125         AC_MSG_CHECKING([whether $CXX supports -Zc:dllexportInlines-])
12126         AC_LANG_PUSH([C++])
12127         save_CXXFLAGS=$CXXFLAGS
12128         CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
12129         AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
12130                 HAVE_LO_CLANG_DLLEXPORTINLINES=TRUE
12131                 AC_MSG_RESULT([yes])
12132             ], [AC_MSG_RESULT([no])])
12133         CXXFLAGS=$save_CXXFLAGS
12134         AC_LANG_POP([C++])
12135         CXX="$save_CXX"
12136         if test -z "$HAVE_LO_CLANG_DLLEXPORTINLINES"; then
12137             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.])
12138         fi
12139     fi
12140     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
12141         # Skia is the default on Windows, so hard-require Clang.
12142         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
12143         if test "$_os" = "WINNT"; then
12144             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang.])
12145         else
12146             AC_MSG_WARN([Clang compiler not found.])
12147         fi
12148     else
12150         save_CXX="$CXX"
12151         CXX="$LO_CLANG_CXX"
12152         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
12153         flag_sse2=-msse2
12154         flag_ssse3=-mssse3
12155         flag_sse41=-msse4.1
12156         flag_sse42=-msse4.2
12157         flag_avx=-mavx
12158         flag_avx2=-mavx2
12159         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
12160         flag_avx512f=-mavx512f
12161         flag_f16c=-mf16c
12162         flag_fma=-mfma
12164         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
12165         AC_LANG_PUSH([C++])
12166         save_CXXFLAGS=$CXXFLAGS
12167         CXXFLAGS="$CXXFLAGS $flag_sse2"
12168         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12169             #include <emmintrin.h>
12170             int main () {
12171                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12172                 c = _mm_xor_si128 (a, b);
12173                 return 0;
12174             }
12175             ])],
12176             [can_compile_sse2=yes],
12177             [can_compile_sse2=no])
12178         AC_LANG_POP([C++])
12179         CXXFLAGS=$save_CXXFLAGS
12180         AC_MSG_RESULT([${can_compile_sse2}])
12181         if test "${can_compile_sse2}" = "yes" ; then
12182             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
12183         fi
12185         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
12186         AC_LANG_PUSH([C++])
12187         save_CXXFLAGS=$CXXFLAGS
12188         CXXFLAGS="$CXXFLAGS $flag_ssse3"
12189         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12190             #include <tmmintrin.h>
12191             int main () {
12192                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12193                 c = _mm_maddubs_epi16 (a, b);
12194                 return 0;
12195             }
12196             ])],
12197             [can_compile_ssse3=yes],
12198             [can_compile_ssse3=no])
12199         AC_LANG_POP([C++])
12200         CXXFLAGS=$save_CXXFLAGS
12201         AC_MSG_RESULT([${can_compile_ssse3}])
12202         if test "${can_compile_ssse3}" = "yes" ; then
12203             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
12204         fi
12206         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
12207         AC_LANG_PUSH([C++])
12208         save_CXXFLAGS=$CXXFLAGS
12209         CXXFLAGS="$CXXFLAGS $flag_sse41"
12210         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12211             #include <smmintrin.h>
12212             int main () {
12213                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12214                 c = _mm_cmpeq_epi64 (a, b);
12215                 return 0;
12216             }
12217             ])],
12218             [can_compile_sse41=yes],
12219             [can_compile_sse41=no])
12220         AC_LANG_POP([C++])
12221         CXXFLAGS=$save_CXXFLAGS
12222         AC_MSG_RESULT([${can_compile_sse41}])
12223         if test "${can_compile_sse41}" = "yes" ; then
12224             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12225         fi
12227         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12228         AC_LANG_PUSH([C++])
12229         save_CXXFLAGS=$CXXFLAGS
12230         CXXFLAGS="$CXXFLAGS $flag_sse42"
12231         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12232             #include <nmmintrin.h>
12233             int main () {
12234                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12235                 c = _mm_cmpgt_epi64 (a, b);
12236                 return 0;
12237             }
12238             ])],
12239             [can_compile_sse42=yes],
12240             [can_compile_sse42=no])
12241         AC_LANG_POP([C++])
12242         CXXFLAGS=$save_CXXFLAGS
12243         AC_MSG_RESULT([${can_compile_sse42}])
12244         if test "${can_compile_sse42}" = "yes" ; then
12245             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12246         fi
12248         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12249         AC_LANG_PUSH([C++])
12250         save_CXXFLAGS=$CXXFLAGS
12251         CXXFLAGS="$CXXFLAGS $flag_avx"
12252         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12253             #include <immintrin.h>
12254             int main () {
12255                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12256                 c = _mm256_xor_ps(a, b);
12257                 return 0;
12258             }
12259             ])],
12260             [can_compile_avx=yes],
12261             [can_compile_avx=no])
12262         AC_LANG_POP([C++])
12263         CXXFLAGS=$save_CXXFLAGS
12264         AC_MSG_RESULT([${can_compile_avx}])
12265         if test "${can_compile_avx}" = "yes" ; then
12266             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12267         fi
12269         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12270         AC_LANG_PUSH([C++])
12271         save_CXXFLAGS=$CXXFLAGS
12272         CXXFLAGS="$CXXFLAGS $flag_avx2"
12273         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12274             #include <immintrin.h>
12275             int main () {
12276                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12277                 c = _mm256_maddubs_epi16(a, b);
12278                 return 0;
12279             }
12280             ])],
12281             [can_compile_avx2=yes],
12282             [can_compile_avx2=no])
12283         AC_LANG_POP([C++])
12284         CXXFLAGS=$save_CXXFLAGS
12285         AC_MSG_RESULT([${can_compile_avx2}])
12286         if test "${can_compile_avx2}" = "yes" ; then
12287             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12288         fi
12290         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12291         AC_LANG_PUSH([C++])
12292         save_CXXFLAGS=$CXXFLAGS
12293         CXXFLAGS="$CXXFLAGS $flag_avx512"
12294         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12295             #include <immintrin.h>
12296             int main () {
12297                 __m512i a = _mm512_loadu_si512(0);
12298                 __m512d v1 = _mm512_load_pd(0);
12299                 // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
12300                 __m512d v2 = _mm512_abs_pd(v1);
12301                 return 0;
12302             }
12303             ])],
12304             [can_compile_avx512=yes],
12305             [can_compile_avx512=no])
12306         AC_LANG_POP([C++])
12307         CXXFLAGS=$save_CXXFLAGS
12308         AC_MSG_RESULT([${can_compile_avx512}])
12309         if test "${can_compile_avx512}" = "yes" ; then
12310             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12311             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
12312         fi
12314         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12315         AC_LANG_PUSH([C++])
12316         save_CXXFLAGS=$CXXFLAGS
12317         CXXFLAGS="$CXXFLAGS $flag_f16c"
12318         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12319             #include <immintrin.h>
12320             int main () {
12321                 __m128i a = _mm_set1_epi32 (0);
12322                 __m128 c;
12323                 c = _mm_cvtph_ps(a);
12324                 return 0;
12325             }
12326             ])],
12327             [can_compile_f16c=yes],
12328             [can_compile_f16c=no])
12329         AC_LANG_POP([C++])
12330         CXXFLAGS=$save_CXXFLAGS
12331         AC_MSG_RESULT([${can_compile_f16c}])
12332         if test "${can_compile_f16c}" = "yes" ; then
12333             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12334         fi
12336         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12337         AC_LANG_PUSH([C++])
12338         save_CXXFLAGS=$CXXFLAGS
12339         CXXFLAGS="$CXXFLAGS $flag_fma"
12340         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12341             #include <immintrin.h>
12342             int main () {
12343                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12344                 d = _mm256_fmadd_ps(a, b, c);
12345                 return 0;
12346             }
12347             ])],
12348             [can_compile_fma=yes],
12349             [can_compile_fma=no])
12350         AC_LANG_POP([C++])
12351         CXXFLAGS=$save_CXXFLAGS
12352         AC_MSG_RESULT([${can_compile_fma}])
12353         if test "${can_compile_fma}" = "yes" ; then
12354             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12355         fi
12357         CXX="$save_CXX"
12358     fi
12361 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12363 UNCACHED_CLANG_CC="$LO_CLANG_CC"
12364 UNCACHED_CLANG_CXX="$LO_CLANG_CXX"
12365 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12366     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12367     AC_LANG_PUSH([C])
12368     save_CC="$CC"
12369     CC="$LO_CLANG_CC"
12370     save_CFLAGS=$CFLAGS
12371     CFLAGS="$CFLAGS --ccache-skip -O2"
12372     dnl an empty program will do, we're checking the compiler flags
12373     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12374                       [use_ccache=yes], [use_ccache=no])
12375     CFLAGS=$save_CFLAGS
12376     CC=$save_CC
12377     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12378         AC_MSG_RESULT([yes])
12379     else
12380         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12381         AC_MSG_RESULT([no])
12382     fi
12383     AC_LANG_POP([C])
12385     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12386     AC_LANG_PUSH([C++])
12387     save_CXX="$CXX"
12388     CXX="$LO_CLANG_CXX"
12389     save_CXXFLAGS=$CXXFLAGS
12390     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
12391     dnl an empty program will do, we're checking the compiler flags
12392     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12393                       [use_ccache=yes], [use_ccache=no])
12394     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12395         AC_MSG_RESULT([yes])
12396     else
12397         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12398         AC_MSG_RESULT([no])
12399     fi
12400     CXXFLAGS=$save_CXXFLAGS
12401     CXX=$save_CXX
12402     AC_LANG_POP([C++])
12405 AC_SUBST(UNCACHED_CC)
12406 AC_SUBST(UNCACHED_CXX)
12407 AC_SUBST(LO_CLANG_CC)
12408 AC_SUBST(LO_CLANG_CXX)
12409 AC_SUBST(UNCACHED_CLANG_CC)
12410 AC_SUBST(UNCACHED_CLANG_CXX)
12411 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12412 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12413 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12414 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12415 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12416 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12417 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12418 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F)
12419 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12420 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12421 AC_SUBST(CLANG_USE_LD)
12422 AC_SUBST([HAVE_LO_CLANG_DLLEXPORTINLINES])
12424 SYSTEM_GPGMEPP=
12426 if test "$enable_gpgmepp" = no; then
12427     AC_MSG_CHECKING([whether to enable gpgmepp])
12428     AC_MSG_RESULT([no])
12429 elif test "$enable_mpl_subset" = "yes"; then
12430     AC_MSG_CHECKING([whether gpgmepp should be disabled due to building just MPL])
12431     AC_MSG_RESULT([yes])
12432 elif test "$enable_fuzzers" = "yes"; then
12433     AC_MSG_CHECKING([whether gpgmepp should be disabled due to oss-fuzz])
12434     AC_MSG_RESULT([yes])
12435 elif test "$_os" = "Linux" -o "$_os" = "Darwin" -o "$_os" = "WINNT" ; then
12436     dnl ===================================================================
12437     dnl Check for system gpgme
12438     dnl ===================================================================
12439     AC_MSG_CHECKING([which gpgmepp to use])
12440     if test "$with_system_gpgmepp" = "yes"; then
12441         AC_MSG_RESULT([external])
12442         SYSTEM_GPGMEPP=TRUE
12444         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12445         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12446             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp development package])], [])
12447         # progress_callback is the only func with plain C linkage
12448         # checking for it also filters out older, KDE-dependent libgpgmepp versions
12449         AC_CHECK_LIB(gpgmepp, progress_callback, [ GPGMEPP_LIBS=-lgpgmepp ],
12450             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12451         AC_CHECK_HEADER(gpgme.h, [],
12452             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12453     else
12454         AC_MSG_RESULT([internal])
12455         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12456         AC_DEFINE([GPGME_CAN_EXPORT_MINIMAL_KEY])
12458         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12459         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12460         if test "$_os" != "WINNT"; then
12461             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12462             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12463         fi
12464     fi
12465     ENABLE_GPGMEPP=TRUE
12466     AC_DEFINE([HAVE_FEATURE_GPGME])
12467     AC_PATH_PROG(GPG, gpg)
12468     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12469     # so let's exclude that manually for the moment
12470     if test -n "$GPG" -a "$_os" != "WINNT"; then
12471         # make sure we not only have a working gpgme, but a full working
12472         # gpg installation to run OpenPGP signature verification
12473         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12474     fi
12475     if test "$_os" = "Linux"; then
12476       uid=`id -u`
12477       AC_MSG_CHECKING([for /run/user/$uid])
12478       if test -d /run/user/$uid; then
12479         AC_MSG_RESULT([yes])
12480         AC_PATH_PROG(GPGCONF, gpgconf)
12482         # Older versions of gpgconf are not working as expected, since
12483         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12484         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12485         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12486         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12487         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12488         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12489         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12490           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12491           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12492           if $GPGCONF --dump-options > /dev/null ; then
12493             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12494               AC_MSG_RESULT([yes])
12495               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12496               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12497             else
12498               AC_MSG_RESULT([no])
12499             fi
12500           else
12501             AC_MSG_RESULT([no. missing or broken gpgconf?])
12502           fi
12503         else
12504           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12505         fi
12506       else
12507         AC_MSG_RESULT([no])
12508      fi
12509    fi
12511 AC_SUBST(ENABLE_GPGMEPP)
12512 AC_SUBST(SYSTEM_GPGMEPP)
12513 AC_SUBST(GPG_ERROR_CFLAGS)
12514 AC_SUBST(GPG_ERROR_LIBS)
12515 AC_SUBST(LIBASSUAN_CFLAGS)
12516 AC_SUBST(LIBASSUAN_LIBS)
12517 AC_SUBST(GPGMEPP_CFLAGS)
12518 AC_SUBST(GPGMEPP_LIBS)
12520 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12521 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12522     AC_MSG_RESULT([yes])
12523     ENABLE_MEDIAWIKI=TRUE
12524     BUILD_TYPE="$BUILD_TYPE XSLTML"
12525     if test  "x$with_java" = "xno"; then
12526         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12527     fi
12528 else
12529     AC_MSG_RESULT([no])
12530     ENABLE_MEDIAWIKI=
12531     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12533 AC_SUBST(ENABLE_MEDIAWIKI)
12535 AC_MSG_CHECKING([whether to build the Report Builder])
12536 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12537     AC_MSG_RESULT([yes])
12538     ENABLE_REPORTBUILDER=TRUE
12539     AC_MSG_CHECKING([which jfreereport libs to use])
12540     if test "$with_system_jfreereport" = "yes"; then
12541         SYSTEM_JFREEREPORT=TRUE
12542         AC_MSG_RESULT([external])
12543         if test -z $SAC_JAR; then
12544             SAC_JAR=/usr/share/java/sac.jar
12545         fi
12546         if ! test -f $SAC_JAR; then
12547              AC_MSG_ERROR(sac.jar not found.)
12548         fi
12550         if test -z $LIBXML_JAR; then
12551             if test -f /usr/share/java/libxml-1.0.0.jar; then
12552                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12553             elif test -f /usr/share/java/libxml.jar; then
12554                 LIBXML_JAR=/usr/share/java/libxml.jar
12555             else
12556                 AC_MSG_ERROR(libxml.jar replacement not found.)
12557             fi
12558         elif ! test -f $LIBXML_JAR; then
12559             AC_MSG_ERROR(libxml.jar not found.)
12560         fi
12562         if test -z $FLUTE_JAR; then
12563             if test -f /usr/share/java/flute-1.3.0.jar; then
12564                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12565             elif test -f /usr/share/java/flute.jar; then
12566                 FLUTE_JAR=/usr/share/java/flute.jar
12567             else
12568                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12569             fi
12570         elif ! test -f $FLUTE_JAR; then
12571             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12572         fi
12574         if test -z $JFREEREPORT_JAR; then
12575             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12576                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12577             elif test -f /usr/share/java/flow-engine.jar; then
12578                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12579             else
12580                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12581             fi
12582         elif ! test -f  $JFREEREPORT_JAR; then
12583                 AC_MSG_ERROR(jfreereport.jar not found.)
12584         fi
12586         if test -z $LIBLAYOUT_JAR; then
12587             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12588                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12589             elif test -f /usr/share/java/liblayout.jar; then
12590                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12591             else
12592                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12593             fi
12594         elif ! test -f $LIBLAYOUT_JAR; then
12595                 AC_MSG_ERROR(liblayout.jar not found.)
12596         fi
12598         if test -z $LIBLOADER_JAR; then
12599             if test -f /usr/share/java/libloader-1.0.0.jar; then
12600                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
12601             elif test -f /usr/share/java/libloader.jar; then
12602                 LIBLOADER_JAR=/usr/share/java/libloader.jar
12603             else
12604                 AC_MSG_ERROR(libloader.jar replacement not found.)
12605             fi
12606         elif ! test -f  $LIBLOADER_JAR; then
12607             AC_MSG_ERROR(libloader.jar not found.)
12608         fi
12610         if test -z $LIBFORMULA_JAR; then
12611             if test -f /usr/share/java/libformula-0.2.0.jar; then
12612                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
12613             elif test -f /usr/share/java/libformula.jar; then
12614                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
12615             else
12616                 AC_MSG_ERROR(libformula.jar replacement not found.)
12617             fi
12618         elif ! test -f $LIBFORMULA_JAR; then
12619                 AC_MSG_ERROR(libformula.jar not found.)
12620         fi
12622         if test -z $LIBREPOSITORY_JAR; then
12623             if test -f /usr/share/java/librepository-1.0.0.jar; then
12624                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
12625             elif test -f /usr/share/java/librepository.jar; then
12626                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
12627             else
12628                 AC_MSG_ERROR(librepository.jar replacement not found.)
12629             fi
12630         elif ! test -f $LIBREPOSITORY_JAR; then
12631             AC_MSG_ERROR(librepository.jar not found.)
12632         fi
12634         if test -z $LIBFONTS_JAR; then
12635             if test -f /usr/share/java/libfonts-1.0.0.jar; then
12636                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
12637             elif test -f /usr/share/java/libfonts.jar; then
12638                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
12639             else
12640                 AC_MSG_ERROR(libfonts.jar replacement not found.)
12641             fi
12642         elif ! test -f $LIBFONTS_JAR; then
12643                 AC_MSG_ERROR(libfonts.jar not found.)
12644         fi
12646         if test -z $LIBSERIALIZER_JAR; then
12647             if test -f /usr/share/java/libserializer-1.0.0.jar; then
12648                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
12649             elif test -f /usr/share/java/libserializer.jar; then
12650                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
12651             else
12652                 AC_MSG_ERROR(libserializer.jar replacement not found.)
12653             fi
12654         elif ! test -f $LIBSERIALIZER_JAR; then
12655                 AC_MSG_ERROR(libserializer.jar not found.)
12656         fi
12658         if test -z $LIBBASE_JAR; then
12659             if test -f /usr/share/java/libbase-1.0.0.jar; then
12660                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
12661             elif test -f /usr/share/java/libbase.jar; then
12662                 LIBBASE_JAR=/usr/share/java/libbase.jar
12663             else
12664                 AC_MSG_ERROR(libbase.jar replacement not found.)
12665             fi
12666         elif ! test -f $LIBBASE_JAR; then
12667             AC_MSG_ERROR(libbase.jar not found.)
12668         fi
12670     else
12671         AC_MSG_RESULT([internal])
12672         SYSTEM_JFREEREPORT=
12673         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
12674         NEED_ANT=TRUE
12675     fi
12676 else
12677     AC_MSG_RESULT([no])
12678     ENABLE_REPORTBUILDER=
12679     SYSTEM_JFREEREPORT=
12681 AC_SUBST(ENABLE_REPORTBUILDER)
12682 AC_SUBST(SYSTEM_JFREEREPORT)
12683 AC_SUBST(SAC_JAR)
12684 AC_SUBST(LIBXML_JAR)
12685 AC_SUBST(FLUTE_JAR)
12686 AC_SUBST(JFREEREPORT_JAR)
12687 AC_SUBST(LIBBASE_JAR)
12688 AC_SUBST(LIBLAYOUT_JAR)
12689 AC_SUBST(LIBLOADER_JAR)
12690 AC_SUBST(LIBFORMULA_JAR)
12691 AC_SUBST(LIBREPOSITORY_JAR)
12692 AC_SUBST(LIBFONTS_JAR)
12693 AC_SUBST(LIBSERIALIZER_JAR)
12695 # scripting provider for BeanShell?
12696 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
12697 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
12698     AC_MSG_RESULT([yes])
12699     ENABLE_SCRIPTING_BEANSHELL=TRUE
12701     dnl ===================================================================
12702     dnl Check for system beanshell
12703     dnl ===================================================================
12704     AC_MSG_CHECKING([which beanshell to use])
12705     if test "$with_system_beanshell" = "yes"; then
12706         AC_MSG_RESULT([external])
12707         SYSTEM_BSH=TRUE
12708         if test -z $BSH_JAR; then
12709             BSH_JAR=/usr/share/java/bsh.jar
12710         fi
12711         if ! test -f $BSH_JAR; then
12712             AC_MSG_ERROR(bsh.jar not found.)
12713         fi
12714     else
12715         AC_MSG_RESULT([internal])
12716         SYSTEM_BSH=
12717         BUILD_TYPE="$BUILD_TYPE BSH"
12718     fi
12719 else
12720     AC_MSG_RESULT([no])
12721     ENABLE_SCRIPTING_BEANSHELL=
12722     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
12724 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
12725 AC_SUBST(SYSTEM_BSH)
12726 AC_SUBST(BSH_JAR)
12728 # scripting provider for JavaScript?
12729 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
12730 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
12731     AC_MSG_RESULT([yes])
12732     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
12734     dnl ===================================================================
12735     dnl Check for system rhino
12736     dnl ===================================================================
12737     AC_MSG_CHECKING([which rhino to use])
12738     if test "$with_system_rhino" = "yes"; then
12739         AC_MSG_RESULT([external])
12740         SYSTEM_RHINO=TRUE
12741         if test -z $RHINO_JAR; then
12742             RHINO_JAR=/usr/share/java/js.jar
12743         fi
12744         if ! test -f $RHINO_JAR; then
12745             AC_MSG_ERROR(js.jar not found.)
12746         fi
12747     else
12748         AC_MSG_RESULT([internal])
12749         SYSTEM_RHINO=
12750         BUILD_TYPE="$BUILD_TYPE RHINO"
12751         NEED_ANT=TRUE
12752     fi
12753 else
12754     AC_MSG_RESULT([no])
12755     ENABLE_SCRIPTING_JAVASCRIPT=
12756     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
12758 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
12759 AC_SUBST(SYSTEM_RHINO)
12760 AC_SUBST(RHINO_JAR)
12762 # This is only used in Qt5/Qt6/KF5 checks to determine if /usr/lib64
12763 # paths should be added to library search path. So lets put all 64-bit
12764 # platforms there.
12765 supports_multilib=
12766 case "$host_cpu" in
12767 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el)
12768     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
12769         supports_multilib="yes"
12770     fi
12771     ;;
12773     ;;
12774 esac
12776 dnl ===================================================================
12777 dnl QT5 Integration
12778 dnl ===================================================================
12780 QT5_CFLAGS=""
12781 QT5_LIBS=""
12782 QMAKE5="qmake"
12783 MOC5="moc"
12784 QT5_GOBJECT_CFLAGS=""
12785 QT5_GOBJECT_LIBS=""
12786 QT5_HAVE_GOBJECT=""
12787 QT5_PLATFORMS_SRCDIR=""
12788 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12789         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
12790         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12791 then
12792     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
12793     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
12795     if test -n "$supports_multilib"; then
12796         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
12797     fi
12799     qt5_test_include="QtWidgets/qapplication.h"
12800     if test "$_os" = "Emscripten"; then
12801         qt5_test_library="libQt5Widgets.a"
12802     else
12803         qt5_test_library="libQt5Widgets.so"
12804     fi
12806     dnl Check for qmake5
12807     if test -n "$QT5DIR"; then
12808         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
12809     else
12810         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
12811     fi
12812     if test "$QMAKE5" = "no"; then
12813         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12814     else
12815         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
12816         if test -z "$qmake5_test_ver"; then
12817             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12818         fi
12819         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
12820         qt5_minimal_minor="6"
12821         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
12822             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
12823         else
12824             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
12825         fi
12826     fi
12828     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
12829     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
12830     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
12831     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
12833     AC_MSG_CHECKING([for Qt5 headers])
12834     qt5_incdir="no"
12835     for inc_dir in $qt5_incdirs; do
12836         if test -r "$inc_dir/$qt5_test_include"; then
12837             qt5_incdir="$inc_dir"
12838             break
12839         fi
12840     done
12841     AC_MSG_RESULT([$qt5_incdir])
12842     if test "x$qt5_incdir" = "xno"; then
12843         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12844     fi
12845     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
12846     AC_LANG_PUSH([C++])
12847     save_CPPFLAGS=$CPPFLAGS
12848     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
12849     AC_CHECK_HEADER(QtCore/qconfig.h, [],
12850         [AC_MSG_ERROR(qconfig.h header not found.)], [])
12851     CPPFLAGS=$save_CPPFLAGS
12852     AC_LANG_POP([C++])
12854     AC_MSG_CHECKING([for Qt5 libraries])
12855     qt5_libdir="no"
12856     for lib_dir in $qt5_libdirs; do
12857         if test -r "$lib_dir/$qt5_test_library"; then
12858             qt5_libdir="$lib_dir"
12859             break
12860         fi
12861     done
12862     AC_MSG_RESULT([$qt5_libdir])
12863     if test "x$qt5_libdir" = "xno"; then
12864         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12865     fi
12867     if test "$_os" = "Emscripten"; then
12868         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
12869             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
12870         fi
12871         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
12872             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
12873         fi
12874     fi
12876     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
12877     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12878     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
12879     if test "$_os" = "Emscripten"; then
12880         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
12881     fi
12883     if test "$USING_X11" = TRUE; then
12884         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
12885         PKG_CHECK_MODULES(QT5_XCB_ICCCM,[xcb-icccm],[
12886             QT5_HAVE_XCB_ICCCM=1
12887             AC_DEFINE(QT5_HAVE_XCB_ICCCM)
12888         ],[
12889             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)])
12890             add_warning "XCB ICCCM not found, which is needed for Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)"
12891         ])
12892         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
12893         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
12894         QT5_USING_X11=1
12895         AC_DEFINE(QT5_USING_X11)
12896     fi
12898     dnl Check for Meta Object Compiler
12900     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
12901     if test "$MOC5" = "no"; then
12902         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
12903 the root of your Qt installation by exporting QT5DIR before running "configure".])
12904     fi
12906     if test "$test_gstreamer_1_0" = yes; then
12907         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
12908                 QT5_HAVE_GOBJECT=1
12909                 AC_DEFINE(QT5_HAVE_GOBJECT)
12910             ],
12911             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
12912         )
12913     fi
12915 AC_SUBST(QT5_CFLAGS)
12916 AC_SUBST(QT5_LIBS)
12917 AC_SUBST(MOC5)
12918 AC_SUBST(QT5_GOBJECT_CFLAGS)
12919 AC_SUBST(QT5_GOBJECT_LIBS)
12920 AC_SUBST(QT5_HAVE_GOBJECT)
12921 AC_SUBST(QT5_PLATFORMS_SRCDIR)
12923 dnl ===================================================================
12924 dnl QT6 Integration
12925 dnl ===================================================================
12927 QT6_CFLAGS=""
12928 QT6_LIBS=""
12929 QMAKE6="qmake"
12930 MOC6="moc"
12931 QT6_PLATFORMS_SRCDIR=""
12932 if test \( "$test_qt6" = "yes" -a "$ENABLE_QT6" = "TRUE" \)
12933 then
12934     qt6_incdirs="$QT6INC /usr/include/qt6 /usr/include $x_includes"
12935     qt6_libdirs="$QT6LIB /usr/lib/qt6 /usr/lib $x_libraries"
12937     if test -n "$supports_multilib"; then
12938         qt6_libdirs="$qt6_libdirs /usr/lib64/qt6 /usr/lib64/qt /usr/lib64"
12939     fi
12941     qt6_test_include="QtWidgets/qapplication.h"
12942     if test "$_os" = "Emscripten"; then
12943         qt6_test_library="libQt6Widgets.a"
12944     else
12945         qt6_test_library="libQt6Widgets.so"
12946     fi
12948     dnl Check for qmake6
12949     if test -n "$QT6DIR"; then
12950         AC_PATH_PROG(QMAKE6, [qmake], no, [$QT6DIR/bin])
12951     else
12952         AC_PATH_PROGS(QMAKE6, [qmake-qt6 qmake], no)
12953     fi
12954     if test "$QMAKE6" = "no"; then
12955         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
12956     else
12957         qmake6_test_ver="`$QMAKE6 -v 2>&1 | $SED -n -e 's/^Using Qt version \(6\.[[0-9.]]\+\).*$/\1/p'`"
12958         if test -z "$qmake6_test_ver"; then
12959             AC_MSG_ERROR([Wrong qmake for Qt6 found. Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
12960         fi
12961         AC_MSG_NOTICE([Detected Qt6 version: $qmake6_test_ver])
12962     fi
12964     qt6_incdirs="`$QMAKE6 -query QT_INSTALL_HEADERS` $qt6_incdirs"
12965     qt6_libdirs="`$QMAKE6 -query QT_INSTALL_LIBS` $qt6_libdirs"
12966     qt6_platformsdir="`$QMAKE6 -query QT_INSTALL_PLUGINS`/platforms"
12967     QT6_PLATFORMS_SRCDIR="$qt6_platformsdir"
12969     AC_MSG_CHECKING([for Qt6 headers])
12970     qt6_incdir="no"
12971     for inc_dir in $qt6_incdirs; do
12972         if test -r "$inc_dir/$qt6_test_include"; then
12973             qt6_incdir="$inc_dir"
12974             break
12975         fi
12976     done
12977     AC_MSG_RESULT([$qt6_incdir])
12978     if test "x$qt6_incdir" = "xno"; then
12979         AC_MSG_ERROR([Qt6 headers not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
12980     fi
12981     # check for scenario: qt6-qtbase-devel-*.86_64 installed but host is i686
12982     AC_LANG_PUSH([C++])
12983     save_CPPFLAGS=$CPPFLAGS
12984     CPPFLAGS="${CPPFLAGS} -I${qt6_incdir}"
12985     AC_CHECK_HEADER(QtCore/qconfig.h, [],
12986         [AC_MSG_ERROR(qconfig.h header not found.)], [])
12987     CPPFLAGS=$save_CPPFLAGS
12988     AC_LANG_POP([C++])
12990     AC_MSG_CHECKING([for Qt6 libraries])
12991     qt6_libdir="no"
12992     for lib_dir in $qt6_libdirs; do
12993         if test -r "$lib_dir/$qt6_test_library"; then
12994             qt6_libdir="$lib_dir"
12995             break
12996         fi
12997     done
12998     AC_MSG_RESULT([$qt6_libdir])
12999     if test "x$qt6_libdir" = "xno"; then
13000         AC_MSG_ERROR([Qt6 libraries not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13001     fi
13003     if test "$_os" = "Emscripten"; then
13004         if test ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html ; then
13005             QT6_PLATFORMS_SRCDIR="${QT6_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
13006         fi
13007         if test ! -f "${qt6_platformsdir}"/libqwasm.a -o ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html; then
13008             AC_MSG_ERROR([No Qt6 WASM QPA plugin found in ${qt6_platformsdir} or ${QT6_PLATFORMS_SRCDIR}])
13009         fi
13010     fi
13012     QT6_CFLAGS="-I$qt6_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13013     QT6_CFLAGS=$(printf '%s' "$QT6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13014     QT6_LIBS="-L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
13015     if test "$_os" = "Emscripten"; then
13016         QT6_LIBS="$QT6_LIBS -lqtpcre2 -lQt6EventDispatcherSupport -lQt6FontDatabaseSupport -L${qt6_platformsdir} -lqwasm"
13017     fi
13019     if test "$USING_X11" = TRUE; then
13020         PKG_CHECK_MODULES(QT6_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for key modifier handling in X11.])])
13021         QT6_CFLAGS="$QT6_CFLAGS $QT6_XCB_CFLAGS"
13022         QT6_LIBS="$QT6_LIBS $QT6_XCB_LIBS"
13023         QT6_USING_X11=1
13024         AC_DEFINE(QT6_USING_X11)
13025     fi
13027     dnl Check for Meta Object Compiler
13029     AC_PATH_PROGS( MOC6, [moc-qt6 moc], no, [`dirname $qt6_libdir`/libexec:$QT6DIR/libexec:$PATH])
13030     if test "$MOC6" = "no"; then
13031         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13032 the root of your Qt installation by exporting QT6DIR before running "configure".])
13033     fi
13035 AC_SUBST(QT6_CFLAGS)
13036 AC_SUBST(QT6_LIBS)
13037 AC_SUBST(MOC6)
13038 AC_SUBST(QT6_PLATFORMS_SRCDIR)
13040 dnl ===================================================================
13041 dnl KF5 Integration
13042 dnl ===================================================================
13044 KF5_CFLAGS=""
13045 KF5_LIBS=""
13046 KF5_CONFIG="kf5-config"
13047 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13048         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13049 then
13050     if test "$OS" = "HAIKU"; then
13051         haiku_arch="`echo $RTL_ARCH | tr X x`"
13052         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13053         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13054     fi
13056     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
13057     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
13058     if test -n "$supports_multilib"; then
13059         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
13060     fi
13062     kf5_test_include="KF5/kcoreaddons_version.h"
13063     kf5_test_library="libKF5CoreAddons.so"
13064     kf5_libdirs="$qt5_libdir $kf5_libdirs"
13066     dnl kf5 KDE4 support compatibility installed
13067     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
13068     if test "$KF5_CONFIG" != "no"; then
13069         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
13070         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
13071     fi
13073     dnl Check for KF5 headers
13074     AC_MSG_CHECKING([for KF5 headers])
13075     kf5_incdir="no"
13076     for kf5_check in $kf5_incdirs; do
13077         if test -r "$kf5_check/$kf5_test_include"; then
13078             kf5_incdir="$kf5_check/KF5"
13079             break
13080         fi
13081     done
13082     AC_MSG_RESULT([$kf5_incdir])
13083     if test "x$kf5_incdir" = "xno"; then
13084         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13085     fi
13087     dnl Check for KF5 libraries
13088     AC_MSG_CHECKING([for KF5 libraries])
13089     kf5_libdir="no"
13090     for kf5_check in $kf5_libdirs; do
13091         if test -r "$kf5_check/$kf5_test_library"; then
13092             kf5_libdir="$kf5_check"
13093             break
13094         fi
13095     done
13097     AC_MSG_RESULT([$kf5_libdir])
13098     if test "x$kf5_libdir" = "xno"; then
13099         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13100     fi
13102     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"
13103     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13104     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13106     if test "$USING_X11" = TRUE; then
13107         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
13108     fi
13110     AC_LANG_PUSH([C++])
13111     save_CXXFLAGS=$CXXFLAGS
13112     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
13113     AC_MSG_CHECKING([whether KDE is >= 5.0])
13114        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13115 #include <kcoreaddons_version.h>
13117 int main(int argc, char **argv) {
13118        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
13119        else return 1;
13121        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13122     CXXFLAGS=$save_CXXFLAGS
13123     AC_LANG_POP([C++])
13125 AC_SUBST(KF5_CFLAGS)
13126 AC_SUBST(KF5_LIBS)
13128 dnl ===================================================================
13129 dnl Test whether to include Evolution 2 support
13130 dnl ===================================================================
13131 AC_MSG_CHECKING([whether to enable evolution 2 support])
13132 if test "$enable_evolution2" = yes; then
13133     AC_MSG_RESULT([yes])
13134     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
13135     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13136     FilterLibs "${GOBJECT_LIBS}"
13137     GOBJECT_LIBS="${filteredlibs}"
13138     ENABLE_EVOAB2="TRUE"
13139 else
13140     AC_MSG_RESULT([no])
13142 AC_SUBST(ENABLE_EVOAB2)
13143 AC_SUBST(GOBJECT_CFLAGS)
13144 AC_SUBST(GOBJECT_LIBS)
13146 dnl ===================================================================
13147 dnl Test which themes to include
13148 dnl ===================================================================
13149 AC_MSG_CHECKING([which themes to include])
13150 # if none given use default subset of available themes
13151 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
13152     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"
13155 WITH_THEMES=""
13156 if test "x$with_theme" != "xno"; then
13157     for theme in $with_theme; do
13158         case $theme in
13159         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" ;;
13160         default) real_theme=colibre ;;
13161         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
13162         esac
13163         WITH_THEMES=`echo "$WITH_THEMES $real_theme"|tr '\ ' '\n'|sort|uniq|tr '\n' '\ '`
13164     done
13166 AC_MSG_RESULT([$WITH_THEMES])
13167 AC_SUBST([WITH_THEMES])
13168 # FIXME: remove this, and the convenience default->colibre remapping after a grace period
13169 for theme in $with_theme; do
13170     case $theme in
13171     default) AC_MSG_WARN([--with-theme=default is deprecated and will be removed, use --with-theme=colibre]) ;;
13172     *) ;;
13173     esac
13174 done
13176 ###############################################################################
13177 # Extensions checking
13178 ###############################################################################
13179 AC_MSG_CHECKING([for extensions integration])
13180 if test "x$enable_extension_integration" != "xno"; then
13181     WITH_EXTENSION_INTEGRATION=TRUE
13182     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
13183     AC_MSG_RESULT([yes, use integration])
13184 else
13185     WITH_EXTENSION_INTEGRATION=
13186     AC_MSG_RESULT([no, do not integrate])
13188 AC_SUBST(WITH_EXTENSION_INTEGRATION)
13190 dnl Should any extra extensions be included?
13191 dnl There are standalone tests for each of these below.
13192 WITH_EXTRA_EXTENSIONS=
13193 AC_SUBST([WITH_EXTRA_EXTENSIONS])
13195 libo_CHECK_EXTENSION([ConvertTextToNumber],[CT2N],[ct2n],[ct2n],[])
13196 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
13197 if test "x$with_java" != "xno"; then
13198     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
13199     libo_CHECK_EXTENSION([LanguageTool],[LANGUAGETOOL],[languagetool],[languagetool],[])
13202 AC_MSG_CHECKING([whether to build opens___.ttf])
13203 if test "$enable_build_opensymbol" = "yes"; then
13204     AC_MSG_RESULT([yes])
13205     AC_PATH_PROG(FONTFORGE, fontforge)
13206     if test -z "$FONTFORGE"; then
13207         AC_MSG_ERROR([fontforge not installed])
13208     fi
13209 else
13210     AC_MSG_RESULT([no])
13211     OPENSYMBOL_TTF=f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140-opens___.ttf
13212     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
13214 AC_SUBST(OPENSYMBOL_TTF)
13215 AC_SUBST(FONTFORGE)
13217 dnl ===================================================================
13218 dnl Test whether to include fonts
13219 dnl ===================================================================
13220 AC_MSG_CHECKING([whether to include third-party fonts])
13221 if test "$with_fonts" != "no"; then
13222     AC_MSG_RESULT([yes])
13223     WITH_FONTS=TRUE
13224     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
13225     AC_DEFINE(HAVE_MORE_FONTS)
13226 else
13227     AC_MSG_RESULT([no])
13228     WITH_FONTS=
13229     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
13231 AC_SUBST(WITH_FONTS)
13234 dnl ===================================================================
13235 dnl Test whether to enable online update service
13236 dnl ===================================================================
13237 AC_MSG_CHECKING([whether to enable online update])
13238 ENABLE_ONLINE_UPDATE=
13239 ENABLE_ONLINE_UPDATE_MAR=
13240 UPDATE_CONFIG=
13241 if test "$enable_online_update" = ""; then
13242     AC_MSG_RESULT([no])
13243 else
13244     if test "$enable_online_update" = "mar"; then
13245         AC_MSG_RESULT([yes - MAR-based online update])
13246         ENABLE_ONLINE_UPDATE_MAR="TRUE"
13247         if test "$with_update_config" = ""; then
13248             AC_MSG_ERROR([mar based online updater needs an update config specified with "with-update-config])
13249         fi
13250         UPDATE_CONFIG="$with_update_config"
13251         AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
13252     elif test "$enable_online_update" = "yes"; then
13253         AC_MSG_RESULT([yes])
13254         ENABLE_ONLINE_UPDATE="TRUE"
13255     else
13256         AC_MSG_RESULT([no])
13257     fi
13259 AC_SUBST(ENABLE_ONLINE_UPDATE)
13260 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
13261 AC_SUBST(UPDATE_CONFIG)
13264 PRIVACY_POLICY_URL="$with_privacy_policy_url"
13265 if test "$ENABLE_ONLINE_UPDATE" = TRUE -o "$ENABLE_BREAKPAD" = "TRUE"; then
13266     if test "x$with_privacy_policy_url" = "xundefined"; then
13267         AC_MSG_FAILURE([online update or breakpad/crashreporting are enabled, but no --with-privacy-policy-url=... was provided])
13268     fi
13270 AC_SUBST(PRIVACY_POLICY_URL)
13271 dnl ===================================================================
13272 dnl Test whether we need bzip2
13273 dnl ===================================================================
13274 SYSTEM_BZIP2=
13275 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE"; then
13276     AC_MSG_CHECKING([whether to use system bzip2])
13277     if test "$with_system_bzip2" = yes; then
13278         SYSTEM_BZIP2=TRUE
13279         AC_MSG_RESULT([yes])
13280         PKG_CHECK_MODULES(BZIP2, bzip2)
13281         FilterLibs "${BZIP2_LIBS}"
13282         BZIP2_LIBS="${filteredlibs}"
13283     else
13284         AC_MSG_RESULT([no])
13285         BUILD_TYPE="$BUILD_TYPE BZIP2"
13286     fi
13288 AC_SUBST(SYSTEM_BZIP2)
13289 AC_SUBST(BZIP2_CFLAGS)
13290 AC_SUBST(BZIP2_LIBS)
13292 dnl ===================================================================
13293 dnl Test whether to enable extension update
13294 dnl ===================================================================
13295 AC_MSG_CHECKING([whether to enable extension update])
13296 ENABLE_EXTENSION_UPDATE=
13297 if test "x$enable_extension_update" = "xno"; then
13298     AC_MSG_RESULT([no])
13299 else
13300     AC_MSG_RESULT([yes])
13301     ENABLE_EXTENSION_UPDATE="TRUE"
13302     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
13303     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
13305 AC_SUBST(ENABLE_EXTENSION_UPDATE)
13308 dnl ===================================================================
13309 dnl Test whether to create MSI with LIMITUI=1 (silent install)
13310 dnl ===================================================================
13311 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
13312 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
13313     AC_MSG_RESULT([no])
13314     ENABLE_SILENT_MSI=
13315 else
13316     AC_MSG_RESULT([yes])
13317     ENABLE_SILENT_MSI=TRUE
13318     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
13320 AC_SUBST(ENABLE_SILENT_MSI)
13322 AC_MSG_CHECKING([whether and how to use Xinerama])
13323 if test "$_os" = "Linux" -o "$_os" = "FreeBSD"; then
13324     if test "$x_libraries" = "default_x_libraries"; then
13325         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
13326         if test "x$XINERAMALIB" = x; then
13327            XINERAMALIB="/usr/lib"
13328         fi
13329     else
13330         XINERAMALIB="$x_libraries"
13331     fi
13332     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13333         # we have both versions, let the user decide but use the dynamic one
13334         # per default
13335         USE_XINERAMA=TRUE
13336         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13337             XINERAMA_LINK=dynamic
13338         else
13339             XINERAMA_LINK=static
13340         fi
13341     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13342         # we have only the dynamic version
13343         USE_XINERAMA=TRUE
13344         XINERAMA_LINK=dynamic
13345     elif test -e "$XINERAMALIB/libXinerama.a"; then
13346         # static version
13347         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13348             USE_XINERAMA=TRUE
13349             XINERAMA_LINK=static
13350         else
13351             USE_XINERAMA=
13352             XINERAMA_LINK=none
13353         fi
13354     else
13355         # no Xinerama
13356         USE_XINERAMA=
13357         XINERAMA_LINK=none
13358     fi
13359     if test "$USE_XINERAMA" = "TRUE"; then
13360         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13361         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13362             [AC_MSG_ERROR(Xinerama header not found.)], [])
13363         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13364         if test "x$XEXTLIB" = x; then
13365            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13366         fi
13367         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13368         if test "$_os" = "FreeBSD"; then
13369             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13370         fi
13371         if test "$_os" = "Linux"; then
13372             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13373         fi
13374         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13375             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13376     else
13377         AC_MSG_RESULT([no, libXinerama not found or wrong architecture.])
13378     fi
13379 else
13380     USE_XINERAMA=
13381     XINERAMA_LINK=none
13382     AC_MSG_RESULT([no])
13384 AC_SUBST(USE_XINERAMA)
13385 AC_SUBST(XINERAMA_LINK)
13387 dnl ===================================================================
13388 dnl Test whether to build cairo or rely on the system version
13389 dnl ===================================================================
13391 if test "$test_cairo" = "yes"; then
13392     AC_MSG_CHECKING([whether to use the system cairo])
13394     : ${with_system_cairo:=$with_system_libs}
13395     if test "$with_system_cairo" = "yes"; then
13396         SYSTEM_CAIRO=TRUE
13397         AC_MSG_RESULT([yes])
13399         PKG_CHECK_MODULES( CAIRO, cairo >= 1.8.0 )
13400         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13401         FilterLibs "${CAIRO_LIBS}"
13402         CAIRO_LIBS="${filteredlibs}"
13404         if test "$test_xrender" = "yes"; then
13405             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13406             AC_LANG_PUSH([C])
13407             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13408 #ifdef PictStandardA8
13409 #else
13410       return fail;
13411 #endif
13412 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13414             AC_LANG_POP([C])
13415         fi
13416     else
13417         AC_MSG_RESULT([no])
13418         BUILD_TYPE="$BUILD_TYPE CAIRO"
13419     fi
13421     if test "$enable_cairo_canvas" != no; then
13422         AC_DEFINE(ENABLE_CAIRO_CANVAS)
13423         ENABLE_CAIRO_CANVAS=TRUE
13424     fi
13427 AC_SUBST(CAIRO_CFLAGS)
13428 AC_SUBST(CAIRO_LIBS)
13429 AC_SUBST(ENABLE_CAIRO_CANVAS)
13430 AC_SUBST(SYSTEM_CAIRO)
13432 dnl ===================================================================
13433 dnl Test whether to use avahi
13434 dnl ===================================================================
13435 if test "$_os" = "WINNT"; then
13436     # Windows uses bundled mDNSResponder
13437     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13438 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13439     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13440                       [ENABLE_AVAHI="TRUE"])
13441     AC_DEFINE(HAVE_FEATURE_AVAHI)
13442     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13443     FilterLibs "${AVAHI_LIBS}"
13444     AVAHI_LIBS="${filteredlibs}"
13447 AC_SUBST(ENABLE_AVAHI)
13448 AC_SUBST(AVAHI_CFLAGS)
13449 AC_SUBST(AVAHI_LIBS)
13451 dnl ===================================================================
13452 dnl Test whether to use liblangtag
13453 dnl ===================================================================
13454 SYSTEM_LIBLANGTAG=
13455 AC_MSG_CHECKING([whether to use system liblangtag])
13456 if test "$with_system_liblangtag" = yes; then
13457     SYSTEM_LIBLANGTAG=TRUE
13458     AC_MSG_RESULT([yes])
13459     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
13460     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
13461     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
13462     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13463     FilterLibs "${LIBLANGTAG_LIBS}"
13464     LIBLANGTAG_LIBS="${filteredlibs}"
13465 else
13466     SYSTEM_LIBLANGTAG=
13467     AC_MSG_RESULT([no])
13468     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
13469     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
13470     if test "$COM" = "MSC"; then
13471         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
13472     else
13473         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
13474     fi
13476 AC_SUBST(SYSTEM_LIBLANGTAG)
13477 AC_SUBST(LIBLANGTAG_CFLAGS)
13478 AC_SUBST(LIBLANGTAG_LIBS)
13480 dnl ===================================================================
13481 dnl Test whether to build libpng or rely on the system version
13482 dnl ===================================================================
13484 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng],["-I${WORKDIR}/UnpackedTarball/libpng"],["-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"])
13486 dnl ===================================================================
13487 dnl Check for runtime JVM search path
13488 dnl ===================================================================
13489 if test "$ENABLE_JAVA" != ""; then
13490     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
13491     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
13492         AC_MSG_RESULT([yes])
13493         if ! test -d "$with_jvm_path"; then
13494             AC_MSG_ERROR(["$with_jvm_path" not a directory])
13495         fi
13496         if ! test -d "$with_jvm_path"jvm; then
13497             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
13498         fi
13499         JVM_ONE_PATH_CHECK="$with_jvm_path"
13500         AC_SUBST(JVM_ONE_PATH_CHECK)
13501     else
13502         AC_MSG_RESULT([no])
13503     fi
13506 dnl ===================================================================
13507 dnl Test for the presence of Ant and that it works
13508 dnl ===================================================================
13510 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
13511     ANT_HOME=; export ANT_HOME
13512     WITH_ANT_HOME=; export WITH_ANT_HOME
13513     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
13514         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
13515             if test "$_os" = "WINNT"; then
13516                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
13517             else
13518                 with_ant_home="$LODE_HOME/opt/ant"
13519             fi
13520         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
13521             with_ant_home="$LODE_HOME/opt/ant"
13522         fi
13523     fi
13524     if test -z "$with_ant_home"; then
13525         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
13526     else
13527         if test "$_os" = "WINNT"; then
13528             # AC_PATH_PROGS needs unix path
13529             with_ant_home=`cygpath -u "$with_ant_home"`
13530         fi
13531         AbsolutePath "$with_ant_home"
13532         with_ant_home=$absolute_path
13533         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
13534         WITH_ANT_HOME=$with_ant_home
13535         ANT_HOME=$with_ant_home
13536     fi
13538     if test -z "$ANT"; then
13539         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
13540     else
13541         # resolve relative or absolute symlink
13542         while test -h "$ANT"; do
13543             a_cwd=`pwd`
13544             a_basename=`basename "$ANT"`
13545             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
13546             cd "`dirname "$ANT"`"
13547             cd "`dirname "$a_script"`"
13548             ANT="`pwd`"/"`basename "$a_script"`"
13549             cd "$a_cwd"
13550         done
13552         AC_MSG_CHECKING([if $ANT works])
13553         mkdir -p conftest.dir
13554         a_cwd=$(pwd)
13555         cd conftest.dir
13556         cat > conftest.java << EOF
13557         public class conftest {
13558             int testmethod(int a, int b) {
13559                     return a + b;
13560             }
13561         }
13564         cat > conftest.xml << EOF
13565         <project name="conftest" default="conftest">
13566         <target name="conftest">
13567             <javac srcdir="." includes="conftest.java">
13568             </javac>
13569         </target>
13570         </project>
13573         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
13574         if test $? = 0 -a -f ./conftest.class; then
13575             AC_MSG_RESULT([Ant works])
13576             if test -z "$WITH_ANT_HOME"; then
13577                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
13578                 if test -z "$ANT_HOME"; then
13579                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
13580                 fi
13581             else
13582                 ANT_HOME="$WITH_ANT_HOME"
13583             fi
13584         else
13585             echo "configure: Ant test failed" >&5
13586             cat conftest.java >&5
13587             cat conftest.xml >&5
13588             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
13589         fi
13590         cd "$a_cwd"
13591         rm -fr conftest.dir
13592     fi
13593     if test -z "$ANT_HOME"; then
13594         ANT_HOME="NO_ANT_HOME"
13595     else
13596         PathFormat "$ANT_HOME"
13597         ANT_HOME="$formatted_path"
13598         PathFormat "$ANT"
13599         ANT="$formatted_path"
13600     fi
13602     dnl Checking for ant.jar
13603     if test "$ANT_HOME" != "NO_ANT_HOME"; then
13604         AC_MSG_CHECKING([Ant lib directory])
13605         if test -f $ANT_HOME/lib/ant.jar; then
13606             ANT_LIB="$ANT_HOME/lib"
13607         else
13608             if test -f $ANT_HOME/ant.jar; then
13609                 ANT_LIB="$ANT_HOME"
13610             else
13611                 if test -f /usr/share/java/ant.jar; then
13612                     ANT_LIB=/usr/share/java
13613                 else
13614                     if test -f /usr/share/ant-core/lib/ant.jar; then
13615                         ANT_LIB=/usr/share/ant-core/lib
13616                     else
13617                         if test -f $ANT_HOME/lib/ant/ant.jar; then
13618                             ANT_LIB="$ANT_HOME/lib/ant"
13619                         else
13620                             if test -f /usr/share/lib/ant/ant.jar; then
13621                                 ANT_LIB=/usr/share/lib/ant
13622                             else
13623                                 AC_MSG_ERROR([Ant libraries not found!])
13624                             fi
13625                         fi
13626                     fi
13627                 fi
13628             fi
13629         fi
13630         PathFormat "$ANT_LIB"
13631         ANT_LIB="$formatted_path"
13632         AC_MSG_RESULT([Ant lib directory found.])
13633     fi
13635     ant_minver=1.6.0
13636     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
13638     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
13639     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
13640     ant_version_major=`echo $ant_version | cut -d. -f1`
13641     ant_version_minor=`echo $ant_version | cut -d. -f2`
13642     echo "configure: ant_version $ant_version " >&5
13643     echo "configure: ant_version_major $ant_version_major " >&5
13644     echo "configure: ant_version_minor $ant_version_minor " >&5
13645     if test "$ant_version_major" -ge "2"; then
13646         AC_MSG_RESULT([yes, $ant_version])
13647     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
13648         AC_MSG_RESULT([yes, $ant_version])
13649     else
13650         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
13651     fi
13653     rm -f conftest* core core.* *.core
13655 AC_SUBST(ANT)
13656 AC_SUBST(ANT_HOME)
13657 AC_SUBST(ANT_LIB)
13659 OOO_JUNIT_JAR=
13660 HAMCREST_JAR=
13661 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
13662     AC_MSG_CHECKING([for JUnit 4])
13663     if test "$with_junit" = "yes"; then
13664         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
13665             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
13666         elif test -e /usr/share/java/junit4.jar; then
13667             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
13668         else
13669            if test -e /usr/share/lib/java/junit.jar; then
13670               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
13671            else
13672               OOO_JUNIT_JAR=/usr/share/java/junit.jar
13673            fi
13674         fi
13675     else
13676         OOO_JUNIT_JAR=$with_junit
13677     fi
13678     if test "$_os" = "WINNT"; then
13679         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
13680     fi
13681     printf 'import org.junit.Before;' > conftest.java
13682     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13683         AC_MSG_RESULT([$OOO_JUNIT_JAR])
13684     else
13685         AC_MSG_ERROR(
13686 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
13687  specify its pathname via --with-junit=..., or disable it via --without-junit])
13688     fi
13689     rm -f conftest.class conftest.java
13690     if test $OOO_JUNIT_JAR != ""; then
13691         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
13692     fi
13694     AC_MSG_CHECKING([for included Hamcrest])
13695     printf 'import org.hamcrest.BaseDescription;' > conftest.java
13696     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13697         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
13698     else
13699         AC_MSG_RESULT([Not included])
13700         AC_MSG_CHECKING([for standalone hamcrest jar.])
13701         if test "$with_hamcrest" = "yes"; then
13702             if test -e /usr/share/lib/java/hamcrest.jar; then
13703                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
13704             elif test -e /usr/share/java/hamcrest/core.jar; then
13705                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
13706             elif test -e /usr/share/java/hamcrest/hamcrest.jar; then
13707                 HAMCREST_JAR=/usr/share/java/hamcrest/hamcrest.jar
13708             else
13709                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
13710             fi
13711         else
13712             HAMCREST_JAR=$with_hamcrest
13713         fi
13714         if test "$_os" = "WINNT"; then
13715             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
13716         fi
13717         if "$JAVACOMPILER" -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
13718             AC_MSG_RESULT([$HAMCREST_JAR])
13719         else
13720             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),
13721                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
13722         fi
13723     fi
13724     rm -f conftest.class conftest.java
13726 AC_SUBST(OOO_JUNIT_JAR)
13727 AC_SUBST(HAMCREST_JAR)
13730 AC_SUBST(SCPDEFS)
13733 # check for wget and curl
13735 WGET=
13736 CURL=
13738 if test "$enable_fetch_external" != "no"; then
13740 CURL=`which curl 2>/dev/null`
13742 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
13743     # wget new enough?
13744     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
13745     if test $? -eq 0; then
13746         WGET=$i
13747         break
13748     fi
13749 done
13751 if test -z "$WGET" -a -z "$CURL"; then
13752     AC_MSG_ERROR([neither wget nor curl found!])
13757 AC_SUBST(WGET)
13758 AC_SUBST(CURL)
13761 # check for sha256sum
13763 SHA256SUM=
13765 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
13766     eval "$i -a 256 --version" > /dev/null 2>&1
13767     ret=$?
13768     if test $ret -eq 0; then
13769         SHA256SUM="$i -a 256"
13770         break
13771     fi
13772 done
13774 if test -z "$SHA256SUM"; then
13775     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
13776         eval "$i --version" > /dev/null 2>&1
13777         ret=$?
13778         if test $ret -eq 0; then
13779             SHA256SUM=$i
13780             break
13781         fi
13782     done
13785 if test -z "$SHA256SUM"; then
13786     AC_MSG_ERROR([no sha256sum found!])
13789 AC_SUBST(SHA256SUM)
13791 dnl ===================================================================
13792 dnl Dealing with l10n options
13793 dnl ===================================================================
13794 AC_MSG_CHECKING([which languages to be built])
13795 # get list of all languages
13796 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
13797 # the sed command does the following:
13798 #   + if a line ends with a backslash, append the next line to it
13799 #   + adds " on the beginning of the value (after =)
13800 #   + adds " at the end of the value
13801 #   + removes en-US; we want to put it on the beginning
13802 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
13803 [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)]
13804 ALL_LANGS="en-US $completelangiso"
13805 # check the configured localizations
13806 WITH_LANG="$with_lang"
13808 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
13809 # (Norwegian is "nb" and "nn".)
13810 if test "$WITH_LANG" = "no"; then
13811     WITH_LANG=
13814 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
13815     AC_MSG_RESULT([en-US])
13816 else
13817     AC_MSG_RESULT([$WITH_LANG])
13818     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
13819     if test -z "$MSGFMT"; then
13820         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
13821             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
13822         elif test -x "/opt/lo/bin/msgfmt"; then
13823             MSGFMT="/opt/lo/bin/msgfmt"
13824         else
13825             AC_CHECK_PROGS(MSGFMT, [msgfmt])
13826             if test -z "$MSGFMT"; then
13827                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
13828             fi
13829         fi
13830     fi
13831     if test -z "$MSGUNIQ"; then
13832         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
13833             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
13834         elif test -x "/opt/lo/bin/msguniq"; then
13835             MSGUNIQ="/opt/lo/bin/msguniq"
13836         else
13837             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
13838             if test -z "$MSGUNIQ"; then
13839                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
13840             fi
13841         fi
13842     fi
13844 AC_SUBST(MSGFMT)
13845 AC_SUBST(MSGUNIQ)
13846 # check that the list is valid
13847 for lang in $WITH_LANG; do
13848     test "$lang" = "ALL" && continue
13849     # need to check for the exact string, so add space before and after the list of all languages
13850     for vl in $ALL_LANGS; do
13851         if test "$vl" = "$lang"; then
13852            break
13853         fi
13854     done
13855     if test "$vl" != "$lang"; then
13856         # if you're reading this - you prolly quoted your languages remove the quotes ...
13857         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
13858     fi
13859 done
13860 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
13861     echo $WITH_LANG | grep -q en-US
13862     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
13864 # list with substituted ALL
13865 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
13866 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
13867 test "$WITH_LANG" = "en-US" && WITH_LANG=
13868 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
13869     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
13870     ALL_LANGS=`echo $ALL_LANGS qtz`
13872 AC_SUBST(ALL_LANGS)
13873 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
13874 AC_SUBST(WITH_LANG)
13875 AC_SUBST(WITH_LANG_LIST)
13876 AC_SUBST(GIT_NEEDED_SUBMODULES)
13878 WITH_POOR_HELP_LOCALIZATIONS=
13879 if test -d "$SRC_ROOT/translations/source"; then
13880     for l in `ls -1 $SRC_ROOT/translations/source`; do
13881         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
13882             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
13883         fi
13884     done
13886 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
13888 if test -n "$with_locales"; then
13889     WITH_LOCALES="$with_locales"
13891     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
13892     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
13893     # config_host/config_locales.h.in
13894     for locale in $WITH_LOCALES; do
13895         lang=${locale%_*}
13897         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
13899         case $lang in
13900         hi|mr*ne)
13901             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
13902             ;;
13903         bg|ru)
13904             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
13905             ;;
13906         esac
13907     done
13908 else
13909     AC_DEFINE(WITH_LOCALE_ALL)
13911 AC_SUBST(WITH_LOCALES)
13913 dnl git submodule update --reference
13914 dnl ===================================================================
13915 if test -n "${GIT_REFERENCE_SRC}"; then
13916     for repo in ${GIT_NEEDED_SUBMODULES}; do
13917         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
13918             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
13919         fi
13920     done
13922 AC_SUBST(GIT_REFERENCE_SRC)
13924 dnl git submodules linked dirs
13925 dnl ===================================================================
13926 if test -n "${GIT_LINK_SRC}"; then
13927     for repo in ${GIT_NEEDED_SUBMODULES}; do
13928         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
13929             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
13930         fi
13931     done
13933 AC_SUBST(GIT_LINK_SRC)
13935 dnl branding
13936 dnl ===================================================================
13937 AC_MSG_CHECKING([for alternative branding images directory])
13938 # initialize mapped arrays
13939 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
13940 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
13942 if test -z "$with_branding" -o "$with_branding" = "no"; then
13943     AC_MSG_RESULT([none])
13944     DEFAULT_BRAND_IMAGES="$brand_files"
13945 else
13946     if ! test -d $with_branding ; then
13947         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
13948     else
13949         AC_MSG_RESULT([$with_branding])
13950         CUSTOM_BRAND_DIR="$with_branding"
13951         for lfile in $brand_files
13952         do
13953             if ! test -f $with_branding/$lfile ; then
13954                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
13955                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
13956             else
13957                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
13958             fi
13959         done
13960         check_for_progress="yes"
13961     fi
13963 AC_SUBST([BRAND_INTRO_IMAGES])
13964 AC_SUBST([CUSTOM_BRAND_DIR])
13965 AC_SUBST([CUSTOM_BRAND_IMAGES])
13966 AC_SUBST([DEFAULT_BRAND_IMAGES])
13969 AC_MSG_CHECKING([for 'intro' progress settings])
13970 PROGRESSBARCOLOR=
13971 PROGRESSSIZE=
13972 PROGRESSPOSITION=
13973 PROGRESSFRAMECOLOR=
13974 PROGRESSTEXTCOLOR=
13975 PROGRESSTEXTBASELINE=
13977 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
13978     source "$with_branding/progress.conf"
13979     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
13980 else
13981     AC_MSG_RESULT([none])
13984 AC_SUBST(PROGRESSBARCOLOR)
13985 AC_SUBST(PROGRESSSIZE)
13986 AC_SUBST(PROGRESSPOSITION)
13987 AC_SUBST(PROGRESSFRAMECOLOR)
13988 AC_SUBST(PROGRESSTEXTCOLOR)
13989 AC_SUBST(PROGRESSTEXTBASELINE)
13992 dnl ===================================================================
13993 dnl Custom build version
13994 dnl ===================================================================
13995 AC_MSG_CHECKING([for extra build ID])
13996 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
13997     EXTRA_BUILDID="$with_extra_buildid"
13999 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
14000 if test -n "$EXTRA_BUILDID" ; then
14001     AC_MSG_RESULT([$EXTRA_BUILDID])
14002 else
14003     AC_MSG_RESULT([not set])
14005 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
14007 OOO_VENDOR=
14008 AC_MSG_CHECKING([for vendor])
14009 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
14010     OOO_VENDOR="$USERNAME"
14012     if test -z "$OOO_VENDOR"; then
14013         OOO_VENDOR="$USER"
14014     fi
14016     if test -z "$OOO_VENDOR"; then
14017         OOO_VENDOR="`id -u -n`"
14018     fi
14020     AC_MSG_RESULT([not set, using $OOO_VENDOR])
14021 else
14022     OOO_VENDOR="$with_vendor"
14023     AC_MSG_RESULT([$OOO_VENDOR])
14025 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
14026 AC_SUBST(OOO_VENDOR)
14028 if test "$_os" = "Android" ; then
14029     ANDROID_PACKAGE_NAME=
14030     AC_MSG_CHECKING([for Android package name])
14031     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
14032         if test -n "$ENABLE_DEBUG"; then
14033             # Default to the package name that makes ndk-gdb happy.
14034             ANDROID_PACKAGE_NAME="org.libreoffice"
14035         else
14036             ANDROID_PACKAGE_NAME="org.example.libreoffice"
14037         fi
14039         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
14040     else
14041         ANDROID_PACKAGE_NAME="$with_android_package_name"
14042         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
14043     fi
14044     AC_SUBST(ANDROID_PACKAGE_NAME)
14047 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
14048 if test "$with_compat_oowrappers" = "yes"; then
14049     WITH_COMPAT_OOWRAPPERS=TRUE
14050     AC_MSG_RESULT(yes)
14051 else
14052     WITH_COMPAT_OOWRAPPERS=
14053     AC_MSG_RESULT(no)
14055 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
14057 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{print tolower($0)}'`
14058 AC_MSG_CHECKING([for install dirname])
14059 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
14060     INSTALLDIRNAME="$with_install_dirname"
14062 AC_MSG_RESULT([$INSTALLDIRNAME])
14063 AC_SUBST(INSTALLDIRNAME)
14065 AC_MSG_CHECKING([for prefix])
14066 test "x$prefix" = xNONE && prefix=$ac_default_prefix
14067 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
14068 PREFIXDIR="$prefix"
14069 AC_MSG_RESULT([$PREFIXDIR])
14070 AC_SUBST(PREFIXDIR)
14072 LIBDIR=[$(eval echo $(eval echo $libdir))]
14073 AC_SUBST(LIBDIR)
14075 DATADIR=[$(eval echo $(eval echo $datadir))]
14076 AC_SUBST(DATADIR)
14078 MANDIR=[$(eval echo $(eval echo $mandir))]
14079 AC_SUBST(MANDIR)
14081 DOCDIR=[$(eval echo $(eval echo $docdir))]
14082 AC_SUBST(DOCDIR)
14084 BINDIR=[$(eval echo $(eval echo $bindir))]
14085 AC_SUBST(BINDIR)
14087 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
14088 AC_SUBST(INSTALLDIR)
14090 TESTINSTALLDIR="${BUILDDIR}/test-install"
14091 AC_SUBST(TESTINSTALLDIR)
14094 # ===================================================================
14095 # OAuth2 id and secrets
14096 # ===================================================================
14098 AC_MSG_CHECKING([for Google Drive client id and secret])
14099 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
14100     AC_MSG_RESULT([not set])
14101     GDRIVE_CLIENT_ID="\"\""
14102     GDRIVE_CLIENT_SECRET="\"\""
14103 else
14104     AC_MSG_RESULT([set])
14105     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
14106     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
14108 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
14109 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
14111 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
14112 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
14113     AC_MSG_RESULT([not set])
14114     ALFRESCO_CLOUD_CLIENT_ID="\"\""
14115     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
14116 else
14117     AC_MSG_RESULT([set])
14118     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
14119     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
14121 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
14122 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
14124 AC_MSG_CHECKING([for OneDrive client id and secret])
14125 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
14126     AC_MSG_RESULT([not set])
14127     ONEDRIVE_CLIENT_ID="\"\""
14128     ONEDRIVE_CLIENT_SECRET="\"\""
14129 else
14130     AC_MSG_RESULT([set])
14131     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
14132     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
14134 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
14135 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
14138 dnl ===================================================================
14139 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
14140 dnl --enable-dependency-tracking configure option
14141 dnl ===================================================================
14142 AC_MSG_CHECKING([whether to enable dependency tracking])
14143 if test "$enable_dependency_tracking" = "no"; then
14144     nodep=TRUE
14145     AC_MSG_RESULT([no])
14146 else
14147     AC_MSG_RESULT([yes])
14149 AC_SUBST(nodep)
14151 dnl ===================================================================
14152 dnl Number of CPUs to use during the build
14153 dnl ===================================================================
14154 AC_MSG_CHECKING([for number of processors to use])
14155 # plain --with-parallelism is just the default
14156 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
14157     if test "$with_parallelism" = "no"; then
14158         PARALLELISM=0
14159     else
14160         PARALLELISM=$with_parallelism
14161     fi
14162 else
14163     if test "$enable_icecream" = "yes"; then
14164         PARALLELISM="40"
14165     else
14166         case `uname -s` in
14168         Darwin|FreeBSD|NetBSD|OpenBSD)
14169             PARALLELISM=`sysctl -n hw.ncpu`
14170             ;;
14172         Linux)
14173             PARALLELISM=`getconf _NPROCESSORS_ONLN`
14174         ;;
14175         # what else than above does profit here *and* has /proc?
14176         *)
14177             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
14178             ;;
14179         esac
14181         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
14182         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
14183     fi
14186 if test "$no_parallelism_make" = "YES" && test $PARALLELISM -gt 1; then
14187     if test -z "$with_parallelism"; then
14188             AC_MSG_WARN([gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this.])
14189             add_warning "gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this."
14190             PARALLELISM="1"
14191     else
14192         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."
14193     fi
14196 if test $PARALLELISM -eq 0; then
14197     AC_MSG_RESULT([explicit make -j option needed])
14198 else
14199     AC_MSG_RESULT([$PARALLELISM])
14201 AC_SUBST(PARALLELISM)
14203 IWYU_PATH="$with_iwyu"
14204 AC_SUBST(IWYU_PATH)
14205 if test ! -z "$IWYU_PATH"; then
14206     if test ! -f "$IWYU_PATH"; then
14207         AC_MSG_ERROR([cannot find include-what-you-use binary specified by --with-iwyu])
14208     fi
14212 # Set up ILIB for MSVC build
14214 ILIB1=
14215 if test "$build_os" = "cygwin"; then
14216     ILIB="."
14217     if test -n "$JAVA_HOME"; then
14218         ILIB="$ILIB;$JAVA_HOME/lib"
14219     fi
14220     ILIB1=-link
14221     ILIB="$ILIB;$COMPATH/lib/$WIN_HOST_ARCH"
14222     ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/$WIN_HOST_ARCH"
14223     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14224     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14225     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
14226         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14227         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14228     fi
14229     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
14230     ucrtlibpath_formatted=$formatted_path
14231     ILIB="$ILIB;$ucrtlibpath_formatted"
14232     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
14233     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
14234         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/lib"
14235     else
14236         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
14237     fi
14239     if test "$cross_compiling" != "yes"; then
14240         ILIB_FOR_BUILD="$ILIB"
14241     fi
14243 AC_SUBST(ILIB)
14244 AC_SUBST(ILIB_FOR_BUILD)
14246 # ===================================================================
14247 # Creating bigger shared library to link against
14248 # ===================================================================
14249 AC_MSG_CHECKING([whether to create huge library])
14250 MERGELIBS=
14252 if test $_os = iOS -o $_os = Android; then
14253     # Never any point in mergelibs for these as we build just static
14254     # libraries anyway...
14255     enable_mergelibs=no
14258 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
14259     if test $_os != Linux -a $_os != WINNT; then
14260         add_warning "--enable-mergelibs is not tested for this platform"
14261     fi
14262     MERGELIBS="TRUE"
14263     AC_MSG_RESULT([yes])
14264     AC_DEFINE(ENABLE_MERGELIBS)
14265 else
14266     AC_MSG_RESULT([no])
14268 AC_SUBST([MERGELIBS])
14270 dnl ===================================================================
14271 dnl icerun is a wrapper that stops us spawning tens of processes
14272 dnl locally - for tools that can't be executed on the compile cluster
14273 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
14274 dnl ===================================================================
14275 AC_MSG_CHECKING([whether to use icerun wrapper])
14276 ICECREAM_RUN=
14277 if test "$enable_icecream" = "yes" && which icerun >/dev/null 2>&1 ; then
14278     ICECREAM_RUN=icerun
14279     AC_MSG_RESULT([yes])
14280 else
14281     AC_MSG_RESULT([no])
14283 AC_SUBST(ICECREAM_RUN)
14285 dnl ===================================================================
14286 dnl Setup the ICECC_VERSION for the build the same way it was set for
14287 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
14288 dnl ===================================================================
14289 x_ICECC_VERSION=[\#]
14290 if test -n "$ICECC_VERSION" ; then
14291     x_ICECC_VERSION=
14293 AC_SUBST(x_ICECC_VERSION)
14294 AC_SUBST(ICECC_VERSION)
14296 dnl ===================================================================
14298 AC_MSG_CHECKING([MPL subset])
14299 MPL_SUBSET=
14301 if test "$enable_mpl_subset" = "yes"; then
14302     warn_report=false
14303     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
14304         warn_report=true
14305     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
14306         warn_report=true
14307     fi
14308     if test "$warn_report" = "true"; then
14309         AC_MSG_ERROR([need to --disable-report-builder - extended database report builder.])
14310     fi
14311     if test "x$enable_postgresql_sdbc" != "xno"; then
14312         AC_MSG_ERROR([need to --disable-postgresql-sdbc - the PostgreSQL database backend.])
14313     fi
14314     if test "$enable_lotuswordpro" = "yes"; then
14315         AC_MSG_ERROR([need to --disable-lotuswordpro - a Lotus Word Pro file format import filter.])
14316     fi
14317     if test "$WITH_WEBDAV" = "neon"; then
14318         AC_MSG_ERROR([need --with-webdav=serf or --without-webdav - webdav support.])
14319     fi
14320     if test -n "$ENABLE_POPPLER"; then
14321         if test "x$SYSTEM_POPPLER" = "x"; then
14322             AC_MSG_ERROR([need to disable PDF import via poppler or use system library])
14323         fi
14324     fi
14325     # cf. m4/libo_check_extension.m4
14326     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
14327         AC_MSG_ERROR([need to disable extra extensions '$WITH_EXTRA_EXTENSIONS'])
14328     fi
14329     for theme in $WITH_THEMES; do
14330         case $theme in
14331         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
14332             AC_MSG_ERROR([need to disable icon themes from '$WITH_THEMES': $theme present, use --with-theme=colibre]) ;;
14333         *) : ;;
14334         esac
14335     done
14337     ENABLE_OPENGL_TRANSITIONS=
14339     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
14340         AC_MSG_ERROR([need to --disable-lpsolve - calc linear programming solver.])
14341     fi
14343     MPL_SUBSET="TRUE"
14344     AC_DEFINE(MPL_HAVE_SUBSET)
14345     AC_MSG_RESULT([only])
14346 else
14347     AC_MSG_RESULT([no restrictions])
14349 AC_SUBST(MPL_SUBSET)
14351 dnl ===================================================================
14353 AC_MSG_CHECKING([formula logger])
14354 ENABLE_FORMULA_LOGGER=
14356 if test "x$enable_formula_logger" = "xyes"; then
14357     AC_MSG_RESULT([yes])
14358     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14359     ENABLE_FORMULA_LOGGER=TRUE
14360 elif test -n "$ENABLE_DBGUTIL" ; then
14361     AC_MSG_RESULT([yes])
14362     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14363     ENABLE_FORMULA_LOGGER=TRUE
14364 else
14365     AC_MSG_RESULT([no])
14368 AC_SUBST(ENABLE_FORMULA_LOGGER)
14370 dnl ===================================================================
14371 dnl Checking for active Antivirus software.
14372 dnl ===================================================================
14374 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
14375     AC_MSG_CHECKING([for active Antivirus software])
14376     ANTIVIRUS_LIST=`cscript.exe //Nologo $SRC_ROOT/antivirusDetection.vbs`
14377     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
14378         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
14379             AC_MSG_RESULT([found])
14380             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
14381             echo $EICAR_STRING > $SRC_ROOT/eicar
14382             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
14383             rm $SRC_ROOT/eicar
14384             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14385                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14386             fi
14387             echo $EICAR_STRING > $BUILDDIR/eicar
14388             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
14389             rm $BUILDDIR/eicar
14390             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14391                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14392             fi
14393             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"
14394         else
14395             AC_MSG_RESULT([not found])
14396         fi
14397     else
14398         AC_MSG_RESULT([n/a])
14399     fi
14402 dnl ===================================================================
14403 dnl Setting up the environment.
14404 dnl ===================================================================
14405 AC_MSG_NOTICE([setting up the build environment variables...])
14407 AC_SUBST(COMPATH)
14409 if test "$build_os" = "cygwin"; then
14410     if test -d "$COMPATH/atlmfc/lib/spectre"; then
14411         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
14412         ATL_INCLUDE="$COMPATH/atlmfc/include"
14413     elif test -d "$COMPATH/atlmfc/lib"; then
14414         ATL_LIB="$COMPATH/atlmfc/lib"
14415         ATL_INCLUDE="$COMPATH/atlmfc/include"
14416     else
14417         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
14418         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
14419     fi
14420     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
14421     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
14422     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
14424     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
14425     PathFormat "/usr/bin/find.exe"
14426     FIND="$formatted_path"
14427     PathFormat "/usr/bin/sort.exe"
14428     SORT="$formatted_path"
14429     PathFormat "/usr/bin/grep.exe"
14430     WIN_GREP="$formatted_path"
14431     PathFormat "/usr/bin/ls.exe"
14432     WIN_LS="$formatted_path"
14433     PathFormat "/usr/bin/touch.exe"
14434     WIN_TOUCH="$formatted_path"
14435 else
14436     FIND=find
14437     SORT=sort
14440 AC_SUBST(ATL_INCLUDE)
14441 AC_SUBST(ATL_LIB)
14442 AC_SUBST(FIND)
14443 AC_SUBST(SORT)
14444 AC_SUBST(WIN_GREP)
14445 AC_SUBST(WIN_LS)
14446 AC_SUBST(WIN_TOUCH)
14448 AC_SUBST(BUILD_TYPE)
14450 AC_SUBST(SOLARINC)
14452 PathFormat "$PERL"
14453 PERL="$formatted_path"
14454 AC_SUBST(PERL)
14456 if test -n "$TMPDIR"; then
14457     TEMP_DIRECTORY="$TMPDIR"
14458 else
14459     TEMP_DIRECTORY="/tmp"
14461 if test "$build_os" = "cygwin"; then
14462     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
14464 AC_SUBST(TEMP_DIRECTORY)
14466 # setup the PATH for the environment
14467 if test -n "$LO_PATH_FOR_BUILD"; then
14468     LO_PATH="$LO_PATH_FOR_BUILD"
14469     case "$host_os" in
14470     cygwin*|wsl*)
14471         pathmunge "$MSVC_HOST_PATH" "before"
14472         ;;
14473     esac
14474 else
14475     LO_PATH="$PATH"
14477     case "$host_os" in
14479     aix*|dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
14480         if test "$ENABLE_JAVA" != ""; then
14481             pathmunge "$JAVA_HOME/bin" "after"
14482         fi
14483         ;;
14485     cygwin*|wsl*)
14486         # Win32 make needs native paths
14487         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
14488             LO_PATH=`cygpath -p -m "$PATH"`
14489         fi
14490         if test "$WIN_BUILD_ARCH" = "x64"; then
14491             # needed for msi packaging
14492             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
14493         fi
14494         # .NET 4.6 and higher don't have bin directory
14495         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
14496             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
14497         fi
14498         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
14499         pathmunge "$CSC_PATH" "before"
14500         pathmunge "$MIDL_PATH" "before"
14501         pathmunge "$AL_PATH" "before"
14502         pathmunge "$MSVC_MULTI_PATH" "before"
14503         pathmunge "$MSVC_BUILD_PATH" "before"
14504         if test -n "$MSBUILD_PATH" ; then
14505             pathmunge "$MSBUILD_PATH" "before"
14506         fi
14507         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
14508         if test "$ENABLE_JAVA" != ""; then
14509             if test -d "$JAVA_HOME/jre/bin/client"; then
14510                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
14511             fi
14512             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
14513                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
14514             fi
14515             pathmunge "$JAVA_HOME/bin" "before"
14516         fi
14517         pathmunge "$MSVC_HOST_PATH" "before"
14518         ;;
14520     solaris*)
14521         pathmunge "/usr/css/bin" "before"
14522         if test "$ENABLE_JAVA" != ""; then
14523             pathmunge "$JAVA_HOME/bin" "after"
14524         fi
14525         ;;
14526     esac
14529 AC_SUBST(LO_PATH)
14531 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
14532 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
14533     x_LO_ELFCHECK_ALLOWLIST=
14534 else
14535     x_LO_ELFCHECK_ALLOWLIST=[\#]
14537 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
14538 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
14540 libo_FUZZ_SUMMARY
14542 # Generate a configuration sha256 we can use for deps
14543 if test -f config_host.mk; then
14544     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
14546 if test -f config_host_lang.mk; then
14547     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
14550 CFLAGS=$my_original_CFLAGS
14551 CXXFLAGS=$my_original_CXXFLAGS
14552 CPPFLAGS=$my_original_CPPFLAGS
14554 AC_CONFIG_LINKS([include:include])
14556 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
14557 # BUILD platform configuration] - otherwise breaks cross building
14558 AC_CONFIG_FILES([config_host.mk
14559                  config_host_lang.mk
14560                  Makefile
14561                  bin/bffvalidator.sh
14562                  bin/odfvalidator.sh
14563                  bin/officeotron.sh
14564                  hardened_runtime.xcent
14565                  instsetoo_native/util/openoffice.lst
14566                  sysui/desktop/macosx/Info.plist
14567                  vs-code-template.code-workspace:.vscode/vs-code-template.code-workspace.in])
14568 AC_CONFIG_HEADERS([config_host/config_buildid.h])
14569 AC_CONFIG_HEADERS([config_host/config_box2d.h])
14570 AC_CONFIG_HEADERS([config_host/config_clang.h])
14571 AC_CONFIG_HEADERS([config_host/config_crypto.h])
14572 AC_CONFIG_HEADERS([config_host/config_dconf.h])
14573 AC_CONFIG_HEADERS([config_host/config_eot.h])
14574 AC_CONFIG_HEADERS([config_host/config_extensions.h])
14575 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
14576 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
14577 AC_CONFIG_HEADERS([config_host/config_dbus.h])
14578 AC_CONFIG_HEADERS([config_host/config_features.h])
14579 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
14580 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
14581 AC_CONFIG_HEADERS([config_host/config_firebird.h])
14582 AC_CONFIG_HEADERS([config_host/config_folders.h])
14583 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
14584 AC_CONFIG_HEADERS([config_host/config_gio.h])
14585 AC_CONFIG_HEADERS([config_host/config_global.h])
14586 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
14587 AC_CONFIG_HEADERS([config_host/config_java.h])
14588 AC_CONFIG_HEADERS([config_host/config_langs.h])
14589 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
14590 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
14591 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
14592 AC_CONFIG_HEADERS([config_host/config_locales.h])
14593 AC_CONFIG_HEADERS([config_host/config_mpl.h])
14594 AC_CONFIG_HEADERS([config_host/config_oox.h])
14595 AC_CONFIG_HEADERS([config_host/config_options.h])
14596 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
14597 AC_CONFIG_HEADERS([config_host/config_zxing.h])
14598 AC_CONFIG_HEADERS([config_host/config_skia.h])
14599 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
14600 AC_CONFIG_HEADERS([config_host/config_vendor.h])
14601 AC_CONFIG_HEADERS([config_host/config_vcl.h])
14602 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
14603 AC_CONFIG_HEADERS([config_host/config_version.h])
14604 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
14605 AC_CONFIG_HEADERS([config_host/config_poppler.h])
14606 AC_CONFIG_HEADERS([config_host/config_python.h])
14607 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
14608 AC_OUTPUT
14610 if test "$CROSS_COMPILING" = TRUE; then
14611     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
14614 # touch the config timestamp file
14615 if test ! -f config_host.mk.stamp; then
14616     echo > config_host.mk.stamp
14617 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
14618     echo "Host Configuration unchanged - avoiding scp2 stamp update"
14619 else
14620     echo > config_host.mk.stamp
14623 # touch the config lang timestamp file
14624 if test ! -f config_host_lang.mk.stamp; then
14625     echo > config_host_lang.mk.stamp
14626 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
14627     echo "Language Configuration unchanged - avoiding scp2 stamp update"
14628 else
14629     echo > config_host_lang.mk.stamp
14633 if test \( "$STALE_MAKE" = "TRUE" -o "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE" \) \
14634         -a "$build_os" = "cygwin"; then
14636 cat << _EOS
14637 ****************************************************************************
14638 WARNING:
14639 Your make version is known to be horribly slow, and hard to debug
14640 problems with. To get a reasonably functional make please do:
14642 to install a pre-compiled binary make for Win32
14644  mkdir -p /opt/lo/bin
14645  cd /opt/lo/bin
14646  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
14647  cp make-4.2.1-msvc.exe make
14648  chmod +x make
14650 to install from source:
14651 place yourself in a working directory of you choice.
14653  git clone git://git.savannah.gnu.org/make.git
14655  [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"]
14656  set PATH=%PATH%;C:\Cygwin\bin
14657  [or Cygwin64, if that is what you have]
14658  cd path-to-make-repo-you-cloned-above
14659  build_w32.bat --without-guile
14661 should result in a WinRel/gnumake.exe.
14662 Copy it to the Cygwin /opt/lo/bin directory as make.exe
14664 Then re-run autogen.sh
14666 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
14667 Alternatively, you can install the 'new' make where ever you want and make sure that `which make` finds it.
14669 _EOS
14670 if test "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE"; then
14671     AC_MSG_ERROR([no file function found; the build will fail without it; use GNU make 4.0 or later])
14676 cat << _EOF
14677 ****************************************************************************
14679 To build, run:
14680 $GNUMAKE
14682 To view some help, run:
14683 $GNUMAKE help
14685 _EOF
14687 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
14688     cat << _EOF
14689 After the build has finished successfully, you can immediately run what you built using the command:
14690 _EOF
14692     if test $_os = Darwin; then
14693         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
14694     else
14695         echo instdir/program/soffice
14696     fi
14697     cat << _EOF
14699 If you want to run the smoketest, run:
14700 $GNUMAKE check
14702 _EOF
14705 if test -s "$WARNINGS_FILE_FOR_BUILD"; then
14706     echo "BUILD / cross-toolset config, repeated ($WARNINGS_FILE_FOR_BUILD)"
14707     cat "$WARNINGS_FILE_FOR_BUILD"
14708     echo
14711 if test -s "$WARNINGS_FILE"; then
14712     echo "HOST config ($WARNINGS_FILE)"
14713     cat "$WARNINGS_FILE"
14716 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: